SCRIPTS PARA EL MOUNT&BLADE (MODULE SYSTEM)
Elaborado hace mucho tiempo por: Lope de Rojas.
Antes de nada, comenzaré explicando un poco algunos aspectos del modding para el M&B
¿Puedo modificar el juego?
No solo se puede, si no que deberías modificarlo a tu gusto
Un juego esta hecho para jugarlo, por supuesto, pero sobretodo esta hecho para que disfrutemos con él. Muchas veces echamos en falta ciertos tipos de armas y armaduras, o simplemente nos gustaría que el mapa fuese distinto. Buscamos mods que se ajusten a nuestros gustos, pero tal vez "ese toque" que nos gustaría que tuviese no aparece por ningún lado, o si el mod lo incluye, puede que no tenga otros aspectos de nuestro gusto. Es por esto que no debemos dudar a la hora de incluir elementos al juego, para hacerlo mucho más personal, para darle más emoción, para tener nuevos objetivos por los que luchar (por ejemplo, una armadura chula que cuesta mucho dinero)...
Es por esto que tenemos que dejar el miedo a un lado y atrevernos con las múltiples herramientas que existen para añadir y modificar elementos.
¿Como puedo modificar el juego?
Ahora mismo, existen varias herramientas que permiten al jugador cambiar diversos aspectos del juego. Las más básicas se basan en la modificacion de los archivos *.txt que se hallan en la carpeta del juego, que son:
- MapEditor de Thorgrim: permite modificar el mapa, pudiendo cambiar la geografía, la situación de castillos, pueblos y ciudades...
- ItemEditor: como su nombre indica, sirve para cambiar las características de los objetos del juego.
- TroopEditor: igual que el anterior, sirve para modificar los stats y equipo de todos los personajes, héroes y soldados del juego
También contamos con el Editor in-Game, pero ese requiere una visión más profunda de sus características.
Y por ultimo, para modificar el juego desde la raíz, se utiliza el Module System.
¿Que es el Module System?
El Module System (MS) es un conjunto de archivos en los que se encuentran los códigos que posteriormente generarán los archivos .txt del juego. Por si solos no sirven de nada, por lo que necesitaremos programas como el Python2.6 o el TextPad para modificarlos. Como hacer estos cambios es algo que tratamos en las múltiples guías de modding que existen, y que en las siguientes semanas intentaremos traducir al completo. Existen algunos programas que nos permiten hacer la misma labor, partiendo de archivos en blanco o cargando otros mods. Por poner un ejemplo, el PyME (Pythonic Module Editor).
En este hilo iremos posteando distintos scripts, para utilizarlos con el MS. Algunos son extremadamente complejos y requieren modificaciones en hasta 3 o 4 archivos del MS, y otros son mucho más sencillos de implementar, pues se tratan de meros cambios en dos o tres lineas de código.
Nota:
- Spoiler:
- El bueno de Lope de Rojas habla de un hilo que a fecha de su tutorial existía pero a dia de hoy no y por esto todo lo que el comente lo encontrares en este mismo tema no hay problema,
INDICE:
Refuerzos para los castillos:................................................post 2 (será en este tema)
Llamar al caballo:.........................................................post 3 (será en este tema)
Duelos:........................................................................post 4 (será en este tema)
REFUERZOS
- Spoiler:
- Un código diseñado por Zaitenko
Este código hace que las ciudades y castillos reciban automáticamente refuerzos si sus guarniciones se encuentran debilitadas. Ademas, hace que resulte más realista el aumento de las tropas en dichas fortalezas (¿Quién a visto a un Lord llevando soldados a su castillo?). Los refuerzos aparecerán en las villas y pondrán rumbo a la fortaleza a la que esta unida dicha villa.
Sin embargo, NO funcionará para los feudos del jugador.
¡Comenzamos!
Comenzamos entrando en la carpeta del Module System (los pasos previos para crear la carpeta raiz del mod vienen explicados en el "Tutorial 1 de modding"
Abrimos module_triggers.py (boton derecho -> Edit with IDLE, o TextPad)
Al final del archivo, pero siempre antes del ultimo ] añadimos el siguiente código:
- Código:
(36, 0, 0.0, [], [ ## establece el spawn de refuerzos cada 36 horas, cambiar a nuestro gusto
(try_for_range, ":center", walled_centers_begin, walled_centers_end),
(store_faction_of_party, ":faction", ":center"),
(party_get_num_companions, ":garrison", ":center"),
(faction_get_slot, ":party_template_a", ":faction", slot_faction_reinforcements_a),
(faction_get_slot, ":party_template_b", ":faction", slot_faction_reinforcements_b),
(faction_get_slot, ":party_template_c", ":faction", slot_faction_reinforcements_c),
(assign, ":party_template", 0),
(try_begin),
(party_slot_eq, ":center", slot_party_type, spt_town),
(lt, ":garrison", 200), ## cuando la guarnicion sea menor, vendran refuerzos a la ciudad
(assign, ":party_template", "pt_reinforcements"),
(else_try),
(party_slot_eq, ":center", slot_party_type, spt_castle),
(lt, ":garrison", 70), ## cuando la guarnicion sea menor, vendran refuerzos al castillo
(assign, ":party_template", "pt_reinforcements"),
(try_end),
(try_begin),
(gt, ":party_template", 0),
(try_for_range, ":village_reinforcements", villages_begin, villages_end),
(try_begin),
(party_slot_eq, ":center", slot_party_type, spt_castle), ## para castillos
(party_slot_eq, ":village_reinforcements", slot_village_bound_center, ":center"),
(party_slot_eq, ":village_reinforcements", slot_village_state, svs_normal), ## si la villa es atacada no genera refuerzos
(neg|party_slot_eq, ":center", slot_town_lord, "trp_player"), ## si no pertenece al jugador
(spawn_around_party, ":village_reinforcements", ":party_template"),
(assign, ":result", reg0),
(store_random_in_range, ":rand", 0, 100),
(try_begin),
(is_between, ":rand", 0, 45), ## Selecciona el template mas debil
(party_add_template, ":result", ":party_template_a"),
(else_try),
(is_between, ":rand", 45, 85), ## Selecciona el template mas fuerte
(party_add_template, ":result", ":party_template_b"),
(else_try),
(ge, ":rand", 85), ## Get strongest template
(party_add_template, ":result", ":party_template_c"),
(try_end),
(party_set_faction, ":result", ":faction"),
(party_set_slot, ":result", slot_party_type, spt_reinforcement_party),
(party_set_slot, ":result", slot_party_ai_object, ":center"),
(str_store_party_name, s14, ":village_reinforcements"),
(party_set_name, ":result", "@Reinforcements from {s14}"),
(party_set_ai_behavior,":result",ai_bhvr_travel_to_party),
(party_set_ai_object,":result", ":center"),
(party_set_flags, ":result", pf_default_behavior, 1),
(else_try),
(party_slot_eq, ":center", slot_party_type, spt_town), ## para ciudades
(party_slot_eq, ":village_reinforcements", slot_village_bound_center, ":center"),
(party_slot_eq, ":village_reinforcements", slot_village_state, svs_normal), ## si la villa es atacada no genera refuerzos
(neg|party_slot_eq, ":center", slot_town_lord, "trp_player"), ## si no pertenece al jugador
(spawn_around_party, ":village_reinforcements", ":party_template"),
(assign, ":result", reg0),
(store_random_in_range, ":rand", 0, 100),
(try_begin),
(is_between, ":rand", 0, 45), ## Selecciona el template mas debil
(party_add_template, ":result", ":party_template_a"),
(else_try),
(is_between, ":rand", 40, 85), ## Selecciona el template mas fuerte
(party_add_template, ":result", ":party_template_b"),
(else_try),
(ge, ":rand", 85), ## Get strongest template
(party_add_template, ":result", ":party_template_c"),
(try_end),
(party_set_faction, ":result", ":faction"),
(party_set_slot, ":result", slot_party_type, spt_reinforcement_party),
(party_set_slot, ":result", slot_party_ai_object, ":center"),
(str_store_party_name, s14, ":village_reinforcements"),
(party_set_name, ":result", "@Refuerzos de {s14}"),
(party_set_ai_behavior,":result",ai_bhvr_travel_to_party),
(party_set_ai_object,":result", ":center"),
(party_set_flags, ":result", pf_default_behavior, 1),
(try_end),
(try_end),
(try_end),
(try_end)])
- Código:
(party_get_slot, ":besieged", ":center", slot_center_is_besieged_by),
(neg|ge, ":besieged", 0), #Town/castle is under siege jump out
- Código:
(try_for_range, ":center", walled_centers_begin, walled_centers_end),
Cerramos el archivo y guardamos los cambios.
Ahora abrimos el archivo module_party_templates.py (de la misma forma que antes) y añadimos la siguiente linea justo antes del último ] :
- Código:
("reinforcements","Reinforcements",icon_axeman|pf_show_faction,0,fac_commoners,soldier_personality,[]),
- Código:
spt_reinforcement_party = 14
Ahora tenemos que hacer que los refuerzos se unan a los del castillo o ciudad:
Abrimos module_simple_triggers.py y añadimos lo siguiente después de #Troop AI: Merchants thinking line
- Código:
(0.2, #Every 0.2 game hours will the game check if there are any reinforcements in the centers.
[
(try_for_parties, ":party_no"),
(party_slot_eq, ":party_no", slot_party_type, spt_reinforcement_party), #Find parties of the type spt_reinforcement_party
(party_is_in_any_town, ":party_no"), # Is the party in any town?
(party_get_cur_town, ":cur_center", ":party_no"), #What town are they in?
(call_script, "script_party_add_party_companions", ":cur_center", ":party_no"), #Add the party to the center, which is infact a party;)
(party_clear, ":party_no"), #Not sure if this cleaning up is necessary, but it's a precaution so we don't have a bundle of templates lying around.
(try_end),
]),
- Código:
# Reinforcements
[party_tpl|pt_reinforcements,"start", [(eq,"$talk_context",tc_party_encounter),
(party_get_slot, ":ai_object", "$g_encountered_party", slot_party_ai_object),
(str_store_party_name,s21,":ai_object"),
(str_store_party_name, s20, "$g_encountered_party")],
"Quien va? Somos {s20}.\ Estamos de camino a {s21}.", "reinforcements_intro",[]],
[anyone|plyr, "reinforcements_intro", [], "Mi nombre es {playername}. Solo estoy de paso.", "close_window",[]],
[anyone|plyr, "reinforcements_intro", [], "Mi nombre es {playername}. Y estoy aqui para impedir que llegueis a vuestro destino!.", "reinforcement_hostile",[]],
[party_tpl|pt_reinforcements,"reinforcement_hostile", [(faction_get_slot, ":faction_leader", "$g_encountered_party_faction",slot_faction_leader),
(str_store_troop_name, s9, ":faction_leader"),],
"Como te atreves, estupido!? Estamos bajo la proteccion de {s9}!\ Ten por seguro que se vengara!", "reinforcements_attack",[]],
[anyone|plyr, "reinforcements_attack", [], "No me asusta! Me encargare de el despues de acabar con todos vosotros!", "close_window",[(call_script, "script_make_kingdom_hostile_to_player", "$g_encountered_party_faction", -1),
(encounter_attack,0)]],
[anyone|plyr, "reinforcements_attack", [], "De acuerdo, podeis marchar! Pero no digais a nadie que me habeis visto!", "close_window",[]],
Y ya está. guardad los cambios y compilar el MS, si habeis llevado a cabo estos pasos correctamente no debería dar ningún problema. Si no es así, repetid los pasos y ved cual puede ser el problema. Si aun asi, el problema persiste, preguntad las dudas y trataremos de solucionarlas rápidamente.
Espero que os sea de ayuda!
LLAMAR AL CABALLO
- Spoiler:
- Este es un script creado por The Mercenary
¡Hola amigos, bienvenidos un post más a Moddingmania!
Estamos aquí para saber como podemos hacer que nuestro caballo vuelva si en mitad de una batalla hemos descendido de el, y este ha huido. ¡Un código, fácil, sencillo y para toda la comunidad!
En primer lugar necesitamos unas cosillas para llevar a cabo este trabajo:
El Module System, el código a implementar, un ordenador y ganas de moddear.
Ahora que tenemos todo el equipo necesario, ¡comenzamos!
Abrimos module_mission_templates.py y añadimos esto al final del archivo
- Código:
call_horse_trigger_1 = (0, 0, 3, [(key_clicked, key_m)], [
(get_player_agent_no,":agent"),
(agent_get_horse,":horse",":agent"),
(neg|gt,":horse",0),
(troop_get_slot,":horse",":agent",slot_troop_horse),
(agent_play_sound,":agent","snd_whistle"),
(display_message,"@You whistle for your horse."),
(gt,":horse",0),
(agent_is_alive,":horse"),
(agent_get_position, pos1, ":agent"),
(agent_set_scripted_destination, ":horse", pos1, 0),
])
call_horse_trigger_2 = (0.2, 0, ti_once, [], [
(get_player_agent_no,":agent"),
(agent_get_horse,":horse",":agent"),
(troop_set_slot,":agent",slot_troop_horse,":horse"),
])
- Código:
("whistle",sf_priority_10, ["wisthle.mp3"]),
Ahora, cuando pulsemos la tecla m en una batalla, si hemos desmontado, nuestro caballo volverá donde nosotros como un compañero fiel.
Espero que todos hayáis conseguido hacerlo!
DUELO
- Spoiler:
- Este es un script creado por MartinF
¡Saludos, compañeros de armas (un ratón puede ser mortal si es usado con habilidad)! Por tercera vez consecutiva, os traigo un código que hará las delicias de todos aquellos que les gusten los combates contra personalidades de Calradia. En un coliseo, atestado de personas, todos podrán ver como su querido rey cae bajo vuestra espada, o vuestra lanza, o vuestra maza, o vuestro arco...
A grandes rasgos: Este codigo posibilita al jugador retar a un duelo a todo ser viviente del continente, desde Reyes y Lords hasta el más simple y desconocido recluta de tu ejercito.
Preparamos nuestro Module System... y al Modding!
Abrimos module_constants y copiamos las siguientes lineas:
- Código:
# Duel Mod Troop Slots
slot_troop_duel_won = 142 #duel mod - registra los duelos ganados por el jugador contra cierto soldado
slot_troop_duel_lost = 143 #duel mod - registra los duelos perdidos por el jugador contra cierto soldado
slot_troop_duel_started = 144 #duel mod - confirma si es el primer duelo contra el soldado
# Duel mod constants
king_renown_for_duel = 150 # Minimo renombre para retar a un rey
lord_renown_for_duel = 50 # Minimo renombre para retar a un lord
Abrimos module_dialogs.py y buscamos la linea ### COMPANIONS
Justo encima de esa linea, copiamos el siguiente código:
- Código:
################################################ # Duel Mod Start ################################################
# dialog for companions
[anyone|plyr,"member_question_2", [], "Desearia cruzar mi espada con la vuestra, en la arena...", "duel_accept",[]],
# dialog to challenge regular troops in player party
[anyone|plyr,"regular_member_talk", [], "Luchemos para comparar nuestra habilidad con las armas.", "duel_accept",[]],
# dialog for kings. Renown requirements can be set in the module_constants file.
[anyone|plyr,"lord_talk_ask_something_2",[
(is_between, "$g_talk_troop", kings_begin, kings_end),
(assign, reg(25), 1),
(troop_get_slot, ":player_renown", "trp_player", slot_troop_renown),
(ge, ":player_renown", king_renown_for_duel),
], "My lord, I would like to challenge you to a friendly duel.", "lord_question_duel",[]],
[anyone|plyr,"lord_talk_ask_something_2",[
(is_between, "$g_talk_troop", kings_begin, kings_end),
(troop_get_slot, ":player_renown", "trp_player", slot_troop_renown),
(lt, ":player_renown", king_renown_for_duel),
], "My lord, I would like to challenge you to a friendly duel.", "king_decline_duel",[]],
[anyone, "king_decline_duel", [], "Sera dificil que un rey participe en un duelo contra un simple soldado como vos. Cuando hayais alcanzado la gloria en el campo de batalla, volved aqui y tal vez acepte el reto.", "lord_talk_ask_something_2",[]],
# dialog for lords. Renown requirements can be set in the module_constants file.
[anyone|plyr,"lord_talk_ask_something_2",[
(is_between, "$g_talk_troop", kingdom_heroes_begin, kingdom_heroes_end),
(neq, reg(25), 1), #make sure lord is not a king
(troop_get_slot, ":player_renown", "trp_player", slot_troop_renown),
(ge, ":player_renown", lord_renown_for_duel),
], "Desearia retaros a un duelo amistoso.", "lord_question_duel",[]],
[anyone|plyr,"lord_talk_ask_something_2",[
(is_between, "$g_talk_troop", kingdom_heroes_begin, kingdom_heroes_end),
(neq, reg(25), 1),
(troop_get_slot, ":player_renown", "trp_player", slot_troop_renown),
(lt, ":player_renown", lord_renown_for_duel),
], "Desearia retaros a un duelo amistoso.", "lord_decline_duel",[]],
[anyone,"lord_decline_duel", [], "Alguien de mi rango no se bate en duelo contra un simple soldado como vos. Cuando hayais alcanzado la gloria en el campo de batalla, volved aqui y tal vez acepte el reto.", "lord_talk_ask_something_2",[]],
# next are the replies to the duel request by the lord, based on how many duels player won/lost against him.
[anyone, "lord_question_duel", [
(troop_get_slot, ":duel_wins", "$g_talk_troop", slot_troop_duel_won),
(troop_get_slot, ":duel_losses", "$g_talk_troop", slot_troop_duel_lost),
(troop_get_slot, ":duel_started", "$g_talk_troop", slot_troop_duel_started),
(try_begin),
(eq, ":duel_started", 0),
(str_store_string, s1, "@Un duelo, parece una buena idea. Asi todos veran quien es el mejor guerrero del lugar."),
(troop_set_slot, "$g_talk_troop", slot_troop_duel_started, 1),
(else_try),
(gt, ":duel_losses", ":duel_wins"),
(str_store_string, s1, "@Ah, con que quieres retarme de nuevo? Entonces te mostrare que no fue casualidad, y que soy un verdadero experto en el arte de los duelos"),
(else_try),
(gt, ":duel_wins", ":duel_losses"),
(str_store_string, s1, "@Habeis ganado la mayoria de los duelos, pero eso va a cambiar!"),
(else_try),
(eq, ":duel_losses", ":duel_wins"),
(str_store_string, s1, "@Ahora mismo estamos empatados, por lo que un nuevo duelo tendra mas interes aun."),
(else_try),
(str_store_string, s1, "@No deberias estar leyendo esto."),
(try_end),
], "{s1}", "duel_accept",[]],
# show different dialog options based on if you're challenging a mounted or unmounted unit.
# note that there's no check if you are mounted yourself, so if you have no horse and challenge someone to a mounted duel, you won't get a horse.
# the visitor numbers correlate with templates in the mission template. So which weapons to use and which items to override. Visitor nr 0 is template 1.
[anyone,"duel_accept", [
(assign, "$g_duel_result", 0),
(assign, "$g_duel_vis_point_plyr", 0), #this is the visitor nr for the player
(assign, "$g_duel_vis_point_opp", 0), #this is the visitor nr for the opponent
(assign, "$talk_troop_mounted",0),
(str_clear, s3),
(try_begin),
(this_or_next|troop_is_mounted, "$g_talk_troop"),
(troop_is_guarantee_horse, "$g_talk_troop"),
(str_store_string, s3, "@Acepto el duelo. ^Deseais luchar a pie o a caballo?"),
(else_try),
(str_store_string, s3, "@Acepto el duelo. ^Elijamos nuestras armas."),
(try_end),
],
"{s3}", "duel_choose_mount", []],
[anyone|plyr,"duel_choose_mount", [
(this_or_next|troop_is_mounted, "$g_talk_troop"),
(troop_is_guarantee_horse, "$g_talk_troop"),
(assign, "$talk_troop_mounted",1),
],
"Desearia combatir a caballo", "duel_weap_mounted", [(str_clear, s4), (str_store_string, s4, "@a caballo"),]],
[anyone|plyr,"duel_choose_mount", [
(this_or_next|troop_is_mounted, "$g_talk_troop"),
(troop_is_guarantee_horse, "$g_talk_troop"),
],
"Desearia combatir con vos a pie", "duel_weap_choose", [(str_clear, s4), (str_store_string, s4, "@a pie"),]],
[anyone|plyr,"duel_choose_mount", [
(neq, "$talk_troop_mounted", 1),
],
"De acuerdo.", "duel_weap_choose", [(str_clear, s4), (str_store_string, s4, "@a pie"),]],
[anyone|plyr,"duel_choose_mount", [],
"Me lo he pensado mejor, no habra duelo.", "close_window", []],
#options for the mounted fights
[anyone, "duel_weap_mounted", [], "Que tipo de armas querras utilizar en el duelo?", "duel_weap_mounted", []],
[anyone|plyr,"duel_weap_mounted", [],
"Utilizaremos nuestras propias armas.", "duel_start", [(str_clear, s5), (str_store_string, s5, "@nuestras propias armas"),(
assign, "$g_duel_vis_point_plyr", 0), (assign, "$g_duel_vis_point_opp", 1),]],
[anyone|plyr,"duel_weap_mounted", [],
"Lucharemos con una espada y un escudo.", "duel_start", [(str_clear, s5), (str_store_string, s5, "@espada y escudo"),
(assign, "$g_duel_vis_point_plyr", 4), (assign, "$g_duel_vis_point_opp", 5),]],
[anyone|plyr,"duel_weap_mounted", [],
"Lucharemos con armas a dos manos.", "duel_start", [(str_clear, s5), (str_store_string, s5, "@armas a dos manos"),
(assign, "$g_duel_vis_point_plyr", 8), (assign, "$g_duel_vis_point_opp", 9),]],
[anyone|plyr,"duel_weap_mounted", [],
"Mi eleccion sera un duelo con armadura ligera y armas a distancia.", "duel_start", [(str_clear, s5), (str_store_string, s5, "@armadura ligera y armas a distancia"),
(assign, "$g_duel_vis_point_plyr", 12), (assign, "$g_duel_vis_point_opp", 13),]],
[anyone|plyr,"duel_weap_mounted", [],
"Cual fue vuestra pregunta anterior?.", "duel_accept", []],
#options for the unmounted fights
[anyone, "duel_weap_choose", [], "Que tipo de armas deseais utilizar?", "duel_weap_choose", []],
[anyone|plyr,"duel_weap_choose", [],
"Utilizaremos nuestras propias armas.", "duel_start", [(str_clear, s5), (str_store_string, s5, "@nuestras propias armas"),
(assign, "$g_duel_vis_point_plyr", 2), (assign, "$g_duel_vis_point_opp", 3),]],
[anyone|plyr,"duel_weap_choose", [],
"Lucharemos con espada y escudo.", "duel_start", [(str_clear, s5), (str_store_string, s5, "@espada y escudo"),
(assign, "$g_duel_vis_point_plyr", 6), (assign, "$g_duel_vis_point_opp", 7),]],
[anyone|plyr,"duel_weap_choose", [],
"Elijo utilizar armas a dos manos.", "duel_start", [(str_clear, s5), (str_store_string, s5, "@armas a dos manos"),
(assign, "$g_duel_vis_point_plyr", 10), (assign, "$g_duel_vis_point_opp", 11),]],
[anyone|plyr,"duel_weap_choose", [],
"Mi eleccion sera usar armas a distancia y armadura ligera.", "duel_start", [(str_clear, s5), (str_store_string, s5, "@armadura ligera y armas a distancia"),
(assign, "$g_duel_vis_point_plyr", 14), (assign, "$g_duel_vis_point_opp", 15),]],
[anyone|plyr,"duel_weap_choose", [],
"Cual fue vuestra pregunta anterior?.", "duel_accept", []],
#final dialog
[anyone, "duel_start", [], "De acuerdo {playername}. ^^Nos retaremos {s4}, usando {s5}.^^Si esta todo correcto, nos encontraremos en la arena cuando estes preparado.", "duel_start", []],
[anyone|plyr, "duel_start", [], "Entendido. Nos encontraremos alli.", "close_window", [(assign, reg(0), "$g_talk_troop"),(jump_to_menu, "mnu_duel_menu"),]],
[anyone|plyr, "duel_start", [], "Eh, no... estais equivocado, comencemos de nuevo.", "duel_accept", []],
################################################ # Duel Mod End ################################################
- Código:
############################## # Duel Mod Start ##############################
# Below are 8 sets of 2 templates. These are selected by the choices in the dialog. You can change the weapons by adding/removing to the itm_ list
# Entry points are the same for all mounted options and also for all unmounted since only 2 players spawn at a time.
# Duel scores are only kept for duels against heroes (companions, lords and kings).
(
"arena_duel_thing_std",mtf_arena_fight,-1,
"The duel begins!",
[
# visitors 0 and 1 are completely standard
(0, mtef_visitor_source|mtef_team_0, 0, aif_start_alarmed, 1, []),
(8, mtef_visitor_source|mtef_team_2, 0, aif_start_alarmed, 1, []),
#visitors 2 and 3 are override horse only
(56, mtef_visitor_source|mtef_team_0, af_override_horse, aif_start_alarmed, 1, []),
(58, mtef_visitor_source|mtef_team_2, af_override_horse, aif_start_alarmed, 1, []),
#vistiors 4 and 5 are sword/shield standard
(0, mtef_visitor_source|mtef_team_0, af_override_weapons, aif_start_alarmed, 1, [itm_sword_viking_2, itm_tab_shield_heater_c]),
(8, mtef_visitor_source|mtef_team_2,af_override_weapons, aif_start_alarmed, 1, [itm_sword_viking_2, itm_tab_shield_heater_c]),
#visitors 6 and 7 are sword/shield no horse
(56, mtef_visitor_source|mtef_team_0, af_override_weapons|af_override_horse, aif_start_alarmed, 1, [itm_sword_viking_2, itm_tab_shield_heater_c]),
(58, mtef_visitor_source|mtef_team_2,af_override_weapons|af_override_horse, aif_start_alarmed, 1, [itm_sword_viking_2, itm_tab_shield_heater_c]),
#vistiors 8 and 9 are 2-H standard
(0, mtef_visitor_source|mtef_team_0, af_override_weapons, aif_start_alarmed, 1, [itm_sword_of_war, itm_great_axe, itm_warhammer]),
(8, mtef_visitor_source|mtef_team_2,af_override_weapons, aif_start_alarmed, 1, [itm_sword_of_war, itm_great_axe, itm_warhammer]),
#visitors 10 and 11 are 2-H no horse
(56, mtef_visitor_source|mtef_team_0, af_override_weapons|af_override_horse, aif_start_alarmed, 1, [itm_sword_of_war, itm_great_axe, itm_warhammer]),
(58, mtef_visitor_source|mtef_team_2,af_override_weapons|af_override_horse, aif_start_alarmed, 1, [itm_sword_of_war, itm_great_axe, itm_warhammer]),
#vistiors 12 and 13 are ranged standard - note that armor is also changed to light leather stuff
(0, mtef_visitor_source|mtef_team_0, af_override_all_but_horse|af_override_foot, aif_start_alarmed, 1, [itm_hunting_bow, itm_bodkin_arrows, itm_nobleman_outfit, itm_skullcap, itm_light_leather_boots, itm_leather_gloves]),
(8, mtef_visitor_source|mtef_team_2, af_override_all_but_horse|af_override_foot, aif_start_alarmed, 1, [itm_hunting_bow, itm_bodkin_arrows, itm_nobleman_outfit, itm_skullcap, itm_light_leather_boots, itm_leather_gloves]),
#visitors 14 and 15 are ranged no horse - note that armor is also changed to light leather stuff
(0, mtef_visitor_source|mtef_team_0, af_override_everything, aif_start_alarmed, 1, [itm_hunting_bow, itm_bodkin_arrows, itm_nobleman_outfit, itm_skullcap, itm_light_leather_boots, itm_leather_gloves]),
(8, mtef_visitor_source|mtef_team_2, af_override_everything, aif_start_alarmed, 1, [itm_hunting_bow, itm_bodkin_arrows, itm_nobleman_outfit, itm_skullcap, itm_light_leather_boots, itm_leather_gloves]),
],
[
common_inventory_not_available,
(ti_tab_pressed, 0, 0, [],
[(question_box,"@Do you wish to give up the fight?")]),
(ti_question_answered, 0, 0, [],
[(store_trigger_param_1,":answer"),
(eq,":answer",0),
#add 1 to the slot for amount of duels the player lost against this troop if it is a tf_hero
(try_begin),
(troop_is_hero, "$g_talk_troop"),
(assign, "$g_duel_result", -1),
(troop_get_slot, ":duel_losses", "$g_talk_troop", slot_troop_duel_lost),
(val_add, ":duel_losses", 1),
(troop_set_slot, "$g_talk_troop", slot_troop_duel_lost, ":duel_losses"),
(try_end),
#add 1 to the total amount of duels player lost if it is a tf_hero
(try_begin),
(troop_is_hero, "$g_talk_troop"),
(troop_get_slot, ":duel_losses_player", "trp_player", slot_troop_duel_lost),
(val_add, ":duel_losses_player", 1),
(troop_set_slot, "trp_player", slot_troop_duel_lost, ":duel_losses_player"),
(assign, reg(2), ":duel_losses_player"),
(display_message, "@You've lost a total number of {reg2} duels."),
(try_end),
(assign, "$g_duel_result", -1),
(finish_mission),
]),
(1,3, ti_once, [
(all_enemies_defeated, 1),
(neg|main_hero_fallen, 0)
],
[
#add 1 to the slot for amount of duels the player won against this troop if it is a tf_hero
(assign, "$g_duel_result", 1),
(try_begin),
(troop_is_hero, "$g_talk_troop"),
(troop_get_slot, ":duel_wins", "$g_talk_troop", slot_troop_duel_won),
(val_add, ":duel_wins", 1),
(troop_set_slot, "$g_talk_troop", slot_troop_duel_won, ":duel_wins"),
#add 1 to the total amount of duels player won if it is a tf_hero
(troop_get_slot, ":duel_wins_player", "trp_player", slot_troop_duel_won),
(val_add, ":duel_wins_player", 1),
(troop_set_slot, "trp_player", slot_troop_duel_won, ":duel_wins_player"),
(assign, reg(2), ":duel_wins_player"),
(display_message, "@You've won a total number of {reg2} duels"),
(try_end),
(finish_mission),
]),
(2, 3, ti_once, [
(main_hero_fallen),
],
[
#add 1 to the slot for amount of duels the player lost against this troop if it is a tf_hero
(assign, "$g_duel_result", -1),
(try_begin),
(troop_is_hero, "$g_talk_troop"),
(troop_get_slot, ":duel_losses", "$g_talk_troop", slot_troop_duel_lost),
(val_add, ":duel_losses", 1),
(troop_set_slot, "$g_talk_troop", slot_troop_duel_lost, ":duel_losses"),
(assign, reg(1), ":duel_losses"),
#add 1 to the total amount of duels player lost if it is a tf_hero
(troop_get_slot, ":duel_losses_player", "trp_player", slot_troop_duel_lost),
(val_add, ":duel_losses_player", 1),
(troop_set_slot, "trp_player", slot_troop_duel_lost, ":duel_losses_player"),
(assign, reg(2), ":duel_losses_player"),
(display_message, "@You've lost a total number of {reg2} duels."),
(try_end),
(finish_mission),
]),
],
),
########################## Duel Mod End ##############################
Cerramos, compilamos el MS e iniciamos un nuevo juego. Ahora, cuando hablemos con un Lord o cualquier otro soldado, podremos retarles a un duelo. Disfrutad!
Y fin recordar que este fue un trabajo que el bueno de Lope de rojas creo hace mucho tiempo en el anterior foro M&B.es