============================================================================================
==(Мой инструктаж для новичков! Добавления долгожданного удара щитом в ВАРБАНДУ версия 1.134)==== ===================================================================================
Товарищи! Начну с того что у меня трагедия, трА-ге-ди-яя! Я увы запорол себе модульку и забыл за копить откомпилиные исходники!!!

Я полез до прописывать типы локации ( Мол разрешить удар в вилейдже, центре города ну и так далие по типам...)
и ведать пока до прописывал на сонную голову, на шушарил что-то не то со скобками или кусок скрипта где то упустил оставил без-хозно висеть не там...
В общем найду время обновлю модульку сделаю по новой и в принципе есть вся уверенность что модулька заработает...
Но хочу поспешить успокоить новичков что тутр кажись правельный но не протестированный на 100процентов мне по ходу событий придётся по своему же инструктажу всё переписывать, себе же в мод и перепроверять достоверно ли то что написал. но это у меня боюсь не скоро получится время не найти пока..
Как всё от тестирую в туторе своём утвержу инфу на верняка!
Ну и надеюсь что мне помогут подправить мой кривой не пофикшенный тутр знающие, обитающие тут люди.
Плохо то что я в игре скрипт не успел протэстить, возможно я что-то упустил. По мелочи Но больше уверен что всё правильно написал, хоть и не без маленьких сомнений которые отметил в этом жирном посте..
В общем у меня просьба к знающим людям ПРОВЕРЬТЕ ПОЗЯЗЯ хоть частично мой инструктаж!
Может что то упустил или не так отметил!!! 
Ну чаво уж спрашивается тянуть, вникайте в мой быть может криво переведённый но супер подробный и что самое удобное для новичков наглядный тутр..
П.С. Вчера дописывал его уже на очень сонную голову, по этому могут встречаться жуткие ошибки и опечатки сильно не злитесь я его потом перепроверю... Так сказать гномика почистию и буду корЭктиравать в процессе...
===================================================================== ==============================
То что пурпурным цветом выделено это то что нужно добавить!!!
Красным отмечаю некоторые моменты требующие внимания...
==================================================================================================
=======================================================================================================
=======================================================================
Момент-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 =
466anim_shield_strike =
467 Так же не забудте проверить порядковость ИД номеров ( выделеных красным чють выше ), они должны идти по порядку собственно!
Добавлено: [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 ) (
Сингал плеер!!! )=========================
=================================================================================
Это пожалуй самый гемаройныйный фаил который мне больше всего крови попил.. Ну кроме того суда ещё замаешся коды для разрешения удара в сингле на карты добавлять (Если быть точнее то если разделить карты на типы , будет что то вроде: Центр города, Битва в городе, арена, центр деревни, улица, улица битва, логово бандитов...Ну и в таком духе, типы лакаций ( не каждая локация персонально ( Ну нетипо Хрюнвальд и Швуйнервиль какой нибудь) а типы локаций как деревня , замок и бла бла бал... В общем все поняли обжевал со всех сторон уже

)
Что бы не мелочиться уж совсем скудностью моих познаний даю вам некоторый список локаций который с копил с поста 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" тут как мне кажется не все типы сингла но их львиная доля...
В процессе я попробую вам и себе( за одно) обьяснить как опознать не достающие типы, если такие есть ещё..
Ну в общем начну от первостепенно важного к самому муторному но далеко не фатальному....

На англицком форуме есть два скрипта 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)===(
Мульти плеер )====================
================================================================================
Мультиплеерный скрипт как я понел добовляется так же... НО разумеется к мультиплеерным типам карт

Надо как то себе да и вобще сообразить какие типы из всех возможных мультиплеерные..
Я их для себя пока не точно отделяю тем что у них в общем коде мелькают словечки типо мультиплеер и всё такое

Выеснить это в полне реально но ещё не очень сообразил как..
Как мне думается мультиплеер стоит начать искать с самого конца фаила module_mission_templates.py
И вписывать его обсалютно так же как и сингл просто типы нужны мультиплеерные смотреть нуу к примеру
найти тип карты к примеру
ТИМ дед-чматч .
И наченая искать с конца (module_mission_templates.py) поднимаясь чуть выше можно выследить названия типа карты с его названием на англицком.
По всё той же строчке
(ti_before_mission_start, 0, 0, [],
Дабавлять МУльти скрипт надо как я понел так же на строчку выше неё....
(Если кто то знает названия мультиплеерных типов на англицком дайте пож список для удобства сюда вклинить )..
Не уверен но если не ставить русик то помойму названия типа игры в мультеплеере будут говорить сами за себя если я всё правельно понел..
Кто знает пазязя скажите что я прав или не прав. На поиски и тесты пока время неочень много а куча всяких самнений по разным поводам и так терзают будь сдаров как грится
У меня откомпилировалось в первый раз провелённая операция но в игре я не проверял что у меня получилось не успел до того как загадил сбебе какойто из фаилов питона.. Ошибки я ещё не выявил но как время будет выявлю.. ТАк что уважаймые госпада знающие прошу помочь подфиксить если где что напутал или что то упустил!!! ==================================================================================================
(Так же меня мучают пытливые вопросы отдельные чисто больше для себя...
Почему скрипт Мультиплеера так прилично меньше Сингла..

? )
И можно ли вообще у типа карты сделать что бы он юзался как Синглом так и МУльти плеером?
Если да то можно было бы скрипт удара щитом_SP добавить через запятуюю какую нибудь ещё и удара щитом_MP ?????
Вобщем возможно ли ТИП карты сделать для МУЛЬТА и СИНГЛА и что бы удар щитом при этом пахал на этом универсальном типе ?
=================================================================================================
Ну и в заключении ещё раз скажу что свой тутор я конечно хотел бы ещё доработать и надеюсь на помощь знающих людей!