Explorar el Código

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://svn.code.sf.net/p/rathena/svn/trunk@15330 54d463be-8e91-2dee-dedb-b68131a5f0ec

shennetsind hace 13 años
padre
commit
ea2417cc0f
Se han modificado 2 ficheros con 10 adiciones y 2 borrados
  1. 4 2
      src/map/status.c
  2. 6 0
      src/map/unit.c

+ 4 - 2
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;

+ 6 - 0
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;