Browse Source

Npc movement improvement

-- Position Related Issues
https://trello.com/c/3Ylqq8uu/75-position-related-issues
Maneco2 2 years ago
parent
commit
1405cc42b6

+ 5 - 0
src/main/java/com/l2jserver/gameserver/ai/AbstractAI.java

@@ -28,6 +28,7 @@ import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
 import com.l2jserver.gameserver.GameTimeController;
+import com.l2jserver.gameserver.GeoData;
 import com.l2jserver.gameserver.ThreadPoolManager;
 import com.l2jserver.gameserver.model.L2Object;
 import com.l2jserver.gameserver.model.Location;
@@ -456,6 +457,10 @@ public abstract class AbstractAI implements Ctrl {
 				}
 			}
 			
+			if (!GeoData.getInstance().canSeeTarget(_actor, pawn)) {
+				offset = 0;
+			}
+			
 			// Set AI movement data
 			_clientMoving = true;
 			_clientMovingToPawnOffset = offset;

+ 2 - 4
src/main/java/com/l2jserver/gameserver/ai/L2AttackableAI.java

@@ -1077,11 +1077,8 @@ public class L2AttackableAI extends L2CharacterAI implements Runnable {
 		if (npc.getTemplate().getBaseAttackRange() >= 700) {
 			range = npc.getTemplate().getBaseAttackRange(); // Base Bow Range NPC
 		}
-		if (mostHate.isMoving()) {
+		if (mostHate.isMoving() || npc.isMoving()) {
 			range = range + 50;
-			if (npc.isMoving()) {
-				range = range + 50;
-			}
 		}
 		
 		// Starts melee attack
@@ -1097,6 +1094,7 @@ public class L2AttackableAI extends L2CharacterAI implements Runnable {
 			return;
 		}
 		
+		clientStopMoving(null);
 		// Attacks target
 		_actor.doAttack(getAttackTarget());
 	}

+ 7 - 8
src/main/java/com/l2jserver/gameserver/model/actor/L2Character.java

@@ -3382,14 +3382,9 @@ public abstract class L2Character extends L2Object implements ISkillsHolder, IDe
 			distFraction = distPassed / delta;
 		}
 		
-		// if (general().developer()) _log.warning("Move Ticks:" + (gameTicks - m._moveTimestamp) + ", distPassed:" + distPassed + ", distFraction:" + distFraction);
-		
-		if (distFraction > 1) {
-			// Set the position of the L2Character to the destination
-			super.setXYZ(m._xDestination, m._yDestination, m._zDestination);
-		} else {
-			m._xAccurate += dx * distFraction;
-			m._yAccurate += dy * distFraction;
+		if (distFraction < 1) {
+			m._xAccurate += dx;
+			m._yAccurate += dy;
 			
 			// Set the position of the L2Character to estimated after parcial move
 			super.setXYZ((int) (m._xAccurate), (int) (m._yAccurate), zPrev + (int) ((dz * distFraction) + 0.5));
@@ -3406,6 +3401,10 @@ public abstract class L2Character extends L2Object implements ISkillsHolder, IDe
 						getKnownList().findObjects();
 					}
 					
+					if (isWalker()) {
+						super.setXYZ(m._xDestination, m._yDestination, m._zDestination);
+					}
+					
 					getAI().notifyEvent(CtrlEvent.EVT_ARRIVED);
 				} catch (final Throwable e) {
 					LOG.warn("{}", e);