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);
}
}
}
}
?>