5 participantes

    MS codigo de aleatoriedad entre 4 opciones

    Rafalongo
    Rafalongo
    Modder
    Modder


    Mensajes : 694
    Facción : Imperio Calrádico del Sur

    MS codigo de aleatoriedad entre 4 opciones Empty MS codigo de aleatoriedad entre 4 opciones

    Mensaje por Rafalongo 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
    El autor de este mensaje ha sido baneado del foro - Ver el mensaje
    Rafalongo
    Rafalongo
    Modder
    Modder


    Mensajes : 694
    Facción : Imperio Calrádico del Sur

    MS codigo de aleatoriedad entre 4 opciones Empty Re: MS codigo de aleatoriedad entre 4 opciones

    Mensaje por Rafalongo 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
    El autor de este mensaje ha sido baneado del foro - Ver el mensaje
    Mikeboix
    Mikeboix
    Emperador
    Emperador


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

    MS codigo de aleatoriedad entre 4 opciones Empty Re: MS codigo de aleatoriedad entre 4 opciones

    Mensaje por Mikeboix 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.~

    [Tienes que estar registrado y conectado para ver este vínculo]MS codigo de aleatoriedad entre 4 opciones Hopesp10
    Rafalongo
    Rafalongo
    Modder
    Modder


    Mensajes : 694
    Facción : Imperio Calrádico del Sur

    MS codigo de aleatoriedad entre 4 opciones Empty Re: MS codigo de aleatoriedad entre 4 opciones

    Mensaje por Rafalongo 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


    _________________
    MS codigo de aleatoriedad entre 4 opciones Landof10
    Jatynski
    Jatynski
    Espadachín
    Espadachín


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

    MS codigo de aleatoriedad entre 4 opciones Empty Re: MS codigo de aleatoriedad entre 4 opciones

    Mensaje por Jatynski 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




    _________________
    MS codigo de aleatoriedad entre 4 opciones 3u1ae MS codigo de aleatoriedad entre 4 opciones 9tn4gg [Tienes que estar registrado y conectado para ver este vínculo]
    JBJ
    JBJ
    Modder
    Modder


    Mensajes : 553
    Facción : Sultanato Sarránido

    MS codigo de aleatoriedad entre 4 opciones Empty Re: MS codigo de aleatoriedad entre 4 opciones

    Mensaje por JBJ 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]
    Jatynski
    Jatynski
    Espadachín
    Espadachín


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

    MS codigo de aleatoriedad entre 4 opciones Empty Re: MS codigo de aleatoriedad entre 4 opciones

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

    Qué Rafa, ¿funcionó?


    _________________
    MS codigo de aleatoriedad entre 4 opciones 3u1ae MS codigo de aleatoriedad entre 4 opciones 9tn4gg [Tienes que estar registrado y conectado para ver este vínculo]
    Rafalongo
    Rafalongo
    Modder
    Modder


    Mensajes : 694
    Facción : Imperio Calrádico del Sur

    MS codigo de aleatoriedad entre 4 opciones Empty Re: MS codigo de aleatoriedad entre 4 opciones

    Mensaje por Rafalongo 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


    _________________
    MS codigo de aleatoriedad entre 4 opciones Landof10

    Contenido patrocinado


    MS codigo de aleatoriedad entre 4 opciones Empty Re: MS codigo de aleatoriedad entre 4 opciones

    Mensaje por Contenido patrocinado


      Fecha y hora actual: Jue Mar 28, 2024 11:42 am