forked from 2009Scape/Server
Merge pull request #165 from Ceikry/master
Pyramid Plunder tweaks v2: Electric boogaloo
This commit is contained in:
commit
de39834df7
6 changed files with 156 additions and 2 deletions
|
|
@ -99,6 +99,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;
|
||||
|
||||
/**
|
||||
* Represents a player entity.
|
||||
|
|
@ -212,6 +213,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.
|
||||
*/
|
||||
|
|
@ -1261,6 +1267,8 @@ public class Player extends Entity {
|
|||
return ironmanManager;
|
||||
}
|
||||
|
||||
public PlunderObjectManager getPlunderObjectManager() {return plunderObjectManager;}
|
||||
|
||||
/**
|
||||
* Gets the emoteManager.
|
||||
* @return the emoteManager.
|
||||
|
|
|
|||
38
Server/src/plugin/activity/pyramidplunder/PlunderObject.java
Normal file
38
Server/src/plugin/activity/pyramidplunder/PlunderObject.java
Normal 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;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
|
@ -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) {
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -47,6 +47,7 @@ public final class SimonTempleton extends DialoguePlugin{
|
|||
@Override
|
||||
public boolean handle(int interfaceId, int buttonId){
|
||||
boolean hasArtefacts = false;
|
||||
boolean hasPyramidTopper = false;
|
||||
switch(stage){
|
||||
case 0:
|
||||
for(int i = 0; i < ARTIFACTS.length; i++){
|
||||
|
|
@ -57,7 +58,13 @@ public final class SimonTempleton extends DialoguePlugin{
|
|||
}
|
||||
}
|
||||
}
|
||||
if(hasArtefacts){
|
||||
hasPyramidTopper = player.getInventory().containsItem(new Item(6970));
|
||||
if(hasPyramidTopper){
|
||||
player("Yes, actually. The top of that pyramid.");
|
||||
stage = 6;
|
||||
break;
|
||||
}
|
||||
if(hasArtefacts && !hasPyramidTopper){
|
||||
player("Why, yes I do!");
|
||||
stage = 1;
|
||||
break;
|
||||
|
|
@ -85,6 +92,36 @@ public final class SimonTempleton extends DialoguePlugin{
|
|||
npc("Bye, mate.");
|
||||
stage = 999;
|
||||
break;
|
||||
case 6:
|
||||
npc("Hmmm, very nice. I'll buy them for 10k each.");
|
||||
stage = 7;
|
||||
break;
|
||||
case 7:
|
||||
interpreter.sendOptions("Select an option.","Sounds good!", "No thanks.");
|
||||
stage = 8;
|
||||
break;
|
||||
case 8:
|
||||
switch(buttonId){
|
||||
case 1:
|
||||
for(int j = 0; j < 28; j++){
|
||||
switch(player.getInventory().getId(j)){
|
||||
case 6970:
|
||||
player.getInventory().remove(new Item(6970),j,true);
|
||||
player.getInventory().add(new Item(995, 10000));
|
||||
break;
|
||||
}
|
||||
}
|
||||
end();
|
||||
break;
|
||||
case 2:
|
||||
npc("Have it your way.");
|
||||
stage = 9;
|
||||
break;
|
||||
}
|
||||
break;
|
||||
case 9:
|
||||
end();
|
||||
break;
|
||||
case 10:
|
||||
switch(buttonId){
|
||||
case 1:
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue