Automatic Guns

Started by Colonel_Ryan, March 31, 2010, 06:22:42 PM

Previous topic - Next topic

Colonel_Ryan

Got perm from cdvader to post it. So here guys.
The fully automatic gun script :D

module_mission_templates
automatic_fire_init = (
   ti_before_mission_start, 0, ti_once, [],
[
   (call_script, "script_autofire_reset_values"),
])

automatic_fire_test = (
   0.2, 0, 0,
[
   (key_is_down, key_left_mouse_button),
(neg|key_is_down, key_right_mouse_button),
(assign, "$has_item_equipped", 0),
(get_player_agent_no, ":player"),                
(call_script, "script_autofire_agent_try_for_items_equipped", ":player", "itm_amer_ar", "itm_union_smg"),
(eq, "$has_item_equipped", 1),
(agent_is_alive, ":player"),
(neg|agent_is_wounded, ":player"),
(eq, "$autofire_lock", 0),
],
[
       (assign, "$autofire_lock", 1),
      (try_begin),
       (gt, "$ammunition", 0),
       (try_for_agents, ":agent"),
       (get_player_agent_no, ":player"),
   (agent_get_position, pos3, ":player"),
       (position_move_x, pos3, 1),
       (position_move_y, pos3, 96),
       (position_move_z, pos3, 125),
   (particle_system_burst, "psys_muzzle_flash", pos3, 1), #You'll need to make your own muzzle flash particle system, it's rather simple.
           (play_sound, "snd_fullautotest"), #Change the sound to your liking
   (call_script, "script_autofire_get_agent_positions", ":player", ":agent"),
   (try_begin),
       (eq, "$autofire_damage", 1),
   (call_script, "script_autofire_damage_agent", ":player", ":agent", "psys_game_blood", 15, 10, 17), #Particle system not working yet
       (try_end),
               (val_sub, "$ammunition", 1),
   (try_end),
        (else_try),
           (eq, "$ammunition", 0),
           (agent_set_animation, ":player", "anim_reload_crossbow"), #Change the animation to your liking
           (assign, "$ammunition", 180),
        (try_end),      
    (assign, "$autofire_lock", 0),
])

autofire_ammo_init = ( #also needed, or you will enter scenes with no ammo.
ti_before_mission_start, 0, ti_once, [],

[(get_player_agent_no, ":player"),
 (agent_has_item_equipped, "itm_cartridges"),
 (assign, "$ammunition", 180),
  ])


module_scripts
#Autofire script by cdvader and Rize---------------------------------------------------------
#script_autofire_damage_agent
#Input 1: Damager.
#Input 2: Agent.
#Input 3: Particle System Burst.
#Input 4: Particle System Burst Power.
#Input 5: Random damage value BEGIN.
#Input 6: Random damage value END.
#Output: Damage.
("autofire_damage_agent",
[
   (store_script_param, ":player", 1),
(store_script_param, ":agent", 2),
(store_script_param, ":psys", 3),
(store_script_param, ":psys_power", 4),
(store_script_param, ":l_range", 5),
(store_script_param, ":h_range", 6),                
(try_begin),
   (agent_get_position, pos1, ":agent"),
                   (agent_get_position, pos2, ":player"),
                   (neg|position_is_behind_position, pos1, pos2),
(particle_system_burst, ":psys", pos1, ":psys_power"),
   (store_agent_hit_points, ":hp", ":agent", 1),
(store_random_in_range, ":rand", ":l_range", ":h_range"),
(val_sub, ":hp", ":rand"),
(val_max, ":hp", 0),
(neq, ":agent", ":player"),
(agent_is_alive, ":agent"),
(agent_set_hit_points, ":agent", ":hp", 1),
(assign, reg1, ":hp"),
(try_begin),
(gt, reg1, 0),
(display_message, "@Delivered {reg1} damage."),
(try_end),
(try_begin),
   (lt, ":hp", 1),
(agent_deliver_damage_to_agent, ":player", ":agent"),
(try_end),                  
(try_end),
]),

   #script_autofire_agent_has_item_equipped
#Input 1: Agent.
#Input 2: Weapon item.
#Output: $has_item_equipped variable.
("autofire_agent_has_item_equipped",
[
   (store_script_param, ":agent", 1),
(store_script_param, ":item", 2),
(try_begin),
   (agent_get_wielded_item, ":w_item", ":agent", 0),
(eq, ":w_item", ":item"),
(assign, "$has_item_equipped", 1),
(else_try),
   (assign, "$has_item_equipped", 0),
(try_end),
]),

#script_autofire_agent_try_for_items_equipped
#Input 1: Agent.
#Input 2: Weapon item BEGIN.
#Input 3: Weapon item END.
#Output: $has_item_equipped variable.
("autofire_agent_try_for_items_equipped",
[
   (store_script_param, ":agent", 1),
(store_script_param, ":item_begin", 2),
(store_script_param, ":item_end", 3),
(try_for_range, ":all_items", ":item_begin", ":item_end"),
(agent_get_wielded_item, ":w_item", ":agent", 0),
(is_between, ":w_item", ":all_items"),
(assign, "$has_item_equipped", 1),
(else_try),
   (agent_get_wielded_item, ":w_item", ":agent", 0),
(eq, ":w_item", ":item_begin"),
(assign, "$has_item_equipped", 1),
(else_try),
   (agent_get_wielded_item, ":w_item", ":agent", 0),
(eq, ":w_item", ":item_end"),
(assign, "$has_item_equipped", 1),
               (else_try),
                   (troop_get_type, ":walker", ":agent"),
                   (eq, ":walker", tf_walker),
                   (assign, "$has_item_equipped", 1),
(else_try),
   (assign, "$has_item_equipped", 0),
(try_end),
]),

#script_autofire_reset_values
#Input: None.
#Output: Resetted values.
("autofire_reset_values",
[
#(assign, "$dist_val", 100),
   (assign, "$autofire_lock", 0),
   (assign, "$autofire_damage", 0),
(assign, "$has_item_equipped", 0),
]),

   #script_autofire_get_agent_positions
#Input 1: Shooter.
#Input 2: Agent.
#Output: Positions.
("autofire_get_agent_positions",
[
   (store_script_param, ":player", 1),
(store_script_param, ":agent", 2),
   (agent_get_look_position, pos1, ":player"),
(agent_get_position, pos2, ":agent"),
              (agent_get_position, pos3, ":player"),
(get_distance_between_positions, ":dist", pos1, pos2),
#(assign, "$dist_val", 100),
              (get_distance_between_positions, ":range", pos2, pos3),
              (lt, ":range", 2000), #Increase range here
(try_begin),
   (neq, ":agent", ":player"),
   (lt, ":dist", 100),
(assign, "$autofire_damage", 1),
(else_try), #TODO: Fix this try_for_range loop to drastically decrease the size of the script.
   #(try_for_range, reg2, 0, 250),
   #    (neq, ":agent", ":player"),
   #    (position_move_y, pos1, 100),
#    (position_move_z, pos1, -100),
#    (get_distance_between_positions, ":dist", pos1, pos2),
# (val_add, "$dist_val", 100),
# (lt, ":dist", "$dist_val"),
#    (assign, "$autofire_damage", 1),
   #(try_end),
(neq, ":agent", ":player"),
(position_move_y, pos1, 100),
(position_move_z, pos1, -100),
(get_distance_between_positions, ":dist", pos1, pos2),
                       (neg|position_is_behind_position, pos2, pos1),
(lt, ":dist", 200),
(assign, "$autofire_damage", 1),
(else_try),
(neq, ":agent", ":player"),
(position_move_y, pos1, 100),
(position_move_z, pos1, -100),
(get_distance_between_positions, ":dist", pos1, pos2),
                       (neg|position_is_behind_position, pos2, pos1),
(lt, ":dist", 300),
(assign, "$autofire_damage", 1),
(else_try),
(neq, ":agent", ":player"),
(position_move_y, pos1, 100),
(position_move_z, pos1, -100),
(get_distance_between_positions, ":dist", pos1, pos2),
(neg|position_is_behind_position, pos2, pos1),
                       (lt, ":dist", 400),
(assign, "$autofire_damage", 1),
               (else_try),
(neq, ":agent", ":player"),
(position_move_y, pos1, 100),
(position_move_z, pos1, -100),
(get_distance_between_positions, ":dist", pos1, pos2),
(lt, ":dist", 500),
                       (neg|position_is_behind_position, pos2, pos1),
(assign, "$autofire_damage", 1),
(else_try),
(neq, ":agent", ":player"),
(position_move_y, pos1, 100),
(position_move_z, pos1, -100),
(get_distance_between_positions, ":dist", pos1, pos2),
                       (neg|position_is_behind_position, pos2, pos1),
(lt, ":dist", 600),
(assign, "$autofire_damage", 1),
(else_try),
(neq, ":agent", ":player"),
(position_move_y, pos1, 100),
(position_move_z, pos1, -100),
(get_distance_between_positions, ":dist", pos1, pos2),
                       (neg|position_is_behind_position, pos2, pos1),
(lt, ":dist", 700),
(assign, "$autofire_damage", 1),
(else_try),
(neq, ":agent", ":player"),
(position_move_y, pos1, 100),
(position_move_z, pos1, -100),
(get_distance_between_positions, ":dist", pos1, pos2),
                       (neg|position_is_behind_position, pos2, pos1),
(lt, ":dist", 800),
(assign, "$autofire_damage", 1),
(else_try),
(neq, ":agent", ":player"),
(position_move_y, pos1, 100),
(position_move_z, pos1, -100),
(get_distance_between_positions, ":dist", pos1, pos2),
                       (neg|position_is_behind_position, pos2, pos1),
(lt, ":dist", 900),
(assign, "$autofire_damage", 1),
(else_try),
(neq, ":agent", ":player"),
(position_move_y, pos1, 100),
(position_move_z, pos1, -100),
(get_distance_between_positions, ":dist", pos1, pos2),
                       (neg|position_is_behind_position, pos2, pos1),
(lt, ":dist", 1000),
(assign, "$autofire_damage", 1),
(else_try),
   (assign, "$autofire_damage", 0),
(try_end),
]),
#---------------------------------------------------------

Jubal

The duke, the wanderer, the philosopher, the mariner, the warrior, the strategist, the storyteller, the wizard, the wayfarer...

Colonel_Ryan

Cdvader is a god!!

He made a new auto gun script for Warband MULTIPLAYER!!! Who works for all!!