MS codigo de aleatoriedad entre 4 opciones

    Comparte
    avatar
    Rafalongo
    Modder
    Modder

    Mensajes : 471
    Edad : 27
    Facción : Reino de Swadia

    MS codigo de aleatoriedad entre 4 opciones

    Mensaje por Rafalongo el Miér Dic 23, 2015 9:29 am

    Buenass, logre que cuando una batalla se desarrolle en terrotorio de estepa, en vez de luchar en un aleatorio de estepa se luche en un escenario, al que llamé scn_callejon.sco, el tema es que quiero que el combate pueda suceder en 4 posibles escenarios, o mas incluso, y no se como ponerlo, este es el codigo que funciona, en module_game_menus:

    Código:
    ("encounter_attack",[
             (eq, "$encountered_party_friendly", 0),
             (store_troop_health,reg(5)),(party_get_current_terrain,":terrain","p_main_party"),
             (neq,":terrain",2),
             ],
          "Charge the enemy.",
          [
            (assign, "$g_battle_result", 0),
            (assign, "$g_engaged_enemy", 1),
            
            (party_get_template_id, ":encountered_party_template", "$g_encountered_party"),
            (try_begin),
      (eq, ":encountered_party_template", "pt_village_farmers"),
      (unlock_achievement, ACHIEVEMENT_HELP_HELP_IM_BEING_REPRESSED),
     (try_end),          
            
            (call_script, "script_calculate_renown_value"),
     ##diplomacy start+
     (try_begin),
     #Call this to properly set cached values for strength
     (eq, "$g_dplmc_terrain_advantage", DPLMC_TERRAIN_ADVANTAGE_ENABLE),
     (assign, ":terrain_code", dplmc_terrain_code_none),#defined in header_terrain_types.py
     (try_begin),
     (this_or_next|eq, "$g_encounter_type", enctype_fighting_against_village_raid),
     (eq, "$g_encounter_type", enctype_catched_during_village_raid),
     (assign, ":terrain_code", dplmc_terrain_code_village),#defined in header_terrain_types.py
     (else_try),
     (encountered_party_is_attacker),
     (call_script, "script_dplmc_get_terrain_code_for_battle", "$g_encountered_party", "p_main_party"),
     (assign, ":terrain_code", reg0),
     (else_try),
     (call_script, "script_dplmc_get_terrain_code_for_battle", "p_main_party", "$g_encountered_party"),
     (assign, ":terrain_code", reg0),
     (try_end),
     (neq, ":terrain_code", dplmc_terrain_code_none),
     (call_script, "script_dplmc_party_calculate_strength_in_terrain", "p_main_party", ":terrain_code", 0, 1),
     (call_script, "script_dplmc_party_calculate_strength_in_terrain", "$g_encountered_party", ":terrain_code", 0, 1),
     (try_end),
     ##diplomacy end+
            (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"),
     
              #gekokujo 3.0 disable horses in sea battles start
              (party_get_current_terrain, ":terrain_type", "p_main_party"),
              (try_begin),
                (eq, ":terrain_type", rt_bridge),
                (mission_tpl_entry_set_override_flags, "mt_lead_charge", 0, af_override_horse),
                (mission_tpl_entry_set_override_flags, "mt_lead_charge", 1, af_override_horse),
                (mission_tpl_entry_set_override_flags, "mt_lead_charge", 2, af_override_horse),
                (mission_tpl_entry_set_override_flags, "mt_lead_charge", 3, af_override_horse),
              (try_end),
              #gekokujo 3.0 disable horses in sea battles end
     
              (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_order_attack",
          [
            (eq, "$encountered_party_friendly", 0),
            (call_script, "script_party_count_members_with_full_health", "p_main_party"),(ge, reg0, 4),
        #gekokujo 2.1 PBO
     ## PreBattle Orders Begin
     (party_slot_eq, "p_main_party", slot_party_prebattle_plan, 0),
     ## PreBattle Orders End
          ],
          "Order your troops to attack without you.",
          [
            (jump_to_menu, "mnu_order_attack_begin"),
            #(simulate_battle,3),
          ]),
          
          ("encounter_leave",[
              (eq,"$cant_leave_encounter", 0),
          #gekokujo 2.1 PBO
      ## PreBattle Orders Begin
      (party_slot_eq, "p_main_party", slot_party_prebattle_plan, 0),
      ## PreBattle Orders End
              ],"Leave.",[

                                   ]),
         ("encounter_attack",[
             (eq, "$encountered_party_friendly", 0),
             (store_troop_health,reg(5)),(party_get_current_terrain,":terrain","p_main_party"),
             (eq,":terrain",2),
             ],
          "Charge the enemy.",
          [
            (assign, "$g_battle_result", 0),
            (assign, "$g_engaged_enemy", 1),
            
            (party_get_template_id, ":encountered_party_template", "$g_encountered_party"),
            (try_begin),
      (eq, ":encountered_party_template", "pt_village_farmers"),
      (unlock_achievement, ACHIEVEMENT_HELP_HELP_IM_BEING_REPRESSED),
     (try_end),          
            
            (call_script, "script_calculate_renown_value"),
     ##diplomacy start+
     (try_begin),
     #Call this to properly set cached values for strength
     (eq, "$g_dplmc_terrain_advantage", DPLMC_TERRAIN_ADVANTAGE_ENABLE),
     (assign, ":terrain_code", dplmc_terrain_code_none),#defined in header_terrain_types.py
     (try_begin),
     (this_or_next|eq, "$g_encounter_type", enctype_fighting_against_village_raid),
     (eq, "$g_encounter_type", enctype_catched_during_village_raid),
     (assign, ":terrain_code", dplmc_terrain_code_village),#defined in header_terrain_types.py
     (else_try),
     (encountered_party_is_attacker),
     (call_script, "script_dplmc_get_terrain_code_for_battle", "$g_encountered_party", "p_main_party"),
     (assign, ":terrain_code", reg0),
     (else_try),
     (call_script, "script_dplmc_get_terrain_code_for_battle", "p_main_party", "$g_encountered_party"),
     (assign, ":terrain_code", reg0),
     (try_end),
     (neq, ":terrain_code", dplmc_terrain_code_none),
     (call_script, "script_dplmc_party_calculate_strength_in_terrain", "p_main_party", ":terrain_code", 0, 1),
     (call_script, "script_dplmc_party_calculate_strength_in_terrain", "$g_encountered_party", ":terrain_code", 0, 1),
     (try_end),
     ##diplomacy end+
            (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"),
                                     (try_begin),
                                       (val_add,reg10,reg11),
                                       (gt,reg10,30),
                                       (jump_to_scene, "scn_callejon"),
                                     (else_try),
                                       (jump_to_scene, "scn_callejon_b"),
                                     (else_try),
                                       (jump_to_scene, "scn_callejon_c"),
                                     (else_try),
                                       (jump_to_scene, "scn_callejon_d"),
                                     (end_try),
                                   (try_end),
                                   (assign, "$g_next_menu", "mnu_simple_encounter"),
                                   (jump_to_menu, "mnu_battle_debrief"),
                                   (change_screen_mission),
                                   ]),


    en la ultima parte del codigo abajo del todo es donde elijo el escenario, ese else_try no funciona, solo elige un escenario siempre, el primero supongo xD
    lo primero es neq, lo cual dedusco que es "no igual" al terreno 2, ahi se da la batalla normalmente en el campo, y el segundo ese eq, lo cual dedusco que es igual a territorio 2 (estepa) XD y manda a peleas en las calles. Saque ese codigo del q se usa para las batallas maritimas, pero no se como poner para que sea mas de un escenario posible al azar. tengo entendido que no es muy dificil pero no se como se pone! help
    avatar
    daizuke
    Hombre de armas
    Hombre de armas

    Mensajes : 993

    Re: MS codigo de aleatoriedad entre 4 opciones

    Mensaje por daizuke el Miér Ene 20, 2016 2:06 am

    confused confused confused furious que es eso xd solo veo puff parace chino ese poco de jeroglificos

    avatar
    Rafalongo
    Modder
    Modder

    Mensajes : 471
    Edad : 27
    Facción : Reino de Swadia

    Re: MS codigo de aleatoriedad entre 4 opciones

    Mensaje por Rafalongo el Miér Ene 20, 2016 3:32 am

    la preguta tenía mas posibilidades de responderse si seguía diciendo "0" en respuestas u_u
    avatar
    daizuke
    Hombre de armas
    Hombre de armas

    Mensajes : 993

    Re: MS codigo de aleatoriedad entre 4 opciones

    Mensaje por daizuke el Miér Ene 20, 2016 11:53 am

    perdóname rafalongo xd solo fue un chiste men

    avatar
    Mikeboix
    Emperador
    Emperador

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

    Re: MS codigo de aleatoriedad entre 4 opciones

    Mensaje por Mikeboix el Miér Ene 20, 2016 4:00 pm

    He contactado con el maestro JBJ, a ver si tiene un rato para echar un vistazo a tu código Smile


    _________________
    ~No olvides leer las [Tienes que estar registrado y conectado para ver este vínculo]. No resuelvo dudas de los juegos por mensaje privado.~




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

    Mensajes : 471
    Edad : 27
    Facción : Reino de Swadia

    Re: MS codigo de aleatoriedad entre 4 opciones

    Mensaje por Rafalongo el Miér Ene 20, 2016 6:15 pm

    genial! el mini mod que estoy/estaba haciendo se basa en combatir en la ciudad, y necesito varios escenarios para que quede bien Very Happy
    avatar
    Jatynski
    Espadachín
    Espadachín

    : : Europa en Llamas
    Porta-cafes oficial
    Mensajes : 189
    Facción : Alcoholicos Unidos

    Re: MS codigo de aleatoriedad entre 4 opciones

    Mensaje por Jatynski el Miér Ene 20, 2016 7:07 pm

    Hola, espero ayudar
    No lo he probado, pero deberia ser algo asi:

    en la ultima parte

    Código:
    (jump_to_scene, ":scene_to_use"),
                                   (else_try),
                                     (set_jump_mission,"mt_lead_charge"),
                                     (try_begin),
                                       (val_add,reg10,reg11),
                                       (gt,reg10,30),
                                       (jump_to_scene, "scn_callejon"),
                                     (else_try),
                                       (jump_to_scene, "scn_callejon_b"),
                                     (else_try),
                                       (jump_to_scene, "scn_callejon_c"),
                                     (else_try),
                                       (jump_to_scene, "scn_callejon_d"),
                                     (end_try),
                                   (try_end),
                                   (assign, "$g_next_menu", "mnu_simple_encounter"),
                                   (jump_to_menu, "mnu_battle_debrief"),
                                   (change_screen_mission),
                                   ]),

    Ve a module_constants y define el principio y final de tus nuevas escenas,por ejemplo:
    callejon_scene_start=scn_callejon
    callejon_scene_end=scn_callejon_d

    el codigo, sustituyelo por:

    Código:
                          (store_random_in_range, ":scene_to_use", callejon_scene_start, callejon_scene_end),
                                  (jump_to_scene, ":scene_to_use"),                          
                                   
                                  (assign, "$g_next_menu", "mnu_simple_encounter"),
                                  (jump_to_menu, "mnu_battle_debrief"),
                                  (change_screen_mission),
                                  ]),

    si no funciona, prueba a sustituir el store_random_in_range por try_random_in_range




    _________________
     [Tienes que estar registrado y conectado para ver este vínculo]
    avatar
    JBJ
    Modder
    Modder

    Mensajes : 529
    Edad : 25
    Facción : Sultanato Sarránido

    Re: MS codigo de aleatoriedad entre 4 opciones

    Mensaje por JBJ el Miér Ene 20, 2016 8:41 pm

    Como bien dices neq significa no igual y eq igual.

    -----------------------

    Lo que propone Jatynski debe funcionar perfectamente a excepción de una cosa. La función store_random_in_range genera un valor aleatorio entre el primer argumento y el segundo-1.
    Es decir, que deberías crear una escena extra al final, en module_scenes, que no se use, para luego en constant poner:
    callejon_scene_start=scn_callejon
    callejon_scene_end=scn_callejon_no_usado

    Y el script si estaría bien.

    --------------------

    Te propongo una alternativa a la de Jatynski, para no tocar el archivo constant.
    En la última parte del script, tras (set_jump_mission,"mt_lead_charge"),, agregas:
    Código:
                                  (store_random_in_range, ":escenario", 1, 5), #esta linea genera un numero aleatorio entre 1 y 4 (recuerda restarle 1), esto es si tienes 4 escenarios, si agregas mas, aumentas el numero
                                   #a continuacion los escenarios
                                   (try_begin),
                                      (eq,":escenario",1),
                                      (jump_to_scene, "scn_callejon"),
                                    (else_try),
                                      (eq,":escenario",2),
                                      (jump_to_scene, "scn_callejon_b"),
                                    (else_try),
                                      (eq,":escenario",3),
                                      (jump_to_scene, "scn_callejon_c"),
                                    (else_try),
                                      (jump_to_scene, "scn_callejon_d"),
                                    (end_try),

    Listo, debe funcionar de lujo.
    Atención. En tu código actual ya usas una condición para elegir escenario, creo que ya no deberías usarla:
    Código:
                                      (val_add,reg10,reg11),
                                       (gt,reg10,30),
    No se si sabrá que es, pero tiene pinta de que suma la cantidad de tropa de ambos bandos y en caso de ser mayor que 30 (gt = greater than) elige un escenario en concreto. Si tu propósito es elegir el escenario solo en función de la aleatoriedad y no del número de tropas, puedes eliminar esa línea.

    Saludos


    _________________
    [Tienes que estar registrado y conectado para ver este vínculo]
    avatar
    Jatynski
    Espadachín
    Espadachín

    : : Europa en Llamas
    Porta-cafes oficial
    Mensajes : 189
    Facción : Alcoholicos Unidos

    Re: MS codigo de aleatoriedad entre 4 opciones

    Mensaje por Jatynski el Jue Ene 21, 2016 3:33 pm

    Qué Rafa, ¿funcionó?


    _________________
     [Tienes que estar registrado y conectado para ver este vínculo]
    avatar
    Rafalongo
    Modder
    Modder

    Mensajes : 471
    Edad : 27
    Facción : Reino de Swadia

    Re: MS codigo de aleatoriedad entre 4 opciones

    Mensaje por Rafalongo el Jue Ene 28, 2016 3:25 am

    recien veo!
    muchas gracias a ambos! se entendió bien, agregar a module constant el princpio y final, crear un scene extra porq claro, el ultimo no se usa, ya lo habia visto eso en otros codigos, y borrar eso que no sirve. Lo voy a probar y les cuento Wink

    Contenido patrocinado

    Re: MS codigo de aleatoriedad entre 4 opciones

    Mensaje por Contenido patrocinado


      Fecha y hora actual: Miér Sep 20, 2017 8:19 pm