Merge pull request #29 from thispixel/master.

Fix 317 revision npc interaction packets, fixed npc indexes being +1 a...
This commit is contained in:
Major-
2014-06-27 12:56:57 +01:00
8 changed files with 62 additions and 17 deletions
+6
View File
@@ -90,4 +90,10 @@
<handler>org.apollo.game.event.handler.impl.ItemVerificationHandler</handler> <handler>org.apollo.game.event.handler.impl.ItemVerificationHandler</handler>
</chain> </chain>
</event> </event>
<event>
<type>org.apollo.game.event.impl.NpcActionEvent</type>
<chain>
<handler>org.apollo.game.event.handler.impl.NpcActionVerificationHandler</handler>
</chain>
</event>
</events> </events>
@@ -0,0 +1,33 @@
package org.apollo.game.event.handler.impl;
import org.apollo.game.event.handler.EventHandler;
import org.apollo.game.event.handler.EventHandlerContext;
import org.apollo.game.event.impl.NpcActionEvent;
import org.apollo.game.model.Npc;
import org.apollo.game.model.Player;
import org.apollo.game.model.World;
import org.apollo.game.model.WorldConstants;
/**
* An {@link EventHandler} that verifies {@link org.apollo.game.event.impl.NpcActionEvent}
*
* @author Stuart
*/
public class NpcActionVerificationHandler extends EventHandler<NpcActionEvent> {
@Override
public void handle(EventHandlerContext ctx, Player player, NpcActionEvent event) {
if(event.getIndex() < 0 || event.getIndex() > WorldConstants.MAXIMUM_NPCS) {
ctx.breakHandlerChain();
return;
}
Npc npc = (Npc)World.getWorld().getNpcRepository().get(event.getIndex());
if(npc == null || !player.getPosition().isWithinDistance(npc.getPosition(), 15)) {
ctx.breakHandlerChain();
return;
}
}
}
@@ -29,7 +29,7 @@ public abstract class NpcActionEvent extends Event {
*/ */
public NpcActionEvent(int option, int index) { public NpcActionEvent(int option, int index) {
this.option = option; this.option = option;
this.index = index; this.index = index - 1;
} }
/** /**
@@ -1,10 +1,7 @@
package org.apollo.net.release.r317; package org.apollo.net.release.r317;
import org.apollo.game.event.impl.FirstNpcActionEvent; import org.apollo.game.event.impl.FirstNpcActionEvent;
import org.apollo.net.codec.game.DataTransformation; import org.apollo.net.codec.game.*;
import org.apollo.net.codec.game.DataType;
import org.apollo.net.codec.game.GamePacket;
import org.apollo.net.codec.game.GamePacketReader;
import org.apollo.net.release.EventDecoder; import org.apollo.net.release.EventDecoder;
/** /**
@@ -17,7 +14,7 @@ public final class FirstNpcActionEventDecoder extends EventDecoder<FirstNpcActio
@Override @Override
public FirstNpcActionEvent decode(GamePacket packet) { public FirstNpcActionEvent decode(GamePacket packet) {
GamePacketReader reader = new GamePacketReader(packet); GamePacketReader reader = new GamePacketReader(packet);
int index = (int) reader.getUnsigned(DataType.SHORT, DataTransformation.ADD); int index = (int) reader.getSigned(DataType.SHORT, DataOrder.LITTLE);
return new FirstNpcActionEvent(index); return new FirstNpcActionEvent(index);
} }
@@ -139,9 +139,9 @@ public final class Release317 extends Release {
register(210, spamEventDecoder); register(210, spamEventDecoder);
register(226, spamEventDecoder); register(226, spamEventDecoder);
register(72, new FirstNpcActionEventDecoder()); register(155, new FirstNpcActionEventDecoder());
register(155, new SecondNpcActionEventDecoder()); register(17, new SecondNpcActionEventDecoder());
register(17, new ThirdNpcActionEventDecoder()); register(21, new ThirdNpcActionEventDecoder());
register(236, new TakeTileItemEventDecoder()); register(236, new TakeTileItemEventDecoder());
register(192, new ItemOnObjectEventDecoder()); register(192, new ItemOnObjectEventDecoder());
@@ -1,10 +1,7 @@
package org.apollo.net.release.r317; package org.apollo.net.release.r317;
import org.apollo.game.event.impl.SecondNpcActionEvent; import org.apollo.game.event.impl.SecondNpcActionEvent;
import org.apollo.net.codec.game.DataOrder; import org.apollo.net.codec.game.*;
import org.apollo.net.codec.game.DataType;
import org.apollo.net.codec.game.GamePacket;
import org.apollo.net.codec.game.GamePacketReader;
import org.apollo.net.release.EventDecoder; import org.apollo.net.release.EventDecoder;
/** /**
@@ -17,7 +14,7 @@ public final class SecondNpcActionEventDecoder extends EventDecoder<SecondNpcAct
@Override @Override
public SecondNpcActionEvent decode(GamePacket packet) { public SecondNpcActionEvent decode(GamePacket packet) {
GamePacketReader reader = new GamePacketReader(packet); GamePacketReader reader = new GamePacketReader(packet);
int index = (int) reader.getUnsigned(DataType.SHORT, DataOrder.LITTLE); int index = (int) reader.getUnsigned(DataType.SHORT, DataOrder.LITTLE, DataTransformation.ADD);
return new SecondNpcActionEvent(index); return new SecondNpcActionEvent(index);
} }
@@ -1,8 +1,6 @@
package org.apollo.net.release.r317; package org.apollo.net.release.r317;
import org.apollo.game.event.impl.ThirdNpcActionEvent; import org.apollo.game.event.impl.ThirdNpcActionEvent;
import org.apollo.net.codec.game.DataOrder;
import org.apollo.net.codec.game.DataTransformation;
import org.apollo.net.codec.game.DataType; import org.apollo.net.codec.game.DataType;
import org.apollo.net.codec.game.GamePacket; import org.apollo.net.codec.game.GamePacket;
import org.apollo.net.codec.game.GamePacketReader; import org.apollo.net.codec.game.GamePacketReader;
@@ -18,7 +16,7 @@ public final class ThirdNpcActionEventDecoder extends EventDecoder<ThirdNpcActio
@Override @Override
public ThirdNpcActionEvent decode(GamePacket packet) { public ThirdNpcActionEvent decode(GamePacket packet) {
GamePacketReader reader = new GamePacketReader(packet); GamePacketReader reader = new GamePacketReader(packet);
int index = (int) reader.getUnsigned(DataType.SHORT, DataOrder.LITTLE, DataTransformation.ADD); int index = (int) reader.getSigned(DataType.SHORT);
return new ThirdNpcActionEvent(index); return new ThirdNpcActionEvent(index);
} }
+14
View File
@@ -178,6 +178,20 @@ public final class MobRepository<T extends Mob> implements Iterable<T> {
return false; return false;
} }
/**
* Gets the mob at the given index
*
* @param index The index of the mob
* @return The mob instance
*/
public Mob get(int index) {
if (index < 0 || index >= mobs.length) {
throw new IndexOutOfBoundsException("Mob index is out of bounds.");
}
return mobs[index];
}
/** /**
* Gets the size of this repository. * Gets the size of this repository.
* *