Jump to content
  • 0

Buffing the skill of Sorce (Extreme Vacuum)


Gidz Cross

Question


  • Group:  Members
  • Topic Count:  123
  • Topics Per Day:  0.03
  • Content Count:  640
  • Reputation:   82
  • Joined:  04/07/14
  • Last Seen:  

Hello guys. My server setup is 255/120 and the max stat parameters is 255. This is about EXTREME VACUUM skill. The thing is its pretty useless on my server. It works as intended dont get me wrong. But i want to buff it so it can be usable in my server setup.

If i have 180 STR. The skill wont work anymore.

if i have 1 STR = the skill will last 12 seconds
if i have 100 STR = the skill will last 6 seconds

My concern is this. Since my server is high rate. I want to buff it so it will work for those who have 255 STR.

Here is the skill.c about the skill

 

		case UNT_VACUUM_EXTREME:
			if (tsc && (tsc->data[SC_HALLUCINATIONWALK] || tsc->data[SC_HOVERING] || tsc->data[SC_VACUUM_EXTREME] ||
				(tsc->data[SC_VACUUM_EXTREME_POSTDELAY] && tsc->data[SC_VACUUM_EXTREME_POSTDELAY]->val2 == sg->group_id))) // Ignore post delay from other vacuum (this will make stack effect enabled)
				return 0;

			if (unit_bl2ud(bl)->walktimer == INVALID_TIMER) // Apply effect and suck non-walking targets one-by-one each n seconds
				sc_start4(ss, bl, type, 100, sg->skill_lv, sg->group_id, (sg->val1<<16)|(sg->val2), ++sg->val3*500, (sg->limit - DIFF_TICK(tick, sg->tick)));
			break;

What should i change here? Im pretty clueless. Tried to explore it little bit but no effect.

Thanks for the help friends!

Edited by gidzdlcrz
Link to comment
Share on other sites

6 answers to this question

Recommended Posts

  • 0

  • Group:  Members
  • Topic Count:  20
  • Topics Per Day:  0.01
  • Content Count:  416
  • Reputation:   73
  • Joined:  05/16/19
  • Last Seen:  

status.c

 

		case SC_VACUUM_EXTREME:
			tick_def2 = (sd ? sd->status.str : status_get_base_status(bl)->str) * 50;
			break;

 

 

your just looking in the wrong spot

 

 

god bless 

  • Upvote 1
Link to comment
Share on other sites

  • 0

  • Group:  Members
  • Topic Count:  123
  • Topics Per Day:  0.03
  • Content Count:  640
  • Reputation:   82
  • Joined:  04/07/14
  • Last Seen:  

On 1/31/2020 at 3:50 AM, Naruto said:

status.c

 


		case SC_VACUUM_EXTREME:
			tick_def2 = (sd ? sd->status.str : status_get_base_status(bl)->str) * 50;
			break;

your just looking in the wrong spot

god bless 

Oh my oh my! Will try later. Will give feedback after @Narutokun ♥

 

Hi @Narutokun. I have tried changing the the 50 into different number. Im trying 1000 at the moment still it doesnt work. Hmmmm. Am i missing something here? Bump! Anyone?

Link to comment
Share on other sites

  • 0

  • Group:  Members
  • Topic Count:  20
  • Topics Per Day:  0.01
  • Content Count:  416
  • Reputation:   73
  • Joined:  05/16/19
  • Last Seen:  

need to lower that number not raise it

not sure why your own strength is taken into part but thats a .. true false thing, if its SD then it picks the first one ( your str) if not it picks target str

Quote

If i have 180 STR. The skill wont work anymore.

if i have 1 STR = the skill will last 12 seconds
if i have 100 STR = the skill will last 6 seconds

 

yeah so

100 strength * 50 = half of original 6 second.

and your losing it all at 180...

 


This game wasnt designed for high rate, so this problem happens very often you could even settle the balance by writing something like this 

if (sd->status.str >= 170 )(

then have the same formula but lowered number so it doesnt punch the effect once your strength is really high

)

then close it and 

Edited by Naruto
  • Upvote 1
Link to comment
Share on other sites

  • 0

  • Group:  Members
  • Topic Count:  25
  • Topics Per Day:  0.01
  • Content Count:  283
  • Reputation:   76
  • Joined:  06/13/13
  • Last Seen:  

lower the multiply number in the formula, this is form server 250 that was configured by me in the past, i forgot how do i calculate it, usually i just put debug info to show the output tick and playing with the stats, to grasp the info needed...

		case SC_VACUUM_EXTREME:
			tick_def2 = (sd ? sd->status.str : status_get_base_status(bl)->str) * 36;
			break;

example of debug code

		case SC_VACUUM_EXTREME:
			tick_def2 = (sd ? sd->status.str : status_get_base_status(bl)->str) * 36;
			ShowDebug("SC_VACUUM_EXTREME: tick_def2: %d \n", tick_def2);
			break;

it will appear as debug info on map server console, output value will be in milliseconds.

update 1:

Additional info, base duration by skill level is in skill_cast_db.txt if you not yet updated to the yaml or latest commit

2453,1000:1500:2000:2500:3000,1000,0,4000:6000:8000:10000:12000,2000,5000,-1

compare it to the info from iro wiki https://irowiki.org/wiki/Extreme_Vacuum

formula: base duration - (target base str / 20)

at skill level 5:  12 seconds = 12000 ms = 100% base duration, currently max stats is 130,  if str is maxed 130 / 20 = 6.5 seconds, the formula in src rathena is converted to the milliseconds as tick measurement which still has the same result: 130 * 50 = 6500 ms (6.5s), 

now to adjust it to your need do your math here 

12000 - (180 * ??) = 0 ms,
12000 - (100 * ??) = 6 s / 6000 ms.

well looking at it the need of 180 str and 100 str is not dynamic, so you need switch case or if, better to adjust it to 200 or 90 to get 6s and so, that would get you dynamic formula
 

tick_def2 = (sd ? (cap_value(sd->status.str, 1, 180) * 66 + 120): status_get_base_status(bl)->str * 50);

put cap so it wouldn't be overflowed to negative tick... well you can mod it as you please based on this.

Edited by Litro Endemic
  • Upvote 1
Link to comment
Share on other sites

  • 0

  • Group:  Members
  • Topic Count:  123
  • Topics Per Day:  0.03
  • Content Count:  640
  • Reputation:   82
  • Joined:  04/07/14
  • Last Seen:  

8 hours ago, Naruto said:

need to lower that number not raise it

not sure why your own strength is taken into part but thats a .. true false thing, if its SD then it picks the first one ( your str) if not it picks target str

 

yeah so

100 strength * 50 = half of original 6 second.

and your losing it all at 180...

 


This game wasnt designed for high rate, so this problem happens very often you could even settle the balance by writing something like this 

if (sd->status.str >= 170 )(

then have the same formula but lowered number so it doesnt punch the effect once your strength is really high

)

then close it and 

@Narutokun! Its working now. So i need to lower it not raise it. Thankyou!! ♥

4 hours ago, Litro Endemic said:

lower the multiply number in the formula, this is form server 250 that was configured by me in the past, i forgot how do i calculate it, usually i just put debug info to show the output tick and playing with the stats, to grasp the info needed...


		case SC_VACUUM_EXTREME:
			tick_def2 = (sd ? sd->status.str : status_get_base_status(bl)->str) * 36;
			break;

example of debug code


		case SC_VACUUM_EXTREME:
			tick_def2 = (sd ? sd->status.str : status_get_base_status(bl)->str) * 36;
			ShowDebug("SC_VACUUM_EXTREME: tick_def2: %d \n", tick_def2);
			break;

it will appear as debug info on map server console, output value will be in milliseconds.

update 1:

Additional info, base duration by skill level is in skill_cast_db.txt if you not yet updated to the yaml or latest commit


2453,1000:1500:2000:2500:3000,1000,0,4000:6000:8000:10000:12000,2000,5000,-1

compare it to the info from iro wiki https://irowiki.org/wiki/Extreme_Vacuum

formula: base duration - (target base str / 20)

at skill level 5:  12 seconds = 12000 ms = 100% base duration, currently max stats is 130,  if str is maxed 130 / 20 = 6.5 seconds, the formula in src rathena is converted to the milliseconds as tick measurement which still has the same result: 130 * 50 = 6500 ms (6.5s), 

now to adjust it to your need do your math here 

12000 - (180 * ??) = 0 ms,
12000 - (100 * ??) = 6 s / 6000 ms.

well looking at it the need of 180 str and 100 str is not dynamic, so you need switch case or if, better to adjust it to 200 or 90 to get 6s and so, that would get you dynamic formula
 


tick_def2 = (sd ? (cap_value(sd->status.str, 1, 180) * 66 + 120): status_get_base_status(bl)->str * 50);

put cap so it wouldn't be overflowed to negative tick... well you can mod it as you please based on this.

Oh very detailed i love it! Thank you as well @Litro Endemic.

More power to you guys! Its working now as intended to my likings!

Link to comment
Share on other sites

  • 0

  • Group:  Members
  • Topic Count:  20
  • Topics Per Day:  0.01
  • Content Count:  416
  • Reputation:   73
  • Joined:  05/16/19
  • Last Seen:  

5 hours ago, gidzdlcrz said:

@Narutokun! Its working now. So i need to lower it not raise it. Thankyou!! ♥

Oh very detailed i love it! Thank you as well @Litro Endemic.

More power to you guys! Its working now as intended to my likings!

The other guy isnt wrong, 

 

The cap is what i suggested

 

no problem 

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...