Jump to content
  • 0
Sign in to follow this  
Vanquiser

Devotion Reflect Damage

Question

Original Post : Here

Any One Can Convert This to Hercules ??

Thx in advance :)

 

 

Index: src/map/battle.c
===================================================================
--- src/map/battle.c (revision 15817)
+++ src/map/battle.c (working copy)

@@ -233,10 +233,8 @@
nullpo_ret(target);
sc = status_get_sc(target);
-
- if( sc && sc->data[sC_DEVOTION] && damage > 0 && skill_id != PA_PRESSURE && skill_id != CR_REFLECTSHIELD )
+ //devotion patch by Cyrix (rathena) ([email protected])
+//https://www.facebook.../ragdb.ragnarok
+if( sc && sc->data[sC_DEVOTION] && damage > 0 && skill_id != PA_PRESSURE && skill_id != CR_REFLECTSHIELD )
damage = 0;
-
if ( !battle_config.delay_battle_damage || amotion <= 1 ) {
map_freeblock_lock();
status_fix_damage(src, target, damage, ddelay); // We have to seperate here between reflect damage and others [icescope]
@@ -4186,7 +4184,7 @@
}
else
status_change_end(target, SC_DEVOTION, INVALID_TIMER);
- }
+ }

if (sc && sc->data[sC_AUTOSPELL] && rnd()0 < sc->data[sC_AUTOSPELL]->val4) {
int sp = 0;
Index: src/map/pc.c
===================================================================
--- src/map/pc.c (revision 15817)
+++ src/map/pc.c (working copy)
@@ -6078,8 +6078,7 @@
for(k = 0; k < 5; k++)
if (sd->devotion[k]){
struct map_session_data *devsd = map_id2sd(sd->devotion[k]);
- if (devsd)
- status_change_end(&devsd->bl, SC_DEVOTION, INVALID_TIMER);
+ //devotion patch by Cyrix (rathena) ([email protected])
+//https://www.facebook.../ragdb.ragnarok
+ if (devsd) status_change_end(&devsd->bl,SC_DEVOTION,-1);
sd->devotion[k] = 0;
}

Index: src/map/status.c
===================================================================
--- src/map/status.c (revision 15817)
+++ src/map/status.c (working copy)
@@ -1015,31 +1015,43 @@
// if (!target->prev && !(flag&2))
// return 0; //Cannot damage a bl not on a map, except when "charging" hp/sp

- sc = status_get_sc(target);
- if( hp && battle_config.invincible_nodamage && src && sc && sc->data[sC_INVINCIBLE] && !sc->data[sC_INVINCIBLEOFF] )
- hp = 1;
+ //devotion patch by Cyrix (rathena) ([email protected])
+//https://www.facebook.../ragdb.ragnarok
+ sc = status_get_sc(target);
+

- if( hp && !(flag&1) ) {
+ if( hp && !(flag&(1|8)) ) {
if( sc ) {
struct status_change_entry *sce;
+ if( (sce = sc->data[sC_DEVOTION]) && src && battle_getcurrentskill(src) != PA_PRESSURE )
+ { // Devotion prevents any of the other ailments from ending.
+ struct block_list *d_bl = map_id2bl(sce->val1);
+
+ if( d_bl && (
+ (d_bl->type == BL_MER && ((TBL_MER*)d_bl)->master && ((TBL_MER*)d_bl)->master->bl.id == target->id) ||
+ (d_bl->type == BL_PC && ((TBL_PC*)d_bl)->devotion[sce->val2] == target->id)
+ ) && check_distance_bl(target, d_bl, sce->val3) )
+ {
+ clif_damage(d_bl, d_bl, gettick(), 0, 0, hp, 0, 0, 0);
+ status_fix_damage(NULL, d_bl, hp, 0);
+ return 0;
+ }
+
+ status_change_end(target, SC_DEVOTION, -1);
+ }
if (sc->data[sC_STONE] && sc->opt1 == OPT1_STONE)
- status_change_end(target, SC_STONE, INVALID_TIMER);
- status_change_end(target, SC_FREEZE, INVALID_TIMER);
- status_change_end(target, SC_SLEEP, INVALID_TIMER);
- status_change_end(target, SC_WINKCHARM, INVALID_TIMER);
- status_change_end(target, SC_CONFUSION, INVALID_TIMER);
- status_change_end(target, SC_TRICKDEAD, INVALID_TIMER);
- status_change_end(target, SC_HIDING, INVALID_TIMER);
- status_change_end(target, SC_CLOAKING, INVALID_TIMER);
- status_change_end(target, SC_CHASEWALK, INVALID_TIMER);
- status_change_end(target, SC_CAMOUFLAGE, INVALID_TIMER);
- status_change_end(target, SC__INVISIBILITY, INVALID_TIMER);
- status_change_end(target, SC_DEEPSLEEP, INVALID_TIMER);
+ status_change_end(target,SC_STONE,-1);
+ status_change_end(target,SC_FREEZE,-1);
+ status_change_end(target,SC_SLEEP,-1);
+ status_change_end(target,SC_WINKCHARM,-1);
+ status_change_end(target,SC_CONFUSION,-1);
+ status_change_end(target,SC_TRICKDEAD,-1);
+ status_change_end(target,SC_HIDING,-1);
+ status_change_end(target,SC_CLOAKING,-1);
+ status_change_end(target,SC_CHASEWALK,-1);
if ((sce=sc->data[sC_ENDURE]) && !sce->val4) {
//Endure count is only reduced by non-players on non-gvg maps.
//val4 signals infinite endure. [skotlex]
if (src && src->type != BL_PC && !map_flag_gvg(target->m) && !map[target->m].flag.battleground && --(sce->val2) < 0)
- status_change_end(target, SC_ENDURE, INVALID_TIMER);
+ status_change_end(target, SC_ENDURE, -1);
}
if ((sce=sc->data[sC_GRAVITATION]) && sce->val3 == BCT_SELF) {
struct skill_unit_group* sg = skill_id2group(sce->val4);
@@ -8235,14 +8247,14 @@
for( i = 0; i < 5; i++ )
{
if( sd->devotion && (tsd = map_id2sd(sd->devotion)) && tsd->sc.data[type] )
- status_change_end(&tsd->bl, type, INVALID_TIMER);
+ status_change_end(&tsd->bl, type, -1);
}
}
else if( bl->type == BL_MER && ((TBL_MER*)bl)->devotion_flag )
{ // Clear Status from Master
tsd = ((TBL_MER*)bl)->master;
if( tsd && tsd->sc.data[type] )
- status_change_end(&tsd->bl, type, INVALID_TIMER);
+ status_change_end(&tsd->bl, type, -1);
}
}
break;
@@ -8258,10 +8270,10 @@
clif_devotion(d_bl, NULL);
}

- status_change_end(bl, SC_AUTOGUARD, INVALID_TIMER);
- status_change_end(bl, SC_DEFENDER, INVALID_TIMER);
- status_change_end(bl, SC_REFLECTSHIELD, INVALID_TIMER);
- status_change_end(bl, SC_ENDURE, INVALID_TIMER);
+ status_change_end(bl,SC_AUTOGUARD,-1);
+ status_change_end(bl,SC_DEFENDER,-1);
+ status_change_end(bl,SC_REFLECTSHIELD,-1);
+ status_change_end(bl,SC_ENDURE,-1);
}
break; 
Edited by Vanquiser

Share this post


Link to post
Share on other sites

7 answers to this question

Recommended Posts

  • 0

I don't think that rA's source code is that different than Hercules', just some functions have changed in those files as far as I'm aware of. Instead of using a diff patcher you could do those changes manually.

Regards.

Share this post


Link to post
Share on other sites
  • 0

I did it, it's building with a warning but it's nothing serious c:

 src/map/battle.c |  3 ++- src/map/pc.c     |  1 + src/map/status.c | 25 +++++++++++++++++++------ 3 files changed, 22 insertions(+), 7 deletions(-)diff --git a/src/map/battle.c b/src/map/battle.cindex b814321..5221b34 100644--- a/src/map/battle.c+++ b/src/map/battle.c@@ -252,7 +252,8 @@ int battle_delay_damage(int64 tick, int amotion, struct block_list *src, struct 	nullpo_ret(target);  	sc = status->get_sc(target);-+	//devotion patch by Cyrix (rathena) ([email protected])+	//https://www.facebook.../ragdb.ragnarok 	if( sc && sc->data[SC_DEVOTION] && damage > 0 && skill_id != PA_PRESSURE && skill_id != CR_REFLECTSHIELD ) 		damage = 0; diff --git a/src/map/pc.c b/src/map/pc.cindex 9a0760d..48538e3 100644--- a/src/map/pc.c+++ b/src/map/pc.c@@ -6762,6 +6762,7 @@ int pc_dead(struct map_session_data *sd,struct block_list *src) { 	for(j = 0; j < 5; j++) 		if (sd->devotion[j]){ 			struct map_session_data *devsd = map->id2sd(sd->devotion[j]);+ 			if (devsd) 				status_change_end(&devsd->bl, SC_DEVOTION, INVALID_TIMER); 			sd->devotion[j] = 0;diff --git a/src/map/status.c b/src/map/status.cindex 6cfd799..b1af54e 100644--- a/src/map/status.c+++ b/src/map/status.c@@ -1161,13 +1161,26 @@ int status_damage(struct block_list *src,struct block_list *target,int64 in_hp, 	//	if (!target->prev && !(flag&2)) 	//		return 0; //Cannot damage a bl not on a map, except when "charging" hp/sp +	//devotion patch by Cyrix (rathena) ([email protected]) 	sc = status->get_sc(target);-	if( hp && battle_config.invincible_nodamage && src && sc && sc->data[SC_INVINCIBLE] && !sc->data[SC_INVINCIBLEOFF] )-		hp = 1; -	if( hp && !(flag&1) ) {+	if( hp && !(flag&1|8) ) { 		if( sc ) { 			struct status_change_entry *sce;+			if( (sce = sc->data[SC_DEVOTION]) && src && battle->get_current_skill(src) != PA_PRESSURE )+			{ // Devotion prevents any of the other ailments from ending.+				struct block_list *d_bl = map->id2bl(sce->val1);+				if( d_bl && (+							(d_bl->type == BL_MER && ((TBL_MER*)d_bl)->master && ((TBL_MER*)d_bl)->master->bl.id == target->id) ||+							(d_bl->type == BL_PC && ((TBL_PC*)d_bl)->devotion[sce->val2] == target->id)+							) && check_distance_bl(target, d_bl, sce->val3) )+				{+					clif->damage(d_bl, d_bl, timer->gettick(), 0, 0, hp, 0, 0);+					status_fix_damage(NULL, d_bl, hp, 0);+					return 0;+				}+				status_change_end(target, SC_DEVOTION, -1);+			} 			if (sc->data[SC_STONE] && sc->opt1 == OPT1_STONE) 				status_change_end(target, SC_STONE, INVALID_TIMER); 			status_change_end(target, SC_FREEZE, INVALID_TIMER);@@ -1178,9 +1191,9 @@ int status_damage(struct block_list *src,struct block_list *target,int64 in_hp, 			status_change_end(target, SC_HIDING, INVALID_TIMER); 			status_change_end(target, SC_CLOAKING, INVALID_TIMER); 			status_change_end(target, SC_CHASEWALK, INVALID_TIMER);-			status_change_end(target, SC_CAMOUFLAGE, INVALID_TIMER);-			status_change_end(target, SC__INVISIBILITY, INVALID_TIMER);-			status_change_end(target, SC_DEEP_SLEEP, INVALID_TIMER);+			//status_change_end(target, SC_CAMOUFLAGE, INVALID_TIMER);+			//status_change_end(target, SC__INVISIBILITY, INVALID_TIMER);+			//status_change_end(target, SC_DEEP_SLEEP, INVALID_TIMER); 			if ((sce=sc->data[SC_ENDURE]) && !sce->val4 && !sc->data[SC_LKCONCENTRATION]) { 				//Endure count is only reduced by non-players on non-gvg maps. 				//val4 signals infinite endure. [Skotlex]

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...
Sign in to follow this  

×
×
  • Create New...

Important Information

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