Different multiplayer class selection system (with sub-classes)?

Users who are viewing this thread

BapKing

Veteran
I'm wondering how to code in a class selection system for multiplayer in which there are set weapons for each class and upon choosing a class the player spawns immediatly as opposed to selecting items from the buy menu. Also, I'd like to make it so that there are 'sub-classes' like this;

Faction ---> Class 1
                  Class 2 ---> Sub-class ---> Then perhaps a rank as well.

Thanks,

BapKing
 
I don't know exactly how to help you, but I do know what you are trying to achieve is possible because it is in Mount and Musket: Battalion.

I would download Warband Script Enhancer and see if there are operations that may help you.
 
BapKing said:
I'm wondering how to code in a class selection system for multiplayer in which there are set weapons for each class and upon choosing a class the player spawns immediatly as opposed to selecting items from the buy menu. Also, I'd like to make it so that there are 'sub-classes' like this;

Faction ---> Class 1
                  Class 2 ---> Sub-class ---> Then perhaps a rank as well.

Thanks,

BapKing

The most simple way to do it - to create troops for all types and to make just a "big" selecting window with classes.  :!:
 
I would do it somewhat different so you achive what you want, and theirfore i wouldn't use wse. You should add all the troops and in game_quick_start (a script) you add a new troop slot to THE troops that need to be THE sub troop. In THE troop slot you put the id of THE troop where it is subtroop of. Than you should edit THE troop sellection in pressentations a bit.

That is what i should do.

EDIT: I was on my phone and that causes me to send you the wrong script name, I chanced it now to the right one, game_quick_start.
 
Jerkuh said:
I would do it somewhat different so you achive what you want, and theirfore i wouldn't use wse. You should add all the troops and in game_quick_start (a script) you add a new troop slot to THE troops that need to be THE sub troop. In THE troop slot you put the id of THE troop where it is subtroop of. Than you should edit THE troop sellection in pressentations a bit.

That is what i should do.

EDIT: I was on my phone and that causes me to send you the wrong script name, I chanced it now to the right one, game_quick_start.

Thank you for this, but how do I actually define the sub troops and then use that variable just as it is defined and used with the troops variable?
 
Ok, ill give an explanation about it.
And perhaps something different than what i mentioned earlier because with some thought on it I figured it is better a somewhat other way.

To start creating it I would say you add all classes, sub-classes and perhaps ranks as troops.
This may take more space than necessary though I think for someone that isn't an advanced modder it is the easiest way out.
Put the troops in like this:
Code:
# Classes Start
["multiplayer_classes_start","Melee","Melee",tf_hero, 0,0, fac_kingdom_1,[],def_attrib|level(2),wp(20),knows_inventory_management_10,0],
["kingdom_1_class_melee","Melee","Melee",tf_hero, 0,0, fac_kingdom_1,[],def_attrib|level(2),wp(20),knows_inventory_management_10,0],
["kingdom_1_class_ranged","Archer","Archer",tf_hero, 0,0, fac_kingdom_1,[],def_attrib|level(2),wp(20),knows_inventory_management_10,0],
["kingdom_2_class_melee","Melee","Melee",tf_hero, 0,0, fac_kingdom_2,[],def_attrib|level(2),wp(20),knows_inventory_management_10,0],
["kingdom_2_class_ranged","Ranged","Ranged",tf_hero, 0,0, fac_kingdom_2,[],def_attrib|level(2),wp(20),knows_inventory_management_10,0],
["multiplayer_classes_end","Melee","Melee",tf_hero, 0,0, fac_kingdom_1,[],def_attrib|level(2),wp(20),knows_inventory_management_10,0],
# Classes End

# Sub Classes Start
["multiplayer_sub_classes_start","Melee","Melee",tf_hero, 0,0, fac_kingdom_1,[],def_attrib|level(2),wp(20),knows_inventory_management_10,0],
["kingdom_1_sub_class_melee_1","Swordsman","Swordsman",tf_hero, 0,0, fac_kingdom_1,[],def_attrib|level(2),wp(20),knows_inventory_management_10,0],
["kingdom_1_sub_class_melee_2","Axeman","Axeman",tf_hero, 0,0, fac_kingdom_1,[],def_attrib|level(2),wp(20),knows_inventory_management_10,0],


["kingdom_1_sub_class_ranged_1","Longbowman","Longbowman",tf_hero, 0,0, fac_kingdom_1,[],def_attrib|level(2),wp(20),knows_inventory_management_10,0],
["kingdom_1_sub_class_ranged_2","Shortbowman","Shortbowman",tf_hero, 0,0, fac_kingdom_1,[],def_attrib|level(2),wp(20),knows_inventory_management_10,0],
["multiplayer_sub_classes_end","Melee","Melee",tf_hero, 0,0, fac_kingdom_1,[],def_attrib|level(2),wp(20),knows_inventory_management_10,0],
# Sub Classes End

# Ranks Start
["multiplayer_ranks_start","Melee","Melee",tf_hero, 0,0, fac_kingdom_1,[],def_attrib|level(2),wp(20),knows_inventory_management_10,0],
["kingdom_1_rank_melee_1_1","Heavy Armoured Swordsman","Heavy Armoured Swordsman",tf_hero, 0,0, fac_kingdom_1,[],def_attrib|level(2),wp(20),knows_inventory_management_10,0],
["kingdom_1_rank_melee_1_2","Elite Swordsman","Elite Swordsman",tf_hero, 0,0, fac_kingdom_1,[],def_attrib|level(2),wp(20),knows_inventory_management_10,0],

["kingdom_1_rank_melee_2_1","Heavy Armoured Axeman","Heavy Armoured Axeman",tf_hero, 0,0, fac_kingdom_1,[],def_attrib|level(2),wp(20),knows_inventory_management_10,0],
["kingdom_1_rank_melee_2_2","Elite Axeman","Elite Axeman",tf_hero, 0,0, fac_kingdom_1,[],def_attrib|level(2),wp(20),knows_inventory_management_10,0],
["multiplayer_ranks_end","Melee","Melee",tf_hero, 0,0, fac_kingdom_1,[],def_attrib|level(2),wp(20),knows_inventory_management_10,0],
# Ranks End
Something like that but than filled in with your stuff.
Notice that the rank troops will end up being the troop you assign your items and stuff to.
That is the one ending up spawning.
It is necessary that you fill in the factions correct for the in the classes.
This comes in handy to show only the classes for the kingdom itself.
Now we get to the part that you can address the ranks to the sub classes and the sub classes to the classes.
For this we do not need to reserve a free slot at the troops, you can easily use for instance 1 becouse this slots are only reserved for single player.
Now you can go to game_quick_start in module_scripts and start adding lines like this:
Code:
  (troop_set_slot, "trp_kingdom_1_sub_class_melee_1", 1, "trp_"kingdom_1_class_melee"),
  (troop_set_slot, "trp_kingdom_1_sub_class_melee_2", 1, "trp_"kingdom_1_class_melee"),
  (troop_set_slot, "trp_kingdom_1_sub_class_ranged_1", 1, "trp_"kingdom_1_class_ranged"),
  (troop_set_slot, "trp_kingdom_1_sub_class_ranged_2", 1, "trp_"kingdom_1_class_ranged"),

  (troop_set_slot, "trp_kingdom_1_rank_melee_1_1", 1, "trp_kingdom_1_sub_class_melee_1"),
  (troop_set_slot, "trp_kingdom_1_rank_melee_1_2", 1, "trp_kingdom_1_sub_class_melee_1"),
  (troop_set_slot, "trp_kingdom_1_rank_melee_2_1", 1, "trp_kingdom_1_sub_class_melee_2"),
  (troop_set_slot, "trp_kingdom_1_rank_melee_2_2", 1, "trp_kingdom_1_sub_class_melee_2"),

Following it?
After that you should take a look at the module_presentations and change the troop sellection screen to not check in the range of multiplayer troops but in the range of multiplayer classes, the ones called multiplayer_classes_start and multiplayer_classes_end.
Now i think it already should show only the classes you want for the faction the player chose.
But when you click on an class it will popup to the item selection screen, change that to something like sub class selection screen.
Copy the troops selection screen, edit it so it checks all the the classes and than equal the troop slot with the class you selected.
Do the same for ranks, and you should be close, still you have to have a bit of expierence with modding in warband to finish it all up.

And now i am writting so much it almost looks like a big tutorial. Darnit, that wasn't supposed to happen XD
I hope i gave you enough info to have an idea how to make it work.
Need to do more stuff than typing extreme long replies :razz: sorry.
 
It's no problem at all that it's long and I thank you a lot for spending the time to explain this in such detail :wink:. It seems to make sense, I'll just have to see if it all works out.
 
Sorry for the double post but I can't find this;

Jerkuh said:
Now you can go to game_quick_start in module_scripts and start adding lines like this:
Code:
  (troop_set_slot, "trp_kingdom_1_sub_class_melee_1", 1, "trp_"kingdom_1_class_melee"),
  (troop_set_slot, "trp_kingdom_1_sub_class_melee_2", 1, "trp_"kingdom_1_class_melee"),
  (troop_set_slot, "trp_kingdom_1_sub_class_ranged_1", 1, "trp_"kingdom_1_class_ranged"),
  (troop_set_slot, "trp_kingdom_1_sub_class_ranged_2", 1, "trp_"kingdom_1_class_ranged"),

  (troop_set_slot, "trp_kingdom_1_rank_melee_1_1", 1, "trp_kingdom_1_sub_class_melee_1"),
  (troop_set_slot, "trp_kingdom_1_rank_melee_1_2", 1, "trp_kingdom_1_sub_class_melee_1"),
  (troop_set_slot, "trp_kingdom_1_rank_melee_2_1", 1, "trp_kingdom_1_sub_class_melee_2"),
  (troop_set_slot, "trp_kingdom_1_rank_melee_2_2", 1, "trp_kingdom_1_sub_class_melee_2"),

It is simply not under game_quick_start when I do control + f, are you sure this is the right file or something similar? There is faction_set_slot by the way.
 
Are you dealing with Native's source? 

If not, just go to game_quick_start and look for a similar section... the names may change but the function's still the same.
 
BapKing said:
Sorry for the double post but I can't find this;

Jerkuh said:
Now you can go to game_quick_start in module_scripts and start adding lines like this:
Code:
  (troop_set_slot, "trp_kingdom_1_sub_class_melee_1", 1, "trp_"kingdom_1_class_melee"),
  (troop_set_slot, "trp_kingdom_1_sub_class_melee_2", 1, "trp_"kingdom_1_class_melee"),
  (troop_set_slot, "trp_kingdom_1_sub_class_ranged_1", 1, "trp_"kingdom_1_class_ranged"),
  (troop_set_slot, "trp_kingdom_1_sub_class_ranged_2", 1, "trp_"kingdom_1_class_ranged"),

  (troop_set_slot, "trp_kingdom_1_rank_melee_1_1", 1, "trp_kingdom_1_sub_class_melee_1"),
  (troop_set_slot, "trp_kingdom_1_rank_melee_1_2", 1, "trp_kingdom_1_sub_class_melee_1"),
  (troop_set_slot, "trp_kingdom_1_rank_melee_2_1", 1, "trp_kingdom_1_sub_class_melee_2"),
  (troop_set_slot, "trp_kingdom_1_rank_melee_2_2", 1, "trp_kingdom_1_sub_class_melee_2"),
O, sorry dor THE late reactionair. You need to adjust it to tour inw needs and add it at the end. I wrote that piece myself.

It is simply not under game_quick_start when I do control + f, are you sure this is the right file or something similar? There is faction_set_slot by the way.
 
xenoargh said:
Are you dealing with Native's source? 

If not, just go to game_quick_start and look for a similar section... the names may change but the function's still the same.
Yes, I'm dealing with Native's source; Module system 1.143.

[quote author=Jerkuh]
O, sorry dor THE late reactionair. You need to adjust it to tour inw needs and add it at the end. I wrote that piece [/quote]
[/quote]
Yeah, I was just quoting what you'd written, in my actual code it's different to yours.
 
BapKing said:
[quote author=Jerkuh]
O, sorry dor THE late reactionair. You need to adjust it to tour inw needs and add it at the end. I wrote that piece
[/quote]
Yeah, I was just quoting what you'd written, in my actual code it's different to yours.
[/quote]That was a pretty messed up message of me :razz:
Was posting it on my mob, so ill explain a bit more about it now i'm on my pc.

That part of the code should be added in game_quick_start at the end of it.
You need to adjust what I scripted to your own needs.
As you see it points out witch rank goes to witch sub-class, and the same for sub-class to the main class.
Becouse Native dousn't use any sub-class similair system you'll find nothing in the Native code, you'll have to write it.
 
I get so many errors when I run this;

Code:
  ("multiplayer_class_select", prsntf_manual_end_only, 0, [
    (ti_on_presentation_load,
     [(set_fixed_point_multiplier, 1000),
      (create_mesh_overlay, reg0, "mesh_mp_ingame_menu"),
      (position_set_x, pos1, 250),
      (position_set_y, pos1, 80),
      (overlay_set_position, reg0, pos1),
      (position_set_x, pos1, 1000),
      (position_set_y, pos1, 1000),
      (overlay_set_size, reg0, pos1),
      (str_clear, s0),
      (create_text_overlay, "$g_presentation_obj_troop_select_container", s0, tf_scrollable_style_2),
      (position_set_x, pos1, 285),
      (position_set_y, pos1, 125),
      (overlay_set_position, "$g_presentation_obj_troop_select_container", pos1),
      (position_set_x, pos1, 405),
      (position_set_y, pos1, 500),
      (overlay_set_area_size, "$g_presentation_obj_troop_select_container", pos1),
      (set_container_overlay, "$g_presentation_obj_troop_select_container"),
      (assign, ":cur_y", 450),
      (create_text_overlay, reg0, "str_choose_a_troop", 0),
      (overlay_set_color, reg0, 0xFFFFFF),
      (position_set_x, pos1, 0),
      (position_set_y, pos1, ":cur_y"),
      (overlay_set_position, reg0, pos1),
      (val_sub, ":cur_y", escape_menu_item_height),
      (position_set_y, pos1, ":cur_y"),
      (position_set_x, pos1, 100),
      (multiplayer_get_my_player, ":my_player_no"),
      (player_get_team_no, ":my_team_no", ":my_player_no"),
      (team_get_faction, ":my_faction_no", ":my_team_no"),
      (try_for_range, ":i_multi", multi_data_troop_button_indices_begin, multi_data_troop_button_indices_end),
        (troop_set_slot, "trp_multiplayer_data", ":i_multi", -1),
      (try_end),
      (assign, ":cur_troop_index", 0),
      (try_for_range, ":troop_no", multiplayer_classes_start, multiplayer_classes_end),
        (store_troop_faction, ":troop_faction", ":troop_no"),
        (eq, ":troop_faction", ":my_faction_no"),
        (str_store_troop_name, s1, ":troop_no"),
        (create_button_overlay, reg0, s1, 0),
        (overlay_set_color, reg0, 0xFFFFFF),
        (store_add, ":button_index_slot", ":cur_troop_index", multi_data_troop_button_indices_begin),
        (troop_set_slot, "trp_multiplayer_data", ":button_index_slot", reg0),
        (position_set_y, pos1, ":cur_y"),
        (overlay_set_position, reg0, pos1),
        (val_sub, ":cur_y", escape_menu_item_height),
        (position_set_y, pos1, ":cur_y"),
        (val_add, ":cur_troop_index", 1),
      (try_end),
      (presentation_set_duration, 999999),
      ]),
   
    (ti_on_presentation_event_state_change,
     [(store_trigger_param_1, ":object"),
      (multiplayer_get_my_player, ":my_player_no"),
      (player_get_team_no, ":my_team_no", ":my_player_no"),
      (team_get_faction, ":my_faction_no", ":my_team_no"),
      (assign, ":selected_troop_no", -1),
      (assign, ":end_cond", multi_data_troop_button_indices_end),
      (try_for_range, ":i_button", multi_data_troop_button_indices_begin, ":end_cond"),
        (troop_slot_eq, "trp_multiplayer_data", ":i_button", ":object"),
        (store_sub, ":selected_troop_index", ":i_button", multi_data_troop_button_indices_begin),
        (assign, ":end_cond_2", multiplayer_classes_end),
        (try_for_range, ":troop_no", multiplayer_troops_begin, ":end_cond_2"),
          (store_troop_faction, ":troop_faction", ":troop_no"),
          (eq, ":troop_faction", ":my_faction_no"),
          (val_sub, ":selected_troop_index", 1),
          (lt, ":selected_troop_index", 0),
          (assign, ":selected_troop_no", ":troop_no"),
          (assign, ":end_cond_2", 0), #break
        (try_end),
        (try_begin),
          (multiplayer_get_my_troop, ":troop_no"),
          (neq, ":troop_no", ":selected_troop_no"),
          (player_set_troop_id, ":my_player_no", ":selected_troop_no"),
          (multiplayer_send_int_to_server, multiplayer_event_change_troop_id, ":selected_troop_no"),
          (call_script, "script_multiplayer_set_default_item_selections_for_troop", ":selected_troop_no"),
          (call_script, "script_multiplayer_send_item_selections"),
        (try_end),
        (presentation_set_duration, 0),
        (assign, "$g_presentation_state", 0),
        (start_presentation, "prsnt_multiplayer_sub_class_select"),
        (assign, ":end_cond", 0), #break
      (try_end),
      ]),
    (ti_on_presentation_run,
     [
      (try_begin),
        (key_clicked, key_escape),
        (multiplayer_get_my_player, ":my_player_no"),
        (is_between, ":my_player_no", 0, multiplayer_max_possible_player_id),
        (multiplayer_get_my_troop, ":my_troop"),
        (try_begin),
          (neg|is_between, ":my_troop", multiplayer_classes_start, multiplayer_classes_end),
          (player_set_troop_id, ":my_player_no", -1),
          (multiplayer_send_int_to_server, multiplayer_event_change_troop_id, -1),
          (multiplayer_send_int_to_server, multiplayer_event_change_team_no, multi_team_spectator),
          (player_set_team_no, ":my_player_no", multi_team_spectator),
        (try_end),
        (presentation_set_duration, 0),
      (try_end),
      ]),
    ]),
  ("multiplayer_sub_class_select", prsntf_manual_end_only, 0, [
    (ti_on_presentation_load,
     [(set_fixed_point_multiplier, 1000),
      (create_mesh_overlay, reg0, "mesh_mp_ingame_menu"),
      (position_set_x, pos1, 250),
      (position_set_y, pos1, 80),
      (overlay_set_position, reg0, pos1),
      (position_set_x, pos1, 1000),
      (position_set_y, pos1, 1000),
      (overlay_set_size, reg0, pos1),
      (str_clear, s0),
      (create_text_overlay, "$g_presentation_obj_troop_select_container", s0, tf_scrollable_style_2),
      (position_set_x, pos1, 285),
      (position_set_y, pos1, 125),
      (overlay_set_position, "$g_presentation_obj_troop_select_container", pos1),
      (position_set_x, pos1, 405),
      (position_set_y, pos1, 500),
      (overlay_set_area_size, "$g_presentation_obj_troop_select_container", pos1),
      (set_container_overlay, "$g_presentation_obj_troop_select_container"),
      (assign, ":cur_y", 450),
      (create_text_overlay, reg0, "str_choose_a_troop", 0),
      (overlay_set_color, reg0, 0xFFFFFF),
      (position_set_x, pos1, 0),
      (position_set_y, pos1, ":cur_y"),
      (overlay_set_position, reg0, pos1),
      (val_sub, ":cur_y", escape_menu_item_height),
      (position_set_y, pos1, ":cur_y"),
      (position_set_x, pos1, 100),
      (multiplayer_get_my_player, ":my_player_no"),
      (player_get_team_no, ":my_team_no", ":my_player_no"),
      (team_get_faction, ":my_faction_no", ":my_team_no"),
      (try_for_range, ":i_multi", multi_data_troop_button_indices_begin, multi_data_troop_button_indices_end),
        (troop_set_slot, "trp_multiplayer_data", ":i_multi", -1),
      (try_end),
      (assign, ":cur_troop_index", 0),
      (try_for_range, ":troop_no", multiplayer_sub_classes_start, multiplayer_sub_classes_end),
        (store_troop_faction, ":troop_faction", ":troop_no"),
        (eq, ":troop_faction", ":my_faction_no"),
        (str_store_troop_name, s1, ":troop_no"),
        (create_button_overlay, reg0, s1, 0),
        (overlay_set_color, reg0, 0xFFFFFF),
        (store_add, ":button_index_slot", ":cur_troop_index", multi_data_troop_button_indices_begin),
        (troop_set_slot, "trp_multiplayer_data", ":button_index_slot", reg0),
        (position_set_y, pos1, ":cur_y"),
        (overlay_set_position, reg0, pos1),
        (val_sub, ":cur_y", escape_menu_item_height),
        (position_set_y, pos1, ":cur_y"),
        (val_add, ":cur_troop_index", 1),
      (try_end),
      (presentation_set_duration, 999999),
      ]),
   
    (ti_on_presentation_event_state_change,
     [(store_trigger_param_1, ":object"),
      (multiplayer_get_my_player, ":my_player_no"),
      (player_get_team_no, ":my_team_no", ":my_player_no"),
      (team_get_faction, ":my_faction_no", ":my_team_no"),
      (assign, ":selected_troop_no", -1),
      (assign, ":end_cond", multi_data_troop_button_indices_end),
      (try_for_range, ":i_button", multi_data_troop_button_indices_begin, ":end_cond"),
        (troop_slot_eq, "trp_multiplayer_data", ":i_button", ":object"),
        (store_sub, ":selected_troop_index", ":i_button", multi_data_troop_button_indices_begin),
        (assign, ":end_cond_2", multiplayer_sub_classes_end),
        (try_for_range, ":troop_no", multiplayer_sub_classes_start, ":end_cond_2"),
          (store_troop_faction, ":troop_faction", ":troop_no"),
          (eq, ":troop_faction", ":my_faction_no"),
          (val_sub, ":selected_troop_index", 1),
          (lt, ":selected_troop_index", 0),
          (assign, ":selected_troop_no", ":troop_no"),
          (assign, ":end_cond_2", 0), #break
        (try_end),
        (try_begin),
          (multiplayer_get_my_troop, ":troop_no"),
          (neq, ":troop_no", ":selected_troop_no"),
          (player_set_troop_id, ":my_player_no", ":selected_troop_no"),
          (multiplayer_send_int_to_server, multiplayer_event_change_troop_id, ":selected_troop_no"),
          (call_script, "script_multiplayer_set_default_item_selections_for_troop", ":selected_troop_no"),
          (call_script, "script_multiplayer_send_item_selections"),
        (try_end),
        (presentation_set_duration, 0),
        (assign, "$g_presentation_state", 0),
        (start_presentation, "prsnt_multiplayer_rank_select"),
        (assign, ":end_cond", 0), #break
      (try_end),
      ]),
    (ti_on_presentation_run,
     [
      (try_begin),
        (key_clicked, key_escape),
        (multiplayer_get_my_player, ":my_player_no"),
        (is_between, ":my_player_no", 0, multiplayer_max_possible_player_id),
        (multiplayer_get_my_troop, ":my_troop"),
        (try_begin),
          (neg|is_between, ":my_troop", multiplayer_sub_classes_start, multiplayer_sub_classes_end),
          (player_set_troop_id, ":my_player_no", -1),
          (multiplayer_send_int_to_server, multiplayer_event_change_troop_id, -1),
          (multiplayer_send_int_to_server, multiplayer_event_change_team_no, multi_team_spectator),
          (player_set_team_no, ":my_player_no", multi_team_spectator),
        (try_end),
        (presentation_set_duration, 0),
      (try_end),
      ]),
    ]),
  ("multiplayer_rank_select", prsntf_manual_end_only, 0, [
    (ti_on_presentation_load,
     [(set_fixed_point_multiplier, 1000),
      (create_mesh_overlay, reg0, "mesh_mp_ingame_menu"),
      (position_set_x, pos1, 250),
      (position_set_y, pos1, 80),
      (overlay_set_position, reg0, pos1),
      (position_set_x, pos1, 1000),
      (position_set_y, pos1, 1000),
      (overlay_set_size, reg0, pos1),
      (str_clear, s0),
      (create_text_overlay, "$g_presentation_obj_troop_select_container", s0, tf_scrollable_style_2),
      (position_set_x, pos1, 285),
      (position_set_y, pos1, 125),
      (overlay_set_position, "$g_presentation_obj_troop_select_container", pos1),
      (position_set_x, pos1, 405),
      (position_set_y, pos1, 500),
      (overlay_set_area_size, "$g_presentation_obj_troop_select_container", pos1),
      (set_container_overlay, "$g_presentation_obj_troop_select_container"),
      (assign, ":cur_y", 450),
      (create_text_overlay, reg0, "str_choose_a_troop", 0),
      (overlay_set_color, reg0, 0xFFFFFF),
      (position_set_x, pos1, 0),
      (position_set_y, pos1, ":cur_y"),
      (overlay_set_position, reg0, pos1),
      (val_sub, ":cur_y", escape_menu_item_height),
      (position_set_y, pos1, ":cur_y"),
      (position_set_x, pos1, 100),
      (multiplayer_get_my_player, ":my_player_no"),
      (player_get_team_no, ":my_team_no", ":my_player_no"),
      (team_get_faction, ":my_faction_no", ":my_team_no"),
      (try_for_range, ":i_multi", multi_data_troop_button_indices_begin, multi_data_troop_button_indices_end),
        (troop_set_slot, "trp_multiplayer_data", ":i_multi", -1),
      (try_end),
      (assign, ":cur_troop_index", 0),
      (try_for_range, ":troop_no", multiplayer_ranks_start, multiplayer_ranks_end),
        (store_troop_faction, ":troop_faction", ":troop_no"),
        (eq, ":troop_faction", ":my_faction_no"),
        (str_store_troop_name, s1, ":troop_no"),
        (create_button_overlay, reg0, s1, 0),
        (overlay_set_color, reg0, 0xFFFFFF),
        (store_add, ":button_index_slot", ":cur_troop_index", multi_data_troop_button_indices_begin),
        (troop_set_slot, "trp_multiplayer_data", ":button_index_slot", reg0),
        (position_set_y, pos1, ":cur_y"),
        (overlay_set_position, reg0, pos1),
        (val_sub, ":cur_y", escape_menu_item_height),
        (position_set_y, pos1, ":cur_y"),
        (val_add, ":cur_troop_index", 1),
      (try_end),
      (presentation_set_duration, 999999),
      ]),
   
    (ti_on_presentation_event_state_change,
     [(store_trigger_param_1, ":object"),
      (multiplayer_get_my_player, ":my_player_no"),
      (player_get_team_no, ":my_team_no", ":my_player_no"),
      (team_get_faction, ":my_faction_no", ":my_team_no"),
      (assign, ":selected_troop_no", -1),
      (assign, ":end_cond", multi_data_troop_button_indices_end),
      (try_for_range, ":i_button", multi_data_troop_button_indices_begin, ":end_cond"),
        (troop_slot_eq, "trp_multiplayer_data", ":i_button", ":object"),
        (store_sub, ":selected_troop_index", ":i_button", multi_data_troop_button_indices_begin),
        (assign, ":end_cond_2", multiplayer_ranks_end),
        (try_for_range, ":troop_no", multiplayer_ranks_start, ":end_cond_2"),
          (store_troop_faction, ":troop_faction", ":troop_no"),
          (eq, ":troop_faction", ":my_faction_no"),
          (val_sub, ":selected_troop_index", 1),
          (lt, ":selected_troop_index", 0),
          (assign, ":selected_troop_no", ":troop_no"),
          (assign, ":end_cond_2", 0), #break
        (try_end),
        (try_begin),
          (multiplayer_get_my_troop, ":troop_no"),
          (neq, ":troop_no", ":selected_troop_no"),
          (player_set_troop_id, ":my_player_no", ":selected_troop_no"),
          (multiplayer_send_int_to_server, multiplayer_event_change_troop_id, ":selected_troop_no"),
          (call_script, "script_multiplayer_set_default_item_selections_for_troop", ":selected_troop_no"),
          (call_script, "script_multiplayer_send_item_selections"),
        (try_end),
        (presentation_set_duration, 0),
        (assign, "$g_presentation_state", 0),
        (start_presentation, "prsnt_multiplayer_item_select"),
        (assign, ":end_cond", 0), #break
      (try_end),
      ]),
    (ti_on_presentation_run,
     [
      (try_begin),
        (key_clicked, key_escape),
        (multiplayer_get_my_player, ":my_player_no"),
        (is_between, ":my_player_no", 0, multiplayer_max_possible_player_id),
        (multiplayer_get_my_troop, ":my_troop"),
        (try_begin),
          (neg|is_between, ":my_troop", multiplayer_ranks_start, multiplayer_ranks_end),
          (player_set_troop_id, ":my_player_no", -1),
          (multiplayer_send_int_to_server, multiplayer_event_change_troop_id, -1),
          (multiplayer_send_int_to_server, multiplayer_event_change_team_no, multi_team_spectator),
          (player_set_team_no, ":my_player_no", multi_team_spectator),
        (try_end),
        (presentation_set_duration, 0),
      (try_end),
      ]),
    ]),

Here are a few of the errors;
4c78ab3dcb68d39a25101b7e8ee51e8e.png
 
You need to define multiplayer_classes_start as either multiplayer_classes_start="trp_multiplayer_classes_start" in module_constants or use "trp_multiplayer_classes_start" directly. On that note, if you define them as constants you won't need the placeholder range limits - simply define multiplayer_classes_start="trp_kingdom_1_class_melee", multiplayer_classes_end="trp_kingdom_1_sub_class_melee_1", etc.
 
Ok, so they now show up thanks to that, but unfortunately all sub classes are showing up despite what class you choose, same goes for rank and sub class. (The module_presentations is the same as previously posted)

module_scripts.py troop_set_slot section
Code:
	  #Troop settings
	  (troop_set_slot, "trp_usa_ranged_multiplayer", 1, "trp_usa_sub_classes_ranged"),
	  (troop_set_slot, "trp_usa_melee_multiplayer", 1, "trp_usa_sub_classes_melee"),
	  (troop_set_slot, "trp_usa_melee_multiplayer", 1, "trp_usa_sub_classes_melee_2"),
	  
          (troop_set_slot, "trp_usa_sub_classes_melee", 1, "trp_usa_swordsman_multiplayer"),     
          (troop_set_slot, "trp_usa_sub_classes_ranged", 1, "trp_usa_crossbowman_multiplayer"),

module_troops.py section (don't mind the stupid class names, simply for testing :razz:)
Code:
# Classes Start
   ["multiplayer_classes_start","MPCLASSSTART","MPCLASSSTART2",tf_hero, 0,0, fac_kingdom_7,[],def_attrib|level(2),wp(20),knows_inventory_management_10,0],
   ["usa_ranged_multiplayer","Ranged","Ranged",tf_guarantee_all,0,0,fac_kingdom_7,[],def_attrib|level(2),wp(20),knows_inventory_management_10,0],
   ["usa_melee_multiplayer","Melee","Melee",tf_guarantee_all,0,0,fac_kingdom_7,[],def_attrib|level(2),wp(20),knows_inventory_management_10,0],
   ["multiplayer_classes_end","MPCLASSSEND","MPCLASSEND",tf_hero, 0,0, fac_kingdom_7,[],def_attrib|level(2),wp(20),knows_inventory_management_10,0],
# Classes End

# Sub Classes Start
   ["multiplayer_sub_classes_start","MPSUBCLASSSTART","MPSUBCLASSSTART2",tf_hero, 0,0, fac_kingdom_7,[],def_attrib|level(2),wp(20),knows_inventory_management_10,0],
   ["usa_sub_classes_ranged","Crossbowman","Crossbowmen",tf_hero, 0,0, fac_kingdom_7,[],def_attrib|level(2),wp(20),knows_inventory_management_10,0],   
   ["usa_sub_classes_melee","Swordsman","Swordsman",tf_hero, 0,0, fac_kingdom_7,[],def_attrib|level(2),wp(20),knows_inventory_management_10,0], 
   ["usa_sub_classes_melee_2","Grenadier","Grenadier",tf_hero, 0,0, fac_kingdom_7,[],def_attrib|level(2),wp(20),knows_inventory_management_10,0],      
   ["multiplayer_sub_classes_end","MPSUBCLASSEND","MPSUBCLASSEND",tf_hero, 0,0, fac_kingdom_7,[],def_attrib|level(2),wp(20),knows_inventory_management_10,0],

   
# Ranks start
   ["multiplayer_ranks_start","MPRANKSTART","MPRANKSTART2",tf_hero, 0,0, fac_kingdom_7,[],def_attrib|level(2),wp(20),knows_inventory_management_10,0],
   ["usa_crossbowman_multiplayer","American Crossbowman","America Crossbowmen",tf_guarantee_all,0,0,fac_kingdom_7,
   [itm_bolts,itm_crossbow,itm_sword_medieval_b_small,itm_tab_shield_heater_a,itm_wfi_leeslegion_sgt,itm_ankle_boots],
   def_attrib_multiplayer|level(19),wpe(90,60,180,90),knows_common|knows_ironflesh_2|knows_athletics_5|knows_shield_5|knows_power_strike_2|knows_riding_1,swadian_face_young_1, swadian_face_old_2],	
   ["usa_swordsman_multiplayer","American Swordsman","America Swordsmen",tf_guarantee_all,0,0,fac_kingdom_7,
   [itm_bolts,itm_crossbow,itm_sword_medieval_b_small,itm_tab_shield_heater_a,itm_wfi_leeslegion_sgt,itm_ankle_boots],
   def_attrib_multiplayer|level(19),wpe(90,60,180,90),knows_common|knows_ironflesh_2|knows_athletics_5|knows_shield_5|knows_power_strike_2|knows_riding_1,swadian_face_young_1, swadian_face_old_2],	
   ["multiplayer_ranks_end","MPRANKSEND","MPRANKSEND",tf_hero, 0,0, fac_kingdom_7,[],def_attrib|level(2),wp(20),knows_inventory_management_10,0],
# Ranks end

Code:
# WFI
multiplayer_classes_start = "trp_usa_ranged_multiplayer" 
multiplayer_classes_end = "trp_multiplayer_classes_end"
multiplayer_sub_classes_start = "trp_usa_sub_classes_ranged"
multiplayer_sub_classes_end = "trp_multiplayer_sub_classes_end"
multiplayer_ranks_start = "trp_usa_crossbowman_multiplayer"
multiplayer_ranks_end = "trp_multiplayer_ranks_end"
 
 
Sounds like module_presentations is the problem. The "multiplayer_troop_select" menu needs to get info from the "multiplayer_subclass_select" menu in order to determine which troops to show for each subclass. Similar to how the origianl menu uses the info from "miltiplayer_team_select" to determine what factions troops to show.

Unfortunately I'm not a coder, so I have no idea how one would format this. :roll:
 
Jerkuh said:
Following it?
After that you should take a look at the module_presentations and change the troop sellection screen to not check in the range of multiplayer troops but in the range of multiplayer classes, the ones called multiplayer_classes_start and multiplayer_classes_end.
Now i think it already should show only the classes you want for the faction the player chose.
But when you click on an class it will popup to the item selection screen, change that to something like sub class selection screen.
Copy the troops selection screen, edit it so it checks all the the classes and than equal the troop slot with the class you selected.
Do the same for ranks, and you should be close, still you have to have a bit of expierence with modding in warband to finish it all up.

I'm kinda lost on this part. I get the point about changing where it searches for the troops, but the sub-class selection screen? How would I do that? Copy and paste the Troop Selection and rename it "Sub-Class Selection", then change the item menu screen to "Sub-Class Selection"?

I kinda just confused myself, but it makes sense in my head. Just making sure that sounds right.
 
BapKing said:
Ok, so they now show up thanks to that, but unfortunately all sub classes are showing up despite what class you choose, same goes for rank and sub class. (The module_presentations is the same as previously posted)

module_scripts.py troop_set_slot section
Code:
	  #Troop settings
	  (troop_set_slot, "trp_usa_ranged_multiplayer", 1, "trp_usa_sub_classes_ranged"),
	  (troop_set_slot, "trp_usa_melee_multiplayer", 1, "trp_usa_sub_classes_melee"),
	  (troop_set_slot, "trp_usa_melee_multiplayer", 1, "trp_usa_sub_classes_melee_2"),
	  
          (troop_set_slot, "trp_usa_sub_classes_melee", 1, "trp_usa_swordsman_multiplayer"),     
          (troop_set_slot, "trp_usa_sub_classes_ranged", 1, "trp_usa_crossbowman_multiplayer"),

module_troops.py section (don't mind the stupid class names, simply for testing :razz:)
Code:
# Classes Start
   ["multiplayer_classes_start","MPCLASSSTART","MPCLASSSTART2",tf_hero, 0,0, fac_kingdom_7,[],def_attrib|level(2),wp(20),knows_inventory_management_10,0],
   ["usa_ranged_multiplayer","Ranged","Ranged",tf_guarantee_all,0,0,fac_kingdom_7,[],def_attrib|level(2),wp(20),knows_inventory_management_10,0],
   ["usa_melee_multiplayer","Melee","Melee",tf_guarantee_all,0,0,fac_kingdom_7,[],def_attrib|level(2),wp(20),knows_inventory_management_10,0],
   ["multiplayer_classes_end","MPCLASSSEND","MPCLASSEND",tf_hero, 0,0, fac_kingdom_7,[],def_attrib|level(2),wp(20),knows_inventory_management_10,0],
# Classes End

# Sub Classes Start
   ["multiplayer_sub_classes_start","MPSUBCLASSSTART","MPSUBCLASSSTART2",tf_hero, 0,0, fac_kingdom_7,[],def_attrib|level(2),wp(20),knows_inventory_management_10,0],
   ["usa_sub_classes_ranged","Crossbowman","Crossbowmen",tf_hero, 0,0, fac_kingdom_7,[],def_attrib|level(2),wp(20),knows_inventory_management_10,0],   
   ["usa_sub_classes_melee","Swordsman","Swordsman",tf_hero, 0,0, fac_kingdom_7,[],def_attrib|level(2),wp(20),knows_inventory_management_10,0], 
   ["usa_sub_classes_melee_2","Grenadier","Grenadier",tf_hero, 0,0, fac_kingdom_7,[],def_attrib|level(2),wp(20),knows_inventory_management_10,0],      
   ["multiplayer_sub_classes_end","MPSUBCLASSEND","MPSUBCLASSEND",tf_hero, 0,0, fac_kingdom_7,[],def_attrib|level(2),wp(20),knows_inventory_management_10,0],

   
# Ranks start
   ["multiplayer_ranks_start","MPRANKSTART","MPRANKSTART2",tf_hero, 0,0, fac_kingdom_7,[],def_attrib|level(2),wp(20),knows_inventory_management_10,0],
   ["usa_crossbowman_multiplayer","American Crossbowman","America Crossbowmen",tf_guarantee_all,0,0,fac_kingdom_7,
   [itm_bolts,itm_crossbow,itm_sword_medieval_b_small,itm_tab_shield_heater_a,itm_wfi_leeslegion_sgt,itm_ankle_boots],
   def_attrib_multiplayer|level(19),wpe(90,60,180,90),knows_common|knows_ironflesh_2|knows_athletics_5|knows_shield_5|knows_power_strike_2|knows_riding_1,swadian_face_young_1, swadian_face_old_2],	
   ["usa_swordsman_multiplayer","American Swordsman","America Swordsmen",tf_guarantee_all,0,0,fac_kingdom_7,
   [itm_bolts,itm_crossbow,itm_sword_medieval_b_small,itm_tab_shield_heater_a,itm_wfi_leeslegion_sgt,itm_ankle_boots],
   def_attrib_multiplayer|level(19),wpe(90,60,180,90),knows_common|knows_ironflesh_2|knows_athletics_5|knows_shield_5|knows_power_strike_2|knows_riding_1,swadian_face_young_1, swadian_face_old_2],	
   ["multiplayer_ranks_end","MPRANKSEND","MPRANKSEND",tf_hero, 0,0, fac_kingdom_7,[],def_attrib|level(2),wp(20),knows_inventory_management_10,0],
# Ranks end

Code:
# WFI
multiplayer_classes_start = "trp_usa_ranged_multiplayer" 
multiplayer_classes_end = "trp_multiplayer_classes_end"
multiplayer_sub_classes_start = "trp_usa_sub_classes_ranged"
multiplayer_sub_classes_end = "trp_multiplayer_sub_classes_end"
multiplayer_ranks_start = "trp_usa_crossbowman_multiplayer"
multiplayer_ranks_end = "trp_multiplayer_ranks_end"

Did you solve this or what?
 
Back
Top Bottom