OSP Kit MP Troop limmiter

Users who are viewing this thread

Jerkuh

Knight
This scripts limits the troops in your mod.
The limit is adjustable in the module system but also ingame you can change the value in the admin panel.
The balance between the troops are done in percentages.
When a player wants to sellect a troop that is already full it will be vieuwed gray just like when you can't join a faction.
It is also posible to limit a troop to precise 1 person so you have a leading figure troop.
And its also posible to give some troops unlimited Troops.

module_scripts

Add these scripts

Code:
############################################################################
 # Troop Limitations Begin (From Jerkuh)
############################################################################ 

("player_troop_count",
	 [
	   (assign, "$g_vikingr_team_1_count", 0),
	   (assign, "$g_vikingr_team_2_count", 0),
	   (try_for_range, ":cur_troop", "trp_bueskytter_multiplayer", "trp_multiplayer_end"),
	     (troop_set_slot, ":cur_troop", 301, 0),
	   (try_end),
	   (get_max_players, ":num_players"),
	   (try_for_range, ":cur_player", 0, ":num_players"),
	     (player_is_active, ":cur_player"),
		 (player_get_troop_id, ":cur_troop", ":cur_player"),
		 (neq, ":cur_troop", -1),
		 (troop_get_slot, ":num", ":cur_troop", 301),
		 (val_add, ":num", 1),
         (troop_set_slot, ":cur_troop", 301, ":num"),
		 (player_get_team_no, ":cur_team", ":cur_player"),
		 (troop_get_slot, ":max_troop", ":cur_troop", 300),
		 (try_begin),
		   (eq, ":cur_team", 0),
		   (neq, ":max_troop", -1),
		   (val_add, "$g_vikingr_team_1_count", 1),
		 (else_try),
		   (eq, ":cur_team", 1),
		   (neq, ":max_troop", -1),
		   (val_add, "$g_vikingr_team_2_count", 1),
		 (try_end),
	     (assign, reg1, ":cur_player"),
	     #(display_message, "@Player ID: {reg1}"),
       (try_end),
	 ]),   

("cf_troop_room",
	 [
	   (store_script_param, ":player_no", 1),
	   (store_script_param, ":troop", 2),
	   (assign, ":max", 0),
	   (call_script, "script_player_troop_count"),
	   (troop_get_slot, ":max_troop", ":troop", 300),
	   (try_begin),
	     (neq, ":max_troop", -1),
		 (neq, ":max_troop", -2),
	     (store_troop_faction, ":faction", ":troop"),
	     (assign, ":max_faction", 0),
	     (try_for_range, ":cur_troop", "trp_bueskytter_multiplayer", "trp_multiplayer_end"),
		   (troop_get_slot, ":max_cur", ":cur_troop", 300),
	       (neq, ":max_cur", -1),
	       (store_troop_faction, ":cur_faction", ":cur_troop"),
	       (eq, ":faction", ":cur_faction"),
		   (val_add, ":max_faction", ":max_cur"),
	       (assign, reg1, ":max_cur"),
	       #(display_message, "@Troop Perc: {reg1}"),
         (try_end),
	     (val_mul, ":max_troop", 100),
	     (assign, reg1, ":max_faction"),
	     #(display_message, "@Maximum Count Of Faction: {reg1}"),
	     (assign, reg1, ":max_troop"),
	     #(display_message, "@Maximum Count Of Troops: {reg1}"),
	     (store_div, ":max", ":max_troop", ":max_faction"),
	     (assign, reg1, ":max"),
	     #(display_message, "@Maximum Count Of Troops After Divide: {reg1}"),
	     (player_get_team_no, ":cur_team", ":player_no"),
	     (try_begin),
	       (eq, ":cur_team", 0),
		   (val_mul, ":max", "$g_vikingr_team_1_count"),
	     (else_try),
		   (eq, ":cur_team", 1),
	       (val_mul, ":max", "$g_vikingr_team_2_count"),
	     (try_end),
	     (troop_get_slot, ":troop_amount", ":troop", 301),
	     (val_mul, ":troop_amount", 100),
	     (val_sub, ":max", ":troop_amount"),
	     (val_add, ":max", 100),
	     (val_div, ":max", 100),
	   (else_try),
	     (troop_get_slot, ":leader", ":troop", 301),
		 (eq, ":leader", 0),
	     (assign, ":max", 1),
	   (else_try),
		 (eq, ":max_troop", -2),
	     (assign, ":max", 1),
	   (try_end),
	   (assign, reg1, ":max"),
	   #(display_message, "@Maximum Count: {reg1}"),
	   (gt, ":max", 0),
	 ]),   

("troop_limit_variables",
	 [
	 
	 # CHANGE ONLY THIS VARIABLES TO SET THE TROOP LIMIT PERCENTAGES
	 
	 (troop_set_slot, "trp_bueskytter_multiplayer", 300, 100),
	 (troop_set_slot, "trp_hersir_multiplayer", 300, -2),
	 (troop_set_slot, "trp_berserkr_multiplayer", 300, 80),
	 (troop_set_slot, "trp_chieftain_multiplayer", 300, -1), # Leader
	 (troop_set_slot, "trp_ceorl_multiplayer", 300, 100),
	 (troop_set_slot, "trp_thegn_multiplayer", 300, -2),
	 (troop_set_slot, "trp_huscarl_multiplayer", 300, 70),
	 (troop_set_slot, "trp_earl_multiplayer", 300, -1), # Leader
   ]),

############################################################################
 # Troop Limitations End (From Jerkuh)
############################################################################

The last script troop_limit_variables poses the percentages as you can read.
For every troop you use in the multiplayer you need to add some of these Lines.

Code:
	 (troop_set_slot, "trp_huscarl_multiplayer", 300, 70),
	 (troop_set_slot, "trp_huscarl_multiplayer", 301, 0),

The First thing you need to do is change "trp_huscarl_multiplayer" to the troop you use in the multiplayer.
This counts for both of the troop_set_slot operations.
After the troop id comes the slot, 300, you may not change them, if you do so the other part of the script will not work propperly.
The 70 is the percentage of the amount of people that can select the troop.
You can change the percentage between 0 and 100 to use the limitations.
If you change it to -1 it will act as i call a leader troop.
When it is -1 it will not allow more than 1 player to have that troop.
-2 is Unlimited so all the players can sellect that troop.

Change this

Code:
  #script_game_quick_start
  # This script is called from the game engine for initializing the global variables for tutorial, multiplayer and custom battle modes.
  # INPUT:
  # none
  # OUTPUT:
  # none
  ("game_quick_start",
    [
	  #for quick battle mode
      (assign, "$g_is_quick_battle", 0),
      (assign, "$g_quick_battle_game_type", 0),
      (assign, "$g_quick_battle_troop", quick_battle_troops_begin),
      (assign, "$g_quick_battle_map", quick_battle_scenes_begin),
      (assign, "$g_quick_battle_team_1_faction", "fac_kingdom_1"),
      (assign, "$g_quick_battle_team_2_faction", "fac_kingdom_2"),
      (assign, "$g_quick_battle_army_1_size", 25),
      (assign, "$g_quick_battle_army_2_size", 25),

To

Code:
  #script_game_quick_start
  # This script is called from the game engine for initializing the global variables for tutorial, multiplayer and custom battle modes.
  # INPUT:
  # none
  # OUTPUT:
  # none
  ("game_quick_start",
    [
############################################################################
 # Troop Limitations Begin (From Jerkuh)
############################################################################ 
     (call_script, "script_troop_limit_variables"),
############################################################################
 # Troop Limitations End (From Jerkuh)
############################################################################ 
	  #for quick battle mode
      (assign, "$g_is_quick_battle", 0),
      (assign, "$g_quick_battle_game_type", 0),
      (assign, "$g_quick_battle_troop", quick_battle_troops_begin),
      (assign, "$g_quick_battle_map", quick_battle_scenes_begin),
      (assign, "$g_quick_battle_team_1_faction", "fac_kingdom_1"),
      (assign, "$g_quick_battle_team_2_faction", "fac_kingdom_2"),
      (assign, "$g_quick_battle_army_1_size", 25),
      (assign, "$g_quick_battle_army_2_size", 25),

Change this

Code:
      (else_try),
        (eq, ":event_type", multiplayer_event_change_troop_id),
        (store_script_param, ":value", 3),
        #troop-faction validity check
        (try_begin),
          (eq, ":value", -1),
          (player_set_troop_id, ":player_no", -1),
        (else_try),
          (is_between, ":value", multiplayer_troops_begin, multiplayer_troops_end),
          (player_get_team_no, ":player_team", ":player_no"),
          (is_between, ":player_team", 0, multi_team_spectator),
          (team_get_faction, ":team_faction", ":player_team"),
          (store_troop_faction, ":new_troop_faction", ":value"),
          (eq, ":new_troop_faction", ":team_faction"),
          (player_set_troop_id, ":player_no", ":value"),
          (call_script, "script_multiplayer_clear_player_selected_items", ":player_no"),
        (try_end),

To

Code:
      (else_try),
        (eq, ":event_type", multiplayer_event_change_troop_id),
        (store_script_param, ":value", 3),
        #troop-faction validity check
        (try_begin),
          (eq, ":value", -1),
          (player_set_troop_id, ":player_no", -1),
        (else_try),
          (is_between, ":value", multiplayer_troops_begin, multiplayer_troops_end),
          (player_get_team_no, ":player_team", ":player_no"),
          (is_between, ":player_team", 0, multi_team_spectator),
          (team_get_faction, ":team_faction", ":player_team"),
          (store_troop_faction, ":new_troop_faction", ":value"),
          (eq, ":new_troop_faction", ":team_faction"),

############################################################################
 # Troop Limitations Begin (From Jerkuh)
############################################################################ 
          (call_script, "script_cf_troop_room", ":player_no", ":value"),
############################################################################
 # Troop Limitations End (From Jerkuh)
############################################################################

          (player_set_troop_id, ":player_no", ":value"),
          (call_script, "script_multiplayer_clear_player_selected_items", ":player_no"),
        (try_end),

Change this

Code:
      (else_try),
        (eq, ":event_type", multiplayer_event_admin_set_disallow_ranged_weapons),
        (try_begin),
          (store_script_param, ":value", 3),
          #validity check
          (player_is_admin, ":player_no"),
          (is_between, ":value", 0, 2),
          #condition checks are done
          (assign, "$g_multiplayer_disallow_ranged_weapons", ":value"),
        (try_end),
      (else_try),
        ###############
        #CLIENT EVENTS#
        ###############

To

Code:
      (else_try),
        (eq, ":event_type", multiplayer_event_admin_set_disallow_ranged_weapons),
        (try_begin),
          (store_script_param, ":value", 3),
          #validity check
          (player_is_admin, ":player_no"),
          (is_between, ":value", 0, 2),
          #condition checks are done
          (assign, "$g_multiplayer_disallow_ranged_weapons", ":value"),
        (try_end), 
 
############################################################################
 # Troop Limitations Begin (From Jerkuh)
############################################################################

      (else_try),
            (eq, ":event_type", multiplayer_event_admin_set_troop_perc),
       (player_is_admin, ":player_no"),
            (store_script_param,":cur_troop",3),
            (store_script_param,":value",4),
       (troop_set_slot, ":cur_troop", 300, ":value"),
      
       (get_max_players, ":num_players"),
       (try_for_range, ":cur_player", 1, ":num_players"),
        (player_is_active, ":cur_player"),
        (multiplayer_send_2_int_to_player, ":cur_player", multiplayer_event_set_limitations, ":cur_troop", ":value"),
       (try_end),
       
############################################################################
 # Troop Limitations End (From Jerkuh)
############################################################################

      (else_try),
        ###############
        #CLIENT EVENTS#
        ###############

Change this

Code:
        (else_try),
          (eq, ":event_type", multiplayer_event_cancel_duel),
          (store_script_param, ":value", 3),
          (try_begin),
            (agent_is_active, ":value"),
            (agent_get_player_id, ":value_player_no", ":value"),
            (try_begin),
              (player_is_active, ":value_player_no"),
              (str_store_player_username, s0, ":value_player_no"),
            (else_try),
              (str_store_agent_name, s0, ":value"),
            (try_end),
            (display_message, "str_your_duel_with_s0_is_cancelled"),
          (try_end),
          (try_begin),
            (get_player_agent_no, ":player_agent"),
            (agent_is_active, ":player_agent"),
            (agent_set_slot, ":player_agent", slot_agent_in_duel_with, -1),
            (agent_clear_relations_with_agents, ":player_agent"),
          (try_end),
        (else_try),
          (eq, ":event_type", multiplayer_event_show_server_message),
          (display_message, "str_server_s0", 0xFFFF6666),
        (try_end),
     ]),

To

Code:
        (else_try),
          (eq, ":event_type", multiplayer_event_cancel_duel),
          (store_script_param, ":value", 3),
          (try_begin),
            (agent_is_active, ":value"),
            (agent_get_player_id, ":value_player_no", ":value"),
            (try_begin),
              (player_is_active, ":value_player_no"),
              (str_store_player_username, s0, ":value_player_no"),
            (else_try),
              (str_store_agent_name, s0, ":value"),
            (try_end),
            (display_message, "str_your_duel_with_s0_is_cancelled"),
          (try_end),
          (try_begin),
            (get_player_agent_no, ":player_agent"),
            (agent_is_active, ":player_agent"),
            (agent_set_slot, ":player_agent", slot_agent_in_duel_with, -1),
            (agent_clear_relations_with_agents, ":player_agent"),
          (try_end),
        (else_try),
          (eq, ":event_type", multiplayer_event_show_server_message),
          (display_message, "str_server_s0", 0xFFFF6666),
############################################################################
 # Troop Limitations Begin (From Jerkuh)
############################################################################ 
        (else_try),
          (eq, ":event_type", multiplayer_event_set_limitations),
          (store_script_param, ":troop", 3),
          (store_script_param, ":perc", 4),
		  (troop_set_slot, ":troop", 300, ":perc"),
############################################################################
 # Troop Limitations End (From Jerkuh)
############################################################################
        (try_end),
     ]),

Change this

Code:
  #script_multiplayer_send_initial_information
  # Input: arg1 = player_no
  # Output: none
  ("multiplayer_send_initial_information",
   [
     (store_script_param, ":player_no", 1),
          
     (multiplayer_send_2_int_to_player, ":player_no", multiplayer_event_return_num_bots_in_team, 1, "$g_multiplayer_num_bots_team_1"),
     (multiplayer_send_2_int_to_player, ":player_no", multiplayer_event_return_num_bots_in_team, 2, "$g_multiplayer_num_bots_team_2"),
     (multiplayer_send_int_to_player, ":player_no", multiplayer_event_return_auto_team_balance_limit, "$g_multiplayer_auto_team_balance_limit"),
     (multiplayer_send_int_to_player, ":player_no", multiplayer_event_return_num_bots_voteable, "$g_multiplayer_num_bots_voteable"),
     (multiplayer_send_int_to_player, ":player_no", multiplayer_event_return_factions_voteable, "$g_multiplayer_factions_voteable"),
     (multiplayer_send_int_to_player, ":player_no", multiplayer_event_return_maps_voteable, "$g_multiplayer_maps_voteable"),
     (multiplayer_send_int_to_player, ":player_no", multiplayer_event_return_kick_voteable, "$g_multiplayer_kick_voteable"),
     (multiplayer_send_int_to_player, ":player_no", multiplayer_event_return_ban_voteable, "$g_multiplayer_ban_voteable"),
     (multiplayer_send_int_to_player, ":player_no", multiplayer_event_return_allow_player_banners, "$g_multiplayer_allow_player_banners"),
     (multiplayer_send_int_to_player, ":player_no", multiplayer_event_return_force_default_armor, "$g_multiplayer_force_default_armor"),
     (multiplayer_send_int_to_player, ":player_no", multiplayer_event_return_disallow_ranged_weapons, "$g_multiplayer_disallow_ranged_weapons"),
     (multiplayer_send_int_to_player, ":player_no", multiplayer_event_return_respawn_period, "$g_multiplayer_respawn_period"),
     (multiplayer_send_int_to_player, ":player_no", multiplayer_event_return_round_max_seconds, "$g_multiplayer_round_max_seconds"),
     (multiplayer_send_int_to_player, ":player_no", multiplayer_event_return_game_type, "$g_multiplayer_game_type"),
     (multiplayer_send_int_to_player, ":player_no", multiplayer_event_return_player_respawn_as_bot, "$g_multiplayer_player_respawn_as_bot"),

To

Code:
  #script_multiplayer_send_initial_information
  # Input: arg1 = player_no
  # Output: none
  ("multiplayer_send_initial_information",
   [
     (store_script_param, ":player_no", 1),
############################################################################
 # Troop Limitations Begin (From Jerkuh)
############################################################################ 
     (try_for_range, ":cur_troop", "trp_bueskytter_multiplayer", "trp_multiplayer_end"),
	   (troop_get_slot, ":cur_perc", ":cur_troop", 300),
	   (multiplayer_send_2_int_to_player, ":player_no", multiplayer_event_set_limitations, ":cur_troop", ":cur_perc"),
	 (try_end),
############################################################################
 # Troop Limitations End (From Jerkuh)
############################################################################ 
          
     (multiplayer_send_2_int_to_player, ":player_no", multiplayer_event_return_num_bots_in_team, 1, "$g_multiplayer_num_bots_team_1"),
     (multiplayer_send_2_int_to_player, ":player_no", multiplayer_event_return_num_bots_in_team, 2, "$g_multiplayer_num_bots_team_2"),
     (multiplayer_send_int_to_player, ":player_no", multiplayer_event_return_auto_team_balance_limit, "$g_multiplayer_auto_team_balance_limit"),
     (multiplayer_send_int_to_player, ":player_no", multiplayer_event_return_num_bots_voteable, "$g_multiplayer_num_bots_voteable"),
     (multiplayer_send_int_to_player, ":player_no", multiplayer_event_return_factions_voteable, "$g_multiplayer_factions_voteable"),
     (multiplayer_send_int_to_player, ":player_no", multiplayer_event_return_maps_voteable, "$g_multiplayer_maps_voteable"),
     (multiplayer_send_int_to_player, ":player_no", multiplayer_event_return_kick_voteable, "$g_multiplayer_kick_voteable"),
     (multiplayer_send_int_to_player, ":player_no", multiplayer_event_return_ban_voteable, "$g_multiplayer_ban_voteable"),
     (multiplayer_send_int_to_player, ":player_no", multiplayer_event_return_allow_player_banners, "$g_multiplayer_allow_player_banners"),
     (multiplayer_send_int_to_player, ":player_no", multiplayer_event_return_force_default_armor, "$g_multiplayer_force_default_armor"),
     (multiplayer_send_int_to_player, ":player_no", multiplayer_event_return_disallow_ranged_weapons, "$g_multiplayer_disallow_ranged_weapons"),
     (multiplayer_send_int_to_player, ":player_no", multiplayer_event_return_respawn_period, "$g_multiplayer_respawn_period"),
     (multiplayer_send_int_to_player, ":player_no", multiplayer_event_return_round_max_seconds, "$g_multiplayer_round_max_seconds"),
     (multiplayer_send_int_to_player, ":player_no", multiplayer_event_return_game_type, "$g_multiplayer_game_type"),
     (multiplayer_send_int_to_player, ":player_no", multiplayer_event_return_player_respawn_as_bot, "$g_multiplayer_player_respawn_as_bot"),

Module_presentations

Change this

Code:
      (assign, ":cur_troop_index", 0),
      (try_for_range, ":troop_no", multiplayer_troops_begin, multiplayer_troops_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),
      ]),

To

Code:
      (assign, ":cur_troop_index", 0),
      (try_for_range, ":troop_no", multiplayer_troops_begin, multiplayer_troops_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),
############################################################################
 # Troop Limitations Begin (From Jerkuh)
############################################################################ 
        (try_begin),
          (call_script, "script_cf_troop_room", ":my_player_no", ":troop_no"),
          (overlay_set_color, reg0, 0xFFFFFF),
          (overlay_set_hilight_color, reg0, 0x55FF50),
        (else_try),
          (overlay_set_color, reg0, 0x888888),
          (overlay_set_hilight_color, reg0, 0x888888),
        (try_end),
############################################################################
 # Troop Limitations End (From Jerkuh)
############################################################################ 
        (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),
      ]),

Change this

Code:
        (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),
      ]),

To

Code:
        (try_begin),
          (multiplayer_get_my_troop, ":troop_no"),
          (neq, ":troop_no", ":selected_troop_no"),
############################################################################
 # Troop Limitations Begin (From Jerkuh)
############################################################################ 
		  (call_script, "script_cf_troop_room", ":my_player_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"),
		  (assign, ":room", 1),
        (try_end),
        (try_begin),
		  (eq,":room", 1),
          (presentation_set_duration, 0),
          (assign, "$g_presentation_state", 0),
          (start_presentation, "prsnt_multiplayer_item_select"),
          (assign, ":end_cond", 0), #break
        (else_try),
          (presentation_set_duration, 0),
          (start_presentation, "prsnt_multiplayer_troop_select"),
		(try_end),
############################################################################
 # Troop Limitations End (From Jerkuh)
############################################################################ 
      (try_end),
      ]),

Change this

Code:
      (create_text_overlay, reg0, "str_force_default_armor", 0),
      (position_set_x, pos1, 30),
      (position_set_y, pos1, ":cur_y"),
      (overlay_set_position, reg0, pos1),

      (create_check_box_overlay, "$g_presentation_obj_admin_panel_40", "mesh_checkbox_off", "mesh_checkbox_on"),
      (position_set_x, pos1, 7),
      (store_add, ":special_cur_y", ":cur_y", 7),
      (position_set_y, pos1, ":special_cur_y"),
      (overlay_set_position, "$g_presentation_obj_admin_panel_40", pos1),
      (overlay_set_val, "$g_presentation_obj_admin_panel_40", "$g_multiplayer_force_default_armor"),

      (set_container_overlay, -1),

To

Code:
      (create_text_overlay, reg0, "str_force_default_armor", 0),
      (position_set_x, pos1, 30),
      (position_set_y, pos1, ":cur_y"),
      (overlay_set_position, reg0, pos1),

      (create_check_box_overlay, "$g_presentation_obj_admin_panel_40", "mesh_checkbox_off", "mesh_checkbox_on"),
      (position_set_x, pos1, 7),
      (store_add, ":special_cur_y", ":cur_y", 7),
      (position_set_y, pos1, ":special_cur_y"),
      (overlay_set_position, "$g_presentation_obj_admin_panel_40", pos1),
      (overlay_set_val, "$g_presentation_obj_admin_panel_40", "$g_multiplayer_force_default_armor"),

############################################################################
 # Troop Limitations Begin (From Jerkuh)
############################################################################

	  (assign, ":cur_troop_index", 0),
      (try_for_range, ":cur_troop", "trp_bueskytter_multiplayer", "trp_multiplayer_end"),
	    (troop_get_slot, ":max_cur", ":cur_troop", 300),
		
        (val_sub, ":cur_y", ":cur_y_adder"),
		
        (str_store_troop_name, s1, ":cur_troop"),
        (create_text_overlay, reg0, s1, 0),
        (position_set_x, pos1, 0),
        (position_set_y, pos1, ":cur_y"),
        (overlay_set_position, reg0, pos1),
		
        (create_slider_overlay, reg0, 0, 100),
		(overlay_set_val, reg0, ":max_cur"),
        (store_add, ":button_index_slot", ":cur_troop_index", multi_data_troop_button_indices_begin),
        (troop_set_slot, "trp_multiplayer_data", ":button_index_slot", reg0),
        (troop_set_slot, ":cur_troop", 302, ":button_index_slot"),
        (position_set_x, pos1, 900),
        (position_set_y, pos1, 1000),
        (overlay_set_size, reg0, pos1),
        (position_set_x, pos1, 390),
        (position_set_y, pos1, ":cur_y"),
        (overlay_set_position, reg0, pos1),
        (val_add, ":cur_troop_index", 1),
      (try_end),
 
############################################################################
 # Troop Limitations End (From Jerkuh)
############################################################################

      (set_container_overlay, -1),

Change this

Code:
      (else_try),
        (eq, ":object", "$g_presentation_obj_admin_panel_41"),
        (multiplayer_send_int_to_server, multiplayer_event_admin_set_anti_cheat, ":value"),
      (else_try),
        (eq, ":object", "$g_presentation_obj_admin_panel_42"),
        (multiplayer_send_int_to_server, multiplayer_event_admin_set_disallow_ranged_weapons, ":value"),
      (try_end),
      ]),

To

Code:
      (else_try),
        (eq, ":object", "$g_presentation_obj_admin_panel_41"),
        (multiplayer_send_int_to_server, multiplayer_event_admin_set_anti_cheat, ":value"),
      (else_try),
        (eq, ":object", "$g_presentation_obj_admin_panel_42"),
        (multiplayer_send_int_to_server, multiplayer_event_admin_set_disallow_ranged_weapons, ":value"),
      (try_end),

############################################################################
 # Troop Limitations Begin (From Jerkuh)
############################################################################

	  (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"),
		(try_for_range, ":cur_troop", "trp_bueskytter_multiplayer", "trp_multiplayer_end"),
		  (troop_slot_eq, ":cur_troop", 302, ":i_button"),
		  (troop_set_slot, ":cur_troop", 300, ":value"),
		  (multiplayer_send_2_int_to_server, multiplayer_event_admin_set_troop_perc, ":cur_troop", ":value"),
		(try_end),
      (try_end),
	  
############################################################################
 # Troop Limitations End (From Jerkuh)
############################################################################

      ]),

Now you neet to change the troop trp_bueskytter_multiplayer in the first troop you use, in this operation.

(try_for_range, ":cur_troop", "trp_bueskytter_multiplayer", "trp_multiplayer_end"),

Change this

Code:
      (create_mesh_overlay, reg0, "mesh_mp_ui_host_main"),
      (position_set_x, pos1, -1),
      (position_set_y, pos1, -1),
      (overlay_set_position, reg0, pos1),
      (position_set_x, pos1, 1002),
      (position_set_y, pos1, 1002),
      (overlay_set_size, reg0, pos1),

      (assign, ":cur_y", 1240),
      (assign, ":cur_y_adder", 40),

To

Code:
      (create_mesh_overlay, reg0, "mesh_mp_ui_host_main"),
      (position_set_x, pos1, -1),
      (position_set_y, pos1, -1),
      (overlay_set_position, reg0, pos1),
      (position_set_x, pos1, 1002),
      (position_set_y, pos1, 1002),
      (overlay_set_size, reg0, pos1),

      (assign, ":cur_y", 1840), # This variable makes the size of the scroller screen, if you have more troops than fit you can change this value to somewhat higher.
      (assign, ":cur_y_adder", 40),

Module_common

Add these lines

Code:
multiplayer_event_admin_set_troop_perc                        = 120
multiplayer_event_set_limitations                             = 121

The numbers dousn’t matter as long as an other value of the multiplayer messages don’t have the same number.

That's about it, you can always PM me if their are troubles or offcourse reply on this topic.
It is last tested in 1.134 for the info.

Later :wink:
 
With a view modifications you can make it server side, then use the server message string stuff to send the message they cant sellect that troop.
And then it is useable in native.
 
I did not quite understand what the script was supposed to do, but I guess it will let you chose how many players that can be in each kind of troop, am I right?

Anyway, really good work jerkuh. This could be used in the 5-side tournament to eliminate cheating.

BTW shouldn't`t you be working on Heroes&Warriors?  :razz:
Just kidding, take your time :wink:
         
 
apsod said:
BTW shouldn't`t you be working on Heroes&Warriors?  :razz:
Just kidding, take your time :wink:
       

We nabbed him for a short period to help us with Vikingr.  :lol:
 
yeah Vikings came in the middle of the night, with there longboats. They lured him out of bed and, took him with them. I haven't seen jerkuh for days!

Btw jerkuh nice job buddy  :grin:
 
Renneko said:
yeah Vikings came in the middle of the night, with there longboats. They lured him out of bed and, took him with them. I haven't seen jerkuh for days!

Btw jerkuh nice job buddy  :grin:
Lol, just like a poet.  :lol:
 
I had some script errors (about 260 to be exact), returning invalid player ID when adjusting the max troop percentages through the admin panel - but it was easily fixed:

In module_scripts;

Previous:

Jerkuh said:
Code:
      (else_try),
        (eq, ":event_type", multiplayer_event_admin_set_disallow_ranged_weapons),
        (try_begin),
          (store_script_param, ":value", 3),
          #validity check
          (player_is_admin, ":player_no"),
          (is_between, ":value", 0, 2),
          #condition checks are done
          (assign, "$g_multiplayer_disallow_ranged_weapons", ":value"),
        (try_end),
 
############################################################################
 # Troop Limitations Begin (From Jerkuh)
############################################################################

       
    (else_try),
      (eq, ":event_type", multiplayer_event_admin_set_troop_perc),
      (player_is_admin, ":player_no"),
        (store_script_param,":cur_troop",3),
        (store_script_param,":value",4),
      (troop_set_slot, ":cur_troop", 300, ":value"),
      
       (get_max_players, ":num_players"),
       (try_for_range, ":cur_player", 0, ":num_players"),
        (multiplayer_send_2_int_to_player, ":cur_player", multiplayer_event_set_limitations, ":cur_troop", ":value"),
      (try_end),
       
############################################################################
 # Troop Limitations End (From Jerkuh)
############################################################################

      (else_try),
        ###############
        #CLIENT EVENTS#
        ###############

Fixed:

Code:
      (else_try),
        (eq, ":event_type", multiplayer_event_admin_set_disallow_ranged_weapons),
        (try_begin),
          (store_script_param, ":value", 3),
          #validity check
          (player_is_admin, ":player_no"),
          (is_between, ":value", 0, 2),
          #condition checks are done
          (assign, "$g_multiplayer_disallow_ranged_weapons", ":value"),
        (try_end),
 
############################################################################
 # Troop Limitations Begin (From Jerkuh)
############################################################################

      (else_try),
            (eq, ":event_type", multiplayer_event_admin_set_troop_perc),
	    (player_is_admin, ":player_no"),
            (store_script_param,":cur_troop",3),
            (store_script_param,":value",4),
	    (troop_set_slot, ":cur_troop", 300, ":value"),
		
	    (get_max_players, ":num_players"),
	    (try_for_range, ":cur_player", 1, ":num_players"),
		  (player_is_active, ":cur_player"),
		  (multiplayer_send_2_int_to_player, ":cur_player", multiplayer_event_set_limitations, ":cur_troop", ":value"),
	    (try_end),
       
############################################################################
 # Troop Limitations End (From Jerkuh)
############################################################################

      (else_try),
        ###############
        #CLIENT EVENTS#
        ###############

These are acceptable mistakes since working under pressure when being in captivity can be quite stressful :twisted:

Jokes aside, many thanks for your help, Jerkuh!


Oh, I also changed the admin panel adjustment entries from an "(create_slider_overlay, reg0, 0, 100)," to "(create_number_box_overlay, reg0, -2, 100)," which means that you get a number box instead of a slider and you will be able to set a troop to unlimited (-2).

And I also moved the calling of the "script_troop_limit_variables" -script from the "multiplayer_server_before_mission_start_common" -event to the "game_quick_start" -script which means that you don't have to start a map before you can see the default values; they will appear as soon as you click "Host Game".
 
Turanien said:
apsod said:
BTW shouldn't`t you be working on Heroes&Warriors?  :razz:
Just kidding, take your time :wink:
       

We nabbed him for a short period to help us with Vikingr.  :lol:
Oh that's why I saw a bunch of vikings and a professor running outside my house last night. It was just the vikings needing some help at making a viking mod :lol:

I am used to see vikings running by my window here in Norway, but not at night and whit professors :razz:
 
There seems to be a problem adjusting the troop limits to anything other than the default ones. It results in people choosing restricted (or full) classes, getting on through the items selection menu but then not being able to spawn. At other times one player can choose a class while another cannot (at the same time). My guess is that there's something not quite right with the server-to-client network messages. Haven't found the source of the problem yet though.

It does however appear to work with the default values; which is an awesome thing in itself :smile:
 
Back
Top Bottom