Skrypt dodający walki na morzu, kupowanie statków w miastach by Mirathei, James, Ruthven, MartinF, Jubal, Dudro i LumosNajpierw musimy rzecz jasna pobrać sceny tych walk i umieścić je w SceneObject w folderze z naszym modem.
Link do scen:
http://www.mbrepository.com/file.php?id=2258Teraz możemy zająć się podpinaniem scen do module systemu. Przechodzimy do module_scenes.py i dodajemy ten kod na końcu pliku, lecz nie pod nawiasem kwadratowym:
#Wulf begin
("sea_1",sf_generate,"none", "none", (0,0),(240,240),-0.5,"0x0000000030000000c00d23480000000080000 00000000000",
[],[]),
("sea_4",sf_generate,"none", "none", (0,0),(240,240),-0.5,"0x0000000030000000c00d23480000000080000 00000000000",
[],[]),
("sea_2",sf_generate,"none", "none", (0,0),(240,240),-0.5,"0x0000000030000000c00d23480000000080000 00000000000",
[],[]),
#Wulf end
Teraz zajmiemy się kupowaniem statków. Przechodzimy do module_game_menus.py. Wyszukujemy "sail_from_port". Usuwamy cały kod, który się nam ukazał i zamieniamy go na ten:
#Wulf begin
("sail_from_port",[(this_or_next|eq,"$current_town","p_town_1"),
(this_or_next|eq,"$current_town","p_town_2"),
(this_or_next|eq,"$current_town","p_town_6"),
(this_or_next|eq,"$current_town","p_town_12"),
(this_or_next|eq,"$current_town","p_town_19"),
(this_or_next|eq,"$current_town","p_town_13"),
(eq,"$current_town","p_town_15"),
# (eq, "$cheat_mode", 1),
# (party_slot_eq,"$current_town",slot_town_near_shore, 1),
], "Buy a ship (5000 denars)",
[(store_troop_gold,":money","trp_player"),
(try_begin),
(ge,":money",5000),
(troop_remove_gold,"trp_player",5000),
(assign, "$g_player_icon_state", pis_ship),
(party_set_flags, "p_main_party", pf_is_ship, 1),
(party_get_position, pos1, "p_main_party"),
(map_get_water_position_around_position, pos2, pos1, 6),
(party_set_position, "p_main_party", pos2),
(assign, "$g_main_ship_party", -1),
(change_screen_return),
(else_try),
(display_message,"@You don't have enough money"),
(try_end),
]),
#Wulf end
Teraz dla waszej wygody przeprowadzę analizę części kodu (tak, wiem, że bawię się w Kolbę):
"Buy a ship (5000 denars)", - jest to opcja, która będzie się wyświetlała w miastach przy morzu (można to spolszczyć, lecz nie wolno używać polskich znaków, chyba, że zmienisz kodowanie)
(ge,":money",5000), - określa ile hajsu potrzebujemy, aby kupić statek
"trp_player",5000), - określa ile hajsu nam odbierze, jeśli kupimy statek
Teraz zajmiemy się walkami z innymi statkami. Dalej (w module_game_menus.py) szukamy "encounter_attack", usuwamy ten kod i zastępujemy go tym:
("encounter_attack",[
(eq, "$encountered_party_friendly", 0),
(neg|troop_is_wounded, "trp_player"),
#Wulf
(party_get_current_terrain,":terrain","p_main_party"),
(neq,":terrain",0),
#Wulf end
],
"Charge the enemy.",[
(assign, "$g_battle_result", 0),
(assign, "$g_engaged_enemy", 1),
(call_script, "script_calculate_renown_value"),
(call_script, "script_calculate_battle_advantage"),
(set_battle_advantage, reg0),
(set_party_battle_mode),
(try_begin),
(eq, "$g_encounter_type", enctype_fighting_against_village_raid),
(assign, "$g_village_raid_evil", 0),
(set_jump_mission,"mt_village_raid"),
(party_get_slot, ":scene_to_use", "$g_encounter_is_in_village", slot_castle_exterior),
(jump_to_scene, ":scene_to_use"),
(else_try),
(eq, "$g_encounter_type", enctype_catched_during_village_raid),
(assign, "$g_village_raid_evil", 0),
(set_jump_mission,"mt_village_raid"),
(party_get_slot, ":scene_to_use", "$g_encounter_is_in_village", slot_castle_exterior),
(jump_to_scene, ":scene_to_use"),
(else_try),
(set_jump_mission,"mt_lead_charge"),
(call_script, "script_setup_random_scene"),
(try_end),
(assign, "$g_next_menu", "mnu_simple_encounter"),
(jump_to_menu, "mnu_battle_debrief"),
(change_screen_mission),
]),
("encounter_attack",[
(eq, "$encountered_party_friendly", 0),
(neg|troop_is_wounded, "trp_player"),
#Wulf
(party_get_current_terrain,":terrain","p_main_party"),
(eq,":terrain",0),
#Wulf end
],
"Close in and board the enemy.",[
(assign, "$g_battle_result", 0),
(assign, "$g_engaged_enemy", 1),
(call_script, "script_calculate_renown_value"),
(call_script, "script_calculate_battle_advantage"),
(set_battle_advantage, reg0),
(set_party_battle_mode),
(try_begin),
(eq, "$g_encounter_type", enctype_fighting_against_village_raid),
(assign, "$g_village_raid_evil", 0),
(set_jump_mission,"mt_village_raid"),
(party_get_slot, ":scene_to_use", "$g_encounter_is_in_village", slot_castle_exterior),
(jump_to_scene, ":scene_to_use"),
(else_try),
(eq, "$g_encounter_type", enctype_catched_during_village_raid),
(assign, "$g_village_raid_evil", 0),
(set_jump_mission,"mt_village_raid"),
(party_get_slot, ":scene_to_use", "$g_encounter_is_in_village", slot_castle_exterior),
(jump_to_scene, ":scene_to_use"),
(else_try),
#Wulf
(set_jump_mission,"mt_ship_battle"),
(try_begin),
(val_add,reg10,reg11),
(gt,reg10,60),
(jump_to_scene, "scn_sea_4"),
(else_try),
(val_add,reg10,reg11),
(gt,reg10,30),
(jump_to_scene, "scn_sea_2"),
(else_try),
(jump_to_scene, "scn_sea_1"),
(end_try),
#Wulf end
(try_end),
(assign, "$g_next_menu", "mnu_simple_encounter"),
(jump_to_menu, "mnu_battle_debrief"),
(change_screen_mission),
]),
Czas zająć się dołączaniem do walki. Szukamy "join_attack", usuwamy i zastępujemy tym kodem:
("join_attack",[(party_get_current_terrain,":terrain","p_main_party"),
(neq,":terrain",0),
# (neq, "$encountered_party_hostile", 0),
(neg|troop_is_wounded, "trp_player"),
## (store_troop_health,reg(5),"trp_player"),
## (ge,reg(5),20),
],
"Charge the enemy.",[
(party_set_next_battle_simulation_time, "$g_encountered_party", -1),
(assign, "$g_battle_result", 0),
(call_script, "script_calculate_renown_value"),
(call_script, "script_calculate_battle_advantage"),
(set_battle_advantage, reg0),
(set_party_battle_mode),
(set_jump_mission,"mt_lead_charge"),
(call_script, "script_setup_random_scene"),
(assign, "$g_next_menu", "mnu_join_battle"),
(jump_to_menu, "mnu_battle_debrief"),
(change_screen_mission),
]),
("join_attack",[(party_get_current_terrain,":terrain","p_main_party"),
(eq,":terrain",0),
# (neq, "$encountered_party_hostile", 0),
(neg|troop_is_wounded, "trp_player"),
## (store_troop_health,reg(5),"trp_player"),
## (ge,reg(5),20),
],
"Board the enemy",[
(party_set_next_battle_simulation_time, "$g_encountered_party", -1),
(assign, "$g_battle_result", 0),
(call_script, "script_calculate_renown_value"),
(call_script, "script_calculate_battle_advantage"),
(set_battle_advantage, reg0),
(set_party_battle_mode),
(set_jump_mission,"mt_ship_battle"),
(try_begin),
(val_add,reg10,reg11),
(gt,reg10,60),
(jump_to_scene, "scn_sea_4"),
(else_try),
(val_add,reg10,reg11),
(gt,reg10,30),
(jump_to_scene, "scn_sea_2"),
(else_try),
(jump_to_scene, "scn_sea_1"),
(end_try),
(assign, "$g_next_menu", "mnu_join_battle"),
(jump_to_menu, "mnu_battle_debrief"),
(change_screen_mission),
]),
Następnie przechodzimy do module_mission_templates.py i dodajemy na końcu pliku ten kod (lecz nie pod nawiasem kwadratowym):
(
"ship_battle",mtf_battle_mode,-1,
"You close in and board the enemy ships",
[(0,mtef_attackers|mtef_team_1,af_override_horse,aif_start_alarmed,4,[]),
(1,mtef_attackers|mtef_team_1,af_override_horse,aif_start_alarmed,4,[]),
(2,mtef_attackers|mtef_team_1,af_override_horse,aif_start_alarmed,4,[]),
(3,mtef_attackers|mtef_team_1,af_override_horse,aif_start_alarmed,4,[]),
(4,mtef_attackers|mtef_team_1,af_override_horse,aif_start_alarmed,4,[]),
(5,mtef_attackers|mtef_team_1,af_override_horse,aif_start_alarmed,4,[]),
(6,mtef_attackers|mtef_team_1,af_override_horse,aif_start_alarmed,4,[]),
(7,mtef_attackers|mtef_team_1,af_override_horse,aif_start_alarmed,4,[]),
(10,mtef_defenders|mtef_team_0,af_override_horse,aif_start_alarmed,4,[]),
(11,mtef_defenders|mtef_team_0,af_override_horse,aif_start_alarmed,4,[]),
(8,mtef_defenders|mtef_team_0,af_override_horse,aif_start_alarmed,4,[]),
(9,mtef_defenders|mtef_team_0,af_override_horse,aif_start_alarmed,4,[]),
(12,mtef_defenders|mtef_team_0,af_override_horse,aif_start_alarmed,4,[]),
(13,mtef_defenders|mtef_team_0,af_override_horse,aif_start_alarmed,4,[]),
(14,mtef_defenders|mtef_team_0,af_override_horse,aif_start_alarmed,4,[]),
(15,mtef_defenders|mtef_team_0,af_override_horse,aif_start_alarmed,4,[]),
],
[
(ti_on_agent_spawn, 0, 0, [],
[
(store_trigger_param_1, ":agent_no"),
(call_script, "script_agent_reassign_team", ":agent_no"),
]),
common_battle_init_banner, #sets heraldry on shields and armor
(ti_on_agent_killed_or_wounded, 0, 0, [],
[
(store_trigger_param_1, ":dead_agent_no"),
(store_trigger_param_2, ":killer_agent_no"),
(store_trigger_param_3, ":is_wounded"),
(try_begin),
(ge, ":dead_agent_no", 0),
(neg|agent_is_ally, ":dead_agent_no"),
(agent_is_human, ":dead_agent_no"),
(agent_get_troop_id, ":dead_agent_troop_id", ":dead_agent_no"),
(str_store_troop_name, s6, ":dead_agent_troop_id"),
(assign, reg0, ":dead_agent_no"),
(assign, reg1, ":killer_agent_no"),
(assign, reg2, ":is_wounded"),
(agent_get_team, reg3, ":dead_agent_no"),
#(display_message, "@{!}dead agent no : {reg0} ; killer agent no : {reg1} ; is_wounded : {reg2} ; dead agent team : {reg3} ; {s6} is added"),
(party_add_members, "p_total_enemy_casualties", ":dead_agent_troop_id", 1), #addition_to_p_total_enemy_casualties
(eq, ":is_wounded", 1),
(party_wound_members, "p_total_enemy_casualties", ":dead_agent_troop_id", 1),
(try_end),
]),
(0, 0, ti_once, [], [
(assign,"$g_battle_won",0),
(assign,"$defender_reinforcement_stage",0),
(assign,"$attacker_reinforcement_stage",0),
# (assign,"$g_presentation_battle_active", 0),
(call_script, "script_place_player_banner_near_invento ry"),
(call_script, "script_combat_music_set_situation_with_ culture"),
]),
common_music_situation_update,
common_battle_check_friendly_kills,
(1, 0, 5, [(lt,"$defender_reinforcement_stage",2),
(store_mission_timer_a,":mission_time"),
(ge,":mission_time",10),
(store_normalized_team_count,":num_defenders", 0),
(lt,":num_defenders",6),
# (assign, reg2, ":num_defenders"),
# (display_message,"@num_defenders = {reg2}")
],
[(add_reinforcements_to_entry,0,7),(val_add,"$defender_reinforcement_stage",1)]),
(1, 0, 5, [(lt,"$attacker_reinforcement_stage",2),
(store_mission_timer_a,":mission_time"),
(ge,":mission_time",10),
(store_normalized_team_count,":num_attackers", 1),
(lt,":num_attackers",6),
# (assign, reg2, ":num_attackers"),
# (display_message,"@num_attackers = {reg2}")
],
[(add_reinforcements_to_entry,3,7),(val_add,"$attacker_reinforcement_stage",1)]),
common_battle_check_victory_condition,
common_battle_victory_display,
common_battle_tab_press,
(ti_question_answered, 0, 0, [],
[(store_trigger_param_1,":answer"),
(eq,":answer",0),
(assign, "$pin_player_fallen", 0),
(try_begin),
(store_mission_timer_a, ":elapsed_time"),
(gt, ":elapsed_time", 20),
(str_store_string, s5, "str_retreat"),
(call_script, "script_simulate_retreat", 10, 20, 1),
(try_end),
(call_script, "script_count_mission_casualties_from_ag ents"),
(finish_mission,0),]),
(1, 4, ti_once, [(main_hero_fallen)],
[
(assign, "$pin_player_fallen", 1),
(str_store_string, s5, "str_retreat"),
(call_script, "script_simulate_retreat", 10, 20),
(assign, "$g_battle_result", -1),
(set_mission_result,-1),
(call_script, "script_count_mission_casualties_from_ag ents"),
(finish_mission,0)]),
#Wulf end
],
),
Teraz polecam wam skompilować ms i sprawdzić, czy nie ma błędów.
Jeśli wszystko jest ok, to przechodzimy dalej. Przechodzimy do module_party_templates.py i szukamy małego kodu "sea_raider" i pod tym wklejamy ten:
#wulf
("sea_raiders_ships","Sea Raiders",icon_ship|pf_is_ship|carries_goods(2),0,fac_outlaws,bandit_personality,[(trp_sea_raider,5,50)]),
#wulf end
Teraz dla waszej wygody przeprowadzę analizę części kodu:
"sea_raiders_ships - nazwa kodowa jednostki (w tym przypadku statków korsarzy)
Sea Raiders - nazwa oddziału wyświetlana w grze
5,50 - rozmiar oddziału (od ilu do ilu)
Teraz otwieramy module_parties.py i szukamy "bridge_14" i pod tym wklejamy ten kod:
#Wulf
("ship_raider_spawn_point_1" ,"the_ocean",pf_disabled|pf_is_static, no_menu, pt_none, fac_outlaws,0,ai_bhvr_hold,0,(-5.23,90.26),[(trp_looter,15,0)]),
#Wulf
Kod powyżej spawnuje oddziały korsarzy na statkach pomiędzy Tihr, a Wercheg na morzu. Kumaci skumają jak dodać własne spawny.
Teraz otwieramy module_scripts.py i szukamy kodu "spawn_bandits"i szukamy takiego kodu:
(try_begin),
(store_num_parties_of_template, ":num_parties", "pt_mountain_bandits"),
(lt,":num_parties",18), #was 14 at mount&blade, 18 in warband
(store_random,":spawn_point",num_mountain_bandit_spawn_points),
(val_add,":spawn_point","p_mountain_bandit_spawn_point"),
(set_spawn_radius, 25),
(spawn_around_party,":spawn_point","pt_mountain_bandits"),
(try_end),
Pod (try_end) wklejamy ten kod:
#Wulf
(try_begin),
(store_num_parties_of_template, ":num_parties", "pt_sea_raiders_ships"),
(lt,":num_parties",25),
(store_random,":spawn_point",num_mountain_bandit_spawn_points),
(val_add,":spawn_point","p_ship_raider_spawn_point_1"),
(spawn_around_party,":spawn_point","pt_sea_raiders_ships"),
(try_end),
#Wulf end
Zapisujemy, kompilujemy i cieszymy się, jeśli wszystko zrobiliśmy dobrze ;)
Będę się starał odpowiadać na wasze pytania, oraz proszę moderatora o dodanie linku do tej wiadomości w poście Kolby, aby wszyscy go zauważyli. Z góry dziękuję :D