OSP Code Optimisation Item Instance System

Users who are viewing this thread

Hello, guys

Since there is a scene prop instance system, we don't have a item instance system

that will be a problem, when we want to store some values related to a specific item instance

so I write a simple item instance system

the rules is:

item instance id = item kind id + item index in agent inventory

item slot `troop` id = item instance id + agent id



module_scripts.py:
Code:
	("item_get_num_instance", [
		(store_script_param, ":agent_id", 1),
		(store_script_param, ":item_kind_id", 2),
		
		(assign, ":num", 0),
		(agent_get_troop_id, ":troop_id", ":agent_id"),
		(troop_get_inventory_capacity, ":end_cond", ":troop_id"),
		(try_for_range, ":i_slot", 0, ":end_cond"),
         (troop_get_inventory_slot, ":item_id", ":troop_id", ":i_slot"),
		 (try_begin),
			(eq, ":item_id", ":item_kind_id"),
			(val_add, ":num", 1),
		 (try_end),
        (try_end),
	    (assign, reg0, ":num"),
	]),
	("item_get_instance", [
		(store_script_param, ":agent_id", 1),
		(store_script_param, ":item_kind_id", 2),
		(store_script_param, ":number", 3),
		
		(assign, ":instance_id", -1),
		(assign, ":num", 0),
		(agent_get_troop_id, ":troop_id", ":agent_id"),
		(troop_get_inventory_capacity, ":end_cond", ":troop_id"),
		(try_for_range, ":i_slot", 0, ":end_cond"),
         (troop_get_inventory_slot, ":item_id", ":troop_id", ":i_slot"),
		 (try_begin),
			(eq, ":item_id", ":item_kind_id"),
			(try_begin),
				(eq, ":num", ":number"),
				(store_add, ":instance_id", ":item_kind_id", "number"),
				(assign, reg0, ":instance_id"),
				(assign, ":end_cond", 0),
			(try_end),
			(val_add, ":num", 1),
		 (try_end),
        (try_end),
	]),
	
	("item_instance_get_slot", [
		(store_script_param, ":agent_id", 1),
		(store_script_param, ":item_instance_id", 2),
		(store_script_param, ":slot", 3),
		
		(store_add, ":agent_id_plus_item_instance_id", ":agent_id", ":item_instance_id"),
		
		(troop_get_slot, ":slot", "trp_item_instance_array", ":agent_id_plus_item_instance_id"),
		(troop_get_slot, ":value", "trp_item_instance_slot_array", ":slot"),
		(assign, reg0, ":value"),
	]),
	("item_instance_set_slot", [
		(store_script_param, ":agent_id", 1),
		(store_script_param, ":item_instance_id", 2),
		(store_script_param, ":slot", 3),
		(store_script_param, ":slot_value", 4),
		
		(store_add, ":agent_id_plus_item_instance_id", ":agent_id", ":item_instance_id"),
		(troop_set_slot, "trp_item_instance_array", ":agent_id_plus_item_instance_id", ":slot"),
		(troop_set_slot, "trp_item_instance_slot_array", ":slot", ":slot_value"),
		
	]),

module_troops.py:
Code:
["item_instance_array", "NA","NA",tf_hero|tf_inactive, 0,reserved,  fac_neutral,[],def_attrib|level(18),wp(60),knows_common, 0],
["item_instance_slot_array", "NA","NA",tf_hero|tf_inactive, 0,reserved,  fac_neutral,[],def_attrib|level(18),wp(60),knows_common, 0],

Feel free to report any bug or issue when you use this code

just give the credit if you want to use this  :grin:
 
Back
Top Bottom