Jump to content

Devotion Problem.


rans

Recommended Posts


  • Group:  Members
  • Topic Count:  104
  • Topics Per Day:  0.02
  • Content Count:  429
  • Reputation:   60
  • Joined:  08/19/12
  • Last Seen:  

hi, 

ung devo, pag umatake ng physical or magic tapos nareflect dapat ung sasalo ung pally hindi ung mismong tumira kasi nakadevo.

sino me alam? xD
Using Eathena Emulator...

Link to comment
Share on other sites


  • Group:  Members
  • Topic Count:  48
  • Topics Per Day:  0.01
  • Content Count:  1125
  • Reputation:   236
  • Joined:  07/30/12
  • Last Seen:  

You better contact Judas to fix your issue.

Link to comment
Share on other sites


  • Group:  Members
  • Topic Count:  104
  • Topics Per Day:  0.02
  • Content Count:  429
  • Reputation:   60
  • Joined:  08/19/12
  • Last Seen:  

yes , kinontak ko na kaso tagal mag reply :3 xD

Link to comment
Share on other sites


  • Group:  Members
  • Topic Count:  50
  • Topics Per Day:  0.01
  • Content Count:  1702
  • Reputation:   238
  • Joined:  09/05/12
  • Last Seen:  


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.com/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()%100 < 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.com/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.com/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;

Link to comment
Share on other sites


  • Group:  Members
  • Topic Count:  104
  • Topics Per Day:  0.02
  • Content Count:  429
  • Reputation:   60
  • Joined:  08/19/12
  • Last Seen:  

Im using Eathena

Link to comment
Share on other sites


  • Group:  Members
  • Topic Count:  1
  • Topics Per Day:  0.00
  • Content Count:  2
  • Reputation:   0
  • Joined:  04/29/13
  • Last Seen:  

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.com/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()%100 < 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.com/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.com/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[i] && (tsd = map_id2sd(sd->devotion[i])) && 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;

 

 

Could you please elaborate on what is happening in this script? I don't know how to read /src/ files. I'm trying to make it so that Instead of immunity to reflect damage, the Paladin will take the damage from reflect.

Edited by Sir
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
Reply to this topic...

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