summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorshennetsind <shennetsind@54d463be-8e91-2dee-dedb-b68131a5f0ec>2011-12-30 13:24:41 +0000
committershennetsind <shennetsind@54d463be-8e91-2dee-dedb-b68131a5f0ec>2011-12-30 13:24:41 +0000
commit8990332f8e4af8ac589b22ec6b06a62cef12209b (patch)
tree4ea0668b0c2ea89aa604482c179a91c87e70bb47
parent4b2e025ed2bfd1d23dba095e828da403cf82663f (diff)
downloadhercules-8990332f8e4af8ac589b22ec6b06a62cef12209b.tar.gz
hercules-8990332f8e4af8ac589b22ec6b06a62cef12209b.tar.bz2
hercules-8990332f8e4af8ac589b22ec6b06a62cef12209b.tar.xz
hercules-8990332f8e4af8ac589b22ec6b06a62cef12209b.zip
Fixed ancient MvP dmotion/walkdelay/hitlock exploit, bugreport:1851
-- The fix on this commit works thanks to a previous commit i did weeks ago to fix other mob walk delay bug git-svn-id: https://rathena.svn.sourceforge.net/svnroot/rathena/trunk@15330 54d463be-8e91-2dee-dedb-b68131a5f0ec
-rw-r--r--src/map/status.c6
-rw-r--r--src/map/unit.c6
2 files changed, 10 insertions, 2 deletions
diff --git a/src/map/status.c b/src/map/status.c
index a9fd25869..40e083595 100644
--- a/src/map/status.c
+++ b/src/map/status.c
@@ -4563,8 +4563,10 @@ static unsigned short status_calc_dmotion(struct block_list *bl, struct status_c
{
if( !sc || !sc->count || map_flag_gvg(bl->m) || map[bl->m].flag.battleground )
return cap_value(dmotion,0,USHRT_MAX);
-
- if( sc->data[SC_ENDURE] )
+ /**
+ * It has been confirmed on official servers that MvP mobs have no dmotion even without endure
+ **/
+ if( sc->data[SC_ENDURE] || ( bl->type == BL_MOB && (((TBL_MOB*)bl)->status.mode&MD_BOSS) ) )
return 0;
if( sc->data[SC_CONCENTRATION] )
return 0;
diff --git a/src/map/unit.c b/src/map/unit.c
index d9faf46c6..14c90453c 100644
--- a/src/map/unit.c
+++ b/src/map/unit.c
@@ -962,6 +962,12 @@ int unit_set_walkdelay(struct block_list *bl, unsigned int tick, int delay, int
struct unit_data *ud = unit_bl2ud(bl);
if (delay <= 0 || !ud) return 0;
+ /**
+ * MvP mobs have no walk delay
+ **/
+ if( bl->type == BL_MOB && (((TBL_MOB*)bl)->status.mode&MD_BOSS) )
+ return 0;
+
if (type) {
if (DIFF_TICK(ud->canmove_tick, tick+delay) > 0)
return 0;