Jump to content
  • 0

[Suggestion/Request] Random Option Database


llchrisll

Question


  • Group:  Members
  • Topic Count:  12
  • Topics Per Day:  0.00
  • Content Count:  625
  • Reputation:   188
  • Joined:  11/19/11
  • Last Seen:  

Hello guys and Dev Team especially.

Short summary for the following suggestion/request.

I recently tried myself at the Random Option for the Vicious Mind Weapons of the Sky Fortress Instance.
The problem which I had to realize after a while is that you get around 10k lines at least just for one Group depending on properities.

My first tests was adding the effects itself first on the 1st option slot, so I get a hang of it, which worked well.
After that I tried to put the properities into the correct position by using 0 for the other groups, which didn't work, but thought that it won't tho anyway, which looked like this:

RDMOPTG_ViciousMind_Weapon,1,0,0,0,0,0,0,RDMOPT_VAR_STRAMOUNT,1,0

So I came to the conclusion either do it or handle it with an custom enchanter.
This was also mentioned in this post, you could say the result will the same what I'm trying to do.

As for the Suggestion/Request itself:
I would like to propose 2 changes to the Random Option System:

1. Defining an Option Slot
What I mean by that is that instead of

// <randopt_groupid>,<rate>,<randopt_id1>,<randopt_value1>,<randopt_param1>{,<randopt_id2>,<randopt_value2>,<randopt_param2>,<randopt_id3>,<randopt_value3>,<randopt_param3>,<randopt_id4>,<randopt_value4>,<randopt_param4>,<randopt_id5>,<randopt_value5>,<randopt_param5>}

Let's define the option slot directly like this:

// <randopt_groupid>,<rate>,<option slot>,<randopt_id>,<randopt_value>,<randopt_param>
  
// Element Option in Slot 1
RDMOPTG_ViciousMind_Weapon,1,1,RDMOPT_WEAPON_ATTR_NOTHING,0,0
RDMOPTG_ViciousMind_Weapon,1,1,RDMOPT_WEAPON_ATTR_WATER,0,0
RDMOPTG_ViciousMind_Weapon,1,1,RDMOPT_WEAPON_ATTR_GROUND,0,0
RDMOPTG_ViciousMind_Weapon,1,1,RDMOPT_WEAPON_ATTR_FIRE,0,0
RDMOPTG_ViciousMind_Weapon,1,1,RDMOPT_WEAPON_ATTR_WIND,0,0
RDMOPTG_ViciousMind_Weapon,1,1,RDMOPT_WEAPON_ATTR_SAINT,0,0
RDMOPTG_ViciousMind_Weapon,1,1,RDMOPT_WEAPON_ATTR_DARKNESS,0,0
  
// Damage/Magic Damage to Demon Race +1~10% in Slot 2
RDMOPTG_ViciousMind_Weapon,1,2,RDMOPT_RACE_DAMAGE_DEVIL,1,0
RDMOPTG_ViciousMind_Weapon,1,2,RDMOPT_RACE_DAMAGE_DEVIL,2,0
RDMOPTG_ViciousMind_Weapon,1,2,RDMOPT_RACE_DAMAGE_DEVIL,3,0
RDMOPTG_ViciousMind_Weapon,1,2,RDMOPT_RACE_DAMAGE_DEVIL,4,0
RDMOPTG_ViciousMind_Weapon,1,2,RDMOPT_RACE_DAMAGE_DEVIL,5,0
RDMOPTG_ViciousMind_Weapon,1,2,RDMOPT_RACE_DAMAGE_DEVIL,6,0
RDMOPTG_ViciousMind_Weapon,1,2,RDMOPT_RACE_DAMAGE_DEVIL,7,0
RDMOPTG_ViciousMind_Weapon,1,2,RDMOPT_RACE_DAMAGE_DEVIL,8,0
RDMOPTG_ViciousMind_Weapon,1,2,RDMOPT_RACE_DAMAGE_DEVIL,9,0
RDMOPTG_ViciousMind_Weapon,1,2,RDMOPT_RACE_DAMAGE_DEVIL,10,0

// Magical Weapons - Cast Delay -10% in Slot 3
RDMOPTG_ViciousMind_MWeapon,1,3,RDMOPT_DEC_SPELL_DELAY_TIME,10,0

2. Allow the usage of rand() in randopt_value
This would shorten the file by a lot already, like this:

// Physical Weapons - ATK +4~47
RDMOPTG_ViciousMind_Weapon,1,RDMOPT_VAR_ATTPOWER,4,0
RDMOPTG_ViciousMind_Weapon,1,RDMOPT_VAR_ATTPOWER,5,0
RDMOPTG_ViciousMind_Weapon,1,RDMOPT_VAR_ATTPOWER,6,0
RDMOPTG_ViciousMind_Weapon,1,RDMOPT_VAR_ATTPOWER,7,0
RDMOPTG_ViciousMind_Weapon,1,RDMOPT_VAR_ATTPOWER,8,0
RDMOPTG_ViciousMind_Weapon,1,RDMOPT_VAR_ATTPOWER,9,0
RDMOPTG_ViciousMind_Weapon,1,RDMOPT_VAR_ATTPOWER,10,0
RDMOPTG_ViciousMind_Weapon,1,RDMOPT_VAR_ATTPOWER,11,0
RDMOPTG_ViciousMind_Weapon,1,RDMOPT_VAR_ATTPOWER,12,0
RDMOPTG_ViciousMind_Weapon,1,RDMOPT_VAR_ATTPOWER,13,0
RDMOPTG_ViciousMind_Weapon,1,RDMOPT_VAR_ATTPOWER,14,0
RDMOPTG_ViciousMind_Weapon,1,RDMOPT_VAR_ATTPOWER,15,0
RDMOPTG_ViciousMind_Weapon,1,RDMOPT_VAR_ATTPOWER,16,0
RDMOPTG_ViciousMind_Weapon,1,RDMOPT_VAR_ATTPOWER,17,0
RDMOPTG_ViciousMind_Weapon,1,RDMOPT_VAR_ATTPOWER,18,0
RDMOPTG_ViciousMind_Weapon,1,RDMOPT_VAR_ATTPOWER,19,0
RDMOPTG_ViciousMind_Weapon,1,RDMOPT_VAR_ATTPOWER,20,0
RDMOPTG_ViciousMind_Weapon,1,RDMOPT_VAR_ATTPOWER,21,0
RDMOPTG_ViciousMind_Weapon,1,RDMOPT_VAR_ATTPOWER,22,0
RDMOPTG_ViciousMind_Weapon,1,RDMOPT_VAR_ATTPOWER,23,0
RDMOPTG_ViciousMind_Weapon,1,RDMOPT_VAR_ATTPOWER,24,0
RDMOPTG_ViciousMind_Weapon,1,RDMOPT_VAR_ATTPOWER,25,0
RDMOPTG_ViciousMind_Weapon,1,RDMOPT_VAR_ATTPOWER,26,0
RDMOPTG_ViciousMind_Weapon,1,RDMOPT_VAR_ATTPOWER,27,0
RDMOPTG_ViciousMind_Weapon,1,RDMOPT_VAR_ATTPOWER,28,0
RDMOPTG_ViciousMind_Weapon,1,RDMOPT_VAR_ATTPOWER,29,0
RDMOPTG_ViciousMind_Weapon,1,RDMOPT_VAR_ATTPOWER,30,0
RDMOPTG_ViciousMind_Weapon,1,RDMOPT_VAR_ATTPOWER,31,0
RDMOPTG_ViciousMind_Weapon,1,RDMOPT_VAR_ATTPOWER,32,0
RDMOPTG_ViciousMind_Weapon,1,RDMOPT_VAR_ATTPOWER,33,0
RDMOPTG_ViciousMind_Weapon,1,RDMOPT_VAR_ATTPOWER,34,0
RDMOPTG_ViciousMind_Weapon,1,RDMOPT_VAR_ATTPOWER,35,0
RDMOPTG_ViciousMind_Weapon,1,RDMOPT_VAR_ATTPOWER,36,0
RDMOPTG_ViciousMind_Weapon,1,RDMOPT_VAR_ATTPOWER,37,0
RDMOPTG_ViciousMind_Weapon,1,RDMOPT_VAR_ATTPOWER,38,0
RDMOPTG_ViciousMind_Weapon,1,RDMOPT_VAR_ATTPOWER,39,0
RDMOPTG_ViciousMind_Weapon,1,RDMOPT_VAR_ATTPOWER,40,0
RDMOPTG_ViciousMind_Weapon,1,RDMOPT_VAR_ATTPOWER,41,0
RDMOPTG_ViciousMind_Weapon,1,RDMOPT_VAR_ATTPOWER,42,0
RDMOPTG_ViciousMind_Weapon,1,RDMOPT_VAR_ATTPOWER,43,0
RDMOPTG_ViciousMind_Weapon,1,RDMOPT_VAR_ATTPOWER,44,0
RDMOPTG_ViciousMind_Weapon,1,RDMOPT_VAR_ATTPOWER,45,0
RDMOPTG_ViciousMind_Weapon,1,RDMOPT_VAR_ATTPOWER,46,0
RDMOPTG_ViciousMind_Weapon,1,RDMOPT_VAR_ATTPOWER,47,0

// With the usage of rand() the above lines would become this:
RDMOPTG_ViciousMind_Weapon,1,RDMOPT_VAR_ATTPOWER,rand(4,47),0

I hope you get what I mean with my suggestion/request or however someone would call it!

Best regards,
Chris

  • Upvote 1
  • MVP 1
Link to comment
Share on other sites

13 answers to this question

Recommended Posts

  • 0

  • Group:  Developer
  • Topic Count:  36
  • Topics Per Day:  0.01
  • Content Count:  587
  • Reputation:   431
  • Joined:  01/26/16
  • Last Seen:  

I’ll see what I can do with converting this file’s structure

  • Love 1
  • Like 2
Link to comment
Share on other sites

  • 0

  • Group:  Members
  • Topic Count:  12
  • Topics Per Day:  0.00
  • Content Count:  625
  • Reputation:   188
  • Joined:  11/19/11
  • Last Seen:  

@Secrets Thanks for the reply.
I forgot to mention anyway, about the rand() that I thought about using custom random options like this:

item_randomopt_db.txt:
RDMOPT_VAR_ATKPERCENT,{ bonus bAtkRate,rand(1,getrandomoptinfo(ROA_VALUE)); }

But this would make the original ones useless for cases like this.

I tried using rand() in the item_randomopt_group.txt, but the mapserver reports it as "Too many columns", didn't try (rand()) tho.

Regards,
Chris

Link to comment
Share on other sites

  • 0

  • Group:  Developer
  • Topic Count:  36
  • Topics Per Day:  0.01
  • Content Count:  587
  • Reputation:   431
  • Joined:  01/26/16
  • Last Seen:  

2 hours ago, llchrisll said:

@Secrets Thanks for the reply.
I forgot to mention anyway, about the rand() that I thought about using custom random options like this:


item_randomopt_db.txt:
RDMOPT_VAR_ATKPERCENT,{ bonus bAtkRate,rand(1,getrandomoptinfo(ROA_VALUE)); }

But this would make the original ones useless for cases like this.

I tried using rand() in the item_randomopt_group.txt, but the mapserver reports it as "Too many columns", didn't try (rand()) tho.

Regards,
Chris

item_randomopt_group.txt doesn't have the capability to parse script commands. See the bracket in item_randomopt_db.txt 

Link to comment
Share on other sites

  • 0

  • Group:  Members
  • Topic Count:  12
  • Topics Per Day:  0.00
  • Content Count:  625
  • Reputation:   188
  • Joined:  11/19/11
  • Last Seen:  

I kinda thought that since its a "db " file xD

Link to comment
Share on other sites

  • 0

  • Group:  Members
  • Topic Count:  42
  • Topics Per Day:  0.01
  • Content Count:  297
  • Reputation:   15
  • Joined:  11/17/11
  • Last Seen:  

On 3/28/2018 at 6:32 AM, llchrisll said:

The problem which I had to realize after a while is that you get around 10k lines at least just for one Group depending on properities.

Why is that?
Wouldn't adding specific random option group per slot take a lot more lines to cover for all items you want to have random options?

I am currently using my own implementation based on the existing item_random_option_group db file and this is how it looks like. It still follows the same structure,but the point is that it does not define what will be the random options available to that certain type of item, instead, it defines what are the available random options that item type can have.
 

// <randopt_groupid>,<rate>,<randopt_id1>,<randopt_value1>,<randopt_param1>{,<randopt_id2>,<randopt_value2>,<randopt_param2>,<randopt_id3>,<randopt_value3>,<randopt_param3>,<randopt_id4>,<randopt_value4>,<randopt_param4>,<randopt_id5>,<randopt_value5>,<randopt_param5>} and so on and so forth. just how many do you like this line to have. lmfao.


image.thumb.png.0fdb9682b906aae658cc647cdcacb12b.png

See I only had up to line 196 and i covered all of the equip types dagger to 2-h staves and armor to accessories each with different set of random options. and in my case, I only made small changes to the source so that the group that will be randomized will not reflect as is/whereis, instead, will just randomly pick which number of options (1-5) will reflect to the equip. 

For example, a Clip[1].

Using my random option group for accessory.

RDMOPTG_ACCESSORY,25,RDMOPT_VAR_STRAMOUNT, 5,0,RDMOPT_VAR_AGIAMOUNT, 5,0,RDMOPT_VAR_VITAMOUNT, 5,0,RDMOPT_VAR_INTAMOUNT, 5,0,RDMOPT_VAR_DEXAMOUNT, 5,0,RDMOPT_VAR_LUKAMOUNT, 5,0,RDMOPT_VAR_HPACCELERATION, 5,0,RDMOPT_VAR_SPACCELERATION, 5,0,RDMOPT_VAR_PLUSASPD,1,0,RDMOPT_VAR_PLUSASPDPERCENT, 5,0,RDMOPT_VAR_CRITICALSUCCESSVALUE, 2,0,RDMOPT_HEAL_VALUE, 2,0,RDMOPT_HEAL_MODIFY_PERCENT, 2,0,RDMOPT_DEC_SPELL_CAST_TIME, 2,0,RDMOPT_DEC_SPELL_DELAY_TIME, 2,0
RDMOPTG_ACCESSORY,20,RDMOPT_VAR_STRAMOUNT, 8,0,RDMOPT_VAR_AGIAMOUNT, 8,0,RDMOPT_VAR_VITAMOUNT, 8,0,RDMOPT_VAR_INTAMOUNT, 8,0,RDMOPT_VAR_DEXAMOUNT, 8,0,RDMOPT_VAR_LUKAMOUNT, 8,0,RDMOPT_VAR_HPACCELERATION, 8,0,RDMOPT_VAR_SPACCELERATION, 8,0,RDMOPT_VAR_PLUSASPD,2,0,RDMOPT_VAR_PLUSASPDPERCENT, 8,0,RDMOPT_VAR_CRITICALSUCCESSVALUE, 4,0,RDMOPT_HEAL_VALUE, 4,0,RDMOPT_HEAL_MODIFY_PERCENT, 4,0,RDMOPT_DEC_SPELL_CAST_TIME, 5,0,RDMOPT_DEC_SPELL_DELAY_TIME, 5,0
RDMOPTG_ACCESSORY,10,RDMOPT_VAR_STRAMOUNT,12,0,RDMOPT_VAR_AGIAMOUNT,12,0,RDMOPT_VAR_VITAMOUNT,12,0,RDMOPT_VAR_INTAMOUNT,12,0,RDMOPT_VAR_DEXAMOUNT,12,0,RDMOPT_VAR_LUKAMOUNT,12,0,RDMOPT_VAR_HPACCELERATION,12,0,RDMOPT_VAR_SPACCELERATION,12,0,RDMOPT_VAR_PLUSASPD,3,0,RDMOPT_VAR_PLUSASPDPERCENT,12,0,RDMOPT_VAR_CRITICALSUCCESSVALUE, 7,0,RDMOPT_HEAL_VALUE, 7,0,RDMOPT_HEAL_MODIFY_PERCENT, 7,0,RDMOPT_DEC_SPELL_CAST_TIME,10,0,RDMOPT_DEC_SPELL_DELAY_TIME,10,0
RDMOPTG_ACCESSORY, 5,RDMOPT_VAR_STRAMOUNT,15,0,RDMOPT_VAR_AGIAMOUNT,15,0,RDMOPT_VAR_VITAMOUNT,15,0,RDMOPT_VAR_INTAMOUNT,15,0,RDMOPT_VAR_DEXAMOUNT,15,0,RDMOPT_VAR_LUKAMOUNT,15,0,RDMOPT_VAR_HPACCELERATION,15,0,RDMOPT_VAR_SPACCELERATION,15,0,RDMOPT_VAR_PLUSASPD,4,0,RDMOPT_VAR_PLUSASPDPERCENT,15,0,RDMOPT_VAR_CRITICALSUCCESSVALUE,10,0,RDMOPT_HEAL_VALUE,10,0,RDMOPT_HEAL_MODIFY_PERCENT,10,0,RDMOPT_DEC_SPELL_CAST_TIME,15,0,RDMOPT_DEC_SPELL_DELAY_TIME,15,0
RDMOPTG_ACCESSORY, 2,RDMOPT_VAR_STRAMOUNT,18,0,RDMOPT_VAR_AGIAMOUNT,18,0,RDMOPT_VAR_VITAMOUNT,18,0,RDMOPT_VAR_INTAMOUNT,18,0,RDMOPT_VAR_DEXAMOUNT,18,0,RDMOPT_VAR_LUKAMOUNT,18,0,RDMOPT_VAR_HPACCELERATION,18,0,RDMOPT_VAR_SPACCELERATION,18,0,RDMOPT_VAR_PLUSASPD,5,0,RDMOPT_VAR_PLUSASPDPERCENT,18,0,RDMOPT_VAR_CRITICALSUCCESSVALUE,12,0,RDMOPT_HEAL_VALUE,12,0,RDMOPT_HEAL_MODIFY_PERCENT,12,0,RDMOPT_DEC_SPELL_CAST_TIME,20,0,RDMOPT_DEC_SPELL_DELAY_TIME,20,0
RDMOPTG_ACCESSORY, 1,RDMOPT_VAR_STRAMOUNT,25,0,RDMOPT_VAR_AGIAMOUNT,25,0,RDMOPT_VAR_VITAMOUNT,25,0,RDMOPT_VAR_INTAMOUNT,25,0,RDMOPT_VAR_DEXAMOUNT,25,0,RDMOPT_VAR_LUKAMOUNT,25,0,RDMOPT_VAR_HPACCELERATION,25,0,RDMOPT_VAR_SPACCELERATION,25,0,RDMOPT_VAR_PLUSASPD,7,0,RDMOPT_VAR_PLUSASPDPERCENT,25,0,RDMOPT_VAR_CRITICALSUCCESSVALUE,15,0,RDMOPT_HEAL_VALUE,15,0,RDMOPT_HEAL_MODIFY_PERCENT,15,0,RDMOPT_DEC_SPELL_CAST_TIME,25,0,RDMOPT_DEC_SPELL_DELAY_TIME,25,0

So it has,
STR, AGI, VIT, INT, DEX, LUK, HP Regen, SP Regen, ASPD, ASPDRate, CritRate, Healing, HealingRate, Reduce Cast, Reduce Delay

So the rate is based on the 2nd value in the group definition right? So saying that you got the 25% so you got the first line. From there, my code is to randomize how many slots or how many random options will be awarded to the item. Lets say, it randomized to 3.
It will then lookup the rest of the line and randomly pick which 3 would reflect to the item. For example, it randomed INT, SP Acceleration, and Healing Rate. It will then reflect to the Clip[1] INT+5, Increase SP Regen by 5%,  and Healing Power +2%.
image.png.c9b207ea346e1ea6ec7e48dae7eadcbb.png

Well, if you really want to modify the current db structure, the best way to go is to just add min and max value so that it can be randomed source side. make the structure like

// <randopt_groupid>,<rate>,<randopt_id1>,<randopt_value_min1>,<randopt_value_max1>,<randopt_param1>{,<randopt_id2>,<randopt_value_min2>,<randopt_value_max2>,...}


That should solve your problem, right?

I don't know if I understood it well, but this is just my take on it.

 

Edited by Jhedzkie
-
Link to comment
Share on other sites

  • 0

  • Group:  Members
  • Topic Count:  12
  • Topics Per Day:  0.00
  • Content Count:  625
  • Reputation:   188
  • Joined:  11/19/11
  • Last Seen:  

I didn't think about the min & max value, but back to topic.

Vicious Mind Random Options like ATK are a random value between 4-47.
Now do that for every option which can be on such a weapon: (Credits to NovaRo ofc) :) 
https://www.novaragnarok.com/wiki/Sky_Fortress#Vicious_Weapons
Just scroll down to the end and you'll see what I refer too exactly.

As for the modification, I don't know any C/C++, otherwise I would have made the edits myself already. 

Here are my files which I wrote to collect the options:
RDMOPTG_ViciousSlot1.txt
RDMOPTG_ViciousSlot2.txt
RDMOPTG_ViciousSlot3.txt

Now I would have for each possibility an line, so you get the result as it should.

Well if there would be the possibility, instead of the rand() which isn't a way anyway, the min & max value modification would already be a epic optimization.

Regards,
Chris

Link to comment
Share on other sites

  • 0

  • Group:  Members
  • Topic Count:  42
  • Topics Per Day:  0.01
  • Content Count:  297
  • Reputation:   15
  • Joined:  11/17/11
  • Last Seen:  

Well, that was exactly what I am talking about. Having to have 3 separate files for combinations just for a specific slot is totally inefficient.
And taking note of what Nitrous said on one post...

The structure of your database should be something like...

// <randopt_groupid>,<slot>,<rate>,<randopt_id1>,<randopt_value_min1>,<randopt_value_max1>,{<randopt_id2>,<randopt_value_min2>,<randopt_value_max2>,...}

I intentionally removed the <param> field as to have a cleaner implementation, while taking note of the need to have said field in the structure.
Thus making your whole file just one line each group. 

Slot 1

RDMOPTG_ViciousMind_Weapon,1,1,RDMOPT_VAR_STRAMOUNT,1,10,RDMOPT_VAR_AGIAMOUNT,1,10,RDMOPT_VAR_VITAMOUNT,1,10,RDMOPT_VAR_INTAMOUNT,1,10,RDMOPT_VAR_DEXAMOUNT,1,10,RDMOPT_VAR_LUKAMOUNT,1,10,RDMOPT_VAR_ATTPOWER,4,47,RDMOPT_VAR_CRITICALSUCCESSVALUE,10,19,RDMOPT_DAMAGE_CRI_TARGET,1,20,RDMOPT_VAR_PLUSASPDPERCENT,1,5,RDMOPT_DEC_SPELL_CAST_TIME,1,20,RDMOPT_DEC_SPELL_DELAY_TIME,5,20
RDMOPTG_ViciousMind_MWeapon,1,1,RDMOPT_VAR_STRAMOUNT,1,10,RDMOPT_VAR_AGIAMOUNT,1,10,RDMOPT_VAR_VITAMOUNT,1,10,RDMOPT_VAR_INTAMOUNT,1,10,RDMOPT_VAR_DEXAMOUNT,1,10,RDMOPT_VAR_LUKAMOUNT,1,10,RDMOPT_VAR_ATTMPOWER,4,47,RDMOPT_DEC_SPELL_CAST_TIME,1,20,RDMOPT_DEC_SPELL_DELAY_TIME,5,20

Slot 2

RDMOPTG_ViciousMind_Weapon,2,1,RDMOPT_VAR_STRAMOUNT,1,10,RDMOPT_VAR_AGIAMOUNT,1,10,RDMOPT_VAR_VITAMOUNT,1,10,RDMOPT_VAR_INTAMOUNT,1,10,RDMOPT_VAR_DEXAMOUNT,1,10,RDMOPT_VAR_LUKAMOUNT,1,10,RDMOPT_VAR_ATTPOWER,4,47,RDMOPT_VAR_CRITICALSUCCESSVALUE,10,19,RDMOPT_DAMAGE_CRI_TARGET,1,20,RDMOPT_VAR_PLUSASPDPERCENT,1,5,RDMOPT_DEC_SPELL_CAST_TIME,1,20,RDMOPT_DEC_SPELL_DELAY_TIME,5,20
RDMOPTG_ViciousMind_MWeapon,2,1,RDMOPT_VAR_STRAMOUNT,1,10,RDMOPT_VAR_AGIAMOUNT,1,10,RDMOPT_VAR_VITAMOUNT,1,10,RDMOPT_VAR_INTAMOUNT,1,10,RDMOPT_VAR_DEXAMOUNT,1,10,RDMOPT_VAR_LUKAMOUNT,1,10,RDMOPT_VAR_ATTMPOWER,4,47,RDMOPT_DEC_SPELL_CAST_TIME,1,20,RDMOPT_DEC_SPELL_DELAY_TIME,5,20

....and so on.


While this is not really to my taste as I have my own implementation of this randomoption feature, I have tried and tested this structure and I have no problems so far. I think the devs wouldn't mind looking at this solution and come up with a more robust way for us to define random options moving forward.

;)

Edited by Jhedzkie
forgot to add the <rate> field.
Link to comment
Share on other sites

  • 0

  • Group:  Members
  • Topic Count:  76
  • Topics Per Day:  0.02
  • Content Count:  455
  • Reputation:   57
  • Joined:  08/28/12
  • Last Seen:  

The big problem I've found is that if you had too many variables in the item_randomopt_group.txt, nothing was detected after a certain amount.

To solve this with the random value, I run it via a script. 

if (killedrid == .@mobid[.@m]) {
	setarray .@shoes$[0],RDMOPT_VAR_STRAMOUNT,RDMOPT_VAR_AGIAMOUNT,RDMOPT_VAR_VITAMOUNT,RDMOPT_VAR_INTAMOUNT,RDMOPT_VAR_DEXAMOUNT,RDMOPT_VAR_LUKAMOUNT;
	setarray .@shoes2$[0],RDMOPT_VAR_HPACCELERATION,RDMOPT_VAR_SPACCELERATION,RDMOPT_VAR_AVOIDSUCCESSVALUE,RDMOPT_VAR_PLUSAVOIDSUCCESSVALUE,RDMOPT_VAR_CRITICALSUCCESSVALUE,RDMOPT_VAR_ITEMDEFPOWER,RDMOPT_VAR_MDEFPOWER;
	setarray .@shoes3$[0],RDMOPT_VAR_MAXHPPERCENT,RDMOPT_VAR_MAXSPPERCENT,RDMOPT_RACE_IGNORE_DEF_PERCENT_NOTHING,RDMOPT_RACE_IGNORE_DEF_PERCENT_UNDEAD,RDMOPT_RACE_IGNORE_DEF_PERCENT_ANIMAL,RDMOPT_RACE_IGNORE_DEF_PERCENT_PLANT,RDMOPT_RACE_IGNORE_DEF_PERCENT_INSECT,RDMOPT_RACE_IGNORE_DEF_PERCENT_FISHS,RDMOPT_RACE_IGNORE_DEF_PERCENT_DEVIL,RDMOPT_RACE_IGNORE_DEF_PERCENT_HUMAN,RDMOPT_RACE_IGNORE_DEF_PERCENT_ANGEL,RDMOPT_RACE_IGNORE_DEF_PERCENT_DRAGON,RDMOPT_RACE_IGNORE_MDEF_PERCENT_NOTHING,RDMOPT_RACE_IGNORE_MDEF_PERCENT_UNDEAD,RDMOPT_RACE_IGNORE_MDEF_PERCENT_ANIMAL,RDMOPT_RACE_IGNORE_MDEF_PERCENT_PLANT,RDMOPT_RACE_IGNORE_MDEF_PERCENT_INSECT,RDMOPT_RACE_IGNORE_MDEF_PERCENT_FISHS,RDMOPT_RACE_IGNORE_MDEF_PERCENT_DEVIL,RDMOPT_RACE_IGNORE_MDEF_PERCENT_HUMAN,RDMOPT_RACE_IGNORE_MDEF_PERCENT_ANGEL,RDMOPT_RACE_IGNORE_MDEF_PERCENT_DRAGON;
	setarray .@shoes4$[0],RDMOPT_CLASS_IGNORE_DEF_PERCENT_NORMAL,RDMOPT_CLASS_IGNORE_DEF_PERCENT_BOSS,RDMOPT_CLASS_IGNORE_MDEF_PERCENT_NORMAL,RDMOPT_CLASS_IGNORE_MDEF_PERCENT_BOSS,RDMOPT_VAR_ITEMDEFPOWER,RDMOPT_VAR_MDEFPOWER;
setarray .@OptID[0],.@shoes$[.@i],.@shoes2$[.@i2];
setarray .@OptVal[0],1+rand(0,2),1+rand(0,9);
setarray .@OptParam[0],0;
makeitem3 2404,1,.@map$,.@x,.@y,0,0,0,0,0,0,0,.@OptID,.@OptVal,.@OptParam;
end;

 

Link to comment
Share on other sites

  • 0

  • Group:  Members
  • Topic Count:  42
  • Topics Per Day:  0.01
  • Content Count:  297
  • Reputation:   15
  • Joined:  11/17/11
  • Last Seen:  

On 4/23/2018 at 7:05 PM, WhiteEagle said:

The big problem I've found is that if you had too many variables in the item_randomopt_group.txt, nothing was detected after a certain amount.

To solve this with the random value, I run it via a script. 


if (killedrid == .@mobid[.@m]) {

	setarray .@shoes$[0],RDMOPT_VAR_STRAMOUNT,RDMOPT_VAR_AGIAMOUNT,RDMOPT_VAR_VITAMOUNT,RDMOPT_VAR_INTAMOUNT,RDMOPT_VAR_DEXAMOUNT,RDMOPT_VAR_LUKAMOUNT;
	setarray .@shoes2$[0],RDMOPT_VAR_HPACCELERATION,RDMOPT_VAR_SPACCELERATION,RDMOPT_VAR_AVOIDSUCCESSVALUE,RDMOPT_VAR_PLUSAVOIDSUCCESSVALUE,RDMOPT_VAR_CRITICALSUCCESSVALUE,RDMOPT_VAR_ITEMDEFPOWER,RDMOPT_VAR_MDEFPOWER;
	setarray .@shoes3$[0],RDMOPT_VAR_MAXHPPERCENT,RDMOPT_VAR_MAXSPPERCENT,RDMOPT_RACE_IGNORE_DEF_PERCENT_NOTHING,RDMOPT_RACE_IGNORE_DEF_PERCENT_UNDEAD,RDMOPT_RACE_IGNORE_DEF_PERCENT_ANIMAL,RDMOPT_RACE_IGNORE_DEF_PERCENT_PLANT,RDMOPT_RACE_IGNORE_DEF_PERCENT_INSECT,RDMOPT_RACE_IGNORE_DEF_PERCENT_FISHS,RDMOPT_RACE_IGNORE_DEF_PERCENT_DEVIL,RDMOPT_RACE_IGNORE_DEF_PERCENT_HUMAN,RDMOPT_RACE_IGNORE_DEF_PERCENT_ANGEL,RDMOPT_RACE_IGNORE_DEF_PERCENT_DRAGON,RDMOPT_RACE_IGNORE_MDEF_PERCENT_NOTHING,RDMOPT_RACE_IGNORE_MDEF_PERCENT_UNDEAD,RDMOPT_RACE_IGNORE_MDEF_PERCENT_ANIMAL,RDMOPT_RACE_IGNORE_MDEF_PERCENT_PLANT,RDMOPT_RACE_IGNORE_MDEF_PERCENT_INSECT,RDMOPT_RACE_IGNORE_MDEF_PERCENT_FISHS,RDMOPT_RACE_IGNORE_MDEF_PERCENT_DEVIL,RDMOPT_RACE_IGNORE_MDEF_PERCENT_HUMAN,RDMOPT_RACE_IGNORE_MDEF_PERCENT_ANGEL,RDMOPT_RACE_IGNORE_MDEF_PERCENT_DRAGON;
	setarray .@shoes4$[0],RDMOPT_CLASS_IGNORE_DEF_PERCENT_NORMAL,RDMOPT_CLASS_IGNORE_DEF_PERCENT_BOSS,RDMOPT_CLASS_IGNORE_MDEF_PERCENT_NORMAL,RDMOPT_CLASS_IGNORE_MDEF_PERCENT_BOSS,RDMOPT_VAR_ITEMDEFPOWER,RDMOPT_VAR_MDEFPOWER;

setarray .@OptID[0],.@shoes$[.@i],.@shoes2$[.@i2];
setarray .@OptVal[0],1+rand(0,2),1+rand(0,9);
setarray .@OptParam[0],0;
makeitem3 2404,1,.@map$,.@x,.@y,0,0,0,0,0,0,0,.@OptID,.@OptVal,.@OptParam;
end;

 

Yep. That's really a problem when you do it via scripting. That's why this proposal is more geared towards modifying the source. I have successfully implemented it with my trunk but I am currently getting issues when using @reloaditemdb and it crashes the map server. Other than that, the way the item is being dropped by mobs with random options based on what I have explained above, works; Including the randomized values. 
It's following the structure below.

// <randopt_groupid>,<rate>,<randopt_id1>,<randopt_value_min1>,<randopt_value_max1>,{<randopt_id2>,<randopt_value_min2>,<randopt_value_max2>,...}

I am still looking for that hitch that crashes the map server everytime I @reloaditemdb.

Link to comment
Share on other sites

  • 0

  • Group:  Developer
  • Topic Count:  36
  • Topics Per Day:  0.01
  • Content Count:  587
  • Reputation:   431
  • Joined:  01/26/16
  • Last Seen:  

Opened an issue on our issue tracker. Please direct further suggestion there instead of this topic.

https://github.com/rathena/rathena/issues/3084

Link to comment
Share on other sites

  • 0

  • Group:  Members
  • Topic Count:  0
  • Topics Per Day:  0
  • Content Count:  24
  • Reputation:   3
  • Joined:  10/10/14
  • Last Seen:  

On 4/15/2018 at 10:46 AM, Jhedzkie said:

Why is that?
Wouldn't adding specific random option group per slot take a lot more lines to cover for all items you want to have random options?

I am currently using my own implementation based on the existing item_random_option_group db file and this is how it looks like. It still follows the same structure,but the point is that it does not define what will be the random options available to that certain type of item, instead, it defines what are the available random options that item type can have.
 


// <randopt_groupid>,<rate>,<randopt_id1>,<randopt_value1>,<randopt_param1>{,<randopt_id2>,<randopt_value2>,<randopt_param2>,<randopt_id3>,<randopt_value3>,<randopt_param3>,<randopt_id4>,<randopt_value4>,<randopt_param4>,<randopt_id5>,<randopt_value5>,<randopt_param5>} and so on and so forth. just how many do you like this line to have. lmfao.


image.thumb.png.0fdb9682b906aae658cc647cdcacb12b.png

See I only had up to line 196 and i covered all of the equip types dagger to 2-h staves and armor to accessories each with different set of random options. and in my case, I only made small changes to the source so that the group that will be randomized will not reflect as is/whereis, instead, will just randomly pick which number of options (1-5) will reflect to the equip. 

For example, a Clip[1].

Using my random option group for accessory.


RDMOPTG_ACCESSORY,25,RDMOPT_VAR_STRAMOUNT, 5,0,RDMOPT_VAR_AGIAMOUNT, 5,0,RDMOPT_VAR_VITAMOUNT, 5,0,RDMOPT_VAR_INTAMOUNT, 5,0,RDMOPT_VAR_DEXAMOUNT, 5,0,RDMOPT_VAR_LUKAMOUNT, 5,0,RDMOPT_VAR_HPACCELERATION, 5,0,RDMOPT_VAR_SPACCELERATION, 5,0,RDMOPT_VAR_PLUSASPD,1,0,RDMOPT_VAR_PLUSASPDPERCENT, 5,0,RDMOPT_VAR_CRITICALSUCCESSVALUE, 2,0,RDMOPT_HEAL_VALUE, 2,0,RDMOPT_HEAL_MODIFY_PERCENT, 2,0,RDMOPT_DEC_SPELL_CAST_TIME, 2,0,RDMOPT_DEC_SPELL_DELAY_TIME, 2,0
RDMOPTG_ACCESSORY,20,RDMOPT_VAR_STRAMOUNT, 8,0,RDMOPT_VAR_AGIAMOUNT, 8,0,RDMOPT_VAR_VITAMOUNT, 8,0,RDMOPT_VAR_INTAMOUNT, 8,0,RDMOPT_VAR_DEXAMOUNT, 8,0,RDMOPT_VAR_LUKAMOUNT, 8,0,RDMOPT_VAR_HPACCELERATION, 8,0,RDMOPT_VAR_SPACCELERATION, 8,0,RDMOPT_VAR_PLUSASPD,2,0,RDMOPT_VAR_PLUSASPDPERCENT, 8,0,RDMOPT_VAR_CRITICALSUCCESSVALUE, 4,0,RDMOPT_HEAL_VALUE, 4,0,RDMOPT_HEAL_MODIFY_PERCENT, 4,0,RDMOPT_DEC_SPELL_CAST_TIME, 5,0,RDMOPT_DEC_SPELL_DELAY_TIME, 5,0
RDMOPTG_ACCESSORY,10,RDMOPT_VAR_STRAMOUNT,12,0,RDMOPT_VAR_AGIAMOUNT,12,0,RDMOPT_VAR_VITAMOUNT,12,0,RDMOPT_VAR_INTAMOUNT,12,0,RDMOPT_VAR_DEXAMOUNT,12,0,RDMOPT_VAR_LUKAMOUNT,12,0,RDMOPT_VAR_HPACCELERATION,12,0,RDMOPT_VAR_SPACCELERATION,12,0,RDMOPT_VAR_PLUSASPD,3,0,RDMOPT_VAR_PLUSASPDPERCENT,12,0,RDMOPT_VAR_CRITICALSUCCESSVALUE, 7,0,RDMOPT_HEAL_VALUE, 7,0,RDMOPT_HEAL_MODIFY_PERCENT, 7,0,RDMOPT_DEC_SPELL_CAST_TIME,10,0,RDMOPT_DEC_SPELL_DELAY_TIME,10,0
RDMOPTG_ACCESSORY, 5,RDMOPT_VAR_STRAMOUNT,15,0,RDMOPT_VAR_AGIAMOUNT,15,0,RDMOPT_VAR_VITAMOUNT,15,0,RDMOPT_VAR_INTAMOUNT,15,0,RDMOPT_VAR_DEXAMOUNT,15,0,RDMOPT_VAR_LUKAMOUNT,15,0,RDMOPT_VAR_HPACCELERATION,15,0,RDMOPT_VAR_SPACCELERATION,15,0,RDMOPT_VAR_PLUSASPD,4,0,RDMOPT_VAR_PLUSASPDPERCENT,15,0,RDMOPT_VAR_CRITICALSUCCESSVALUE,10,0,RDMOPT_HEAL_VALUE,10,0,RDMOPT_HEAL_MODIFY_PERCENT,10,0,RDMOPT_DEC_SPELL_CAST_TIME,15,0,RDMOPT_DEC_SPELL_DELAY_TIME,15,0
RDMOPTG_ACCESSORY, 2,RDMOPT_VAR_STRAMOUNT,18,0,RDMOPT_VAR_AGIAMOUNT,18,0,RDMOPT_VAR_VITAMOUNT,18,0,RDMOPT_VAR_INTAMOUNT,18,0,RDMOPT_VAR_DEXAMOUNT,18,0,RDMOPT_VAR_LUKAMOUNT,18,0,RDMOPT_VAR_HPACCELERATION,18,0,RDMOPT_VAR_SPACCELERATION,18,0,RDMOPT_VAR_PLUSASPD,5,0,RDMOPT_VAR_PLUSASPDPERCENT,18,0,RDMOPT_VAR_CRITICALSUCCESSVALUE,12,0,RDMOPT_HEAL_VALUE,12,0,RDMOPT_HEAL_MODIFY_PERCENT,12,0,RDMOPT_DEC_SPELL_CAST_TIME,20,0,RDMOPT_DEC_SPELL_DELAY_TIME,20,0
RDMOPTG_ACCESSORY, 1,RDMOPT_VAR_STRAMOUNT,25,0,RDMOPT_VAR_AGIAMOUNT,25,0,RDMOPT_VAR_VITAMOUNT,25,0,RDMOPT_VAR_INTAMOUNT,25,0,RDMOPT_VAR_DEXAMOUNT,25,0,RDMOPT_VAR_LUKAMOUNT,25,0,RDMOPT_VAR_HPACCELERATION,25,0,RDMOPT_VAR_SPACCELERATION,25,0,RDMOPT_VAR_PLUSASPD,7,0,RDMOPT_VAR_PLUSASPDPERCENT,25,0,RDMOPT_VAR_CRITICALSUCCESSVALUE,15,0,RDMOPT_HEAL_VALUE,15,0,RDMOPT_HEAL_MODIFY_PERCENT,15,0,RDMOPT_DEC_SPELL_CAST_TIME,25,0,RDMOPT_DEC_SPELL_DELAY_TIME,25,0

So it has,
STR, AGI, VIT, INT, DEX, LUK, HP Regen, SP Regen, ASPD, ASPDRate, CritRate, Healing, HealingRate, Reduce Cast, Reduce Delay

So the rate is based on the 2nd value in the group definition right? So saying that you got the 25% so you got the first line. From there, my code is to randomize how many slots or how many random options will be awarded to the item. Lets say, it randomized to 3.
It will then lookup the rest of the line and randomly pick which 3 would reflect to the item. For example, it randomed INT, SP Acceleration, and Healing Rate. It will then reflect to the Clip[1] INT+5, Increase SP Regen by 5%,  and Healing Power +2%.
image.png.c9b207ea346e1ea6ec7e48dae7eadcbb.png

Well, if you really want to modify the current db structure, the best way to go is to just add min and max value so that it can be randomed source side. make the structure like


// <randopt_groupid>,<rate>,<randopt_id1>,<randopt_value_min1>,<randopt_value_max1>,<randopt_param1>{,<randopt_id2>,<randopt_value_min2>,<randopt_value_max2>,...}


That should solve your problem, right?

I don't know if I understood it well, but this is just my take on it.

 

Hi, sorry for reviving this dead post but can i ask you for src to find how many random options will be awarded to item? 

Link to comment
Share on other sites

  • 0

  • Group:  Members
  • Topic Count:  47
  • Topics Per Day:  0.01
  • Content Count:  121
  • Reputation:   6
  • Joined:  09/26/14
  • Last Seen:  

Is this addressed already? I'm having the same concern as well.

On 2/24/2020 at 1:45 PM, MrUnzO said:

Hi, sorry for reviving this dead post but can i ask you for src to find how many random options will be awarded to item? 

 

On 4/15/2018 at 11:46 AM, Jhedzkie said:

.....

How did you make this sir? may we ask?

Link to comment
Share on other sites

  • 0

  • Group:  Members
  • Topic Count:  42
  • Topics Per Day:  0.01
  • Content Count:  297
  • Reputation:   15
  • Joined:  11/17/11
  • Last Seen:  

On 2/25/2020 at 11:20 PM, mawjustin said:

Is this addressed already? I'm having the same concern as well.

 

How did you make this sir? may we ask?

I actually already dropped my project with this implementation and went with what rA currently offers with regards randomoptions. So, I'm afraid I cannot help you here. It's been a while too. I might've already already lost the patches that I made before for this specific mod. 

Link to comment
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.   Paste as plain text instead

  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.

×
×
  • Create New...