metagame = $metagame; } // ---------------------------------------------------- protected function handle_chat_event($doc) { // player_id // player_name // message // global $event = $doc->firstChild; $message = $event->getAttribute("message"); // for the most part, chat events aren't commands, so check that first if (!starts_with($message, "/")) { return; } $sender = $event->getAttribute("player_name"); $sender_id = $event->getAttribute("player_id"); // admin only from here on if (!is_admin($sender, $sender_id)) { return; } // it's a silent server command, check which one if (check_command($message, "test2")) { $command = ""; $this->metagame->comms->send($command); } else if (check_command($message, "test")) { $this->metagame->comms->send("say test yourself"); } else if (check_command($message, "defend")) { // make ai defend only, both sides for ($i = 0; $i < 2; ++$i) { $command = "" . ""; $this->metagame->comms->send($command); } $this->metagame->comms->send("say defensive ai set"); } else if (check_command($message, "0_attack")) { // make ai defend only, both sides $command = "" . ""; $this->metagame->comms->send($command); $this->metagame->comms->send("say attack green ai set"); } else if (check_command($message, "0_win")) { $this->metagame->comms->send("declare_winner 0"); } else if (check_command($message, "1_win")) { $this->metagame->comms->send("declare_winner 1"); } else if (check_command($message, "1_lose")) { $command = "" . ""; $this->metagame->comms->send($command); } else if (check_command($message, "kick")) { $this->handle_kick($message); } else if (check_command($message, "whereami")) { _log("whereami received", 1); $info = get_player_info($this->metagame, $sender_id); if ($info && $info->hasAttribute("character_id")) { $character_id = $info->getAttribute("character_id"); $info = get_character_info($this->metagame, $character_id); if ($info) { $pos_str = $info->getAttribute("position"); $pos_array = parse_position($pos_str); $region = $this->metagame->get_region($pos_array); $text = $pos_str . ", " . $region; send_private_message($this->metagame, $sender_id, $text); } else { _log("character info not ok", 1); } } else { _log("player info not ok", 1); } } else if(check_command($message, "promote")) { $info = get_player_info($this->metagame, $sender_id); if ($info) { $id = $info->getAttribute("character_id"); $command = "" . // multiplier affected.. ""; $this->metagame->comms->send($command); } } else if(check_command($message, "rp")) { $info = get_player_info($this->metagame, $sender_id); if ($info) { $id = $info->getAttribute("character_id"); $command = "" . // multiplier affected.. ""; $this->metagame->comms->send($command); } } else if (check_command($message, "_create_vehicle")) { $this->spawn_instance_near_player($sender_id, "special_cargo_vehicle1.vehicle", "vehicle"); } else if (check_command($message, "_jeep")) { $this->spawn_instance_near_player($sender_id, "jeep.vehicle", "vehicle"); } else if(check_command($message, "_suitcase")) { // .. create suitcase near local player $this->spawn_instance_near_player($sender_id, "suitcase.carry_item", "carry_item"); } else if (check_command($message, "_g36")) { // .. create suitcase near local player $this->spawn_instance_near_player($sender_id, "g36.weapon", "weapon"); $this->spawn_instance_near_player($sender_id, "g36.weapon", "weapon"); $this->spawn_instance_near_player($sender_id, "g36.weapon", "weapon"); $this->spawn_instance_near_player($sender_id, "g36.weapon", "weapon"); $this->spawn_instance_near_player($sender_id, "g36.weapon", "weapon"); } } else if(check_command($message, "_tank")) { //RWR SPAWN MOD (SPAWN TANK $this->spawn_instance_near_player($sender_id, "tank1.vehicle", "vehicle"); } // -------------------------------------------- function has_ended() { // always on return false; } // -------------------------------------------- function has_started() { // always on return true; } // -------------------------------------------- function handle_kick($message) { // TODO: just for debuging, this shows to everyone $this->metagame->comms->send("say kicking!"); // get name given as parameter $name = substr($message, strlen("kick ") + 1); // assuming player name // ask for player list from the server $list_query_doc = new DOMDocument(); $command = "\n" . " \n" . ""; $list_query_doc->loadXML($command); // send the query command now $list_doc = $this->metagame->comms->query($list_query_doc); if ($list_doc) { $player_list = $list_doc->getElementsByTagName("player"); _log("* " . $player_list->length . " players found"); } else { _log("failed?"); } // go through the player list and match for the given name $player_id = -1; for ($i = 0; $i < $player_list->length; $i++) { $player = $player_list->item($i); $name2 = $player->getAttribute("name"); // case insensitive if (strcasecmp($name2, $name) === 0) { // found it $player_id = $player->getAttribute("player_id"); break; } } if ($player_id >= 0) { // ok player id, now kick // TODO: use XML chat command for private message back to who ever sent the message $this->metagame->comms->send("kick " . $player_id); } else { _log("* couldn't find a match for " . $name); // TODO: again, this shows to everyone $this->metagame->comms->send("say kick missed!"); } } // ---------------------------------------------------- protected function spawn_instance_near_player($sender_id, $key, $type) { $player_info = get_player_info($this->metagame, $sender_id); if ($player_info) { $character_info = get_character_info($this->metagame, $player_info->getAttribute("character_id")); if ($character_info) { $pos = parse_position($character_info->getAttribute("position")); $pos[0] += 5.0; $p = position_array_to_string($pos); $c = ""; $this->metagame->comms->send($c); } } } } ?>