
SERVER
NPC.java
Add the following fields
Code:
public boolean forcedMovementUpdateRequired;
public int forcedMoveStartX;
public int forcedMoveStartY;
public int forcedMoveEndX;
public int forcedMoveEndY;
public int forcedMoveCycleStart;
public int forcedMoveCycleEnd;
public int forcedMoveDirection;
Add the following methods
Code:
public void appendForcedMovementUpdate(Stream str) {
str.writeByte(forcedMoveStartX);
str.writeByte(forcedMoveStartY);
str.writeByte(forcedMoveEndX);
str.writeByte(forcedMoveEndY);
str.writeWord(forcedMoveCycleStart);
str.writeWord(forcedMoveCycleEnd);
str.writeByte(forcedMoveDirection);
}
Code:
public void forceMovement(int startX, int startY, int endX, int endY, int cycleStart, int cycleEnd, int direction) {
this.forcedMoveStartX = startX;
this.forcedMoveStartY = startY;
this.forcedMoveEndX = endX;
this.forcedMoveEndY = endY;
this.forcedMoveCycleStart = cycleStart;
this.forcedMoveCycleEnd = cycleEnd;
this.forcedMoveDirection = direction;
this.forcedMovementUpdateRequired = true;
this.updateRequired = true;
}
appendNPCUpdateBlock (still npc.java)
Add
Code:
if (forcedMovementUpdateRequired)
updateMask |= 0x100;
right above
Code:
if (animUpdateRequired)
updateMask |= 0x10;
Change
Code:
str.writeByte(updateMask);
to
Code:
str.writeWord(updateMask);
Add
Code:
if (forcedMovementUpdateRequired)
appendForcedMovementUpdate(str);
right above
Code:
if (animUpdateRequired)
appendAnimUpdate(str);
clearUpdateFlags(still npc.java)
Add
Code:
forcedMovementUpdateRequired = false;
somewhere
CLIENT
Method86 in client.java
Change
Code:
int l = stream.readUnsignedByte();
to
Code:
int l = stream.readUnsignedWord();
Right above
Code:
if((l & 0x10) != 0)
add
Code:
if((l & 0x100) != 0)
{
npc.anInt1543 = stream.readUnsignedByte();
npc.anInt1545 = stream.readUnsignedByte();
npc.anInt1544 = stream.readUnsignedByte();
npc.anInt1546 = stream.readUnsignedByte();
npc.anInt1547 = stream.readUnsignedWord() + loopCycle;
npc.anInt1548 = stream.readUnsignedWord() + loopCycle;
npc.anInt1549 = stream.readUnsignedByte();
npc.method446();
}
Command for testing it works
Code:
if (playerCommand.equals("testforcemove")) {
for (NPC npc : NPCHandler.npcs) {
if (npc != null) {
int dx = npc.absX - (c.mapRegionX * 8);
int dy = npc.absY - (c.mapRegionY * 8);
npc.forceMovement(dx, dy, dx, dy + 5, 0, 30, 2);
}
}
}