how to insert script or osp into warband?? please help

正在查看此主题的用户

hi i'm triyng to add shiled bash to my mod but i gone into original osp thread and cannot manged to apply it to my mod..
is out there a compiled version of shield bash osp or a shield bash mod i can use??


many thanks..
leon
 
OK after some tries I manage to add some small osp lke emoticons 1.0, Rubik world map, and lav custom notes...
this because information about how to import were clear..

now i'm trying to import  shield bash osp but i have many erros on compiling maybe because I put the code not correctly

for shiled bash i have 3 entries


module_scripts
插入代码块:
#Shield Bash Script  
("shield_bash",[  
(this_or_next|multiplayer_is_server),
(neg|game_in_multiplayer_mode),	
(get_player_agent_no,":player_agent"),
(try_begin),
(gt, ":player_agent", 0),
(agent_get_animation, ":anim", ":player_agent",0),
(agent_get_horse, ":my_horse", ":player_agent"),
(agent_get_wielded_item, ":shield_item", ":player_agent", 1),
(try_begin),
	(neq, ":anim", "anim_shield_bash"),
	(eq, ":my_horse", -1),
	(is_between, ":shield_item", "itm_wooden_shield", "itm_steel_shield_herald03"),
	(agent_set_animation, ":player_agent","anim_shield_bash"),
	(agent_get_position, pos63,":player_agent"),
	(position_move_y,pos63,75),#75 cm directly ahead, so it's not a cuboid space around player center
	(agent_get_troop_id, ":id", ":player_agent"),
	(troop_get_type, ":type", ":id"),
	(try_begin),
		(eq, ":type", tf_male),
		(agent_play_sound, ":player_agent", "snd_man_yell"),
	(else_try),
		(agent_play_sound, ":player_agent", "snd_woman_yell"),		
	(try_end),
	(try_for_agents,":agent"),
		(gt, ":agent", 0),
		(neg|agent_is_ally,":agent"),#don't bash allies
		(agent_is_human, ":agent"),#stop if not human			
		(agent_is_active,":agent"),
		(agent_is_alive,":agent"),
		(try_begin),
			(agent_get_position,pos62,":agent"),
			(get_distance_between_positions,":dist",pos63,pos62),		
			(lt,":dist",100),#Set this to whatever you like- 1 meter radius clears a big section of crowd
			(agent_get_horse, ":horse", ":agent"),
			(eq, ":horse", -1),	
			(neq,":agent",":player_agent"),	
			(agent_play_sound, ":player_agent", "snd_wooden_hit_low_armor_high_damage"),				
			(position_move_y,pos62,-25),			
			(agent_set_position, ":agent", pos62),
			(agent_set_animation, ":agent","anim_shield_strike"),			
		(try_end),
	(try_end),
(try_end),
(try_end),
]),  
#End Shield Bash Script


module_mission_templates (you obviously need to put it into specific mt's like other common_ scripts): -------where must i put these lines????

插入代码块:
ommon_shield_bash = (0,0,0,[
(key_clicked, key_left_control),
(neg|main_hero_fallen),
],
[
(call_script, "script_shield_bash"),
])

module_animations (needs to replace a free unused_human_anim ofc):        ------    I put these lines into the first unusued human animations.
插入代码块:
["shield_bash", 0, amf_play|amf_priority_defend|amf_use_defend_speed|amf_client_owner_prediction, 
[0.75, "defend_shield_parry_all", 1, 50, blend_in_defense], #Adjust duration for balance.  Currently at 0.75 seconds, fixed.
[0.75, "defend_shield_right", 1, 50, blend_in_defense],
[0.75, "defend_shield_left", 1, 50, blend_in_defense],
[0.75, "defend_shield_right", 1, 50, blend_in_defense],   
],
 ["shield_strike", acf_enforce_all|acf_align_with_ground, amf_priority_striked|amf_play|amf_accurate_body|amf_restart,
	[1.0, "anim_human", blow+5000, blow+5010, arf_blend_in_3|arf_make_custom_sound],  
	[1.7, "anim_human", blow+5400, blow+5453, arf_blend_in_2|arf_make_custom_sound], 
	[1.44, "anim_human", blow+5400, blow+5445, arf_blend_in_2|arf_make_custom_sound],   
   ],


can please someonetell me where must i correctly put this code??

and

to shield bash work correclty must i put other files like .bfr , .dds or somehing other??

many tanks in adance...

leon
 
JC LEON 说:
module_scripts
插入代码块:
#Shield Bash Script  
("shield_bash",[  
(this_or_next|multiplayer_is_server),
(neg|game_in_multiplayer_mode),   
(get_player_agent_no,":player_agent"),
(try_begin),
(gt, ":player_agent", 0),
(agent_get_animation, ":anim", ":player_agent",0),
(agent_get_horse, ":my_horse", ":player_agent"),
(agent_get_wielded_item, ":shield_item", ":player_agent", 1),
(try_begin),
   (neq, ":anim", "anim_shield_bash"),
   (eq, ":my_horse", -1),
   (is_between, ":shield_item", "itm_wooden_shield", "itm_steel_shield_herald03"),
   (agent_set_animation, ":player_agent","anim_shield_bash"),
   (agent_get_position, pos63,":player_agent"),
   (position_move_y,pos63,75),#75 cm directly ahead, so it's not a cuboid space around player center
   (agent_get_troop_id, ":id", ":player_agent"),
   (troop_get_type, ":type", ":id"),
   (try_begin),
      (eq, ":type", tf_male),
      (agent_play_sound, ":player_agent", "snd_man_yell"),
   (else_try),
      (agent_play_sound, ":player_agent", "snd_woman_yell"),      
   (try_end),
   (try_for_agents,":agent"),
      (gt, ":agent", 0),
      (neg|agent_is_ally,":agent"),#don't bash allies
      (agent_is_human, ":agent"),#stop if not human         
      (agent_is_active,":agent"),
      (agent_is_alive,":agent"),
      (try_begin),
         (agent_get_position,pos62,":agent"),
         (get_distance_between_positions,":dist",pos63,pos62),      
         (lt,":dist",100),#Set this to whatever you like- 1 meter radius clears a big section of crowd
         (agent_get_horse, ":horse", ":agent"),
         (eq, ":horse", -1),   
         (neq,":agent",":player_agent"),   
         (agent_play_sound, ":player_agent", "snd_wooden_hit_low_armor_high_damage"),            
         (position_move_y,pos62,-25),         
         (agent_set_position, ":agent", pos62),
         (agent_set_animation, ":agent","anim_shield_strike"),         
      (try_end),
   (try_end),
(try_end),
(try_end),
]),  
#End Shield Bash Script
Ok you added this to module scripts


JC LEON 说:
module_mission_templates (you obviously need to put it into specific mt's like other common_ scripts): -------where must i put these lines????

插入代码块:
common_shield_bash = (0,0,0,[
(key_clicked, key_left_control),
(neg|main_hero_fallen),
],
[
(call_script, "script_shield_bash"),
])

This code can go at thew top. Then you must call it in every mission template in which you want to have shield bash. Your safe calling it in every single one.

JC LEON 说:
module_animations (needs to replace a free unused_human_anim ofc):        ------    I put these lines into the first unusued human animations.
插入代码块:
["shield_bash", 0, amf_play|amf_priority_defend|amf_use_defend_speed|amf_client_owner_prediction, 
[0.75, "defend_shield_parry_all", 1, 50, blend_in_defense], #Adjust duration for balance.  Currently at 0.75 seconds, fixed.
[0.75, "defend_shield_right", 1, 50, blend_in_defense],
[0.75, "defend_shield_left", 1, 50, blend_in_defense],
[0.75, "defend_shield_right", 1, 50, blend_in_defense],   
],
 ["shield_strike", acf_enforce_all|acf_align_with_ground, amf_priority_striked|amf_play|amf_accurate_body|amf_restart,
   [1.0, "anim_human", blow+5000, blow+5010, arf_blend_in_3|arf_make_custom_sound],  
   [1.7, "anim_human", blow+5400, blow+5453, arf_blend_in_2|arf_make_custom_sound], 
   [1.44, "anim_human", blow+5400, blow+5445, arf_blend_in_2|arf_make_custom_sound],   
   ],

Good

JC LEON 说:
to shield bash work correclty must i put other files like .bfr , .dds or somehing other??

many tanks in adance...

leon

this is a script no brf or dds required
 
for fisrt and third script i think is ll k. but for the second a really dont know where i must put the lines I put the code 1 time as shown in the screen below but when i compile i get these errors and warnings

ai dont know in how many times i must put the code and where

shield_bash.jpg




any hint??
or a module_mission_template.py file ready yet?
 
hi again i'n trying this code now from Sinisterius  Shield Bash for single- and multiplayer (Revamped 23/10/2010). since thiis shield bash fixed with bash cooldown and shield bash ai

and have three pieces of code

module_mission-templates.py
插入代码块:
################################################
## Shield Bash                                ##
## Developed by 'xenoargh' for singleplayer.  ##
## Revamped by 'Sinisterius'. ##
## Animations Copyright (C) 2010 'xenoargh'.  ##
################################################


#####
#Add these following triggers to module_mission_templates.py,
#above all other code. Then simply add:
#sp_shield_bash_1,
#sp_shield_bash_2,
#sp_shield_bash_3,
#To your mission templates to activate the triggers.
sp_shield_bash_1 = (
	0, 0, 0,
	[
	    (eq, "$sp_shield_bash", 1),
        (game_key_is_down, gk_defend),
        (game_key_clicked, gk_attack),
	],
	[
	    (get_player_agent_no, ":agent"),
		(agent_is_active, ":agent"),
		(agent_is_alive, ":agent"),
		(neg|agent_slot_ge, ":agent", sp_agent_shield_bash_timer, 1), #Less than.
		(agent_get_wielded_item, ":item", ":agent", 1), #Offhand.
		(gt, ":item", 0),
		(item_get_type, ":type", ":item"),
		(eq, ":type", itp_type_shield), #Shield equipped.
		(agent_get_defend_action, ":action", ":agent"),
		(eq, ":action", 2), #Blocking.
		(agent_get_horse, ":horse", ":agent"),
		(eq, ":horse", -1), #No horse.
		(agent_set_slot, ":agent", sp_agent_shield_bash_timer, 5),
		(agent_set_animation, ":agent", "anim_shield_bash"),
		(agent_get_troop_id, ":troop", ":agent"),
		(troop_get_type, ":type", ":troop"),
		(try_begin),
		    (eq, ":type", tf_male),
			(agent_play_sound, ":agent", "snd_man_yell"),
		(else_try),
		    (eq, ":type", tf_female),
			(agent_play_sound, ":agent", "snd_woman_yell"),
		(try_end),
		(agent_get_position, pos1, ":agent"),
		(assign, ":victim", -1),
		(assign, ":minimum_distance", 150),
		(try_for_agents, ":suspect"),
		    (agent_is_alive, ":suspect"),
			(agent_is_human, ":suspect"),
			(neg|agent_is_ally, ":suspect"),
			(agent_get_position, pos2, ":suspect"),
			(neg|position_is_behind_position, pos2, pos1), #Suspect can't be behind basher.
			(get_distance_between_positions, ":distance", pos1, pos2),
			(le, ":distance", ":minimum_distance"),
			(assign, ":minimum_distance", ":distance"),
			(assign, ":victim", ":suspect"),
		(try_end),
		(ge, ":victim", 0),
		(agent_play_sound, ":victim", "snd_wooden_hit_low_armor_high_damage"),
		(agent_get_defend_action, ":action", ":victim"),
		(try_begin),
		    (eq, ":action", 2), #Blocking.
			(neg|position_is_behind_position, pos1, pos2), #If basher isn't behind victim.
			(agent_get_wielded_item, ":item", ":victim", 1), #Offhand.
			(gt, ":item", 0),
			(item_get_type, ":type", ":item"),
			(eq, ":type", itp_type_shield),
			(agent_set_animation, ":victim", "anim_shield_bash"),
		(else_try),
		    (agent_set_animation, ":victim", "anim_shield_strike"),
		(try_end),		
	])
sp_shield_bash_2 = (
	1, 0, 0, [(eq, "$sp_shield_bash", 1)],
	[
	    (get_player_agent_no, ":agent"),
		(agent_is_active, ":agent"),
		(agent_is_alive, ":agent"),
		(agent_get_slot, ":timer", ":agent", sp_agent_shield_bash_timer),
		(val_sub, ":timer", 1),
		(val_max, ":timer", 0),
		(agent_set_slot, ":agent", sp_agent_shield_bash_timer, ":timer"),
	])
sp_shield_bash_3 = (
	0.25, 0, 0, [(eq, "$sp_shield_bash_ai", 1)],
	[
	    (get_player_agent_no, ":player_agent"),
	    (try_for_agents, ":agent"),
		    (neq, ":agent", ":player_agent"),
		    (agent_is_alive, ":agent"),
			(agent_is_human, ":agent"),
			(try_begin),
		    	(neg|agent_slot_ge, ":agent", sp_agent_shield_bash_timer, 1), #Less than.
				(agent_slot_eq, ":agent", slot_agent_is_running_away, 0), #Isn't routing.
		    	(agent_get_wielded_item, ":item", ":agent", 1), #Offhand.
				(gt, ":item", 0),
		    	(item_get_type, ":type", ":item"),
		    	(eq, ":type", itp_type_shield), #Shield equipped.
		    	(agent_get_attack_action, ":action", ":agent"),
		    	(eq, ":action", 0), #Free.
		    	(agent_get_horse, ":horse", ":agent"),
		    	(eq, ":horse", -1), #No horse.
				(agent_get_team, ":team", ":agent"),
				(agent_get_position, pos1, ":agent"),
				(assign, ":victim", -1),
				(assign, ":minimum_distance", 125),
				(try_for_agents, ":suspect"),
				    (agent_is_alive, ":suspect"),
					(agent_is_human, ":suspect"),
					(agent_get_position, pos2, ":suspect"),
					(neg|position_is_behind_position, pos2, pos1), #Suspect can't be behind basher.
					(agent_get_team, ":suspect_team", ":suspect"),
					(neq, ":suspect_team", ":team"),
					(get_distance_between_positions, ":distance", pos1, pos2),
					(le, ":distance", ":minimum_distance"),
					(assign, ":minimum_distance", ":distance"),
					(assign, ":victim", ":suspect"),
				(try_end),
				(ge, ":victim", 0),
				(agent_get_horse, ":horse", ":victim"),
				(eq, ":horse", -1),
				(store_random_in_range, ":rand", 15, 26),
		    	(agent_set_slot, ":agent", sp_agent_shield_bash_timer, ":rand"), #20 is 20*0.25=5seconds.
				(agent_set_animation, ":agent", "anim_shield_bash"),
				(agent_get_troop_id, ":troop", ":agent"),
				(troop_get_type, ":type", ":troop"),
				(try_begin),
				    (eq, ":type", tf_male),
					(agent_play_sound, ":agent", "snd_man_yell"),
				(else_try),
				    (eq, ":type", tf_female),
					(agent_play_sound, ":agent", "snd_woman_yell"),
				(try_end),
				(agent_play_sound, ":victim", "snd_wooden_hit_low_armor_high_damage"),
				(agent_get_defend_action, ":action", ":victim"),
				(try_begin),
				    (eq, ":action", 2), #Blocking.
					(neg|position_is_behind_position, pos1, pos2), #If basher isn't behind victim.
					(agent_get_wielded_item, ":item", ":victim", 1), #Offhand.
		        	(gt, ":item", 0),
					(item_get_type, ":type", ":item"),
					(eq, ":type", itp_type_shield),
					(agent_set_animation, ":victim", "anim_shield_bash"),
				(else_try),
				    (agent_set_animation, ":victim", "anim_shield_strike"),
				(try_end),					
			(try_end),
			(agent_get_slot, ":timer", ":agent", sp_agent_shield_bash_timer),
			(val_sub, ":timer", 1),
			(val_max, ":timer", 0),
			(agent_set_slot, ":agent", sp_agent_shield_bash_timer, ":timer"),
		(try_end),
	])

my problems are in this piece of code since i really dont understand where I must put the code and how to use it
I tried to put in on the start of the code and other positions  ,comple worked fine but shield bash doesnt work ingame



module_animations.py

插入代码块:
#####
#The following animations go into module_animations.py.
#Simply replace two unused human animations with these animations.
#You can adjust the duration of the bash, simply modify the '0.50' to
#your liking. So '1.0' is 1second and '0.50' is half a second.
["shield_bash", acf_enforce_all|acf_align_with_ground, amf_priority_striked|amf_play|amf_accurate_body|amf_restart,
    [0.50, "defend_shield_parry_all", 1, 50, blend_in_defense], #Adjust duration for balance.  Currently at 0.50 seconds, fixed.
    [0.50, "defend_shield_right", 1, 50, blend_in_defense],
    [0.50, "defend_shield_left", 1, 50, blend_in_defense],
    [0.50, "defend_shield_right", 1, 50, blend_in_defense],   
],
["shield_strike", acf_enforce_all|acf_align_with_ground, amf_priority_striked|amf_play|amf_accurate_body|amf_restart,
    [1.0, "anim_human", blow+5000, blow+5010, arf_blend_in_3|arf_make_custom_sound],
    [1.7, "anim_human", blow+5400, blow+5453, arf_blend_in_2|arf_make_custom_sound],
    [1.44, "anim_human", blow+5400, blow+5445, arf_blend_in_2|arf_make_custom_sound],   
],

this is simple ..i put these lines in the module using 2 unusued human animations


module_cosntants.py

插入代码块:
#####
#This goes into module_constants.py, agent slots.
sp_agent_shield_bash_timer = 50

simple too..

can please  someone compile for me  the default (1.166 module system) module_mission_templates.py so i can learn about that ???

any help is appreciated
 
JC LEON 说:
my problems are in this piece of code since i really dont understand where I must put the code and how to use it
I tried to put in on the start of the code and other positions  ,comple worked fine but shield bash doesnt work ingame

according to what you said you did everthing correctly but
#Add these following triggers to module_mission_templates.py,
#above all other code. Then simply add:
#sp_shield_bash_1,
#sp_shield_bash_2,
#sp_shield_bash_3,
#To your mission templates to activate the triggers.
You never called the triggers. To do so you must add

sp_shield_bash_1,
sp_shield_bash_2,
sp_shield_bash_3,

to a mission template

example in mission template lead_charge-------this should allow you to do shield bash in a normal battle but not in any other time. to make shield bash available at other times you must add it to every mission template.

(
    "lead_charge",mtf_battle_mode|mtf_synch_inventory,charge,
    "You lead your men to battle.",
    [
    (1,mtef_defenders|mtef_team_0,0,aif_start_alarmed,12,[]),
    (0,mtef_defenders|mtef_team_0,0,aif_start_alarmed,0,[]),
    (4,mtef_attackers|mtef_team_1,0,aif_start_alarmed,12,[]),
    (4,mtef_attackers|mtef_team_1,0,aif_start_alarmed,0,[]),
    ],
    [
      (ti_on_agent_spawn, 0, 0, [],
      [
        (store_trigger_param_1, ":agent_no"),
        (call_script, "script_agent_reassign_team", ":agent_no"),

        (assign, ":initial_courage_score", 5000),
                 
        (agent_get_troop_id, ":troop_id", ":agent_no"),
        (store_character_level, ":troop_level", ":troop_id"),
        (val_mul, ":troop_level", 35),
        (val_add, ":initial_courage_score", ":troop_level"), #average : 20 * 35 = 700
       
        (store_random_in_range, ":randomized_addition_courage", 0, 3000), #average : 1500
        (val_add, ":initial_courage_score", ":randomized_addition_courage"),
                 
        (agent_get_party_id, ":agent_party", ":agent_no"),       
        (party_get_morale, ":cur_morale", ":agent_party"),
       
        (store_sub, ":morale_effect_on_courage", ":cur_morale", 70),
        (val_mul, ":morale_effect_on_courage", 30), #this can effect morale with -2100..900
        (val_add, ":initial_courage_score", ":morale_effect_on_courage"),
       
        #average = 5000 + 700 + 1500 = 7200; min : 5700, max : 8700
        #morale effect = min : -2100(party morale is 0), average : 0(party morale is 70), max : 900(party morale is 100)
        #min starting : 3600, max starting  : 9600, average starting : 7200
        (agent_set_slot, ":agent_no", slot_agent_courage_score, ":initial_courage_score"),
        ]),

      common_battle_init_banner,
      sp_shield_bash_1,
      sp_shield_bash_2,
      sp_shield_bash_3,


       
      (ti_on_agent_killed_or_wounded, 0, 0, [],
      [
        (store_trigger_param_1, ":dead_agent_no"),
        (store_trigger_param_2, ":killer_agent_no"),
        (store_trigger_param_3, ":is_wounded"),

        (try_begin),
          (ge, ":dead_agent_no", 0),
          (neg|agent_is_ally, ":dead_agent_no"),
          (agent_is_human, ":dead_agent_no"),
          (agent_get_troop_id, ":dead_agent_troop_id", ":dead_agent_no"),
##          (str_store_troop_name, s6, ":dead_agent_troop_id"),
##          (assign, reg0, ":dead_agent_no"),
##          (assign, reg1, ":killer_agent_no"),
##          (assign, reg2, ":is_wounded"),
##          (agent_get_team, reg3, ":dead_agent_no"),         
          #(display_message, "@{!}dead agent no : {reg0} ; killer agent no : {reg1} ; is_wounded : {reg2} ; dead agent team : {reg3} ; {s6} is added"),
          (party_add_members, "p_total_enemy_casualties", ":dead_agent_troop_id", 1), #addition_to_p_total_enemy_casualties
          (eq, ":is_wounded", 1),
          (party_wound_members, "p_total_enemy_casualties", ":dead_agent_troop_id", 1),
        (try_end),

        (call_script, "script_apply_death_effect_on_courage_scores", ":dead_agent_no", ":killer_agent_no"),
      ]),

      common_battle_tab_press,

      (ti_question_answered, 0, 0, [],
      [(store_trigger_param_1,":answer"),
        (eq,":answer",0),
        (assign, "$pin_player_fallen", 0),
        (try_begin),
          (store_mission_timer_a, ":elapsed_time"),
          (gt, ":elapsed_time", 20),
          (str_store_string, s5, "str_retreat"),
          (call_script, "script_simulate_retreat", 10, 20, 1),
        (try_end),
        (call_script, "script_count_mission_casualties_from_agents"),
        (finish_mission,0),]),

      (ti_before_mission_start, 0, 0, [],
      [
        (team_set_relation, 0, 2, 1),
        (team_set_relation, 1, 3, 1),
        (call_script, "script_place_player_banner_near_inventory_bms"),

        (party_clear, "p_routed_enemies"),

        (assign, "$g_latest_order_1", 1),
        (assign, "$g_latest_order_2", 1),
        (assign, "$g_latest_order_3", 1),
        (assign, "$g_latest_order_4", 1),
        ]),

     
      (0, 0, ti_once, [], [(assign,"$g_battle_won",0),
                          (assign,"$defender_reinforcement_stage",0),
                          (assign,"$attacker_reinforcement_stage",0),
                          (call_script, "script_place_player_banner_near_inventory"),
                          (call_script, "script_combat_music_set_situation_with_culture"),
                          (assign, "$g_defender_reinforcement_limit", 2),
                          ]),

      common_music_situation_update,
      common_battle_check_friendly_kills,

      (1, 0, 5, [
                             
      #new (25.11.09) starts (sdsd = TODO : make a similar code to also helping ally encounters)
      #count all total (not dead) enemy soldiers (in battle area + not currently placed in battle area)
      (call_script, "script_party_count_members_with_full_health", "p_collective_enemy"),
      (assign, ":total_enemy_soldiers", reg0),
     
      #decrease number of agents already in battle area to find all number of reinforcement enemies
      (assign, ":enemy_soldiers_in_battle_area", 0),
      (try_for_agents,":cur_agent"),
        (agent_is_human, ":cur_agent"),
        (agent_get_party_id, ":agent_party", ":cur_agent"),
        (try_begin),
          (neq, ":agent_party", "p_main_party"),
          (neg|agent_is_ally, ":cur_agent"),
          (val_add, ":enemy_soldiers_in_battle_area", 1),
        (try_end),
      (try_end),
      (store_sub, ":total_enemy_reinforcements", ":total_enemy_soldiers", ":enemy_soldiers_in_battle_area"),

      (try_begin),
        (lt, ":total_enemy_reinforcements", 15),
        (ge, "$defender_reinforcement_stage", 2),
        (eq, "$defender_reinforcement_limit_increased", 0),
        (val_add, "$g_defender_reinforcement_limit", 1),                   
        (assign, "$defender_reinforcement_limit_increased", 1),
      (try_end),   
      #new (25.11.09) ends
     
     
     
     
     
     
      (lt,"$defender_reinforcement_stage","$g_defender_reinforcement_limit"),
                (store_mission_timer_a,":mission_time"),
                (ge,":mission_time",10),
                (store_normalized_team_count,":num_defenders", 0),
                (lt,":num_defenders",6)],
          [(add_reinforcements_to_entry,0,7),(assign, "$defender_reinforcement_limit_increased", 0),(val_add,"$defender_reinforcement_stage",1)]),
     
      (1, 0, 5, [(lt,"$attacker_reinforcement_stage",2),
                (store_mission_timer_a,":mission_time"),
                (ge,":mission_time",10),
                (store_normalized_team_count,":num_attackers", 1),
                (lt,":num_attackers",6)],
          [(add_reinforcements_to_entry,3,7),(val_add,"$attacker_reinforcement_stage",1)]),

      common_battle_check_victory_condition,
      common_battle_victory_display,

      (1, 4, ti_once, [(main_hero_fallen)],
          [
              (assign, "$pin_player_fallen", 1),
              (str_store_string, s5, "str_retreat"),
              (call_script, "script_simulate_retreat", 10, 20, 1),
              (assign, "$g_battle_result", -1),
              (set_mission_result,-1),
              (call_script, "script_count_mission_casualties_from_agents"),
              (finish_mission,0)]),

      common_battle_inventory,


      #AI Triggers
      (0, 0, ti_once, [
          (store_mission_timer_a,":mission_time"),(ge,":mission_time",2),
          ],
      [(call_script, "script_select_battle_tactic"),
        (call_script, "script_battle_tactic_init"),
        #(call_script, "script_battle_calculate_initial_powers"), #deciding run away method changed and that line is erased
        ]),
     
      (3, 0, 0, [
          (call_script, "script_apply_effect_of_other_people_on_courage_scores"),
              ], []), #calculating and applying effect of people on others courage scores

      (3, 0, 0, [
          (try_for_agents, ":agent_no"),
            (agent_is_human, ":agent_no"),
            (agent_is_alive, ":agent_no"),         
            (store_mission_timer_a,":mission_time"),
            (ge,":mission_time",3),         
            (call_script, "script_decide_run_away_or_not", ":agent_no", ":mission_time"),
          (try_end),         
              ], []), #controlling courage score and if needed deciding to run away for each agent

      (5, 0, 0, [
          (store_mission_timer_a,":mission_time"),

          (ge,":mission_time",3),
         
          (call_script, "script_battle_tactic_apply"),
          ], []), #applying battle tactic

      common_battle_order_panel,
      common_battle_order_panel_tick,

    ],
  ),
 
sorry for my noobsih but i think i'm an idiot...

I contune to dont undertand

I have no clear some infos..

1- where must i put the fisrt piece of code i module_missions_template?

2 - when you taolk about the triggers...
are you referring to this  ??

#sp_shield_bash_1,
#sp_shield_bash_2,
#sp_shield_bash_3,

or i must put these?

插入代码块:
sp_shield_bash_1 = (
	0, 0, 0,
	[
	    (eq, "$sp_shield_bash", 1),
        (game_key_is_down, gk_defend),
        (game_key_clicked, gk_attack),
	],
	[
	    (get_player_agent_no, ":agent"),
		(agent_is_active, ":agent"),
		(agent_is_alive, ":agent"),
		(neg|agent_slot_ge, ":agent", sp_agent_shield_bash_timer, 1), #Less than.
		(agent_get_wielded_item, ":item", ":agent", 1), #Offhand.
		(gt, ":item", 0),
		(item_get_type, ":type", ":item"),
		(eq, ":type", itp_type_shield), #Shield equipped.
		(agent_get_defend_action, ":action", ":agent"),
		(eq, ":action", 2), #Blocking.
		(agent_get_horse, ":horse", ":agent"),
		(eq, ":horse", -1), #No horse.
		(agent_set_slot, ":agent", sp_agent_shield_bash_timer, 5),
		(agent_set_animation, ":agent", "anim_shield_bash"),
		(agent_get_troop_id, ":troop", ":agent"),
		(troop_get_type, ":type", ":troop"),
		(try_begin),
		    (eq, ":type", tf_male),
			(agent_play_sound, ":agent", "snd_man_yell"),
		(else_try),
		    (eq, ":type", tf_female),
			(agent_play_sound, ":agent", "snd_woman_yell"),
		(try_end),
		(agent_get_position, pos1, ":agent"),
		(assign, ":victim", -1),
		(assign, ":minimum_distance", 150),
		(try_for_agents, ":suspect"),
		    (agent_is_alive, ":suspect"),
			(agent_is_human, ":suspect"),
			(neg|agent_is_ally, ":suspect"),
			(agent_get_position, pos2, ":suspect"),
			(neg|position_is_behind_position, pos2, pos1), #Suspect can't be behind basher.
			(get_distance_between_positions, ":distance", pos1, pos2),
			(le, ":distance", ":minimum_distance"),
			(assign, ":minimum_distance", ":distance"),
			(assign, ":victim", ":suspect"),
		(try_end),
		(ge, ":victim", 0),
		(agent_play_sound, ":victim", "snd_wooden_hit_low_armor_high_damage"),
		(agent_get_defend_action, ":action", ":victim"),
		(try_begin),
		    (eq, ":action", 2), #Blocking.
			(neg|position_is_behind_position, pos1, pos2), #If basher isn't behind victim.
			(agent_get_wielded_item, ":item", ":victim", 1), #Offhand.
			(gt, ":item", 0),
			(item_get_type, ":type", ":item"),
			(eq, ":type", itp_type_shield),
			(agent_set_animation, ":victim", "anim_shield_bash"),
		(else_try),
		    (agent_set_animation, ":victim", "anim_shield_strike"),
		(try_end),		
	])
sp_shield_bash_2 = (
	1, 0, 0, [(eq, "$sp_shield_bash", 1)],
	[
	    (get_player_agent_no, ":agent"),
		(agent_is_active, ":agent"),
		(agent_is_alive, ":agent"),
		(agent_get_slot, ":timer", ":agent", sp_agent_shield_bash_timer),
		(val_sub, ":timer", 1),
		(val_max, ":timer", 0),
		(agent_set_slot, ":agent", sp_agent_shield_bash_timer, ":timer"),
	])
sp_shield_bash_3 = (
	0.25, 0, 0, [(eq, "$sp_shield_bash_ai", 1)],
	[
	    (get_player_agent_no, ":player_agent"),
	    (try_for_agents, ":agent"),
		    (neq, ":agent", ":player_agent"),
		    (agent_is_alive, ":agent"),
			(agent_is_human, ":agent"),
			(try_begin),
		    	(neg|agent_slot_ge, ":agent", sp_agent_shield_bash_timer, 1), #Less than.
				(agent_slot_eq, ":agent", slot_agent_is_running_away, 0), #Isn't routing.
		    	(agent_get_wielded_item, ":item", ":agent", 1), #Offhand.
				(gt, ":item", 0),
		    	(item_get_type, ":type", ":item"),
		    	(eq, ":type", itp_type_shield), #Shield equipped.
		    	(agent_get_attack_action, ":action", ":agent"),
		    	(eq, ":action", 0), #Free.
		    	(agent_get_horse, ":horse", ":agent"),
		    	(eq, ":horse", -1), #No horse.
				(agent_get_team, ":team", ":agent"),
				(agent_get_position, pos1, ":agent"),
				(assign, ":victim", -1),
				(assign, ":minimum_distance", 125),
				(try_for_agents, ":suspect"),
				    (agent_is_alive, ":suspect"),
					(agent_is_human, ":suspect"),
					(agent_get_position, pos2, ":suspect"),
					(neg|position_is_behind_position, pos2, pos1), #Suspect can't be behind basher.
					(agent_get_team, ":suspect_team", ":suspect"),
					(neq, ":suspect_team", ":team"),
					(get_distance_between_positions, ":distance", pos1, pos2),
					(le, ":distance", ":minimum_distance"),
					(assign, ":minimum_distance", ":distance"),
					(assign, ":victim", ":suspect"),
				(try_end),
				(ge, ":victim", 0),
				(agent_get_horse, ":horse", ":victim"),
				(eq, ":horse", -1),
				(store_random_in_range, ":rand", 15, 26),
		    	(agent_set_slot, ":agent", sp_agent_shield_bash_timer, ":rand"), #20 is 20*0.25=5seconds.
				(agent_set_animation, ":agent", "anim_shield_bash"),
				(agent_get_troop_id, ":troop", ":agent"),
				(troop_get_type, ":type", ":troop"),
				(try_begin),
				    (eq, ":type", tf_male),
					(agent_play_sound, ":agent", "snd_man_yell"),
				(else_try),
				    (eq, ":type", tf_female),
					(agent_play_sound, ":agent", "snd_woman_yell"),
				(try_end),
				(agent_play_sound, ":victim", "snd_wooden_hit_low_armor_high_damage"),
				(agent_get_defend_action, ":action", ":victim"),
				(try_begin),
				    (eq, ":action", 2), #Blocking.
					(neg|position_is_behind_position, pos1, pos2), #If basher isn't behind victim.
					(agent_get_wielded_item, ":item", ":victim", 1), #Offhand.
		        	(gt, ":item", 0),
					(item_get_type, ":type", ":item"),
					(eq, ":type", itp_type_shield),
					(agent_set_animation, ":victim", "anim_shield_bash"),
				(else_try),
				    (agent_set_animation, ":victim", "anim_shield_strike"),
				(try_end),					
			(try_end),
			(agent_get_slot, ":timer", ":agent", sp_agent_shield_bash_timer),
			(val_sub, ":timer", 1),
			(val_max, ":timer", 0),
			(agent_set_slot, ":agent", sp_agent_shield_bash_timer, ":timer"),
		(try_end),
	])
 
JC LEON 说:
sorry for my noobsih but i think i'm an idiot...

I contune to dont undertand

I have no clear some infos..

1- where must i put the fisrt piece of code i module_missions_template?

2 - when you taolk about the triggers...
are you referring to this  ??

#sp_shield_bash_1,
#sp_shield_bash_2,
#sp_shield_bash_3,

or i must put these?

插入代码块:
sp_shield_bash_1 = (
	0, 0, 0,
	[
	    (eq, "$sp_shield_bash", 1),
        (game_key_is_down, gk_defend),
        (game_key_clicked, gk_attack),
	],
	[
	    (get_player_agent_no, ":agent"),
		(agent_is_active, ":agent"),
		(agent_is_alive, ":agent"),
		(neg|agent_slot_ge, ":agent", sp_agent_shield_bash_timer, 1), #Less than.
		(agent_get_wielded_item, ":item", ":agent", 1), #Offhand.
		(gt, ":item", 0),
		(item_get_type, ":type", ":item"),
		(eq, ":type", itp_type_shield), #Shield equipped.
		(agent_get_defend_action, ":action", ":agent"),
		(eq, ":action", 2), #Blocking.
		(agent_get_horse, ":horse", ":agent"),
		(eq, ":horse", -1), #No horse.
		(agent_set_slot, ":agent", sp_agent_shield_bash_timer, 5),
		(agent_set_animation, ":agent", "anim_shield_bash"),
		(agent_get_troop_id, ":troop", ":agent"),
		(troop_get_type, ":type", ":troop"),
		(try_begin),
		    (eq, ":type", tf_male),
			(agent_play_sound, ":agent", "snd_man_yell"),
		(else_try),
		    (eq, ":type", tf_female),
			(agent_play_sound, ":agent", "snd_woman_yell"),
		(try_end),
		(agent_get_position, pos1, ":agent"),
		(assign, ":victim", -1),
		(assign, ":minimum_distance", 150),
		(try_for_agents, ":suspect"),
		    (agent_is_alive, ":suspect"),
			(agent_is_human, ":suspect"),
			(neg|agent_is_ally, ":suspect"),
			(agent_get_position, pos2, ":suspect"),
			(neg|position_is_behind_position, pos2, pos1), #Suspect can't be behind basher.
			(get_distance_between_positions, ":distance", pos1, pos2),
			(le, ":distance", ":minimum_distance"),
			(assign, ":minimum_distance", ":distance"),
			(assign, ":victim", ":suspect"),
		(try_end),
		(ge, ":victim", 0),
		(agent_play_sound, ":victim", "snd_wooden_hit_low_armor_high_damage"),
		(agent_get_defend_action, ":action", ":victim"),
		(try_begin),
		    (eq, ":action", 2), #Blocking.
			(neg|position_is_behind_position, pos1, pos2), #If basher isn't behind victim.
			(agent_get_wielded_item, ":item", ":victim", 1), #Offhand.
			(gt, ":item", 0),
			(item_get_type, ":type", ":item"),
			(eq, ":type", itp_type_shield),
			(agent_set_animation, ":victim", "anim_shield_bash"),
		(else_try),
		    (agent_set_animation, ":victim", "anim_shield_strike"),
		(try_end),		
	])
sp_shield_bash_2 = (
	1, 0, 0, [(eq, "$sp_shield_bash", 1)],
	[
	    (get_player_agent_no, ":agent"),
		(agent_is_active, ":agent"),
		(agent_is_alive, ":agent"),
		(agent_get_slot, ":timer", ":agent", sp_agent_shield_bash_timer),
		(val_sub, ":timer", 1),
		(val_max, ":timer", 0),
		(agent_set_slot, ":agent", sp_agent_shield_bash_timer, ":timer"),
	])
sp_shield_bash_3 = (
	0.25, 0, 0, [(eq, "$sp_shield_bash_ai", 1)],
	[
	    (get_player_agent_no, ":player_agent"),
	    (try_for_agents, ":agent"),
		    (neq, ":agent", ":player_agent"),
		    (agent_is_alive, ":agent"),
			(agent_is_human, ":agent"),
			(try_begin),
		    	(neg|agent_slot_ge, ":agent", sp_agent_shield_bash_timer, 1), #Less than.
				(agent_slot_eq, ":agent", slot_agent_is_running_away, 0), #Isn't routing.
		    	(agent_get_wielded_item, ":item", ":agent", 1), #Offhand.
				(gt, ":item", 0),
		    	(item_get_type, ":type", ":item"),
		    	(eq, ":type", itp_type_shield), #Shield equipped.
		    	(agent_get_attack_action, ":action", ":agent"),
		    	(eq, ":action", 0), #Free.
		    	(agent_get_horse, ":horse", ":agent"),
		    	(eq, ":horse", -1), #No horse.
				(agent_get_team, ":team", ":agent"),
				(agent_get_position, pos1, ":agent"),
				(assign, ":victim", -1),
				(assign, ":minimum_distance", 125),
				(try_for_agents, ":suspect"),
				    (agent_is_alive, ":suspect"),
					(agent_is_human, ":suspect"),
					(agent_get_position, pos2, ":suspect"),
					(neg|position_is_behind_position, pos2, pos1), #Suspect can't be behind basher.
					(agent_get_team, ":suspect_team", ":suspect"),
					(neq, ":suspect_team", ":team"),
					(get_distance_between_positions, ":distance", pos1, pos2),
					(le, ":distance", ":minimum_distance"),
					(assign, ":minimum_distance", ":distance"),
					(assign, ":victim", ":suspect"),
				(try_end),
				(ge, ":victim", 0),
				(agent_get_horse, ":horse", ":victim"),
				(eq, ":horse", -1),
				(store_random_in_range, ":rand", 15, 26),
		    	(agent_set_slot, ":agent", sp_agent_shield_bash_timer, ":rand"), #20 is 20*0.25=5seconds.
				(agent_set_animation, ":agent", "anim_shield_bash"),
				(agent_get_troop_id, ":troop", ":agent"),
				(troop_get_type, ":type", ":troop"),
				(try_begin),
				    (eq, ":type", tf_male),
					(agent_play_sound, ":agent", "snd_man_yell"),
				(else_try),
				    (eq, ":type", tf_female),
					(agent_play_sound, ":agent", "snd_woman_yell"),
				(try_end),
				(agent_play_sound, ":victim", "snd_wooden_hit_low_armor_high_damage"),
				(agent_get_defend_action, ":action", ":victim"),
				(try_begin),
				    (eq, ":action", 2), #Blocking.
					(neg|position_is_behind_position, pos1, pos2), #If basher isn't behind victim.
					(agent_get_wielded_item, ":item", ":victim", 1), #Offhand.
		        	(gt, ":item", 0),
					(item_get_type, ":type", ":item"),
					(eq, ":type", itp_type_shield),
					(agent_set_animation, ":victim", "anim_shield_bash"),
				(else_try),
				    (agent_set_animation, ":victim", "anim_shield_strike"),
				(try_end),					
			(try_end),
			(agent_get_slot, ":timer", ":agent", sp_agent_shield_bash_timer),
			(val_sub, ":timer", 1),
			(val_max, ":timer", 0),
			(agent_set_slot, ":agent", sp_agent_shield_bash_timer, ":timer"),
		(try_end),
	])


I'll pay you or anyoone else can upload the right module_mission template ...LOL
 
JC LEON 说:
1- where must i put the fisrt piece of code i module_missions_template?

that goes at the beginning

JC LEON 说:
2 - when you taolk about the triggers...

these are triggers

插入代码块:
sp_shield_bash_1 = (
   0, 0, 0,
   [
       (eq, "$sp_shield_bash", 1),
        (game_key_is_down, gk_defend),
        (game_key_clicked, gk_attack),
   ],
   [
       (get_player_agent_no, ":agent"),
      (agent_is_active, ":agent"),
      (agent_is_alive, ":agent"),
      (neg|agent_slot_ge, ":agent", sp_agent_shield_bash_timer, 1), #Less than.
      (agent_get_wielded_item, ":item", ":agent", 1), #Offhand.
      (gt, ":item", 0),
      (item_get_type, ":type", ":item"),
      (eq, ":type", itp_type_shield), #Shield equipped.
      (agent_get_defend_action, ":action", ":agent"),
      (eq, ":action", 2), #Blocking.
      (agent_get_horse, ":horse", ":agent"),
      (eq, ":horse", -1), #No horse.
      (agent_set_slot, ":agent", sp_agent_shield_bash_timer, 5),
      (agent_set_animation, ":agent", "anim_shield_bash"),
      (agent_get_troop_id, ":troop", ":agent"),
      (troop_get_type, ":type", ":troop"),
      (try_begin),
          (eq, ":type", tf_male),
         (agent_play_sound, ":agent", "snd_man_yell"),
      (else_try),
          (eq, ":type", tf_female),
         (agent_play_sound, ":agent", "snd_woman_yell"),
      (try_end),
      (agent_get_position, pos1, ":agent"),
      (assign, ":victim", -1),
      (assign, ":minimum_distance", 150),
      (try_for_agents, ":suspect"),
          (agent_is_alive, ":suspect"),
         (agent_is_human, ":suspect"),
         (neg|agent_is_ally, ":suspect"),
         (agent_get_position, pos2, ":suspect"),
         (neg|position_is_behind_position, pos2, pos1), #Suspect can't be behind basher.
         (get_distance_between_positions, ":distance", pos1, pos2),
         (le, ":distance", ":minimum_distance"),
         (assign, ":minimum_distance", ":distance"),
         (assign, ":victim", ":suspect"),
      (try_end),
      (ge, ":victim", 0),
      (agent_play_sound, ":victim", "snd_wooden_hit_low_armor_high_damage"),
      (agent_get_defend_action, ":action", ":victim"),
      (try_begin),
          (eq, ":action", 2), #Blocking.
         (neg|position_is_behind_position, pos1, pos2), #If basher isn't behind victim.
         (agent_get_wielded_item, ":item", ":victim", 1), #Offhand.
         (gt, ":item", 0),
         (item_get_type, ":type", ":item"),
         (eq, ":type", itp_type_shield),
         (agent_set_animation, ":victim", "anim_shield_bash"),
      (else_try),
          (agent_set_animation, ":victim", "anim_shield_strike"),
      (try_end),      
   ])
sp_shield_bash_2 = (
   1, 0, 0, [(eq, "$sp_shield_bash", 1)],
   [
       (get_player_agent_no, ":agent"),
      (agent_is_active, ":agent"),
      (agent_is_alive, ":agent"),
      (agent_get_slot, ":timer", ":agent", sp_agent_shield_bash_timer),
      (val_sub, ":timer", 1),
      (val_max, ":timer", 0),
      (agent_set_slot, ":agent", sp_agent_shield_bash_timer, ":timer"),
   ])
sp_shield_bash_3 = (
   0.25, 0, 0, [(eq, "$sp_shield_bash_ai", 1)],
   [
       (get_player_agent_no, ":player_agent"),
       (try_for_agents, ":agent"),
          (neq, ":agent", ":player_agent"),
          (agent_is_alive, ":agent"),
         (agent_is_human, ":agent"),
         (try_begin),
             (neg|agent_slot_ge, ":agent", sp_agent_shield_bash_timer, 1), #Less than.
            (agent_slot_eq, ":agent", slot_agent_is_running_away, 0), #Isn't routing.
             (agent_get_wielded_item, ":item", ":agent", 1), #Offhand.
            (gt, ":item", 0),
             (item_get_type, ":type", ":item"),
             (eq, ":type", itp_type_shield), #Shield equipped.
             (agent_get_attack_action, ":action", ":agent"),
             (eq, ":action", 0), #Free.
             (agent_get_horse, ":horse", ":agent"),
             (eq, ":horse", -1), #No horse.
            (agent_get_team, ":team", ":agent"),
            (agent_get_position, pos1, ":agent"),
            (assign, ":victim", -1),
            (assign, ":minimum_distance", 125),
            (try_for_agents, ":suspect"),
                (agent_is_alive, ":suspect"),
               (agent_is_human, ":suspect"),
               (agent_get_position, pos2, ":suspect"),
               (neg|position_is_behind_position, pos2, pos1), #Suspect can't be behind basher.
               (agent_get_team, ":suspect_team", ":suspect"),
               (neq, ":suspect_team", ":team"),
               (get_distance_between_positions, ":distance", pos1, pos2),
               (le, ":distance", ":minimum_distance"),
               (assign, ":minimum_distance", ":distance"),
               (assign, ":victim", ":suspect"),
            (try_end),
            (ge, ":victim", 0),
            (agent_get_horse, ":horse", ":victim"),
            (eq, ":horse", -1),
            (store_random_in_range, ":rand", 15, 26),
             (agent_set_slot, ":agent", sp_agent_shield_bash_timer, ":rand"), #20 is 20*0.25=5seconds.
            (agent_set_animation, ":agent", "anim_shield_bash"),
            (agent_get_troop_id, ":troop", ":agent"),
            (troop_get_type, ":type", ":troop"),
            (try_begin),
                (eq, ":type", tf_male),
               (agent_play_sound, ":agent", "snd_man_yell"),
            (else_try),
                (eq, ":type", tf_female),
               (agent_play_sound, ":agent", "snd_woman_yell"),
            (try_end),
            (agent_play_sound, ":victim", "snd_wooden_hit_low_armor_high_damage"),
            (agent_get_defend_action, ":action", ":victim"),
            (try_begin),
                (eq, ":action", 2), #Blocking.
               (neg|position_is_behind_position, pos1, pos2), #If basher isn't behind victim.
               (agent_get_wielded_item, ":item", ":victim", 1), #Offhand.
                 (gt, ":item", 0),
               (item_get_type, ":type", ":item"),
               (eq, ":type", itp_type_shield),
               (agent_set_animation, ":victim", "anim_shield_bash"),
            (else_try),
                (agent_set_animation, ":victim", "anim_shield_strike"),
            (try_end),               
         (try_end),
         (agent_get_slot, ":timer", ":agent", sp_agent_shield_bash_timer),
         (val_sub, ":timer", 1),
         (val_max, ":timer", 0),
         (agent_set_slot, ":agent", sp_agent_shield_bash_timer, ":timer"),
      (try_end),
   ])

but you do not have to add this code to every mission template if you put this
sp_shield_bash_1,
sp_shield_bash_2,
sp_shield_bash_3,
these will call the triggers and act as if the trigger is there
 
doesnt work
i made as you told to me and inserted the first piace of code at the begginning of the module_mission_template

after that i searched for the " quick-battle" missioon template and at lines 7797,7798 and 7799 i inserted the 

sp_shield_bash_1,
sp_shield_bash_2,
sp_shield_bash_3,

save and when compile i get this as shown in the picture attached


http://postimg.org/image/4bupbkomj/


MAYBE SOLVED

added

(assign, "$sp_shield_bash", 1),
(assign, "$sp_shield_bash_ai", 1),

to the module_script.py  and now compile works without any error..amn without any warnning..
but to see if all works fine which mission templatemust i choose to test the quick custom battle to see if the shield bash works fine??

 
Start new game and Go fight some looters. Then you should be able to bash.

EDIT: quick or custom battle?
custom battles allow you to choose what you wish to fight
quick battles randomly throw you in somewhere
 
your probably best off adding this

插入代码块:
sp_shield_bash_1,
sp_shield_bash_2,
sp_shield_bash_3,

to all your mission templates.
 
tried insert i my mission template minus multiplayer templates.. all works fine..

only issue is that animation sucks..is there a way i can use other and better animations??
 
JC LEON 说:
only issue is that animation sucks..is there a way i can use other and better animations??

It is possible to make new animations but I'm no expert at that.
 
后退
顶部 底部