From 0d31085a36d8e3323a1d1908d19f6ac65a5c0254 Mon Sep 17 00:00:00 2001 From: dginovker Date: Sun, 9 Jun 2019 10:41:55 -0400 Subject: [PATCH 1/6] Script API fixes --- .../crandor/game/interaction/Interaction.java | 7 ++++ .../player/ai/general/GeneralBotCreator.java | 1 + .../entity/player/ai/general/ScriptAPI.java | 38 ++++++++++++------- .../general/scriptrepository/ManThiever.java | 14 +++++-- .../crandor/game/world/map/RegionPlane.java | 15 ++++++++ .../game/world/map/path/SmartPathfinder.java | 1 + 6 files changed, 59 insertions(+), 17 deletions(-) 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 { From 4f6a431f65ca6b0defbebb6060d5fb4aa68633b5 Mon Sep 17 00:00:00 2001 From: dginovker Date: Sun, 9 Jun 2019 10:58:58 -0400 Subject: [PATCH 2/6] Bot scripting simplification! --- .../data/eco/grand_exchange_db.emp | Bin 138082 -> 138082 bytes .../game/node/entity/player/ai/AIPlayer.java | 20 ------------------ .../player/ai/general/GeneralBotCreator.java | 7 ++++-- .../entity/player/ai/general/ScriptAPI.java | 6 +----- .../general/scriptrepository/ManThiever.java | 9 +------- 5 files changed, 7 insertions(+), 35 deletions(-) diff --git a/09HDscape-server/data/eco/grand_exchange_db.emp b/09HDscape-server/data/eco/grand_exchange_db.emp index dfacbcb3f1c4e0a3a452e46de27fe47e7d991642..2b045145b03cd5f1ed951fd1fc2b46fa0c565c71 100644 GIT binary patch delta 25 hcmaE~jpNZa4h{we#%x=|zw;Y8S~(cEaxg_n0|0oG2nqlI delta 25 gcmaE~jpNZa4h{we#%wD`UG7GXRu0Ck986Kt0BIfuvj6}9 diff --git a/09HDscape-server/src/org/crandor/game/node/entity/player/ai/AIPlayer.java b/09HDscape-server/src/org/crandor/game/node/entity/player/ai/AIPlayer.java index 23385fcb0..f7bff6073 100644 --- a/09HDscape-server/src/org/crandor/game/node/entity/player/ai/AIPlayer.java +++ b/09HDscape-server/src/org/crandor/game/node/entity/player/ai/AIPlayer.java @@ -143,26 +143,6 @@ public class AIPlayer extends Player { this.setAttribute("dead", true); } - public void runScript(Script script) - { - if (!this.getPulseManager().hasPulseRunning()) - { - getPulseManager().run(new Pulse() { - @Override - public boolean pulse() { - return false; - } - - @Override - public boolean update() { - super.update(); - script.runLoop(); - return true; - } - }); - } - } - /** * Gets the UID. * @return the UID. 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 cd4399a44..2ce49f637 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 @@ -27,8 +27,11 @@ public class GeneralBotCreator { AIPlayer.deregister(bot.getUid()); return true; } - - bot.runScript(botScript); + System.out.println("Running script"); + if (!bot.getPulseManager().hasPulseRunning()) + { + botScript.runLoop(); + } return false; } }); 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 53bf70bfa..07000b01a 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 @@ -26,12 +26,8 @@ public class ScriptAPI { double minDistance = Double.MAX_VALUE; 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 (e != null && e.getName().equals(entityName) && distance(me, e) < minDistance && Pathfinder.find(me, e, false, Pathfinder.SMART).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); } 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 76ce5b41a..9e8c76fdc 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 @@ -8,13 +8,6 @@ public class ManThiever extends Script { public void runLoop() { 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");*/ + man.getInteraction().handle(me, man.getInteraction().get(2)); } } From ee5b8deacc9aa88cff69fc7e8d31e37b74fed1c6 Mon Sep 17 00:00:00 2001 From: dginovker Date: Sun, 9 Jun 2019 11:08:07 -0400 Subject: [PATCH 3/6] GetNearestEntity fixgit statusgit statusgit statusgit statusgit statusgit status --- .../node/entity/player/ai/general/GeneralBotCreator.java | 2 +- .../game/node/entity/player/ai/general/ScriptAPI.java | 3 +-- .../player/ai/general/scriptrepository/ManThiever.java | 5 ++++- 3 files changed, 6 insertions(+), 4 deletions(-) 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 2ce49f637..3018d07e3 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 @@ -27,7 +27,7 @@ public class GeneralBotCreator { AIPlayer.deregister(bot.getUid()); return true; } - System.out.println("Running script"); + if (!bot.getPulseManager().hasPulseRunning()) { botScript.runLoop(); 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 07000b01a..7a91baed0 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 @@ -26,14 +26,13 @@ public class ScriptAPI { double minDistance = Double.MAX_VALUE; 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, false, Pathfinder.SMART).isSuccessful()) + if (e != null && e.getName().equals(entityName) && distance(me, e) < minDistance && !Pathfinder.find(me, e).isMoveNear()) { entity = e; minDistance = distance(me, e); } } - System.out.println("Start: " + me.getLocation() + ". End: " + entity.getLocation()); return entity; } 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 9e8c76fdc..2ab8693c8 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 @@ -8,6 +8,9 @@ public class ManThiever extends Script { public void runLoop() { Node man = scriptAPI.getNearestEntity(me, "Man"); - man.getInteraction().handle(me, man.getInteraction().get(2)); + if (man != null) + { + man.getInteraction().handle(me, man.getInteraction().get(2)); + } } } From df2528c5e84f60e59ca70d7dcbc941d29b59132d Mon Sep 17 00:00:00 2001 From: dginovker Date: Sun, 9 Jun 2019 12:29:46 -0400 Subject: [PATCH 4/6] Added bot equipment --- .../src/org/crandor/game/interaction/Interaction.java | 7 ------- .../crandor/game/node/entity/player/ai/AIPlayer.java | 6 ------ .../entity/player/ai/general/GeneralBotCreator.java | 11 +++++++++++ .../game/node/entity/player/ai/general/ScriptAPI.java | 2 +- .../ai/general/scriptrepository/ManThiever.java | 9 ++++++++- .../player/ai/general/scriptrepository/Script.java | 7 ++++++- .../src/plugin/command/AIPCommandPlugin.java | 3 +++ 7 files changed, 29 insertions(+), 16 deletions(-) diff --git a/09HDscape-server/src/org/crandor/game/interaction/Interaction.java b/09HDscape-server/src/org/crandor/game/interaction/Interaction.java index ef0b75648..f4f85f2ed 100644 --- a/09HDscape-server/src/org/crandor/game/interaction/Interaction.java +++ b/09HDscape-server/src/org/crandor/game/interaction/Interaction.java @@ -61,30 +61,23 @@ 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/AIPlayer.java b/09HDscape-server/src/org/crandor/game/node/entity/player/ai/AIPlayer.java index f7bff6073..0ba12cbb0 100644 --- a/09HDscape-server/src/org/crandor/game/node/entity/player/ai/AIPlayer.java +++ b/09HDscape-server/src/org/crandor/game/node/entity/player/ai/AIPlayer.java @@ -57,11 +57,6 @@ public class AIPlayer extends Player { */ private Player controler; - /** - * The scriptAPI the bot will perform - */ - private ScriptAPI scriptAPI; - /** * Constructs a new {@code AIPlayer} {@code Object}. * @param name The name of the AIP. @@ -75,7 +70,6 @@ public class AIPlayer extends Player { super.getDetails().setSession(ArtificialSession.getSingleton()); this.username = StringUtils.formatDisplayName(name); this.uid = currentUID++; - this.scriptAPI = new ScriptAPI(); } @Override 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 3018d07e3..b11b87b07 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 @@ -3,6 +3,7 @@ package org.crandor.game.node.entity.player.ai.general; import org.crandor.game.node.entity.player.ai.AIPBuilder; import org.crandor.game.node.entity.player.ai.AIPlayer; import org.crandor.game.node.entity.player.ai.general.scriptrepository.Script; +import org.crandor.game.node.item.Item; import org.crandor.game.system.task.Pulse; import org.crandor.game.world.GameWorld; import org.crandor.game.world.map.Location; @@ -18,6 +19,16 @@ public class GeneralBotCreator { bot.init(); botScript.setPlayer(bot); + // Initialize inventory + for (Item i : botScript.inventory) + { + bot.getInventory().add(i); + } + for (Item i : botScript.equipment) + { + bot.getEquipment().add(i, true, false); + } + GameWorld.submit(new Pulse(1, bot) { int ticks = 0; @Override 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 7a91baed0..b93fdd382 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 @@ -20,7 +20,7 @@ public class ScriptAPI { return Math.sqrt(Math.pow(n1.getLocation().getX() - n2.getLocation().getX(), 2) + Math.pow(n2.getLocation().getY() - n1.getLocation().getY(), 2)); } - public Node getNearestEntity(Player me, String entityName) + public Node getNearestNode(Player me, String entityName) { Node entity = null; double minDistance = Double.MAX_VALUE; 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 2ab8693c8..4f8743061 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,19 @@ package org.crandor.game.node.entity.player.ai.general.scriptrepository; import org.crandor.game.node.Node; +import org.crandor.game.node.item.Item; + +import java.util.Arrays; public class ManThiever extends Script { + public ManThiever() + { + this.equipment.addAll(Arrays.asList(new Item(1103), new Item(1139), new Item(1265))); + } @Override public void runLoop() { - Node man = scriptAPI.getNearestEntity(me, "Man"); + Node man = scriptAPI.getNearestNode(me, "Man"); if (man != null) { diff --git a/09HDscape-server/src/org/crandor/game/node/entity/player/ai/general/scriptrepository/Script.java b/09HDscape-server/src/org/crandor/game/node/entity/player/ai/general/scriptrepository/Script.java index 534575d34..9500c05cd 100644 --- a/09HDscape-server/src/org/crandor/game/node/entity/player/ai/general/scriptrepository/Script.java +++ b/09HDscape-server/src/org/crandor/game/node/entity/player/ai/general/scriptrepository/Script.java @@ -2,10 +2,15 @@ package org.crandor.game.node.entity.player.ai.general.scriptrepository; import org.crandor.game.node.entity.player.Player; import org.crandor.game.node.entity.player.ai.general.ScriptAPI; +import org.crandor.game.node.item.Item; + +import java.util.ArrayList; public abstract class Script { - public Player me; public ScriptAPI scriptAPI = new ScriptAPI(); + public Player me; + public ArrayList inventory = new ArrayList<>(); + public ArrayList equipment = new ArrayList<>(); public void setPlayer(Player me) { diff --git a/09HDscape-server/src/plugin/command/AIPCommandPlugin.java b/09HDscape-server/src/plugin/command/AIPCommandPlugin.java index bbec35221..351956904 100644 --- a/09HDscape-server/src/plugin/command/AIPCommandPlugin.java +++ b/09HDscape-server/src/plugin/command/AIPCommandPlugin.java @@ -1,5 +1,6 @@ package plugin.command; +import org.crandor.game.container.Container; import org.crandor.game.interaction.Interaction; import org.crandor.game.node.entity.player.Player; import org.crandor.game.node.entity.player.ai.AIPBuilder; @@ -10,6 +11,7 @@ import org.crandor.game.node.entity.player.ai.pvp.PVPAIPActions; import org.crandor.game.node.entity.player.ai.pvp.PVPAIPBuilderUtils; import org.crandor.game.node.entity.player.ai.resource.ResourceAIPActions; import org.crandor.game.node.entity.player.link.appearance.Gender; +import org.crandor.game.node.item.Item; import org.crandor.game.system.command.CommandPlugin; import org.crandor.game.system.command.CommandSet; import org.crandor.game.system.task.Pulse; @@ -22,6 +24,7 @@ import org.crandor.plugin.InitializablePlugin; import org.crandor.plugin.Plugin; import org.crandor.tools.RandomFunction; +import java.lang.reflect.Array; import java.util.ArrayList; import java.util.List; From 42a5104a35598c9059ee7217be8df7bdb9394659 Mon Sep 17 00:00:00 2001 From: dginovker Date: Sun, 9 Jun 2019 12:43:18 -0400 Subject: [PATCH 5/6] Simplified bot creation and API AGAINNN! --- .../player/ai/general/GeneralBotCreator.java | 23 +++++-------------- .../entity/player/ai/general/ScriptAPI.java | 20 ++++++++-------- .../general/scriptrepository/ManThiever.java | 4 ++-- .../ai/general/scriptrepository/Script.java | 21 +++++++++++++---- 4 files changed, 34 insertions(+), 34 deletions(-) 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 b11b87b07..18f1e794a 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 @@ -14,32 +14,21 @@ 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); - Repository.getPlayers().add(bot); - bot.init(); - botScript.setPlayer(bot); + botScript.bot = AIPBuilder.create(botName, loc); + Repository.getPlayers().add(botScript.bot); + botScript.init(); - // Initialize inventory - for (Item i : botScript.inventory) - { - bot.getInventory().add(i); - } - for (Item i : botScript.equipment) - { - bot.getEquipment().add(i, true, false); - } - - GameWorld.submit(new Pulse(1, bot) { + GameWorld.submit(new Pulse(1, botScript.bot) { int ticks = 0; @Override public boolean pulse() { if (ticks ++ == 5000) { - AIPlayer.deregister(bot.getUid()); + AIPlayer.deregister(botScript.bot.getUid()); return true; } - if (!bot.getPulseManager().hasPulseRunning()) + if (!botScript.bot.getPulseManager().hasPulseRunning()) { botScript.runLoop(); } 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 b93fdd382..a0dcb17c2 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,35 +1,35 @@ 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 { + private Player bot; + + public ScriptAPI(Player bot) { + this.bot = bot; + } + 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 Node getNearestNode(Player me, String entityName) + public Node getNearestNode(String entityName) { Node entity = null; double minDistance = Double.MAX_VALUE; - for (Node e : RegionManager.forId(me.getLocation().getRegionId()).getPlanes()[me.getLocation().getZ()].getEntities()) + for (Node e : RegionManager.forId(bot.getLocation().getRegionId()).getPlanes()[bot.getLocation().getZ()].getEntities()) { - if (e != null && e.getName().equals(entityName) && distance(me, e) < minDistance && !Pathfinder.find(me, e).isMoveNear()) + if (e != null && e.getName().equals(entityName) && distance(bot, e) < minDistance && !Pathfinder.find(bot, e).isMoveNear()) { entity = e; - minDistance = distance(me, e); + minDistance = distance(bot, e); } } 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 4f8743061..7774743e8 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 @@ -13,11 +13,11 @@ public class ManThiever extends Script { @Override public void runLoop() { - Node man = scriptAPI.getNearestNode(me, "Man"); + Node man = scriptAPI.getNearestNode("Man"); if (man != null) { - man.getInteraction().handle(me, man.getInteraction().get(2)); + man.getInteraction().handle(bot, man.getInteraction().get(2)); } } } diff --git a/09HDscape-server/src/org/crandor/game/node/entity/player/ai/general/scriptrepository/Script.java b/09HDscape-server/src/org/crandor/game/node/entity/player/ai/general/scriptrepository/Script.java index 9500c05cd..ad649cd06 100644 --- a/09HDscape-server/src/org/crandor/game/node/entity/player/ai/general/scriptrepository/Script.java +++ b/09HDscape-server/src/org/crandor/game/node/entity/player/ai/general/scriptrepository/Script.java @@ -1,20 +1,31 @@ package org.crandor.game.node.entity.player.ai.general.scriptrepository; -import org.crandor.game.node.entity.player.Player; +import org.crandor.game.node.entity.player.ai.AIPlayer; import org.crandor.game.node.entity.player.ai.general.ScriptAPI; import org.crandor.game.node.item.Item; import java.util.ArrayList; public abstract class Script { - public ScriptAPI scriptAPI = new ScriptAPI(); - public Player me; + public ScriptAPI scriptAPI; public ArrayList inventory = new ArrayList<>(); public ArrayList equipment = new ArrayList<>(); - public void setPlayer(Player me) + public AIPlayer bot; + + public void init() { - this.me = me; + bot.init(); + scriptAPI = new ScriptAPI(bot); + + for (Item i : inventory) + { + bot.getInventory().add(i); + } + for (Item i : equipment) + { + bot.getEquipment().add(i, true, false); + } } public abstract void runLoop(); From b877265cc027eda9f8affc9e0896c75b1dc10b0e Mon Sep 17 00:00:00 2001 From: dginovker Date: Sun, 9 Jun 2019 13:02:56 -0400 Subject: [PATCH 6/6] Player examine test --- .../crandor/net/packet/in/InteractionPacket.java | 4 ++-- .../inter/PlayerExamineInterfacePlugin.java | 16 ++++++++-------- 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/09HDscape-server/src/org/crandor/net/packet/in/InteractionPacket.java b/09HDscape-server/src/org/crandor/net/packet/in/InteractionPacket.java index bb19eebee..7826cc73f 100644 --- a/09HDscape-server/src/org/crandor/net/packet/in/InteractionPacket.java +++ b/09HDscape-server/src/org/crandor/net/packet/in/InteractionPacket.java @@ -234,7 +234,7 @@ public final class InteractionPacket implements IncomingPacket { /** * Handles player interaction. - * @param playerThe player interacting. + * @param player The player interacting. * @param optionIndex The option index. * @param index The target index. */ @@ -262,7 +262,7 @@ public final class InteractionPacket implements IncomingPacket { * @param player The player. * @param index The index of the reward. * @param itemId The item id. - * @param locationThe location of the item. + * @param location The location of the item. */ private static void handleGroundItemInteraction(final Player player, int index, int itemId, Location location) { final GroundItem item = GroundItemManager.get(itemId, location, player); diff --git a/09HDscape-server/src/plugin/interaction/inter/PlayerExamineInterfacePlugin.java b/09HDscape-server/src/plugin/interaction/inter/PlayerExamineInterfacePlugin.java index 9d7e0cf39..2dcf3cdac 100644 --- a/09HDscape-server/src/plugin/interaction/inter/PlayerExamineInterfacePlugin.java +++ b/09HDscape-server/src/plugin/interaction/inter/PlayerExamineInterfacePlugin.java @@ -50,14 +50,14 @@ public class PlayerExamineInterfacePlugin extends ComponentPlugin { player.getPacketDispatch().sendInterfaceConfig(component.getId(), 13, true); player.getInterfaceManager().open(component); player.getPacketDispatch().sendString("" + examined.getSavedData().getSpawnData().getTitle().getName() + " " + StringUtils.formatDisplayName(examined.getName()) + " - Combat Level: " + player.getProperties().getCurrentCombatLevel(), 31, 3); - player.getPacketDispatch().sendString("KDR -> ", 31, 9); - player.getPacketDispatch().sendString("Total Kills -> ", 31, 10); - player.getPacketDispatch().sendString("Total Deaths -> ", 31, 16); - player.getPacketDispatch().sendString("Killstreak -> ", 31, 19); - player.getPacketDispatch().sendString("" + examined.getSavedData().getSpawnData().getKdr(), 31, 11); - player.getPacketDispatch().sendString("" + examined.getSavedData().getSpawnData().getKills(), 31, 12); - player.getPacketDispatch().sendString("" + examined.getSavedData().getSpawnData().getDeaths(), 31, 17); - player.getPacketDispatch().sendString("" + examined.getSavedData().getSpawnData().getKillStreak(), 31, 20); + player.getPacketDispatch().sendString("Total Level -> ", 31, 9); + player.getPacketDispatch().sendString("Inventory items -> ", 31, 10); + player.getPacketDispatch().sendString("Inventory value -> ", 31, 16); + player.getPacketDispatch().sendString("Bank value-> ", 31, 19); + player.getPacketDispatch().sendString("" + examined.getSkills().getTotalLevel(), 31, 11); + player.getPacketDispatch().sendString("" + examined.getInventory().itemCount(), 31, 12); + player.getPacketDispatch().sendString("" + examined.getInventory().getWealth(), 31, 17); + player.getPacketDispatch().sendString("" + examined.getBank().getWealth(), 31, 20); player.getPacketDispatch().sendString("Close", 31, 5); } }