Pyramid Plunder tweaks v2: Electric boogaloo

This commit is contained in:
Ceikry 2020-03-11 23:48:25 -05:00
parent ad60f2c06b
commit 3420ea7dd0
5 changed files with 118 additions and 1 deletions

View file

@ -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.

View file

@ -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;
}
}
}

View file

@ -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<PlunderObject> ObjectList = new ArrayList<PlunderObject>();
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);
}
}

View file

@ -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) {

View file

@ -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<Object> 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("<col=7f03ff>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;