Jump to content
  • 0
Virtue

Item Options

Question

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(.@costume$[1], EQI_COSTUME_HEAD_TOP, EQI_COSTUME_HEAD_MID, EQI_COSTUME_HEAD_LOW, EQI_COSTUME_GARMENT);
	.@menu$ = "";
	for (.@i = 1; .@i < getarraysize(.@costume$); ++.@i)
		.@menu$ += ((getequipisequiped(.@i)) ? getequipname(.@i) : .@costume$[.@i] + "-[Not equipped]") + ":";
	// Select the part.
	.@equip_index = select(.@menu$);

roTC1Me.png

Edited by Virtue

Share this post


Link to post
Share on other sites

8 answers to this question

Recommended Posts

  • 0
	// 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? .@i 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(.@costume[1], EQI_COSTUME_HEAD_TOP, EQI_COSTUME_HEAD_MID, EQI_COSTUME_HEAD_LOW, EQI_COSTUME_GARMENT);
	.@menu$ = "";
	for (.@i = 1; .@i < getarraysize(.@costume$); ++.@i)
		.@menu$ += ((getequipisequiped(.@i)) ? getequipname(.@costume[.@i]) : "" + .@costume[.@i] + "-[Not equipped]") + ":";
	// Select the part.
	.@equip_index = select(.@menu$);

 

Share this post


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

What about this?


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

 

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

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...

×
×
  • Create New...

Important Information

By using this site, you agree to our Terms of Use.