diff --git a/09HDscape-server/src/org/crandor/game/interaction/Interaction.java b/09HDscape-server/src/org/crandor/game/interaction/Interaction.java index f4f85f2ed..ef0b75648 100644 --- a/09HDscape-server/src/org/crandor/game/interaction/Interaction.java +++ b/09HDscape-server/src/org/crandor/game/interaction/Interaction.java @@ -61,23 +61,30 @@ public final class Interaction { * @param option The option used. */ public void handle(final Player player, final Option option) { + System.out.println("In handle"); if (player.getLocks().isInteractionLocked()) { + System.out.println("Locked!"); return; } boolean hasHandler = option.getHandler() != null; String pulseType = "interaction:" + option.getName() + ":" + node.hashCode(); boolean walk = hasHandler && option.getHandler().isWalk(); + System.out.println("Which one will he take?"); if (!walk && hasHandler && option.getHandler().isWalk(player, node)) { walk = true; } if (!hasHandler || walk) { handleWalkOption(player, option, pulseType); + System.out.println("A"); } else if (hasHandler) { player.debug("Option handler being used=" + option.getHandler().getClass().getSimpleName()); handleDefaultOption(player, option, pulseType); + System.out.println("D"); } else { player.getPulseManager().runUnhandledAction(player, pulseType); + System.out.println("C"); } + System.out.println("Done"); } /** diff --git a/09HDscape-server/src/org/crandor/game/node/entity/player/ai/general/GeneralBotCreator.java b/09HDscape-server/src/org/crandor/game/node/entity/player/ai/general/GeneralBotCreator.java index 8311a6ecc..cd4399a44 100644 --- a/09HDscape-server/src/org/crandor/game/node/entity/player/ai/general/GeneralBotCreator.java +++ b/09HDscape-server/src/org/crandor/game/node/entity/player/ai/general/GeneralBotCreator.java @@ -10,6 +10,7 @@ import org.crandor.game.world.repository.Repository; public class GeneralBotCreator { + //org/crandor/net/packet/in/InteractionPacket.java <<< This is a very useful class for learning to code bots public GeneralBotCreator(String botName, Location loc, Script botScript) { AIPlayer bot = AIPBuilder.create(botName, loc); diff --git a/09HDscape-server/src/org/crandor/game/node/entity/player/ai/general/ScriptAPI.java b/09HDscape-server/src/org/crandor/game/node/entity/player/ai/general/ScriptAPI.java index f4e54af64..53bf70bfa 100644 --- a/09HDscape-server/src/org/crandor/game/node/entity/player/ai/general/ScriptAPI.java +++ b/09HDscape-server/src/org/crandor/game/node/entity/player/ai/general/ScriptAPI.java @@ -1,34 +1,44 @@ package org.crandor.game.node.entity.player.ai.general; +import org.crandor.game.interaction.MovementPulse; +import org.crandor.game.node.Node; +import org.crandor.game.node.entity.Entity; import org.crandor.game.node.entity.npc.NPC; import org.crandor.game.node.entity.player.Player; import org.crandor.game.node.object.GameObject; import org.crandor.game.world.map.Location; +import org.crandor.game.world.map.Point; import org.crandor.game.world.map.RegionManager; import org.crandor.game.world.map.RegionPlane; +import org.crandor.game.world.map.path.Path; import org.crandor.game.world.map.path.Pathfinder; public class ScriptAPI { - public double distance(Location l1, Location l2) { - return Pathfinder.find(l1, l2).getPoints().size(); + public double distance(Node n1, Node n2) + { + return Math.sqrt(Math.pow(n1.getLocation().getX() - n2.getLocation().getX(), 2) + Math.pow(n2.getLocation().getY() - n1.getLocation().getY(), 2)); } - public NPC getNearestNPC(Location loc, String npcName) { - NPC npc = null; + public Node getNearestEntity(Player me, String entityName) + { + Node entity = null; double minDistance = Double.MAX_VALUE; - for (RegionPlane p : RegionManager.forId(loc.getRegionId()).getPlanes()) { - for (NPC n : p.getNpcs()) { - if (n != null) { - if (n.getName().equals(npcName) && distance(loc, n.getLocation()) < minDistance) { - npc = n; - } - } + for (Node e : RegionManager.forId(me.getLocation().getRegionId()).getPlanes()[me.getLocation().getZ()].getEntities()) + { + if (e != null && e.getName().equals(entityName) && distance(me, e) < minDistance && Pathfinder.find(me, e).isSuccessful()) + { + /*if (entity != null) + { + System.out.println("I'm at " + me.getLocation() + ". " + e.getLocation() + distance(me, e) + " is closer to me than " + entity.getLocation() + distance(me, entity)); + }*/ + entity = e; + minDistance = distance(me, e); } } - System.out.println("Returning " + npc.getName()); - return npc; + System.out.println("Start: " + me.getLocation() + ". End: " + entity.getLocation()); + return entity; } public GameObject getNearestGameObject(Location loc, int objectId) { @@ -37,7 +47,7 @@ public class ScriptAPI { for (GameObject[] o : RegionManager.forId(loc.getRegionId()).getPlanes()[0].getObjects()) { for (GameObject obj : o) { if (obj != null) { - if (distance(loc, obj.getLocation()) < minDistance) { + if (distance(loc, obj) < minDistance) { nearestObject = obj; } } diff --git a/09HDscape-server/src/org/crandor/game/node/entity/player/ai/general/scriptrepository/ManThiever.java b/09HDscape-server/src/org/crandor/game/node/entity/player/ai/general/scriptrepository/ManThiever.java index 2f3cdd986..76ce5b41a 100644 --- a/09HDscape-server/src/org/crandor/game/node/entity/player/ai/general/scriptrepository/ManThiever.java +++ b/09HDscape-server/src/org/crandor/game/node/entity/player/ai/general/scriptrepository/ManThiever.java @@ -1,12 +1,20 @@ package org.crandor.game.node.entity.player.ai.general.scriptrepository; -import org.crandor.game.node.entity.player.Player; -import plugin.skill.thieving.ThievingOptionPlugin; +import org.crandor.game.node.Node; public class ManThiever extends Script { @Override public void runLoop() { - new ThievingOptionPlugin().handle(me, scriptAPI.getNearestNPC(me.getLocation(), "Man"), "pickpocket"); + Node man = scriptAPI.getNearestEntity(me, "Man"); + + System.out.println("Current pulse: " + me.getPulseManager().getCurrent()); + System.out.println("Is moving pulse? " + me.getPulseManager().isMovingPulse()); + if (!me.getPulseManager().isMovingPulse()) + { + man.getInteraction().handle(me, man.getInteraction().get(2)); + } + /*scriptAPI.walk(me, man); + new ThievingOptionPlugin().handle(me, man, "pickpocket");*/ } } diff --git a/09HDscape-server/src/org/crandor/game/world/map/RegionPlane.java b/09HDscape-server/src/org/crandor/game/world/map/RegionPlane.java index b87e7297c..aac3d6dda 100644 --- a/09HDscape-server/src/org/crandor/game/world/map/RegionPlane.java +++ b/09HDscape-server/src/org/crandor/game/world/map/RegionPlane.java @@ -1,5 +1,7 @@ package org.crandor.game.world.map; +import org.crandor.game.node.Node; +import org.crandor.game.node.entity.Entity; import org.crandor.game.node.entity.npc.NPC; import org.crandor.game.node.entity.player.Player; import org.crandor.game.node.item.GroundItem; @@ -13,6 +15,8 @@ import org.crandor.net.packet.context.BuildItemContext; import org.crandor.net.packet.out.ClearGroundItem; import org.crandor.net.packet.out.ConstructGroundItem; +import java.util.ArrayList; +import java.util.Arrays; import java.util.List; import java.util.concurrent.CopyOnWriteArrayList; @@ -320,6 +324,17 @@ public final class RegionPlane { return npcs; } + public List getEntities() + { + List entities = new ArrayList<>(npcs); + for (GameObject[] o : getObjects()) + { + entities.addAll(Arrays.asList(o)); + } + + return entities; + } + /** * Gets the players. * @return The players. diff --git a/09HDscape-server/src/org/crandor/game/world/map/path/SmartPathfinder.java b/09HDscape-server/src/org/crandor/game/world/map/path/SmartPathfinder.java index f50ad3121..bcf74e024 100644 --- a/09HDscape-server/src/org/crandor/game/world/map/path/SmartPathfinder.java +++ b/09HDscape-server/src/org/crandor/game/world/map/path/SmartPathfinder.java @@ -2,6 +2,7 @@ package org.crandor.game.world.map.path; import org.crandor.game.world.map.Location; import org.crandor.game.world.map.Point; +import org.crandor.game.world.map.RegionManager; public final class SmartPathfinder extends Pathfinder {