Code:
package com.rs2.game.content.skills.magic;
import com.rs2.game.Config;
import com.rs2.game.event.CycleEvent;
import com.rs2.game.event.CycleEventContainer;
import com.rs2.game.event.CycleEventHandler;
import com.rs2.game.model.Area;
import com.rs2.game.model.Client;
import com.rs2.util.Misc;
public class TeleportManager{
/*The teleport data*/
private enum TeleportData {
PAD(50235, new int[][] {{563, 2}, {556, 1}, {554, 1}}, 54,80, 3098 + Misc.random(3), 9882),
SANT(50245, new int[][] {{563, 2}, {566, 1}, {-1, -1}}, 60,130, 3320, 3338),
KARRYL(50253, new int[][] {{563, 2}, {565, 1}, {-1, -1}}, 66,145, 3493, 3472),
LASSAR(51005, new int[][] {{563, 2}, {555, 4}, {-1, -1}}, 72,280, 3003, 3470), //works
DARYEEAK(51013, new int[][] {{563, 2}, {553, 3}, {556, 2}}, 78,380, 2966, 3696), //works
CARRAL(51023, new int[][] {{563, 2}, {566, 2}, {-1, -1}}, 84,480, 3163, 3664), //works
ANNAKARL(51021, new int[][] {{563, 2}, {565, 2}, {-1, -1}}, 90,580, 3287, 3883), //works
TROLL(29031, new int[][] {{554, 2}, {563, 2}, {-1, -1}}, 61,180, 3243 + Misc.random(4), 3513 + Misc.random(1)),
LUMBRIDGE(4143, new int[][] {{563, 1}, {556, 3}, {557, 1}}, 31,30, 3221 + Misc.random(4), 3222 + Misc.random(1)),
VARROCK(4140, new int[][] {{563, 1}, {556, 3}, {554, 1}}, 25,60, Config.VARROCK_X, Config.VARROCK_Y),
FALLY(4146, new int[][] {{563, 1}, {556, 3}, {555, 1}}, 37,60, Config.FALADOR_X, Config.FALADOR_Y),
CAMELOT(4150, new int[][] {{563, 1}, {556, 3}, {-1, -1}}, 45,60, Config.CAMELOT_X, Config.CAMELOT_Y),
ARDY(6004, new int[][] {{563, 2}, {555, 2}, {-1, -1}}, 51,60, Config.ARDOUGNE_X, Config.ARDOUGNE_Y),
WATCH(6005, new int[][] {{563, 2}, {557, 2}, {-1, -1}}, 58,60, Config.WATCHTOWER_X, Config.WATCHTOWER_Y);
private int actionButton, levelRequired, experience, destX, destY;
private int[][] runes;
/**
* @return the actionButton
*/
public int getActionButton() {
return actionButton;
}
/**
* @return the levelRequired
*/
public int getLevelRequired() {
return levelRequired;
}
/**
* @return the experience
*/
public int getExperience() {
return experience;
}
/**
* @return the destX
*/
public int getDestX() {
return destX;
}
/**
* @return the destY
*/
public int getDestY() {
return destY;
}
TeleportData(int actionButton, int[][] runes, int levelRequired,
int experience, int destX, int destY) {
this.actionButton = actionButton;
this.runes = runes;
this.levelRequired = levelRequired;
this.experience = experience;
this.destX = destX;
this.destY = destY;
}
/**
* @return the runes
*/
public int[][] getRunes() {
return runes;
}
}
private static int getDestX(Client c, int actionButton) {
int x = -1;
for (TeleportData td : TeleportData.values()) {
if (actionButton == td.getActionButton()) {
if (c.playerLevel[c.playerMagic] >= td.getLevelRequired()) {
for (int i=0; i < td.runes.length;i++){
if(c.getItemContainer().playerHasItem(td.runes[i][0],td.runes[i][1])){
x=td.getDestX();
return x;
}
}
}
}
}
return x;
}
/**
* Get position X for teleport.
* @param c client
* @param actionButton button clicked
* @return y
*/
private static int getDestY(Client c, int actionButton) {
int y = -1;
for (TeleportData td : TeleportData.values()) {
if (actionButton == td.getActionButton()) {
if (c.playerLevel[c.playerMagic] >= td.getLevelRequired()) {
for (int i=0; i < td.runes.length;i++){
if(c.getItemContainer().playerHasItem(td.runes[i][0],td.runes[i][1])){
y=td.getDestY();
return y;
}
}
}
}
}
return y;
}
/**
* Check if player has correct teleport requirements.
* @param c client
* @param actionButton button clicked
* @return check
*/
private static boolean hasRequirements(Client c, int actionButton){
boolean check=false;
for (TeleportData td : TeleportData.values()) {
if (actionButton == td.getActionButton()) {
if (c.playerLevel[c.playerMagic] >= td.getLevelRequired()) {
// for (int i=0; i < td.runes.length;i++){
if(c.getItemContainer().playerHasItem(td.runes[0][0],td.runes[0][1])
&&c.getItemContainer().playerHasItem(td.runes[1][0],td.runes[1][1])
&&c.getItemContainer().playerHasItem(td.runes[2][0],td.runes[2][1])){
check=true;
}
else{
c.getActionSender().sendMessage("You need the required runes to cast this spell.");
}
///else{
//}
//}
c.getItemContainer().deleteItem2(td.runes[0][0],td.runes[0][1]);
c.getItemContainer().deleteItem2(td.runes[1][0],td.runes[1][1]);
c.getItemContainer().deleteItem2(td.runes[2][0],td.runes[2][1]);
// return true;
}else if (c.playerLevel[c.playerMagic] < td.getLevelRequired()) {
c.getActionSender().sendMessage("You need a magic level of "+td.getLevelRequired()+" to cast this spell.");
}
else{
}
return check;
}
}
return check;
}
/**
* Start teleport.
* @param c client
* @param actionButton button clicked
* @return false if NOT satisfying teleport data requirement
*/
public static boolean init(final Client c, final int actionButton) {
//check stuff before actually starting teleport...
if(c.isBusy() || c.getAttribute("teleporting")!=null){
c.getActionSender().sendMessage("You are teleporting already.");
return true;
}
if(c.wildLevel>25 && Area.getSingleton(c, c.absX, c.absY).inWild()){
c.getActionSender().sendMessage("You cannot teleport above level 25 wilderness.");
return true;
}
if(Area.getSingleton(c, c.absX, c.absY).inFightCaves()){
c.getActionSender().sendMessage("Please leave the minigame from the exit.");
return true;
}
if(!hasRequirements(c, actionButton)){
//c.getActionSender().sendMessage("You do not have the correct requirements.");
return true;
}
c.setBusy(true);//very simple way of anti-massing
c.setAttribute("teleporting", 0);
CycleEventHandler.getSingleton().addEvent(c, new CycleEvent() {
@Override
public void execute(CycleEventContainer container) {
// TODO Auto-generated method stub
MagicTeleport.spellTeleport(c, getDestX(c,actionButton), getDestY(c,actionButton), 0);
container.stop();
}
@Override
public void stop() {
// TODO Auto-generated method stub
}
},1);
CycleEventHandler.getSingleton().addEvent(c, new CycleEvent() {
@Override
public void execute(CycleEventContainer container) {
// TODO Auto-generated method stub
//if(Server.debug){
//c.getActionSender().sendMessage("SERVER: PLAYER TELEPORTED SUCCESSFULLY.");
// }
c.getActionSender().sendMessage("You teleported successfully.");
container.stop();
}
@Override
public void stop() {
// TODO Auto-generated method stub
c.removeAttribute("teleporting");
c.setBusy(false);
}
},7);
return false;
}
}
In action button packet, add this above the switch statement