Limiting equipable items in multiplayer

Users who are viewing this thread

Larken

Sergeant
I've started playing around with modelling and figure I'd aim towards having two playable factions in a multiplayer game. I've modelled and scripted in a powerful throwing spear for one of the factions that I'd like to make available for free to them, however I would also like them to only be able to equip 2 of these spears. If I set the quantity to two, some people would equip 6 or 8 and I do not want that.


So my question is; is there a way that has already been discovered to limit an equippable weapon to a specific item slot, or limit the number of times it can be equipped? It'd be cool to limit players to one stack of javelins or to only one shield, and I figured I'd ask you guys if something has already been found before I start digging through the module system for the armour equipping code  :grin:.
 
Yes, it is. Let's see if I can make this make sense :razz:

In module_scripts, find:
script_multiplayer_set_default_item_selections_for_troop
My edited version of it looks like this (compare with the original):
Code:
  ("multiplayer_set_default_item_selections_for_troop",
   [
     (store_script_param, ":troop_no", 1),
     (multiplayer_get_my_player, ":my_player_no"),
     (try_for_range, ":i_item", slot_player_selected_item_indices_begin, slot_player_selected_item_indices_end),
       (player_set_slot, ":my_player_no", ":i_item", -1),
     (try_end),
     (assign, ":cur_weapon_slot", 0),
     (troop_get_inventory_capacity, ":inv_cap", ":troop_no"),
     (try_for_range, ":i_slot", 0, ":inv_cap"),
       (troop_get_inventory_slot, ":item_id", ":troop_no", ":i_slot"),
       (ge, ":item_id", 0),
       (item_get_slot, ":item_class", ":item_id", slot_item_multiplayer_item_class),
       (try_begin),
         (is_between, ":item_class", multi_item_class_type_bow, multi_item_class_type_arrow),
         (store_add, ":selected_item_slot", slot_player_selected_item_indices_begin, 0),
         (player_set_slot, ":my_player_no", ":selected_item_slot", ":item_id"),
       (else_try),
         (is_between, ":item_class", multi_item_class_type_sword, multi_item_class_type_spear),
         (store_add, ":selected_item_slot", slot_player_selected_item_indices_begin, 1),
         (player_set_slot, ":my_player_no", ":selected_item_slot", ":item_id"),
       (else_try),
         (is_between, ":item_class", multi_item_class_type_arrow, multi_item_class_type_horse),
         (store_add, ":selected_item_slot", slot_player_selected_item_indices_begin, 2),
         (player_set_slot, ":my_player_no", ":selected_item_slot", ":item_id"),
       (else_try),
         (is_between, ":item_class", multi_item_class_type_spear, multi_item_class_type_shields_end),
         (store_add, ":selected_item_slot", slot_player_selected_item_indices_begin, 3),
         (player_set_slot, ":my_player_no", ":selected_item_slot", ":item_id"),
       (else_try),
         (is_between, ":item_class", multi_item_class_type_heads_begin, multi_item_class_type_heads_end),
         (store_add, ":selected_item_slot", slot_player_selected_item_indices_begin, 4),
         (player_set_slot, ":my_player_no", ":selected_item_slot", ":item_id"),
       (else_try),
         (is_between, ":item_class", multi_item_class_type_bodies_begin, multi_item_class_type_bodies_end),
         (store_add, ":selected_item_slot", slot_player_selected_item_indices_begin, 5),
         (player_set_slot, ":my_player_no", ":selected_item_slot", ":item_id"),
       (else_try),
         (is_between, ":item_class", multi_item_class_type_feet_begin, multi_item_class_type_feet_end),
         (store_add, ":selected_item_slot", slot_player_selected_item_indices_begin, 6),
         (player_set_slot, ":my_player_no", ":selected_item_slot", ":item_id"),
       (else_try),
         (is_between, ":item_class", multi_item_class_type_gloves_begin, multi_item_class_type_gloves_end),
         (store_add, ":selected_item_slot", slot_player_selected_item_indices_begin, 7),
         (player_set_slot, ":my_player_no", ":selected_item_slot", ":item_id"),
       (else_try),
         (is_between, ":item_class", multi_item_class_type_horses_begin, multi_item_class_type_horses_end),
         (store_add, ":selected_item_slot", slot_player_selected_item_indices_begin, 8),
         (player_set_slot, ":my_player_no", ":selected_item_slot", ":item_id"),
       (try_end),
     (try_end),
     ]),
Basically I made all the weapons slots unique for different weapons (the mod in question is a musket mod, so all the slots might not make that much sense. Basically it's 1: Muskets+Lances, 2: Swords, 3: Ammo, 4: Banners (Replacing shields)). You should make one of those slots throwing only, and disable it for the other slots. I'm sure you can figure out how it's done. To make it only for a certain weapon you'd have to put that weapon in a unique group. All the multi_item_class_type_whatever things are in header_common :smile:

Then there's an entry in module_presentations. It's in the middle of the item selections code (which is veeery long) but search for script_multiplayer_display_available_items_for_troop_and_item_classes and you should find it.
Here's what I did (again, use the original for comparison):
Code:
      (try_begin),
        (eq, "$g_presentation_state", 1),
        (call_script, "script_multiplayer_display_available_items_for_troop_and_item_classes", ":my_troop_no", multi_item_class_type_bow, multi_item_class_type_arrow, 781, 474),
        (create_mesh_overlay, reg0, "mesh_mp_inventory_right_arrow"),
        (position_set_x, pos1, 800),
        (position_set_y, pos1, 800),
        (overlay_set_size, reg0, pos1),
        (position_set_x, pos1, 881),
        (position_set_y, pos1, 515),
        (overlay_set_position, reg0, pos1),
      (else_try),
        (eq, "$g_presentation_state", 2),
        (call_script, "script_multiplayer_display_available_items_for_troop_and_item_classes", ":my_troop_no", multi_item_class_type_sword, multi_item_class_type_spear, 781, 374),
        (create_mesh_overlay, reg0, "mesh_mp_inventory_right_arrow"),
        (position_set_x, pos1, 800),
        (position_set_y, pos1, 800),
        (overlay_set_size, reg0, pos1),
        (position_set_x, pos1, 881),
        (position_set_y, pos1, 415),
        (overlay_set_position, reg0, pos1),
      (else_try),
        (eq, "$g_presentation_state", 3),
        (call_script, "script_multiplayer_display_available_items_for_troop_and_item_classes", ":my_troop_no", multi_item_class_type_arrow, multi_item_class_type_horse, 781, 274),
        (create_mesh_overlay, reg0, "mesh_mp_inventory_right_arrow"),
        (position_set_x, pos1, 800),
        (position_set_y, pos1, 800),
        (overlay_set_size, reg0, pos1),
        (position_set_x, pos1, 881),
        (position_set_y, pos1, 315),
        (overlay_set_position, reg0, pos1),
      (else_try),
        (eq, "$g_presentation_state", 4),
        (call_script, "script_multiplayer_display_available_items_for_troop_and_item_classes", ":my_troop_no", multi_item_class_type_spear, multi_item_class_type_shields_end, 781, 174),
        (create_mesh_overlay, reg0, "mesh_mp_inventory_right_arrow"),
        (position_set_x, pos1, 800),
        (position_set_y, pos1, 800),
        (overlay_set_size, reg0, pos1),
        (position_set_x, pos1, 881),
        (position_set_y, pos1, 215),
        (overlay_set_position, reg0, pos1),
      (else_try),
        (eq, "$g_presentation_state", 5),
        (call_script, "script_multiplayer_display_available_items_for_troop_and_item_classes", ":my_troop_no", multi_item_class_type_heads_begin, multi_item_class_type_heads_end, 117, 524),
        (create_mesh_overlay, reg0, "mesh_mp_inventory_left_arrow"),
        (position_set_x, pos1, 800),
        (position_set_y, pos1, 800),
        (overlay_set_size, reg0, pos1),
        (position_set_x, pos1, 106),
        (position_set_y, pos1, 565),
        (overlay_set_position, reg0, pos1),
      (else_try),
        (eq, "$g_presentation_state", 6),
        (call_script, "script_multiplayer_display_available_items_for_troop_and_item_classes", ":my_troop_no", multi_item_class_type_bodies_begin, multi_item_class_type_bodies_end, 117, 424),
        (create_mesh_overlay, reg0, "mesh_mp_inventory_left_arrow"),
        (position_set_x, pos1, 800),
        (position_set_y, pos1, 800),
        (overlay_set_size, reg0, pos1),
        (position_set_x, pos1, 106),
        (position_set_y, pos1, 465),
        (overlay_set_position, reg0, pos1),
      (else_try),
        (eq, "$g_presentation_state", 7),
        (call_script, "script_multiplayer_display_available_items_for_troop_and_item_classes", ":my_troop_no", multi_item_class_type_feet_begin, multi_item_class_type_feet_end, 117, 324),
        (create_mesh_overlay, reg0, "mesh_mp_inventory_left_arrow"),
        (position_set_x, pos1, 800),
        (position_set_y, pos1, 800),
        (overlay_set_size, reg0, pos1),
        (position_set_x, pos1, 106),
        (position_set_y, pos1, 365),
        (overlay_set_position, reg0, pos1),
      (else_try),
        (eq, "$g_presentation_state", 8),
        (call_script, "script_multiplayer_display_available_items_for_troop_and_item_classes", ":my_troop_no", multi_item_class_type_gloves_begin, multi_item_class_type_gloves_end, 117, 224),
        (create_mesh_overlay, reg0, "mesh_mp_inventory_left_arrow"),
        (position_set_x, pos1, 800),
        (position_set_y, pos1, 800),
        (overlay_set_size, reg0, pos1),
        (position_set_x, pos1, 106),
        (position_set_y, pos1, 265),
        (overlay_set_position, reg0, pos1),
      (else_try),
        (eq, "$g_presentation_state", 9),
        (call_script, "script_multiplayer_display_available_items_for_troop_and_item_classes", ":my_troop_no", multi_item_class_type_horses_begin, multi_item_class_type_horses_end, 117, 124),
        (create_mesh_overlay, reg0, "mesh_mp_inventory_left_arrow"),
        (position_set_x, pos1, 800),
        (position_set_y, pos1, 800),
        (overlay_set_size, reg0, pos1),
        (position_set_x, pos1, 106),
        (position_set_y, pos1, 165),
        (overlay_set_position, reg0, pos1),
      (try_end),
I think you can figure out the rest.

Hope it helped :smile:
 
Thanks Beaver, that worked perfectly. I now have a mod where the player can equip at most one shield, and at most one lot of throwing weapons or ammunition. I hadn't found the code in the module_presentations and header_common files yet, you just saved me a lot of time!  :grin:
 
Damn, I just did this a short while ago on my own, could have saved some time by waiting and letting Beaver do all the work :razz:
 
I limited the default equipment and selection for weapons in multiplayer, so that specific slots can have only a specific range of weapon, following the instructions of beaver here and implementing it according to my case.
1. Slot: Primary Weapon (2h-swords and axes, Spears, Bows, Crossbows)
2. Slot: Secondary Weapon (1h-swords, -axes and Maces)
3. Slot: Equipment 1 (Shields, Arrows, Bolts, Throwables)
4. Slot: Equipment 2 (Arrows, Bolts, Throwables)
Code:
  ("multiplayer_set_default_item_selections_for_troop",[
     (store_script_param, ":troop_no", 1),
     (multiplayer_get_my_player, ":my_player_no"),
     (call_script, "script_multiplayer_clear_player_selected_items", ":my_player_no"),
     #(assign, ":cur_weapon_slot", 0),
     (troop_get_inventory_capacity, ":inv_cap", ":troop_no"),
     (try_for_range, ":i_slot", 0, ":inv_cap"),
       (troop_get_inventory_slot, ":item_id", ":troop_no", ":i_slot"),
       (ge, ":item_id", 0),
       (item_get_slot, ":item_class", ":item_id", slot_item_multiplayer_item_class),
       (try_begin),
         (is_between, ":item_class", multi_item_class_type_cleavers, multi_item_class_type_small_shield),
         (store_add, ":selected_item_slot", slot_player_selected_item_indices_begin, 0),
         (player_set_slot, ":my_player_no", ":selected_item_slot", ":item_id"),
       (else_try),
         (is_between, ":item_class", multi_item_class_type_sword, multi_item_class_type_cleavers),
         (store_add, ":selected_item_slot", slot_player_selected_item_indices_begin, 1),
         (player_set_slot, ":my_player_no", ":selected_item_slot", ":item_id"),
       (else_try),
         (is_between, ":item_class", multi_item_class_type_small_shield, multi_item_class_type_horse),
         (store_add, ":selected_item_slot", slot_player_selected_item_indices_begin, 2),
         (player_set_slot, ":my_player_no", ":selected_item_slot", ":item_id"),
       (else_try),
         (is_between, ":item_class", multi_item_class_type_arrow, multi_item_class_type_horse),
         (store_add, ":selected_item_slot", slot_player_selected_item_indices_begin, 3),
         (player_set_slot, ":my_player_no", ":selected_item_slot", ":item_id"),
       (else_try),
         (is_between, ":item_class", multi_item_class_type_heads_begin, multi_item_class_type_heads_end),
         (store_add, ":selected_item_slot", slot_player_selected_item_indices_begin, 4),
         (player_set_slot, ":my_player_no", ":selected_item_slot", ":item_id"),
       (else_try),
         (is_between, ":item_class", multi_item_class_type_bodies_begin, multi_item_class_type_bodies_end),
         (store_add, ":selected_item_slot", slot_player_selected_item_indices_begin, 5),
         (player_set_slot, ":my_player_no", ":selected_item_slot", ":item_id"),
       (else_try),
         (is_between, ":item_class", multi_item_class_type_feet_begin, multi_item_class_type_feet_end),
         (store_add, ":selected_item_slot", slot_player_selected_item_indices_begin, 6),
         (player_set_slot, ":my_player_no", ":selected_item_slot", ":item_id"),
       (else_try),
         (is_between, ":item_class", multi_item_class_type_gloves_begin, multi_item_class_type_gloves_end),
         (store_add, ":selected_item_slot", slot_player_selected_item_indices_begin, 7),
         (player_set_slot, ":my_player_no", ":selected_item_slot", ":item_id"),
       (else_try),
         (is_between, ":item_class", multi_item_class_type_horses_begin, multi_item_class_type_horses_end),
         (eq, "$g_horses_are_avaliable", 1),
         (store_add, ":selected_item_slot", slot_player_selected_item_indices_begin, 8),
         (player_set_slot, ":my_player_no", ":selected_item_slot", ":item_id"),
       (try_end),
     (try_end),
     ]),
I changed the sorting at header_common a bit to have it easier with the codelines above
Code:
#multi_item_class_type_other = 0
multi_item_class_type_sword = 1
multi_item_class_type_axe = 2
multi_item_class_type_blunt = 3
multi_item_class_type_war_picks = 4
multi_item_class_type_cleavers = 5
multi_item_class_type_two_handed_sword = 6
multi_item_class_type_two_handed_axe = 7
multi_item_class_type_spear = 8
multi_item_class_type_lance = 9
multi_item_class_type_bow = 10 #before 12
multi_item_class_type_crossbow = 11 #before 13
multi_item_class_type_small_shield = 12 #before 10
multi_item_class_type_large_shield = 13 #before 11
multi_item_class_type_arrow = 14
multi_item_class_type_bolt = 15
multi_item_class_type_throwing = 16
multi_item_class_type_throwing_axe = 17
multi_item_class_type_horse = 18
multi_item_class_type_heavy_horse = 19
multi_item_class_type_light_armor = 20
multi_item_class_type_medium_armor = 21
multi_item_class_type_heavy_armor = 22
multi_item_class_type_light_helm = 23
multi_item_class_type_medium_helm = 24
multi_item_class_type_heavy_helm = 25
multi_item_class_type_light_foot = 26
multi_item_class_type_heavy_foot = 27
multi_item_class_type_glove = 28
At my mod I have troops with default items and there some classes come with sometimes two sets of arrows or a shield and a throwing knife for example. Now only the third slot gets filled up and the fourth gets ignored (weapon selection works normally as intended though), so I have only the shield but no throwing knives or only one set of arrows instead of two. How can I change this or does someone know what I missed?
 
Hi @Earendil, something coded according to your specifications with native 'header_common' as a reference. Check that it has logic for you and tell me.
Code:
	# script_multiplayer_set_default_item_selections_for_troop
	# INPUT: arg1 = troop_no
	# OUTPUT: none
	("multiplayer_set_default_item_selections_for_troop",
		[
			(store_script_param_1, ":troop_no"),
			
			(multiplayer_get_my_player, ":my_player_no"),
			(call_script, "script_multiplayer_clear_player_selected_items", ":my_player_no"),

			(assign, ":num_item_extra", 0),
			(assign, ":num_item_shield", 0),
			(troop_get_inventory_capacity, ":inv_cap", ":troop_no"),
			(try_for_range, ":i_slot", 0, ":inv_cap"),
				(troop_get_inventory_slot, ":item_id", ":troop_no", ":i_slot"),
				(ge, ":item_id", 0),
				(item_get_slot, ":item_class", ":item_id", slot_item_multiplayer_item_class),

				(try_begin),
					(is_between, ":item_class", multi_item_class_type_weapons_begin, multi_item_class_type_weapons_end),
					(this_or_next|eq, "$g_multiplayer_disallow_ranged_weapons", 0),
					(neg|is_between, ":item_class", multi_item_class_type_ranged_weapons_begin, multi_item_class_type_ranged_weapons_end),

					(try_begin), #2h-swords and axes, Spears, Lances, Bows, Crossbows
						(this_or_next|is_between, ":item_class", multi_item_class_type_two_handed_sword, multi_item_class_type_small_shield),
						(is_between, ":item_class", multi_item_class_type_bow, multi_item_class_type_arrow),
						(store_add, ":selected_item_slot", slot_player_selected_item_indices_begin, 0),
						(player_set_slot, ":my_player_no", ":selected_item_slot", ":item_id"),
					(else_try), #1h-swords, axes and Maces
						(is_between, ":item_class", multi_item_class_type_sword, multi_item_class_type_two_handed_sword),
						(store_add, ":selected_item_slot", slot_player_selected_item_indices_begin, 1),
						(player_set_slot, ":my_player_no", ":selected_item_slot", ":item_id"),
					(else_try), #Shields
						(is_between, ":item_class", multi_item_class_type_small_shield, multi_item_class_type_bow),
						(store_add, ":selected_item_slot", slot_player_selected_item_indices_begin, 2),
						(player_set_slot, ":my_player_no", ":selected_item_slot", ":item_id"),
						(val_add, ":num_item_shield", 1), #retrieve number of items shield
					(else_try), #Arrows, Bolts, Throwables
						(is_between, ":item_class", multi_item_class_type_arrow, multi_item_class_type_horse),
						(store_add, ":selected_item_slot", slot_player_selected_item_indices_begin, 3),
						(player_set_slot, ":my_player_no", ":selected_item_slot", ":item_id"),
						(val_add, ":num_item_extra", 1), #retrieve number of items extra
						(try_begin), #EXTRA
							(ge, ":num_item_extra", 2),
							(eq, ":num_item_shield", 0), #if no shield
							(store_add, ":selected_item_slot", slot_player_selected_item_indices_begin, 2),
							(player_set_slot, ":my_player_no", ":selected_item_slot", ":item_id"),
						(try_end),
					(try_end),

				(else_try),
					(is_between, ":item_class", multi_item_class_type_heads_begin, multi_item_class_type_heads_end),
					(store_add, ":selected_item_slot", slot_player_selected_item_indices_begin, 4),
					(player_set_slot, ":my_player_no", ":selected_item_slot", ":item_id"),
				(else_try),
					(is_between, ":item_class", multi_item_class_type_bodies_begin, multi_item_class_type_bodies_end),
					(store_add, ":selected_item_slot", slot_player_selected_item_indices_begin, 5),
					(player_set_slot, ":my_player_no", ":selected_item_slot", ":item_id"),
				(else_try),
					(is_between, ":item_class", multi_item_class_type_feet_begin, multi_item_class_type_feet_end),
					(store_add, ":selected_item_slot", slot_player_selected_item_indices_begin, 6),
					(player_set_slot, ":my_player_no", ":selected_item_slot", ":item_id"),
				(else_try),
					(is_between, ":item_class", multi_item_class_type_gloves_begin, multi_item_class_type_gloves_end),
					(store_add, ":selected_item_slot", slot_player_selected_item_indices_begin, 7),
					(player_set_slot, ":my_player_no", ":selected_item_slot", ":item_id"),
				(else_try),
					(is_between, ":item_class", multi_item_class_type_horses_begin, multi_item_class_type_horses_end),
					(eq, "$g_horses_are_avaliable", 1),
					(store_add, ":selected_item_slot", slot_player_selected_item_indices_begin, 8),
					(player_set_slot, ":my_player_no", ":selected_item_slot", ":item_id"),
				(try_end),
			(try_end),
		]
	),
EDIT: some additional comments & changes
 
It calculates the amount of items of range and if there is more than one it places it in slot 2, for it there must not be a shield in the inventory.
According to this, if there is an extra range item there cannot be a shield, that is, the slot 2 serves for the shields and when there are no shields for the extra range items. Test it and see if it works for you.
 
Adapting this to my mod I have made some changes. At first I only followed your steps, but the class types were not correct, the cleavers are also 1h-weapons. I have updated the script.
 
Thanks a lot! It might have been a simple trick which you did but I wouldn't have found that solution so quickly. It works like a charm, now it's like I want to have it  :grin:

Here my adapted code (keep in mind my changed order in header commons like mentioned above)
Code:
  #script_multiplayer_set_default_item_selections_for_troop
  # Input: arg1 = troop_no
  # Output: none
  ("multiplayer_set_default_item_selections_for_troop",[
    (store_script_param, ":troop_no", 1),
    (multiplayer_get_my_player, ":my_player_no"),
    (call_script, "script_multiplayer_clear_player_selected_items", ":my_player_no"),
    (assign, ":num_item_class", 0),
    #(assign, ":cur_weapon_slot", 0),
    (troop_get_inventory_capacity, ":inv_cap", ":troop_no"),
    (try_for_range, ":i_slot", 0, ":inv_cap"),
      (troop_get_inventory_slot, ":item_id", ":troop_no", ":i_slot"),
      (ge, ":item_id", 0),
      (item_get_slot, ":item_class", ":item_id", slot_item_multiplayer_item_class),
      (try_begin), #retrieve number of range items
        (is_between, ":item_class", multi_item_class_type_arrow, multi_item_class_type_horse),
        (val_add, ":num_item_class", 1),
      (try_end),
      (try_begin),
        (try_begin),
          (is_between, ":item_class", multi_item_class_type_two_handed_sword, multi_item_class_type_small_shield),
          (store_add, ":selected_item_slot", slot_player_selected_item_indices_begin, 0),
          (player_set_slot, ":my_player_no", ":selected_item_slot", ":item_id"),
        (else_try),
          (is_between, ":item_class", multi_item_class_type_sword, multi_item_class_type_two_handed_sword),
          (store_add, ":selected_item_slot", slot_player_selected_item_indices_begin, 1),
          (player_set_slot, ":my_player_no", ":selected_item_slot", ":item_id"),
        (else_try), #Shields
          (is_between, ":item_class", multi_item_class_type_small_shield, multi_item_class_type_arrow),
          (store_add, ":selected_item_slot", slot_player_selected_item_indices_begin, 2),
          (player_set_slot, ":my_player_no", ":selected_item_slot", ":item_id"),
        (else_try),
          (is_between, ":item_class", multi_item_class_type_arrow, multi_item_class_type_horse),
          (store_add, ":selected_item_slot", slot_player_selected_item_indices_begin, 3),
          (player_set_slot, ":my_player_no", ":selected_item_slot", ":item_id"),
          (try_begin), #Arrows, Bolts, Throwables
            (is_between, ":item_class", multi_item_class_type_arrow, multi_item_class_type_horse),
            (store_add, ":selected_item_slot", slot_player_selected_item_indices_begin, 3),
            (player_set_slot, ":my_player_no", ":selected_item_slot", ":item_id"),
          (try_end),
          (try_begin), #EXTRA: Arrows, Bolts, Throwables
            (ge, ":num_item_class", 2),
            (is_between, ":item_class", multi_item_class_type_arrow, multi_item_class_type_horse),
            (neg|is_between, ":item_class", multi_item_class_type_small_shield, multi_item_class_type_arrow),
            (store_add, ":selected_item_slot", slot_player_selected_item_indices_begin, 2),
            (player_set_slot, ":my_player_no", ":selected_item_slot", ":item_id"),
          (try_end),
        (try_end),
      (else_try),
        (is_between, ":item_class", multi_item_class_type_heads_begin, multi_item_class_type_heads_end),
        (store_add, ":selected_item_slot", slot_player_selected_item_indices_begin, 4),
        (player_set_slot, ":my_player_no", ":selected_item_slot", ":item_id"),
      (else_try),
        (is_between, ":item_class", multi_item_class_type_bodies_begin, multi_item_class_type_bodies_end),
        (store_add, ":selected_item_slot", slot_player_selected_item_indices_begin, 5),
        (player_set_slot, ":my_player_no", ":selected_item_slot", ":item_id"),
      (else_try),
        (is_between, ":item_class", multi_item_class_type_feet_begin, multi_item_class_type_feet_end),
        (store_add, ":selected_item_slot", slot_player_selected_item_indices_begin, 6),
        (player_set_slot, ":my_player_no", ":selected_item_slot", ":item_id"),
      (else_try),
        (is_between, ":item_class", multi_item_class_type_gloves_begin, multi_item_class_type_gloves_end),
        (store_add, ":selected_item_slot", slot_player_selected_item_indices_begin, 7),
        (player_set_slot, ":my_player_no", ":selected_item_slot", ":item_id"),
      (else_try),
        (is_between, ":item_class", multi_item_class_type_horses_begin, multi_item_class_type_horses_end),
        (eq, "$g_horses_are_avaliable", 1),
        (store_add, ":selected_item_slot", slot_player_selected_item_indices_begin, 8),
        (player_set_slot, ":my_player_no", ":selected_item_slot", ":item_id"),
      (try_end),
    (try_end),
    ]),
 
You don't really need those repeated operations, just modify the slots 'multi_item_class' according to your convenience and take my script as base, where also, is declared the global variable 'g_multiplayer_disallow_ranged_weapons' that limits the ranged weapons to the start of the map, in case of prohibiting them in the server.
 
Dj_FRedy said:
You don't really need those repeated operations, just modify the slots 'multi_item_class' according to your convenience and take my script as base, where also, is declared the global variable 'g_multiplayer_disallow_ranged_weapons' that limits the ranged weapons to the start of the map, in case of prohibiting them in the server.
Ah, yes, I see what you mean with the repeated operations, I haven't thought about this. I will correct it at the evening. For the 'g_multiplayer_disallow_ranged_weapons', that's wanted, I don't want to have this function inside my mod.
 
Dj_FRedy said:
Ah, well, then I didn't say anything  :wink:

EDIT: Earendil, at the end I decide that it is better to set the item in each block, as in native.
Good thing that I just looked up this thread again before making any changes  :lol:
How comes it's better to have them in each block? It would have made sense for me to keep it at the end.
 
When activating the variable 'g_multiplayer_disallow_ranged_weapons' denying the ranged weapons, the assignment operations do not do what is expected with the selection index, in some cases, it may fail to place the item in the chosen slot. Assigning and setting the selection index and slot weapon in each block eliminates this issue, yep.
 
Back
Top Bottom