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; }
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 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())); }
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())); }
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()))); }
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; }
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; }
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; } }
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); } }
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)); }
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; } }
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; }
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; }
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); }
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); }
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()))); }
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; }
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; } }
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); }
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; }
public static function execute(SR_Player $player, array $args) { $player->message(sprintf('Welcome back to Shadowlamb, %s!', $player->getName())); return true; }
/** * 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); } } }
public function ai_giveny(SR_Player $player, $ny) { return $this->ai_act("giveny {$player->getName()} {$ny}"); }
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; }
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())); }
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); }
/** * 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); }
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); }
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); }