Recopilación de tutoriales Nº3: Como añadir un nuevo edificio para construir en ciudades: Orfanato (Combo de escuela y molino).

    Comparte

    Hernanxd16
    Hombre de armas
    Hombre de armas

    : : Desarrollador del mod A New Era For Calradia.
    Mensajes : 968
    Facción : Imperio Calrádico.

    Recopilación de tutoriales Nº3: Como añadir un nuevo edificio para construir en ciudades: Orfanato (Combo de escuela y molino).

    Mensaje por Hernanxd16 el Lun Sep 05, 2016 11:54 pm

    Hoy estoy generoso, asi que subo dos de mis tutoriales.

    Post original por Malik Faris, traducido por mi.

    Post original:https://forums.taleworlds.com/index.php/topic,335744.0.html

    Modules que necesitaras:
                     

    • Scripts
    • Simple Triggers
    • Constants
    • Game Menus


    Primero, en module_scripts.py busca #script_get_improvement_details y añade mi codigo #Malik al final de este script como se muestra en el codigo de abajo.
    Voy a explicar lo mejor que pueda lo que hace el código aquí. Slots como slot_center_has_manor estan almacenados en module_constants y se utilizan para realizar un seguimiento de un valor, en este caso un valor de un si o no de si existe el edificio.
    El store_string es lo que se muestra cuando el juego verifica si tu aldea tiene la mejora, y el 2do es la descripción que da cuando se tiene en cuenta la construcción de ésta.
    reg0 es el costo del edificio, ya que el mío hace algo más que una escuela, aumente el costo.
    Código:
     #script_get_improvement_details
      # INPUT: arg1 = improvement
      # OUTPUT: reg0 = base_cost
      ("get_improvement_details",
        [(store_script_param, ":improvement_no", 1),
         (try_begin),
           (eq, ":improvement_no", slot_center_has_manor),
           (str_store_string, s0, "@Manor"),
           (str_store_string, s1, "@A manor lets you rest at the village and pay your troops half wages while you rest."),
           (assign, reg0, 8000),
         (else_try),
           (eq, ":improvement_no", slot_center_has_fish_pond),
           (str_store_string, s0, "@Mill"),
           (str_store_string, s1, "@A mill increases village prosperity by 5%."),
           (assign, reg0, 6000),
         (else_try),
           (eq, ":improvement_no", slot_center_has_watch_tower),
           (str_store_string, s0, "@Watch Tower"),
           (str_store_string, s1, "@A watch tower lets the villagers raise alarm earlier. The time it takes for enemies to loot the village increases by 50%."),
           (assign, reg0, 5000),
         (else_try),
           (eq, ":improvement_no", slot_center_has_school),
           (str_store_string, s0, "@School"),
           (str_store_string, s1, "@A school increases the loyality of the villagers to you by +1 every month."),
           (assign, reg0, 9000),
         (else_try),
           (eq, ":improvement_no", slot_center_has_messenger_post),
           (str_store_string, s0, "@Messenger Post"),
           (str_store_string, s1, "@A messenger post lets the inhabitants send you a message whenever enemies are nearby, even if you are far away from here."),
           (assign, reg0, 4000),
         (else_try),
           (eq, ":improvement_no", slot_center_has_prisoner_tower),
           (str_store_string, s0, "@Prison Tower"),
           (str_store_string, s1, "@A prison tower reduces the chance of captives held here running away successfully."),
           (assign, reg0, 7000),
    #Malik Buildings
         (else_try),
           (eq, ":improvement_no", slot_center_has_orphanage),
           (str_store_string, s0, "@Orphanage"),
           (str_store_string, s1, "@An orphanage increases the loyalty of the townspeople to you by +1 every month, and increases town prosperity by 5%."),
           (assign, reg0, 11000),  
    #Malik Buildings End  
         (try_end),
         ]),

    Loyalty esta mal escrito, tut tut Taleworlds


    Simple Triggers:
    Hay dos partes en este codigo, asi que busca la separación. Busca # Checking center upgrades y luego # Village upgrade triggers
    La primera parte es muy facil, acabo de decirle al script para comprobar también el slot del nuevo orfanato que creamos para el ya existente script ya trabajando del molino [que era originalmente un estanque de peces(fish pond)]
    La segunda parte solo involucra los cambios para las referencias de la aldea a los centros, ya que eso es lo que son las ciudades.

    Código:
     # Checking center upgrades
      (12,
       [(try_for_range, ":center_no", centers_begin, centers_end),
          (party_get_slot, ":cur_improvement", ":center_no", slot_center_current_improvement),
          (gt, ":cur_improvement", 0),
          (party_get_slot, ":cur_improvement_end_time", ":center_no", slot_center_improvement_end_hour),
          (store_current_hours, ":cur_hours"),
          (ge, ":cur_hours", ":cur_improvement_end_time"),
          (party_set_slot, ":center_no", ":cur_improvement", 1),
          (party_set_slot, ":center_no", slot_center_current_improvement, 0),
          (call_script, "script_get_improvement_details", ":cur_improvement"),
          (try_begin),
            (party_slot_eq, ":center_no", slot_town_lord, "trp_player"),
            (str_store_party_name, s4, ":center_no"),
            (display_log_message, "@Building of {s0} in {s4} has been completed."),
          (try_end),
    #Malik Buildings
          (try_begin),
            (is_between, ":center_no", towns_begin, villages_end),
            (this_or_next|eq, ":cur_improvement", slot_center_has_fish_pond),
     (eq, ":cur_improvement", slot_center_has_orphanage),
            (call_script, "script_change_center_prosperity", ":center_no", 5),
    #Malik Buildings End
          (try_end),
        (try_end),
        ]),


    NEXT PART


    # Village upgrade triggers

    # School
      (30 * 24,
       [(try_for_range, ":cur_village", villages_begin, villages_end),
          (party_slot_eq, ":cur_village", slot_town_lord, "trp_player"),
          (party_slot_eq, ":cur_village", slot_center_has_school, 1),
          (party_get_slot, ":cur_relation", ":cur_village", slot_center_player_relation),
          (val_add, ":cur_relation", 1),
          (val_min, ":cur_relation", 100),
          (party_set_slot, ":cur_village", slot_center_player_relation, ":cur_relation"),
        (try_end),
        ]),

    #Malik Buildings
    #Orphanage
      (30 * 24,
       [(try_for_range, ":cur_center", towns_begin, towns_end),
          (party_slot_eq, ":cur_center", slot_town_lord, "trp_player"),
          (party_slot_eq, ":cur_center", slot_center_has_orphanage, 1),
          (party_get_slot, ":cur_relation", ":cur_center", slot_center_player_relation),
          (val_add, ":cur_relation", 1),
          (val_min, ":cur_relation", 100),
          (party_set_slot, ":cur_center", slot_center_player_relation, ":cur_relation"),
        (try_end),
        ]),
    #Malik Buildings End
    # Quest triggers:

    # Remaining days text update


    Module Constants:
    Este fue un poco complicado ya que el inicio y el fin por donde se vea para esos slots son son poco específicos, y no deje ningún número abiertos entre ellos. Vi esa nada despues del 126 que fue usado y ya que esta cosa mira a si mismo para decidir donde terminan las cosas, solo tenia que ponerlo en el final con un numero unico y elegi 127 porque estaba disponible.
    Código:
    slot_center_improvement_end_hour  = 125

    slot_party_last_traded_center     = 126



    slot_center_has_manor            = 130 #village
    slot_center_has_fish_pond        = 131 #village
    slot_center_has_watch_tower      = 132 #village
    slot_center_has_school           = 133 #village
    slot_center_has_messenger_post   = 134 #town, castle, village
    slot_center_has_prisoner_tower   = 135 #town, castle
    slot_center_has_orphanage = 127 #Malik Buildings

    village_improvements_begin = slot_center_has_manor
    village_improvements_end          = 135

    walled_center_improvements_begin = slot_center_has_messenger_post
    walled_center_improvements_end               = 136

    slot_center_player_enterprise      = 137 #noted with the item produced

    Game menus:
    Aqui podemos ver todas las variadas mejoras, pero yo solo queria copiar lo que ya hacen las escuelas para las ciudades, fue muy simple.
    Esto es simplemente que aparece en los menus cuando vas a construir una mejora y chequea que lo que hayas construido o no.
    Busca "Build a school."
    Código:
       [
          ("center_build_manor",[(eq, reg6, 0),
                                 (party_slot_eq, "$g_encountered_party", slot_party_type, spt_village),
                                 (party_slot_eq, "$g_encountered_party", slot_center_has_manor, 0),
                                      ],
           "Build a manor.",[(assign, "$g_improvement_type", slot_center_has_manor),
                             (jump_to_menu, "mnu_center_improve"),]),
          ("center_build_fish_pond",[(eq, reg6, 0),
                                     (party_slot_eq, "$g_encountered_party", slot_party_type, spt_village),
                                     (party_slot_eq, "$g_encountered_party", slot_center_has_fish_pond, 0),
                                      ],
           "Build a mill.",[(assign, "$g_improvement_type", slot_center_has_fish_pond),
                                 (jump_to_menu, "mnu_center_improve"),]),
          ("center_build_watch_tower",[(eq, reg6, 0),
                                       (party_slot_eq, "$g_encountered_party", slot_party_type, spt_village),
                                       (party_slot_eq, "$g_encountered_party", slot_center_has_watch_tower, 0),
                                      ],
           "Build a watch tower.",[(assign, "$g_improvement_type", slot_center_has_watch_tower),
                                   (jump_to_menu, "mnu_center_improve"),]),
          ("center_build_school",[(eq, reg6, 0),
                                  (party_slot_eq, "$g_encountered_party", slot_party_type, spt_village),
                                  (party_slot_eq, "$g_encountered_party", slot_center_has_school, 0),
                                      ],
           "Build a school.",[(assign, "$g_improvement_type", slot_center_has_school),
                              (jump_to_menu, "mnu_center_improve"),]),
    #Malik Buildings
          ("center_build_orphanage",[(eq, reg6, 0),
                                  (party_slot_eq, "$g_encountered_party", slot_party_type, spt_town),
                                  (party_slot_eq, "$g_encountered_party", slot_center_has_orphanage, 0),
                                      ],
           "Build a orphanage.",[(assign, "$g_improvement_type", slot_center_has_orphanage),
                              (jump_to_menu, "mnu_center_improve"),]),
    #Malik Buildings End
          ("center_build_messenger_post",[(eq, reg6, 0),
                                          (party_slot_eq, "$g_encountered_party", slot_center_has_messenger_post, 0),
                                           ],
           "Build a messenger post.",[(assign, "$g_improvement_type", slot_center_has_messenger_post),
                                      (jump_to_menu, "mnu_center_improve"),]),
          ("center_build_prisoner_tower",[(eq, reg6, 0),
                                          (this_or_next|party_slot_eq, "$g_encountered_party", slot_party_type, spt_town),
                                          (party_slot_eq, "$g_encountered_party", slot_party_type, spt_castle),
                                          (party_slot_eq, "$g_encountered_party", slot_center_has_prisoner_tower, 0),
                                           ],
           "Build a prisoner tower.",[(assign, "$g_improvement_type", slot_center_has_prisoner_tower),
                                      (jump_to_menu, "mnu_center_improve"),]),
                              
          ("go_back_dot",[],"Go back.",[(jump_to_menu, "$g_next_menu")]),
        ],

    Eso es todo.


    _________________
    «Ten una sola mente y una sola fe, entonces podrás conquistar a tus enemigos y vivir una vida larga y feliz» Gengis Khan.


    A New Era For Calradia: Mod sobre una Calradia del siglo XIV, en el que un Imperio la dominó, y le trajo nuevas tecnologías. ¡Apoya el desarrollo!
    A New Era For Calradia

      Fecha y hora actual: Jue Dic 08, 2016 4:57 am