Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- Scripts.Extend([ # SRP Necromancy Scripts.
- ("cf_server_transform_player_into_undead", # SERVER: Transform the given player into an undead agent.
- [
- (multiplayer_is_server),
- (store_script_param, ":necro_player_id", 1), # The player ID of the necromancer (-1 for none).
- (store_script_param, ":player_id", 2), # The player ID of the player to transform.
- (store_script_param, ":skeleton_chance", 3), # The chance that the player will transform into a skeleton out of 100.
- (store_script_param, ":reset", 4), # 1 = reset relations, 0 = don't reset relations.
- (player_get_agent_id, ":player_id", ":agent_id"),
- (assign, ":necro_agent_id", ":agent_id"),
- (try_begin),
- (eq, ":necro_player_id", -1),
- (player_get_agent_id, ":necro_player_id", ":slayer_agent_id"),
- (try_end),
- (agent_get_position, ":agent_id", pos1),
- (agent_deliver_damage_to_agent, ":agent_id", ":agent_id", 100000000),
- (call_script, "script_cf_server_spawn_random_undead", ":necro_player_id", ":skeleton_chance", ":reset"),
- ]
- ),
- ("cf_server_spawn_random_undead", #SERVER: Spawn a random undead agent at pos1.
- [
- (multiplayer_is_server),
- (store_script_param, ":player_id", 1), # The ID of the spawning necromancer (-1 for no necromancer).
- (store_script_param, ":skeleton_chance", 2), # The chance that skeletons will spawn out of 100.
- (store_script_param, ":reset", 3), # 1 = reset relations, 0 = don't reset relations.
- (store_random_in_range, ":rand", 0, 100),
- (assign, ":troop_id", -1),
- (try_begin), #skeleton
- (lt, ":rand", ":skeleton_chance"),
- (store_random_in_range, ":rand", 0, 100),
- (try_begin),
- (gt, ":rand", 25),
- (assign, ":troop_id", "trp_skeleton_archer"),
- (else_try),
- (assign, ":troop_id", "trp_skeleton_berserker"),
- (try_end),
- (else_try), #zombie
- (store_random_in_range, ":rand", 0,100),
- (try_begin),
- (gt, ":rand", 50),
- (assign, ":zombie", "trp_zombie"),
- (else_try),
- (gt, ":rand", 35),
- (assign, ":zombie", "trp_fast_zombie"),
- (else_try),
- (gt, ":rand", 15),
- (assign, ":zombie", "trp_tank_zombie"),
- (else_try),
- (assign, ":zombie", "trp_rotting_zombie"),
- (try_end),
- (try_end),
- (call_script, "cf_server_spawn_specific_undead", ":troop_id", ":player_id"),
- (try_begin),
- (ge, ":reset", 1),
- (call_script, "script_cf_server_reset_zombie_relations"),
- (try_end),
- ]
- ),
- ("cf_server_get_zombie_summon_position", #SERVER: Get the position to spawn a zombie around a player and store it in pos1.
- [
- (multiplayer_is_server),
- (store_script_param, ":player_id", 1), # The player id of the summoner (-1 for none).
- (player_get_agent_id, ":player_id", ":agent_id"),
- (agent_get_position, ":agent_id", pos1),
- (position_move_x, pos1, 50),
- (position_set_z_to_ground_level, pos1),
- ]
- ),
- ("cf_server_spawn_specific_undead", #SERVER: Summon an undead agent of given troop and necromancer at pos1.
- [
- (multiplayer_is_server),
- (store_script_param, ":troop_id", 1), # The troop to spawn.
- (store_script_param, ":player_id", 2), # The necromancer.
- (spawn_agent, ":troop_id"),
- (assign, ":agent_id", reg0),
- (agent_set_slot, ":agent_id", slot_agent_necromancer, ":player_id"),
- (particle_system_burst,"psys_war_smoke_tall", pos1, 15),
- (agent_play_sound, ":agent_id", "snd_pistol_shot"),
- ]
- ),
- ("cf_server_aoe_necro_damage", #SERVER: AOE damage from necro staff
- [
- (multiplayer_is_server),
- (store_script_param, ":attacker_agent", 1),
- (agent_get_position, pos0, ":attacker_agent"),
- (agent_get_player_id, ":attacker_player", ":attacker_agent"),
- (player_get_slot, ":attacker_fac", ":attacker_player", slot_player_faction_id),
- (try_for_agents, ":other_agent"),
- (neq, ":attacker_agent", ":other_agent"),
- (agent_is_active, ":other_agent"),
- (agent_get_position, pos2, ":other_agent"),
- (get_distance_between_positions, ":distance", pos0, pos2),
- (le, ":distance", 900),
- (agent_get_player_id, ":other_player", ":other_agent"),
- (assign, ":continue", 1),
- (try_begin),
- (player_is_active, ":other_player"),
- (try_begin),
- (player_get_slot, ":other_fac", ":other_player", slot_player_faction_id),
- (call_script, "script_cf_factions_are_hostile", ":other_fac", ":attacker_fac"),
- (player_set_slot, ":other_player", slot_player_zombie_infected, 1),
- (agent_get_player_id, ":attacker_player", ":attacker_agent"),
- (player_set_slot, ":other_player", slot_player_zombie_necromancer, ":attacker_player"),
- (else_try),
- (assign, ":continue", 0),
- (try_end),
- (try_end),
- (eq, ":continue", 1),
- (agent_get_slot, ":necro", ":other_agent", slot_agent_necromancer),
- (neq, ":necro", ":attacker_player"),
- (assign, ":damage", 50),
- (store_agent_hit_points,":hp",":other_agent",1),
- (store_sub, ":test", ":hp", ":damage"),
- (try_begin),
- (gt, ":test", 1),
- (agent_set_hit_points, ":other_agent", ":test"),#just deliver damage (no stun)
- (particle_system_burst,"psys_fireplace_fire_small", pos2, 15),
- (else_try),
- (agent_deliver_damage_to_agent,":attacker_agent", ":other_agent", ":damage"),#stun and deliver damage
- (try_end),
- (try_end),
- ]),
- ("cf_server_necromancer_spawn_skeleton_horse", #SERVER: spawn a skeleton horse by necromancer.
- [
- (multiplayer_is_server),
- (store_script_param_1, ":spawner_agent_id"),
- (agent_get_player_id, ":spawner_player_id", ":spawner_agent_id"),
- (agent_get_position, pos1, ":spawner_agent_id"),
- (position_move_x, pos1, 50),
- (position_set_z_to_ground_level, pos1),
- (set_spawn_position, pos1),
- (spawn_horse, "itm_bone_horse"),
- (particle_system_burst,"psys_war_smoke_tall", pos1, 15),
- (agent_set_slot, reg0, slot_agent_necromancer, ":spawner_player_id"),
- (call_script, "script_resset_zombie_relations"),
- ]
- ),
- ("cf_server_slay_all_undead", #SERVER: slay all undead
- [
- (multiplayer_is_server),
- (store_script_param_1, ":slayer_agent_id"), #-1 is no slayer.
- (try_for_agents, ":cur_agent"),
- (assign, ":final_slayer_agent_id", ":cur_agent"),
- (try_begin),
- (neq, ":slayer_agent_id", -1),
- (assign, ":final_slayer_agent_id", ":slayer_agent_id"),
- (try_end),
- (agent_get_item_id, ":item_id", ":cur_agent"),
- (agent_get_troop_id, ":troop_id", ":cur_agent"),
- (this_or_next|eq, ":item_id", "itm_bone_horse"),
- (this_or_next|eq, ":troop_id", "trp_zombie"),
- (this_or_next|eq, ":troop_id", "trp_fast_zombie"),
- (this_or_next|eq, ":troop_id", "trp_tank_zombie"),
- (this_or_next|eq, ":troop_id", "trp_skeleton_berserker"),
- (this_or_next|eq, ":troop_id", "trp_skeleton_archer"),
- (eq, ":troop_id", "trp_rotting_zombie"),
- (agent_deliver_damage_to_agent, ":final_slayer_agent_id", ":cur_agent", 10000000),
- (try_end),
- ]
- ),
- ("cf_server_necromancer_kill_own_undead", #SERVER: slay undead hoard owned by certain necromancer.
- [
- (multiplayer_is_server),
- (store_script_param_1, ":slayer_agent_id"), #-1 is no slayer
- (agent_get_player_id, ":necro", ":slayer_agent_id"),
- (try_for_agents, ":cur_agent"),
- (assign, ":final_slayer_agent_id", ":cur_agent"),
- (try_begin),
- (neq, ":slayer_agent_id", -1),
- (assign, ":final_slayer_agent_id", ":slayer_agent_id"),
- (try_end),
- (agent_get_item_id, ":item_id", ":cur_agent"),
- (agent_get_troop_id, ":troop_id", ":cur_agent"),
- (this_or_next|eq, ":item_id", "itm_bone_horse"),
- (this_or_next|eq, ":troop_id", "trp_zombie"),
- (this_or_next|eq, ":troop_id", "trp_fast_zombie"),
- (this_or_next|eq, ":troop_id", "trp_tank_zombie"),
- (this_or_next|eq, ":troop_id", "trp_skeleton_berserker"),
- (this_or_next|eq, ":troop_id", "trp_skeleton_archer"),
- (eq, ":troop_id", "trp_rotting_zombie"),
- (agent_get_slot, ":my_necro", ":cur_agent", slot_agent_necromancer),
- (eq, ":my_necro", ":necro"),
- (agent_deliver_damage_to_agent, ":final_slayer_agent_id", ":cur_agent", 10000000),
- (try_end),
- ]),
- ("cf_server_change_necro_state_of_player", # SERVER: handle an entire necro state change for a player (calls all required scripts).
- [
- (multiplayer_is_server),
- (store_script_param, ":player_id", 1), # The player id of the necromancer whose state should change.
- (store_script_param, ":change", 2), # The amount to change the state by (negative goes downward).
- (call_script, "script_cf_server_change_necro_state_id", ":player_id", ":change"),
- (call_script, "script_cf_server_send_necro_update_message", ":player_id"),
- (call_script, "script_resset_zombie_relations"),
- ]
- ),
- ("cf_server_change_necro_state_id", # SERVER: increment or decrement necro state by given amount.
- [
- (multiplayer_is_server),
- (store_script_param, ":player_id", 1), # The player id of the necromancer whose state should change.
- (store_script_param, ":change", 2), # The amount to change the state by (negative goes downward).
- (player_get_slot, ":state", ":player_id", slot_player_necromancer_zombie_state),
- (try_begin),
- (ge, ":change", 1),
- (try_for_range, ":index", 0, ":change"),
- (try_begin),
- (eq, ":state", necro_state_end),
- (assign, ":state", necro_state_begin),
- (else_try),
- (val_add, ":state", 1),
- (try_end),
- (try_end),
- (else_try),
- (le, ":change", -1),
- (try_for_range_backwards, ":index", 0, ":change"),
- (try_begin),
- (eq, ":state", necro_state_begin),
- (assign, ":state", necro_state_end),
- (else_try),
- (val_sub, ":state", 1),
- (try_end),
- (try_end),
- (try_end),
- (player_set_slot, ":player_id", slot_player_necromancer_zombie_state, ":state"),
- ]
- ),
- ("cf_server_send_necro_update_message", # SERVER: Send message to command giver based on necromancer state change.
- [
- (multiplayer_is_server),
- (store_script_param, ":player_id", 1), # The player who gives the command.
- (player_get_slot, ":state", ":player_id", slot_player_necromancer_zombie_state),
- (try_begin),
- (eq, ":state", necro_state_peaceful),
- (multiplayer_send_int_to_player, ":player_id", server_event_necromancer_message, 2),
- (else_try),
- (eq, ":state", necro_state_faction),
- (multiplayer_send_int_to_player, ":player_id", server_event_necromancer_message, 3),
- (else_try),
- (eq, ":state", necro_state_allies),
- (multiplayer_send_int_to_player, ":player_id", server_event_necromancer_message, 4),
- (else_try),
- (eq, ":state", necro_state_allies_com),
- (multiplayer_send_int_to_player, ":player_id", server_event_necromancer_message, 5),
- (else_try),
- (eq, ":state",necro_state_allies_com_outlaw),
- (multiplayer_send_int_to_player, ":player_id", server_event_necromancer_message, 6),
- (else_try),
- (eq, ":state", necro_state_noone),
- (multiplayer_send_int_to_player, ":player_id", server_event_necromancer_message, 7),
- (else_try),
- (eq, ":state", necro_state_ffa),
- (multiplayer_send_int_to_player, ":player_id", server_event_necromancer_message, 8),
- (try_end),
- ]),
- ("cf_server_reset_zombie_relations", #SERVER: recalculate zombie friends and enemies. this uses a state machine from slot_player_necromancer_zombie_state. This is very intensive on server, and should only be done when needed.
- [
- (multiplayer_is_server),
- (try_for_agents, ":cur_agent_b"),
- (agent_get_troop_id, ":troop_id_b", ":cur_agent_b"),#get the troop id of the new agent and determine if its an undead
- (this_or_next|eq, ":troop_id_b", "trp_zombie"),
- (this_or_next|eq, ":troop_id_b", "trp_fast_zombie"),
- (this_or_next|eq, ":troop_id_b", "trp_rotting_zombie"),
- (this_or_next|eq, ":troop_id_b", "trp_tank_zombie"),
- (this_or_next|eq, ":troop_id_b", "trp_skeleton_archer"),
- (this_or_next|eq, ":troop_id_b", "trp_rock_golem"),
- (eq, ":troop_id_b", "trp_skeleton_berserker"),
- (agent_clear_relations_with_agents, ":cur_agent_b"),
- #now that we know its an undead, its time to determine its necromancer.
- (agent_get_slot, ":necromancer_player_id", ":cur_agent_b", slot_agent_necromancer),
- (player_is_active, ":necromancer_player_id"),
- (player_get_agent_id, ":necromancer_agent_id", ":necromancer_player_id"),
- (player_get_slot, ":state", ":necromancer_player_id", slot_player_necromancer_zombie_state),
- #nnow lets figure out what the state is of the necromancer.
- (try_begin),
- (eq, ":state", necro_state_peaceful), #peaceful
- (try_for_agents, ":cur_agent_a"),
- (agent_add_relation_with_agent, ":cur_agent_b", ":cur_agent_a", 1),
- (try_end),
- (else_try),
- (eq, ":state", necro_state_faction), #faction friendly
- (player_get_slot, ":fac_id", ":necromancer_player_id", slot_player_faction_id),
- (try_for_agents, ":cur_agent_a"),
- (assign, ":continue", 1),
- (try_begin), #same faction
- (neg|agent_is_non_player, ":cur_agent_a"),
- (agent_get_player_id, ":cur_player_a", ":cur_agent_a"),
- (player_is_active, ":cur_player_a"),
- (player_get_slot, ":cur_fac_id_a", ":cur_player_a", slot_player_faction_id),
- (eq, ":fac_id", ":cur_fac_id_a"),
- (agent_add_relation_with_agent, ":cur_agent_b", ":cur_agent_a", 1),
- (assign, ":continue", 0),
- (else_try), #necromancer in same faction
- (agent_get_slot, ":necro", ":cur_agent_a", slot_agent_necromancer),
- (player_get_slot, ":necro_fac", ":necro", slot_player_faction_id),
- (eq, ":necro_fac", ":fac_id"),
- (agent_add_relation_with_agent, ":cur_agent_b", ":cur_agent_a", 1),
- (assign, ":continue", 0),
- (else_try), #same necromancer
- (agent_get_slot, ":necro", ":cur_agent_a", slot_agent_necromancer),
- (eq, ":necro", ":necromancer_player_id"),
- (agent_add_relation_with_agent, ":cur_agent_b", ":cur_agent_a", 1),
- (assign, ":continue", 0),
- (try_end),
- (try_begin), #if none of the above, make enemy
- (eq, ":continue", 1),
- (agent_add_relation_with_agent, ":cur_agent_b", ":cur_agent_a", -1),
- (try_end),
- (try_end),
- (else_try),
- (eq, ":state", necro_state_allies), #faction allies friendly
- (player_get_slot, ":fac_id", ":necromancer_player_id", slot_player_faction_id),
- (try_for_agents, ":cur_agent_a"),
- (assign, ":continue", 1),
- (try_begin), #allied faction
- (neg|agent_is_non_player, ":cur_agent_a"),
- (agent_get_player_id, ":cur_player_a", ":cur_agent_a"),
- (player_is_active, ":cur_player_a"),
- (player_get_slot, ":cur_fac_id_a", ":cur_player_a", slot_player_faction_id),
- (try_begin),
- (call_script, "script_cf_factions_are_hostile", ":cur_fac_id_a", ":fac_id"),
- (else_try),
- (agent_add_relation_with_agent, ":cur_agent_b", ":cur_agent_a", 1),
- (assign, ":continue", 0),
- (try_end),
- (else_try), #necromancer in allied faction
- (agent_get_slot, ":necro", ":cur_agent_a", slot_agent_necromancer),
- (player_get_slot, ":necro_fac", ":necro", slot_player_faction_id),
- (try_begin),
- (call_script, "script_cf_factions_are_hostile", ":necro_fac", ":fac_id"),
- (else_try),
- (agent_add_relation_with_agent, ":cur_agent_b", ":cur_agent_a", 1),
- (assign, ":continue", 0),
- (try_end),
- (agent_add_relation_with_agent, ":cur_agent_b", ":cur_agent_a", 1),
- (assign, ":continue", 0),
- (else_try), #same necromancer
- (agent_get_slot, ":necro", ":cur_agent_a", slot_agent_necromancer),
- (eq, ":necro", ":necromancer_player_id"),
- (agent_add_relation_with_agent, ":cur_agent_b", ":cur_agent_a", 1),
- (assign, ":continue", 0),
- (try_end),
- (try_begin), #if none of the above, make enemy
- (eq, ":continue", 1),
- (agent_add_relation_with_agent, ":cur_agent_b", ":cur_agent_a", -1),
- (try_end),
- (try_end),
- (else_try),
- (eq, ":state", necro_state_allies_com), #faction allies+commoners friendly
- (player_get_slot, ":fac_id", ":necromancer_player_id", slot_player_faction_id),
- (try_for_agents, ":cur_agent_a"),
- (assign, ":continue", 1),
- (try_begin), #allied faction
- (neg|agent_is_non_player, ":cur_agent_a"),
- (agent_get_player_id, ":cur_player_a", ":cur_agent_a"),
- (player_is_active, ":cur_player_a"),
- (player_get_slot, ":cur_fac_id_a", ":cur_player_a", slot_player_faction_id),
- (try_begin),
- (call_script, "script_cf_factions_are_hostile", ":cur_fac_id_a", ":fac_id"),
- (try_begin),
- (eq, ":cur_fac_id_a", 0),
- (agent_add_relation_with_agent, ":cur_agent_b", ":cur_agent_a", 1),
- (assign, ":continue", 0),
- (try_end),
- (else_try),
- (agent_add_relation_with_agent, ":cur_agent_b", ":cur_agent_a", 1),
- (assign, ":continue", 0),
- (try_end),
- (else_try), #necromancer in allied faction
- (agent_get_slot, ":necro", ":cur_agent_a", slot_agent_necromancer),
- (player_get_slot, ":necro_fac", ":necro", slot_player_faction_id),
- (try_begin),
- (call_script, "script_cf_factions_are_hostile", ":necro_fac", ":fac_id"),
- (try_begin),
- (eq, ":necro_fac", 0),
- (agent_add_relation_with_agent, ":cur_agent_b", ":cur_agent_a", 1),
- (assign, ":continue", 0),
- (try_end),
- (else_try),
- (agent_add_relation_with_agent, ":cur_agent_b", ":cur_agent_a", 1),
- (assign, ":continue", 0),
- (try_end),
- (agent_add_relation_with_agent, ":cur_agent_b", ":cur_agent_a", 1),
- (assign, ":continue", 0),
- (else_try), #same necromancer
- (agent_get_slot, ":necro", ":cur_agent_a", slot_agent_necromancer),
- (eq, ":necro", ":necromancer_player_id"),
- (agent_add_relation_with_agent, ":cur_agent_b", ":cur_agent_a", 1),
- (assign, ":continue", 0),
- (try_end),
- (try_begin), #if none of the above, make enemy
- (eq, ":continue", 1),
- (agent_add_relation_with_agent, ":cur_agent_b", ":cur_agent_a", -1),
- (try_end),
- (try_end),
- (else_try),
- (eq, ":state", necro_state_allies_com_outlaw), #faction allies+commoners+outlaws friendly
- (player_get_slot, ":fac_id", ":necromancer_player_id", slot_player_faction_id),
- (try_for_agents, ":cur_agent_a"),
- (assign, ":continue", 1),
- (try_begin), #allied faction
- (neg|agent_is_non_player, ":cur_agent_a"),
- (agent_get_player_id, ":cur_player_a", ":cur_agent_a"),
- (player_is_active, ":cur_player_a"),
- (player_get_slot, ":cur_fac_id_a", ":cur_player_a", slot_player_faction_id),
- (try_begin),
- (call_script, "script_cf_factions_are_hostile", ":cur_fac_id_a", ":fac_id"),
- (try_begin),
- (this_or_next|eq, ":cur_fac_id_a", 1),
- (eq, ":cur_fac_id_a", 0),
- (agent_add_relation_with_agent, ":cur_agent_b", ":cur_agent_a", 1),
- (assign, ":continue", 0),
- (try_end),
- (else_try),
- (agent_add_relation_with_agent, ":cur_agent_b", ":cur_agent_a", 1),
- (assign, ":continue", 0),
- (try_end),
- (else_try), #necromancer in allied faction
- (agent_get_slot, ":necro", ":cur_agent_a", slot_agent_necromancer),
- (player_get_slot, ":necro_fac", ":necro", slot_player_faction_id),
- (try_begin),
- (call_script, "script_cf_factions_are_hostile", ":necro_fac", ":fac_id"),
- (try_begin),
- (this_or_next|eq, ":necro_fac", 1),
- (eq, ":necro_fac", 0),
- (agent_add_relation_with_agent, ":cur_agent_b", ":cur_agent_a", 1),
- (assign, ":continue", 0),
- (try_end),
- (else_try),
- (agent_add_relation_with_agent, ":cur_agent_b", ":cur_agent_a", 1),
- (assign, ":continue", 0),
- (try_end),
- (agent_add_relation_with_agent, ":cur_agent_b", ":cur_agent_a", 1),
- (assign, ":continue", 0),
- (else_try), #same necromancer
- (agent_get_slot, ":necro", ":cur_agent_a", slot_agent_necromancer),
- (eq, ":necro", ":necromancer_player_id"),
- (agent_add_relation_with_agent, ":cur_agent_b", ":cur_agent_a", 1),
- (assign, ":continue", 0),
- (try_end),
- (try_begin), #if none of the above, make enemy
- (eq, ":continue", 1),
- (agent_add_relation_with_agent, ":cur_agent_b", ":cur_agent_a", -1),
- (try_end),
- (try_end),
- (else_try),
- (eq, ":state", necro_state_noone), #all enemy besides necromancer and other zombies of necro
- (try_for_agents, ":cur_agent_a"),
- (try_begin), #same necromancer
- (agent_get_slot, ":necro", ":cur_agent_a", slot_agent_necromancer),
- (eq, ":necro", ":necromancer_player_id"),
- (agent_add_relation_with_agent, ":cur_agent_b", ":cur_agent_a", 1),
- (else_try), #if none of the above, make enemy
- (agent_add_relation_with_agent, ":cur_agent_b", ":cur_agent_a", -1),
- (try_end),
- (try_end),
- (else_try),
- (try_for_agents, ":cur_agent_a"),
- (eq, ":state", necro_state_ffa), #everyone fights everyone. (chaos)
- (agent_add_relation_with_agent, ":cur_agent_b", ":cur_agent_a", -1),
- (try_end),
- (try_end),
- (agent_add_relation_with_agent, ":cur_agent_b", ":necromancer_agent_id", 1), #Zombies are allways friendly with their necromancer.
- (agent_force_rethink, ":cur_agent_b"),
- (try_end),
- ]),
- ])
- Scripts.Extend([ # Illness Scripts
- ("cf_server_reset_illnesses", #SERVER: Reset illness variables of a player (usually done after death).
- [
- (multiplayer_is_server),
- (store_script_param, ":player_id", 1),
- (try_begin),
- (player_is_active, ":player_id"),
- (player_set_slot, ":player_id", slot_player_drunkeness, -1),
- (player_set_slot, ":player_id", slot_player_trippiness, -1),
- (player_set_slot, ":player_id", slot_player_cold_progression, -1),
- (player_set_slot, ":player_id", slot_player_cold_direction, -1),
- (player_set_slot, ":player_id", slot_player_cold_immunity_timer, -1),
- (player_set_slot, ":player_id", slot_player_flu_progression, -1),
- (player_set_slot, ":player_id", slot_player_flu_direction, -1),
- (player_set_slot, ":player_id", slot_player_flu_immunity_timer, -1),
- (player_set_slot, ":player_id", slot_player_plague_progression, -1),
- (player_set_slot, ":player_id", slot_player_plague_direction, -1),
- (player_set_slot, ":player_id", slot_player_plague_immunity_timer, -1),
- (try_end),
- ]),
- ("cf_server_illness_lower_immunities", #SERVER: Player loses some immunity to illnesses over time.
- [
- (multiplayer_is_server),
- (store_script_param, ":player_id", 1),
- (player_is_active, ":player_id"),
- (player_get_slot, ":cold_immunity", ":player_id", slot_player_cold_immunity_timer),
- (player_get_slot, ":flu_immunity", ":player_id", slot_player_flu_immunity_timer),
- (player_get_slot, ":plague_immunity", ":player_id", slot_player_plague_immunity_timer),
- (try_begin),
- (neq, -1, ":cold_immunity"),
- (val_sub, ":cold_immunity", 1),
- (player_set_slot, ":player_id", slot_player_cold_immunity_timer, ":cold_immunity"),
- (try_end),
- (try_begin),
- (neq, -1, ":flu_immunity"),
- (val_sub, ":flu_immunity", 1),
- (player_set_slot, ":player_id", slot_player_flu_immunity_timer, ":flu_immunity"),
- (try_end),
- (try_begin),
- (neq, -1, ":plague_immunity"),
- (val_sub, ":plague_immunity", 1),
- (player_set_slot, ":player_id", slot_player_plague_immunity_timer, ":plague_immunity"),
- (try_end),
- ]),
- ("cf_server_progress_illnesses", #SERVER: Update player's illness progress.
- [
- (multiplayer_is_server),
- (store_script_param_1, ":player_id"),
- (player_is_active, ":player_id"),
- (try_begin),#randomly catch flu
- (store_random_in_range, ":rand", 0, 1000), # 1 out of 1000 chance every food tick
- (eq, ":rand", 100),
- (call_script, "script_cf_server_catch_flu", ":player_id"),
- (else_try),#randomly catch cold
- (store_random_in_range, ":rand", 0, 100), # 1 out of 100 chance every food tick
- (eq, ":rand", 100),
- (call_script, "script_cf_server_catch_cold", ":player_id"),
- (try_end),
- (player_get_slot, ":cold_direction", ":player_id", slot_player_cold_direction),
- (try_begin),
- (neq, ":cold_direction", -1),
- (player_get_slot, ":cold_progression", ":player_id", slot_player_cold_progression),
- (try_begin), #cold
- (eq, ":cold_direction", 1), #going up
- (val_add, ":cold_progression", 1),
- (try_begin),
- (eq, ":cold_progression", 100),
- (assign, ":cold_direction", 0),
- (player_set_slot, ":player_id", slot_player_cold_direction, 0),
- (try_end),
- (else_try),
- (eq, ":cold_direction", 0), #going down
- (val_sub, ":cold_progression", 1),
- (try_begin),
- (eq, ":cold_progression", 0),
- (call_script, "script_cf_server_lose_cold", ":player_id"),
- (try_end),
- (try_end),
- (player_set_slot, ":player_id", slot_player_cold_progression, ":cold_progression"),
- (try_begin), #cold client updates
- (eq, ":cold_direction", 1),
- (this_or_next|eq, ":cold_progression", 25),
- (eq, ":cold_progression", 75),
- (multiplayer_send_int_to_player, ":player_id", server_event_illness_update , 1, ":cold_progression"),
- (else_try),
- (eq, ":cold_direction", 0),
- (this_or_next|eq, ":cold_progression", 24),
- (eq, ":cold_progression", 1),
- (multiplayer_send_int_to_player, ":player_id", server_event_illness_update , 1, ":cold_progression"),
- (try_end),
- (try_begin), #cough from cold
- (store_random_in_range, ":cough", 0,100),
- (gt, ":cold_progression", ":cough"),
- (call_script, "script_player_cough", ":player_id", 1),
- (try_end),
- (else_try),
- (player_get_slot, ":flu_direction", ":player_id", slot_player_flu_direction),
- (neq, ":flu_direction", -1),
- (player_get_slot, ":flu_progression", ":player_id", slot_player_flu_progression),
- (try_begin), #flu
- (eq, ":flu_direction", 1), #going up
- (val_add, ":flu_progression", 1),
- (try_begin),
- (eq, ":flu_progression", 100),
- (assign, ":flu_direction", 0),
- (player_set_slot, ":player_id", slot_player_flu_direction, 0),
- (try_end),
- (else_try),
- (eq, ":flu_direction", 0), #going down
- (val_sub, ":flu_progression", 1),
- (try_begin),
- (eq, ":flu_progression", 0),
- (call_script, "script_cf_server_lose_flu", ":player_id"),
- (try_end),
- (try_end),
- (player_set_slot, ":player_id", slot_player_flu_progression, ":flu_progression"),
- (try_begin), #flu client updates
- (eq, ":flu_direction", 1),
- (this_or_next|eq, ":flu_progression", 25),
- (this_or_next|eq, ":flu_progression", 50),
- (eq, ":flu_progression", 75),
- (multiplayer_send_int_to_player, ":player_id", server_event_illness_update , 2 , ":flu_progression"),
- (else_try),
- (eq, ":flu_direction", 0),
- (this_or_next|eq, ":flu_progression", 49),
- (this_or_next|eq, ":flu_progression", 24),
- (eq, ":flu_progression", 1),
- (multiplayer_send_int_to_player, ":player_id", server_event_illness_update , 2 , ":flu_progression"),
- (try_end),
- (try_begin),#vomiting
- (gt, ":flu_progression", 50),
- (store_random_in_range, ":rand",0,100),
- (lt, ":rand", 30),
- (call_script, "script_player_vomit", ":player_id"),
- (else_try),
- (store_random_in_range, ":rand",0,100),
- (lt, ":rand", ":flu_progression"),
- (call_script, "script_player_cough", ":player_id", 2),
- (try_end),
- (else_try), #plague begin
- (player_get_slot, ":plague_direction", ":player_id", slot_player_plague_direction),
- (neq, ":plague_direction", -1),
- (player_get_slot, ":plague_progression", ":player_id", slot_player_plague_progression),
- (try_begin), #plague
- (eq, ":plague_direction", 1), #going up
- (val_add, ":plague_progression", 1),
- (try_begin),
- (eq, ":plague_progression", 100),
- (assign, ":plague_direction", 0),
- (player_set_slot, ":player_id", slot_player_plague_direction, 0),
- (try_end),
- (else_try),
- (eq, ":plague_direction", 0), #going down
- (val_sub, ":plague_progression", 1),
- (try_begin),
- (eq, ":plague_progression", 0),
- (call_script, "script_cf_server_lose_plague", ":player_id"),
- (try_end),
- (try_end),
- (player_set_slot, ":player_id", slot_player_plague_progression, ":plague_progression"),
- (try_begin), #plague client updates
- (eq, ":plague_direction", 1),
- (this_or_next|eq, ":plague_progression", 25),
- (this_or_next|eq, ":plague_progression", 50),
- (eq, ":plague_progression", 75),
- (multiplayer_send_int_to_player, ":player_id", server_event_illness_update , 3, ":plague_progression"),
- (else_try),
- (eq, ":plague_direction", 0),
- (this_or_next|eq, ":plague_progression", 49),
- (this_or_next|eq, ":plague_progression", 24),
- (eq, ":plague_progression", 1),
- (multiplayer_send_int_to_player, ":player_id", server_event_illness_update , 3, ":plague_progression"),
- (try_end),
- (try_begin),#vomiting
- (gt, ":plague_progression", 50),
- (store_random_in_range, ":rand",0,100),
- (lt, ":rand", 30),
- (call_script, "script_player_vomit_blood", ":player_id"),
- (else_try),#coughing
- (store_random_in_range, ":rand",0,30),
- (lt, ":rand", ":plague_progression"),
- (call_script, "script_player_cough", ":player_id", 3),
- (try_end),
- #lower health
- (try_begin),
- (gt, ":plague_progression", 10),
- (player_get_agent_id, ":agent_id", ":player_id"),
- (agent_deliver_damage_to_agent, ":agent_id", ":agent_id", 10),
- (try_end),
- (try_end),
- ]),
- #PLAGUE
- ("cf_server_catch_plague", #SERVER: Player catches a plague.
- [
- (multiplayer_is_server),
- (store_script_param, ":player_id", 1),
- (player_is_active, ":player_id"),
- (player_get_slot, ":direction", ":player_id", slot_player_plague_direction),
- (player_get_slot, ":immunity", ":player_id", slot_player_plague_immunity_timer),
- (eq, ":direction", -1), #player doesnt already have plague
- (eq, ":immunity", -1), #player isnt immune
- (assign, ":progression", 1),
- (assign, ":direction", 1),
- (try_begin),
- (player_get_slot, ":cold_direction", ":player_id", slot_player_cold_direction),
- (neq, ":cold_direction", -1),#if has cold...
- (assign, ":progression", 15),
- (call_script, "script_cf_lose_cold", ":player_id"),#end cold
- (else_try),
- (player_get_slot, ":flu_direction", ":player_id", slot_player_flu_direction),
- (neq, ":flu_direction", -1),#if has flu...
- (assign, ":progression", 40),
- (call_script, "script_cf_lose_flu", ":player_id"),#end cold
- (try_end),
- (player_set_slot, ":player_id", slot_player_plague_progression, ":progression"), #its begining...
- (player_set_slot, ":player_id", slot_player_plague_direction, ":direction"), #its going up
- (str_store_player_username, s0, ":player_id"),
- (server_add_message_to_log, "str_log_player_caught_plague"),
- ]),
- ("cf_server_imbed_plague", #SERVER: Force player to obtain plague at stage.
- [
- (multiplayer_is_server),
- (store_script_param, ":player_id", 1),
- (store_script_param, ":progression", 2),
- (player_is_active, ":player_id"),
- (call_script, "script_reset_illnesses",":player_id"),
- (player_set_slot, ":player_id", slot_player_plague_progression, ":progression"), #its begining
- (player_set_slot, ":player_id", slot_player_plague_direction, 1), #its going up
- (str_store_player_username, s0, ":player_id"),
- (server_add_message_to_log, "str_log_player_caught_plague"),
- ]),
- ("cf_lose_plague", #SERVER: Player loses the plague (is cured).
- [
- (multiplayer_is_server),
- (store_script_param, ":player_id", 1),
- (player_is_active, ":player_id"),
- (player_set_slot, ":player_id", slot_player_plague_progression, -1), #its done
- (player_set_slot, ":player_id", slot_player_plague_direction, -1), #its done
- (player_set_slot, ":player_id", slot_player_plague_immunity_timer, 100), #imumne for 100 food ticks
- (str_store_player_username, s0, ":player_id"),
- (server_add_message_to_log, "str_log_player_lost_plague"),
- ]),
- #FLU
- ("cf_server_catch_flu", #SERVER: Player catches the flu.
- [
- (multiplayer_is_server),
- (store_script_param, ":player_id", 1),
- (player_is_active, ":player_id"),
- (player_get_slot, ":direction", ":player_id", slot_player_flu_direction),
- (player_get_slot, ":immunity", ":player_id", slot_player_flu_immunity_timer),
- (player_get_slot, ":plague_direction",":player_id", slot_player_plague_direction),
- (neq, ":plague_direction", -1),
- (eq, ":direction", -1), #player doesnt already have a cold
- (eq, ":immunity", -1), #player isnt immune
- (assign, ":progression", 1),
- (assign, ":direction", 1),
- (try_begin),
- (player_get_slot, ":cold_direction", ":player_id", slot_player_cold_direction),
- (neq, ":cold_direction", -1),#if has cold...
- (player_get_slot, ":progression", ":player_id", slot_player_cold_progression), #overwrite it with flu
- (call_script, "script_cf_lose_cold", ":player_id"),#end cold
- (try_end),
- (player_set_slot, ":player_id", slot_player_flu_progression, ":progression"), #its begining
- (player_set_slot, ":player_id", slot_player_flu_direction, ":direction"), #its going up
- (str_store_player_username, s0, ":player_id"),
- (server_add_message_to_log, "str_log_player_caught_flu"),
- ]),
- ("cf_server_imbed_flu", #SERVER: Force player to catch flu at stage.
- [
- (multiplayer_is_server),
- (store_script_param, ":player_id", 1),
- (store_script_param, ":progression", 2),
- (player_is_active, ":player_id"),
- (call_script, "script_reset_illnesses",":player_id"),
- (player_set_slot, ":player_id", slot_player_flu_progression, ":progression"), #its begining...
- (player_set_slot, ":player_id", slot_player_flu_direction, 1), #its going up
- (str_store_player_username, s0, ":player_id"),
- (server_add_message_to_log, "str_log_player_caught_flu"),
- ]),
- ("cf_server_lose_flu", #SERVER: Player loses the flu (is cured).
- [
- (multiplayer_is_server),
- (store_script_param, ":player_id", 1),
- (player_is_active, ":player_id"),
- (player_set_slot, ":player_id", slot_player_flu_progression, -1), #its done
- (player_set_slot, ":player_id", slot_player_flu_direction, -1), #its done
- (player_set_slot, ":player_id", slot_player_flu_immunity_timer, 40), #imumne for 100 food ticks
- (str_store_player_username, s0, ":player_id"),
- (server_add_message_to_log, "str_log_player_lost_flu"),
- ]),
- #COLD
- ("cf_server_catch_cold", #SERVER: Player catches a cold.
- [
- (multiplayer_is_server),
- (store_script_param, ":player_id", 1),
- (player_is_active, ":player_id"),
- (player_get_slot, ":direction", ":player_id", slot_player_cold_direction),
- (player_get_slot, ":flu_direction", ":player_id", slot_player_flu_direction),
- (player_get_slot, ":plague_direction",":player_id", slot_player_plague_direction),
- (player_get_slot, ":immunity", ":player_id", slot_player_cold_immunity_timer),
- (eq, ":flu_direction", -1),
- (neq, ":plague_direction", -1),
- (eq, ":direction", -1), #player doesnt already have a cold
- (eq, ":immunity", -1), #player isnt immune
- (player_set_slot, ":player_id", slot_player_cold_progression, 1), #its begining...
- (player_set_slot, ":player_id", slot_player_cold_direction, 1), #its going up
- (str_store_player_username, s0, ":player_id"),
- (server_add_message_to_log, "str_log_player_caught_cold"),
- ]),
- ("cf_server_imbed_cold", #SERVER: Force player to obtain cold at progression.
- [
- (multiplayer_is_server),
- (store_script_param, ":player_id", 1),
- (store_script_param, ":progression", 2),
- (player_is_active, ":player_id"),
- (call_script, "script_reset_illnesses",":player_id"),
- (player_set_slot, ":player_id", slot_player_cold_progression, ":progression"), #its begining...
- (player_set_slot, ":player_id", slot_player_cold_direction, 1), #its going up
- (str_store_player_username, s0, ":player_id"),
- (server_add_message_to_log, "str_log_player_caught_cold"),
- ]),
- ("cf_server_lose_cold", #SERVER: Player loses a cold (is cured)
- [
- (multiplayer_is_server),
- (store_script_param, ":player_id", 1),
- (player_is_active, ":player_id"),
- (player_set_slot, ":player_id", slot_player_cold_progression, -1), #its done
- (player_set_slot, ":player_id", slot_player_cold_direction, -1), #its done
- (player_set_slot, ":player_id", slot_player_cold_immunity_timer, 100), #imumne for 100 food ticks
- (str_store_player_username, s0, ":player_id"),
- (server_add_message_to_log, "str_log_player_lost_cold"),
- ]),
- #SYMPTOMS
- ("cf_server_player_cough", #SERVER: Player coughs and spreads illness to surrounding players.
- [
- (multiplayer_is_server),
- (store_script_param, ":player_id", 1),
- (store_script_param, ":illness", 2),
- (player_get_agent_id, ":agent_id", ":player_id"),
- (agent_get_position, pos0, ":agent_id"),
- (player_get_gender, ":gender", ":player_id"),
- (try_begin),
- (eq, ":gender", tf_female),
- (call_script, "script_play_sound_at_position", "snd_woman_cough_sick"),
- (else_try),
- (call_script, "script_play_sound_at_position", "snd_man_cough_sick"),
- (try_end),
- (multiplayer_send_int_to_player, ":player_id", server_event_player_has_coughed, -1, ":illness"),
- (agent_get_position, pos1, ":agent_id"),
- (position_move_z, pos1, 160),
- (try_for_agents, ":other_agent_id"), # send the chat message to other players whoose agents are close enough
- (agent_is_alive, ":other_agent_id"),
- (neq, ":other_agent_id", ":agent_id"),
- (neg|agent_is_non_player, ":other_agent_id"),
- (agent_get_player_id, ":other_player_id", ":other_agent_id"),
- (player_is_active, ":other_player_id"),
- (agent_get_position, pos2, ":other_agent_id"),
- (position_move_z, pos2, 160),
- (get_sq_distance_between_positions, ":sq_distance", pos1, pos2),
- (le, ":sq_distance", sq(max_distance_to_play_sound)),
- (multiplayer_send_int_to_player, ":other_player_id", server_event_player_has_coughed, ":player_id", ":illness"),
- (try_end),
- #spreading of illness
- (try_for_agents, ":other_agent_id"), # find players that are close enough
- (agent_is_alive, ":other_agent_id"),
- (neg|agent_is_non_player, ":other_agent_id"),
- (agent_get_player_id, ":other_player_id", ":other_agent_id"),
- (player_is_active, ":other_player_id"),
- (call_script, "script_cf_has_no_illness_protection", ":other_player_id"),
- (agent_get_position, pos2, ":other_agent_id"),
- (position_move_z, pos2, 160),
- (get_sq_distance_between_positions, ":sq_distance", pos1, pos2),
- (le, ":sq_distance", sq(max_distance_to_catch_cough)),
- (position_has_line_of_sight_to_position, pos1, pos2),
- (store_random_in_range, ":cold_catch_chance", 0, 100),
- (gt, ":cold_catch_chance", 50),
- (try_begin),
- (eq, ":illness", 1), #common cold
- (call_script, "script_cf_catch_cold", ":other_player_id"),
- (else_try),
- (eq, ":illness", 2),
- (call_script, "script_cf_catch_flu", ":other_player_id"),
- (else_try),
- (eq, ":illness", 3),
- (call_script, "script_cf_catch_plague", ":other_player_id"),
- (try_end),
- (try_end),
- ]),
- ("player_vomit_blood", #SERVER: player vomits blood
- [
- (store_script_param, ":player_id", 1),
- (player_get_agent_id, ":agent_id", ":player_id"),
- (call_script, "script_spawn_processed_resources", ":agent_id", "itm_bloody_vomit", 1),
- (agent_get_position, pos0, ":agent_id"),
- (call_script, "script_play_sound_at_position", "snd_vomit"),
- (multiplayer_send_int_to_player, ":player_id", server_event_player_has_vomited, -1),
- (agent_get_position, pos1, ":agent_id"),
- (position_move_z, pos1, 160),
- (try_for_agents, ":other_agent_id"), # send the chat message to other players whoose agents are close enough
- (agent_is_alive, ":other_agent_id"),
- (neg|agent_is_non_player, ":other_agent_id"),
- (agent_get_player_id, ":other_player_id", ":other_agent_id"),
- (player_is_active, ":other_player_id"),
- (agent_get_position, pos2, ":other_agent_id"),
- (position_move_z, pos2, 160),
- (get_sq_distance_between_positions, ":sq_distance", pos1, pos2),
- (le, ":sq_distance", sq(max_distance_to_play_sound)),
- (neq, ":other_player_id", ":player_id"),
- (multiplayer_send_int_to_player, ":other_player_id", server_event_player_has_vomited, ":player_id"),
- (try_end),
- (agent_get_slot, ":food_amount", ":agent_id", slot_agent_food_amount),
- (try_begin),
- (gt, ":food_amount", 20),
- (val_sub, ":food_amount", 20),
- (agent_set_slot, ":agent_id", slot_agent_food_amount, ":food_amount"),
- (multiplayer_send_3_int_to_player, ":player_id", server_event_agent_set_slot, ":agent_id", slot_agent_food_amount, ":food_amount"),
- (else_try),
- (agent_set_slot, ":agent_id", slot_agent_food_amount, 0),
- (multiplayer_send_3_int_to_player, ":player_id", server_event_agent_set_slot, ":agent_id", slot_agent_food_amount, 0),
- (try_end),
- ]),
- ("player_vomit", #SERVER: player vomits
- [
- (store_script_param, ":player_id", 1),
- (player_get_agent_id, ":agent_id", ":player_id"),
- (call_script, "script_spawn_processed_resources", ":agent_id", "itm_vomit", 1),
- (agent_get_position, pos0, ":agent_id"),
- (call_script, "script_play_sound_at_position", "snd_vomit"),
- (multiplayer_send_int_to_player, ":player_id", server_event_player_has_vomited, -1),
- (agent_get_position, pos1, ":agent_id"),
- (position_move_z, pos1, 160),
- (try_for_agents, ":other_agent_id"), # send the chat message to other players whoose agents are close enough
- (agent_is_alive, ":other_agent_id"),
- (neg|agent_is_non_player, ":other_agent_id"),
- (agent_get_player_id, ":other_player_id", ":other_agent_id"),
- (player_is_active, ":other_player_id"),
- (agent_get_position, pos2, ":other_agent_id"),
- (position_move_z, pos2, 160),
- (get_sq_distance_between_positions, ":sq_distance", pos1, pos2),
- (le, ":sq_distance", sq(max_distance_to_play_sound)),
- (neq, ":other_player_id", ":player_id"),
- (multiplayer_send_int_to_player, ":other_player_id", server_event_player_has_vomited, ":player_id"),
- (try_end),
- (agent_get_slot, ":food_amount", ":agent_id", slot_agent_food_amount),
- (try_begin),
- (gt, ":food_amount", 20),
- (val_sub, ":food_amount", 20),
- (agent_set_slot, ":agent_id", slot_agent_food_amount, ":food_amount"),
- (multiplayer_send_3_int_to_player, ":player_id", server_event_agent_set_slot, ":agent_id", slot_agent_food_amount, ":food_amount"),
- (else_try),
- (agent_set_slot, ":agent_id", slot_agent_food_amount, 0),
- (multiplayer_send_3_int_to_player, ":player_id", server_event_agent_set_slot, ":agent_id", slot_agent_food_amount, 0),
- (try_end),
- ]),
- ("cf_has_no_illness_protection",
- [
- (store_script_param, ":player_id", 1),
- (assign, ":immune", 0),
- (player_get_agent_id, ":player_id", ":agent_id"),
- (agent_get_item_slot, ":agent_id", ":hat", ek_head),
- (try_begin),
- (eq, ":hat", "itm_plague_mask"),
- (agent_get_troop_id, ":troop_id", ":other_agent_id"),
- (eq, ":troop_id", "trp_physician"),
- (assign, ":immune", 1),
- (else_try),
- (try_end),
- (eq, ":immune", 0),
- ]
- ),
- ])
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement