public function testMessageHasARobustSender() { $rec = new Player($this->char_id); Message::create(['send_from' => $rec->id(), 'send_to' => $this->char_id_2, 'message' => 'Random phpunit test message of some content', 'type' => 0]); $messages = Message::findByReceiver(new Player($this->char_id_2), $type = 0, $limit = 1000, $offset = 0); $this->assertGreaterThan(0, count($messages), 'Collection has no results found'); $first_message = $messages->first(); $this->assertTrue($first_message instanceof Message, 'First message not a valid message model'); $this->assertNotEmpty($first_message->sender); $this->assertGreaterThan(0, strlen($first_message->sender)); }
/** * Perform the effects of a clonekill. * @return string outcome or false **/ public static function kill(Player $self, Player $clone1, Player $clone2) { if (self::canKill($clone1, $clone2)) { $today = date("F j, Y, g:i a"); $clone1_health = $clone1->health(); $clone2_health = $clone2->health(); $clone1_turns = $clone1->turns(); $clone2_turns = $clone2->turns(); $clone1->changeTurns(-1 * $clone1->turns()); $clone1->death(); $clone2->changeTurns(-1 * $clone2->turns()); $clone2->death(); $result_message = "You obliterate the clone {$clone1->name()} for {$clone1_health} health, {$clone1_turns} turns\n and the clone {$clone2->name()} for {$clone2_health} health, {$clone2_turns} turns."; send_event($self->id(), $clone1->id(), "You and {$clone2->name()} were Clone Killed at {$today}."); send_event($self->id(), $clone2->id(), "You and {$clone1->name()} were Clone Killed at {$today}."); return $result_message; } else { return false; } }
public function testDoshinOfferSomeBountyOnATestPlayer() { $target_id = TestAccountCreateAndDestroy::create_alternate_testing_account(true); $this->char->set_gold(434343); $this->char->save(); $target = new Player($target_id); $request = new Request(['target' => $target->name(), 'amount' => 600]); RequestWrapper::inject($request); $doshin = new DoshinController(); $doshin->offerBounty(); $new_bounty = (new Player($target->id()))->bounty(); TestAccountCreateAndDestroy::destroy(); $this->assertEquals(600, $new_bounty); }
public function addPlayer(Player $user) { foreach ($this->players as $player) { $player->send('newplayer', array('id' => $user->id(), 'name' => $user->name())); $user->send('newplayer', array('id' => $player->id(), 'name' => $player->name())); } if (count($this->players) == 0) { $this->creator = $user; } $this->players[] = $user; $user->setGame($this); if (count($this->players) == $this->maxplayers) { $this->startGame(); } }
/** * group char **/ function testCreatePlayerObject() { $char = new Player($this->char_id); $this->assertTrue((bool) positive_int($char->id())); }
/** * Returns the state of the player from the database, * uses a user_id if one is present, otherwise * defaults to the currently logged in player, but can act on any player * if another username is passed in. * @param $user user_id or username **/ function char_info($p_id) { if (!$p_id) { if (defined('DEBUG') && DEBUG) { nw_error('DEPRECATED: call to char_info with a null argument. For clarity reasons, this is now deprecated, use the player object instead. Backtrace: ' . print_r(debug_backtrace(), true)); } return self_info(); } $id = whichever($p_id, SESSION::get('player_id')); // *** Default to current player. *** if (!is_numeric($id)) { // If there's no id, don't try to get any data. return null; } $player = new Player($id); // Constructor uses DAO to get player object. $player_data = array(); if ($player instanceof Player && $player->id()) { // Turn the player data vo into a simple array. $player_data = (array) $player->vo; $player_data['clan_id'] = $player->getClan() ? $player->getClan()->getID() : null; $player_data = add_data_to_player_row($player_data); } return $player_data; }
$covert = true; $target->addStatus(POISON); $target->addStatus(WEAKENED); // Weakness kills strength. $target_damage = rand($poisonMinimum, $poisonMaximum); $victim_alive = $target->subtractHealth($target_damage); $generic_state_change = "__TARGET__ has been poisoned!"; $generic_skill_result_message = "__TARGET__ has taken {$target_damage} damage!"; $msg = "You have been poisoned by {$attacker_id}"; send_event($attacker_char_id, $target->id(), $msg); } elseif ($command == 'Fire Bolt') { $target_damage = 5 * ceil($player->level() / 3) + rand(1, $player->getStrength()); $generic_skill_result_message = "__TARGET__ has taken {$target_damage} damage!"; $victim_alive = $target->harm($target_damage); $msg = "You have had fire bolt cast on you by " . $player->name(); send_event($player->id(), $target->id(), $msg); } else { if ($command == 'Heal' || $command == 'Harmonize') { // This is the starting template for self-use commands, eventually it'll be all refactored. $harmonize = false; if ($command == 'Harmonize') { $harmonize = true; } $hurt = $target->is_hurt_by(); // Check how much the TARGET is hurt (not the originator, necessarily). // Check that the target is not already status healing. if ($target->hasStatus(HEALING) && !$player->isAdmin()) { $turn_cost = 0; $generic_state_change = '__TARGET__ is already under a healing aura.'; } elseif ($hurt < 1) { $turn_cost = 0;
/** * Static details saving workaround for now. **/ public static function saveDetails(Player $pc) { $updated = update_query('update players set description = :desc, goals = :goals, instincts = :instincts, beliefs = :beliefs, traits = :traits where player_id = :id', [':id' => $pc->id(), ':desc' => $pc->description(), ':goals' => $pc->goals(), ':instincts' => $pc->instincts(), ':beliefs' => $pc->beliefs(), ':traits' => $pc->traits()]); return (bool) $updated; }
function testKickClanMember() { $player1 = new Player($this->char_id); $clan = ClanFactory::find($this->clan_id); $this->assertTrue($clan->addMember($player1, $player1)); $this->assertTrue($clan->addMember($player2 = new Player($this->char_id_2), $player1)); $this->assertTrue($clan->hasMember($player2->id())); $this->assertTrue($clan->hasMember($player1->id())); $clan->kickMember($player1->id(), $player2); $this->assertFalse($clan->hasMember($player1->id())); }
$self_use = $selfTarget || $target_id === $user_id; if ($self_use) { $target = $username; $targetObj = $player; } else { if ($target_id) { $targetObj = new Player($target_id); $target = $targetObj->name(); set_setting("last_item_used", $item_in); // Save last item used. } } $starting_turns = $player->vo->turns; $username_turns = $starting_turns; $username_level = $player->vo->level; if ($targetObj instanceof Player && $targetObj->id()) { $targets_turns = $targetObj->vo->turns; $targets_level = $targetObj->vo->level; $target_hp = $targetObj->vo->health; } else { $targets_turns = $targets_level = $target_hp = null; } $max_power_increase = 10; $level_difference = $targets_level - $username_level; $level_check = $username_level - $targets_level; $near_level_power_increase = nearLevelPowerIncrease($level_difference, $max_power_increase); // Sets the page to link back to. if ($target_id && ($link_back == "" || $link_back == 'player') && $target_id != $user_id) { $return_to = 'player'; } else { $return_to = 'inventory';
public function kickMember($p_playerID, Player $kicker, $self_leave = false) { global $today; query("DELETE FROM clan_player WHERE _player_id = :player AND _clan_id = :clan", [':player' => $p_playerID, ':clan' => $this->getID()]); if ($self_leave) { $msg = "You have been kicked out of " . $this->getName() . " by " . $kicker->name() . " on {$today}."; } else { $msg = "You have left clan " . $this->getName() . " on {$today}."; } send_message($kicker->id(), $p_playerID, $msg); return true; }
$ki_cost = 0; // Ki taken during use. $reuse = true; // Able to reuse the skill. $today = date("F j, Y, g:i a"); // Check whether the user actually has the needed skill. $has_skill = $skillListObj->hasSkill($command); $starting_turn_cost = $turn_cost; assert($turn_cost >= 0); $turns_to_take = null; // *** Even on failure take at least one turn. $char_id = self_char_id(); $player = new Player($char_id); if ($target != '' && $target != $player->player_id) { $target = new Player($target); $target_id = $target->id(); $return_to_target = true; } else { // Use the skill on himself. $return_to_target = false; $target = $player; $target_id = null; } $class = $player->vo->class; $covert = false; $victim_alive = true; $attacker_id = $username; $attacker_char_id = self_char_id(); $starting_turns = $player->vo->turns; $ending_turns = null; $level_check = $player->vo->level - $target->vo->level;
public function onMessage(IWebSocketConnection $conn, IWebSocketMessage $msg) { $arr = json_decode($msg->getData(), true); // If this is a new websocket connection, handle the user up front if ($arr['messageType'] == 'myid') { if (isset($this->users[$arr['id']])) { $user = $this->users[$arr['id']]; } else { $user = new Player(gentoken(), $conn->getId()); } $this->users[$user->id()] = $user; $this->conns[$conn->getId()] = $user; $user->setConnection($conn); $user->send('myname', array('name' => $user->name(), 'id' => $user->id(), 'ingame' => $user->game() != null)); if ($user->game() != null) { if ($user->game()->started) { $user->rejoinGame(); } else { $user->rejoinWaitingRoom(); } } else { foreach ($this->games as $game) { if ($game->started) { continue; } $user->send('newgame', array('name' => $game->name, 'creator' => $game->creator->name(), 'id' => $game->id)); } } $this->say("{$user->id()} connected"); return; } // Otherwise we better have a user set for them, and then continue on // as normally when processing the message if (!isset($this->conns[$conn->getId()])) { return; } $user = $this->conns[$conn->getId()]; switch ($arr['messageType']) { case 'newgame': if ($user->game() != null) { return; } // ERRORS NOT SHOWING ON CLIENT: FIX FIX FIX if ($arr['name'] == '') { return $user->send('error', 'Game needs a valid name'); } $game = new SevenWonders(); $game->maxplayers = intval($arr['players']); $game->name = $arr['name']; $game->id = gentoken(); $game->server = $this; $game->addPlayer($user); $this->games[$game->id] = $game; if ($game->maxplayers > 1) { $this->broadcast('newgame', array('name' => $game->name, 'creator' => $game->creator->name(), 'id' => $game->id), $user); } break; case 'joingame': if ($user->game() != null) { break; } $id = $arr['id']; if (!isset($this->games[$id]) || $this->games[$id]->started) { break; } $this->games[$id]->addPlayer($user); break; case 'changename': if ($user->game() == null && $arr['name'] != '') { $user->setName($arr['name']); } // Broadcast name change here in case they're hosting a game? break; default: if ($user->game() != null) { $user->game()->onMessage($user, $arr); } else { $user->send('error', "Error: could not recognize command " . $arr['messageType']); } break; } }
if (!$target_player_obj || !$target_player_obj->id() || !$target_player_obj->isActive()) { $template = 'no-player.tpl'; $parts = array(); } else { $player_info = $target_player_obj->as_array(); // Pull the info out of the object. if (!$player_info) { $template = 'no-player.tpl'; $parts = array(); } else { $viewing_player_obj = new Player(self_char_id()); //$score = get_score_formula(); $self = self_char_id() && self_char_id() == $player_info['player_id']; // Record whether this is a self-viewing. if ($viewing_player_obj && $viewing_player_obj->vo) { $char_id = $viewing_player_obj->id(); $username = $viewing_player_obj->name(); } $message = in('message'); $player = $target = $player_info['uname']; // reset the target and target_id vars. $target_id = $player_info['player_id']; $target_class_theme = char_class_theme($target_id); if ($message) { send_message($char_id, $target_id, $message); // "message sent" notice will be displayed by the template itself. } // Get the player's kills for this date. $kills_today = query_item('select sum(killpoints) from levelling_log where _player_id = :player_id and killsdate = CURRENT_DATE and killpoints > 0', array(':player_id' => $target_id)); $viewers_clan = $viewing_player_obj instanceof Player && $viewing_player_obj->vo ? get_clan_by_player_id($viewing_player_obj->vo->player_id) : null; // Attack Legal section