Advertisement
Guest User

Untitled

a guest
Oct 3rd, 2018
266
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 42.53 KB | None | 0 0
  1. Scripts.Extend([ # SRP Necromancy Scripts.
  2.  
  3.     ("cf_server_transform_player_into_undead", # SERVER: Transform the given player into an undead agent.
  4.       [
  5.         (multiplayer_is_server),
  6.         (store_script_param, ":necro_player_id", 1), # The player ID of the necromancer (-1 for none).
  7.         (store_script_param, ":player_id", 2), # The player ID of the player to transform.
  8.         (store_script_param, ":skeleton_chance", 3), # The chance that the player will transform into a skeleton out of 100.
  9.         (store_script_param, ":reset", 4), # 1 = reset relations, 0 = don't reset relations.
  10.        
  11.         (player_get_agent_id, ":player_id", ":agent_id"),
  12.         (assign, ":necro_agent_id", ":agent_id"),
  13.         (try_begin),
  14.             (eq, ":necro_player_id", -1),
  15.             (player_get_agent_id, ":necro_player_id", ":slayer_agent_id"),
  16.         (try_end),     
  17.         (agent_get_position, ":agent_id", pos1),
  18.         (agent_deliver_damage_to_agent, ":agent_id", ":agent_id", 100000000),
  19.         (call_script, "script_cf_server_spawn_random_undead", ":necro_player_id", ":skeleton_chance", ":reset"),
  20.        
  21.       ]
  22.     ),
  23.    
  24.     ("cf_server_spawn_random_undead", #SERVER: Spawn a random undead agent at pos1.
  25.       [
  26.         (multiplayer_is_server),
  27.         (store_script_param, ":player_id", 1), # The ID of the spawning necromancer (-1 for no necromancer).
  28.         (store_script_param, ":skeleton_chance", 2), # The chance that skeletons will spawn out of 100.
  29.         (store_script_param, ":reset", 3), # 1 = reset relations, 0 = don't reset relations.
  30.        
  31.         (store_random_in_range, ":rand", 0, 100),
  32.         (assign, ":troop_id", -1),
  33.         (try_begin), #skeleton
  34.             (lt, ":rand", ":skeleton_chance"),
  35.             (store_random_in_range, ":rand", 0, 100),
  36.             (try_begin),
  37.                 (gt, ":rand", 25),
  38.                 (assign, ":troop_id", "trp_skeleton_archer"),
  39.             (else_try),
  40.                 (assign, ":troop_id", "trp_skeleton_berserker"),
  41.             (try_end),
  42.         (else_try), #zombie
  43.             (store_random_in_range, ":rand", 0,100),
  44.             (try_begin),
  45.                 (gt, ":rand", 50),
  46.                 (assign, ":zombie", "trp_zombie"),
  47.             (else_try),
  48.                 (gt, ":rand", 35),
  49.                 (assign, ":zombie", "trp_fast_zombie"),
  50.             (else_try),
  51.                 (gt, ":rand", 15),
  52.                 (assign, ":zombie", "trp_tank_zombie"),
  53.             (else_try),
  54.                 (assign, ":zombie", "trp_rotting_zombie"),
  55.             (try_end),
  56.         (try_end), 
  57.         (call_script, "cf_server_spawn_specific_undead", ":troop_id", ":player_id"),
  58.        
  59.         (try_begin),
  60.             (ge, ":reset", 1),
  61.             (call_script, "script_cf_server_reset_zombie_relations"),
  62.         (try_end),
  63.       ]
  64.     ),
  65.    
  66.     ("cf_server_get_zombie_summon_position", #SERVER: Get the position to spawn a zombie around a player and store it in pos1.
  67.     [
  68.         (multiplayer_is_server),
  69.         (store_script_param, ":player_id", 1), # The player id of the summoner (-1 for none).
  70.        
  71.         (player_get_agent_id, ":player_id", ":agent_id"),
  72.         (agent_get_position, ":agent_id", pos1),
  73.         (position_move_x, pos1, 50),
  74.         (position_set_z_to_ground_level, pos1),
  75.     ]
  76.     ),
  77.        
  78.     ("cf_server_spawn_specific_undead", #SERVER: Summon an undead agent of given troop and necromancer at pos1.
  79.     [
  80.         (multiplayer_is_server),
  81.         (store_script_param, ":troop_id", 1), # The troop to spawn.
  82.         (store_script_param, ":player_id", 2), # The necromancer.
  83.        
  84.         (spawn_agent, ":troop_id"),
  85.         (assign, ":agent_id", reg0),
  86.         (agent_set_slot, ":agent_id", slot_agent_necromancer, ":player_id"),
  87.         (particle_system_burst,"psys_war_smoke_tall", pos1, 15),
  88.         (agent_play_sound, ":agent_id", "snd_pistol_shot"),
  89.         ]
  90.     ),
  91.    
  92.     ("cf_server_aoe_necro_damage", #SERVER: AOE damage from necro staff
  93.     [
  94.         (multiplayer_is_server),
  95.         (store_script_param, ":attacker_agent", 1),
  96.        
  97.         (agent_get_position, pos0, ":attacker_agent"),
  98.         (agent_get_player_id, ":attacker_player", ":attacker_agent"),
  99.         (player_get_slot, ":attacker_fac", ":attacker_player", slot_player_faction_id),
  100.         (try_for_agents, ":other_agent"),
  101.             (neq, ":attacker_agent", ":other_agent"),
  102.             (agent_is_active, ":other_agent"),
  103.             (agent_get_position, pos2, ":other_agent"),
  104.             (get_distance_between_positions, ":distance", pos0, pos2),
  105.             (le, ":distance", 900),
  106.             (agent_get_player_id, ":other_player", ":other_agent"),
  107.             (assign, ":continue", 1),
  108.             (try_begin),
  109.                 (player_is_active, ":other_player"),
  110.                 (try_begin),
  111.                     (player_get_slot, ":other_fac", ":other_player", slot_player_faction_id),
  112.                     (call_script, "script_cf_factions_are_hostile", ":other_fac", ":attacker_fac"),
  113.                     (player_set_slot, ":other_player", slot_player_zombie_infected, 1),
  114.                     (agent_get_player_id, ":attacker_player", ":attacker_agent"),
  115.                     (player_set_slot, ":other_player", slot_player_zombie_necromancer, ":attacker_player"),
  116.                 (else_try),
  117.                     (assign, ":continue", 0),
  118.                 (try_end),
  119.             (try_end),
  120.             (eq, ":continue", 1),
  121.             (agent_get_slot, ":necro", ":other_agent", slot_agent_necromancer),
  122.             (neq, ":necro", ":attacker_player"),
  123.             (assign, ":damage", 50),
  124.             (store_agent_hit_points,":hp",":other_agent",1),
  125.             (store_sub, ":test", ":hp", ":damage"),
  126.             (try_begin),
  127.                 (gt, ":test", 1),
  128.                 (agent_set_hit_points, ":other_agent", ":test"),#just deliver damage (no stun)
  129.                 (particle_system_burst,"psys_fireplace_fire_small", pos2, 15),
  130.             (else_try),
  131.                 (agent_deliver_damage_to_agent,":attacker_agent", ":other_agent", ":damage"),#stun and deliver damage
  132.             (try_end),
  133.         (try_end),
  134.    
  135.     ]),
  136.  
  137.    ("cf_server_necromancer_spawn_skeleton_horse", #SERVER: spawn a skeleton horse by necromancer.
  138.     [
  139.       (multiplayer_is_server),
  140.       (store_script_param_1, ":spawner_agent_id"),
  141.    
  142.       (agent_get_player_id, ":spawner_player_id", ":spawner_agent_id"),
  143.       (agent_get_position, pos1, ":spawner_agent_id"),
  144.       (position_move_x, pos1, 50),
  145.       (position_set_z_to_ground_level, pos1),
  146.       (set_spawn_position, pos1),
  147.       (spawn_horse, "itm_bone_horse"), 
  148.       (particle_system_burst,"psys_war_smoke_tall", pos1, 15),
  149.       (agent_set_slot, reg0, slot_agent_necromancer, ":spawner_player_id"),
  150.       (call_script, "script_resset_zombie_relations"),
  151.     ]
  152.    ),
  153.    
  154.    ("cf_server_slay_all_undead", #SERVER: slay all undead
  155.     [
  156.       (multiplayer_is_server),
  157.       (store_script_param_1, ":slayer_agent_id"), #-1 is no slayer.
  158.      
  159.       (try_for_agents, ":cur_agent"),
  160.         (assign, ":final_slayer_agent_id", ":cur_agent"),
  161.         (try_begin),
  162.             (neq, ":slayer_agent_id", -1),
  163.             (assign, ":final_slayer_agent_id", ":slayer_agent_id"),
  164.         (try_end),
  165.         (agent_get_item_id, ":item_id", ":cur_agent"),
  166.         (agent_get_troop_id, ":troop_id", ":cur_agent"),
  167.         (this_or_next|eq, ":item_id", "itm_bone_horse"),
  168.         (this_or_next|eq, ":troop_id", "trp_zombie"),
  169.         (this_or_next|eq, ":troop_id", "trp_fast_zombie"),
  170.         (this_or_next|eq, ":troop_id", "trp_tank_zombie"),
  171.         (this_or_next|eq, ":troop_id", "trp_skeleton_berserker"),
  172.         (this_or_next|eq, ":troop_id", "trp_skeleton_archer"),
  173.         (eq, ":troop_id", "trp_rotting_zombie"),
  174.         (agent_deliver_damage_to_agent, ":final_slayer_agent_id", ":cur_agent", 10000000),
  175.       (try_end),     
  176.     ]
  177.   ),
  178.  
  179.   ("cf_server_necromancer_kill_own_undead", #SERVER: slay undead hoard owned by certain necromancer.
  180.     [
  181.       (multiplayer_is_server),
  182.       (store_script_param_1, ":slayer_agent_id"), #-1 is no slayer
  183.      
  184.       (agent_get_player_id, ":necro", ":slayer_agent_id"),
  185.       (try_for_agents, ":cur_agent"),
  186.         (assign, ":final_slayer_agent_id", ":cur_agent"),
  187.         (try_begin),
  188.             (neq, ":slayer_agent_id", -1),
  189.             (assign, ":final_slayer_agent_id", ":slayer_agent_id"),
  190.         (try_end),
  191.         (agent_get_item_id, ":item_id", ":cur_agent"),
  192.         (agent_get_troop_id, ":troop_id", ":cur_agent"),
  193.         (this_or_next|eq, ":item_id", "itm_bone_horse"),
  194.         (this_or_next|eq, ":troop_id", "trp_zombie"),
  195.         (this_or_next|eq, ":troop_id", "trp_fast_zombie"),
  196.         (this_or_next|eq, ":troop_id", "trp_tank_zombie"),
  197.         (this_or_next|eq, ":troop_id", "trp_skeleton_berserker"),
  198.         (this_or_next|eq, ":troop_id", "trp_skeleton_archer"),
  199.         (eq, ":troop_id", "trp_rotting_zombie"),
  200.         (agent_get_slot, ":my_necro", ":cur_agent", slot_agent_necromancer),
  201.         (eq, ":my_necro", ":necro"),
  202.         (agent_deliver_damage_to_agent, ":final_slayer_agent_id", ":cur_agent", 10000000),
  203.       (try_end),     
  204.     ]),
  205.    
  206.   ("cf_server_change_necro_state_of_player", # SERVER: handle an entire necro state change for a player (calls all required scripts).
  207.     [
  208.       (multiplayer_is_server),
  209.       (store_script_param, ":player_id", 1), # The player id of the necromancer whose state should change.
  210.       (store_script_param, ":change", 2), # The amount to change the state by (negative goes downward).
  211.      
  212.       (call_script, "script_cf_server_change_necro_state_id", ":player_id", ":change"),
  213.       (call_script, "script_cf_server_send_necro_update_message", ":player_id"),
  214.       (call_script, "script_resset_zombie_relations"),
  215.     ]
  216.    ),
  217.    
  218.   ("cf_server_change_necro_state_id", # SERVER: increment or decrement necro state by given amount.
  219.     [
  220.       (multiplayer_is_server),
  221.       (store_script_param, ":player_id", 1), # The player id of the necromancer whose state should change.
  222.       (store_script_param, ":change", 2), # The amount to change the state by (negative goes downward).
  223.      
  224.       (player_get_slot, ":state", ":player_id", slot_player_necromancer_zombie_state),
  225.       (try_begin),
  226.         (ge, ":change", 1),
  227.         (try_for_range, ":index", 0, ":change"),
  228.             (try_begin),
  229.                 (eq, ":state", necro_state_end),
  230.                 (assign, ":state", necro_state_begin),
  231.             (else_try),
  232.                 (val_add, ":state", 1),
  233.             (try_end),
  234.         (try_end),
  235.       (else_try),
  236.         (le, ":change", -1),
  237.         (try_for_range_backwards, ":index", 0, ":change"),
  238.             (try_begin),
  239.                 (eq, ":state", necro_state_begin),
  240.                 (assign, ":state", necro_state_end),
  241.             (else_try),
  242.                 (val_sub, ":state", 1),
  243.             (try_end),
  244.         (try_end),
  245.       (try_end),
  246.       (player_set_slot, ":player_id", slot_player_necromancer_zombie_state, ":state"),
  247.     ]
  248.    ),
  249.  
  250.  
  251.   ("cf_server_send_necro_update_message", # SERVER: Send message to command giver based on necromancer state change.
  252.    [
  253.     (multiplayer_is_server),
  254.     (store_script_param, ":player_id", 1), # The player who gives the command.
  255.    
  256.     (player_get_slot, ":state", ":player_id", slot_player_necromancer_zombie_state),
  257.     (try_begin),
  258.         (eq, ":state", necro_state_peaceful),
  259.         (multiplayer_send_int_to_player, ":player_id", server_event_necromancer_message, 2),
  260.     (else_try),
  261.         (eq, ":state", necro_state_faction),
  262.         (multiplayer_send_int_to_player, ":player_id", server_event_necromancer_message, 3),
  263.     (else_try),
  264.         (eq, ":state", necro_state_allies),
  265.         (multiplayer_send_int_to_player, ":player_id", server_event_necromancer_message, 4),
  266.     (else_try),
  267.         (eq, ":state", necro_state_allies_com),
  268.         (multiplayer_send_int_to_player, ":player_id", server_event_necromancer_message, 5),
  269.     (else_try),
  270.         (eq, ":state",necro_state_allies_com_outlaw),
  271.         (multiplayer_send_int_to_player, ":player_id", server_event_necromancer_message, 6),
  272.     (else_try),
  273.         (eq, ":state", necro_state_noone),
  274.         (multiplayer_send_int_to_player, ":player_id", server_event_necromancer_message, 7),
  275.     (else_try),
  276.         (eq, ":state", necro_state_ffa),
  277.         (multiplayer_send_int_to_player, ":player_id", server_event_necromancer_message, 8),
  278.     (try_end),
  279.     ]),
  280.  
  281.     ("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.
  282.     [
  283.         (multiplayer_is_server),
  284.        
  285.         (try_for_agents, ":cur_agent_b"),
  286.             (agent_get_troop_id, ":troop_id_b", ":cur_agent_b"),#get the troop id of the new agent and determine if its an undead
  287.             (this_or_next|eq, ":troop_id_b", "trp_zombie"),
  288.             (this_or_next|eq, ":troop_id_b", "trp_fast_zombie"),
  289.             (this_or_next|eq, ":troop_id_b", "trp_rotting_zombie"),
  290.             (this_or_next|eq, ":troop_id_b", "trp_tank_zombie"),
  291.             (this_or_next|eq, ":troop_id_b", "trp_skeleton_archer"),
  292.             (this_or_next|eq, ":troop_id_b", "trp_rock_golem"),
  293.             (eq, ":troop_id_b", "trp_skeleton_berserker"),
  294.             (agent_clear_relations_with_agents, ":cur_agent_b"),
  295.             #now that we know its an undead, its time to determine its necromancer.
  296.             (agent_get_slot, ":necromancer_player_id", ":cur_agent_b", slot_agent_necromancer),
  297.             (player_is_active, ":necromancer_player_id"),
  298.             (player_get_agent_id, ":necromancer_agent_id", ":necromancer_player_id"),
  299.             (player_get_slot, ":state", ":necromancer_player_id", slot_player_necromancer_zombie_state),
  300.             #nnow lets figure out what the state is of the necromancer.
  301.             (try_begin),
  302.                 (eq, ":state", necro_state_peaceful), #peaceful
  303.                 (try_for_agents, ":cur_agent_a"),
  304.                     (agent_add_relation_with_agent, ":cur_agent_b", ":cur_agent_a", 1),
  305.                 (try_end),
  306.             (else_try),
  307.                 (eq, ":state", necro_state_faction), #faction friendly
  308.                 (player_get_slot, ":fac_id", ":necromancer_player_id", slot_player_faction_id),
  309.                 (try_for_agents, ":cur_agent_a"),
  310.                     (assign, ":continue", 1),
  311.                     (try_begin), #same faction
  312.                         (neg|agent_is_non_player, ":cur_agent_a"),
  313.                         (agent_get_player_id, ":cur_player_a", ":cur_agent_a"),
  314.                         (player_is_active, ":cur_player_a"),
  315.                         (player_get_slot, ":cur_fac_id_a", ":cur_player_a", slot_player_faction_id),
  316.                         (eq, ":fac_id", ":cur_fac_id_a"),
  317.                         (agent_add_relation_with_agent, ":cur_agent_b", ":cur_agent_a", 1),
  318.                         (assign, ":continue", 0),
  319.                     (else_try), #necromancer in same faction
  320.                         (agent_get_slot, ":necro", ":cur_agent_a", slot_agent_necromancer),
  321.                         (player_get_slot, ":necro_fac", ":necro", slot_player_faction_id),
  322.                         (eq, ":necro_fac", ":fac_id"),
  323.                         (agent_add_relation_with_agent, ":cur_agent_b", ":cur_agent_a", 1),
  324.                         (assign, ":continue", 0),
  325.                     (else_try), #same necromancer
  326.                         (agent_get_slot, ":necro", ":cur_agent_a", slot_agent_necromancer),
  327.                         (eq, ":necro", ":necromancer_player_id"),
  328.                         (agent_add_relation_with_agent, ":cur_agent_b", ":cur_agent_a", 1),
  329.                         (assign, ":continue", 0),
  330.                     (try_end),
  331.                     (try_begin), #if none of the above, make enemy
  332.                         (eq, ":continue", 1),
  333.                         (agent_add_relation_with_agent, ":cur_agent_b", ":cur_agent_a", -1),
  334.                     (try_end),
  335.                 (try_end),
  336.             (else_try),
  337.                 (eq, ":state", necro_state_allies), #faction allies friendly
  338.                 (player_get_slot, ":fac_id", ":necromancer_player_id", slot_player_faction_id),
  339.                 (try_for_agents, ":cur_agent_a"),
  340.                     (assign, ":continue", 1),
  341.                     (try_begin), #allied faction
  342.                         (neg|agent_is_non_player, ":cur_agent_a"),
  343.                         (agent_get_player_id, ":cur_player_a", ":cur_agent_a"),
  344.                         (player_is_active, ":cur_player_a"),
  345.                         (player_get_slot, ":cur_fac_id_a", ":cur_player_a", slot_player_faction_id),
  346.                         (try_begin),
  347.                             (call_script, "script_cf_factions_are_hostile", ":cur_fac_id_a", ":fac_id"),
  348.                         (else_try),
  349.                             (agent_add_relation_with_agent, ":cur_agent_b", ":cur_agent_a", 1),
  350.                             (assign, ":continue", 0),
  351.                         (try_end),
  352.                     (else_try), #necromancer in allied faction
  353.                         (agent_get_slot, ":necro", ":cur_agent_a", slot_agent_necromancer),
  354.                         (player_get_slot, ":necro_fac", ":necro", slot_player_faction_id),
  355.                         (try_begin),
  356.                             (call_script, "script_cf_factions_are_hostile", ":necro_fac", ":fac_id"),
  357.                         (else_try),
  358.                             (agent_add_relation_with_agent, ":cur_agent_b", ":cur_agent_a", 1),
  359.                             (assign, ":continue", 0),
  360.                         (try_end),
  361.                         (agent_add_relation_with_agent, ":cur_agent_b", ":cur_agent_a", 1),
  362.                         (assign, ":continue", 0),
  363.                     (else_try), #same necromancer
  364.                         (agent_get_slot, ":necro", ":cur_agent_a", slot_agent_necromancer),
  365.                         (eq, ":necro", ":necromancer_player_id"),
  366.                         (agent_add_relation_with_agent, ":cur_agent_b", ":cur_agent_a", 1),
  367.                         (assign, ":continue", 0),
  368.                     (try_end),
  369.                     (try_begin), #if none of the above, make enemy
  370.                         (eq, ":continue", 1),
  371.                         (agent_add_relation_with_agent, ":cur_agent_b", ":cur_agent_a", -1),
  372.                     (try_end),
  373.                 (try_end),
  374.             (else_try),
  375.                 (eq, ":state", necro_state_allies_com), #faction allies+commoners friendly
  376.                 (player_get_slot, ":fac_id", ":necromancer_player_id", slot_player_faction_id),
  377.                 (try_for_agents, ":cur_agent_a"),
  378.                     (assign, ":continue", 1),
  379.                     (try_begin), #allied faction
  380.                         (neg|agent_is_non_player, ":cur_agent_a"),
  381.                         (agent_get_player_id, ":cur_player_a", ":cur_agent_a"),
  382.                         (player_is_active, ":cur_player_a"),
  383.                         (player_get_slot, ":cur_fac_id_a", ":cur_player_a", slot_player_faction_id),
  384.                         (try_begin),
  385.                             (call_script, "script_cf_factions_are_hostile", ":cur_fac_id_a", ":fac_id"),
  386.                             (try_begin),
  387.                                 (eq, ":cur_fac_id_a", 0),
  388.                                 (agent_add_relation_with_agent, ":cur_agent_b", ":cur_agent_a", 1),
  389.                                 (assign, ":continue", 0),
  390.                             (try_end),
  391.                         (else_try),
  392.                             (agent_add_relation_with_agent, ":cur_agent_b", ":cur_agent_a", 1),
  393.                             (assign, ":continue", 0),
  394.                         (try_end),
  395.                     (else_try), #necromancer in allied faction
  396.                         (agent_get_slot, ":necro", ":cur_agent_a", slot_agent_necromancer),
  397.                         (player_get_slot, ":necro_fac", ":necro", slot_player_faction_id),
  398.                         (try_begin),
  399.                             (call_script, "script_cf_factions_are_hostile", ":necro_fac", ":fac_id"),
  400.                             (try_begin),
  401.                                 (eq, ":necro_fac", 0),
  402.                                 (agent_add_relation_with_agent, ":cur_agent_b", ":cur_agent_a", 1),
  403.                                 (assign, ":continue", 0),
  404.                             (try_end),
  405.                         (else_try),
  406.                             (agent_add_relation_with_agent, ":cur_agent_b", ":cur_agent_a", 1),
  407.                             (assign, ":continue", 0),
  408.                         (try_end),
  409.                         (agent_add_relation_with_agent, ":cur_agent_b", ":cur_agent_a", 1),
  410.                         (assign, ":continue", 0),
  411.                     (else_try), #same necromancer
  412.                         (agent_get_slot, ":necro", ":cur_agent_a", slot_agent_necromancer),
  413.                         (eq, ":necro", ":necromancer_player_id"),
  414.                         (agent_add_relation_with_agent, ":cur_agent_b", ":cur_agent_a", 1),
  415.                         (assign, ":continue", 0),
  416.                     (try_end),
  417.                     (try_begin), #if none of the above, make enemy
  418.                         (eq, ":continue", 1),
  419.                         (agent_add_relation_with_agent, ":cur_agent_b", ":cur_agent_a", -1),
  420.                     (try_end),
  421.                 (try_end),
  422.             (else_try),
  423.                 (eq, ":state", necro_state_allies_com_outlaw), #faction allies+commoners+outlaws friendly
  424.                 (player_get_slot, ":fac_id", ":necromancer_player_id", slot_player_faction_id),
  425.                 (try_for_agents, ":cur_agent_a"),
  426.                     (assign, ":continue", 1),
  427.                     (try_begin), #allied faction
  428.                         (neg|agent_is_non_player, ":cur_agent_a"),
  429.                         (agent_get_player_id, ":cur_player_a", ":cur_agent_a"),
  430.                         (player_is_active, ":cur_player_a"),
  431.                         (player_get_slot, ":cur_fac_id_a", ":cur_player_a", slot_player_faction_id),
  432.                         (try_begin),
  433.                             (call_script, "script_cf_factions_are_hostile", ":cur_fac_id_a", ":fac_id"),
  434.                             (try_begin),
  435.                                 (this_or_next|eq, ":cur_fac_id_a", 1),
  436.                                 (eq, ":cur_fac_id_a", 0),
  437.                                 (agent_add_relation_with_agent, ":cur_agent_b", ":cur_agent_a", 1),
  438.                                 (assign, ":continue", 0),
  439.                             (try_end),
  440.                         (else_try),
  441.                             (agent_add_relation_with_agent, ":cur_agent_b", ":cur_agent_a", 1),
  442.                             (assign, ":continue", 0),
  443.                         (try_end),
  444.                     (else_try), #necromancer in allied faction
  445.                         (agent_get_slot, ":necro", ":cur_agent_a", slot_agent_necromancer),
  446.                         (player_get_slot, ":necro_fac", ":necro", slot_player_faction_id),
  447.                         (try_begin),
  448.                             (call_script, "script_cf_factions_are_hostile", ":necro_fac", ":fac_id"),
  449.                             (try_begin),
  450.                                 (this_or_next|eq, ":necro_fac", 1),
  451.                                 (eq, ":necro_fac", 0),
  452.                                 (agent_add_relation_with_agent, ":cur_agent_b", ":cur_agent_a", 1),
  453.                                 (assign, ":continue", 0),
  454.                             (try_end),
  455.                         (else_try),
  456.                             (agent_add_relation_with_agent, ":cur_agent_b", ":cur_agent_a", 1),
  457.                             (assign, ":continue", 0),
  458.                         (try_end),
  459.                         (agent_add_relation_with_agent, ":cur_agent_b", ":cur_agent_a", 1),
  460.                         (assign, ":continue", 0),
  461.                     (else_try), #same necromancer
  462.                         (agent_get_slot, ":necro", ":cur_agent_a", slot_agent_necromancer),
  463.                         (eq, ":necro", ":necromancer_player_id"),
  464.                         (agent_add_relation_with_agent, ":cur_agent_b", ":cur_agent_a", 1),
  465.                         (assign, ":continue", 0),
  466.                     (try_end),
  467.                     (try_begin), #if none of the above, make enemy
  468.                         (eq, ":continue", 1),
  469.                         (agent_add_relation_with_agent, ":cur_agent_b", ":cur_agent_a", -1),
  470.                     (try_end),
  471.                 (try_end),
  472.             (else_try),
  473.                 (eq, ":state", necro_state_noone), #all enemy besides necromancer and other zombies of necro
  474.                 (try_for_agents, ":cur_agent_a"),
  475.                     (try_begin), #same necromancer
  476.                             (agent_get_slot, ":necro", ":cur_agent_a", slot_agent_necromancer),
  477.                             (eq, ":necro", ":necromancer_player_id"),
  478.                             (agent_add_relation_with_agent, ":cur_agent_b", ":cur_agent_a", 1),
  479.                     (else_try), #if none of the above, make enemy
  480.                             (agent_add_relation_with_agent, ":cur_agent_b", ":cur_agent_a", -1),
  481.                     (try_end),
  482.                 (try_end),
  483.             (else_try),
  484.                 (try_for_agents, ":cur_agent_a"),
  485.                     (eq, ":state", necro_state_ffa), #everyone fights everyone. (chaos)
  486.                     (agent_add_relation_with_agent, ":cur_agent_b", ":cur_agent_a", -1),
  487.                 (try_end),
  488.             (try_end),
  489.             (agent_add_relation_with_agent, ":cur_agent_b", ":necromancer_agent_id", 1),    #Zombies are allways friendly with their necromancer.
  490.             (agent_force_rethink, ":cur_agent_b"),
  491.         (try_end),
  492.    
  493.         ]),
  494. ])
  495.  
  496. Scripts.Extend([ # Illness Scripts
  497.     ("cf_server_reset_illnesses", #SERVER: Reset illness variables of a player (usually done after death).
  498.     [
  499.         (multiplayer_is_server),
  500.         (store_script_param, ":player_id", 1),
  501.        
  502.         (try_begin),
  503.             (player_is_active, ":player_id"),
  504.             (player_set_slot, ":player_id", slot_player_drunkeness, -1),
  505.             (player_set_slot, ":player_id", slot_player_trippiness, -1),
  506.             (player_set_slot, ":player_id", slot_player_cold_progression, -1),
  507.             (player_set_slot, ":player_id", slot_player_cold_direction, -1),
  508.             (player_set_slot, ":player_id", slot_player_cold_immunity_timer, -1),
  509.             (player_set_slot, ":player_id", slot_player_flu_progression, -1),
  510.             (player_set_slot, ":player_id", slot_player_flu_direction, -1),
  511.             (player_set_slot, ":player_id", slot_player_flu_immunity_timer, -1),
  512.             (player_set_slot, ":player_id", slot_player_plague_progression, -1),
  513.             (player_set_slot, ":player_id", slot_player_plague_direction, -1),
  514.             (player_set_slot, ":player_id", slot_player_plague_immunity_timer, -1),
  515.         (try_end),
  516.     ]),
  517.    
  518.     ("cf_server_illness_lower_immunities", #SERVER: Player loses some immunity to illnesses over time.
  519.     [
  520.         (multiplayer_is_server),
  521.         (store_script_param, ":player_id", 1),
  522.        
  523.         (player_is_active, ":player_id"),
  524.         (player_get_slot, ":cold_immunity", ":player_id", slot_player_cold_immunity_timer),
  525.         (player_get_slot, ":flu_immunity", ":player_id", slot_player_flu_immunity_timer),
  526.         (player_get_slot, ":plague_immunity", ":player_id", slot_player_plague_immunity_timer),
  527.        
  528.         (try_begin),
  529.             (neq, -1, ":cold_immunity"),
  530.             (val_sub, ":cold_immunity", 1),
  531.             (player_set_slot, ":player_id", slot_player_cold_immunity_timer, ":cold_immunity"),
  532.         (try_end),
  533.         (try_begin),
  534.             (neq, -1, ":flu_immunity"),
  535.             (val_sub, ":flu_immunity", 1),
  536.             (player_set_slot, ":player_id", slot_player_flu_immunity_timer, ":flu_immunity"),
  537.         (try_end),
  538.         (try_begin),
  539.             (neq, -1, ":plague_immunity"),
  540.             (val_sub, ":plague_immunity", 1),
  541.             (player_set_slot, ":player_id", slot_player_plague_immunity_timer, ":plague_immunity"),
  542.         (try_end),
  543.     ]),
  544.    
  545.     ("cf_server_progress_illnesses", #SERVER: Update player's illness progress.
  546.     [
  547.         (multiplayer_is_server),
  548.         (store_script_param_1, ":player_id"),
  549.        
  550.         (player_is_active, ":player_id"),  
  551.         (try_begin),#randomly catch flu
  552.             (store_random_in_range, ":rand", 0, 1000), # 1 out of 1000 chance every food tick
  553.             (eq, ":rand", 100),
  554.             (call_script, "script_cf_server_catch_flu", ":player_id"), 
  555.         (else_try),#randomly catch cold
  556.             (store_random_in_range, ":rand", 0, 100), # 1 out of 100 chance every food tick
  557.             (eq, ":rand", 100),
  558.             (call_script, "script_cf_server_catch_cold", ":player_id"),
  559.         (try_end),
  560.         (player_get_slot, ":cold_direction", ":player_id", slot_player_cold_direction),
  561.         (try_begin),
  562.             (neq, ":cold_direction", -1),
  563.             (player_get_slot, ":cold_progression", ":player_id", slot_player_cold_progression),
  564.             (try_begin), #cold
  565.                 (eq, ":cold_direction", 1), #going up
  566.                 (val_add, ":cold_progression", 1),
  567.                 (try_begin),
  568.                     (eq, ":cold_progression", 100),
  569.                     (assign, ":cold_direction", 0),
  570.                     (player_set_slot, ":player_id", slot_player_cold_direction, 0),
  571.                 (try_end),
  572.             (else_try),
  573.                 (eq, ":cold_direction", 0), #going down
  574.                 (val_sub, ":cold_progression", 1),
  575.                 (try_begin),
  576.                     (eq, ":cold_progression", 0),
  577.                     (call_script, "script_cf_server_lose_cold", ":player_id"),
  578.                 (try_end),
  579.             (try_end),
  580.             (player_set_slot, ":player_id", slot_player_cold_progression, ":cold_progression"),
  581.            
  582.             (try_begin), #cold client updates
  583.                 (eq, ":cold_direction", 1),
  584.                 (this_or_next|eq, ":cold_progression", 25),
  585.                 (eq, ":cold_progression", 75),
  586.                 (multiplayer_send_int_to_player, ":player_id", server_event_illness_update  , 1, ":cold_progression"),
  587.             (else_try),
  588.                 (eq, ":cold_direction", 0),
  589.                 (this_or_next|eq, ":cold_progression", 24),
  590.                 (eq, ":cold_progression", 1),
  591.                 (multiplayer_send_int_to_player, ":player_id", server_event_illness_update , 1, ":cold_progression"),
  592.             (try_end),
  593.                
  594.            
  595.             (try_begin), #cough from cold
  596.                 (store_random_in_range, ":cough", 0,100),
  597.                 (gt, ":cold_progression", ":cough"),
  598.                 (call_script, "script_player_cough", ":player_id", 1),
  599.             (try_end),
  600.         (else_try),
  601.             (player_get_slot, ":flu_direction", ":player_id", slot_player_flu_direction),
  602.             (neq, ":flu_direction", -1),
  603.             (player_get_slot, ":flu_progression", ":player_id", slot_player_flu_progression),
  604.             (try_begin), #flu
  605.                 (eq, ":flu_direction", 1), #going up
  606.                 (val_add, ":flu_progression", 1),
  607.                 (try_begin),
  608.                     (eq, ":flu_progression", 100),
  609.                     (assign, ":flu_direction", 0),
  610.                     (player_set_slot, ":player_id", slot_player_flu_direction, 0),
  611.                 (try_end),
  612.             (else_try),
  613.                 (eq, ":flu_direction", 0), #going down
  614.                 (val_sub, ":flu_progression", 1),
  615.                 (try_begin),
  616.                     (eq, ":flu_progression", 0),
  617.                     (call_script, "script_cf_server_lose_flu", ":player_id"),
  618.                 (try_end),
  619.             (try_end),
  620.             (player_set_slot, ":player_id", slot_player_flu_progression, ":flu_progression"),
  621.            
  622.             (try_begin), #flu client updates
  623.                 (eq, ":flu_direction", 1),
  624.                 (this_or_next|eq, ":flu_progression", 25),
  625.                 (this_or_next|eq, ":flu_progression", 50),
  626.                 (eq, ":flu_progression", 75),
  627.                 (multiplayer_send_int_to_player, ":player_id", server_event_illness_update , 2 , ":flu_progression"),
  628.             (else_try),
  629.                 (eq, ":flu_direction", 0),
  630.                 (this_or_next|eq, ":flu_progression", 49),
  631.                 (this_or_next|eq, ":flu_progression", 24),
  632.                 (eq, ":flu_progression", 1),
  633.                 (multiplayer_send_int_to_player, ":player_id", server_event_illness_update , 2 , ":flu_progression"),
  634.             (try_end),
  635.            
  636.             (try_begin),#vomiting
  637.                 (gt, ":flu_progression", 50),
  638.                 (store_random_in_range, ":rand",0,100),
  639.                 (lt, ":rand", 30),
  640.                 (call_script, "script_player_vomit", ":player_id"),
  641.             (else_try),
  642.                 (store_random_in_range, ":rand",0,100),
  643.                 (lt, ":rand", ":flu_progression"),
  644.                 (call_script, "script_player_cough", ":player_id", 2),
  645.             (try_end),
  646.         (else_try), #plague begin
  647.             (player_get_slot, ":plague_direction", ":player_id", slot_player_plague_direction),
  648.             (neq, ":plague_direction", -1),
  649.             (player_get_slot, ":plague_progression", ":player_id", slot_player_plague_progression),
  650.             (try_begin), #plague
  651.                 (eq, ":plague_direction", 1), #going up
  652.                 (val_add, ":plague_progression", 1),
  653.                 (try_begin),
  654.                     (eq, ":plague_progression", 100),
  655.                     (assign, ":plague_direction", 0),
  656.                     (player_set_slot, ":player_id", slot_player_plague_direction, 0),
  657.                 (try_end),
  658.             (else_try),
  659.                 (eq, ":plague_direction", 0), #going down
  660.                 (val_sub, ":plague_progression", 1),
  661.                 (try_begin),
  662.                     (eq, ":plague_progression", 0),
  663.                     (call_script, "script_cf_server_lose_plague", ":player_id"),
  664.                 (try_end),
  665.             (try_end),
  666.             (player_set_slot, ":player_id", slot_player_plague_progression, ":plague_progression"),
  667.            
  668.            
  669.             (try_begin), #plague client updates
  670.                 (eq, ":plague_direction", 1),
  671.                 (this_or_next|eq, ":plague_progression", 25),
  672.                 (this_or_next|eq, ":plague_progression", 50),
  673.                 (eq, ":plague_progression", 75),
  674.                 (multiplayer_send_int_to_player, ":player_id", server_event_illness_update  , 3, ":plague_progression"),
  675.             (else_try),
  676.                 (eq, ":plague_direction", 0),
  677.                 (this_or_next|eq, ":plague_progression", 49),
  678.                 (this_or_next|eq, ":plague_progression", 24),
  679.                 (eq, ":plague_progression", 1),
  680.                 (multiplayer_send_int_to_player, ":player_id", server_event_illness_update  , 3, ":plague_progression"),
  681.             (try_end),
  682.             (try_begin),#vomiting
  683.                 (gt, ":plague_progression", 50),
  684.                 (store_random_in_range, ":rand",0,100),
  685.                 (lt, ":rand", 30),
  686.                 (call_script, "script_player_vomit_blood", ":player_id"),
  687.             (else_try),#coughing
  688.                 (store_random_in_range, ":rand",0,30),
  689.                 (lt, ":rand", ":plague_progression"),
  690.                 (call_script, "script_player_cough", ":player_id", 3),
  691.             (try_end),
  692.             #lower health
  693.             (try_begin),
  694.                 (gt, ":plague_progression", 10),
  695.                 (player_get_agent_id, ":agent_id", ":player_id"),
  696.                 (agent_deliver_damage_to_agent, ":agent_id", ":agent_id", 10),
  697.             (try_end),
  698.            
  699.                
  700.         (try_end),
  701.     ]),
  702.    
  703.     #PLAGUE
  704.     ("cf_server_catch_plague", #SERVER: Player catches a plague.
  705.     [
  706.         (multiplayer_is_server),
  707.         (store_script_param, ":player_id", 1),
  708.        
  709.         (player_is_active, ":player_id"),
  710.         (player_get_slot, ":direction", ":player_id", slot_player_plague_direction),
  711.         (player_get_slot, ":immunity", ":player_id", slot_player_plague_immunity_timer),
  712.         (eq, ":direction", -1), #player doesnt already have plague
  713.         (eq, ":immunity", -1), #player isnt immune
  714.         (assign, ":progression", 1),
  715.         (assign, ":direction", 1),
  716.         (try_begin),
  717.             (player_get_slot, ":cold_direction", ":player_id", slot_player_cold_direction),
  718.             (neq, ":cold_direction", -1),#if has cold...
  719.             (assign, ":progression", 15),
  720.             (call_script, "script_cf_lose_cold", ":player_id"),#end cold
  721.         (else_try),
  722.             (player_get_slot, ":flu_direction", ":player_id", slot_player_flu_direction),
  723.             (neq, ":flu_direction", -1),#if has flu...
  724.             (assign, ":progression", 40),
  725.             (call_script, "script_cf_lose_flu", ":player_id"),#end cold
  726.         (try_end),
  727.         (player_set_slot, ":player_id", slot_player_plague_progression, ":progression"), #its begining...
  728.         (player_set_slot, ":player_id", slot_player_plague_direction, ":direction"), #its going up
  729.        
  730.         (str_store_player_username, s0, ":player_id"),
  731.         (server_add_message_to_log, "str_log_player_caught_plague"),
  732.     ]),
  733.    
  734.     ("cf_server_imbed_plague", #SERVER: Force player to obtain plague at stage.
  735.     [
  736.         (multiplayer_is_server),
  737.         (store_script_param, ":player_id", 1),
  738.         (store_script_param, ":progression", 2),
  739.        
  740.         (player_is_active, ":player_id"),
  741.         (call_script, "script_reset_illnesses",":player_id"),
  742.         (player_set_slot, ":player_id", slot_player_plague_progression, ":progression"), #its begining
  743.         (player_set_slot, ":player_id", slot_player_plague_direction, 1), #its going up
  744.        
  745.         (str_store_player_username, s0, ":player_id"),
  746.         (server_add_message_to_log, "str_log_player_caught_plague"),
  747.     ]),
  748.    
  749.     ("cf_lose_plague", #SERVER: Player loses the plague (is cured).
  750.     [
  751.         (multiplayer_is_server),
  752.         (store_script_param, ":player_id", 1),
  753.        
  754.         (player_is_active, ":player_id"),
  755.         (player_set_slot, ":player_id", slot_player_plague_progression, -1), #its done
  756.         (player_set_slot, ":player_id", slot_player_plague_direction, -1), #its done
  757.         (player_set_slot, ":player_id", slot_player_plague_immunity_timer, 100), #imumne for 100 food ticks
  758.        
  759.         (str_store_player_username, s0, ":player_id"),
  760.         (server_add_message_to_log, "str_log_player_lost_plague"),
  761.     ]),
  762.    
  763.     #FLU
  764.     ("cf_server_catch_flu", #SERVER: Player catches the flu.
  765.     [
  766.         (multiplayer_is_server),
  767.         (store_script_param, ":player_id", 1),
  768.        
  769.         (player_is_active, ":player_id"),
  770.         (player_get_slot, ":direction", ":player_id", slot_player_flu_direction),
  771.         (player_get_slot, ":immunity", ":player_id", slot_player_flu_immunity_timer),
  772.         (player_get_slot, ":plague_direction",":player_id", slot_player_plague_direction),
  773.         (neq, ":plague_direction", -1),
  774.         (eq, ":direction", -1), #player doesnt already have a cold
  775.         (eq, ":immunity", -1), #player isnt immune
  776.         (assign, ":progression", 1),
  777.         (assign, ":direction", 1),
  778.         (try_begin),
  779.             (player_get_slot, ":cold_direction", ":player_id", slot_player_cold_direction),
  780.             (neq, ":cold_direction", -1),#if has cold...
  781.             (player_get_slot, ":progression", ":player_id", slot_player_cold_progression), #overwrite it with flu
  782.             (call_script, "script_cf_lose_cold", ":player_id"),#end cold
  783.         (try_end),
  784.         (player_set_slot, ":player_id", slot_player_flu_progression, ":progression"), #its begining
  785.         (player_set_slot, ":player_id", slot_player_flu_direction, ":direction"), #its going up
  786.        
  787.         (str_store_player_username, s0, ":player_id"),
  788.         (server_add_message_to_log, "str_log_player_caught_flu"),
  789.     ]),
  790.    
  791.     ("cf_server_imbed_flu", #SERVER: Force player to catch flu at stage.
  792.     [
  793.         (multiplayer_is_server),
  794.         (store_script_param, ":player_id", 1),
  795.         (store_script_param, ":progression", 2),
  796.        
  797.         (player_is_active, ":player_id"),
  798.         (call_script, "script_reset_illnesses",":player_id"),
  799.         (player_set_slot, ":player_id", slot_player_flu_progression, ":progression"), #its begining...
  800.         (player_set_slot, ":player_id", slot_player_flu_direction, 1), #its going up
  801.        
  802.         (str_store_player_username, s0, ":player_id"),
  803.         (server_add_message_to_log, "str_log_player_caught_flu"),
  804.        
  805.     ]),
  806.    
  807.     ("cf_server_lose_flu", #SERVER: Player loses the flu (is cured).
  808.     [
  809.         (multiplayer_is_server),
  810.         (store_script_param, ":player_id", 1),
  811.        
  812.         (player_is_active, ":player_id"),
  813.         (player_set_slot, ":player_id", slot_player_flu_progression, -1), #its done
  814.         (player_set_slot, ":player_id", slot_player_flu_direction, -1), #its done
  815.         (player_set_slot, ":player_id", slot_player_flu_immunity_timer, 40), #imumne for 100 food ticks
  816.        
  817.         (str_store_player_username, s0, ":player_id"),
  818.         (server_add_message_to_log, "str_log_player_lost_flu"),
  819.     ]),
  820.    
  821.     #COLD
  822.     ("cf_server_catch_cold", #SERVER: Player catches a cold.
  823.     [
  824.         (multiplayer_is_server),
  825.         (store_script_param, ":player_id", 1),
  826.        
  827.         (player_is_active, ":player_id"),
  828.         (player_get_slot, ":direction", ":player_id", slot_player_cold_direction),
  829.         (player_get_slot, ":flu_direction", ":player_id", slot_player_flu_direction),
  830.         (player_get_slot, ":plague_direction",":player_id", slot_player_plague_direction),
  831.         (player_get_slot, ":immunity", ":player_id", slot_player_cold_immunity_timer),
  832.         (eq, ":flu_direction", -1),
  833.         (neq, ":plague_direction", -1),
  834.         (eq, ":direction", -1), #player doesnt already have a cold
  835.         (eq, ":immunity", -1), #player isnt immune
  836.         (player_set_slot, ":player_id", slot_player_cold_progression, 1), #its begining...
  837.         (player_set_slot, ":player_id", slot_player_cold_direction, 1), #its going up
  838.        
  839.         (str_store_player_username, s0, ":player_id"),
  840.         (server_add_message_to_log, "str_log_player_caught_cold"),
  841.        
  842.         ]),
  843.        
  844.         ("cf_server_imbed_cold", #SERVER: Force player to obtain cold at progression.
  845.         [
  846.         (multiplayer_is_server),
  847.         (store_script_param, ":player_id", 1),
  848.         (store_script_param, ":progression", 2),
  849.        
  850.         (player_is_active, ":player_id"),
  851.         (call_script, "script_reset_illnesses",":player_id"),
  852.         (player_set_slot, ":player_id", slot_player_cold_progression, ":progression"), #its begining...
  853.         (player_set_slot, ":player_id", slot_player_cold_direction, 1), #its going up
  854.        
  855.         (str_store_player_username, s0, ":player_id"),
  856.         (server_add_message_to_log, "str_log_player_caught_cold"),
  857.        
  858.         ]),
  859.        
  860.         ("cf_server_lose_cold", #SERVER: Player loses a cold (is cured)
  861.         [
  862.         (multiplayer_is_server),
  863.         (store_script_param, ":player_id", 1),
  864.        
  865.         (player_is_active, ":player_id"),
  866.         (player_set_slot, ":player_id", slot_player_cold_progression, -1), #its done
  867.         (player_set_slot, ":player_id", slot_player_cold_direction, -1), #its done
  868.         (player_set_slot, ":player_id", slot_player_cold_immunity_timer, 100), #imumne for 100 food ticks
  869.        
  870.         (str_store_player_username, s0, ":player_id"),
  871.         (server_add_message_to_log, "str_log_player_lost_cold"),
  872.     ]),
  873.    
  874.     #SYMPTOMS
  875.     ("cf_server_player_cough", #SERVER: Player coughs and spreads illness to surrounding players.
  876.     [
  877.         (multiplayer_is_server),
  878.         (store_script_param, ":player_id", 1),
  879.         (store_script_param, ":illness", 2),
  880.        
  881.        
  882.         (player_get_agent_id, ":agent_id", ":player_id"),
  883.         (agent_get_position, pos0, ":agent_id"),
  884.         (player_get_gender, ":gender", ":player_id"),
  885.  
  886.         (try_begin),
  887.             (eq, ":gender", tf_female),
  888.             (call_script, "script_play_sound_at_position", "snd_woman_cough_sick"),
  889.         (else_try),
  890.             (call_script, "script_play_sound_at_position", "snd_man_cough_sick"),
  891.         (try_end),
  892.        
  893.         (multiplayer_send_int_to_player, ":player_id", server_event_player_has_coughed, -1, ":illness"),
  894.         (agent_get_position, pos1, ":agent_id"),
  895.         (position_move_z, pos1, 160),
  896.         (try_for_agents, ":other_agent_id"), # send the chat message to other players whoose agents are close enough
  897.           (agent_is_alive, ":other_agent_id"),
  898.           (neq, ":other_agent_id", ":agent_id"),
  899.           (neg|agent_is_non_player, ":other_agent_id"),
  900.           (agent_get_player_id, ":other_player_id", ":other_agent_id"),
  901.           (player_is_active, ":other_player_id"),
  902.           (agent_get_position, pos2, ":other_agent_id"),
  903.           (position_move_z, pos2, 160),
  904.           (get_sq_distance_between_positions, ":sq_distance", pos1, pos2),
  905.           (le, ":sq_distance", sq(max_distance_to_play_sound)),
  906.          
  907.           (multiplayer_send_int_to_player, ":other_player_id", server_event_player_has_coughed, ":player_id", ":illness"),
  908.         (try_end),
  909.        
  910.         #spreading of illness
  911.         (try_for_agents, ":other_agent_id"), # find players that are close enough
  912.           (agent_is_alive, ":other_agent_id"),
  913.           (neg|agent_is_non_player, ":other_agent_id"),
  914.           (agent_get_player_id, ":other_player_id", ":other_agent_id"),
  915.           (player_is_active, ":other_player_id"),
  916.           (call_script, "script_cf_has_no_illness_protection", ":other_player_id"),
  917.           (agent_get_position, pos2, ":other_agent_id"),
  918.           (position_move_z, pos2, 160),
  919.           (get_sq_distance_between_positions, ":sq_distance", pos1, pos2),
  920.           (le, ":sq_distance", sq(max_distance_to_catch_cough)),
  921.           (position_has_line_of_sight_to_position, pos1, pos2),
  922.           (store_random_in_range, ":cold_catch_chance", 0, 100),
  923.           (gt, ":cold_catch_chance", 50),
  924.           (try_begin),
  925.                 (eq, ":illness", 1), #common cold
  926.                 (call_script, "script_cf_catch_cold", ":other_player_id"),
  927.           (else_try),
  928.                 (eq, ":illness", 2),
  929.                 (call_script, "script_cf_catch_flu", ":other_player_id"),
  930.             (else_try),
  931.                 (eq, ":illness", 3),
  932.                 (call_script, "script_cf_catch_plague", ":other_player_id"),
  933.           (try_end),
  934.         (try_end),
  935.     ]),
  936.    
  937.     ("player_vomit_blood", #SERVER: player vomits blood
  938.     [
  939.         (store_script_param, ":player_id", 1),
  940.         (player_get_agent_id, ":agent_id", ":player_id"),
  941.         (call_script, "script_spawn_processed_resources", ":agent_id", "itm_bloody_vomit", 1),
  942.         (agent_get_position, pos0, ":agent_id"),
  943.         (call_script, "script_play_sound_at_position", "snd_vomit"),
  944.         (multiplayer_send_int_to_player, ":player_id", server_event_player_has_vomited, -1),
  945.         (agent_get_position, pos1, ":agent_id"),
  946.         (position_move_z, pos1, 160),
  947.         (try_for_agents, ":other_agent_id"), # send the chat message to other players whoose agents are close enough
  948.           (agent_is_alive, ":other_agent_id"),
  949.           (neg|agent_is_non_player, ":other_agent_id"),
  950.           (agent_get_player_id, ":other_player_id", ":other_agent_id"),
  951.           (player_is_active, ":other_player_id"),
  952.           (agent_get_position, pos2, ":other_agent_id"),
  953.           (position_move_z, pos2, 160),
  954.           (get_sq_distance_between_positions, ":sq_distance", pos1, pos2),
  955.           (le, ":sq_distance", sq(max_distance_to_play_sound)),
  956.           (neq, ":other_player_id", ":player_id"),
  957.           (multiplayer_send_int_to_player, ":other_player_id", server_event_player_has_vomited, ":player_id"),
  958.         (try_end),
  959.        
  960.         (agent_get_slot, ":food_amount", ":agent_id", slot_agent_food_amount),
  961.         (try_begin),
  962.             (gt, ":food_amount", 20),
  963.             (val_sub, ":food_amount", 20),
  964.             (agent_set_slot, ":agent_id", slot_agent_food_amount, ":food_amount"),
  965.             (multiplayer_send_3_int_to_player, ":player_id", server_event_agent_set_slot, ":agent_id", slot_agent_food_amount, ":food_amount"),
  966.         (else_try),
  967.             (agent_set_slot, ":agent_id", slot_agent_food_amount, 0),
  968.             (multiplayer_send_3_int_to_player, ":player_id", server_event_agent_set_slot, ":agent_id", slot_agent_food_amount, 0),
  969.         (try_end),
  970.     ]),
  971.    
  972.     ("player_vomit", #SERVER: player vomits
  973.     [
  974.         (store_script_param, ":player_id", 1),
  975.         (player_get_agent_id, ":agent_id", ":player_id"),
  976.         (call_script, "script_spawn_processed_resources", ":agent_id", "itm_vomit", 1),
  977.         (agent_get_position, pos0, ":agent_id"),
  978.         (call_script, "script_play_sound_at_position", "snd_vomit"),
  979.         (multiplayer_send_int_to_player, ":player_id", server_event_player_has_vomited, -1),
  980.         (agent_get_position, pos1, ":agent_id"),
  981.         (position_move_z, pos1, 160),
  982.         (try_for_agents, ":other_agent_id"), # send the chat message to other players whoose agents are close enough
  983.           (agent_is_alive, ":other_agent_id"),
  984.           (neg|agent_is_non_player, ":other_agent_id"),
  985.           (agent_get_player_id, ":other_player_id", ":other_agent_id"),
  986.           (player_is_active, ":other_player_id"),
  987.           (agent_get_position, pos2, ":other_agent_id"),
  988.           (position_move_z, pos2, 160),
  989.           (get_sq_distance_between_positions, ":sq_distance", pos1, pos2),
  990.           (le, ":sq_distance", sq(max_distance_to_play_sound)),
  991.           (neq, ":other_player_id", ":player_id"),
  992.           (multiplayer_send_int_to_player, ":other_player_id", server_event_player_has_vomited, ":player_id"),
  993.         (try_end),
  994.        
  995.         (agent_get_slot, ":food_amount", ":agent_id", slot_agent_food_amount),
  996.         (try_begin),
  997.             (gt, ":food_amount", 20),
  998.             (val_sub, ":food_amount", 20),
  999.             (agent_set_slot, ":agent_id", slot_agent_food_amount, ":food_amount"),
  1000.             (multiplayer_send_3_int_to_player, ":player_id", server_event_agent_set_slot, ":agent_id", slot_agent_food_amount, ":food_amount"),
  1001.         (else_try),
  1002.             (agent_set_slot, ":agent_id", slot_agent_food_amount, 0),
  1003.             (multiplayer_send_3_int_to_player, ":player_id", server_event_agent_set_slot, ":agent_id", slot_agent_food_amount, 0),
  1004.         (try_end),
  1005.     ]),
  1006.    
  1007.     ("cf_has_no_illness_protection",
  1008.     [
  1009.         (store_script_param, ":player_id", 1),
  1010.        
  1011.         (assign, ":immune", 0),
  1012.         (player_get_agent_id, ":player_id", ":agent_id"),
  1013.         (agent_get_item_slot, ":agent_id", ":hat", ek_head),
  1014.         (try_begin),
  1015.             (eq, ":hat", "itm_plague_mask"),
  1016.             (agent_get_troop_id, ":troop_id", ":other_agent_id"),
  1017.             (eq, ":troop_id", "trp_physician"),
  1018.             (assign, ":immune", 1),
  1019.         (else_try),
  1020.            
  1021.         (try_end), 
  1022.        
  1023.         (eq, ":immune", 0),
  1024.     ]
  1025.     ),
  1026.    
  1027. ])
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement