Хотел установить удар щитом для варбанда вот код ("cf_agent_shield_bash",
[(store_script_param, ":agent",1),
(agent_get_position,pos1,":agent"),
(agent_set_animation, ":agent", "anim_release_bash"),
(agent_play_sound,":agent","snd_man_grunt"),
(assign,":victim",-1),
(try_for_agents,":possible_victim"),
(agent_is_alive,":possible_victim"),
(agent_is_human,":possible_victim"),
(neq,":possible_victim",":agent"),
(agent_get_class ,":class", ":possible_victim"),
(neq,":class",grc_cavalry),
(agent_get_position,pos2,":possible_victim"),
(get_distance_between_positions,":dist",pos1,pos2),
(lt,":dist",150),
(neg|position_is_behind_position,pos2,pos1),
(assign,":victim",":possible_victim"),
(end_try),
(gt,":victim",-1),
(store_random_in_range,":rand",0,2),
(store_agent_hit_points,":hp",":victim",1),
(val_sub,":hp",":rand"),
(store_random_in_range,":hit_reaction",1,101),
(store_skill_level,":a_shield",skl_shield,":victim"),
(store_skill_level,":v_shield",skl_shield,":agent"),
(try_begin),
(gt,":hp",0),
(agent_set_hit_points,":victim",":hp",1),
(agent_play_sound,":agent","snd_shield_hit_wood_wood"),
(agent_play_sound,":victim","snd_blunt_hit"),
(try_begin),
(gt,":a_shield", ":v_shield"),
(try_begin),
(is_between,":hit_reaction",0,10),
(agent_set_animation, ":victim", "anim_bash_unsuccessful"),
(else_try),
(is_between,":hit_reaction",11,20),
(agent_set_animation, ":victim", "anim_bash_crouch"),
(else_try),
(is_between,":hit_reaction",21,30),
(agent_set_animation, ":victim", "anim_bash_mini_stun"),
(else_try),
(is_between,":hit_reaction",21,79),
(agent_set_animation, ":victim", "anim_bash_stun"),
(else_try),
(is_between,":hit_reaction",80,100),
(agent_set_animation, ":victim", "anim_bash_knocked"),
(end_try),
(else_try),
(lt,":a_shield", ":v_shield"),
(try_begin),
(is_between,":hit_reaction",0,20),
(agent_set_animation, ":victim", "anim_bash_unsuccessful"),
(else_try),
(is_between,":hit_reaction",21,42),
(agent_set_animation, ":victim", "anim_bash_crouch"),
(else_try),
(is_between,":hit_reaction",43,65),
(agent_set_animation, ":victim", "anim_bash_mini_stun"),
(else_try),
(is_between,":hit_reaction",66,92),
(agent_set_animation, ":victim", "anim_bash_stun"),
(else_try),
(is_between,":hit_reaction",93,100),
(agent_set_animation, ":victim", "anim_bash_knocked"),
(end_try),
(else_try),
(eq,":a_shield", ":v_shield"),
(try_begin),
(is_between,":hit_reaction",0,16),
(agent_set_animation, ":victim", "anim_bash_unsuccessful"),
(else_try),
(is_between,":hit_reaction",17,33),
(agent_set_animation, ":victim", "anim_bash_crouch"),
(else_try),
(is_between,":hit_reaction",34,50),
(agent_set_animation, ":victim", "anim_bash_mini_stun"),
(else_try),
(is_between,":hit_reaction",51,89),
(agent_set_animation, ":victim", "anim_bash_stun"),
(else_try),
(is_between,":hit_reaction",90,100),
(agent_set_animation, ":victim", "anim_bash_knocked"),
(end_try),
(end_try),
(else_try),
(agent_play_sound,":agent","snd_shield_hit_wood_wood"),
(agent_play_sound,":victim","snd_blunt_hit"),
(agent_deliver_damage_to_agent,":agent",":victim"),
(end_try),
]),
The following into any applicable mission template:
(ti_before_mission_start, 0, 0, [], [(assign,"$bash_readiness",0)]),
(0.1, 0, 0, [], [(val_add,"$bash_readiness",1),]),
(0, 0, 0, [(game_key_is_down, gk_defend),(game_key_clicked, gk_attack),],
[(assign,":continue",0),
(get_player_agent_no,":player"),
(agent_is_alive,":player"),
(try_for_range,":shield","itm_wooden_shield","itm_heraldic_mail_with_surcoat"),
(agent_has_item_equipped,":player",":shield"),
(assign,":continue",1),
(end_try),
(eq,":continue",1),
(agent_get_horse,":horse",":player"),
(neg|gt,":horse",0),
(ge,"$bash_readiness",10),
(assign,"$bash_readiness",0),
(call_script,"script_cf_agent_shield_bash",":player"),
]),
(1.0, 0, 0, [],
[(get_player_agent_no,":player"),
(try_for_agents,":agent"),
(agent_is_alive,":agent"),
(agent_is_human,":agent"),
(neq,":agent",":player"),
(agent_get_class ,":class", ":agent"),
(neq,":class",grc_cavalry),
(assign,":continue",0),
(try_for_range,":shield","itm_wooden_shield","itm_heraldic_mail_with_surcoat"),
(agent_has_item_equipped,":agent",":shield"),
(assign,":continue",1),
(end_try),
(eq,":continue",1),
(assign,":chances",0),
(agent_get_team,":team",":agent"),
(agent_get_position,pos1,":agent"),
(try_for_agents,":other"),
(agent_is_alive,":other"),
(agent_is_human,":other"),
(agent_get_class ,":class", ":other"),
(neq,":class",grc_cavalry),
(agent_get_team,":otherteam",":other"),
(neq,":team",":otherteam"),
(agent_get_position,pos2,":other"),
(get_distance_between_positions,":dist",pos1,pos2),
(neg|position_is_behind_position,pos2,pos1),
(lt,":dist",200),
(val_add,":chances",1),
(end_try),
(store_agent_hit_points,":health",":agent",0),
(val_mul,":health",-1),
(val_add,":health",100),
(val_div,":health",10),
(val_mul,":chances",":health"),
(store_random_in_range,":rand",1,25),
(lt,":rand",":chances"),
(call_script,"script_cf_agent_shield_bash",":agent"),
(end_try),]),
And the following into module animations (note that these must be pasted over unused animations, not at the end of the file):
# strike_fall_back_rise_after_bashed
["bash_knocked", acf_enforce_all|acf_align_with_ground,
[2.0, "anim_human", blow+5400, blow+5453, arf_blend_in_2],
],
# strike_chest_front_stop
["bash_stun", acf_enforce_all,
[1.5, "anim_human", blow+5000, blow+5010, arf_blend_in_3],
],
# strike_chest_front_stop
["bash_mini_stun", acf_enforce_all,
[0.6, "anim_human", blow+5000, blow+5010, arf_blend_in_3],
],
# anim jump end
["bash_crouch", acf_enforce_all|acf_enforce_lowerbody,
[0.5, "anim_human", 280, 290, arf_blend_in_3],
],
# strike_head_front_left
["bash_unsuccessful", acf_enforce_all,
[0.55, "anim_human", blow+0, blow+10, arf_blend_in_3],
],
["release_bash", acf_enforce_all|acf_right_cut|acf_parallels_for_look_slope,
[0.62, "anim_human", combat+5710, combat+5740, blend_in_release],
],
но когда етот код вставил то модулька выдает ошибки,в чем дело? может есть какой то другой код для удара щитом? :blink:
опять нечего нету когда в городе нажимаю удар щитом не появился...
(
"town_center",0,-1,
"Default town visit",
[(0,mtef_scene_source|mtef_team_0,af_override_horse,0,1,pilgrim_disguise),
(1,mtef_scene_source|mtef_team_0,0,0,1,[]),
(2,mtef_scene_source|mtef_team_0,af_override_horse,0,1,pilgrim_disguise),
(3,mtef_scene_source|mtef_team_0,af_override_horse,0,1,pilgrim_disguise),
(4,mtef_scene_source|mtef_team_0,af_override_horse,0,1,pilgrim_disguise),
(5,mtef_scene_source|mtef_team_0,af_override_horse,0,1,pilgrim_disguise),
(6,mtef_scene_source|mtef_team_0,af_override_horse,0,1,pilgrim_disguise),
(7,mtef_scene_source|mtef_team_0,af_override_horse,0,1,pilgrim_disguise),
(8,mtef_visitor_source,af_override_horse,0,1,[]),
(9,mtef_visitor_source,af_override_horse,0,1,[]),(10,mtef_visitor_source,af_override_horse,0,1,[]),(11,mtef_visitor_source,af_override_horse,0,1,[]),(12,mtef_visitor_source,af_override_horse,0,1,[]),(13,mtef_visitor_source,0,0,1,[]),(14,mtef_scene_source,0,0,1,[]),(15,mtef_scene_source,0,0,1,[]),
(16,mtef_visitor_source,af_override_horse,0,1,[]),(17,mtef_visitor_source,af_override_horse,0,1,[]),(18,mtef_visitor_source,af_override_horse,0,1,[]),(19,mtef_visitor_source,af_override_horse,0,1,[]),(20,mtef_visitor_source,af_override_horse,0,1,[]),(21,mtef_visitor_source,af_override_horse,0,1,[]),(22,mtef_visitor_source,af_override_horse,0,1,[]),
(23,mtef_visitor_source,af_override_horse,0,1,[]), #guard
(24,mtef_visitor_source,af_override_horse,0,1,[]), #guard
(25,mtef_visitor_source,af_override_horse,0,1,[]), #guard
(26,mtef_visitor_source,af_override_horse,0,1,[]), #guard
(27,mtef_visitor_source,af_override_horse,0,1,[]), #guard
(28,mtef_visitor_source,af_override_horse,0,1,[]), #guard
(29,mtef_visitor_source,af_override_horse,0,1,[]),
(30,mtef_visitor_source,af_override_horse,0,1,[]),
(31,mtef_visitor_source,af_override_horse,0,1,[]),
(32,mtef_visitor_source,af_override_horse,0,1,[]),
(33,mtef_visitor_source,af_override_horse,0,1,[]),
(34,mtef_visitor_source,af_override_horse,0,1,[]),
(35,mtef_visitor_source,af_override_horse,0,1,[]),
(36,mtef_visitor_source,af_override_horse,0,1,[]), #town walker point
(37,mtef_visitor_source,af_override_horse,0,1,[]), #town walker point
(38,mtef_visitor_source,af_override_horse,0,1,[]),
(39,mtef_visitor_source,af_override_horse,0,1,[]),
(40,mtef_visitor_source|mtef_team_1,af_override_horse,aif_start_alarmed,1,[]), #in towns, can be used for guard reinforcements
(41,mtef_visitor_source|mtef_team_1,af_override_horse,aif_start_alarmed,1,[]), #in towns, can be used for guard reinforcements
(42,mtef_visitor_source|mtef_team_1,af_override_horse,aif_start_alarmed,1,[]), #in towns, can be used for guard reinforcements
(43,mtef_visitor_source|mtef_team_1,af_override_horse,aif_start_alarmed,1,[]), #in towns, can be used for guard reinforcements
(44,mtef_visitor_source|mtef_team_1,af_override_horse,aif_start_alarmed,1,[]),
(45,mtef_visitor_source|mtef_team_1,af_override_horse,aif_start_alarmed,1,[]),
(46,mtef_visitor_source|mtef_team_1,af_override_horse,aif_start_alarmed,1,[]),
(47,mtef_visitor_source|mtef_team_1,af_override_horse,aif_start_alarmed,1,[]),
],
[
(ti_on_agent_spawn, 0, 0, [],
[
(store_trigger_param_1, ":agent_no"),
(call_script, "script_init_town_agent", ":agent_no"),
(try_begin),
(this_or_next|eq, "$talk_context", tc_escape),
(eq, "$talk_context", tc_prison_break),
(agent_get_troop_id, ":troop_no", ":agent_no"),
(troop_slot_eq, ":troop_no", slot_troop_will_join_prison_break, 1),
(agent_set_team, ":agent_no", 0),
(agent_ai_set_aggressiveness, ":agent_no", 5),
(troop_set_slot, ":troop_no", slot_troop_will_join_prison_break, 0),
(try_begin),
(troop_slot_eq, ":troop_no", slot_troop_mission_participation, mp_prison_break_stand_back),
(agent_get_position, pos1, ":agent_no"),
(agent_set_scripted_destination, ":agent_no", pos1),
(try_end),
(try_end),
]),
(ti_before_mission_start, 0, 0, [],
[
(assign, "$g_main_attacker_agent", 0),
]),
second_shield_bash_triger,
shield_bash_triger,
first_shield_bash_triger,
third_shield_bash_triger,
before_start_shield_bash_triger,
(1, 0, ti_once,
попробуй за этим кодом [url]http://forums.taleworlds.com/index.php/topic,134163.45.html[/url]
Спасибо за скрипты там всё что надо написано!!! :o
Вот беда в ихнем скрипте для сингла. Мне говорит что, типо синтаксис неправельный указывает на 19цатую строку говорит что не может определить имя ( eq, )
Вобщем питон и модулька ругаются на этот момент каторый я в представленом ими скрипте выделил красным.
################################################
## 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),
])
Блиинский что там может быть не так? Помогите пожалуйсто! Я джва года хотел такую игру :(
Вроде всё прописал как надо помойму ошибка в скрипте. Скобки запятые все раставил по примеру др скриптов и так и эдок...
Скрипт прописал в самом конце, скобку такую оставил в низу ]
И ещё мне не очень понятно что с идешником делать на скрипты там имя должно быть как то так или как то вообще по другому вот несколько вариантов ?
1) script_sp_shield_bash = 565
2) script_sp_shield_bash_1 = 565
3) script_$sp_shield_bash = 565
Я так понял что вариант номер один правельный..
Или вообще нечего не правильно .. :(
Добавлено: 08 Марта, 2011, 08:24
Народ помогите пожалуйста скрипт подправить module_mission_templates!
На концовку ругается я много чего там подфиксил уже вроде весь код отфиксил..
Всю ноч сидел как проклятый карпел :cry: Там на все начальные скобки и = мне переругалась модулька.. :laught :o
Ну там на паследнюю строчку сингла плеерского скрипта ругается говорит что не правельно заканчиваю синтаксис вобщем ругается либо на скобки либо на
(try_end),
]),
Я там в скрипте отметил красным кужа ругается посмотрите пожалуйсто! :cry:
################################################
## 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_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),
]),
#####
#Add these following triggers to module_mission_templates.py,
#above all other code. Then simply add:
#mp_shield_bash_1,
#mp_shield_bash_2,
#To your mission templates to activate the triggers.
(
"mp_shield_bash_1" (
0, 0, 0,
[
#Get player input for shield bash.
(game_key_is_down, gk_defend),
(game_key_clicked, gk_attack),
],
[
#If input is given, then initialize a bash.
(multiplayer_send_message_to_server, rpw_shield_bash_server),
]),),
(
"mp_shield_bash_2" (
2.5, 0, 0, [],
[
#Update each players shield bash timer.
#Do this every 2.5 seconds for optimization issues.
(multiplayer_is_server),
(get_max_players, ":max"),
(try_for_range, ":player", 0, ":max"),
(player_is_active, ":player"),
(player_get_slot, ":value", ":player", rpw_shield_bash_timer),
(val_sub, ":value", 1),
(val_max, ":value", 0),
(player_set_slot, ":player", rpw_shield_bash_timer, ":value"),
(try_end),
] ),),
]
И скажите пожалуйсто. Я правельно сделал что все коды на копи-пастил в самые низы ? ( Один миникод там говорят в Старт меню надо вставить в самом начале... Я не очень понел где именно в самом самом или после старт менюшки как то прижевить ? )
Там как бы 3 скрипта и я не очень могу понять, почему их по инструкции надо пихать в modul_mission_templates.py а не в module_scripts.py ? =/
Идэшники iD_mission_templates.py прописал вот так
mst_sp_shield_bash_triggers = 49 ( Тут 3 в одном скрипте как я понел по этому когда объеденил их в один. больше не ругалось )
mst_mp_shield_bash_1 = 50
mst_mp_shield_bash_2 = 51
Делал по инструкции с сылки высланой bodya http://forums.taleworlds.com/index.php/topic,134163.45.html
bodya спасибо за сылку это лучше чем нечего!
Но не мог бы ты написать хотя бы как ты скрипт modul_mission_templates.py которые я мучаю вписал себе чтоб работало?
Напиши пожалуйсто очень баш шилд хочется :(
Ато скрипты они вроди как выложели.. Но там ошибка на ошибке почемуто..... :o
============================================================================================
==(Мой инструктаж для новичков! Добавления долгожданного удара щитом в ВАРБАНДУ версия 1.134)==== ===================================================================================
Товарищи! Начну с того что у меня трагедия, трА-ге-ди-яя! Я увы запорол себе модульку и забыл за копить откомпилиные исходники!!! :(
Я полез до прописывать типы локации ( Мол разрешить удар в вилейдже, центре города ну и так далие по типам...)
и ведать пока до прописывал на сонную голову, на шушарил что-то не то со скобками или кусок скрипта где то упустил оставил без-хозно висеть не там...
В общем найду время обновлю модульку сделаю по новой и в принципе есть вся уверенность что модулька заработает...
Но хочу поспешить успокоить новичков что тутр кажись правельный но не протестированный на 100процентов мне по ходу событий придётся по своему же инструктажу всё переписывать, себе же в мод и перепроверять достоверно ли то что написал. но это у меня боюсь не скоро получится время не найти пока..
Как всё от тестирую в туторе своём утвержу инфу на верняка!
Ну и надеюсь что мне помогут подправить мой кривой не пофикшенный тутр знающие, обитающие тут люди.
Плохо то что я в игре скрипт не успел протэстить, возможно я что-то упустил. По мелочи Но больше уверен что всё правильно написал, хоть и не без маленьких сомнений которые отметил в этом жирном посте..
В общем у меня просьба к знающим людям ПРОВЕРЬТЕ ПОЗЯЗЯ хоть частично мой инструктаж!
Может что то упустил или не так отметил!!! :o
Ну чаво уж спрашивается тянуть, вникайте в мой быть может криво переведённый но супер подробный и что самое удобное для новичков наглядный тутр..
П.С. Вчера дописывал его уже на очень сонную голову, по этому могут встречаться жуткие ошибки и опечатки сильно не злитесь я его потом перепроверю... Так сказать гномика почистию и буду корЭктиравать в процессе...
===================================================================== ==============================
То что пурпурным цветом выделено это то что нужно добавить!!!
Красным отмечаю некоторые моменты требующие внимания...
==================================================================================================
=======================================================================================================
=======================================================================
Момент-1==========( module_scripts.py ) добавление номер1=========================================
========================================================================
(В самом начале найти строчку #script_game_start: вставить после этой строчки
("game_start",
[
scripts = [
#script_game_start:
# This script is called when a new game is started
# INPUT: none
("game_start",
[
(assign, "$sp_shield_bash", 1),
(assign, "$sp_shield_bash_ai", 1),
(faction_set_slot, "fac_player_supporters_faction", slot_faction_state, sfs_inactive),
(assign, "$g_player_luck", 200),
(assign, "$g_player_luck", 200),
(troop_set_slot, "trp_player", slot_troop_occupation, slto_kingdom_hero),
(store_random_in_range, ":starting_training_ground", training_grounds_begin, training_grounds_end),
(party_relocate_near_party, "p_main_party", ":starting_training_ground", 3),
(str_store_troop_name, s5, "trp_player"),
(party_set_name, "p_main_party", s5),
(call_script, "script_update_party_creation_random_limits"),
(assign, "$g_player_party_icon", -1),
========================================================================
Момент-2 Всё в том же module_scripts.py добавление номер 2
==========================================================================
###############
#SERVER EVENTS#
###############
(eq, ":event_type", multiplayer_event_set_item_selection),
(store_script_param, ":slot_no", 3),
(store_script_param, ":value", 4),
(try_begin),
###########################MP_start################################
То что зелёным выделил я так понел надо заменить на такую же или удалить одну из них...
(try_begin),
(eq, ":event_type", rpw_shield_bash_server),
#Get sender data & max players.
(player_is_active, ":player_no"),
(player_get_agent_id, ":agent_no", ":player_no"),
(agent_is_active, ":agent_no"),
(get_max_players, ":max_players"),
#Check if the sender is in the correct condition.
(neg|player_slot_ge, ":player_no", rpw_shield_bash_timer, 1), #Less than.
(agent_get_wielded_item, ":shield", ":agent_no", 1), #Offhand item.
(this_or_next|is_between, ":shield", "itm_roman_shield_square", "itm_roman_shield_end"),
(is_between, ":shield", "itm_gallic_shield_1", "itm_gallic_shield_end"),
(agent_get_defend_action, ":action", ":agent_no"),
(eq, ":action", 2), #Blocking.
(agent_get_horse, ":horse", ":agent_no"),
(eq, ":horse", -1), #No horse.
#If everything is correct, then set the sender agent up for bash.
(player_set_slot, ":player_no", rpw_shield_bash_timer, 2), #Actually is 2*2.5=5seconds.
(agent_set_animation, ":agent_no", "anim_shield_bash"),
(agent_get_troop_id, ":troop_no", ":agent_no"),
(troop_get_type, ":type_no", ":troop_no"),
(try_begin),
(eq, ":type_no", tf_male),
(try_for_range, ":player", 0, ":max_players"),
(player_is_active, ":player"),
(multiplayer_send_2_int_to_player, ":player", rpw_agent_play_sound_client, ":agent_no", "snd_man_yell"),
(try_end),
(else_try),
(eq, ":type_no", tf_female),
(try_for_range, ":player", 0, ":max_players"),
(player_is_active, ":player"),
(multiplayer_send_2_int_to_player, ":player", rpw_agent_play_sound_client, ":agent_no", "snd_woman_yell"),
(try_end),
(try_end),
###########################MP_end#################################################
#Bash. Get the closest agent within 100cm~1m.
(agent_get_position, pos1, ":agent_no"),
(assign, ":minimum_distance", 150),
(assign, ":victim", -1),
(try_for_agents, ":suspect"),
(neq, ":suspect", ":agent_no"), #Suspect can't be our local agent.
(agent_is_active, ":suspect"),
(agent_is_alive, ":suspect"),
(agent_is_human, ":suspect"),
=======================================================================
===============( module_animations.py )=========================================
========================================================================
найдите строчку:
["unused_human_anim_14", 0, 0, [1.0, "anim_human", 0, 1, 0]]
И вместо этой строчки вставьте вот это
["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],
],
Затем вместо строчки
["unused_human_anim_15", 0, 0, [1.0, "anim_human", 0, 1, 0]]
Вставте это :
["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],
],
-------------------------------------------------------------------------------------
Если 14-тый слот или 15-тый или хоть 20-тый ( номер выделенный красным)
Если любой из них.. Занет то спакойно не волнуясь можите занять любой слейдуйщий под свою аниму .
====================================================================
Наглядный пример( пурпурным цветом выделено то что надо вписать в используймый вами слот!) === ========================================================================
["equip_bayonet", 0, amf_priority_equip|amf_play|amf_restart|amf_client_prediction,
[1.0, "anim_human", 0, 1, 0]],
## [0.8, "equip_arms", 253, 276, arf_blend_in_0]],
["unequip_bayonet", 0, amf_priority_equip|amf_play|amf_restart|amf_client_prediction,
[1.0, "anim_human", 0, 1, 0]],
["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],
],
["unused_human_anim_16", 0, 0, [1.0, "anim_human", 0, 1, 0]],
["unused_human_anim_17", 0, 0, [1.0, "anim_human", 0, 1, 0]],
======================================================================
=======================================================================
===============( ID_animations.py )=========================================
========================================================================
Теперь не забудте подправить ИД-шник для своих слотов!
Ищим строчки :
anim_unused_human_anim_14 = 466
и
anim_unused_human_anim_15 = 467
Красным в данный момент отмечаю номер ваших слотов.
После, вместо зелёного, вставте названия своих новых названий анимации.. в данном случае переименуйте две строчки Из..
anim_unused_human_anim_14 = 466
anim_unused_human_anim_15 = 467
В...
anim_shield_bash = 466
anim_shield_strike = 467
Так же не забудте проверить порядковость ИД номеров ( выделеных красным чють выше ), они должны идти по порядку собственно! :D
Добавлено: [time]11 Март, 2011, 05:00:00 [/time]
===============================================================================================
=========================( header_common.py )=======================================================
Тут надо найти строчку #server events
И затем в низу этих эвентов добавить две строчки... Я не очень понел в каком исполнение просто появились сомнения...
Либо так
multiplayer_event_rpw_shield_bash_server = 150
multiplayer_event_rpw_agent_play_sound_client = 151
Либо так
multiplayer_event_shield_bash_server = 150
multiplayer_event_agent_play_sound_client = 151
Ну скорее всего просто именно вот-так мне думается...
rpw_shield_bash_server = 150
rpw_agent_play_sound_client = 151
---------------------------------------------------------------------------------------------------------------------------------------------
----Ну и сам наглядный пример как приживить код в header_common.py то что пурпурное то вписываем себе в модульку-----------
------------------------------------------------------------------------------------------------------------------------------------------
#server events
multiplayer_event_return_max_num_players = 50
multiplayer_event_return_num_bots_in_team = 51
multiplayer_event_return_friendly_fire = 52
multiplayer_event_return_ghost_mode = 53
multiplayer_event_return_control_block_dir = 54
multiplayer_event_return_combat_speed = 55
multiplayer_event_return_add_to_servers_list = 56
multiplayer_event_return_respawn_period = 57
multiplayer_event_return_game_max_minutes = 58
multiplayer_event_return_round_max_seconds = 59
multiplayer_event_return_game_max_points = 60
multiplayer_event_return_point_gained_from_flags = 61
multiplayer_event_return_point_gained_from_capturing_flag = 62
multiplayer_event_return_server_name = 63
multiplayer_event_return_game_password = 64
multiplayer_event_return_game_type = 65
multiplayer_event_return_confirmation = 66
multiplayer_event_return_rejection = 67
multiplayer_event_show_multiplayer_message = 68
multiplayer_event_draw_this_round = 69
multiplayer_event_set_attached_scene_prop = 70
multiplayer_event_set_team_flag_situation = 71
multiplayer_event_set_team_score = 72
multiplayer_event_set_num_agents_around_flag = 73
multiplayer_event_ask_for_poll = 74
multiplayer_event_change_flag_owner = 75
multiplayer_event_use_item = 76
multiplayer_event_set_scene_prop_open_or_close = 77
multiplayer_event_set_round_start_time = 78
multiplayer_event_force_start_team_selection = 79
multiplayer_event_start_death_mode = 80
multiplayer_event_return_num_bots_voteable = 81
multiplayer_event_return_factions_voteable = 82
multiplayer_event_return_maps_voteable = 83
multiplayer_event_return_next_team_faction = 84
multiplayer_event_return_player_respawn_as_bot = 85
multiplayer_event_set_player_score_kill_death = 86
multiplayer_event_set_day_time = 87
multiplayer_event_return_respawn_count = 88
multiplayer_event_return_player_respawn_spent = 89
multiplayer_event_return_kick_voteable = 90
multiplayer_event_return_ban_voteable = 91
multiplayer_event_return_valid_vote_ratio = 92
multiplayer_event_return_auto_team_balance_limit = 93
multiplayer_event_return_initial_gold_multiplier = 94
multiplayer_event_return_battle_earnings_multiplier = 95
multiplayer_event_return_round_earnings_multiplier = 96
multiplayer_event_return_renaming_server_allowed = 97
multiplayer_event_return_changing_game_type_allowed = 98
multiplayer_event_return_melee_friendly_fire = 99
multiplayer_event_return_friendly_fire_damage_self_ratio = 100
multiplayer_event_return_friendly_fire_damage_friend_ratio = 101
multiplayer_event_return_allow_player_banners = 102
multiplayer_event_return_force_default_armor = 103
multiplayer_event_return_anti_cheat = 104
multiplayer_event_return_open_game_rules = 105
multiplayer_event_return_max_num_bots = 106
multiplayer_event_return_server_mission_timer_while_player_joined = 107
multiplayer_event_show_duel_request = 108
multiplayer_event_start_duel = 109
multiplayer_event_cancel_duel = 110
multiplayer_event_show_server_message = 111
multiplayer_event_return_disallow_ranged_weapons = 112
rpw_shield_bash_server = 150
rpw_agent_play_sound_client = 151
===========================================================================================
=============================( module_constants.py )==============================================
============================================================================================
Ну тут тоже давольно просто, но есть моменты сомнения . Как я понел нужно найти строчки agent slots и затем player slots они будут окружены крсной решотой для их бездействия.
Вот англицкий инструктаж на всякий .
#####
#This goes into module_constants.py, agent slots.
#sp_agent_shield_bash_timer = 50
#####
#This goes into module_constants.py, player slots.
#rpw_shield_bash_timer = 50
Маленькие сомнения есть в том что нужно или нет делать приписку slot_agent_ как у соседних верхних строк... Ну как я понел приписка агент слот ненужна.. те кто знают наверняка поправте если я не прав. )
---------------------------------------------Пример 1------------------------------------------------------
########################################################
## AGENT SLOTS ######################################
########################################################
slot_agent_target_entry_point = 0
slot_agent_target_x_pos = 1
slot_agent_target_y_pos = 2
slot_agent_is_alive_before_retreat= 3
slot_agent_is_in_scripted_mode = 4
slot_agent_is_not_reinforcement = 5
slot_agent_tournament_point = 6
slot_agent_arena_team_set = 7
slot_agent_spawn_entry_point = 8
slot_agent_target_prop_instance = 9
slot_agent_map_overlay_id = 10
slot_agent_target_entry_point = 11
slot_agent_initial_ally_power = 12
slot_agent_initial_enemy_power = 13
slot_agent_enemy_threat = 14
slot_agent_is_running_away = 15
slot_agent_courage_score = 16
slot_agent_is_respawn_as_bot = 17
slot_agent_cur_animation = 18
slot_agent_next_action_time = 19
slot_agent_state = 20
slot_agent_in_duel_with = 21
slot_agent_duel_start_time = 22
slot_agent_walker_occupation = 25
sp_agent_shield_bash_timer = 50
########################################################
## FACTION SLOTS #############################
########################################################
slot_faction_ai_state = 4
slot_faction_ai_object = 5
slot_faction_ai_rationale = 6 #Currently unused, can be linked to strings generated from decision checklists
====================================================================================
########################################################
## PLAYER SLOTS #############################
########################################################
slot_player_spawned_this_round = 0
slot_player_last_rounds_used_item_earnings = 1
slot_player_selected_item_indices_begin = 2
slot_player_selected_item_indices_end = 11
slot_player_cur_selected_item_indices_begin = slot_player_selected_item_indices_end
slot_player_cur_selected_item_indices_end = slot_player_selected_item_indices_end + 9
slot_player_join_time = 21
slot_player_button_index = 22 #used for presentations
slot_player_can_answer_poll = 23
slot_player_first_spawn = 24
slot_player_spawned_at_siege_round = 25
slot_player_poll_disabled_until_time = 26
slot_player_total_equipment_value = 27
slot_player_last_team_select_time = 28
slot_player_death_pos_x = 29
slot_player_death_pos_y = 30
slot_player_death_pos_z = 31
slot_player_damage_given_to_target_1 = 32 #used only in destroy mod
slot_player_damage_given_to_target_2 = 33 #used only in destroy mod
slot_player_last_bot_count = 34
slot_player_bot_type_1_wanted = 35
slot_player_bot_type_2_wanted = 36
slot_player_bot_type_3_wanted = 37
slot_player_bot_type_4_wanted = 38
slot_player_spawn_count = 39
rpw_shield_bash_timer = 50
########################################################
## TEAM SLOTS #######################################
########################################################
slot_team_flag_situation = 0
======================================================================================
==================( module_mission_templates.py ) ( Сингал плеер!!! )=========================
=================================================================================
Это пожалуй самый гемаройныйный фаил который мне больше всего крови попил.. Ну кроме того суда ещё замаешся коды для разрешения удара в сингле на карты добавлять (Если быть точнее то если разделить карты на типы , будет что то вроде: Центр города, Битва в городе, арена, центр деревни, улица, улица битва, логово бандитов...Ну и в таком духе, типы лакаций ( не каждая локация персонально ( Ну нетипо Хрюнвальд и Швуйнервиль какой нибудь) а типы локаций как деревня , замок и бла бла бал... В общем все поняли обжевал со всех сторон уже :D)
Что бы не мелочиться уж совсем скудностью моих познаний даю вам некоторый список локаций который с копил с поста Leon473
"village_center" "back_alley_revolt" "lead_charge" "village_attack_bandits" "village_raid" "bandit_lair" "alley_fight" "besiege_inner_battle_castle" "besiege_inner_battle_town_center" "town_center" тут как мне кажется не все типы сингла но их львиная доля...
В процессе я попробую вам и себе( за одно) обьяснить как опознать не достающие типы, если такие есть ещё..
Ну в общем начну от первостепенно важного к самому муторному но далеко не фатальному.... :D
На англицком форуме есть два скрипта 1-рвый разделён на 3 части ну типо образно говря
sp_shield_bash_1,
sp_shield_bash_2,
sp_shield_bash_3,
А другой является как бы оналогом. Но он типо обьединяет три части скрипта в один...Возможно игра так производительнее его жрать будет вобщем точно не знаю только предпологаю....
Так как тип скрипта номер два был написан позже, то думаю он попродуманей....
[
sp_shield_bash_1,
sp_shield_bash_2,
sp_shield_bash_3,
]
В общем либо 1 либо 2..Я предпачёл скрипт нумер 2 и по примеру покажу как номер2 добавляется... Как мне думается система добавления у них одинаковая.
Вот сами скрипты для сингла в двух видах вам на выбор
(1-скрипт )------------------СП_начало------------------------------------------------------
################################################
## 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),
])
------------------------------СП_конец-----------------------------------------------
2
(2-скрипт )------------- ----СП_начало-----------------------------------------------
#####
#Add these following triggers to module_mission_templates.py,
#above all other code. Then simply add:
#mp_shield_bash_1,
#mp_shield_bash_2,
#To your mission templates to activate the triggers.
mp_shield_bash_1 = (
0, 0, 0,
[
#Get player input for shield bash.
(game_key_is_down, gk_defend),
(game_key_clicked, gk_attack),
],
[
#If input is given, then initialize a bash.
(multiplayer_send_message_to_server, rpw_shield_bash_server),
])
mp_shield_bash_2 = (
2.5, 0, 0, [],
[
#Update each players shield bash timer.
#Do this every 2.5 seconds for optimization issues.
(multiplayer_is_server),
(get_max_players, ":max"),
(try_for_range, ":player", 0, ":max"),
(player_is_active, ":player"),
(player_get_slot, ":value", ":player", rpw_shield_bash_timer),
(val_sub, ":value", 1),
(val_max, ":value", 0),
(player_set_slot, ":player", rpw_shield_bash_timer, ":value"),
(try_end),
])
------------------------------СП_конец----------------------------------------------
===================================================================================
============( добавление ТИПА во всё тот же module_mission_templates.py)=========================================
=======================================================================================
(Место вставки скрипта выделено синим это не скрипт а маленькая условность чтоб виднее было. Вместо неё дабавляйте скрипт во всей его велечине и красоте, сам скрипт размещю ниже пример.
Так же чуть ниже идёт красная строчка она как я понел есть у всех типов карт... выше красной строчки то и надо добавлять скрипт. Типо разрешение применения эвентового баша щитом
==============================================================================
=====Пример доьбавления пурпурный цвет и есть тот когд который надо вписывать не забывайте остальное стандартные коды====
============================================================================================
"village_training", mtf_arena_fight, -1,
"village_training",
[(2,mtef_visitor_source|mtef_team_0,af_override_everything,aif_start_alarmed,1,[itm_practice_staff, itm_practice_boots]),
(4,mtef_visitor_source|mtef_team_1,af_override_everything,aif_start_alarmed,1,[itm_practice_staff, itm_practice_boots]),
],
[
sp_shield_bash_1,
sp_shield_bash_2,
sp_shield_bash_3,
(ti_before_mission_start, 0, 0, [],
[
(assign, "$g_train_peasants_against_bandits_training_succeeded", 0),
(call_script, "script_change_banners_and_chest"),
]),
common_arena_fight_tab_press,
(ti_question_answered, 0, 0, [],
[
(store_trigger_param_1,":answer"),
(eq,":answer",0),
(finish_mission),
]),
common_inventory_not_available,
(1, 4, ti_once,
[
(this_or_next|main_hero_fallen),
(num_active_teams_le, 1)
],
[
(try_begin),
(neg|main_hero_fallen),
(assign, "$g_train_peasants_against_bandits_training_succeeded", 1),
(try_end),
(finish_mission),
]),
],
),
==================================================================================
===========(module_mission_templates.py)===( Мульти плеер )====================
================================================================================
Мультиплеерный скрипт как я понел добовляется так же... НО разумеется к мультиплеерным типам карт :-\
Надо как то себе да и вобще сообразить какие типы из всех возможных мультиплеерные..
Я их для себя пока не точно отделяю тем что у них в общем коде мелькают словечки типо мультиплеер и всё такое :D
Выеснить это в полне реально но ещё не очень сообразил как..
Как мне думается мультиплеер стоит начать искать с самого конца фаила module_mission_templates.py
И вписывать его обсалютно так же как и сингл просто типы нужны мультиплеерные смотреть нуу к примеру
найти тип карты к примеру ТИМ дед-чматч .
И наченая искать с конца (module_mission_templates.py) поднимаясь чуть выше можно выследить названия типа карты с его названием на англицком.
По всё той же строчке
(ti_before_mission_start, 0, 0, [],
Дабавлять МУльти скрипт надо как я понел так же на строчку выше неё....
(Если кто то знает названия мультиплеерных типов на англицком дайте пож список для удобства сюда вклинить )..
Не уверен но если не ставить русик то помойму названия типа игры в мультеплеере будут говорить сами за себя если я всё правельно понел..
Кто знает пазязя скажите что я прав или не прав. На поиски и тесты пока время неочень много а куча всяких самнений по разным поводам и так терзают будь сдаров как грится =/
У меня откомпилировалось в первый раз провелённая операция но в игре я не проверял что у меня получилось не успел до того как загадил сбебе какойто из фаилов питона.. Ошибки я ещё не выявил но как время будет выявлю.. ТАк что уважаймые госпада знающие прошу помочь подфиксить если где что напутал или что то упустил!!!
==================================================================================================
(Так же меня мучают пытливые вопросы отдельные чисто больше для себя...
Почему скрипт Мультиплеера так прилично меньше Сингла.. :blink:? )
И можно ли вообще у типа карты сделать что бы он юзался как Синглом так и МУльти плеером?
Если да то можно было бы скрипт удара щитом_SP добавить через запятуюю какую нибудь ещё и удара щитом_MP ?????
Вобщем возможно ли ТИП карты сделать для МУЛЬТА и СИНГЛА и что бы удар щитом при этом пахал на этом универсальном типе ?
=================================================================================================
Ну и в заключении ещё раз скажу что свой тутор я конечно хотел бы ещё доработать и надеюсь на помощь знающих людей!
зажми правую кнопку мыши и нажми на левую :)
Добавлено: [time]20 Март, 2011, 11:26:14 [/time]
Удар щитом
По просьбе Петрона решил сделать туоритл по установке удара щитом,в общем приступаем
module_mission_templates.pysp_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),
])
и тут же в module_mission_templates вставляем ниже представлений код,этот код нужно вставить на всех сценах,ну если хотите протестировать только то вставьте под town center,под кодом есть пример
sp_shield_bash_1,
sp_shield_bash_2,
sp_shield_bash_3,
вот пример:
(
"town_center",0,-1,
"Default town visit",
[(0,mtef_scene_source|mtef_team_0,af_override_horse,0,1,pilgrim_disguise),
(1,mtef_scene_source|mtef_team_0,0,0,1,[]),
(2,mtef_scene_source|mtef_team_0,af_override_horse,0,1,pilgrim_disguise),
(3,mtef_scene_source|mtef_team_0,af_override_horse,0,1,pilgrim_disguise),
(4,mtef_scene_source|mtef_team_0,af_override_horse,0,1,pilgrim_disguise),
(5,mtef_scene_source|mtef_team_0,af_override_horse,0,1,pilgrim_disguise),
(6,mtef_scene_source|mtef_team_0,af_override_horse,0,1,pilgrim_disguise),
(7,mtef_scene_source|mtef_team_0,af_override_horse,0,1,pilgrim_disguise),
(8,mtef_visitor_source,af_override_horse,0,1,[]),
(9,mtef_visitor_source,af_override_horse,0,1,[]),(10,mtef_visitor_source,af_override_horse,0,1,[]),(11,mtef_visitor_source,af_override_horse,0,1,[]),(12,mtef_visitor_source,af_override_horse,0,1,[]),(13,mtef_visitor_source,0,0,1,[]),(14,mtef_scene_source,0,0,1,[]),(15,mtef_scene_source,0,0,1,[]),
(16,mtef_visitor_source,af_override_horse,0,1,[]),(17,mtef_visitor_source,af_override_horse,0,1,[]),(18,mtef_visitor_source,af_override_horse,0,1,[]),(19,mtef_visitor_source,af_override_horse,0,1,[]),(20,mtef_visitor_source,af_override_horse,0,1,[]),(21,mtef_visitor_source,af_override_horse,0,1,[]),(22,mtef_visitor_source,af_override_horse,0,1,[]),
(23,mtef_visitor_source,af_override_horse,0,1,[]), #guard
(24,mtef_visitor_source,af_override_horse,0,1,[]), #guard
(25,mtef_visitor_source,af_override_horse,0,1,[]), #guard
(26,mtef_visitor_source,af_override_horse,0,1,[]), #guard
(27,mtef_visitor_source,af_override_horse,0,1,[]), #guard
(28,mtef_visitor_source,af_override_horse,0,1,[]), #guard
(29,mtef_visitor_source,af_override_horse,0,1,[]),
(30,mtef_visitor_source,af_override_horse,0,1,[]),
(31,mtef_visitor_source,af_override_horse,0,1,[]),
(32,mtef_visitor_source,af_override_horse,0,1,[]),
(33,mtef_visitor_source,af_override_horse,0,1,[]),
(34,mtef_visitor_source,af_override_horse,0,1,[]),
(35,mtef_visitor_source,af_override_horse,0,1,[]),
(36,mtef_visitor_source,af_override_horse,0,1,[]), #town walker point
(37,mtef_visitor_source,af_override_horse,0,1,[]), #town walker point
(38,mtef_visitor_source,af_override_horse,0,1,[]),
(39,mtef_visitor_source,af_override_horse,0,1,[]),
(40,mtef_visitor_source|mtef_team_1,af_override_horse,aif_start_alarmed,1,[]), #in towns, can be used for guard reinforcements
(41,mtef_visitor_source|mtef_team_1,af_override_horse,aif_start_alarmed,1,[]), #in towns, can be used for guard reinforcements
(42,mtef_visitor_source|mtef_team_1,af_override_horse,aif_start_alarmed,1,[]), #in towns, can be used for guard reinforcements
(43,mtef_visitor_source|mtef_team_1,af_override_horse,aif_start_alarmed,1,[]), #in towns, can be used for guard reinforcements
(44,mtef_visitor_source|mtef_team_1,af_override_horse,aif_start_alarmed,1,[]),
(45,mtef_visitor_source|mtef_team_1,af_override_horse,aif_start_alarmed,1,[]),
(46,mtef_visitor_source|mtef_team_1,af_override_horse,aif_start_alarmed,1,[]),
(47,mtef_visitor_source|mtef_team_1,af_override_horse,aif_start_alarmed,1,[]),
],
[
sp_shield_bash_1,
sp_shield_bash_2,
sp_shield_bash_3,
идем дальше:
module_animations.py["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],
],
одну строфу из этого кода вставляем например вместо этого ["unused_human_anim_15", 0, 0, [1.0, "anim_human", 0, 1, 0]],
и так проделать с отставшими строфами.
откриваем module_constants.py и вставляем это
sp_agent_shield_bash_timer = 50
все установка закончена, теперь дважды нажимаем build_module и если все прошло без ошибок заходим в игру потом в город если вы установили только в городе,зажимаем правую кнопку мыши затем нажимаем левую кнопку мыши,радуемся рабочему удару щитом. :)
:D товарищи, благодарю за попытку сделать доброе дело, но мне (простому смертному) ничерта непонятно из ваших обьяснений.
сам факт того, что это уже неизвестно какое по счету обьяснение свидетельствует не в пользу вышеизложенного. неужели нельзя продемонстрировать все "с чувством, с толком, с расстановкой"? прошу, уважаемые, пишите конкретно, если берёте на себя такую ответственность растолковывать что к чему:
1) что вставить?
2) куда вставить?
3) пример результата изменений.
иначе полный "деребас" для чайников ;)
я вот например не внял куды именно в module_mission_templates.py пихать вот ето
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),
])
Блинский!
У меня в туторе всё это уже гараздо подробнее расписано а что вставлять после какой строчки ?
У тебя таже условность что и на ингл форуме... :o
Токо на ингл форуме там хоть коментируют что куда примерно пихать ..
Покажи пож только куски стандартного кода плюс то что добавил отдельным цветом выдели ( Напиши пож только 2 примера по module_mission_templates Сингл и мультиплеер а дальше если у тебя времени нет я сам могу всем растолковать подробно что и куда во всех подробностях если у тебя времени нету..)
---------------------------------------------------------------------------------------------------------
----------(Скопируй прямо кусок из модульки своей пример с Синглом и мульти))-----------------
-----------(Пример как хотелось бы увидеть)-------------------------------------------------------
------------------------------------------------------------------------------------------------------------
бла-бла-бла.. типо старый скрипт, видно какая строчка и мол после неё не теряя всех нужных запятых скобок типо бац и
бла-бла-бла код по синглу цветной что бы отличался от строчек стандартного кода.
и тут бла-бла-бал немножко продолжения стандартного кода тот что после добавленного скрипта идти должен..
------------------------------------------------------------------------------------------------------------------------
Тогда все будет просто и яснее некуда .. Я потом если надо будет всё до разжую и благодарны тебе все будут.
я всего лишь из твоего туортла взял лишние...
и во вторых у меня другая модулька,но шяс дам кусок
common_battle_victory_display = (
10, 0, 0, [],
[
(eq,"$g_battle_won",1),
(display_message,"str_msg_battle_won"),
])
common_siege_refill_ammo = (
120, 0, 0, [],
[#refill ammo of defenders every two minutes.
(get_player_agent_no, ":player_agent"),
(try_for_agents,":cur_agent"),
(neq, ":cur_agent", ":player_agent"),
(agent_is_alive, ":cur_agent"),
(agent_is_human, ":cur_agent"),
## (agent_is_defender, ":cur_agent"),
(agent_get_team, ":agent_team", ":cur_agent"),
(this_or_next|eq, ":agent_team", "$defender_team"),
(eq, ":agent_team", "$defender_team_2"),
(agent_refill_ammo, ":cur_agent"),
## CC reset it to 0
(agent_set_slot, ":cur_agent", slot_agent_refill_ammo_times, 0),
## CC
(try_end),
])
common_siege_check_defeat_condition = (
1, 4,
##diplomacy begin
0,
##diplomacy end
[
(main_hero_fallen)
],
[
##diplomacy begin
(try_begin),
(eq, "$g_dplmc_battle_continuation", 0),
(assign, ":num_allies", 0),
(try_for_agents, ":agent"),
(agent_is_ally, ":agent"),
(agent_is_alive, ":agent"),
(val_add, ":num_allies", 1),
(try_end),
(gt, ":num_allies", 0),
(try_begin),
(eq, "$g_dplmc_cam_activated", 0),
#(store_mission_timer_a, "$g_dplmc_main_hero_fallen_seconds"),
(assign, "$g_dplmc_cam_activated", 1),
(display_message, "@You have been knocked out by the enemy. Watch your men continue the fight without you or press Tab to retreat."),
(display_message, "@To watch the fight you can use 'w, a, s, d, numpad_+/numpad_-' to move and 'numpad_1,2,3,4,6,8' to rotate the cam."),
(try_end),
(else_try),
##diplomacy end
(assign, "$pin_player_fallen", 1),
(get_player_agent_no, ":player_agent"),
(agent_get_team, ":agent_team", ":player_agent"),
(try_begin),
(neq, "$attacker_team", ":agent_team"),
(neq, "$attacker_team_2", ":agent_team"),
(str_store_string, s5, "str_siege_continues"),
(call_script, "script_simulate_retreat", 8, 15, 0),
(else_try),
(str_store_string, s5, "str_retreat"),
(call_script, "script_simulate_retreat", 5, 20, 0),
(try_end),
(assign, "$g_battle_result", -1),
(set_mission_result,-1),
(call_script, "script_count_mission_casualties_from_agents"),
(finish_mission,0),
##diplomacy begin
(try_end),
##diplomacy end
])
[color=red]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),
])
[/color]
## CC
common_battle_order_panel =(
0, 0, ti_once, [],
[
(game_key_clicked, gk_view_orders),
##diplomacy begin
(neg|main_hero_fallen),
##diplomacy end
(neg|is_presentation_active, "prsnt_mini_map"),
(start_presentation, "prsnt_mini_map"),
])
common_battle_order_panel_tick = (
0, 0, 0, [],
[
(try_begin),
(neg|is_presentation_active, "prsnt_battle"),
(neg|is_presentation_active, "prsnt_mini_map"),
(start_presentation, "prsnt_mini_map"),
(try_end),
(try_begin),
(is_presentation_active, "prsnt_battle"),
(call_script, "script_update_order_panel_statistics_and_map"),
(else_try),
(is_presentation_active, "prsnt_mini_map"),
(call_script, "script_update_agent_hp_bar"),
(eq, "$g_show_minimap", 1),
(call_script, "script_update_order_panel_map"),
(try_end),
])
## CC
Добавлено: 20 Марта, 2011, 17:15
Покажи пож только куски стандартного кода плюс то что добавил отдельным цветом выдели
а цветом почему то уже не возможно выделить...