示例#1
0
文件: say.php 项目: sinfocol/gwf3
 public static function execute(SR_Player $player, array $args)
 {
     if ('' === ($message = trim(implode(' ', $args)))) {
         return false;
     }
     $p = $player->getParty();
     $ep = $p->getEnemyParty();
     $pname = $player->getName();
     if ($p->isTalking() && $ep !== false) {
         $p->ntice('5085', array($pname, $message));
         $ep->ntice('5085', array($pname, $message));
         $p->setContactEta(60);
         $el = $ep->getLeader();
         if ($el->isNPC()) {
             $ep->setContactEta(60);
             $el->onNPCTalkA($player, isset($args[0]) ? $args[0] : 'hello', $args);
         }
     } elseif ($p->isAtLocation()) {
         Shadowshout::onLocationGlobalMessage($player, '5085', array($pname, $message));
     } elseif ($p->isFighting()) {
         $p->ntice('5085', array($pname, $message));
         $ep->ntice('5085', array($pname, $message));
     } else {
         $p->ntice('5085', array($pname, $message));
     }
     return true;
 }
示例#2
0
文件: giveny.php 项目: sinfocol/gwf3
 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;
 }
示例#3
0
文件: Alcopop.php 项目: sinfocol/gwf3
 public function onConsume(SR_Player $player)
 {
     $m = array('alc' => 0.1);
     $player->addEffects(new SR_Effect(GWF_Time::ONE_HOUR * 1, $m));
     $player->addEffects(new SR_Effect(GWF_Time::ONE_HOUR * 2, $m));
     $player->addEffects(new SR_Effect(GWF_Time::ONE_HOUR * 3, $m));
     $player->getParty()->notice(sprintf('%s drunk an alcopop and got alcoholized (+0.3).', $player->getName()));
 }
示例#4
0
文件: Room4.php 项目: sinfocol/gwf3
 public function onHacked(SR_Player $player, $hits)
 {
     $party = $player->getParty();
     $player->message(sprintf('This computer is able to activate the elevator to floor 2 and 3.'));
     $elevator = Shadowrun4::getLocationByTarget('Renraku_Elevator');
     $elevator instanceof Renraku_Elevator;
     $elevator->setElevatorFlagsParty($party, 6, true);
     $party->notice(sprintf('%s managed to unlock the elevator to floor 2 and 3.', $player->getName()));
 }
示例#5
0
 public function onConsume(SR_Player $player)
 {
     $m = array('alc' => 0.1);
     $player->addEffects(new SR_Effect(GWF_Time::ONE_HOUR * 1, $m));
     $player->addEffects(new SR_Effect(GWF_Time::ONE_HOUR * 2, $m));
     $oldhp = $player->getHP();
     $gain = $player->healHP(0.3);
     $player->getParty()->notice(sprintf('%s drank a beer and got alcoholized (+0.2) %s.', $player->getName(), Shadowfunc::displayHPGain($oldhp, $gain, $player->getMaxHP())));
 }
示例#6
0
文件: givekp.php 项目: sinfocol/gwf3
 private static function giveKnowB(SR_Player $player, SR_Player $target, $what, $which)
 {
     if (false === $target->hasKnowledge($what, $which)) {
         $target->giveKnowledge($what, $which);
         $player->getParty()->ntice('5117', array($player->getName(), $target->getName(), $which));
         // 			$player->getParty()->message($player, sprintf(' told %s about %s.', $target->getName(), $which));
     }
     return true;
 }
示例#7
0
 public static function execute(SR_Player $player, array $args)
 {
     return $player->getParty()->ntice('5084', array($player->getName(), implode(' ', $args)));
     // 		$b = chr(2);
     // 		$bot = Shadowrap::instance($player);
     // 		$message = sprintf('%s pm: "%s"', $b.$player->getName().$b, implode(' ', $args));
     // 		$player->getParty()->notice($message);
     // 		return true;
 }
示例#8
0
文件: reset.php 项目: sinfocol/gwf3
 private static function deletePlayer(SR_Player $player)
 {
     $epname = GDO::escape($player->getName());
     if (false === GDO::table('SR_BazarShop')->deleteWhere("sr4bs_pname='{$epname}'")) {
         return false;
     }
     if (false === GDO::table('SR_BazarItem')->deleteWhere("sr4ba_pname='{$epname}'")) {
         return false;
     }
 }
示例#9
0
文件: flee.php 项目: sinfocol/gwf3
 public static function onFlee(SR_Player $player)
 {
     $party = $player->getParty();
     $ep = $party->getEnemyParty();
     $party->ntice('5113', array($player->getName()));
     $ep->ntice('5114', array($player->getName()));
     // 		$party->notice(sprintf('%s has fled from the enemy.', $player->getName()));
     // 		$ep->notice(sprintf('%s has fled from combat.', $player->getName()));
     $player->resetXP();
     $party->kickUser($player, true);
     $np = SR_Party::createParty();
     $np->addUser($player, true);
     $np->cloneAction($party);
     $np->clonePreviousAction($party);
     $np->popAction(true);
     if ($np->isInsideLocation()) {
         $np->pushAction(SR_Party::ACTION_OUTSIDE);
     }
 }
示例#10
0
 public static function displayBountyPlayer(SR_Player $player)
 {
     $bounty = $player->getBase('bounty');
     if ($bounty <= 0) {
         return $player->lang('no_bounty');
         # This player has no bounty.
     }
     $total = Shadowfunc::displayNuyen($bounty);
     return $player->lang('total_bounty', array($total, $player->getName(), self::displayBountyPlayerDetails($player)));
     // 		return sprintf("There is a total {$b}bounty of %s{$b} for %s: %s.", $total, $player->getName(), self::displayBountyPlayerDetails($player));
 }
示例#11
0
文件: gmns.php 项目: sinfocol/gwf3
 private static function onGMNS(SR_Player $player, SR_Player $target, $arg)
 {
     $pid = $target->getID();
     if (strtolower($arg) === 'on') {
         if (false === SR_NoShout::setNoShout($pid, -1)) {
             return false;
         }
         return $player->message(sprintf('Banned %s from shouting.', $target->getName()));
     } elseif (strtolower($arg) === 'off') {
         if (false === SR_NoShout::setShout($pid)) {
             return false;
         }
         return $player->message(sprintf('Allowed %s to shout again.', $target->getName()));
     } elseif (0 < ($seconds = GWF_TimeConvert::humanToSeconds($arg))) {
         if (false === SR_NoShout::setNoShout($pid, $seconds)) {
             return false;
         }
         return $player->message(sprintf('Banned %s from shouting for %s.', $target->getName(), GWF_TimeConvert::humanDuration($seconds)));
     } else {
         $player->message(Shadowhelp::getHelp($player, 'gmns'));
         return false;
     }
 }
示例#12
0
 public function onPayOwner(SR_Player $buyer, $amt)
 {
     $price = $this->getVar('sr4ba_price') * $amt;
     $pname = $this->getVar('sr4ba_pname');
     if (false === ($seller = Shadowrun4::getPlayerByName($pname))) {
         if (false === ($seller = SR_Player::getByLongName($pname))) {
             return false;
         }
     }
     if (false === $seller->giveBankNuyen($price)) {
         return false;
     }
     $iname = $this->getVar('sr4ba_iname');
     $seller->msg('5035', array(Shadowfunc::displayNuyen($price), $amt, $iname, $buyer->getName()));
     // 		$seller->message(sprintf('%s have been booked to your bank account for selling %s %s to %s.', Shadowfunc::displayNuyen($price), $amt, $iname, $buyer->getName()));
     return true;
 }
示例#13
0
文件: give.php 项目: sinfocol/gwf3
 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;
 }
示例#14
0
 public static function isGM(SR_Player $player)
 {
     if (NULL === self::$GMS) {
         /**
          * @Example GameMasters.php in this directory:
          *
          * <? return array('gizmore{14}'); ?>
          */
         if (false === (self::$GMS = @(include_once 'GameMasters.php'))) {
             self::$GMS = array('gizmore{1}');
         }
     }
     if (false === ($user = $player->getUser())) {
         return false;
     }
     if (!$user->isLoggedIn()) {
         return false;
     }
     return in_array($player->getName(), self::$GMS, true);
 }
示例#15
0
文件: Block1.php 项目: sinfocol/gwf3
 public function getSolution(SR_Player $player)
 {
     $pname = strtolower($player->getName());
     $hash = substr(md5(LAMB_PASSWORD2 . md5($pname) . LAMB_PASSWORD2), 2, 16);
     return sprintf('%s!%s!gunda', $pname, $hash);
 }
示例#16
0
文件: Milk.php 项目: sinfocol/gwf3
 public function onConsume(SR_Player $player)
 {
     $oldhp = $player->getHP();
     $gain = $player->healHP(0.4);
     $player->getParty()->notice(sprintf('%s drank a half litre of milk %s.', $player->getName(), Shadowfunc::displayHPGain($oldhp, $gain, $player->getMaxHP())));
 }
示例#17
0
 private function onBestBuy2(SR_Player $player, $iname, $amt, $total)
 {
     if (false === ($item = SR_Item::createByName($iname, 1, false))) {
         $player->message('The item seems invalid. Report to gizmore!');
         return false;
     }
     $table = GDO::table('SR_BazarItem');
     $einame = GDO::escape($iname);
     $conditions = "sr4ba_iname='{$einame}'";
     if (false === ($result = $table->select('*', $conditions, 'sr4ba_price ASC'))) {
         $player->message('Datbase error 2!');
         return false;
     }
     $buyer = $player->getName();
     $have_amt = 0;
     $have_price = 0;
     while (false !== ($bitem = $table->fetch($result, GDO::ARRAY_O))) {
         $bitem instanceof SR_BazarItem;
         $_amt = $bitem->getVar('sr4ba_iamt');
         $need = $amt - $have_amt;
         if ($_amt > $need) {
             $_amt = $need;
         }
         $have_amt += $_amt;
         if (false === $bitem->onPurchased($_amt)) {
             $player->message('Database error 3!');
             return false;
         }
         if (false === $bitem->onPayOwner($player, $_amt)) {
             $player->message('Database error 5!');
             return false;
         }
         $_price = $bitem->getVar('sr4ba_price');
         $_price = $this->calcBuyPrice($_price) * $_amt;
         $have_price += $_price;
         $seller = $bitem->getVar('sr4ba_pname');
         if (false === SR_BazarHistory::insertPurchase($buyer, $seller, $iname, $bitem->getVar('sr4ba_price'), $_amt)) {
             $player->message('Database error 4!');
             return false;
         }
         if ($have_amt >= $amt) {
             break;
         }
     }
     $table->free($result);
     # Stackable
     if ($item->isItemStackable()) {
         if (false === ($item2 = SR_Item::createByName($iname, $amt, true))) {
             $player->message('Database error 6!');
             return false;
         }
         if (false === $player->giveItems(array($item2), 'the bazar')) {
             $player->message('Database error 7!');
             return false;
         }
     } else {
         for ($i = 0; $i < $amt; $i++) {
             if (false === ($item2 = SR_Item::createByName($iname, 1, true))) {
                 $player->message('Database error 6!');
                 return false;
             }
             if (false === $player->giveItem($item2)) {
                 $player->message('Database error 7!');
                 return false;
             }
         }
         // 			if (false === $player->updateInventory())
         // 			{
         // 				$player->message('Database error 7!');
         // 				return false;
         // 			}
         $player->getParty()->ntice('5156', array($player->getName(), $amt, $iname, '!Shadowlamb!'));
         // 			$player->getParty()->notice(sprintf('%s purchased %d %s from the bazar.', $player->getName(), $amt, $iname));
     }
     SR_BazarShop::fixAllItemCounts();
     $player->giveNuyen(-$have_price);
     $player->msg('5164', array($amt, $iname, Shadowfunc::displayNuyen($have_price)));
     // 		$player->message(sprintf('You purchased %d %s for a total price of %s.', $amt, $iname, Shadowfunc::displayNuyen($have_price)));
     return true;
 }
示例#18
0
 private function onCrackLock(SR_Player $player, SR_Player $member)
 {
     $lvl = $this->getLockLevel();
     $loc = $member->get('lockpicking');
     $atk = Shadowfunc::diceFloat($loc, $loc * 2.0 + 1.0, 2);
     $def = Shadowfunc::diceFloat($lvl, $lvl * 1.5 + 2.0, 2);
     printf('%s tries to crack lock lvl %s with lockpicking %s. DEF:%s ... ATK: %s', $member->getName(), $lvl, $loc, $def, $atk) . PHP_EOL;
     if ($atk >= $def) {
         $this->onSetLockPlayer($member, 1);
         $this->onCrackedLock($player, $member);
         return true;
     } else {
         $this->onSetLockPlayer($member, 0);
         return false;
     }
 }
示例#19
0
 private function announceKilled(SR_Player $killer)
 {
     $famous = $this->isRunner() ? 'famous' : 'newbie';
     $famous2 = $killer->isRunner() ? 'famous' : 'newbie';
     $npchuman = $killer->isHuman() ? 'runner' : 'NPC';
     $message = sprintf('[Shadowlamb] - The %s runner %s got killed by the %s %s %s', $famous, $this->getName(), $famous2, $npchuman, $killer->getName());
     Shadowshout::sendGlobalMessage($message);
 }
示例#20
0
 private function announceEquipChange(SR_Player $player, $unam, $fnam, $type, $busy)
 {
     $pnam = $player->getName();
     $p = $player->getParty();
     $ep = $p->getEnemyParty();
     if ($unam !== NULL) {
         $args = array($pnam, $unam, $fnam, $type, $busy);
         $p->ntice('5271', $args, $player);
         $ep->ntice('5271', $args);
     } else {
         $args = array($pnam, $fnam, $type, $busy);
         $p->ntice('5272', $args, $player);
         $ep->ntice('5272', $args);
     }
     return true;
 }
示例#21
0
文件: helo.php 项目: sinfocol/gwf3
 public static function execute(SR_Player $player, array $args)
 {
     $player->message(sprintf('Welcome back to Shadowlamb, %s!', $player->getName()));
     return true;
 }
示例#22
0
 /**
  * Do damage to multiple targets and announce the kills and damage in a compressed way.
  * @param SR_Player $player
  * @param array $damage
  */
 public static function multiDamage(SR_Player $player, array $damage, $spellname = 'Spell')
 {
     $p = $player->getParty();
     $mc = $p->getMemberCount();
     $ep = $p->getEnemyParty();
     $loot_xp = array();
     $loot_ny = array();
     foreach ($p->getMembers() as $member) {
         $loot_xp[$member->getID()] = 0;
         $loot_ny[$member->getID()] = 0;
     }
     $out = array();
     // 		$out = '';
     // 		$out_ep = '';
     foreach ($damage as $pid => $dmg) {
         if ($dmg <= 0) {
             continue;
         }
         $target = $ep->getMemberByPID($pid);
         $target->dealDamage($dmg);
         if (true === $target->isDead()) {
             $xp = $target->isHuman() ? 0 : $target->getLootXP();
             //				$xp = $target->getLootXP();
             $nuyen = $target->getLootNuyen();
             if ($player->isNPC()) {
                 $target->resetXP();
             }
             $target->giveNuyen(-$nuyen);
             // 				$app = Shadowrun4::lang('kills', array($target->getName(), $dmg));
             $out[$target->getID()] = array($target, $dmg, true);
             // 				$out .= $app;
             // 				$out_ep .= $app;
             // 				$out .= sprintf(', kills %s with %s', $target->getName(), $dmg);
             // 				$out_ep .= sprintf(', kills %s with %s', $target->getName(), $dmg);
             $pxp = 0;
             foreach ($p->getMembers() as $member) {
                 $lxp = $xp / $mc;
                 $leveldiff = ($target->getBase('level') + 1) / ($member->getBase('level') + 1);
                 $lxp *= $leveldiff;
                 $lxp = round(Common::clamp($lxp, 0.01), 2);
                 $pxp += $lxp;
                 $loot_xp[$member->getID()] += $lxp;
                 $loot_ny[$member->getID()] += $nuyen / $mc;
             }
             $p->givePartyXP($pxp);
         } else {
             $out[$target->getID()] = array($target, $dmg, false);
             // 				$out .= Shadowrun4::lang('hits1', array($target->getName(), $dmg));
             // 				$out_ep .= Shadowrun4::lang('hits2', array($target->getName(), $dmg, $target->getHP(), $target->getMaxHP()));
             // 				$out .= sprintf(', hits %s with %s damage', $target->getName(), $dmg);
             // 				$out_ep .= sprintf(', hits %s with %s(%s/%s)HP left', $target->getName(), $dmg, $target->getHP(), $target->getMaxHP());
         }
     }
     ### OUTPUT
     if (count($out) === 0) {
         $p->ntice('1057', array($spellname, $player->getName()));
         // 			$p->notice($failmsg);
         return;
     }
     ### FRIEND PARTY
     // 		$out = substr($out, 2);
     foreach ($p->getMembers() as $member) {
         $member instanceof SR_Player;
         $loot_out = '';
         $ny = $loot_ny[$member->getID()];
         $xp = $loot_xp[$member->getID()];
         // 			$xp = round($xp, 2);
         if ($ny > 0 || $xp > 0) {
             $loot_out = $member->lang('loot_nyxp', array(Shadowfunc::displayNuyen($ny), $xp));
             // 				$loot_out = sprintf('. You loot %s and %.02f XP', Shadowfunc::displayNuyen($ny), $xp);
             $member->giveNuyen($ny);
             $member->giveXP($xp);
         }
         $msg = $player->getName();
         foreach ($out as $pid => $data) {
             list($target, $dmg, $is_kill) = $data;
             $target instanceof SR_Player;
             $key = true === $is_kill ? 'kills' : 'hits1';
             // 				$app = Shadowrun4::lang('kills', array($target->getName(), $dmg));
             $msg .= $member->lang($key, array($target->getName(), $dmg));
         }
         $member->message($msg . $loot_out . '.');
     }
     # ENEMY PARTY
     // 		$out_ep = substr($out_ep, 2);
     // 		$ep->message($player, $out_ep.'.');
     foreach ($ep->getMembers() as $member) {
         $msg = '';
         foreach ($out as $pid => $data) {
             list($target, $dmg, $is_kill) = $data;
             $target instanceof SR_Player;
             $key = true === $is_kill ? 'kills' : 'hits2';
             $msg .= $member->lang($key, array($target->getName(), $dmg, $target->getHP(), $target->getMaxHP()));
         }
         $member->message($msg . $loot_out . '.');
         if ($member->isDead()) {
             $member->gotKilledBy($player);
         }
     }
 }
示例#23
0
 public function ai_giveny(SR_Player $player, $ny)
 {
     return $this->ai_act("giveny {$player->getName()} {$ny}");
 }
示例#24
0
 private function forwardB(SR_Player $player, $dir, $fwbw, $busy = -1)
 {
     $by = $dir * $player->getMovePerSecond();
     $pid = $player->getID();
     $new_d = 0;
     $this->movePlayerB($pid, $by, $new_d);
     $busy = $busy > 0 ? ', ' . Shadowfunc::displayBusy($player->busy($busy)) : '.';
     $by = round($by, 1);
     $new_d = round($new_d, 1);
     $ep = $this->getEnemyParty();
     $pname = $player->getName();
     $this->ntice('5090', array($pname, abs($by), $fwbw, $new_d, $busy));
     $ep->ntice('5091', array($pname, abs($by), $fwbw, $new_d, $busy));
     // 		$message = sprintf(' moves %.01f meters %s and is now on position %.01f meters%s', abs($by), $fwbw, $new_d, $busy);
     // 		$this->message($player, $message);
     // 		$this->getEnemyParty()->message($player, $message);
     return true;
 }
示例#25
0
 public static function insertEntry(SR_Player $player, SR_Item $item, $price)
 {
     return self::table(__CLASS__)->insertAssoc(array('sr4bb_id' => 0, 'sr4bb_pname' => $player->getName(), 'sr4bb_iname' => $item->getName(), 'sr4bb_price' => $price, 'sr4bb_iamt' => $item->getAmount()));
 }
示例#26
0
 public static function onAddStorage(SR_Clan $clan, SR_Player $player)
 {
     $event = new self(array('sr4ch_id' => '0', 'sr4ch_cid' => $clan->getID(), 'sr4ch_time' => Shadowrun4::getTime(), 'sr4ch_pname' => $player->getName(), 'sr4ch_action' => self::ADD_STORAGE, 'sr4ch_iname' => NULL, 'sr4ch_amt' => $clan->getMaxStorage()));
     return self::insertAndSend($clan, $event);
 }
示例#27
0
文件: SR_Clan.php 项目: sinfocol/gwf3
 /**
  * Send a join request to the leader.
  * @param SR_Player $player
  */
 public function sendRequest(SR_Player $player)
 {
     $requests = GDO::table('SR_ClanRequests');
     if (false === $requests->insertAssoc(array('sr4cr_pid' => $player->getID(), 'sr4cr_cid' => $this->getID(), 'sr4cr_pname' => $player->getName()), true)) {
         return false;
     }
     $player->msg('5023');
     // 		$player->message(sprintf('Your join request has been sent to the clan leaders.'));
     return SR_ClanHistory::onRequest($this, $player);
 }
示例#28
0
 public function onCast(SR_Player $player, array $args, $wanted_level = true)
 {
     if ($this instanceof SR_CombatSpell) {
         if ($this->mode === self::MODE_BREW) {
         } elseif (!$player->isFighting()) {
             $player->msg('1052', array($this->getName()));
             // 				$player->message(sprintf('The spell %s works in combat only.', $this->getName()));
             return false;
         } elseif (count($args) === 0) {
             $members = $player->getEnemyParty()->getMembers();
             if (count($members) === 0) {
                 $player->msg('1052', array($this->getName()));
                 return false;
             }
             $member = $members[array_rand($members)];
             $args[] = $member->getEnum();
             //				$args[] = rand(1, $player->getEnemyParty()->getMemberCount());
         }
     } else {
         if (count($args) === 0) {
             $args[] = $player->getName();
         }
     }
     if ($this->mode === self::MODE_BREW) {
         # Dummy player
         $target = Shadowrun4::getDummyPlayer();
     } elseif (false === ($target = $this->getTarget($player, $args))) {
         return false;
     }
     $level = $this->getLevel($this->getCaster());
     if ($this->mode === self::MODE_BREW) {
         $level = $wanted_level;
     } elseif ($wanted_level !== true) {
         $wanted_level = (int) $wanted_level;
         if ($wanted_level < 0) {
             $player->msg('1053');
             // 				$player->message('You cannot cast a spell with a level smaller than 0.');
             return false;
         } elseif ($wanted_level > $level) {
             $player->msg('1054', array($this->getName(), $wanted_level, $level));
             // 				$player->message(sprintf('You cannot cast %s level %s because your spell level is only %s.', $this->getName(), $wanted_level, $level));
             return false;
         } else {
             $level = $wanted_level;
         }
     }
     $mp_faktor = $this->mode === self::MODE_BREW ? 1.5 : 1.0;
     $need = round($this->getManaCost($player, $level) * $mp_faktor, 1);
     $need = Common::clamp($need, 1, 1000000);
     $have = $player->getMP();
     if ($need > $have && false === $this->isPotionMode()) {
         $player->msg('1055', array($need, $this->getName(), $level, $have));
         // 			$player->message(sprintf('You need %s MP to cast %s, but you only have %s.', $need, $this->getName(), $have));
         return false;
     }
     $hits = $this->dice($this->getCaster(), $target, $level);
     echo "!!! CASTED {$hits} hits !!!\n";
     $busy = '';
     if ($player->isFighting()) {
         $busy = Shadowfunc::displayBusy($player->busy($this->getCastTime($level)));
     }
     // 		if ($hits < $target->get('essence'))
     // 		{
     // 			$waste = round($need/2, 1);
     // 			$player->healMP(-$waste);
     // 			$player->msg('1056', array($this->getName(), $waste, $busy));
     // // 			$player->message(sprintf('You failed to cast %s. %s MP wasted.%s', $this->getName(), $waste, $busy));
     // 			return false;
     // 		}
     if (false === $this->isPotionMode()) {
         $player->healMP(-$need);
     }
     if ($this->mode === self::MODE_BREW) {
         return true;
     }
     return $this->cast($player, $target, $level, $hits, $player);
 }
示例#29
0
 private function getSolution(SR_Player $player)
 {
     $pname = strtolower($player->getName());
     $hash = substr(md5(md5(md5($pname) . LAMB_PASSWORD2)), 3, 16);
     return str_replace(array('0', '1', '2', '3', '4', '5', '6', '7', '8', '9'), array('g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p'), $hash);
 }