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 function onNPCTalk(SR_Player $player, $word, array $args) { // $b = chr(2); switch ($word) { case 'magic': return $this->rply($word); // return $this->reply('Yeah, I even sell some magic potions and elixirs.'); // return $this->reply('Yeah, I even sell some magic potions and elixirs.'); case 'chemistry': $this->rply($word); // $this->reply("You can buy similar things here for chemistry or even {$b}magic{$b} potions."); $player->giveKnowledge('words', 'Magic'); return true; case 'hello': return $this->rply($word, array($this->getName())); // return $this->reply("Hello, my name is ".$this->getName()." and I sell items for {$b}chemistry{$b} and similar stuff."); // return $this->reply("Hello, my name is ".$this->getName()." and I sell items for {$b}chemistry{$b} and similar stuff."); case 'gizmore': case 'somerandomnick': return $this->rply('brother', array($word)); // return $this->reply(sprintf('Oh you mean my brother %s in Amerindian.', $word)); // return $this->reply(sprintf('Oh you mean my brother %s in Amerindian.', $word)); default: return $this->rply('default', array($word)); // return $this->reply("What do you mean with $word?"); } }
public function getStoreItems(SR_Player $player) { $back = array(); $rep = $player->get('reputation'); $back[] = array('Headcomputer'); $back[] = array('SmartGoggles'); $back[] = array('Sporn'); $back[] = array('Cybermuscles'); $back[] = array('CybermusclesV2'); $back[] = array('CybermusclesV3'); $back[] = array('DermalPlates'); if ($rep >= 1) { $back[] = array('DermalPlatesV2'); } if ($rep >= 2) { $back[] = array('DermalPlatesV3'); } $back[] = array('WiredReflexes'); if ($rep >= 2) { $back[] = array('WiredReflexesV2'); } if ($rep >= 3) { $back[] = array('WiredReflexesV3'); } return $back; }
public function onSolveCrypto(SR_Player $player, $word, array $args) { if (count($args) !== 1) { $this->rply('crypto1'); // $this->reply('I wrote down some message and cannot decipher it myself again -.- Please tell me the password with #talk crypto <password>.'); $this->rply('crypto2'); // $this->reply('eht swordsap ot ym fase si ont xenophi tub gimmuhnbrid.'); $cry = $player->get('crypto'); if ($cry >= 1) { $player->message($this->langNPC('skills1')); // $player->message('With your awesome crypto skills you can easily read the message: "the password to my safe is not phoenix but hummingbird."'); } elseif ($cry >= 0) { $player->message($this->langNPC('skills2')); // $player->message('With your awesome crypto skills you immediately recognize it\'s a simple anagram for each word.'); } return true; } $answer = $args[0]; switch ($answer) { case 'hummingbird': return $this->onQuestSolved($player, $word, $args); case 'phoenix': return $this->rply('almost'); // return $this->reply('Yeah this rings a bell ... Let me try ... Darn wrong!'); // return $this->reply('Yeah this rings a bell ... Let me try ... Darn wrong!'); default: return $this->rply('wrong'); // return $this->reply('Sweet let me try it on my safe ... Darn wrong.'); } }
private function calcNegPrice(SR_Player $player) { $price = 10000; $try = $player->getTemp(self::TEMP_WORDN); $price -= $try * 1000; return $price; }
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 getPocketsTuneup(SR_Player $player) { $bo = $player->get('body') * 0.02; $st = $player->get('strength') * 0.03; $qu = $player->get('quickness') * 0.05; return $bo + $st + $qu; }
public static function execute(SR_Player $player, array $args) { $pp = Shadowrun4::getParties(); foreach ($pp as $i => $p) { $p instanceof SR_Party; if (!$p->isHuman()) { unset($pp[$i]); } } $page = isset($args[0]) ? intval($args[0]) : 1; $nItems = count($pp); $nPages = GWF_PageMenu::getPagecount(self::PPP, $nItems); $page = Common::clamp($page, 1, $nPages); $from = GWF_PageMenu::getFrom($page, self::PPP); $slice = array_slice($pp, $from, self::PPP); $out = ''; $format = $player->lang('fmt_list'); foreach ($slice as $p) { $p instanceof SR_Party; $leader = $p->getLeader()->displayName(); $l = $p->getSum('level', true); $ll = $p->getSum('level', false); $mc = $p->getMemberCount(); $item = sprintf('%s(L%s(%s))(M%s)', $leader, $l, $ll, $mc); $out .= sprintf($format, $item); // $out .= sprintf(', %s(L%s(%s))(M%s)', $leader, $l, $ll, $mc); } return self::rply($player, '5248', array($page, $nPages, ltrim($out, ',; '))); // $bot = Shadowrap::instance($player); // $bot->reply(sprintf('Parties page %s from %s: %s.', $page, $nPages, substr($out, 2))); }
public function getRespawnLocation(SR_Player $player) { if ($player->getNuyen() > 100 && $player->hasKnowledge('places', 'Seattle_Hotel')) { return 'Seattle_Hotel'; } return parent::getRespawnLocation($player); }
public function checkQuest(SR_NPC $npc, SR_Player $player) { $have = $this->getAmount(); $need = $this->getNeededAmount(); $give = 0; foreach ($player->getInventory() as $item) { if ($item instanceof SR_Rune) { $player->deleteFromInventory($item); $have++; $give++; if ($have >= $need) { break; } } } if ($give > 0) { $this->increase('sr4qu_amount', $give); $player->message($this->lang('gave', array($give, $npc->getName()))); // $player->message(sprintf('You gave %s %s to %s.', $give, 'Runes', $npc->getName())); } if ($have >= $need) { $npc->reply($this->lang('thanks1')); // $npc->reply('Thank you very much my friend. Now I can also craft some equipment again.'); $this->onSolve($player); $npc->reply($this->lang('thanks2', array(self::REWARD_RUNES))); // $npc->reply('As a reward I let you create '.self::REWARD_RUNES.' new runes via #reward.'); $player->increaseConst(Seattle_Blacksmith::REWARD_RUNES, self::REWARD_RUNES); } else { $npc->reply($this->lang('more', array($have, $need))); // $npc->reply(sprintf('You gave me %s of %s Runes... Give me a few more and I will reward you greatly :)', $have, $need)); } }
public function onNPCQuestTalkB(SR_TalkingNPC $npc, SR_Player $player, $word, array $args = NULL) { $need = $this->getNeededAmount(); $dp = $this->displayRewardNuyen(); switch ($word) { case 'shadowrun': $npc->reply("Haha ... you want to be a runner ... kill 20 bums and i reward your with {$dp}."); break; case 'confirm': $npc->reply("So?"); break; case 'yes': $npc->reply('I was just kidding!'); break; case 'no': $npc->reply('Hehe yeah, i was just kidding.'); if (count($args) === 0 || $args[0] !== 'SURE') { $player->message("Use #talk no SURE to decline this quest forever."); } else { $this->decline($player); } break; } return true; }
public function onThrow(SR_Player $player, SR_Player $target) { $firearms = $player->get('firearms'); $atk = 20 + $firearms; $mindmg = 1; $maxdmg = 6; $out_dmg = ''; $out_dmgep = ''; $out_eff = ''; $inaccuracy = rand(2, 4) - ($firearms ? 1 : 0); $targets = $this->computeDistances($target, $inaccuracy); foreach ($targets as $data) { list($t, $d) = $data; $t instanceof SR_Player; $a = $atk - $d + rand(-1, 2); $a = Common::clamp($a, 0, $atk); $def = $t->get('defense'); $arm = $t->get('marm'); $hits = Shadowfunc::diceHits($mindmg, $arm, $atk, $def, $player, $t); $hits -= $arm; $hits = Common::clamp($hits, 0); if ($hits == 0) { continue; } $dmg = round($mindmg + $hits / 10, 2); if ($dmg <= 0) { continue; } } }
public function onEnter(SR_Player $player) { $party = $player->getParty(); $dice = rand(0, 6); if ($dice < 2) { $this->partyMessage($player, 'lucky'); // $party->notice('You silently search the door and windows for an entrance. You were lucky and sneak in...'); $this->teleportInside($player, 'Hideout_Exit'); } else { if ($dice < 4) { $this->partyMessage($player, 'noluck'); // $party->notice('You silently search the door and windows for an entrance. You have no luck, everything\'s closed.'); } else { if ($dice < 6) { $this->partyMessage($player, 'fight2'); // $party->notice('You silently search the door and windows for an entrance. Two punks notice you and attack!'); SR_NPC::createEnemyParty('Redmond_Cyberpunk', 'Redmond_Cyberpunk')->fight($party, true); } else { $this->partyMessage($player, 'fight4'); // $party->notice('You take a look through the doors keyhole. A party of four punks opens the door and surprises you.'); SR_NPC::createEnemyParty('Redmond_Cyberpunk', 'Redmond_Cyberpunk', 'Redmond_Pinkhead', 'Redmond_Lamer')->fight($party, true); } } } }
public function getHelpText(SR_Player $player) { return $player->lang('hlp_hotel', array($this->displaySleepPrice($player))); // $price = $this->calcPrice($player); // $c = Shadowrun4::SR_SHORTCUT; // return sprintf('You can pay %s to %ssleep here and restore your party`s HP/MP.', $price, $c); }
public static function execute(SR_Player $player, array $args) { $p = $player->getParty(); if (false !== ($city = $p->getCityClass())) { if ($city->isDungeon()) { self::rply($player, '1035'); return false; // Shadowrap::instance($player)->reply('In dungeons you don\'t have mounts.'); } } // $i = 1; $format = $player->lang('fmt_sumlist'); $out = ''; $total = 0.0; $total_max = 0.0; foreach ($p->getMembers() as $member) { $member instanceof SR_Player; $mount = $member->getMount(); $we = $mount->calcMountWeight(); $max = $mount->getMountWeightB(); $total += $we; $total_max += $max; if ('' !== ($weight = $mount->displayWeight())) { // $weight = "({$weight})"; } $out .= sprintf($format, $member->getEnum(), $mount->getName(), $weight); // $out .= sprintf(", \x02%s\x02-%s%s", $member->getEnum(), $mount->getName(), $weight); } return self::rply($player, '5083', array(Shadowfunc::displayWeight($total), Shadowfunc::displayWeight($total_max), ltrim($out, ',; '))); // $message = sprintf('Party Mounts(%s/%s): %s.', Shadowfunc::displayWeight($total), Shadowfunc::displayWeight($total_max), substr($out, 2)); return Shadowrap::instance($player)->reply($message); }
public function onNPCTalk(SR_Player $player, $word, array $args) { // $c = Shadowrun4::SR_SHORTCUT; // $b = chr(2); switch ($word) { case 'malois': // return $this->reply('I do not talk about customers.'); // return $this->reply('I do not talk about customers.'); case 'heal': return $this->rply($word); // return $this->reply("We can heal you for some nuyen. Just use {$c}heal here."); // return $this->reply("We can heal you for some nuyen. Just use {$c}heal here."); case 'yes': case 'no': case 'cyberware': return $this->rply('cyber'); // return $this->reply("We have the best Renraku Cyberware available. Use {$c}view, {$c}implant and {$c}unplant to manage your accessoires."); // return $this->reply("We have the best Renraku Cyberware available. Use {$c}view, {$c}implant and {$c}unplant to manage your accessoires."); case 'hello': default: $this->rply('default'); // $this->reply("Hello chummer, need some {$b}heal{$b} or {$b}cyberware{$b}?"); $player->giveKnowledge('words', 'Cyberware', 'Yes', 'No'); return true; } }
public function onEnter(SR_Player $player) { $party = $player->getParty(); $player->message($this->lang($player, 'no_enter')); // $player->message('You cannot find any open entrance to the ship ... Yet.'); return false; }
private function isMaloisHere(SR_Player $player) { if (false === ($party = $player->getParty())) { return false; } return $party->hasNPCNamed('Malois') || $party->hasConst('RESCUED_MALOIS') ? false : true; }
public function getNPCS(SR_Player $player) { if ($player->hasConst('RESCUED_MALOIS')) { return array('talk' => 'Chicago_StoreMalois'); } return array(); }
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; }
private function onTrollReward(SR_NPC $npc, SR_Player $player) { $max = $player->isRunner() ? Shadowcmd_lvlup::MAX_VAL_ATTRIBUTE_RUNNER : Shadowcmd_lvlup::MAX_VAL_ATTRIBUTE; $base = $player->getBase('magic'); if ($base >= $max) { $ny = 5000; $player->giveNuyen($ny); return $player->message($this->lang('reward_ny', array($ny))); // return $player->message('Larry hands you another 5000 nuyen!'); } $player->message($this->lang('reward1')); // $player->message('Larry leads you to a shamane: "This is our shamane, Srando, he can help you."'); $race = $player->getRace(); if ($race === 'Ork' || $race === 'Troll') { $player->message($this->lang('reward2', array($race))); // $player->message('The shamane says: "You are a strong '.$race.'. You just need to calm down sometime."'); $player->message($this->lang('reward3')); // $player->message('You are starting to argue, but the shamane continues: "If you calm you have more time to strengthen yourself. Focus yourself, and the path is clear."'); $player->message($this->lang('reward4')); // $player->message('The shamane touches your head: "Your mind is now clear from anything. You can focus yourself from now on."'); $player->message($this->lang('reward5')); // $player->message('Your character is now allowed to learn magic and spells.'); } else { $player->message($this->lang('reward5')); // $player->message('The shamane mumbles some magic spells and raises your base value for magic by 1.'); } $player->alterField('magic', 1); $player->modify(); return true; }
public function cast(SR_Player $player, SR_Player $target, $level, $hits, SR_Player $potion_player) { // echo "Casting Firewall with level $level and $hits hits.\n"; # Firebolt ads 0.20 per level $firebolt = $potion_player->getSpell('firebolt'); $firebolt = $firebolt === false ? 0 : $firebolt->getLevel($potion_player); $firebolt = round($firebolt / 5, 1); $level += $firebolt; # Fireball ads 0.25 per level $fireball = $potion_player->getSpell('fireball'); $fireball = $fireball === false ? 0 : $fireball->getLevel($potion_player); $fireball = round($fireball / 4, 1); $level += $fireball; $line = $target->getY(); $damage = array(); $ep = $target->getParty(); foreach ($ep->getMembers() as $t) { $t instanceof SR_Player; $d = abs($line - $t->getY()); // echo "Distance to target is $d\n"; $l = $level - $d; if ($l >= 0) { $hits = $this->dice($potion_player, $t, $l); $damage[$t->getID()] = $this->calcFirewallDamage($player, $t, $level, $hits); } } $this->announceADV($player, $target, $level); Shadowfunc::multiDamage($player, $damage); return true; }
public function getRespawnLocation(SR_Player $player) { if ($player->getNuyen() > 200 && $player->hasKnowledge('places', 'Vegas_Hotel')) { return 'Vegas_Hotel'; } return Shadowrun4::getCity('Chicago')->getRespawnLocation($player); }
public function onNPCQuestTalkB(SR_TalkingNPC $npc, SR_Player $player, $word, array $args = NULL) { echo "HERE\n"; $temp = 'QT_LILLY'; switch ($word) { default: $t = $player->getTemp($temp, 0); $player->setTemp($temp, $t + 1); echo "HERE {$t}\n"; switch ($t) { case 0: $npc->reply($this->lang('sr1')); $npc->reply($this->lang('sr2')); return false; case 1: $npc->reply($this->lang('sr3')); $npc->reply($this->lang('sr4')); return false; case 2: $npc->reply($this->lang('sr5')); $npc->reply($this->lang('sr6')); default: return $npc->reply($this->lang('confirm')); } case 'confirm': return $npc->reply($this->lang('confirm')); case 'yes': return $npc->reply($this->lang('yes')); case 'no': return $npc->reply($this->lang('no')); } }
private function checkIDCards(SR_Player $player) { $p = $player->getParty(); $names = array(); foreach ($p->getMembers() as $member) { $member instanceof SR_Player; if (!$member->getInvItemByName('IDCard')) { $names[] = $member->getName(); } } if (count($names) > 0) { $this->rply('no_card', array(implode(', ', $names))); // $p->notice(sprintf("It seems like %s is/are missing an IDCard.", GWF_Array::implodeHuman($names))); $this->rply('everyone'); // $this->reply('Every person needs an own ID card. Move along.'); return; } $this->rply('revoke'); // $this->reply('These ID cards need to be revoked and you have to get a new one. I will also have to keep them for investigation. I may let you pass as your security level is below 2.'); $this->rply('hand'); // $p->notice("Each member hands an IDCard to the guards and you enter the Renraku tower."); foreach ($p->getMembers() as $member) { $member instanceof SR_Player; $card = $member->getInvItemByName('IDCard'); $card->useAmount($member, 1); } // Delete guards $this->getParty()->popAction(true); $p->popAction(false); $renraku = $player->getParty()->getLocationClass(); $renraku instanceof Seattle_Renraku; $renraku->beam($player, 'Renraku_Exit', SR_Party::ACTION_INSIDE); }
public function onEnter(SR_Player $player) { $p = $player->getParty(); if ($p->getMin('level', true) < 1) { $this->partyMessage($player, 'afraid', array(1)); // $p->notice('You are too afraid to go in there. (Each party member needs a minimum level of 1)'); return true; } foreach ($p->getMembers() as $member) { $member instanceof SR_Player; if ($member->isHuman()) { $quest = SR_Quest::getQuest($member, 'Renraku_I'); $quest instanceof Quest_Renraku_I; if (false === $quest->checkOrk($player)) { $this->partyMessage($player, 'angryork'); // $p->notice('A big angry Ork shouts to you: "You not welcome here!" - The Ork attacks you with a tbs-pocket-knife.'); SR_NPC::createEnemyParty('Redmond_Ork')->fight($p, true); return true; } } } parent::onEnter($player); // $p->pushAction(SR_Party::ACTION_INSIDE); $b = chr(2); $c = Shadowrun4::SR_SHORTCUT; $this->partyMessage($player, 'enter1'); $this->partyMessage($player, 'enter2'); // $p->notice('The guys in there stare quiet at their drinks when you enter the Trolls\' Inn.'); // $p->notice('You see a barkeeper, a suspicious person in a dark corner, a soldier and some guests, mostly orks and trolls. One of the guests greets and beckons you.'); $this->partyHelpMessage($player, 'help'); // $p->help("Use {$b}{$c}ttb{$b}(arkeeper), {$b}{$c}ttg{$b}(uest), {$b}{$c}ttj{$b}(ohnson) and {$b}{$c}tts{$b}(oldier) to talk to the persons."); return true; }
public static function onFight(SR_Player $player, SR_Party $ep) { $p = $player->getParty(); $l1 = $player->get('level'); $add = 0.0; foreach ($ep->getMembers() as $e) { $e instanceof SR_Player; if (!$e->isHuman()) { $add += 0.05; continue; } $badkarma = $e->getBase('bad_karma'); if ($badkarma > 0) { continue; } // $bounty = $e->getBase('sr4pl_bounty'); $l2 = $e->get('level'); $diff = $l1 - $l2; if ($diff < 0) { continue; } $add += round($diff / 100, 2); } self::addBadKarma($player, $add); }
public function onNPCQuestTalkB(SR_TalkingNPC $npc, SR_Player $player, $word, array $args = NULL) { $need = $this->getNeededAmount(); $ny = $this->getRewardNuyen(); $dny = Shadowfunc::displayNuyen($ny); switch ($word) { case 'shadowrun': $npc->reply("Heh ... well ... lol ... well ..."); $npc->reply("You can indeed do a job for me ^^"); $player->message('The salesman whispers: "I messed up the yearly inventory" ... '); $npc->reply("I am going into own business and purchase Scanners and Credsticks."); $player->message('The salesman whispers: "I will compensate you ..." '); break; case 'confirm': $npc->reply("Thank you for your help in advance."); break; case 'yes': $npc->reply('Thank you chummer.'); break; case 'no': $npc->reply('Laters chummer.'); break; } return true; }
public function onNPCQuestTalkB(SR_TalkingNPC $npc, SR_Player $player, $word, array $args = NULL) { $need = $this->getNeededAmount(); switch ($word) { case 'shadowrun': $npc->reply($this->lang('run1')); $npc->reply($this->lang('run2', array($need))); $player->giveKnowledge('words', 'Temple'); // $npc->reply("We could need help in getting more customers here."); // $npc->reply("If you could \X02#say temple\X02 to {$need} citizens i will reward you very well, ok?"); break; case 'confirm': $npc->reply($this->lang('confirm')); // $npc->reply("What do you think?"); break; case 'yes': $npc->reply($this->lang('yes')); // $npc->reply('Perfect!'); break; case 'no': $npc->reply($this->lang('no')); // $npc->reply('Ok'); break; } return true; }
protected static function onHPMP(SR_Player $player, $what, $key) { // $i = 1; $b = chr(2); // $bot = Shadowrap::instance($player); $party = $player->getParty(); $members = $party->getMembers(); $format = $player->lang('fmt_hp_mp'); $back = ''; foreach ($members as $member) { $member instanceof SR_Player; $hpmp = $member->getBase($what); $hpmmpm = $member->get('max_' . $what); $b2 = ''; $b1 = 0; if ($what === 'hp') { if ($member->needsHeal()) { $b2 = $b; $b1 = 1; } } elseif ($what === 'mp') { if ($member->getBase('magic') >= 0) { if ($member->needsEther()) { $b2 = $b; $b1 = 1; } } } $back .= sprintf($format, $member->getEnum(), $member->getName(), $hpmp, $hpmmpm, $b2, $b1); // $back .= sprintf(", %s-%s%s(%s/%s)%s", $b.($member->getEnum()).$b, $b2, $member->getName(), $hpmp, $hpmmpm, $b2); } return self::rply($player, $key, array(ltrim($back, ',; '))); // $bot->reply(sprintf('Your parties %s: %s.', $text, substr($back, 2))); // return true; }