• 0
Virtue

Item Options

Question

Posted (edited)

Spoiler
On 4/10/2017 at 2:29 PM, Smoke said:

Introducing the Item Options System!

 

k3TrEvc.png

 

Commit

https://github.com/HerculesWS/Hercules/commit/974222a8d3f189083205bf5d330de04a43226ad3

 

Feature Information

The Item Option System is a feature that was implemented in 2015-02-26 clients, allowing equipments to have up to 5 additional effects similar to cards or enchants. Each equipment is capable of having 5 information bars above the card slot/enchant bar that describes the effect of the option it is infused with.

 

New Script Commands (The following snippet is available in doc/script_commands.txt.)


*getequipisenableopt(<equipment slot>)

This function checks if the equipped item allows the use of bonus options.

Returns 1 if allowed, 0 if not.

---------------------------------------

*getequippedoptioninfo(<info_type>);

This function is to be used with the scripts of contents listed in
db/item_options.conf only.

Returns the value of the current equipment being parsed.
If the equip was not found or the type is invalid, -1 is returned.

---------------------------------------

*getequipoptioninfo(<equip_index>,<slot>,<type>);

Gets the option information of an equipment.

<equipment_index> For a list of equipment indexes see getequipid().
<option_slot> can range from 1 to MAX_ITEM_OPTIONS
<type> can be IT_OPT_INDEX (the ID of the option bonus, @see "Id" or "Name" in db/item_options.conf)       or IT_OPT_VALUE (the value of the bonus script of the equipment, @see "Script" in db_item_options.conf).

returns the value of the slot if exists or -1 for invalid slot, type or slots.

---------------------------------------

*setequipoption(<equip_index>,<slot>,<opt_index>,<value>);

Set an equipment's option index or value for the specified option slot.

<equipment_index> For a list of equipment indexes see getequipid().
<option_slot> can range from 1 to MAX_ITEM_OPTIONS
<type> can be IT_OPT_INDEX (the ID of the option bonus, @see "Id" or "Name" in db/item_options.conf)
<value> The value of the type to be set.

returns 0 if value couldn't be set, 1 on success.

 

 

Release Notes

  • This system allows the infusing of equipments with bonus item options.
  • This feature is constrained to clients of packet versions greater than or equal to 20150226.
  • Item Options and their effects are defined server-side in db/item_options.conf and client side in data/luafiles514/lua files/datainfo/addrandomoptionnametable.lub
  • The ID of the option must tally with the correct index of the description provided in the client side file.
  • IT_OPT_* keys and MAX_ITEM_OPTIONS macro are also exported from the source as constants.
  • If you wish to disable item options for certain (equipment) items, an additional flag `disable_options` has been added to the item sql tables, and as `DisableOptions: true/false (boolean, defaults to false !!for equipments only!!)` to the item_db.conf files.
  • Documentation is provided for script commands.
  • If upgrading, don't forget to run the sql upgrade files!


Credits

A big thanks to all the reviewers that helped make the code closer to perfection. -

EmistrydastgirMishimaHarunaJedzkieRidley8819Asheraf4144.

 

Style and Script Fixes by Asheraf (https://github.com/Asheraf)
Initial design Idea in rAthena commit.

Looking for scripts for this, Item options for all equipments / costumes slots. no sample script located. I found two of them but it's outdated. will try and modify my thread after work.

Demo NPC from Utility

One from Scripting support

 

TLDR: I tried using the one from the DEMO NPC from the utility section and tried to modify the menu to just show costumes side but I get this.

script:

	setarray([email protected]$[1], EQI_COSTUME_HEAD_TOP, EQI_COSTUME_HEAD_MID, EQI_COSTUME_HEAD_LOW, EQI_COSTUME_GARMENT);
	[email protected]$ = "";
	for ([email protected] = 1; [email protected] < getarraysize([email protected]$); [email protected])
		[email protected]$ += ((getequipisequiped([email protected])) ? getequipname([email protected]) : [email protected]$[[email protected]] + "-[Not equipped]") + ":";
	// Select the part.
	[email protected]_index = select([email protected]$);

roTC1Me.png

Edited by Virtue

Share this post


Link to post
Share on other sites

8 answers to this question

  • 0

Posted (edited)

	// Build the Menu.
	setarray .@costume, EQI_COSTUME_HEAD_TOP, EQI_COSTUME_HEAD_MID, EQI_COSTUME_HEAD_LOW, EQI_COSTUME_GARMENT;
	.@menu$ = "";
	for (.@i = 0; .@i < getarraysize(.@costume); ++.@i)
		.@menu$ += ((getequipisequiped(.@costume[.@i])) ? getequipname(.@costume[.@i]) : "" + .@costume[.@i] + "-[Not equipped]") + ":";
	// Select the part.
	.@equip_index = .@costume[ select(.@menu$) -1 ];

 

Edited by AnnieRuru

Share this post


Link to post
Share on other sites
  • 0

Isn't the parameter on getequipisequiped and getequipname wrong? [email protected] will be 1, 2, ... which are EQI_HEAD_TOP (1), EQI_ARMOR (2) and not costume slots.

Share this post


Link to post
Share on other sites
  • 0

I also don't understand what your question is
you claimed the script doesn't work, but I just tested it working fine .... of course only for the non-costume equipment

	// Build the Menu.
	setarray(.@position$[1], "Head", "Body", "Left Hand", "Right Hand", "Robe", "Shoes", "Accessory 1", "Accessory 2", "Head 2", "Head 3");
	.@menu$ = "";
	for (.@i = 1; .@i <= 10; ++.@i)
		.@menu$ += ((getequipisequiped(.@i)) ? getequipname(.@i) : .@position$[.@i] + "-[Not equipped]") + ":";
	// Select the part.
	.@equip_index = select(.@menu$);

if you want to extend to costume area, this part has to modify

Share this post


Link to post
Share on other sites
  • 0
3 hours ago, AnnieRuru said:

I also don't understand what your question is
you claimed the script doesn't work, but I just tested it working fine .... of course only for the non-costume equipment

	// Build the Menu.
	setarray(.@position$[1], "Head", "Body", "Left Hand", "Right Hand", "Robe", "Shoes", "Accessory 1", "Accessory 2", "Head 2", "Head 3");
	.@menu$ = "";
	for (.@i = 1; .@i <= 10; ++.@i)
		.@menu$ += ((getequipisequiped(.@i)) ? getequipname(.@i) : .@position$[.@i] + "-[Not equipped]") + ":";
	// Select the part.
	.@equip_index = select(.@menu$);

if you want to extend to costume area, this part has to modify

Yes it works for the normal equipments, but how do I make it so just for the costumes?

Share this post


Link to post
Share on other sites
  • 0

What about this?

	setarray([email protected][1], EQI_COSTUME_HEAD_TOP, EQI_COSTUME_HEAD_MID, EQI_COSTUME_HEAD_LOW, EQI_COSTUME_GARMENT);
	[email protected]$ = "";
	for ([email protected] = 1; [email protected] < getarraysize([email protected]$); [email protected])
		[email protected]$ += ((getequipisequiped([email protected])) ? getequipname([email protected][[email protected]i]) : "" + [email protected][[email protected]] + "-[Not equipped]") + ":";
	// Select the part.
	[email protected]_index = select([email protected]$);

 

Share this post


Link to post
Share on other sites
  • 0
27 minutes ago, KirieZ said:

What about this?

	setarray([email protected][1], EQI_COSTUME_HEAD_TOP, EQI_COSTUME_HEAD_MID, EQI_COSTUME_HEAD_LOW, EQI_COSTUME_GARMENT);
	[email protected]$ = "";
	for ([email protected] = 1; [email protected] < getarraysize([email protected]$); [email protected])
		[email protected]$ += ((getequipisequiped([email protected])) ? getequipname([email protected][[email protected]]) : "" + [email protected][[email protected]] + "-[Not equipped]") + ":";
	// Select the part.
	[email protected]_index = select([email protected]$);

 

doesn't work as intended. 

Share this post


Link to post
Share on other sites
  • 0
7 hours ago, AnnieRuru said:
	// Build the Menu.
	setarray .@costume, EQI_COSTUME_HEAD_TOP, EQI_COSTUME_HEAD_MID, EQI_COSTUME_HEAD_LOW, EQI_COSTUME_GARMENT;
	.@menu$ = "";
	for (.@i = 0; .@i < getarraysize(.@costume); ++.@i)
		.@menu$ += ((getequipisequiped(.@costume[.@i])) ? getequipname(.@costume[.@i]) : "" + .@costume[.@i] + "-[Not equipped]") + ":";
	// Select the part.
	.@equip_index = .@costume[ select(.@menu$) -1 ];

 

Thanks @AnnieRuru will check on this after work and errands :)

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!


Register a new account

Sign in

Already have an account? Sign in here.


Sign In Now