Jump to content
  • 0

How to reduce damage of Sura's Cresent Elbow


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. My server is 255/120 high rate based. And i found out this crescent elbow is too OP. How can i reduce its damage? Im using latest SVN. I saw this post but its too old. The latest battle.c is somehow different. Can someone please help me?

And please make the guide baby like. I am really not good at this stuff. Thanks in advance rathena people! ♥
 

Conditions: I want to reduce the damage taken and leave the knock back thingy.

Link to comment
Share on other sites

8 answers to this question

Recommended Posts

  • 0

  • Group:  Members
  • Topic Count:  105
  • Topics Per Day:  0.02
  • Content Count:  446
  • Reputation:   229
  • Joined:  03/20/12
  • Last Seen:  

Hsve you tried editing db/skill_damage.txt yet? 

  • Upvote 2
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:  

the easier way is do what mabuhay told ya, but if you wanna do it on src, take a look at this part
 

	if( tsc && tsc->data[SC_CRESCENTELBOW] && wd->flag&BF_SHORT && rnd()%100 < tsc->data[SC_CRESCENTELBOW]->val2 ) {
		//ATK [{(Target HP / 100) x Skill Level} x Caster Base Level / 125] % + [Received damage x {1 + (Skill Level x 0.2)}]
		int64 rdamage = 0;
		int ratio = (int64)(status_get_hp(src) / 100) * tsc->data[SC_CRESCENTELBOW]->val1 * status_get_lv(target) / 125;
		if (ratio > 5000) ratio = 5000; // Maximum of 5000% ATK
		rdamage = battle_calc_base_damage(target,tstatus,&tstatus->rhw,tsc,sstatus->size,0);
		rdamage = (int64)rdamage * ratio / 100 + wd->damage * (10 + tsc->data[SC_CRESCENTELBOW]->val1 * 20 / 10) / 10;
		skill_blown(target, src, skill_get_blewcount(SR_CRESCENTELBOW_AUTOSPELL, tsc->data[SC_CRESCENTELBOW]->val1), unit_getdir(src), BLOWN_NONE);
		clif_skill_damage(target, src, gettick(), status_get_amotion(src), 0, rdamage,
			1, SR_CRESCENTELBOW_AUTOSPELL, tsc->data[SC_CRESCENTELBOW]->val1, DMG_SKILL); // This is how official does
		clif_damage(src, target, gettick(), status_get_amotion(src)+1000, 0, rdamage/10, 1, DMG_NORMAL, 0, false);
		status_damage(target, src, rdamage, 0, 0, 0);
		status_damage(src, target, rdamage/10, 0, 0, 1);
		status_change_end(target, SC_CRESCENTELBOW, INVALID_TIMER);
	}

and compare to this details https://irowiki.org/wiki/Crescent_Elbow, you can make head what you need to nerf from the formula used, there is a comment on how formula worked there...

usually pitfall on high cap max level server is the stats go so high and make it dumb damage output.

Edited by Litro Endemic
  • Upvote 1
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:  

hey buddy ?‍♂️

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:  

 

5 hours ago, Mabuhay said:

Hsve you tried editing db/skill_damage.txt yet? 

I didnt know that we have that! Oh my! Thanks as always @Mabuhay! I have my of your scrips as well. Im using it for my server. Its called “item giver” ❤️

1 hour ago, Litro Endemic said:

the easier way is do what mabuhay told ya, but if you wanna do it on src, take a look at this part
 


	if( tsc && tsc->data[SC_CRESCENTELBOW] && wd->flag&BF_SHORT && rnd()%100 < tsc->data[SC_CRESCENTELBOW]->val2 ) {
		//ATK [{(Target HP / 100) x Skill Level} x Caster Base Level / 125] % + [Received damage x {1 + (Skill Level x 0.2)}]
		int64 rdamage = 0;
		int ratio = (int64)(status_get_hp(src) / 100) * tsc->data[SC_CRESCENTELBOW]->val1 * status_get_lv(target) / 125;
		if (ratio > 5000) ratio = 5000; // Maximum of 5000% ATK
		rdamage = battle_calc_base_damage(target,tstatus,&tstatus->rhw,tsc,sstatus->size,0);
		rdamage = (int64)rdamage * ratio / 100 + wd->damage * (10 + tsc->data[SC_CRESCENTELBOW]->val1 * 20 / 10) / 10;
		skill_blown(target, src, skill_get_blewcount(SR_CRESCENTELBOW_AUTOSPELL, tsc->data[SC_CRESCENTELBOW]->val1), unit_getdir(src), BLOWN_NONE);
		clif_skill_damage(target, src, gettick(), status_get_amotion(src), 0, rdamage,
			1, SR_CRESCENTELBOW_AUTOSPELL, tsc->data[SC_CRESCENTELBOW]->val1, DMG_SKILL); // This is how official does
		clif_damage(src, target, gettick(), status_get_amotion(src)+1000, 0, rdamage/10, 1, DMG_NORMAL, 0, false);
		status_damage(target, src, rdamage, 0, 0, 0);
		status_damage(src, target, rdamage/10, 0, 0, 1);
		status_change_end(target, SC_CRESCENTELBOW, INVALID_TIMER);
	}

and compare to this details https://irowiki.org/wiki/Crescent_Elbow, you can make head what you need to nerf from the formula used, there is a comment on how formula worked there...

usually pitfall on high cap max level server is the stats go so high and make it dumb damage output.

Will look into this bro. Hey i know you! Yes you. Youre the one who helped someone about the disabling the achievement thingy. I have bookmarked it and will try later. 

 

Anyhow if @Mabuhay‘s method is working then its fine by me. I dont really want to hover with src’s. 

 

Thanks guys!

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:  

@Mabuhay & @Litro Endemic

So i have tried this

 

SR_CRESCENTELBOW,1,7,-100 // In PVP and GVG, players deal -100% damage to other players with Crescent Elbow.

I have somehow cloned the example for Asura Strike. But i still get damage from it. I put 7 to have it in all maps. I tried 6 as well but no to avail. And oh this txt file comes from db/import.

*EDIT

I have tried other skills such as ASURA STRIKE. It works! But CRESCENT ELBOW is not DAMAGE SKILL i think? Its a reflect thingy so editing the skill_damage_db.txt is useless for it. Correct me if im wrong. Thanks!
 

2 hours ago, Litro Endemic said:

the easier way is do what mabuhay told ya, but if you wanna do it on src, take a look at this part
 


	if( tsc && tsc->data[SC_CRESCENTELBOW] && wd->flag&BF_SHORT && rnd()%100 < tsc->data[SC_CRESCENTELBOW]->val2 ) {
		//ATK [{(Target HP / 100) x Skill Level} x Caster Base Level / 125] % + [Received damage x {1 + (Skill Level x 0.2)}]
		int64 rdamage = 0;
		int ratio = (int64)(status_get_hp(src) / 100) * tsc->data[SC_CRESCENTELBOW]->val1 * status_get_lv(target) / 125;
		if (ratio > 5000) ratio = 5000; // Maximum of 5000% ATK
		rdamage = battle_calc_base_damage(target,tstatus,&tstatus->rhw,tsc,sstatus->size,0);
		rdamage = (int64)rdamage * ratio / 100 + wd->damage * (10 + tsc->data[SC_CRESCENTELBOW]->val1 * 20 / 10) / 10;
		skill_blown(target, src, skill_get_blewcount(SR_CRESCENTELBOW_AUTOSPELL, tsc->data[SC_CRESCENTELBOW]->val1), unit_getdir(src), BLOWN_NONE);
		clif_skill_damage(target, src, gettick(), status_get_amotion(src), 0, rdamage,
			1, SR_CRESCENTELBOW_AUTOSPELL, tsc->data[SC_CRESCENTELBOW]->val1, DMG_SKILL); // This is how official does
		clif_damage(src, target, gettick(), status_get_amotion(src)+1000, 0, rdamage/10, 1, DMG_NORMAL, 0, false);
		status_damage(target, src, rdamage, 0, 0, 0);
		status_damage(src, target, rdamage/10, 0, 0, 1);
		status_change_end(target, SC_CRESCENTELBOW, INVALID_TIMER);
	}

and compare to this details https://irowiki.org/wiki/Crescent_Elbow, you can make head what you need to nerf from the formula used, there is a comment on how formula worked there...

usually pitfall on high cap max level server is the stats go so high and make it dumb damage output.


I really dont this part. Hehe! Im sorry!

Edited by gidzdlcrz
Link to comment
Share on other sites

  • 0

  • Group:  Members
  • Topic Count:  105
  • Topics Per Day:  0.02
  • Content Count:  446
  • Reputation:   229
  • Joined:  03/20/12
  • Last Seen:  

9 hours ago, gidzdlcrz said:

@Mabuhay & @Litro Endemic

So i have tried this

 


SR_CRESCENTELBOW,1,7,-100 // In PVP and GVG, players deal -100% damage to other players with Crescent Elbow.

I have somehow cloned the example for Asura Strike. But i still get damage from it. I put 7 to have it in all maps. I tried 6 as well but no to avail. And oh this txt file comes from db/import.

*EDIT

I have tried other skills such as ASURA STRIKE. It works! But CRESCENT ELBOW is not DAMAGE SKILL i think? Its a reflect thingy so editing the skill_damage_db.txt is useless for it. Correct me if im wrong. Thanks!
 


I really dont this part. Hehe! Im sorry!

You can just tag me once. No need to tag me everytime. I also have something called "personal life" so I couldn't attend to every queries in a flash.

Anyhow... This part of the script already tells you how it calculates stuff..

		//ATK [{(Target HP / 100) x Skill Level} x Caster Base Level / 125] % + [Received damage x {1 + (Skill Level x 0.2)}]
		int64 rdamage = 0;
		int ratio = (int64)(status_get_hp(src) / 100) * tsc->data[SC_CRESCENTELBOW]->val1 * status_get_lv(target) / 125;
		if (ratio > 5000) ratio = 5000; // Maximum of 5000% ATK
		rdamage = battle_calc_base_damage(target,tstatus,&tstatus->rhw,tsc,sstatus->size,0);
		rdamage = (int64)rdamage * ratio / 100 + wd->damage * (10 + tsc->data[SC_CRESCENTELBOW]->val1 * 20 / 10) / 10;

to break it down for you..

		//ATK [{(Target HP / 100) x Skill Level} x Caster Base Level / 125] % + [Received damage x {1 + (Skill Level x 0.2)}]
		int64 rdamage = 0;

		// [{(Target HP / 100) x Skill Level} x Caster Base Level / 125]
		int ratio = (int64)(status_get_hp(src) / 100) * tsc->data[SC_CRESCENTELBOW]->val1 * status_get_lv(target) / 125;

		if (ratio > 5000) ratio = 5000; // Maximum of 5000% ATK -- this is just a damage limit cap..

		// [Received damage x {1 + (Skill Level x 0.2)}] -- the rest of the calculation
		rdamage = battle_calc_base_damage(target,tstatus,&tstatus->rhw,tsc,sstatus->size,0);
		rdamage = (int64)rdamage * ratio / 100 + wd->damage * (10 + tsc->data[SC_CRESCENTELBOW]->val1 * 20 / 10) / 10;

You will only need basic arithmetic to adjust the damage carefully.. try to adjust one  part at a time to avoid confusion..

Goodluck!

  • 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:  

1 hour ago, Mabuhay said:

You can just tag me once. No need to tag me everytime. I also have something called "personal life" so I couldn't attend to every queries in a flash.

Anyhow... This part of the script already tells you how it calculates stuff..


		//ATK [{(Target HP / 100) x Skill Level} x Caster Base Level / 125] % + [Received damage x {1 + (Skill Level x 0.2)}]
		int64 rdamage = 0;
		int ratio = (int64)(status_get_hp(src) / 100) * tsc->data[SC_CRESCENTELBOW]->val1 * status_get_lv(target) / 125;
		if (ratio > 5000) ratio = 5000; // Maximum of 5000% ATK
		rdamage = battle_calc_base_damage(target,tstatus,&tstatus->rhw,tsc,sstatus->size,0);
		rdamage = (int64)rdamage * ratio / 100 + wd->damage * (10 + tsc->data[SC_CRESCENTELBOW]->val1 * 20 / 10) / 10;

to break it down for you..


		//ATK [{(Target HP / 100) x Skill Level} x Caster Base Level / 125] % + [Received damage x {1 + (Skill Level x 0.2)}]
		int64 rdamage = 0;

		// [{(Target HP / 100) x Skill Level} x Caster Base Level / 125]
		int ratio = (int64)(status_get_hp(src) / 100) * tsc->data[SC_CRESCENTELBOW]->val1 * status_get_lv(target) / 125;

		if (ratio > 5000) ratio = 5000; // Maximum of 5000% ATK -- this is just a damage limit cap..

		// [Received damage x {1 + (Skill Level x 0.2)}] -- the rest of the calculation
		rdamage = battle_calc_base_damage(target,tstatus,&tstatus->rhw,tsc,sstatus->size,0);
		rdamage = (int64)rdamage * ratio / 100 + wd->damage * (10 + tsc->data[SC_CRESCENTELBOW]->val1 * 20 / 10) / 10;

You will only need basic arithmetic to adjust the damage carefully.. try to adjust one  part at a time to avoid confusion..

Goodluck!

Sorry for mentioning you twice.

I have tried several mods but still no avail

1

if( tsc && tsc->data[SC_CRESCENTELBOW] && wd->flag&BF_SHORT && rnd()%100 < tsc->data[SC_CRESCENTELBOW]->val2 ) {
		//ATK [{(Target HP / 100) x Skill Level} x Caster Base Level / 125] % + [Received damage x {1 + (Skill Level x 0.2)}]
		int64 rdamage = 0;
		int ratio = (int64)(status_get_hp(src) / 100) * tsc->data[SC_CRESCENTELBOW]->val1 * status_get_lv(target) / 125;
		if (ratio > 500) ratio = 500; // Maximum of 5000% ATK
		rdamage = battle_calc_base_damage(target,tstatus,&tstatus->rhw,tsc,sstatus->size,0);
		rdamage = (int64)rdamage * ratio / 10 + wd->damage * (3 + tsc->data[SC_CRESCENTELBOW]->val1 * 10 / 5) / 5;
		skill_blown(target, src, skill_get_blewcount(SR_CRESCENTELBOW_AUTOSPELL, tsc->data[SC_CRESCENTELBOW]->val1), unit_getdir(src), BLOWN_NONE);
		clif_skill_damage(target, src, gettick(), status_get_amotion(src), 0, rdamage,
			1, SR_CRESCENTELBOW_AUTOSPELL, tsc->data[SC_CRESCENTELBOW]->val1, DMG_SKILL); // This is how official does
		clif_damage(src, target, gettick(), status_get_amotion(src)+1000, 0, rdamage/10, 1, DMG_NORMAL, 0, false);
		status_damage(target, src, rdamage, 0, 0, 0);
		status_damage(src, target, rdamage/10, 0, 0, 1);
		status_change_end(target, SC_CRESCENTELBOW, INVALID_TIMER);
	}

 

2
 

if( tsc && tsc->data[SC_CRESCENTELBOW] && wd->flag&BF_SHORT && rnd()%100 < tsc->data[SC_CRESCENTELBOW]->val2 ) {
		//ATK [{(Target HP / 100) x Skill Level} x Caster Base Level / 125] % + [Received damage x {1 + (Skill Level x 0.2)}]
		int64 rdamage = 0;
		int ratio = (int64)(status_get_hp(src) / 10000) * tsc->data[SC_CRESCENTELBOW]->val1 * status_get_lv(target) / 125;
		if (ratio > 500) ratio = 500; // Maximum of 5000% ATK
		rdamage = battle_calc_base_damage(target,tstatus,&tstatus->rhw,tsc,sstatus->size,0);
		rdamage = (int64)rdamage * ratio / 10 + wd->damage * (3 + tsc->data[SC_CRESCENTELBOW]->val1 * 10 / 5) / 5;
		skill_blown(target, src, skill_get_blewcount(SR_CRESCENTELBOW_AUTOSPELL, tsc->data[SC_CRESCENTELBOW]->val1), unit_getdir(src), BLOWN_NONE);
		clif_skill_damage(target, src, gettick(), status_get_amotion(src), 0, rdamage,
			1, SR_CRESCENTELBOW_AUTOSPELL, tsc->data[SC_CRESCENTELBOW]->val1, DMG_SKILL); // This is how official does
		clif_damage(src, target, gettick(), status_get_amotion(src)+500, 0, rdamage/10, 1, DMG_NORMAL, 0, false);
		status_damage(target, src, rdamage, 0, 0, 0);
		status_damage(src, target, rdamage/10, 0, 0, 1);
		status_change_end(target, SC_CRESCENTELBOW, INVALID_TIMER);
	}



Tried them but still no luck. I suck.

Edited by gidzdlcrz
  • 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:  

how much damage output and damage diff you get from 2nd change mentioned by you above ?

		int ratio = (int64)(status_get_hp(src) / 10000) * tsc->data[SC_CRESCENTELBOW]->val1 * status_get_lv(target) / 125;
		if (ratio > 500) ratio = 500; // Maximum of 5000% ATK

this is crazy, iirc usually i only cap the hp and lower max ratio of atk, let said player a have crescent elbow and player b hit him, player b has 300k hp, 
before nerf main damage = (300,000/100) * 5 * 255/ 125 = 30600 * 5000 / 10 = 15,300,000

after nerf, main damge =  (300,000/10000) * 5 * 255/ 125 = 306 * 500 / 10 = 1,530,000

if you see the pattern multiply and division of factor damage variable that multiply it, you only need to make it sane enough

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