public static function execute(SR_Player $player, array $args) { if ($player->isFighting()) { $player->msg('1036'); // $player->message('This does not work in combat'); return false; } $argc = count($args); if ($argc < 1 || $argc > 2) { $player->message(Shadowhelp::getHelp($player, 'givekp')); return false; } if ($argc === 2) { if (false === ($target = Shadowfunc::getFriendlyTarget($player, $args[0]))) { $player->msg('1028', array($args[0])); // $player->message(sprintf('%s is not here or the name is ambigous.', $args[0])); return false; } $place = $args[1]; $targets = array($target); } else { $place = $args[0]; $targets = $player->getParty()->getMembers(); } if (false === ($tlc = Shadowcmd_goto::getTLCByArgMulticity($player, $place))) { $player->msg('1023'); return false; } return self::giveKnow($player, $targets, 'places', $tlc); }
public function on_challenge(SR_Player $player, array $args) { # No fight with party: if ($player->isInParty()) { $player->msg('1099'); // $player->message("You can't fight here when you are in a party. Use #part to leave your party."); return false; } # Get current enemy $key = 'SEATTLE_ARENA_N'; if (!$player->hasConst($key)) { $player->setConst($key, 1); } $n = $player->getConst($key); # Possible flags/enemies in Arena: $enemies = array(array("Seattle_AToughGuy", $this->lang($player, 'e1')), array("Seattle_ASecOrk", $this->lang($player, 'e2')), array("Seattle_AToughTroll", $this->lang($player, 'e3')), array("Seattle_AMagician", $this->lang($player, 'e4')), array("Seattle_AElite", $this->lang($player, 'e5'))); # No more fights: if ($n > count($enemies)) { // $player->message("Sorry. You fought all the enemies here. Try #fight <player> then :P"); $player->msg('1098'); return false; } $n--; $enemy = $enemies[$n]; $player->msg('5141', array($enemy[1])); // $player->message("The Arena-Guy leads you to the locker room. After a few minutes you were guided into the arena and see your enemy: ".$enemy[1].". " ); SR_NPC::createEnemyParty($enemy[0])->fight($player->getParty(), true); return true; }
public static function giveNuyen(SR_Player $player, SR_Player $target, $what, $amt) { if ($amt <= 0) { $player->msg('1062'); // $player->message(sprintf('You can only give away a positive amount of %s.', $what)); return false; } $have = $player->getBase($what); if ($amt > $have) { $player->msg('1063', array(Shadowfunc::displayNuyen($amt), Shadowfunc::displayNuyen($have))); // $player->message(sprintf('You only have %s %s.', $have, $what)); return false; } # Thx jjk // if (($have - $amt) <= SR_Player::START_NUYEN) // { // $player->message(sprintf('You can\'t give all your money away, you need at least %s', Shadowfunc::displayNuyen(SR_Player::START_NUYEN))); // $player->message(sprintf('Maximum you can give is %s', Shadowfunc::displayNuyen($have-SR_Player::START_NUYEN))); // return false; // } if (false === $target->alterField($what, $amt)) { $player->message('Database error in giveNyKa()... 1'); return false; } if (false === $player->alterField($what, -$amt)) { $player->message('Database error II in giveNyKa()... 2'); return false; } $target->msg('5118', array(Shadowfunc::displayNuyen($amt), $player->getName())); $player->msg('5119', array(Shadowfunc::displayNuyen($amt), $target->getName())); // $target->message(sprintf('You received %s %s from %s.', $amt, $what, $player->getName())); // $player->message(sprintf('You gave %s %s %s.', $target->getName(), $amt, $what)); return true; }
public static function execute(SR_Player $player, array $args) { if ($player->isFighting()) { $player->msg('1036'); // $player->message('This does not work in combat'); return false; } $argc = count($args); if ($argc < 1 || $argc > 2) { $player->message(Shadowhelp::getHelp($player, 'givekw')); return false; } if ($argc === 2) { if (false === ($target = Shadowfunc::getFriendlyTarget($player, $args[0]))) { $player->msg('1028', array($args[0])); #$player->message(sprintf('%s is not here or the name is ambigous.', $args[0])); return false; } $word = $args[1]; $targets = array($target); } else { $word = $args[0]; $targets = $player->getParty()->getMembers(); } if (false === $player->hasKnowledge('words', $word)) { $player->msg('1023'); # You don`t have this knowledge. return false; } return self::giveKnow($player, $targets, 'words', $args[1]); }
public static function execute(SR_Player $player, array $args) { if ($player->getBase('age') > 0) { $player->msg('1016', array(Shadowfunc::displayASL($player))); // $player->message(sprintf("You already have your asl set to: %s.", Shadowfunc::displayASL($player))); return false; } if (count($args) === 0) { $player->message(self::getASLSetHelp($player)); return false; } if (count($args) === 1 && $args[0] === 'RANDOM') { return self::onASLSetRandom($player); } $arg = implode(' ', $args); $age = round(self::parseValue($arg, 'y')); $bmi = round(self::parseValue($arg, 'kg') * 1000); $height = self::parseValue($arg, 'cm'); if ($height > 1 && $height < 2) { // $player->message(sprintf('Auto corrected your height "%.03f" to "%dcm"', $height, round($height*100))); $height = round($height * 100); } $errors = ''; $errors .= self::validateAge($player, $age); $errors .= self::validateHeight($player, $height); $errors .= self::validateBMI($player, $bmi, $height); if ($errors !== '') { $message = sprintf('Error: %s.', $errors); self::reply($player, $message); $player->message(self::getASLSetHelp($player)); return false; } return self::onASLSetCustom($player, $age, $bmi, $height); }
private static function beamToRedmond(SR_Player $player) { $p = $player->getParty(); $xp = $player->getBase('xp'); $player->resetXP(); $player->msg('5299', array(self::BEAM_TARGET)); # Your XP stack got reset and you get beamed back to %s. $p->pushAction(SR_Party::ACTION_INSIDE, self::BEAM_TARGET); }
protected static function onEnable(SR_Player $player, $bit, $bool, $name) { $text = $bool === true ? 'enabled' : 'disabled'; $text = $player->lang($text); $old = $player->isOptionEnabled($bit); if ($bool === $old) { $player->msg('5070', array($name, $text)); // $player->message(sprintf('%s has been already %s.', $name, $text)); return true; } if (false === $player->saveOption($bit, $bool)) { return false; } $player->msg('5071', array($name, $text)); // $player->message(sprintf('%s has been %s for your character.', $name, $text)); $player->modify(); return true; }
public function getNPCLoot(SR_Player $player) { $nuyen = 1200; $key = 'SEATTLE_ARENA_N'; $player->setConst($key, $player->getConst($key) + 1); $player->msg('5125', array(Shadowfunc::displayNuyen($nuyen))); // $player->message("The fight is over. The director hands you $nuyen Nuyen."); $player->giveNuyen($nuyen); return array(); }
public static function giveItem(SR_Player $player, SR_Player $target, $id, $amt = 1) { if ($amt < 1) { $player->msg('1038'); // $player->message('Please give a positive amount of items.'); return false; } if (false === ($item = $player->getInvItem($id))) { $player->msg('1029'); // $player->message('You don`t have that item.'); return false; } // if (false === $item->isItemTradeable()) // { // $player->message('You are not allowed to trade this item.'); // return false; // } if ($item->isItemStackable()) { if ($amt > $item->getAmount()) { $player->msg('1040', array($item->getItemName())); // $player->message(sprintf('You only have %d %s.', $item->getAmount(), $item->getName())); return false; } $giveItem = SR_Item::createByName($item->getItemName(), $amt, true); $item->useAmount($player, $amt); } else { if ($amt !== 1) { $player->message('Currently you can only give one equipment at a time.'); return false; } $player->removeFromInventory($item); $giveItem = $item; } $busymsg = $player->isFighting() ? Shadowfunc::displayBusy($player->busy(SR_Player::GIVE_TIME)) : ''; self::rply($player, '5115', array($amt, $giveItem->displayFullName($player), $target->getName(), $busymsg)); // $player->message(sprintf('You gave %d %s to %s.%s', $amt, $giveItem->getName(), $target->getName(), $busymsg)); $target->giveItems(array($giveItem), $player->getName()); // if ($target instanceof SR_TalkingNPC) // { // $target->onNPCGive($player, $items); // } return true; }
private static function messagePartyFeelings(SR_Player $player) { $party = $player->getParty(); $enum = 1; $fmt = $player->lang('fmt_feel'); $out = ''; foreach ($party->getMembers() as $member) { $member instanceof SR_Player; $out .= vsprintf($fmt, self::argsForMember($member, $enum)); } $player->msg('5312', array(ltrim($out, ',; '))); }
public function onReload(SR_Player $player) { if (false === ($ammo = $player->getItemByName($this->getAmmoName()))) { $player->msg('5205'); // $player->message('You are out of ammo!'); $player->unequip($this); $player->modify(); return true; } $p = $player->getParty(); $now = $this->getAmmo(); $max = $this->getBulletsMax(); $avail = $ammo->getAmount(); $put = Common::clamp($max - $now, 0, $avail); if ($put == 0) { $player->msg('1156'); // $player->message('Your weapon is already loaded.'); return false; } // Dog_Log::debug(sprintf('%s reloads his %s: Nee')) $ammo->useAmount($player, $put); $this->increase('sr4it_ammo', $put); if ($p->isFighting()) { $ep = $p->getEnemyParty(); $busy = $player->busy(round($this->getReloadTime() + rand(0, 10))); $p->ntice('5206', array($player->getName(), $put, $this->getName(), $busy)); $ep->ntice('5206', array($player->getName(), $put, $this->getName(), $busy)); // $message = sprintf(' load(s) %d bullet(s) into his %s. %s', $put, $this->getItemName(), Shadowfunc::displayBusy($busy)); // $message = sprintf(' load(s) %d bullet(s) into his %s. %s busy.', $put, $this->getItemName(), $player->busy(round($this->getReloadTime()+rand(0, 10)))); // $p->message($player, $message); // $p->getEnemyParty()->message($player, $message); } else { // $message = sprintf('You load %d bullet(s) into your %s.', $put, $this->getItemName()); // $bot = Shadowrap::instance($player); // $bot->rply('5207', array($put, $this->getName())); $player->msg('5207', array($put, $this->getName())); // $bot->reply($message); } return true; }
/** * Poison the target. * @see SR_Weapon::onDealDamage() */ public function onDealDamage(SR_Player $player, SR_Player $target, $hits, $damage) { $biotech = Common::clamp($target->getVar('biotech'), 0, 15); $min = 0.1 - $biotech * 0.01; $max = 0.3 - $biotech * 0.02; $duration = rand(20, 40); $per_sec = Shadowfunc::diceFloat($min, $max, 2); if ($per_sec > 0) { $modifiers = array('hp' => $per_sec); $target->addEffects(new SR_Effect($duration, $modifiers)); $target->msg('5294', array(sprintf('%.02f', $per_sec), GWF_Time::humanDuration($duration))); } }
public static function onTell(SR_Player $player) { $pid = $player->getID(); $where = 'sr4tl_pid=' . $pid; $table = self::table(__CLASS__); if (false === ($result = $table->selectAll('sr4tl_time, sr4tl_msg', $where, 'sr4tl_time DESC', NULL, 10, 0, GDO::ARRAY_N))) { return false; } foreach (array_reverse($result) as $row) { $player->msg('5019', array($row[1])); // $player->message('OldMessage: '.$row[1]); } return $table->deleteWhere($where); }
public function onItemUse(SR_Player $player, array $args) { $p = $player->getParty(); if (false === ($l = $p->getLocationClass(SR_Party::ACTION_INSIDE))) { $player->msg('hlp_cyberdeck'); // $player->message('This item only works inside locations with computers.'); return false; } $computers = $l->getComputers(); $bot = Shadowrap::instance($player); if (count($computers) === 0) { $player->msg('hlp_cyberdeck_targets'); // $bot->reply('You don\'t see any Computers with a Headcomputer interface here.'); return false; } if (count($args) !== 1) { $i = 1; $format = $player->lang('fmt_rawitems'); $out = ''; foreach ($computers as $pc) { $out .= sprintf($format, $i++, $pc); // $out .= sprintf(", \x02%s\x02-%s", $i++, $pc); } return $bot->rply('5202', array(substr($out, 2))); // $bot->reply(sprintf('Possible targets: %s.', substr($out, 2))); // return true; } if (false === ($computer = $this->getComputerTarget($player, $computers, $args[0]))) { $bot->rply('1012'); # The target is unknown. // $bot->reply('The target computer is invalid.'); return false; } if (false === ($computer = SR_Computer::getInstance($computer, $l))) { $bot->reply('Database error.'); return false; } if (!$player->hasHeadcomputer()) { $bot->rply('1050', array('headcomputer')); // $bot->reply('You don\'t have a headcomputer.'); return false; } if ($player->getBase('computers') < 0) { $bot->rply('1025', 'computers'); // $bot->reply('You need to learn the computers skill first.'); return false; } $computer->onHack($player, $this); return true; }
private function onChallengeB(SR_Player $player, $bit, $name, $text, $nuyen) { $party = $player->getParty(); if (false === ($ep = SR_NPC::createEnemyParty($name))) { $player->message('Database error!'); return false; } $player->msg('5141', array($text)); // $player->message(sprintf('You are guided into the arena and see your enemy: %s', $text)); $e = $ep->getLeader(); $e->setArenaKey($this->getArenaKey($player), $bit); $e->setArenaNuyen($nuyen); $ep->fight($party); return true; }
public function onItemUse(SR_Player $player, array $args) { if (!$player->getParty()->isFighting()) { $player->msg('1157'); // $player->message('This item works only in combat.'); return false; } if (count($args) === 0 || false === ($target = $this->getOffensiveTarget($player, $args[0]))) { $player->msg('1012'); // $player->message('You need a valid target to throw a '.$this->getName().'. Try 1,2,..,N to enumerate enemies.'); return false; } $this->announceUsage($player, $target); $this->onThrow($player, $target); return true; }
public static function execute(SR_Player $player, array $args) { if (!$player->getParty()->isIdle()) { $player->msg('1033'); # Your party is moving. Try this command when idle. return false; } if (count($args) === 1 && $args[0] === 'i_am_sure') { self::deletePlayer($player); $player->deletePlayer(); $player->msg('5245'); # Your character has been deleted. You may issue #start again.' } else { $player->msg('5246'); # This will completely delete your character. Type "#reset i_am_sure" to confirm. } return true; }
public function on_search(SR_Player $player, array $args) { $key = $this->getTempKey(); $attemp = $player->getTemp($key, 0); if ($attemp >= $this->getSearchMaxAttemps()) { $player->msg('1148'); // $player->message('Not again.'); return; } $attemp++; $player->setTemp($key, $attemp); $loot = array_merge(Shadowfunc::randLoot($player, $this->getSearchLevel(), array(), $this->getSearchChanceNone()), $this->getSearchLoot($player)); if (count($loot) > 0) { $player->msg('5185', array($this->getName())); // $player->message(sprintf('You search the %s...', $this->getName())); $player->giveItems($loot, 'searching ' . $this->getName()); } else { $player->msg('5186', array($this->getName())); // $player->message(sprintf('You search the %s... But find nothing.', $this->getName())); } }
/** * Check if we may shout and do so. * @param unknown_type $player * @param unknown_type $message */ public static function shout(SR_Player $player, $message) { # check minlevel if ($player->getBase('level') < self::MIN_LEVEL) { # You need at least level %s to shout. $player->msg('1002', array(self::MIN_LEVEL)); return false; } # check delay $delay = self::getShoutWait($player); if ($delay > 0) { # Please wait %s before you shout again. $player->msg('1044', array(GWF_Time::humanDuration($delay))); return false; } # store time $player->setTemp(self::TEMP_KEY, time()); # send message (cannot get translated easily) $b = chr(2); self::sendGlobalMessage(sprintf('%s shouts: "%s"', $b . $player->getName() . $b, $message)); }
public static function execute(SR_Player $player, array $args) { if (0 > ($alchemy = $player->get('alchemy'))) { $player->msg('1047'); return false; // return $player->message('You need to learn alchemy first.'); } $wantlevel = true; switch (count($args)) { case 2: $wantlevel = $args[1]; case 1: $spellname = $args[0]; break; default: return $player->message(Shadowhelp::getHelp($player, 'brew')); } $party = $player->getParty(); if ($party->isFighting()) { $player->msg('1036'); return false; // return $player->message('You cannot brew potions when fighting.'); } if (!$party->isIdle()) { $player->msg('1033'); return false; // return $player->message('Your party needs to be idle for brewing potions.'); } $bot = Shadowrap::instance($player); if (false === ($spell = $player->getSpell($spellname))) { $player->msg('1048'); return false; // return $bot->reply('You don\'t have this spell.'); } $spell->setMode(SR_Spell::MODE_BREW); $spell->setCaster($player); $level = $player->getSpellLevel($spellname); if ($wantlevel === true) { $wantlevel = $level; } if ($wantlevel > $level) { $player->msg('1049', array($spellname)); return false; // return $player->message(sprintf('You don\'t have the %s spell on that high level.', $spellname)); } $level = $wantlevel; if (false === ($bottle = $player->getInvItem('WaterBottle'))) { $player->msg('1050', array('WaterBottle')); return false; // return $bot->reply('You do not have a WaterBottle.'); } # Enough mandrake? $need_mandrake = $spell->getSpellLevel() * $spell->getSpellLevel(); if (false === ($mandrake = $player->getInvItem('Mandrake'))) { $player->msg('1050', array("{$need_mandrake}xMandrake")); return false; } if ($mandrake->getAmount() < $need_mandrake) { $player->msg('1050', array("{$need_mandrake}xMandrake")); return false; } # Consume utilities if (false === $bottle->useAmount($player, 1)) { return $bot->reply('Database error.'); } if (false === $mandrake->useAmount($player, $need_mandrake)) { return $bot->reply('Database error.'); } # Brew it if (false === $spell->onCast($player, array(), $level)) { $player->msg('1051', array($spellname)); // return $bot->reply('Brewing the potion failed and the bottle is lost.'); return false; } if (false === ($potion = Item_AlchemicPotion::alchemicFactory($player, $spellname, $level))) { $player->message('Database error 5!'); return false; } $player->giveItems(array($potion), $player->lang('from_brewing')); return; }
/** * Check if the player is leader of a party. Return false on success and string on error. * @param SR_Player $player * @return false|string */ public static function checkLeader(SR_Player $player) { // if (false === self::checkCreated($player)) // { // return false; // } if ($player->isLeader()) { return true; } $player->msg('1032'); # 'This command is only available to the party leader.'; return false; }
public static function onKilledByHuman(SR_Player $killer, SR_Player $victim) { $b = chr(2); $where = 'sr4bo_victim=' . $victim->getUID(); $bounty = self::table(__CLASS__)->selectAll('sr4bo_id, sr4bo_bounty', $where, ''); $sum = 0; foreach ($bounty as $data) { $b = $data['sr4bo_bounty']; // SR_BountyHistory::onKilled($killer, $victim, $data['sr4bo_id']); $sum += $b; } $victim->updateField('bounty', 0); $killer->giveNuyen($sum); $killer->increase('sr4pl_bounty_done', $sum); self::table(__CLASS__)->deleteWhere($where); $killer->msg('5034', array(Shadowfunc::displayNuyen($sum))); // $killer->message(sprintf("You collected a {$b}bounty{$b}: %s.", Shadowfunc::displayNuyen($sum))); }
private static function onDisplayQuestByNum(SR_Player $player, array $quests, array $args) { $id = (int) $args[0]; if ($id < 1 || $id > count($quests)) { $player->msg('1010'); // $player->message(sprintf('Unknown quest ID')); return false; } return self::onDisplayQuest($player, $quests[$id - 1], $id); }
public function onEnter(SR_Player $player) { $player->msg('1118'); // $player->message(sprintf('You find no way to enter %s.', get_class($this))); return false; }
private function checkCombination(SR_Player $player, SR_Item $item, SR_Rune $rune) { if ($rune->isMixedRune()) { $player->msg('1161'); // $player->message('The rune has mixed mount and equipment modifiers. You have to split it first.'); return false; } $mr = $rune->isMountRune(); if ($rune->isMountRune()) { if (!$item instanceof SR_Mount) { $player->msg('1162'); // $player->message('This rune can only be applied to mounts.'); return false; } } else { if (!$item->isItemStattable()) { $player->msg('1163'); // $player->message('This rune can only be applied to equipment.'); return false; } } return true; }
/** * Check if the party sum levels match nicely. * @param SR_Party $attackers * @param SR_Party $defenders * @param boolean $verbose * @return true|false */ public static function isKillProtectedPartyLevel(SR_Party $attackers, SR_Party $defenders, SR_Player $player, $verbose = true) { # NPC if (!$defenders->isHuman()) { return false; } # A member has bounty or bad karma foreach ($defenders->getMembers() as $defender) { $defender instanceof SR_Player; if ($defender->getBase('bounty') > 0) { return false; } if ($defender->getBase('bad_karma')) { return false; } } # Check party sums for effective level. $al = $attackers->getSum('level', false); $dl = $defenders->getSum('level', false); # Clamp to the level where game gets hard. $clamp = self::MAX_LEVEL_DIFF + self::DISABLE_LEVEL_DIFF; $al = Common::clamp($al, 0, $clamp); $dl = Common::clamp($dl, 0, $clamp); $dif = $al - $dl; if ($dif > self::MAX_LEVEL_DIFF) { if ($verbose) { $player->msg('1015', array($al, $dl, self::MAX_LEVEL_DIFF)); // $player->message(sprintf('Your party (level sum %d) cannot attack a party with level sum %d because the level difference is larger than %d.', $al, $dl, self::MAX_LEVEL_DIFF)); } # Protected by level return true; } # No protection return false; }
public static function execute(SR_Player $player, array $args) { $p = $player->getParty(); # Can lvlup in combat? // if ($p->isFighting()) // { // $player->message('You cannot lvlup when your party is fighting.'); // return false; // } // $bot = Shadowrap::instance($player); $runner = $player->isRunner(); $have = $player->getBase('karma'); if (count($args) !== 1) { $cost = self::KARMA_COST_SPELL; // $b = chr(2); $max = $runner ? self::MAX_VAL_SKILL_RUNNER : self::MAX_VAL_SKILL; $player->msg('5057', array($max, Shadowfunc::getStatsLvlUpArray($player, SR_Player::$SKILL, self::KARMA_COST_SKILL, $max))); // $player->message('Skills to upgrade: ' . Shadowfunc::getStatsLvlUpArray($player, SR_Player::$SKILL, self::KARMA_COST_SKILL, $runner?self::MAX_VAL_SKILL_RUNNER:self::MAX_VAL_SKILL)); $arr = SR_Player::$ATTRIBUTE; unset($arr['es']); //ignore essence $max = $runner ? self::MAX_VAL_ATTRIBUTE_RUNNER : self::MAX_VAL_ATTRIBUTE; $player->msg('5058', array($max, Shadowfunc::getStatsLvlUpArray($player, $arr, self::KARMA_COST_ATTRIBUTE, $max))); // $player->message('Attributes to upgrade: ' . Shadowfunc::getStatsLvlUpArray($player, $arr, self::KARMA_COST_ATTRIBUTE, $runner?self::MAX_VAL_ATTRIBUTE_RUNNER:self::MAX_VAL_ATTRIBUTE)); $max = $runner ? self::MAX_VAL_KNOWLEDGE_RUNNER : self::MAX_VAL_KNOWLEDGE; $player->msg('5059', array($max, Shadowfunc::getStatsLvlUpArray($player, SR_Player::$KNOWLEDGE, self::KARMA_COST_KNOWLEDGE, $max))); // $player->message('Knowledge to upgrade: ' . Shadowfunc::getStatsLvlUpArray($player, SR_Player::$KNOWLEDGE, self::KARMA_COST_KNOWLEDGE, $runner?self::MAX_VAL_KNOWLEDGE_RUNNER:self::MAX_VAL_KNOWLEDGE)); $s = ''; if ($player->getSpellData()) { $format = $player->lang('fmt_lvlup'); $max = $runner ? self::MAX_VAL_SPELL_RUNNER : self::MAX_VAL_SPELL; $nl = $player->getSpellData(); asort($nl); foreach (array_reverse($nl) as $name => $base) { $k = 'K'; $bold = ''; $could = 0; if ($base >= $max) { $n = '*'; $k = ''; } else { $n = ($base + 1) * 2; if ($n <= $have) { $bold = chr(2); $could = 1; // $n = $b.$n.'K'.$b; // $name = $b.$name.$b; } else { // $n = $n.'K'; } } $s .= sprintf($format, $name, $base + 1, $n, $bold, $k, $could); // $s .= sprintf(', %s:%s(%s)', $name, ($base+1), $n); } } $s = $s === '' ? $player->lang('none') : ltrim($s, ',; '); return $player->msg('5060', array($max, $s)); // $player->message('Spells to upgrade: '.$s); // return true; } $f = strtolower($args[0]); # Shortcuts if (isset(SR_Player::$SKILL[$f])) { $f = SR_Player::$SKILL[$f]; } if (isset(SR_Player::$ATTRIBUTE[$f])) { $f = SR_Player::$ATTRIBUTE[$f]; } if (isset(SR_Player::$KNOWLEDGE[$f])) { $f = SR_Player::$KNOWLEDGE[$f]; } // if ($f === 'essence') { $bot->reply('You can not levelup your essence.'); return false; } if ($f === 'essence') { $player->msg('1024'); // $bot->reply('You can not levelup your essence.'); return false; } $is_spell = false; $cost = self::getKarmaCostFactor($f); if (in_array($f, SR_Player::$SKILL)) { $level = $player->getBase($f); // $cost = self::KARMA_COST_SKILL; $max = $runner ? self::MAX_VAL_SKILL_RUNNER : self::MAX_VAL_SKILL; } elseif (in_array($f, SR_Player::$ATTRIBUTE)) { $level = $player->getBase($f); // $cost = self::KARMA_COST_ATTRIBUTE; $max = $runner ? self::MAX_VAL_ATTRIBUTE_RUNNER : self::MAX_VAL_ATTRIBUTE; } elseif (in_array($f, SR_Player::$KNOWLEDGE)) { $level = $player->getBase($f); // $cost = self::KARMA_COST_KNOWLEDGE; $max = $runner ? self::MAX_VAL_KNOWLEDGE_RUNNER : self::MAX_VAL_KNOWLEDGE; } elseif (false !== ($spell = SR_Spell::getSpell($f))) { $level = $spell->getBaseLevel($player); // $cost = self::KARMA_COST_SPELL; $is_spell = true; $max = $runner ? self::MAX_VAL_SPELL_RUNNER : self::MAX_VAL_SPELL; } else { $player->msg('1024'); // $bot->reply('You can only levelup attributes, skills, knowledge and spells.'); return false; } if ($level < 0) { $player->msg('1025', array($f)); // $bot->reply(sprintf('You need to learn %s first.', $f)); return false; } if ($level >= $max) { $player->msg('1026', array($max, $f)); // $bot->reply(sprintf('You already have reached the max level of %d for %s.', $max, $f)); return false; } $need = ($level + 1) * $cost; if ($need > $have) { $player->msg('1027', array($need, $f, $level, $level + 1, $have)); // $bot->reply(sprintf('You need %d karma to increase your base level for %s from %d to %d, but you only have %d karma.', $need, $f, $level, $level+1, $have)); return false; } # Reduce Karma $player->alterField('karma', -$need); # Lvlup if ($is_spell === true) { $player->levelupSpell($f, 1); } else { $player->levelupField($f, 1); // $player->alterField($f, 1); } // $player->modify(); return self::rply($player, '5061', array($need, $f, $level, $level + 1)); // return $bot->reply(sprintf('You used %d karma and leveled up your %s from %d to %d.', $need, $f, $level, $level+1)); }
public function onItemUse(SR_Player $player, array $args) { $player->msg('1155'); // $player->message('This equipment has no special usage. You can equip it with '.$c.'equip.'); return false; }
private function onViewItems(SR_Clan $clan, SR_Player $player, $arg, $page) { $ipp = 10; $cid = $clan->getID(); $arg = GDO::escape($arg); $page = (int) $page; $table = GDO::table('SR_ClanBank'); $where = "sr4cb_cid={$cid} AND sr4cb_iname LIKE '%{$arg}%'"; $nItems = $table->countRows($where); if ($nItems === 0) { $player->msg('1007'); // $player->message('No match found.'); return true; } $nPages = GWF_PageMenu::getPagecount($ipp, $nItems); if ($page < 1 || $page > $nPages) { $player->msg('1009'); // $player->message('This page is empty.'); return false; } $from = GWF_PageMenu::getFrom($page, $ipp); if (false === ($result = $table->selectAll('sr4cb_iname, sr4cb_iamt', $where, 'sr4cb_iamt ASC, sr4cb_iname ASC', NULL, $ipp, $from, GDO::ARRAY_N))) { $player->message('DB ERROR 1.'); return false; } if (count($result) === 1) { return $this->onViewItem($clan, $player, $result[0][0], $result[0][1]); } $out = ''; $format = $player->lang('fmt_items'); foreach ($result as $row) { $from++; list($itemname, $amt) = $row; $damt = $amt === '1' ? '' : "({$amt})"; $out .= sprintf($format, $from, $itemname, $damt, $amt); // $out[] = sprintf('%d-%s%s', $from, $itemname, $amt); } $bot = Shadowrap::instance($player); return $bot->rply('5176', array($page, $nPages, substr($out, 2))); // return $bot->reply(sprintf('ClanBank page %d/%d: %s.', $page, $nPages, implode(', ', $out))); }
public function onItemUnequip(SR_Player $player) { $player->msg('1014'); // $player->message('You can not equip this item.'); return false; }