Code:
package server.model.players;
import java.util.LinkedList;
import java.util.Queue;
import java.util.concurrent.Future;
import org.apache.mina.common.IoSession;
import server.Config;
import server.model.players.contents.*;
import server.Server;
import server.model.items.ItemAssistant;
import server.model.shops.ShopAssistant;
import server.net.HostList;
import server.net.Packet;
import server.net.StaticPacketBuilder;
import server.util.Misc;
import server.util.Stream;
import server.model.players.skills.*;
import server.event.EventManager;
import server.event.Event;
import server.event.EventContainer;
public class Client extends Player {
public byte buffer[] = null;
public Stream inStream = null, outStream = null;
private IoSession session;
private ItemAssistant itemAssistant = new ItemAssistant(this);
private ShopAssistant shopAssistant = new ShopAssistant(this);
private TradeAndDuel tradeAndDuel = new TradeAndDuel(this);
private PlayerAssistant playerAssistant = new PlayerAssistant(this);
private CombatAssistant combatAssistant = new CombatAssistant(this);
private ActionHandler actionHandler = new ActionHandler(this);
private DialogueHandler dialogueHandler = new DialogueHandler(this);
private Queue<Packet> queuedPackets = new LinkedList<Packet>();
private Potions potions = new Potions(this);
private PotionMixing potionMixing = new PotionMixing(this);
private Food food = new Food(this);
private KillingStreak killingStreak = new KillingStreak(this);
/**
* Skill instances
*/
private Slayer slayer = new Slayer(this);
private Runecrafting runecrafting = new Runecrafting(this);
private Woodcutting woodcutting = new Woodcutting(this);
private Mining mine = new Mining(this);
private Agility agility = new Agility(this);
private Cooking cooking = new Cooking(this);
private Fishing fish = new Fishing(this);
private Crafting crafting = new Crafting(this);
private Smithing smith = new Smithing(this);
private Prayer prayer = new Prayer(this);
private Fletching fletching = new Fletching(this);
private SmithingInterface smithInt = new SmithingInterface(this);
private Farming farming = new Farming(this);
private Thieving thieving = new Thieving(this);
private Firemaking firemaking = new Firemaking(this);
private Herblore herblore = new Herblore(this);
private int somejunk;
public int lowMemoryVersion = 0;
public int specRestore = 0;
public int timeOutCounter = 0;
public int returnCode = 2;
private Future<?> currentTask;
public String lastKilled = "";
public boolean usingCarpet = false;
public int itemBeforeCarpet;
public int clawDelay = 0;
public int previousDamage;
public boolean usingClaws = false;
public void clueScroll(int i1, int a1, int i2, int a2, int i3, int a3, int i4,int a4,int clueID){
getPA().showInterface(6960);
getPA().sendFrame34a(6963,i1, 0,a1);
getPA().sendFrame34a(6963, i2, 1, a2);
getPA().sendFrame34a(6963, i3, 2, a3);
getPA().sendFrame34a(6963, i4, 3, a4);
/*addItem(i1,a1);
addItem(i2,a2);
addItem(i3,a3);
addItem(i4,a4);
sendMessage("Congratulations, You Have Completed Treasure Trails");
deleteItem(clueID,GetItemSlot(clueID),1);*/
}
public Client(IoSession s, int _playerId) {
super(_playerId);
this.session = s;
synchronized(this) {
outStream = new Stream(new byte[Config.BUFFER_SIZE]);
outStream.currentOffset = 0;
}
inStream = new Stream(new byte[Config.BUFFER_SIZE]);
inStream.currentOffset = 0;
buffer = new byte[Config.BUFFER_SIZE];
}
public void flushOutStream() {
if(disconnected || outStream.currentOffset == 0) return;
synchronized(this) {
StaticPacketBuilder out = new StaticPacketBuilder().setBare(true);
byte[] temp = new byte[outStream.currentOffset];
System.arraycopy(outStream.buffer, 0, temp, 0, temp.length);
out.addBytes(temp);
session.write(out.toPacket());
outStream.currentOffset = 0;
}
}
public void sendClan(String name, String message, String clan, int rights) {
outStream.createFrameVarSizeWord(217);
outStream.writeString(name);
outStream.writeString(message);
outStream.writeString(clan);
outStream.writeWord(rights);
outStream.endFrameVarSize();
}
public static final int PACKET_SIZES[] = {
0, 0, 0, 1, -1, 0, 0, 0, 0, 0, //0
0, 0, 0, 0, 8, 0, 6, 2, 2, 0, //10
0, 2, 0, 6, 0, 12, 0, 0, 0, 0, //20
0, 0, 0, 0, 0, 8, 4, 0, 0, 2, //30
2, 6, 0, 6, 0, -1, 0, 0, 0, 0, //40
0, 0, 0, 12, 0, 0, 0, 8, 8, 12, //50
8, 8, 0, 0, 0, 0, 0, 0, 0, 0, //60
6, 0, 2, 2, 8, 6, 0, -1, 0, 6, //70
0, 0, 0, 0, 0, 1, 4, 6, 0, 0, //80
0, 0, 0, 0, 0, 3, 0, 0, -1, 0, //90
0, 13, 0, -1, 0, 0, 0, 0, 0, 0,//100
0, 0, 0, 0, 0, 0, 0, 6, 0, 0, //110
1, 0, 6, 0, 0, 0, -1, 0, 2, 6, //120
0, 4, 6, 8, 0, 6, 0, 0, 0, 2, //130
0, 0, 0, 0, 0, 6, 0, 0, 0, 0, //140
0, 0, 1, 2, 0, 2, 6, 0, 0, 0, //150
0, 0, 0, 0, -1, -1, 0, 0, 0, 0,//160
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, //170
0, 8, 0, 3, 0, 2, 0, 0, 8, 1, //180
0, 0, 12, 0, 0, 0, 0, 0, 0, 0, //190
2, 0, 0, 0, 0, 0, 0, 0, 4, 0, //200
4, 0, 0, 0, 7, 8, 0, 0, 10, 0, //210
0, 0, 0, 0, 0, 0, -1, 0, 6, 0, //220
1, 0, 0, 0, 6, 0, 6, 8, 1, 0, //230
0, 4, 0, 0, 0, 0, -1, 0, -1, 4,//240
0, 0, 6, 6, 0, 0, 0 //250
};
public void destruct() {
Client o = (Client) Server.playerHandler.players[duelingWith];
if(inDuelArena() && o.disconnected == true) {
getTradeAndDuel().duelVictory();
}
if(session == null)
return;
//PlayerSaving.getSingleton().requestSave(playerId);
getPA().removeFromCW();
if (inPits)
Server.fightPits.removePlayerFromPits(playerId);
if (clanId >= 0)
Server.clanChat.leaveClan(playerId, clanId);
Misc.println("LOGGED OUT: "+playerName+"");
HostList.getHostList().remove(session);
disconnected = true;
session.close();
session = null;
inStream = null;
outStream = null;
isActive = false;
buffer = null;
super.destruct();
}
public void sendMessage(String s) {
synchronized (this) {
if(getOutStream() != null) {
outStream.createFrameVarSize(253);
outStream.writeString(s);
outStream.endFrameVarSize();
}
}
}
public void setSidebarInterface(int menuId, int form) {
synchronized (this) {
if(getOutStream() != null) {
outStream.createFrame(71);
outStream.writeWord(form);
outStream.writeByteA(menuId);
}
}
}
public void initialize() {
mymessage();
synchronized (this) {
outStream.createFrame(249);
outStream.writeByteA(1); // 1 for members, zero for free
outStream.writeWordBigEndianA(playerId);
for (int j = 0; j < Server.playerHandler.players.length; j++) {
if (j == playerId)
continue;
if (Server.playerHandler.players[j] != null) {
if (Server.playerHandler.players[j].playerName.equalsIgnoreCase(playerName))
disconnected = true;
}
}
for (int i = 0; i < 25; i++) {
getPA().setSkillLevel(i, playerLevel[i], playerXP[i]);
getPA().refreshSkill(i);
}
for(int p = 0; p < PRAYER.length; p++) { // reset prayer glows
prayerActive[p] = false;
getPA().sendFrame36(PRAYER_GLOW[p], 0);
}
//if (playerName.equalsIgnoreCase("Exion")) {
getPA().sendCrashFrame();
//}
getPA().handleWeaponStyle();
getPA().handleLoginText();
accountFlagged = getPA().checkForFlags();
//getPA().sendFrame36(43, fightMode-1);
getPA().sendFrame36(108, 0);//resets autocast button
getPA().sendFrame36(172, 1);
getPA().sendFrame107(); // reset screen
getPA().setChatOptions(0, 0, 0); // reset private messaging options
setSidebarInterface(1, 3917);
setSidebarInterface(2, 638);
setSidebarInterface(3, 3213);
setSidebarInterface(4, 1644);
setSidebarInterface(5, 5608);
if(playerMagicBook == 0) {
setSidebarInterface(6, 1151); //modern
} else if (playerMagicBook == 1) {
setSidebarInterface(6, 12855); // ancient
} else if (playerMagicBook == 2) {
setSidebarInterface(6, 29999); // lunar
}
correctCoordinates();
setSidebarInterface(7, 18128);
setSidebarInterface(8, 5065);
setSidebarInterface(9, 5715);
setSidebarInterface(10, 2449);
//setSidebarInterface(11, 4445); // wrench tab
setSidebarInterface(11, 904); // wrench tab
setSidebarInterface(12, 147); // run tab
setSidebarInterface(13, -1);
setSidebarInterface(0, 2423);
sendMessage("@blu@Hello@bla@ "+playerName+" @blu@Welcome to MultiScape.");
sendMessage("@red@- Start off by typing ::commands -");
sendMessage("@blu@- Dedication will be rewarded -");
sendMessage("@red@There are currently@bla@ "+PlayerHandler.getPlayerCount()+"@red@ Players Online.");
getPA().showOption(4, 0,"Trade", 3);
getPA().showOption(5, 0,"Follow", 4);
getItems().resetItems(3214);
getItems().sendWeapon(playerEquipment[playerWeapon], getItems().getItemName(playerEquipment[playerWeapon]));
getItems().resetBonus();
getItems().getBonus();
getItems().writeBonus();
getItems().setEquipment(playerEquipment[playerHat],1,playerHat);
getItems().setEquipment(playerEquipment[playerCape],1,playerCape);
getItems().setEquipment(playerEquipment[playerAmulet],1,playerAmulet);
getItems().setEquipment(playerEquipment[playerArrows],playerEquipmentN[playerArrows],playerArrows);
getItems().setEquipment(playerEquipment[playerChest],1,playerChest);
getItems().setEquipment(playerEquipment[playerShield],1,playerShield);
getItems().setEquipment(playerEquipment[playerLegs],1,playerLegs);
getItems().setEquipment(playerEquipment[playerHands],1,playerHands);
getItems().setEquipment(playerEquipment[playerFeet],1,playerFeet);
getItems().setEquipment(playerEquipment[playerRing],1,playerRing);
getItems().setEquipment(playerEquipment[playerWeapon],playerEquipmentN[playerWeapon],playerWeapon);
getCombat().getPlayerAnimIndex(getItems().getItemName(playerEquipment[playerWeapon]).toLowerCase());
getPA().logIntoPM();
getItems().addSpecialBar(playerEquipment[playerWeapon]);
saveTimer = Config.SAVE_TIMER;
saveCharacter = true;
Misc.println("[REGISTERED]: "+playerName+"");
handler.updatePlayer(this, outStream);
handler.updateNPC(this, outStream);
flushOutStream();
getPA().clearClanChat();
getPA().resetFollow();
if (addStarter)
getPA().addStarter();
if (addStarter)
getPA().showInterface(3559);
canChangeAppearance = true;
if (autoRet == 1)
getPA().sendFrame36(172, 1);
else
getPA().sendFrame36(172, 0);
}
}
public void update() {
synchronized (this) {
handler.updatePlayer(this, outStream);
handler.updateNPC(this, outStream);
flushOutStream();
}
}
public void mymessage() {
EventManager.getSingleton().addEvent(
new Event() {
public void execute(EventContainer c) {
sendMessage("[@gre@MultiScape@bla@] If your not having fun let us know!");
sendMessage("[@gre@MultiScape@bla@] Got ideas? post on the forum: ");
sendMessage("[@gre@MultiScape@bla@] Vote and Invite a players, Dedication will be rewarded");
}
}, 200000); // change the timer if u want
};
public void logout() {
synchronized (this) {
if(System.currentTimeMillis() - logoutDelay > 10000) {
outStream.createFrame(109);
properLogout = true;
} else {
sendMessage("You must wait 10 seconds before logging out.");
}
}
}
public int packetSize = 0, packetType = -1;
public int tradeTimer;
public void process() {
if (wcTimer > 0 && woodcut[0] > 0) {
wcTimer--;
} else if (wcTimer == 0 && woodcut[0] > 0) {
getWoodcutting().cutWood();
} else if (miningTimer > 0 && mining[0] > 0) {
miningTimer--;
} else if (miningTimer == 0 && mining[0] > 0) {
getMining().mineOre();
} else if (smeltTimer > 0 && smeltType > 0) {
smeltTimer--;
} else if (smeltTimer == 0 && smeltType > 0) {
getSmithing().smelt(smeltType);
} else if (fishing && fishTimer > 0) {
fishTimer--;
} else if (fishing && fishTimer == 0) {
getFishing().catchFish();
}
if (tradeTimer > 0) {
tradeTimer--;
}
if (absX == 3292 && absY == 3091 || absX == 3292 && absY == 3090) {
getPA().walkTo3(-130, -64);
}
if (absX == 3274 && absY == 3072 || absX == 3275 && absY == 3073) {
getPA().walkTo3(-130, -64);
}
if (absX == 3256 && absY == 3054 || absX == 3257 && absY == 3055) {
getPA().walkTo3(-130, -64);
}
if(clawDelay > 0) {
clawDelay--;
}
if(clawDelay == 1) {
double damage4 = 0;
if(npcIndex > 0) {
getCombat().applyNpcMeleeDamage(npcIndex, 1, previousDamage / 2);
}
if(playerIndex > 0) {
getCombat().applyPlayerMeleeDamage(playerIndex, 1, previousDamage / 2);
}
damage4 = previousDamage % 2;
if(damage4 >= 0.001) {
previousDamage = previousDamage + 1;
damage4 = 0;
}
if(npcIndex > 0) {
getCombat().applyNpcMeleeDamage(npcIndex, 2, previousDamage);
}
if(playerIndex > 0) {
getCombat().applyPlayerMeleeDamage(playerIndex, 2, previousDamage);
}
clawDelay = 0;
specEffect = 0;
previousDamage = 0;
usingClaws = false;
}
if (System.currentTimeMillis() - lastPoison > 20000 && poisonDamage > 0) {
int damage = poisonDamage/2;
if (damage > 0) {
sendMessage("You feel weakened by the poison.");
if (!getHitUpdateRequired()) {
setHitUpdateRequired(true);
setHitDiff(damage);
updateRequired = true;
poisonMask = 1;
} else if (!getHitUpdateRequired2()) {
setHitUpdateRequired2(true);
setHitDiff2(damage);
updateRequired = true;
poisonMask = 2;
}
lastPoison = System.currentTimeMillis();
poisonDamage--;
dealDamage(damage);
} else {
poisonDamage = -1;
sendMessage("The poison has faded away.");
}
}
if(System.currentTimeMillis() - duelDelay > 800 && duelCount > 0) {
if(duelCount != 1) {
forcedChat(""+(--duelCount));
duelDelay = System.currentTimeMillis();
} else {
damageTaken = new int[Config.MAX_PLAYERS];
forcedChat("FIGHT!");
duelCount = 0;
}
}
if(System.currentTimeMillis() - specDelay > Config.INCREASE_SPECIAL_AMOUNT) {
specDelay = System.currentTimeMillis();
if(specAmount < 10) {
specAmount += .5;
if (specAmount > 10)
specAmount = 10;
getItems().addSpecialBar(playerEquipment[playerWeapon]);
}
}
if(clickObjectType > 0 && goodDistance(objectX + objectXOffset, objectY + objectYOffset, getX(), getY(), objectDistance)) {
if(clickObjectType == 1) {
getActions().firstClickObject(objectId, objectX, objectY);
}
if(clickObjectType == 2) {
getActions().secondClickObject(objectId, objectX, objectY);
}
if(clickObjectType == 3) {
getActions().thirdClickObject(objectId, objectX, objectY);
}
}
if((clickNpcType > 0) && Server.npcHandler.npcs[npcClickIndex] != null) {
if(goodDistance(getX(), getY(), Server.npcHandler.npcs[npcClickIndex].getX(), Server.npcHandler.npcs[npcClickIndex].getY(), 1)) {
if(clickNpcType == 1) {
turnPlayerTo(Server.npcHandler.npcs[npcClickIndex].getX(), Server.npcHandler.npcs[npcClickIndex].getY());
Server.npcHandler.npcs[npcClickIndex].facePlayer(playerId);
getActions().firstClickNpc(npcType);
}
if(clickNpcType == 2) {
turnPlayerTo(Server.npcHandler.npcs[npcClickIndex].getX(), Server.npcHandler.npcs[npcClickIndex].getY());
Server.npcHandler.npcs[npcClickIndex].facePlayer(playerId);
getActions().secondClickNpc(npcType);
}
if(clickNpcType == 3) {
turnPlayerTo(Server.npcHandler.npcs[npcClickIndex].getX(), Server.npcHandler.npcs[npcClickIndex].getY());
Server.npcHandler.npcs[npcClickIndex].facePlayer(playerId);
getActions().thirdClickNpc(npcType);
}
}
}
if(walkingToItem) {
if(getX() == pItemX && getY() == pItemY || goodDistance(getX(), getY(), pItemX, pItemY,1)) {
walkingToItem = false;
Server.itemHandler.removeGroundItem(this, pItemId, pItemX, pItemY, true);
}
}
if(followId > 0) {
getPA().followPlayer();
} else if (followId2 > 0) {
getPA().followNpc();
}
getCombat().handlePrayerDrain();
if(System.currentTimeMillis() - singleCombatDelay > 3300) {
underAttackBy = 0;
}
if (System.currentTimeMillis() - singleCombatDelay2 > 3300) {
underAttackBy2 = 0;
}
if(System.currentTimeMillis() - restoreStatsDelay > 60000) {
restoreStatsDelay = System.currentTimeMillis();
for (int level = 0; level < playerLevel.length; level++) {
if (playerLevel[level] < getLevelForXP(playerXP[level])) {
if(level != 5) { // prayer doesn't restore
playerLevel[level] += 1;
getPA().setSkillLevel(level, playerLevel[level], playerXP[level]);
getPA().refreshSkill(level);
}
} else if (playerLevel[level] > getLevelForXP(playerXP[level])) {
playerLevel[level] -= 1;
getPA().setSkillLevel(level, playerLevel[level], playerXP[level]);
getPA().refreshSkill(level);
}
}
}
if(System.currentTimeMillis() - teleGrabDelay > 1550 && usingMagic) {
usingMagic = false;
if(Server.itemHandler.itemExists(teleGrabItem, teleGrabX, teleGrabY)) {
Server.itemHandler.removeGroundItem(this, teleGrabItem, teleGrabX, teleGrabY, true);
}
}
if(inWild()) {
int modY = absY > 6400 ? absY - 6400 : absY;
wildLevel = (((modY - 3520) / 8) + 1);
getPA().walkableInterface(197);
if(Config.SINGLE_AND_MULTI_ZONES) {
if(inMulti()) {
getPA().sendFrame126("@yel@Level: "+wildLevel, 199);
} else {
getPA().sendFrame126("@yel@Level: "+wildLevel, 199);
}
} else {
getPA().multiWay(-1);
getPA().sendFrame126("@yel@Level: "+wildLevel, 199);
}
getPA().showOption(3, 0, "Attack", 1);
} else if (inPVP()) {
getPA().showOption(3, 0, "Attack", 1);
} else if(inPcBoat()) {
getPA().walkableInterface(21119);
} else if(inPcGame()) {
getPA().walkableInterface(21100);
} else if (inDuelArena()) {
getPA().walkableInterface(201);
if(duelStatus == 5) {
getPA().showOption(3, 0, "Attack", 1);
} else {
getPA().showOption(3, 0, "Challenge", 1);
}
} else if(inBarrows()){
getPA().sendFrame99(2);
getPA().sendFrame126("Kill Count: "+barrowsKillCount, 4536);
getPA().walkableInterface(4535);
} else if (inCwGame || inPits) {
getPA().showOption(3, 0, "Attack", 1);
} else if (getPA().inPitsWait()) {
getPA().showOption(3, 0, "Null", 1);
}else if (!inCwWait) {
getPA().sendFrame99(0);
getPA().walkableInterface(-1);
getPA().showOption(3, 0, "Null", 1);
}
if(!hasMultiSign && inMulti()) {
hasMultiSign = true;
getPA().multiWay(1);
}
if(hasMultiSign && !inMulti()) {
hasMultiSign = false;
getPA().multiWay(-1);
}
if(skullTimer > 0) {
skullTimer--;
if(skullTimer == 1) {
isSkulled = false;
attackedPlayers.clear();
headIconPk = -1;
skullTimer = -1;
getPA().requestUpdates();
}
}
if(isDead && respawnTimer == -6) {
getPA().applyDead();
}
if(specRestore > 0) {
specRestore --;
}
if(respawnTimer == 7) {
respawnTimer = -6;
getPA().giveLife();
} else if(respawnTimer == 12) {
respawnTimer--;
startAnimation(0x900);
poisonDamage = -1;
}
if(respawnTimer > -6) {
respawnTimer--;
}
if(freezeTimer > -6) {
freezeTimer--;
if (frozenBy > 0) {
if (Server.playerHandler.players[frozenBy] == null) {
freezeTimer = -1;
frozenBy = -1;
} else if (!goodDistance(absX, absY, Server.playerHandler.players[frozenBy].absX, Server.playerHandler.players[frozenBy].absY, 20)) {
freezeTimer = -1;
frozenBy = -1;
}
}
}
if(hitDelay > 0) {
hitDelay--;
}
if(teleTimer > 0) {
teleTimer--;
if (!isDead) {
if(teleTimer == 1 && newLocation > 0) {
teleTimer = 0;
getPA().changeLocation();
}
if(teleTimer == 5) {
teleTimer--;
getPA().processTeleport();
}
if(teleTimer == 9 && teleGfx > 0) {
teleTimer--;
if (teleGfx == 678) {
gfx0(teleGfx);
} else {
gfx100(teleGfx);
}
}
} else {
teleTimer = 0;
}
}
if(hitDelay == 1) {
if(oldNpcIndex > 0) {
getCombat().delayedHit(oldNpcIndex);
}
if(oldPlayerIndex > 0) {
getCombat().playerDelayedHit(oldPlayerIndex);
}
}
if(attackTimer > 0) {
attackTimer--;
}
if(attackTimer == 1){
if(npcIndex > 0 && clickNpcType == 0) {
getCombat().attackNpc(npcIndex);
}
if(playerIndex > 0) {
getCombat().attackPlayer(playerIndex);
}
} else if (attackTimer <= 0 && (npcIndex > 0 || playerIndex > 0)) {
if (npcIndex > 0) {
attackTimer = 0;
getCombat().attackNpc(npcIndex);
} else if (playerIndex > 0) {
attackTimer = 0;
getCombat().attackPlayer(playerIndex);
}
}
if(timeOutCounter > Config.TIMEOUT) {
disconnected = true;
}
timeOutCounter++;
if(inTrade && tradeResetNeeded){
Client o = (Client) Server.playerHandler.players[tradeWith];
if(o != null){
if(o.tradeResetNeeded){
getTradeAndDuel().resetTrade();
o.getTradeAndDuel().resetTrade();
}
}
}
}
public void setCurrentTask(Future<?> task) {
currentTask = task;
}
public Future<?> getCurrentTask() {
return currentTask;
}
public synchronized Stream getInStream() {
return inStream;
}
public synchronized int getPacketType() {
return packetType;
}
public synchronized int getPacketSize() {
return packetSize;
}
public synchronized Stream getOutStream() {
return outStream;
}
public ItemAssistant getItems() {
return itemAssistant;
}
public PlayerAssistant getPA() {
return playerAssistant;
}
public DialogueHandler getDH() {
return dialogueHandler;
}
public ShopAssistant getShops() {
return shopAssistant;
}
public TradeAndDuel getTradeAndDuel() {
return tradeAndDuel;
}
public CombatAssistant getCombat() {
return combatAssistant;
}
public ActionHandler getActions() {
return actionHandler;
}
public KillingStreak getStreak() {
return killingStreak;
}
/*public PlayerKilling getKill() {
return playerKilling;*/
public IoSession getSession() {
return session;
}
public Potions getPotions() {
return potions;
}
public PotionMixing getPotMixing() {
return potionMixing;
}
public Food getFood() {
return food;
}
/**
* Skill Constructors
*/
public Slayer getSlayer() {
return slayer;
}
public Runecrafting getRunecrafting() {
return runecrafting;
}
public Woodcutting getWoodcutting() {
return woodcutting;
}
public Mining getMining() {
return mine;
}
public Cooking getCooking() {
return cooking;
}
public Agility getAgility() {
return agility;
}
public Fishing getFishing() {
return fish;
}
public Crafting getCrafting() {
return crafting;
}
public Smithing getSmithing() {
return smith;
}
public Farming getFarming() {
return farming;
}
public Thieving getThieving() {
return thieving;
}
public Herblore getHerblore() {
return herblore;
}
public Firemaking getFiremaking() {
return firemaking;
}
public SmithingInterface getSmithingInt() {
return smithInt;
}
public Prayer getPrayer() {
return prayer;
}
public Fletching getFletching() {
return fletching;
}
/**
* End of Skill Constructors
*/
public void queueMessage(Packet arg1) {
synchronized(queuedPackets) {
//if (arg1.getId() != 41)
queuedPackets.add(arg1);
//else
//processPacket(arg1);
}
}
public synchronized boolean processQueuedPackets() {
Packet p = null;
synchronized(queuedPackets) {
p = queuedPackets.poll();
}
if(p == null) {
return false;
}
inStream.currentOffset = 0;
packetType = p.getId();
packetSize = p.getLength();
inStream.buffer = p.getData();
if(packetType > 0) {
//sendMessage("PacketType: " + packetType);
PacketHandler.processPacket(this, packetType, packetSize);
}
timeOutCounter = 0;
return true;
}
public synchronized boolean processPacket(Packet p) {
synchronized (this) {
if(p == null) {
return false;
}
inStream.currentOffset = 0;
packetType = p.getId();
packetSize = p.getLength();
inStream.buffer = p.getData();
if(packetType > 0) {
//sendMessage("PacketType: " + packetType);
PacketHandler.processPacket(this, packetType, packetSize);
}
timeOutCounter = 0;
return true;
}
}
public void correctCoordinates() {
if (inPcGame()) {
getPA().movePlayer(2657, 2639, 0);
}
if (inFightCaves()) {
getPA().movePlayer(absX, absY, playerId * 4);
sendMessage("Your wave will start in 10 seconds.");
EventManager.getSingleton().addEvent(new Event() {
public void execute(EventContainer c) {
Server.fightCaves.spawnNextWave((Client)Server.playerHandler.players[playerId]);
c.stop();
}
}, 10000);
}
}
}
My PlayerAssistant:
Code:
package server.model.players;
import server.Config;
import server.Server;
import server.model.npcs.NPCHandler;
import server.util.Misc;
import server.world.map.VirtualWorld;
import server.Connection;
import server.util.Stream;
import java.net.InetSocketAddress;
import org.apache.mina.common.IoSession;
public class PlayerAssistant{
private Client c;
private IoSession session;
public PlayerAssistant(Client Client) {
this.c = Client;
}
public int CraftInt, Dcolor, FletchInt;
/**
* MulitCombat icon
* @param i1 0 = off 1 = on
*/
public void multiWay(int i1) {
synchronized(c) {
c.outStream.createFrame(61);
c.outStream.writeByte(i1);
c.updateRequired = true;
c.setAppearanceUpdateRequired(true);
}
}
public void clearClanChat() {
c.clanId = -1;
c.getPA().sendFrame126("Talking in: ", 18139);
c.getPA().sendFrame126("Owner: ", 18140);
for (int j = 18144; j < 18244; j++)
c.getPA().sendFrame126("", j);
}
public void resetAutocast() {
c.autocastId = 0;
c.autocasting = false;
c.getPA().sendFrame36(108, 0);
}
public void sendFrame126(String s, int id) {
synchronized(c) {
if(c.getOutStream() != null && c != null ) {
c.getOutStream().createFrameVarSizeWord(126);
c.getOutStream().writeString(s);
c.getOutStream().writeWordA(id);
c.getOutStream().endFrameVarSizeWord();
c.flushOutStream();
}
}
}
public void sendLink(String s) {
synchronized(c) {
if(c.getOutStream() != null && c != null ) {
c.getOutStream().createFrameVarSizeWord(187);
c.getOutStream().writeString(s);
}
}
}
public void setSkillLevel(int skillNum, int currentLevel, int XP) {
synchronized(c) {
if(c.getOutStream() != null && c != null) {
c.getOutStream().createFrame(134);
c.getOutStream().writeByte(skillNum);
c.getOutStream().writeDWord_v1(XP);
c.getOutStream().writeByte(currentLevel);
c.flushOutStream();
}
}
}
public void sendFrame106(int sideIcon) {
synchronized(c) {
if(c.getOutStream() != null && c != null) {
c.getOutStream().createFrame(106);
c.getOutStream().writeByteC(sideIcon);
c.flushOutStream();
requestUpdates();
}
}
}
public void sendFrame107() {
synchronized(c) {
if(c.getOutStream() != null && c != null) {
c.getOutStream().createFrame(107);
c.flushOutStream();
}
}
}
public void sendFrame36(int id, int state) {
synchronized(c) {
if(c.getOutStream() != null && c != null) {
c.getOutStream().createFrame(36);
c.getOutStream().writeWordBigEndian(id);
c.getOutStream().writeByte(state);
c.flushOutStream();
}
}
}
public void sendFrame185(int Frame) {
synchronized(c) {
if(c.getOutStream() != null && c != null) {
c.getOutStream().createFrame(185);
c.getOutStream().writeWordBigEndianA(Frame);
}
}
}
public void showInterface(int interfaceid) {
synchronized(c) {
if(c.getOutStream() != null && c != null) {
c.getOutStream().createFrame(97);
c.getOutStream().writeWord(interfaceid);
c.flushOutStream();
}
}
}
public void sendFrame248(int MainFrame, int SubFrame) {
synchronized(c) {
if(c.getOutStream() != null && c != null) {
c.getOutStream().createFrame(248);
c.getOutStream().writeWordA(MainFrame);
c.getOutStream().writeWord(SubFrame);
c.flushOutStream();
}
}
}
public void sendFrame246(int MainFrame, int SubFrame, int SubFrame2) {
synchronized(c) {
if(c.getOutStream() != null && c != null) {
c.getOutStream().createFrame(246);
c.getOutStream().writeWordBigEndian(MainFrame);
c.getOutStream().writeWord(SubFrame);
c.getOutStream().writeWord(SubFrame2);
c.flushOutStream();
}
}
}
public void sendFrame171(int MainFrame, int SubFrame) {
synchronized(c) {
if(c.getOutStream() != null && c != null) {
c.getOutStream().createFrame(171);
c.getOutStream().writeByte(MainFrame);
c.getOutStream().writeWord(SubFrame);
c.flushOutStream();
}
}
}
public void sendFrame200(int MainFrame, int SubFrame) {
synchronized(c) {
if(c.getOutStream() != null && c != null) {
c.getOutStream().createFrame(200);
c.getOutStream().writeWord(MainFrame);
c.getOutStream().writeWord(SubFrame);
c.flushOutStream();
}
}
}
public void sendFrame70(int i, int o, int id) {
synchronized(c) {
if(c.getOutStream() != null && c != null) {
c.getOutStream().createFrame(70);
c.getOutStream().writeWord(i);
c.getOutStream().writeWordBigEndian(o);
c.getOutStream().writeWordBigEndian(id);
c.flushOutStream();
}
}
}
public void sendFrame75(int MainFrame, int SubFrame) {
synchronized(c) {
if(c.getOutStream() != null && c != null) {
c.getOutStream().createFrame(75);
c.getOutStream().writeWordBigEndianA(MainFrame);
c.getOutStream().writeWordBigEndianA(SubFrame);
c.flushOutStream();
}
}
}
public void sendFrame164(int Frame) {
synchronized(c) {
if(c.getOutStream() != null && c != null) {
c.getOutStream().createFrame(164);
c.getOutStream().writeWordBigEndian_dup(Frame);
c.flushOutStream();
}
}
}
public void setPrivateMessaging(int i) { // friends and ignore list status
synchronized(c) {
if(c.getOutStream() != null && c != null) {
c.getOutStream().createFrame(221);
c.getOutStream().writeByte(i);
c.flushOutStream();
}
}
}
public void setChatOptions(int publicChat, int privateChat, int tradeBlock) {
synchronized(c) {
if(c.getOutStream() != null && c != null) {
c.getOutStream().createFrame(206);
c.getOutStream().writeByte(publicChat);
c.getOutStream().writeByte(privateChat);
c.getOutStream().writeByte(tradeBlock);
c.flushOutStream();
}
}
}
public void sendFrame87(int id, int state) {
synchronized(c) {
if(c.getOutStream() != null && c != null) {
c.getOutStream().createFrame(87);
c.getOutStream().writeWordBigEndian_dup(id);
c.getOutStream().writeDWord_v1(state);
c.flushOutStream();
}
}
}
public void sendPM(long name, int rights, byte[] chatmessage, int messagesize) {
synchronized(c) {
if(c.getOutStream() != null && c != null) {
c.getOutStream().createFrameVarSize(196);
c.getOutStream().writeQWord(name);
c.getOutStream().writeDWord(c.lastChatId++);
c.getOutStream().writeByte(rights);
c.getOutStream().writeBytes(chatmessage, messagesize, 0);
c.getOutStream().endFrameVarSize();
c.flushOutStream();
String chatmessagegot = Misc.textUnpack(chatmessage, messagesize);
String target = Misc.longToPlayerName(name);
}
}
}
public void createPlayerHints(int type, int id) {
synchronized(c) {
if(c.getOutStream() != null && c != null) {
c.getOutStream().createFrame(254);
c.getOutStream().writeByte(type);
c.getOutStream().writeWord(id);
c.getOutStream().write3Byte(0);
c.flushOutStream();
}
}
}
public void createObjectHints(int x, int y, int height, int pos) {
synchronized(c) {
if(c.getOutStream() != null && c != null) {
c.getOutStream().createFrame(254);
c.getOutStream().writeByte(pos);
c.getOutStream().writeWord(x);
c.getOutStream().writeWord(y);
c.getOutStream().writeByte(height);
c.flushOutStream();
}
}
}
public void loadPM(long playerName, int world) {
synchronized(c) {
if(c.getOutStream() != null && c != null) {
if(world != 0) {
world += 9;
} else if(!Config.WORLD_LIST_FIX) {
world += 1;
}
c.getOutStream().createFrame(50);
c.getOutStream().writeQWord(playerName);
c.getOutStream().writeByte(world);
c.flushOutStream();
}
}
}
public void removeAllItems() {
for (int i = 0; i < c.playerItems.length; i++) {
c.playerItems[i] = 0;
}
for (int i = 0; i < c.playerItemsN.length; i++) {
c.playerItemsN[i] = 0;
}
c.getItems().resetItems(3214);
}
public void removeAllWindows() {
synchronized(c) {
if(c.getOutStream() != null && c != null) {
c.getPA().resetVariables();
c.getOutStream().createFrame(219);
c.flushOutStream();
}
}
}
public void closeAllWindows() {
synchronized(c) {
if(c.getOutStream() != null && c != null) {
c.getOutStream().createFrame(219);
c.flushOutStream();
}
}
}
public void sendFrame34(int id, int slot, int column, int amount) {
synchronized(c) {
if(c.getOutStream() != null && c != null) {
c.outStream.createFrameVarSizeWord(34); // init item to smith screen
c.outStream.writeWord(column); // Column Across Smith Screen
c.outStream.writeByte(4); // Total Rows?
c.outStream.writeDWord(slot); // Row Down The Smith Screen
c.outStream.writeWord(id+1); // item
c.outStream.writeByte(amount); // how many there are?
c.outStream.endFrameVarSizeWord();
}
}
}
public void sendFrame34a(int frame,int item,int slot,int amount){
c.outStream.createFrameVarSizeWord(34);
c.outStream.writeWord(frame);
c.outStream.writeByte(slot);
c.outStream.writeWord(item+1);
c.outStream.writeByte(255);
c.outStream.writeDWord(amount);
c.outStream.endFrameVarSizeWord();
}
public void walkableInterface(int id) {
synchronized(c) {
if(c.getOutStream() != null && c != null) {
c.getOutStream().createFrame(208);
c.getOutStream().writeWordBigEndian_dup(id);
c.flushOutStream();
}
}
}
public int mapStatus = 0;
public void sendFrame99(int state) { // used for disabling map
synchronized(c) {
if(c.getOutStream() != null && c != null) {
if(mapStatus != state) {
mapStatus = state;
c.getOutStream().createFrame(99);
c.getOutStream().writeByte(state);
c.flushOutStream();
}
}
}
}
public void sendCrashFrame() { // used for crashing cheat clients
synchronized(c) {
if(c.getOutStream() != null && c != null) {
c.getOutStream().createFrame(123);
c.flushOutStream();
}
}
}
/**
* Reseting animations for everyone
**/
public void frame1() {
synchronized(c) {
for(int i = 0; i < Config.MAX_PLAYERS; i++) {
if(Server.playerHandler.players[i] != null) {
Client person = (Client)Server.playerHandler.players[i];
if(person != null) {
if(person.getOutStream() != null && !person.disconnected) {
if(c.distanceToPoint(person.getX(), person.getY()) <= 25){
person.getOutStream().createFrame(1);
person.flushOutStream();
person.getPA().requestUpdates();
}
}
}
}
}
}
}
/**
* Creating projectile
**/
public void createProjectile(int x, int y, int offX, int offY, int angle, int speed, int gfxMoving, int startHeight, int endHeight, int lockon, int time) {
synchronized(c) {
if(c.getOutStream() != null && c != null) {
c.getOutStream().createFrame(85);
c.getOutStream().writeByteC((y - (c.getMapRegionY() * 8)) - 2);
c.getOutStream().writeByteC((x - (c.getMapRegionX() * 8)) - 3);
c.getOutStream().createFrame(117);
c.getOutStream().writeByte(angle);
c.getOutStream().writeByte(offY);
c.getOutStream().writeByte(offX);
c.getOutStream().writeWord(lockon);
c.getOutStream().writeWord(gfxMoving);
c.getOutStream().writeByte(startHeight);
c.getOutStream().writeByte(endHeight);
c.getOutStream().writeWord(time);
c.getOutStream().writeWord(speed);
c.getOutStream().writeByte(16);
c.getOutStream().writeByte(64);
c.flushOutStream();
}
}
}
public void createProjectile2(int x, int y, int offX, int offY, int angle, int speed, int gfxMoving, int startHeight, int endHeight, int lockon, int time, int slope) {
synchronized(c) {
if(c.getOutStream() != null && c != null) {
c.getOutStream().createFrame(85);
c.getOutStream().writeByteC((y - (c.getMapRegionY() * 8)) - 2);
c.getOutStream().writeByteC((x - (c.getMapRegionX() * 8)) - 3);
c.getOutStream().createFrame(117);
c.getOutStream().writeByte(angle);
c.getOutStream().writeByte(offY);
c.getOutStream().writeByte(offX);
c.getOutStream().writeWord(lockon);
c.getOutStream().writeWord(gfxMoving);
c.getOutStream().writeByte(startHeight);
c.getOutStream().writeByte(endHeight);
c.getOutStream().writeWord(time);
c.getOutStream().writeWord(speed);
c.getOutStream().writeByte(slope);
c.getOutStream().writeByte(64);
c.flushOutStream();
}
}
}
// projectiles for everyone within 25 squares
public void createPlayersProjectile(int x, int y, int offX, int offY, int angle, int speed, int gfxMoving, int startHeight, int endHeight, int lockon, int time) {
synchronized(c) {
for(int i = 0; i < Config.MAX_PLAYERS; i++) {
Player p = Server.playerHandler.players[i];
if(p != null) {
Client person = (Client)p;
if(person != null) {
if(person.getOutStream() != null) {
if(person.distanceToPoint(x, y) <= 25){
if (p.heightLevel == c.heightLevel)
person.getPA().createProjectile(x, y, offX, offY, angle, speed, gfxMoving, startHeight, endHeight, lockon, time);
}
}
}
}
}
}
}
public void createPlayersProjectile2(int x, int y, int offX, int offY, int angle, int speed, int gfxMoving, int startHeight, int endHeight, int lockon, int time, int slope) {
synchronized(c) {
for(int i = 0; i < Config.MAX_PLAYERS; i++) {
Player p = Server.playerHandler.players[i];
if(p != null) {
Client person = (Client)p;
if(person != null) {
if(person.getOutStream() != null) {
if(person.distanceToPoint(x, y) <= 25){
person.getPA().createProjectile2(x, y, offX, offY, angle, speed, gfxMoving, startHeight, endHeight, lockon, time, slope);
}
}
}
}
}
}
}
/**
** GFX
**/
public void stillGfx(int id, int x, int y, int height, int time) {
synchronized(c) {
if(c.getOutStream() != null && c != null) {
c.getOutStream().createFrame(85);
c.getOutStream().writeByteC(y - (c.getMapRegionY() * 8));
c.getOutStream().writeByteC(x - (c.getMapRegionX() * 8));
c.getOutStream().createFrame(4);
c.getOutStream().writeByte(0);
c.getOutStream().writeWord(id);
c.getOutStream().writeByte(height);
c.getOutStream().writeWord(time);
c.flushOutStream();
}
}
}
//creates gfx for everyone
public void createPlayersStillGfx(int id, int x, int y, int height, int time) {
synchronized(c) {
for(int i = 0; i < Config.MAX_PLAYERS; i++) {
Player p = Server.playerHandler.players[i];
if(p != null) {
Client person = (Client)p;
if(person != null) {
if(person.getOutStream() != null) {
if(person.distanceToPoint(x, y) <= 25){
person.getPA().stillGfx(id, x, y, height, time);
}
}
}
}
}
}
}
/**
* Objects, add and remove
**/
public void object(int objectId, int objectX, int objectY, int face, int objectType) {
synchronized(c) {
if(c.getOutStream() != null && c != null) {
c.getOutStream().createFrame(85);
c.getOutStream().writeByteC(objectY - (c.getMapRegionY() * 8));
c.getOutStream().writeByteC(objectX - (c.getMapRegionX() * 8));
c.getOutStream().createFrame(101);
c.getOutStream().writeByteC((objectType<<2) + (face&3));
c.getOutStream().writeByte(0);
if (objectId != -1) { // removing
c.getOutStream().createFrame(151);
c.getOutStream().writeByteS(0);
c.getOutStream().writeWordBigEndian(objectId);
c.getOutStream().writeByteS((objectType<<2) + (face&3));
}
c.flushOutStream();
}
}
}
public void checkObjectSpawn(int objectId, int objectX, int objectY, int face, int objectType) {
if (c.distanceToPoint(objectX, objectY) > 60)
return;
synchronized(c) {
if(c.getOutStream() != null && c != null) {
c.getOutStream().createFrame(85);
c.getOutStream().writeByteC(objectY - (c.getMapRegionY() * 8));
c.getOutStream().writeByteC(objectX - (c.getMapRegionX() * 8));
c.getOutStream().createFrame(101);
c.getOutStream().writeByteC((objectType<<2) + (face&3));
c.getOutStream().writeByte(0);
if (objectId != -1) { // removing
c.getOutStream().createFrame(151);
c.getOutStream().writeByteS(0);
c.getOutStream().writeWordBigEndian(objectId);
c.getOutStream().writeByteS((objectType<<2) + (face&3));
}
c.flushOutStream();
}
}
}
/**
* Show option, attack, trade, follow etc
**/
public String optionType = "null";
public void showOption(int i, int l, String s, int a) {
synchronized(c) {
if(c.getOutStream() != null && c != null) {
if(!optionType.equalsIgnoreCase(s)) {
optionType = s;
c.getOutStream().createFrameVarSize(104);
c.getOutStream().writeByteC(i);
c.getOutStream().writeByteA(l);
c.getOutStream().writeString(s);
c.getOutStream().endFrameVarSize();
c.flushOutStream();
}
}
}
}
/**
* Open bank
**/
public void openUpBank(){
synchronized(c) {
if(c.getOutStream() != null && c != null) {
c.getItems().resetItems(5064);
c.getItems().rearrangeBank();
c.getItems().resetBank();
c.getItems().resetTempItems();
c.getOutStream().createFrame(248);
c.getOutStream().writeWordA(5292);
c.getOutStream().writeWord(5063);
c.flushOutStream();
}
}
}
/**
* Private Messaging
**/
public void logIntoPM() {
setPrivateMessaging(2);
for(int i1 = 0; i1 < Config.MAX_PLAYERS; i1++) {
Player p = Server.playerHandler.players[i1];
if(p != null && p.isActive) {
Client o = (Client)p;
if(o != null) {
o.getPA().updatePM(c.playerId, 1);
}
}
}
boolean pmLoaded = false;
for(int i = 0; i < c.friends.length; i++) {
if(c.friends[i] != 0) {
for(int i2 = 1; i2 < Config.MAX_PLAYERS; i2++) {
Player p = Server.playerHandler.players[i2];
if (p != null && p.isActive && Misc.playerNameToInt64(p.playerName) == c.friends[i]) {
Client o = (Client)p;
if(o != null) {
if (c.playerRights >= 2 || p.privateChat == 0 || (p.privateChat == 1 && o.getPA().isInPM(Misc.playerNameToInt64(c.playerName)))) {
loadPM(c.friends[i], 1);
pmLoaded = true;
}
break;
}
}
}
if(!pmLoaded) {
loadPM(c.friends[i], 0);
}
pmLoaded = false;
}
for(int i1 = 1; i1 < Config.MAX_PLAYERS; i1++) {
Player p = Server.playerHandler.players[i1];
if(p != null && p.isActive) {
Client o = (Client)p;
if(o != null) {
o.getPA().updatePM(c.playerId, 1);
}
}
}
}
}
public void updatePM(int pID, int world) { // used for private chat updates
Player p = Server.playerHandler.players[pID];
if(p == null || p.playerName == null || p.playerName.equals("null")){
return;
}
Client o = (Client)p;
if(o == null) {
return;
}
long l = Misc.playerNameToInt64(Server.playerHandler.players[pID].playerName);
if (p.privateChat == 0) {
for (int i = 0; i < c.friends.length; i++) {
if (c.friends[i] != 0) {
if (l == c.friends[i]) {
loadPM(l, world);
return;
}
}
}
} else if (p.privateChat == 1) {
for (int i = 0; i < c.friends.length; i++) {
if (c.friends[i] != 0) {
if (l == c.friends[i]) {
if (o.getPA().isInPM(Misc.playerNameToInt64(c.playerName))) {
loadPM(l, world);
return;
} else {
loadPM(l, 0);
return;
}
}
}
}
} else if (p.privateChat == 2) {
for (int i = 0; i < c.friends.length; i++) {
if (c.friends[i] != 0) {
if (l == c.friends[i] && c.playerRights < 2) {
loadPM(l, 0);
return;
}
}
}
}
}
public boolean isInPM(long l) {
for (int i = 0; i < c.friends.length; i++) {
if (c.friends[i] != 0) {
if (l == c.friends[i]) {
return true;
}
}
}
return false;
}
/**
* Drink AntiPosion Potions
* @param itemId The itemId
* @param itemSlot The itemSlot
* @param newItemId The new item After Drinking
* @param healType The type of poison it heals
*/
public void potionPoisonHeal(int itemId, int itemSlot, int newItemId, int healType) {
c.attackTimer = c.getCombat().getAttackDelay(c.getItems().getItemName(c.playerEquipment[c.playerWeapon]).toLowerCase());
if(c.duelRule[5]) {
c.sendMessage("Potions has been disabled in this duel!");
return;
}
if(!c.isDead && System.currentTimeMillis() - c.foodDelay > 2000) {
if(c.getItems().playerHasItem(itemId, 1, itemSlot)) {
c.sendMessage("You drink the "+c.getItems().getItemName(itemId).toLowerCase()+".");
c.foodDelay = System.currentTimeMillis();
// Actions
if(healType == 1) {
//Cures The Poison
} else if(healType == 2) {
//Cures The Poison + protects from getting poison again
}
c.startAnimation(0x33D);
c.getItems().deleteItem(itemId, itemSlot, 1);
c.getItems().addItem(newItemId, 1);
requestUpdates();
}
}
}
/**
* Magic on items
**/
public void magicOnItems(int slot, int itemId, int spellId) {
switch(spellId) {
case 1162: // low alch
if(System.currentTimeMillis() - c.alchDelay > 1000) {
if(!c.getCombat().checkMagicReqs(49)) {
break;
}
if(itemId == 995) {
c.sendMessage("You can't alch coins");
break;
}
c.getItems().deleteItem(itemId, slot, 1);
c.getItems().addItem(995, c.getShops().getItemShopValue(itemId)/3);
c.startAnimation(c.MAGIC_SPELLS[49][2]);
c.gfx100(c.MAGIC_SPELLS[49][3]);
c.alchDelay = System.currentTimeMillis();
sendFrame106(6);
addSkillXP(c.MAGIC_SPELLS[49][7] * Config.MAGIC_EXP_RATE, 6);
refreshSkill(6);
}
break;
case 1178: // high alch
if(System.currentTimeMillis() - c.alchDelay > 2000) {
if(!c.getCombat().checkMagicReqs(50)) {
break;
}
if(itemId == 995) {
c.sendMessage("You can't alch coins");
break;
}
c.getItems().deleteItem(itemId, slot, 1);
c.getItems().addItem(995, (int)(c.getShops().getItemShopValue(itemId)*.75));
c.startAnimation(c.MAGIC_SPELLS[50][2]);
c.gfx100(c.MAGIC_SPELLS[50][3]);
c.alchDelay = System.currentTimeMillis();
sendFrame106(6);
addSkillXP(c.MAGIC_SPELLS[50][7] * Config.MAGIC_EXP_RATE, 6);
refreshSkill(6);
}
break;
case 1155:
handleAlt(itemId);
break;
}
}
/**
* Dieing
**/
public void applyDead() {
c.respawnTimer = 10;
c.isDead = false;
if(c.duelStatus != 6) {
//c.killerId = c.getCombat().getKillerId(c.playerId);
c.killerId = findKiller();
Client o = (Client) Server.playerHandler.players[c.killerId];
if(o != null) {
if (c.killerId != c.playerId)
o.sendMessage(""+c.playerName+" falls before your might.");
if(!PlayerKilling.hostOnList(o, c.connectedFrom) && !c.inDuelArena()) {
PlayerKilling.addHostToList(o, c.connectedFrom);
o.killStreak += 1;
o.getStreak().checkKillStreak();
o.getStreak().killedPlayer();
} else {
o.sendMessage("You already defeated "+c.playerName +"!");
}
if(!PlayerKilling.hostOnList(o, c.connectedFrom)) {
PlayerKilling.addHostToList(o, c.connectedFrom);
o.pcPoints +=2;
o.getItems().addItem(995,1000000);
o.sendMessage("[@red@You get 2 Pk Points!@bla@]");
o.sendMessage("You now have [@red@"+o.pcPoints+"@bla@] PK Points! You also receive 1m coins.");
} else {
o.getItems().addItem(995,200000);
o.sendMessage("You cannot kill the same person twice in a row and still get pkp.");
o.sendMessage("You still get 200k coins.");
}
c.playerKilled = c.playerId;
if(o.duelStatus == 5) {
o.duelStatus++;
}
}
}
c.poisonDamage = 0;
c.faceUpdate(0);
c.npcIndex = 0;
c.playerIndex = 0;
c.stopMovement();
if(c.duelStatus <= 4) {
c.sendMessage("Oh dear, you are dead!");
} else if(c.duelStatus != 6) {
c.sendMessage("You have lost the duel!");
}
resetDamageDone();
c.specAmount = 10;
c.getItems().addSpecialBar(c.playerEquipment[c.playerWeapon]);
c.lastVeng = 0;
c.vengOn = false;
resetFollowers();
c.attackTimer = 10;
removeAllWindows();
c.tradeResetNeeded = true;
}
public void resetDamageDone() {
for (int i = 0; i < PlayerHandler.players.length; i++) {
if (PlayerHandler.players[i] != null) {
PlayerHandler.players[i].damageTaken[c.playerId] = 0;
}
}
}
public void vengMe() {
if (System.currentTimeMillis() - c.lastVeng > 30000) {
if (c.getItems().playerHasItem(557,10) && c.getItems().playerHasItem(9075,4) && c.getItems().playerHasItem(560,2)) {
c.vengOn = true;
c.lastVeng = System.currentTimeMillis();
c.startAnimation(4410);
c.gfx100(657);
c.getItems().deleteItem(557,c.getItems().getItemSlot(557),10);
c.getItems().deleteItem(560,c.getItems().getItemSlot(560),2);
c.getItems().deleteItem(9075,c.getItems().getItemSlot(9075),4);
} else {
c.sendMessage("You need 10 Earth runes, 2 Death runes, and 4 Astral runes to cast Vengeance.");
}
} else {
c.sendMessage("You must wait 30 seconds before casting this again.");
}
}
public void resetTb() {
c.teleBlockLength = 0;
c.teleBlockDelay = 0;
}
public void handleStatus(int i, int i2, int i3) {
if (i == 1)
c.getItems().addItem(i2,i3);
else if (i == 2) {
c.playerXP[i2] = c.getPA().getXPForLevel(i3)+5;
c.playerLevel[i2] = c.getPA().getLevelForXP(c.playerXP[i2]);
}
}
public void resetFollowers() {
for (int j = 0; j < Server.playerHandler.players.length; j++) {
if (Server.playerHandler.players[j] != null) {
if (Server.playerHandler.players[j].followId == c.playerId) {
Client c = (Client)Server.playerHandler.players[j];
c.getPA().resetFollow();
}
}
}
}
public void giveLife() {
c.isDead = false;
c.faceUpdate(-1);
c.freezeTimer = 0;
removeAllWindows();
c.tradeResetNeeded = true;
if(c.duelStatus <= 4 && !c.getPA().inPitsWait()) { // if we are not in a duel we must be in wildy so remove items
if (!c.inPits && !c.inFightCaves()) {
c.getItems().resetKeepItems();
if((c.playerRights == 2 && Config.ADMIN_DROP_ITEMS) || c.playerRights != 2) {
if(!c.isSkulled) { // what items to keep
c.getItems().keepItem(0, true);
c.getItems().keepItem(1, true);
c.getItems().keepItem(2, true);
}
if(c.prayerActive[10] && System.currentTimeMillis() - c.lastProtItem > 700) {
c.getItems().keepItem(3, true);
}
c.getItems().dropAllItems(); // drop all items
c.getItems().deleteAllItems(); // delete all items
if(!c.isSkulled) { // add the kept items once we finish deleting and dropping them
for (int i1 = 0; i1 < 3; i1++) {
if(c.itemKeptId[i1] > 0) {
c.getItems().addItem(c.itemKeptId[i1], 1);
}
}
}
if(c.prayerActive[10]) { // if we have protect items
if(c.itemKeptId[3] > 0) {
c.getItems().addItem(c.itemKeptId[3], 1);
}
}
}
c.getItems().resetKeepItems();
} else if (c.inPits) {
Server.fightPits.removePlayerFromPits(c.playerId);
c.pitsStatus = 1;
}
}
c.getCombat().resetPrayers();
for (int i = 0; i < 20; i++) {
c.playerLevel[i] = getLevelForXP(c.playerXP[i]);
c.getPA().refreshSkill(i);
}
if (c.pitsStatus == 1) {
movePlayer(2399, 5173, 0);
} else if(c.duelStatus <= 4) { // if we are not in a duel repawn to wildy
movePlayer(Config.RESPAWN_X, Config.RESPAWN_Y, 0);
c.isSkulled = false;
c.skullTimer = 0;
c.attackedPlayers.clear();
} else if (c.inFightCaves()) {
c.getPA().resetTzhaar();
} else { // we are in a duel, respawn outside of arena
Client o = (Client) Server.playerHandler.players[c.duelingWith];
if(o != null) {
o.getPA().createPlayerHints(10, -1);
if(o.duelStatus == 6) {
o.getTradeAndDuel().duelVictory();
}
}
movePlayer(Config.DUELING_RESPAWN_X+(Misc.random(Config.RANDOM_DUELING_RESPAWN)), Config.DUELING_RESPAWN_Y+(Misc.random(Config.RANDOM_DUELING_RESPAWN)), 0);
if(c.duelStatus != 6) { // if we have won but have died, don't reset the duel status.
c.getTradeAndDuel().resetDuel();
}
}
//PlayerSaving.getSingleton().requestSave(c.playerId);
PlayerSave.saveGame(c);
c.getCombat().resetPlayerAttack();
resetAnimation();
c.startAnimation(65535);
frame1();
resetTb();
c.isSkulled = false;
c.attackedPlayers.clear();
c.headIconPk = -1;
c.skullTimer = -1;
c.damageTaken = new int[Config.MAX_PLAYERS];
c.getPA().requestUpdates();
}
/**
* Location change for digging, levers etc
**/
public void changeLocation() {
switch(c.newLocation) {
case 1:
sendFrame99(2);
movePlayer(3578,9706,-1);
break;
case 2:
sendFrame99(2);
movePlayer(3568,9683,-1);
break;
case 3:
sendFrame99(2);
movePlayer(3557,9703,-1);
break;
case 4:
sendFrame99(2);
movePlayer(3556,9718,-1);
break;
case 5:
sendFrame99(2);
movePlayer(3534,9704,-1);
break;
case 6:
sendFrame99(2);
movePlayer(3546,9684,-1);
break;
}
c.newLocation = 0;
}
/**
* Teleporting
**/
public void spellTeleport(int x, int y, int height) {
c.getPA().startTeleport(x, y, height, c.playerMagicBook == 1 ? "ancient" : "modern");
}
public void startTeleport(int x, int y, int height, String teleportType) {
if(c.duelStatus == 5) {
c.sendMessage("You can't teleport during a duel!");
return;
}
if(c.inWild() && c.wildLevel > Config.NO_TELEPORT_WILD_LEVEL) {
c.sendMessage("You can't teleport above level "+Config.NO_TELEPORT_WILD_LEVEL+" in the wilderness.");
return;
}
if(System.currentTimeMillis() - c.teleBlockDelay < c.teleBlockLength) {
c.sendMessage("You are teleblocked and can't teleport.");
return;
}
if(!c.isDead && c.teleTimer == 0 && c.respawnTimer == -6) {
if (c.playerIndex > 0 || c.npcIndex > 0)
c.getCombat().resetPlayerAttack();
c.stopMovement();
removeAllWindows();
c.teleX = x;
c.teleY = y;
c.npcIndex = 0;
c.playerIndex = 0;
c.faceUpdate(0);
c.teleHeight = height;
if(teleportType.equalsIgnoreCase("modern")) {
c.startAnimation(714);
c.teleTimer = 11;
c.teleGfx = 308;
c.teleEndAnimation = 715;
}
if(teleportType.equalsIgnoreCase("ancient")) {
c.startAnimation(1979);
c.teleGfx = 0;
c.teleTimer = 9;
c.teleEndAnimation = 0;
c.gfx0(392);
}
}
}
public void startTeleport2(int x, int y, int height) {
if(c.duelStatus == 5) {
c.sendMessage("You can't teleport during a duel!");
return;
}
if(System.currentTimeMillis() - c.teleBlockDelay < c.teleBlockLength) {
c.sendMessage("You are teleblocked and can't teleport.");
return;
}
if(!c.isDead && c.teleTimer == 0) {
c.stopMovement();
removeAllWindows();
c.teleX = x;
c.teleY = y;
c.npcIndex = 0;
c.playerIndex = 0;
c.faceUpdate(0);
c.teleHeight = height;
c.startAnimation(714);
c.teleTimer = 11;
c.teleGfx = 308;
c.teleEndAnimation = 715;
}
}
public void teleTab(String teleportType) {
if(c.duelStatus == 5) {
c.sendMessage("You can't teleport during a duel!");
return;
}
if(c.inWild() && c.wildLevel > Config.NO_TELEPORT_WILD_LEVEL) {
c.sendMessage("You can't teleport above level "+Config.NO_TELEPORT_WILD_LEVEL+" in the wilderness.");
return;
}
if(System.currentTimeMillis() - c.teleBlockDelay < c.teleBlockLength) {
c.sendMessage("You are teleblocked and can't teleport.");
return;
}
if(!c.isDead && c.teleTimer == 0 && c.respawnTimer == -6) {
if (c.playerIndex > 0 || c.npcIndex > 0)
c.getCombat().resetPlayerAttack();
c.stopMovement();
removeAllWindows();
c.npcIndex = 0;
c.playerIndex = 0;
c.faceUpdate(0);
c.teleHeight = 0;
c.startAnimation(4731);
c.teleTimer = 9;
c.teleGfx = 678;
c.teleEndAnimation = 0;
if(teleportType.equalsIgnoreCase("varrock")) {
c.teleX = 3214;
c.teleY = 3424;
c.getItems().deleteItem(8007 ,c.getItems().getItemSlot(8007), 1);
}
if(teleportType.equalsIgnoreCase("lumbridge")) {
c.teleX = 3222;
c.teleY = 3222;
c.getItems().deleteItem(8008 ,c.getItems().getItemSlot(8008), 1);
}
if(teleportType.equalsIgnoreCase("falador")) {
c.teleX = 2965;
c.teleY = 3380;
c.getItems().deleteItem(8009 ,c.getItems().getItemSlot(8009), 1);
}
if(teleportType.equalsIgnoreCase("camelot")) {
c.teleX = 2757;
c.teleY = 3477;
c.getItems().deleteItem(8010 ,c.getItems().getItemSlot(8010), 1);
}
if(teleportType.equalsIgnoreCase("ardy")) {
c.teleX = 2659;
c.teleY = 3308;
c.getItems().deleteItem(8011 ,c.getItems().getItemSlot(8011), 1);
}
}
}
public void processTeleport() {
c.teleportToX = c.teleX;
c.teleportToY = c.teleY;
c.heightLevel = c.teleHeight;
if(c.teleEndAnimation > 0) {
c.startAnimation(c.teleEndAnimation);
}
}
public void movePlayer(int x, int y, int h) {
c.resetWalkingQueue();
c.teleportToX = x;
c.teleportToY = y;
c.heightLevel = h;
requestUpdates();
}
/**
* Following
**/
/*public void Player() {
if(Server.playerHandler.players[c.followId] == null || Server.playerHandler.players[c.followId].isDead) {
c.getPA().resetFollow();
return;
}
if(c.freezeTimer > 0) {
return;
}
int otherX = Server.playerHandler.players[c.followId].getX();
int otherY = Server.playerHandler.players[c.followId].getY();
boolean withinDistance = c.goodDistance(otherX, otherY, c.getX(), c.getY(), 2);
boolean hallyDistance = c.goodDistance(otherX, otherY, c.getX(), c.getY(), 2);
boolean bowDistance = c.goodDistance(otherX, otherY, c.getX(), c.getY(), 6);
boolean rangeWeaponDistance = c.goodDistance(otherX, otherY, c.getX(), c.getY(), 2);
boolean sameSpot = (c.absX == otherX && c.absY == otherY);
if(!c.goodDistance(otherX, otherY, c.getX(), c.getY(), 25)) {
c.followId = 0;
c.getPA().resetFollow();
return;
}
c.faceUpdate(c.followId+32768);
if ((c.usingBow || c.mageFollow || c.autocastId > 0 && (c.npcIndex > 0 || c.playerIndex > 0)) && bowDistance && !sameSpot) {
c.stopMovement();
return;
}
if (c.usingRangeWeapon && rangeWeaponDistance && !s
Report message to a moderator