("multiplayer_server_on_agent_killed_or_wounded_common",
[
(store_script_param, ":dead_agent_no", 1),
(store_script_param, ":killer_agent_no", 2),
(agent_get_position, pos0, ":killer_agent_no"),#Saxinger Edit
(try_begin),
(neg|multiplayer_is_dedicated_server), # run client side code.
(call_script,"script_multiplayer_client_on_agent_killed_or_wounded_common",":dead_agent_no"),
(try_end),
# General Score + Kills + Deaths calculation score is server side, kills and deaths client side aswell
(try_begin),
(agent_is_active,":dead_agent_no"), # Only if we actually killed someone.
(agent_is_human, ":dead_agent_no"), # and not a horse =p
(agent_get_team, ":dead_agent_team", ":dead_agent_no"), # get his team
# Store playerids, If not active then store -1 If bot/horse then we have -1 aswell.
(assign, ":killer_agent_team", -1),
(try_begin),
(agent_is_active,":killer_agent_no"),
(agent_get_team, ":killer_agent_team", ":killer_agent_no"),# troopStore killer agent team
(agent_get_player_id, ":killer_agent_player", ":killer_agent_no"),
(try_begin),
(neg|player_is_active, ":killer_agent_player"),
(assign,":killer_agent_player",-1),
(else_try),
(agent_get_slot,":instance_id",":dead_agent_no",slot_agent_current_control_prop),
(prop_instance_is_valid,":instance_id"),
(prop_instance_get_scene_prop_kind, ":cannon_kind", ":instance_id"),
(try_begin),
(is_between,":cannon_kind",mm_cannon_wood_types_begin,mm_cannon_wood_types_end),
(call_script,"script_stop_agent_controlling_cannon",":instance_id",":dead_agent_no"),
(else_try),
(call_script,"script_set_agent_controlling_prop",":instance_id",":dead_agent_no",0),
(try_end),
(try_end),
(try_end),
(try_begin),
(agent_get_player_id, ":dead_agent_player", ":dead_agent_no"),
(neg|player_is_active, ":dead_agent_player"),
(assign,":dead_agent_player",-1),
(try_end),
(assign,":kill_type",-1),
(assign,":score_affector",-1),
(assign,":score_affector_team",-1),
(try_begin),
(this_or_next|lt, ":killer_agent_no", 0), #if he killed himself (1a(team change) or 1b(self kill)) then decrease kill counts of killer player by one.
(eq, ":killer_agent_no", ":dead_agent_no"),
(assign,":kill_type",kill_type_self),
(assign,":score_affector",":dead_agent_player"),
(assign,":score_affector_team",":dead_agent_team"),
(else_try), # if he dident kill himself we must have a valid killer, Horses can kill you aswell ^^
(try_begin),
(eq, ":killer_agent_team", ":dead_agent_team"), # Same team
(neq, "$g_multiplayer_game_type", multiplayer_game_type_deathmatch),
(neq, "$g_multiplayer_game_type", multiplayer_game_type_duel),
(neq, "$g_multiplayer_game_type", multiplayer_game_type_scene_making),
(assign,":kill_type",kill_type_team),
(agent_is_human,":killer_agent_no"),
(agent_is_human,":dead_agent_no"),
(agent_is_alive, ":killer_agent_no"),
(str_store_player_username, s2, ":killer_agent_player"),
(str_store_player_username, s3, ":dead_agent_player"),
(str_store_string, s5, "@You have killed a teammate. Please note that teamkilling is not allowed on this server."),
(multiplayer_send_string_to_player, ":killer_agent_player", multiplayer_event_show_server_message, s5),
(str_store_string, s7, "@You have been teamkilled by {s2}."),
(multiplayer_send_string_to_player, ":dead_agent_player", multiplayer_event_show_server_message, s7),
(else_try),
(assign,":kill_type",kill_type_enemy),
#Saxinger begin
try_begin),
(agent_is_human,":killer_agent_no"),
(agent_is_human,":dead_agent_no"),
(agent_is_alive, ":killer_agent_no"),
(neq, ":killer_agent_player", -1),
(str_store_player_username, s2, ":killer_agent_player"),
(str_store_player_username, s3, ":dead_agent_player"),
(try_begin),
(ge, reg61, 5),
(agent_get_position, pos1, ":dead_agent_no"),
(get_distance_between_positions_in_meters, ":distance", pos0, pos1),
(assign, reg61, ":distance"),
(str_store_string, s8, "@You have killed {s3} | Distance {reg61} Meters."),
(multiplayer_send_string_to_player, ":killer_agent_player", multiplayer_event_show_server_message, s8),
(str_store_string, s9, "@You have been killed by {s2}."),
(multiplayer_send_string_to_player, ":dead_agent_player", multiplayer_event_show_server_message, s9),
(agent_get_slot, reg0, ":killer_agent_no", slot_killstreak),
(val_add, reg0, 1),
(agent_set_slot, ":killer_agent_no", slot_killstreak, reg0),
(agent_is_alive, ":killer_agent_no"),
(agent_is_active, ":killer_agent_no"),
(agent_is_human, ":killer_agent_no"),
(agent_get_player_id, ":killer_player", ":killer_agent_no"),
(str_store_player_username, s2, ":killer_player"),
(try_begin),
(agent_slot_eq, ":killer_agent_no", slot_killstreak, 5),
(str_store_string, s0, "str_server_killstreak_5"),
(call_script, "script_cf_server_message_syn"),
(else_try),
(agent_slot_eq, ":killer_agent_no", slot_killstreak, 10),
(str_store_string, s0, "str_server_killstreak_10"),
(call_script, "script_cf_server_message_syn"),
(else_try),
(agent_slot_eq, ":killer_agent_no", slot_killstreak, 15),
(str_store_string, s0, "str_server_killstreak_15"),
(call_script, "script_cf_server_message_syn"),
(else_try),
(agent_slot_eq, ":killer_agent_no", slot_killstreak, 20),
(str_store_string, s0, "str_server_killstreak_20"),
(call_script, "script_cf_server_message_syn"),
(try_end),
(else_try),
(str_store_string, s10, "@You have killed {s3} in combat."),
(multiplayer_send_string_to_player, ":killer_agent_player", multiplayer_event_show_server_message, s10),
(str_store_string, s11, "@You have been killed by {s2}."),
(multiplayer_send_string_to_player, ":dead_agent_player", multiplayer_event_show_server_message, s11),
(agent_get_slot, reg0, ":killer_agent_no", slot_killstreak),
(val_add, reg0, 1),
(agent_is_alive, ":killer_agent_no"),
(agent_is_active, ":killer_agent_no"),
(agent_is_human, ":killer_agent_no"),
(agent_set_slot, ":killer_agent_no", slot_killstreak, reg0),
(try_begin),
(agent_slot_eq, ":killer_agent_no", slot_killstreak, 5),
(str_store_string, s0, "str_server_killstreak_5"),
(call_script, "script_cf_server_message_syn"),
(else_try),
(agent_slot_eq, ":killer_agent_no", slot_killstreak, 10),
(str_store_string, s0, "str_server_killstreak_10"),
(call_script, "script_cf_server_message_syn"),
(else_try),
(agent_slot_eq, ":killer_agent_no", slot_killstreak, 15),
(str_store_string, s0, "str_server_killstreak_15"),
(call_script, "script_cf_server_message_syn"),
(else_try),
(agent_slot_eq, ":killer_agent_no", slot_killstreak, 20),
(str_store_string, s0, "str_server_killstreak_20"),
(call_script, "script_cf_server_message_syn"),
(try_end),
(try_end),
#Saxinger end
(try_end),
(assign,":score_affector",":killer_agent_player"),
(assign,":score_affector_team",":killer_agent_team"),
(try_end),
(try_begin),
(eq, "$g_multiplayer_game_type", multiplayer_game_type_commander), # For commander mode give kills of squad to commander
(agent_is_active,":killer_agent_no"),
(agent_is_human, ":killer_agent_no"),
(agent_is_non_player, ":killer_agent_no"),
(agent_get_group, ":agent_group", ":killer_agent_no"),
(gt,":agent_group",-1),
(player_is_active, ":agent_group"),
(player_get_agent_id, ":killer_agent_no", ":agent_group"),
(assign,":score_affector",":agent_group"),
(try_end),
(gt,":kill_type",-1),
(assign,":score_change",0), # Score + Kills difirence change =)
(try_begin),
(eq,":kill_type",kill_type_enemy),
(assign,":score_change",1),
(else_try),
(this_or_next|eq,":kill_type",kill_type_self),
(eq,":kill_type",kill_type_team),
(assign,":score_change",-1),
(try_end),
(try_begin), #adding 1 score points to agent which kills enemy agent at server
(multiplayer_is_server),
(try_begin), # In battle if we have bots controlled by the died agent then set their group to -1
(eq, "$g_multiplayer_game_type", multiplayer_game_type_battle),
(this_or_next|gt,"$g_multiplayer_num_bots_team_1",0),
(gt,"$g_multiplayer_num_bots_team_2",0),
(player_is_active,":dead_agent_player"),
(try_for_agents, ":cur_agent"),
(agent_is_active,":cur_agent"),
(agent_is_non_player, ":cur_agent"),
(agent_is_human, ":cur_agent"),
(agent_is_alive, ":cur_agent"),
(agent_get_group, ":agent_group", ":cur_agent"),
(eq, ":dead_agent_player", ":agent_group"),
(agent_set_group, ":cur_agent", -1),
(try_end),
(try_end),
(gt,":score_affector",-1),
(try_begin),
(neq,":score_change",0), # it is not 0
(player_get_score, ":score_affector_score", ":score_affector"),
(val_add, ":score_affector_score", ":score_change"),
(player_set_score, ":score_affector", ":score_affector_score"),
(try_end),
(player_is_active,":killer_agent_player"),#Can still be different from score affector if game in commander mode
(try_begin), # Log teamkills if we have a player teamkilling a player
(eq,":kill_type",kill_type_team),
(player_is_active,":dead_agent_player"),
(call_script,"script_multiplayer_server_on_player_teamkilled_player", ":dead_agent_player", ":killer_agent_player", ":dead_agent_team"),
(try_end),
(try_begin),
(this_or_next|eq,":kill_type",kill_type_enemy),
(eq,":kill_type",kill_type_team),
(player_is_active,":dead_agent_player"),
# Bring down ze banhammer
(player_is_admin, ":killer_agent_player"),
(agent_is_active,":killer_agent_no"),
(agent_is_alive,":killer_agent_no"),
(agent_get_wielded_item, ":item", ":killer_agent_no", 0),
(eq, ":item", "itm_banhammer"),
(str_store_player_username, s2, ":killer_agent_player"),
(str_store_player_username, s3, ":dead_agent_player"),
(str_store_string, s4, "str_ban_hammer_s2_s3"),
(call_script, "script_multiplayer_broadcast_message"), # Broadcast banhammer by message
(try_begin),
(player_get_unique_id, ":player_key", ":dead_agent_player"),
(gt,":player_key", 1), # Key auth server problem protection (id 1 if wrong)
(ban_player, ":dead_agent_player", 1, ":killer_agent_player"),
(else_try),
(kick_player, ":dead_agent_player"),
(try_end),
(try_end),
(try_end),
(try_begin),
# if its captain mode and player is dead
(eq, "$g_multiplayer_game_type", multiplayer_game_type_commander),
(eq, "$g_multiplayer_player_respawn_as_bot", 0), #Only if player can't respawn as bot
(agent_is_active,":dead_agent_no"),
(neg|agent_is_non_player, ":dead_agent_no"),
# then reset his squad's orders
#(agent_get_team, ":dead_team_no", ":dead_agent_no"),
(agent_get_player_id, ":dead_player_no", ":dead_agent_no"),
(player_is_active, ":dead_player_no"),
(set_show_messages, 0),
(team_give_order, ":dead_player_no", grc_everyone, mordr_charge),
(team_give_order, ":dead_player_no", grc_everyone, mordr_fire_at_will),
(team_give_order, ":dead_player_no", grc_everyone, mordr_use_any_weapon),
#(team_give_order, ":dead_player_no", grc_everyone, mordr_form_2_row),
(set_show_messages, 1),
(try_end),
(try_begin),
(eq, "$g_multiplayer_game_type", multiplayer_game_type_commander), # For commander mode give kills of squad to commander
(try_begin),
(agent_is_active,":killer_agent_no"),
(agent_is_human, ":killer_agent_no"),
(agent_is_non_player, ":killer_agent_no"),
(agent_get_group, ":agent_group", ":killer_agent_no"),
(gt,":agent_group",-1),
(player_is_active, ":agent_group"),
(player_get_agent_id, ":killer_agent_no", ":agent_group"),
(assign,":killer_agent_player",":agent_group"),
(try_end),
(try_begin),
(agent_is_active,":dead_agent_no"),
(agent_is_human, ":dead_agent_no"),
(agent_is_non_player, ":dead_agent_no"),
(agent_get_group, ":agent_group", ":dead_agent_no"),
(gt,":agent_group",-1),
(player_is_active, ":agent_group"),
(player_get_agent_id, ":dead_agent_no", ":agent_group"),
(assign,":dead_agent_player",":agent_group"),
(try_end),
(try_end),
(try_begin), # assigning Kills Both server + client side.
(neq,":score_change",0), # it is not 0 =P
(try_begin),
(gt,":score_affector",-1), # score affector is a player
(player_get_kill_count, ":score_affector_kills", ":score_affector"),
(val_add, ":score_affector_kills", ":score_change"),
(player_set_kill_count, ":score_affector", ":score_affector_kills"),
(else_try),
(gt,":killer_agent_no",-1),
(agent_is_human, ":killer_agent_no"), # it is a bot not a horse
(team_get_bot_kill_count, ":score_affector_team_bot_kill_count", ":score_affector_team"),
(val_add, ":score_affector_team_bot_kill_count", ":score_change"),
(team_set_bot_kill_count, ":score_affector_team", ":score_affector_team_bot_kill_count"),
(try_end),
(try_end),
(try_begin), # assigning deaths both server + client side.
(player_is_active,":dead_agent_player"), # dead guy is a player
(player_get_death_count, ":dead_agent_player_death_count", ":dead_agent_player"),
(val_add, ":dead_agent_player_death_count", 1),
(player_set_death_count, ":dead_agent_player", ":dead_agent_player_death_count"),
(else_try),
(agent_is_active,":dead_agent_no"),
(agent_is_human, ":dead_agent_no"), # it is a bot not a horse
(team_get_bot_death_count, ":dead_agent_team_bot_death_count", ":dead_agent_team"),
(val_add, ":dead_agent_team_bot_death_count", 1),
(team_set_bot_death_count, ":dead_agent_team", ":dead_agent_team_bot_death_count"),
(try_end),
(try_end),
]),