diff --git a/Server/src/org/crandor/game/node/entity/player/Player.java b/Server/src/org/crandor/game/node/entity/player/Player.java index 05ae4f19c..4fdddeb1a 100644 --- a/Server/src/org/crandor/game/node/entity/player/Player.java +++ b/Server/src/org/crandor/game/node/entity/player/Player.java @@ -77,6 +77,7 @@ import org.crandor.net.packet.out.SkillLevel; import org.crandor.net.packet.out.UpdateSceneGraph; import org.crandor.plugin.Plugin; import org.crandor.tools.StringUtils; +import plugin.activity.pyramidplunder.PlunderObjectManager; import java.util.ArrayList; import java.util.List; @@ -193,6 +194,11 @@ public class Player extends Entity { */ private final FamiliarManager familiarManager = new FamiliarManager(this); + /** + * Pyramid Plunder Object Manager + */ + private final PlunderObjectManager plunderObjectManager = new PlunderObjectManager(this); + /** * The config manager. */ @@ -1237,6 +1243,8 @@ public class Player extends Entity { return ironmanManager; } + public PlunderObjectManager getPlunderObjectManager() {return plunderObjectManager;} + /** * Gets the emoteManager. * @return the emoteManager. diff --git a/Server/src/plugin/activity/pyramidplunder/PlunderObject.java b/Server/src/plugin/activity/pyramidplunder/PlunderObject.java new file mode 100644 index 000000000..a19b0ba28 --- /dev/null +++ b/Server/src/plugin/activity/pyramidplunder/PlunderObject.java @@ -0,0 +1,38 @@ +package plugin.activity.pyramidplunder; + +import org.crandor.game.node.entity.player.Player; +import org.crandor.game.node.object.GameObject; +import org.crandor.game.world.map.Location; + +/** + * Handles object instances for pyramid plunder + * @author ceik + */ + +public class PlunderObject extends GameObject { + public boolean playerOpened; + private transient Player player; + private int thisId; + + + public PlunderObject(int id, Location location, Player player) { + super(id, location); + this.player = player; + } + public PlunderObject(){ + /** + * Empty. + */ + } + + + public boolean isOpenedBy(Player player){ + try { + //manager.loadList("plunder.tmp"); + PlunderObjectManager manager = player.getPlunderObjectManager(); + return manager.ObjectList.get(manager.ObjectList.indexOf(this)).playerOpened; + } catch (Exception e){ + return false; + } + } +} diff --git a/Server/src/plugin/activity/pyramidplunder/PlunderObjectManager.java b/Server/src/plugin/activity/pyramidplunder/PlunderObjectManager.java new file mode 100644 index 000000000..df71bac5b --- /dev/null +++ b/Server/src/plugin/activity/pyramidplunder/PlunderObjectManager.java @@ -0,0 +1,35 @@ +package plugin.activity.pyramidplunder; + +import org.crandor.game.node.entity.player.Player; +import java.util.ArrayList; +import java.util.List; +import java.util.ListIterator; + +/** + * Manages what objects a specific player has interacted with in pyramid plunder. + * @author ceik + */ + +public class PlunderObjectManager{ + Player player; + public PlunderObjectManager(Player player){ + this.player = player; + } + public List ObjectList = new ArrayList(); + public boolean resetObjectsFor(Player player){ + //loadList("plunder.tmp"); + ListIterator oliter = ObjectList.listIterator(); + int i = 0; + while(oliter.hasNext()){ + PlunderObject current = (PlunderObject) oliter.next(); + if(current.playerOpened){ + current.playerOpened = false; + } + } + return true; + } + + public void register(PlunderObject object){ + ObjectList.add(object); + } +} diff --git a/Server/src/plugin/activity/pyramidplunder/PyramidOptionHandler.java b/Server/src/plugin/activity/pyramidplunder/PyramidOptionHandler.java index fe9eda57b..530d65c01 100644 --- a/Server/src/plugin/activity/pyramidplunder/PyramidOptionHandler.java +++ b/Server/src/plugin/activity/pyramidplunder/PyramidOptionHandler.java @@ -66,6 +66,7 @@ public final class PyramidOptionHandler extends OptionHandler { boolean willBePushed = (RandomFunction.random(10) > 3); if (object.getId() == 16458 || object.getId() == 16459) { ClimbActionHandler.climb(player, ClimbActionHandler.CLIMB_UP, Location.create(3288, 2801, 0)); + player.getPlunderObjectManager().resetObjectsFor(player); return true; } if (System.currentTimeMillis() - lastEntranceSwitch > 15 * 60 * 1000) { diff --git a/Server/src/plugin/activity/pyramidplunder/PyramidPlunderOptions.java b/Server/src/plugin/activity/pyramidplunder/PyramidPlunderOptions.java index a0fd44473..17e682a0b 100644 --- a/Server/src/plugin/activity/pyramidplunder/PyramidPlunderOptions.java +++ b/Server/src/plugin/activity/pyramidplunder/PyramidPlunderOptions.java @@ -29,6 +29,7 @@ public final class PyramidPlunderOptions extends OptionHandler { Item[][] ARTIFACTS = { {new Item(9032),new Item(9036), new Item(9026)}, {new Item(9042), new Item(9030), new Item(9038)}, {new Item(9040), new Item(9028), new Item(9034)} }; private static final Animation[] animations = new Animation[] { new Animation(2247), new Animation(2248), new Animation(1113), new Animation(2244) }; int reqLevel; + //Player player; @Override public Plugin newInstance(Object arg) throws Throwable { ObjectDefinition.forId(16517).getConfigurations().put("option:pass",this); @@ -63,6 +64,7 @@ public final class PyramidPlunderOptions extends OptionHandler { } @Override public boolean handle(Player player, Node node, String option) { + PlunderObjectManager manager = player.getPlunderObjectManager(); int NPCDeathTime = GameWorld.getTicks() + (1000 / 6); Location room_entrance[] = {new Location(1927,4477), new Location(1927,4453), new Location(1943,4421), new Location(1954,4477), new Location(1974,4420), new Location(1977,4471), new Location(1927, 4424)}; int currentX = player.getLocation().getX(); @@ -109,7 +111,7 @@ public final class PyramidPlunderOptions extends OptionHandler { spearX = 0; spearY = 2; } - GameObject object = node.asObject(); + PlunderObject object = new PlunderObject(node.asObject().getId(),node.asObject().getLocation(),player); droom = (double) room; switch (object.getId()) { case 16517: @@ -141,6 +143,10 @@ public final class PyramidPlunderOptions extends OptionHandler { player.getPacketDispatch().sendMessage("You need to be at least level " + reqLevel + " thieving."); break; } + if (manager.ObjectList.contains(object) ? manager.ObjectList.get(manager.ObjectList.indexOf(object)).playerOpened : false){ + player.getPacketDispatch().sendMessage("You've already looted this."); + break; + } boolean success = success(player, Skills.THIEVING); player.animate(animations[success ? 1 : 0]); player.lock(2); @@ -149,6 +155,12 @@ public final class PyramidPlunderOptions extends OptionHandler { player.getSkills().addExperience(Skills.THIEVING, 25 + (room * 20), true); player.getInventory().add(ARTIFACTS[((int)Math.floor(droom / 3))][RandomFunction.random(3)]); rollSceptre(player); + if(!manager.ObjectList.contains(object)) { + object.playerOpened = true; + manager.register(object); + } else { + manager.ObjectList.get(manager.ObjectList.indexOf(object)).playerOpened = true; + } } else { player.getPacketDispatch().sendMessage("You failed and got bit by a snake."); } @@ -161,6 +173,10 @@ public final class PyramidPlunderOptions extends OptionHandler { player.getPacketDispatch().sendMessage("You need to be at least level " + reqLevel + " thieving."); break; } + if (manager.ObjectList.contains(object) ? manager.ObjectList.get(manager.ObjectList.indexOf(object)).playerOpened : false){ + player.getPacketDispatch().sendMessage("You've already looted this."); + break; + } player.getPacketDispatch().sendMessage("You search the chest..."); player.animate(animations[1]); player.lock(2); @@ -176,6 +192,12 @@ public final class PyramidPlunderOptions extends OptionHandler { player.getPacketDispatch().sendMessage("And you find an artifact!"); player.getSkills().addExperience(Skills.THIEVING, 40 + (room * 20)); } + if(!manager.ObjectList.contains(object)) { + object.playerOpened = true; + manager.register(object); + } else { + manager.ObjectList.get(manager.ObjectList.indexOf(object)).playerOpened = true; + } } break; case 16495: @@ -184,6 +206,10 @@ public final class PyramidPlunderOptions extends OptionHandler { player.getPacketDispatch().sendMessage("You need to be at least level " + reqLevel + " thieving."); break; } + if (manager.ObjectList.contains(object) ? manager.ObjectList.get(manager.ObjectList.indexOf(object)).playerOpened : false){ + player.getPacketDispatch().sendMessage("You've already looted this."); + break; + } boolean willSpawnMummy = (RandomFunction.random(1,5) == 3); player.animate(animations[1]); player.getPacketDispatch().sendMessage("You open the sarcophagus and...."); @@ -199,6 +225,12 @@ public final class PyramidPlunderOptions extends OptionHandler { rollSceptre(player); player.getSkills().addExperience(Skills.STRENGTH,50 + (room * 20)); } + if(!manager.ObjectList.contains(object)) { + object.playerOpened = true; + manager.register(object); + } else { + manager.ObjectList.get(manager.ObjectList.indexOf(object)).playerOpened = true; + } } break; case 16475: @@ -214,12 +246,15 @@ public final class PyramidPlunderOptions extends OptionHandler { player.getPacketDispatch().sendMessage("The door opens!"); player.getProperties().setTeleportLocation(room_entrance[room]); player.getPacketDispatch().sendMessage("Room: " + (room + 1) + " Level required: " + (reqLevel + 10)); + player.getPlunderObjectManager().resetObjectsFor(player); } else { player.getPacketDispatch().sendMessage("You fail to unlock the door."); } } else if(room == 8) { ClimbActionHandler.climb(player, ClimbActionHandler.CLIMB_UP, Location.create(3288, 2801, 0)); + player.getPlunderObjectManager().resetObjectsFor(player); } + manager.resetObjectsFor(player); break; } return true;