1
Modifications / Saxingers Serverscrips for NW [OSP]
« on: April 19, 2014, 01:06:28 pm »****Saxingers Server Scripts****
Hi NW Community.
Here are some serverscripts fou you. I have some more but I thought the following are enough for the beginning.
The Scripts are for all gamemodes.
**Scripts**
- Join Message
Spoiler
When somebody joines the Server it is shown in a textmessage: (Saxinger joined the server).
If a admin joines : (Admin Saxinger joined the server). [Note that this server message will be returned as an Admin Chat]
If a admin joines : (Admin Saxinger joined the server). [Note that this server message will be returned as an Admin Chat]
[close]
- Leave Message
Spoiler
When somebody leaves the Server it is shown in a textmessage: (Saxinger left the server).
[close]
- Kill/Death Message and Killstreak
Spoiler
When a character a kills character b, character a will recieve a message with the Information how much he were away from character b. (I could also add the info what the ID of character a is)
Everytime when a kills b (and a dies not), a counter will add for every kill an point. When character has 5 kills there will be, a for all visible message : Saxinger has a 5 killstreak. The killstreak limit is 20.
Everytime when a kills b (and a dies not), a counter will add for every kill an point. When character has 5 kills there will be, a for all visible message : Saxinger has a 5 killstreak. The killstreak limit is 20.
[close]
- Automatic Server Announcements
Spoiler
At an interval of 5 minutes, the server will send one of five messages to all player. The admin can define them in module_strings : ("server_message_1", "Type you first Serveranouncement"),
("server_message_2", "Type you first Serveranouncement"),
("server_message_3", "Type you first Serveranouncement"),
("server_message_4", "Type you first Serveranouncement"),
("server_message_5", "Type you first Serveranouncement"),
("server_message_6", "Type you first Serveranouncement"),
("server_message_2", "Type you first Serveranouncement"),
("server_message_3", "Type you first Serveranouncement"),
("server_message_4", "Type you first Serveranouncement"),
("server_message_5", "Type you first Serveranouncement"),
("server_message_6", "Type you first Serveranouncement"),
[close]
-Server message
Spoiler
This script I almost use in all of my scripts. Add the script ("cf_server_message_syn") just to the module_scripts.
[close]
***Script Codes***
Spoiler
Join Message
Code
("multiplayer_server_player_joined_common",
[
(store_script_param, ":player_no", 1),
(try_begin),
(this_or_next|player_is_active, ":player_no"),
(eq, ":player_no", 0),
(call_script, "script_multiplayer_init_player_slots", ":player_no"),
(store_mission_timer_a, ":player_join_time"),
(player_set_slot, ":player_no", slot_player_join_time, ":player_join_time"),
(player_set_slot, ":player_no", slot_player_first_spawn, 1),
(try_begin),
(multiplayer_is_server),
(call_script, "script_multiplayer_send_initial_information", ":player_no"),
(player_get_unique_id, reg13, ":player_no"), #Saxinger edit
(try_end),
#Saxinger begin
(try_begin),
(str_store_player_username, s1, ":player_no"),
(try_begin),
(player_is_admin, ":player_no"),
(str_store_string, s4, "@Admin {s1} joined the Server."),
(try_begin),
(try_for_range, ":player_no", "$g_player_loops_begin", multiplayer_player_loops_end),
(player_is_active, ":player_no"),
(multiplayer_send_string_to_player, ":player_no", multiplayer_event_return_admin_chat, s4),
(try_end),
(server_add_message_to_log, "@[SERVER]: {s4}"),
(try_end),
(else_try),
(str_store_string, s4, "@{s1} joined the Server. "),
(call_script, "script_multiplayer_broadcast_message"),
(server_add_message_to_log, "@[SERVER]: {s4}"),
(try_end),
(str_store_string, s2, "str_welcome_message_saxinger"),
(multiplayer_send_string_to_player, ":player_no",multiplayer_event_show_server_message, s2),
#Saxinger end
(try_end),
(try_end),
]),
Spoiler
Note! You have to edit the String "welcome_message" in module_strings!
[close]
Leave Message
Code
multiplayer_server_log_player_leave = (
ti_on_player_exit, 0, 0, [(multiplayer_is_server),],
[
(store_trigger_param_1, ":player_no"),
(try_begin),
(player_is_active,":player_no"),
(str_store_player_username, s1, ":player_no"),
(player_get_unique_id, reg13, ":player_no"),
(server_add_message_to_log,"str_player_left_server_s1_reg13"),
(str_store_string, s4, "@{s1} left the Server. "),
(call_script, "script_multiplayer_broadcast_message"),
(try_end),
])
Kill/Death/Killstreak Message
Code
("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),
]),
Spoiler
You need to add the slots for the killstreak!
[close]
Server Announcement
Code
automatic_server_announcement = (
1, 0, 0, [(multiplayer_is_server),],
[
(val_add,"$counter",1),
(try_begin),
(eq, "$counter", 300), #5 minutes till a servermessage is automatillys send by the server
(store_random_in_range,":message",1,6),
(try_begin),
(eq,":message",1),
(str_store_string, s0, "str_server_message_1"),
(else_try),
(eq,":message",2),
(str_store_string, s0, "str_server_message_2"),
(else_try),
(eq,":message",3),
(str_store_string, s0, "str_server_message_3"),
(else_try),
(eq,":message",4),
(str_store_string, s0, "str_server_message_4"),
(else_try),
(eq,":message",5),
(str_store_string, s0, "str_server_message_5"),
(try_end),
(call_script, "script_cf_server_message_syn"),
(assign, "$counter", 0),
(try_end),
])
Spoiler
Note! You have to define also "server_message_1" to "server_message_5" in module_strings!
[close]
Server Message[/center
Code
("cf_server_message_syn", #script_cf_server_message_syn
[
(get_max_players,":max"),
(try_for_range, ":player_id",0,":max"),
(player_is_active, ":player_id"),
(multiplayer_send_string_to_player, ":player_id",multiplayer_event_show_server_message, s0),
(try_end),
]),
[close]
You have to define the slots in module_constants and the strings in modulle_strings.
My code:
Spoiler
****Strings****
Saxinger Automatically Announcements [INFO] This Servermessages are send automatically by the server every 5 minutes.
("server_message_1", "Type you first Serveranouncement"),
("server_message_2", "Type you first Serveranouncement"),
("server_message_3", "Type you first Serveranouncement"),
("server_message_4", "Type you first Serveranouncement"),
("server_message_5", "Type you first Serveranouncement"),
("server_message_6", "Type you first Serveranouncement"),
#Saxinger Killstreaks
("server_killstreak_5", "{s2} has a 5 killstreakt"),
("server_killstreak_10", "{s2} has a 10 killstreakt"),
("server_killstreak_15", "{s2} has a 15 killstreakt"),
("server_killstreak_20", "{s2} has a 20 killstreakt"),
#Welcome Message
("welcome_message_saxinger", "Type your welcome message"), #Example (Note the ID ist stored in reg13 so you can use it) : ("welcome_message", "Welcome to our server. Read the rules and folllow them. Have fun! Your Unique ID: [reg13]."),
****Slot****
slot_killstreak = 20
Saxinger Automatically Announcements [INFO] This Servermessages are send automatically by the server every 5 minutes.
("server_message_1", "Type you first Serveranouncement"),
("server_message_2", "Type you first Serveranouncement"),
("server_message_3", "Type you first Serveranouncement"),
("server_message_4", "Type you first Serveranouncement"),
("server_message_5", "Type you first Serveranouncement"),
("server_message_6", "Type you first Serveranouncement"),
#Saxinger Killstreaks
("server_killstreak_5", "{s2} has a 5 killstreakt"),
("server_killstreak_10", "{s2} has a 10 killstreakt"),
("server_killstreak_15", "{s2} has a 15 killstreakt"),
("server_killstreak_20", "{s2} has a 20 killstreakt"),
#Welcome Message
("welcome_message_saxinger", "Type your welcome message"), #Example (Note the ID ist stored in reg13 so you can use it) : ("welcome_message", "Welcome to our server. Read the rules and folllow them. Have fun! Your Unique ID: [reg13]."),
****Slot****
slot_killstreak = 20
[close]
Please note that I haven't tested the scripts in the last time, but they should work.
If youu need help how to add the scripts ore something like this, feel free to contact me.
Steam : Saxinger
I've a lot of ideas for more scripts, like anti gate troll scripts, heals and much more. If you have a idea or you need a script, feel also free to contact me.
Greets, Saxinger from the 3teFK.
If youu need help how to add the scripts ore something like this, feel free to contact me.
Steam : Saxinger
I've a lot of ideas for more scripts, like anti gate troll scripts, heals and much more. If you have a idea or you need a script, feel also free to contact me.
Greets, Saxinger from the 3teFK.
Download
Spoiler