Tutorial: SCRIPTS PARA EL MOUNT&BLADE (MODULE SYSTEM) by Lope de Rojas.

    Comparte

    Neodrako
    Usuario VIP
    Usuario VIP

    Mensajes : 4404
    Edad : 33
    Facción : Gran Polonia

    Tutorial: SCRIPTS PARA EL MOUNT&BLADE (MODULE SYSTEM) by Lope de Rojas.

    Mensaje por Neodrako el Vie Dic 06, 2013 7:34 pm

    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)])
    Los refuerzos irán al castillo o ciudad incluso cuando este se encuentra siendo asediado. Si no queremos que esto ocurra añadiremos las siguientes lineas

    Código:
    (party_get_slot, ":besieged", ":center", slot_center_is_besieged_by),
                       (neg|ge, ":besieged", 0), #Town/castle is under siege jump out
    justo despues de la linea:

    Código:
    (try_for_range, ":center", walled_centers_begin, walled_centers_end),
    que se encuentra al principio (le hacemos un hueco con un enter)

    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,[]),
    Como antes hemos creado un nuevo tipo de party, deberemos añadirla tambien en el correspondiente lugar del archivo module_constants.py, que es en el bloque de slot_party_type (utilizamos la herramienta de buscar, y situamos la linea de código debajo de ella)

    Código:
    spt_reinforcement_party = 14
    Si ya existe alguna party que tenga asignado el número 14, deberemos cambiarlo por otro.

    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),
       ]),
    Para crear la conversación siguiente en caso de interceptar a una partida de refuerzos, añadimos lo siguiente en module_dialogs.py:


    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",[]],
    Nota: no intenteis corregir los acentos, pues si los poneis luego aparecen fallos al compilar

    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"),
       ])
    Y en module_sounds.py añadimos esta linea al final del archivo (antes del ultimo ] )

    Código:
    ("whistle",sf_priority_10, ["wisthle.mp3"]),
    Grabamos el sonido de un silbido, y lo guardamos en la carpeta Sounds, con el nombre wisthle (en la extensión que queramos, siempre y cuando sea .mp3, .wav o .ogg (si no es mp3, cambiamos a la extensión correspondiente la linea de codigo que hemos agregado en module_sounds.py).

    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
    Tenemos que fijarnos bien si ya existen las tres constantes iniciales (me refiero al número). Si es así, deberemos cambiarlos por otros números diferentes. En cuanto a las dos ultimas, no nos preocupamos por su número, ya que se tratan de valores asignados al texto que les acompaña, y no hacen referencia a ninguna posicion dentro del archivo. Además, estos dos últimos números nos permiten modificar el renombre necesario para retar a duelos a los reyes (150 de renow necesario) y lords (50 de renow) del juego. Cerramos el archivo y salvamos.

    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  ################################################


    Cerramos y guardamos, y ahora abrimos el archivo module_game_menus.py. En este archivo buscamos la linea "simple_encounter" y pegamos el siguiente texto justo encima:

    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


    _________________
    Prefiero vivir un dia como lechón que 100 años como cordero

    Guias de los Mount and Blade
    Spoiler:

    Mikeboix
    Emperador
    Emperador

    : : wyrd bi∂ ful ārǣd
    Mensajes : 11261
    Facción : Imperio de Calradia

    Re: Tutorial: SCRIPTS PARA EL MOUNT&BLADE (MODULE SYSTEM) by Lope de Rojas.

    Mensaje por Mikeboix el Sáb Dic 07, 2013 3:40 am

    ¡Genial! ¿Cómo diantres conserva tu primo estos tutoriales? ¿Los guardó en archivos de texto, o algo así? Shocked 


    _________________
    ~No olvides leer las normas. No resuelvo dudas de los juegos por mensaje privado.~




    Last Breath of Calradian Empire: Mod sobre el glorioso pasado de Calradia. ¡Apoya el desarrollo!

    SirAlbert II
    Hombre de armas
    Hombre de armas

    Mensajes : 1016

    Re: Tutorial: SCRIPTS PARA EL MOUNT&BLADE (MODULE SYSTEM) by Lope de Rojas.

    Mensaje por SirAlbert II el Sáb Dic 07, 2013 4:48 am

    Mount&Blade.es es accesible, al menos una de sus "backups", y de hecho creo que el enlace para acceder esta por este foro.


    _________________
    ¡¡SUBSIDIOS DE GUERRA!!

    -Grito habitual de los diplomáticos aragoneses y portugueses a su entrada en la corte castellana. (XV-?)

    Neodrako
    Usuario VIP
    Usuario VIP

    Mensajes : 4404
    Edad : 33
    Facción : Gran Polonia

    Re: Tutorial: SCRIPTS PARA EL MOUNT&BLADE (MODULE SYSTEM) by Lope de Rojas.

    Mensaje por Neodrako el Sáb Dic 07, 2013 6:23 am

    Pues resulta Mike que cuando el foro aun funcionaba mi primo realizo copias de temas para poder verlos offline. osea me paso una carpeta donde yo llego entro y veo los tutoriales y entro y visualmente yo estoy en el foro xd pero de manera offline


    _________________
    Prefiero vivir un dia como lechón que 100 años como cordero

    Guias de los Mount and Blade
    Spoiler:

    Victorcin
    Miliciano
    Miliciano

    Mensajes : 31
    Edad : 22
    Facción : Dragon de Numancia/Desarrollador del mod España S.XIX.Coder Rojo y Azul 1936

    Re: Tutorial: SCRIPTS PARA EL MOUNT&BLADE (MODULE SYSTEM) by Lope de Rojas.

    Mensaje por Victorcin el Vie Ene 10, 2014 7:20 am

    El script del caballo funcionaria en el warband o en algun otro mod?,si fuera así,donde habria que colocarlo

    Un saludo  Very Happy 


    _________________
    He visto lo bastante de una guerra para no desear volver a ver otra

                                                                                       Thomas Jefferson


    Neodrako
    Usuario VIP
    Usuario VIP

    Mensajes : 4404
    Edad : 33
    Facción : Gran Polonia

    Re: Tutorial: SCRIPTS PARA EL MOUNT&BLADE (MODULE SYSTEM) by Lope de Rojas.

    Mensaje por Neodrako el Vie Ene 10, 2014 7:25 am

    Bueno yo aun nunca e implantado un código. pero si dispones de MS, puedes usarlo tanto para un mod como para el warband.

    Con suerte alguien te explique como es esto de implantar codigos


    _________________
    Prefiero vivir un dia como lechón que 100 años como cordero

    Guias de los Mount and Blade
    Spoiler:

    Contenido patrocinado

    Re: Tutorial: SCRIPTS PARA EL MOUNT&BLADE (MODULE SYSTEM) by Lope de Rojas.

    Mensaje por Contenido patrocinado Hoy a las 5:25 pm


      Fecha y hora actual: Dom Dic 04, 2016 5:25 pm