Exemple #1
0
 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);
 }
Exemple #2
0
 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;
 }
Exemple #3
0
 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;
 }
Exemple #4
0
 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]);
 }
Exemple #5
0
 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);
 }
Exemple #6
0
 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);
 }
Exemple #7
0
 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;
 }
Exemple #8
0
 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();
 }
Exemple #9
0
 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;
 }
Exemple #10
0
 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, ',; ')));
 }
Exemple #11
0
 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;
 }
Exemple #12
0
 /**
  * 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)));
     }
 }
Exemple #13
0
 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);
 }
Exemple #14
0
 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;
 }
Exemple #15
0
 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;
 }
Exemple #16
0
 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;
 }
Exemple #17
0
 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;
 }
Exemple #18
0
 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()));
     }
 }
Exemple #19
0
 /**
  * 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));
 }
Exemple #20
0
 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;
 }
Exemple #21
0
 /**
  * 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;
 }
Exemple #22
0
 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)));
 }
Exemple #23
0
 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);
 }
Exemple #24
0
 public function onEnter(SR_Player $player)
 {
     $player->msg('1118');
     // 		$player->message(sprintf('You find no way to enter %s.', get_class($this)));
     return false;
 }
Exemple #25
0
 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;
 }
Exemple #26
0
 /**
  * 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;
 }
Exemple #27
0
 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));
 }
Exemple #28
0
 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;
 }
Exemple #29
0
 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)));
 }
Exemple #30
0
 public function onItemUnequip(SR_Player $player)
 {
     $player->msg('1014');
     // 		$player->message('You can not equip this item.');
     return false;
 }