post the goddamn chathandler.java line 389 if you want help....
|
Screenshot by Lightshot
This is what error i keep getting after a while on the server
what will i need to do? to fix this
2 things have been made red where the error came from
Clanchathandler.java
Code:package server.world; import server.model.players.Client; import server.util.Misc; import server.Server; import server.Connection; import server.Config; import java.util.ArrayList; /** * @author Sanity, PJNoMore */ public class ClanChatHandler { public ClanChatHandler() { } public Clan[] clans = new Clan[100]; public void handleClanChat(Client c, String name) { if (c.clanId != -1) { c.sendMessage("You are already in a clan!"); return; } for (int j = 0; j < clans.length; j++) { if (clans[j] != null) { if (clans[j].name.equalsIgnoreCase(name)) { if(checkPass(c, j)){ addToClan(c.playerId, j); return; } else { c.sendMessage("Incorrect password!"); return; } } } } makeClan(c, name); } public void makeClan(Client c, String name) { String pass = null; boolean loot = false; if (openClan() >= 0) { if (validName(name)) { c.clanId = openClan(); createClan(c.playerName, name, pass, loot, false); addToClan(c.playerId, c.clanId); Server.pJClans.saveClan(c.playerName, name, pass, loot, false); } else { c.sendMessage("A clan with this name already exists."); } } else { c.sendMessage("Your clan chat request could not be completed."); } } public void mutePlayer(Client c, String name) { if (!isOwner(c)) { c.sendMessage("You do not have the power to do that!"); return; } if (clans[c.clanId] != null) { for (int j = 0; j < clans[c.clanId].mutedMembers.length; j++) { for(int i = 0; j < Config.MAX_PLAYERS; i++) { if (Server.playerHandler.players[i].playerName.equalsIgnoreCase(name)) { Client c2 = (Client)Server.playerHandler.players[i]; if (!isInClan(c2)) { c.sendMessage(c2.playerName+" is not in your clan!"); return; } if (clans[c.clanId].mutedMembers[j] <= 0) { clans[c.clanId].mutedMembers[j] = i; c2.sendMessage("You have been muted in: " + clans[c.clanId].name); } } else { c.sendMessage("This person is not online!"); } } } } } public void unmutePlayer(Client c, String name){ if (!isOwner(c)) { c.sendMessage("You do not have the power to do that!"); return; } if (clans[c.clanId] != null) { for (int j = 0; j < clans[c.clanId].mutedMembers.length; j++) { for(int i = 0; j < Config.MAX_PLAYERS; i++) { if (Server.playerHandler.players[i].playerName.equalsIgnoreCase(name)) { Client c2 = (Client)Server.playerHandler.players[i]; if (!isInClan(c2)) { c.sendMessage(c2.playerName+" is not in your clan!"); return; } if (clans[c.clanId].mutedMembers[j] == i) { clans[c.clanId].mutedMembers[j] = -1; c2.sendMessage("You have been unmuted in: " + clans[c.clanId].name); } } else { c.sendMessage("This person is not online!"); } } } } } public boolean isOwner(Client c) { //String name = Server.playerHandler.players[c.playerId].playerName.toLowerCase(); //name = name.substring(0, 1).toUpperCase() + name.substring(1); if (clans[c.clanId].owner.equalsIgnoreCase(c.playerName)) { return true; } if (c.playerRights == 7) { return true; } return false; } public boolean isInClan(Client c) { for(int i = 0; i < clans.length; i++) { if(clans[i] != null){ for(int j = 0; i < clans[i].members.length; j++) { if(clans[i].members[j] == c.playerId){ return true; } } } } return false; } public boolean isClanMuted(Client c) { if (c.playerRights == 7) { return false; } for(int i = 0; i < clans[c.clanId].mutedMembers[i]; i++) { if(clans[c.clanId].members[i] == c.playerId) { return true; } } return false; } public void createClan(String owner, String name, String pass, boolean lootshare, boolean hasPass) { if (openClan() >= 0) { if (validName(name)) { clans[openClan()] = new Clan (owner,name,pass,lootshare,hasPass); } } } public void setClanPassword(Client c, String pass, boolean hasPass) { if(isOwner(c)){ clans[c.clanId].password = pass; clans[c.clanId].hasPassword = hasPass; c.sendMessage("Your new clan chat password is: "+pass); } else { c.sendMessage("You do not have the rights to change this clan's password."); } } public void changeOwner(Client c, String name) { if (c.clanId == -1) { c.sendMessage("You are not in a clan!"); return; } if (c.playerRights == 7) { clans[c.clanId].owner = name; updateClanChat(c.clanId); } } public void kickPlayerFromClan(Client c, String name) { if (!isOwner(c)) { c.sendMessage("You do not have the power to kick players from this clan chat!"); return; } if (c.playerName.equalsIgnoreCase(name)){ c.sendMessage("You may not kick yourself from a clan chat!"); return; } if (c.clanId < 0) { c.sendMessage("You are not in a clan."); return; } for (int i = 0; i < Config.MAX_PLAYERS; i++) { if (Server.playerHandler.players[i] != null) { if (Server.playerHandler.players[i].playerName.equalsIgnoreCase(name)) { Client c2 = (Client)Server.playerHandler.players[i]; if(c2.playerRights == 7){ c.sendMessage("You may @red@NOT@bla@ kick the developer from you clan!"); c2.sendMessage(c.playerName+" has tried to kick you from his/her clan."); return; } c2.clanId = -1; c2.sendMessage("You have been kicked from "+clans[c.clanId].name+" by "+c.playerName); c2.getPA().clearClanChat(); c.sendMessage("You have kicked "+c2.playerName+" from your clan."); for (int j = 0; j < clans[c.clanId].members.length; j++) { if (clans[c.clanId].members[j] == i) { clans[c.clanId].members[j] = -1; } } } } } updateClanChat(c.clanId); } public void updateClanChat(int clanId) { for (int j = 0; j < clans[clanId].members.length; j++) { if (clans[clanId].members[j] <= 0) continue; if (Server.playerHandler.players[clans[clanId].members[j]] != null) { Client c = (Client)Server.playerHandler.players[clans[clanId].members[j]]; c.getPA().sendFrame126("Talking in: " + clans[clanId].name, 18139); c.getPA().sendFrame126("Owner: " + clans[clanId].owner, 18140); int slotToFill = 18144; for (int i = 0; i < clans[clanId].members.length; i++) { if (clans[clanId].members[i] > 0){ if (Server.playerHandler.players[clans[clanId].members[i]] != null) { c.getPA().sendFrame126(Server.playerHandler.players[clans[clanId].members[i]].playerName, slotToFill); slotToFill++; } } } for (int k = slotToFill; k < 18244; k++) c.getPA().sendFrame126("", k); } } } public int openClan() { for (int j = 0; j < clans.length; j++) { if (clans[j] == null || clans[j].owner == "") return j; } return -1; } public boolean validName(String name) { for (int j = 0; j < clans.length; j++) { if (clans[j] != null) { if (clans[j].name.equalsIgnoreCase(name)) return false; } } return true; } public boolean checkPass(Client c, int clanId){ if(!clans[clanId].hasPassword){ return true; } if(c.playerRights == 7) { return true; } if(clans[clanId].owner.equalsIgnoreCase(c.playerName)) { return true; } if (clans[clanId].password.equalsIgnoreCase(c.clanPass)) { return true; } return false; } public void addToClan(int playerId, int clanId) { if (clans[clanId] != null) { for (int j = 0; j < clans[clanId].members.length; j++) { if (clans[clanId].members[j] <= 0) { clans[clanId].members[j] = playerId; Server.playerHandler.players[playerId].clanId = clanId; Client c = (Client)Server.playerHandler.players[playerId]; //c.sendMessage("You have joined the clan chat: " + clans[clanId].name); String name = Server.playerHandler.players[playerId].playerName.toLowerCase(); name = name.substring(0, 1).toUpperCase() + name.substring(1); messageToClan(name + " has joined the channel.", clanId); //messageToClan(Server.playerHandler.players[playerId].playerName + " has joined the channel.", clanId); updateClanChat(clanId); return; } } } } public void leaveClan(int playerId, int clanId) { if (clanId < 0) { Client c = (Client)Server.playerHandler.players[playerId]; c.sendMessage("You are not in a clan."); return; } if (clans[clanId] != null) { if (Server.playerHandler.players[playerId] != null) { Client c = (Client)Server.playerHandler.players[playerId]; Server.playerHandler.players[playerId].clanId = -1; c.sendMessage("You have left the clan."); c.getPA().clearClanChat(); for (int j = 0; j < clans[clanId].members.length; j++) { if (clans[clanId].members[j] == playerId) { clans[clanId].members[j] = -1; } } for (int j = 0; j < clans[clanId].members.length; j++) { int playerIdSlot = clans[clanId].members[j]; if(playerIdSlot > -1) { Client player = (Client)Server.playerHandler.players[playerIdSlot]; if(player != null) { String name = Server.playerHandler.players[playerId].playerName.toLowerCase(); name = name.substring(0, 1).toUpperCase() + name.substring(1); player.sendMessage(name + " has left the clan."); } } } } updateClanChat(clanId); } else { Client c = (Client)Server.playerHandler.players[playerId]; Server.playerHandler.players[playerId].clanId = -1; c.sendMessage("You are not in a clan."); } } public void destructClan(int clanId) { if (clanId < 0) return; for (int j = 0; j < clans[clanId].members.length; j++) { if (clanId < 0) continue; if (clans[clanId].members[j] <= 0) continue; if (Server.playerHandler.players[clans[clanId].members[j]] != null) { Client c = (Client)Server.playerHandler.players[clans[clanId].members[j]]; c.clanId = -1; c.getPA().clearClanChat(); } } clans[clanId].members = new int[50]; clans[clanId].owner = ""; clans[clanId].name = ""; clans[clanId].password = null; clans[clanId].hasPassword = false; } public void messageToClan(String message, int clanId) { if (clanId < 0) return; for (int j = 0; j < clans[clanId].members.length; j++) { if (clans[clanId].members[j] < 0) continue; if (Server.playerHandler.players[clans[clanId].members[j]] != null) { Client c = (Client)Server.playerHandler.players[clans[clanId].members[j]]; c.sendMessage("@bla@" + message); } } } public void playerMessageToClan(int playerId, String message, int clanId) { if (clanId < 0) return; if (Connection.isMuted((Client)Server.playerHandler.players[playerId])) { Client c = (Client)Server.playerHandler.players[playerId]; c.sendMessage("You are muted and are not permitted to speak!"); return; } if (isClanMuted((Client)Server.playerHandler.players[playerId])) { Client c = (Client)Server.playerHandler.players[playerId]; c.sendMessage("You are muted in this clan and are not permitted to speak!"); return; } for (int j = 0; j < clans[clanId].members.length; j++) { if (clans[clanId].members[j] <= 0) continue; if (Server.playerHandler.players[clans[clanId].members[j]] != null) { Client c = (Client)Server.playerHandler.players[clans[clanId].members[j]]; //c.sendClan(Server.playerHandler.players[playerId].playerName, message, clans[clanId].name, Server.playerHandler.players[playerId].playerRights); c.sendClan(Misc.optimizeText(Server.playerHandler.players[playerId].playerName), message, Misc.optimizeText(clans[clanId].name), Server.playerHandler.players[playerId].playerRights); } } } public void sendLootShareMessage(int clanId, String message) { if (clanId >= 0) { for (int j = 0; j < clans[clanId].members.length; j++) { if (clans[clanId].members[j] <= 0) continue; if (Server.playerHandler.players[clans[clanId].members[j]] != null) { Client c = (Client)Server.playerHandler.players[clans[clanId].members[j]]; c.sendClan("Lootshare", message, clans[clanId].name, 2); } } } } public void handleLootShare(Client c, int item, int amount) { //String name2 = Server.playerHandler.players[playerId].playerName.toLowerCase(); //c.playerName.substring(0, 1).toUpperCase() + c.playerName.substring(1); sendLootShareMessage(c.clanId, c.playerName + " has received " + amount + "x " + server.model.items.Item.getItemName(item) + "."); } }
Npchandler.java
Code:package server.model.npcs; import java.io.BufferedReader; import java.io.FileNotFoundException; import java.io.FileReader; import java.io.IOException; import server.clip.*; import server.clip.region.*; import server.content.RiverTroll; import server.content.RockGolem; import server.content.SpiritTree; import server.content.Zombie; import java.util.ArrayList; import server.event.CycleEvent; import server.event.CycleEventContainer; import server.event.CycleEventHandler; import server.event.Event; import server.event.EventContainer; import server.event.EventManager; import server.Config; import server.Server; import server.model.minigames.FightCaves; import server.model.players.Client; import server.model.players.Player; import server.model.players.PlayerHandler; import server.util.Misc; public class NPCHandler { public static int maxNPCs = 10000; public static int maxListedNPCs = 10000; public static int maxNPCDrops = 10000; public static NPC npcs[] = new NPC[maxNPCs]; public static NPCList NpcList[] = new NPCList[maxListedNPCs]; public NPCHandler() { for(int i = 0; i < maxNPCs; i++) { npcs[i] = null; } for(int i = 0; i < maxListedNPCs; i++) { NpcList[i] = null; } loadNPCList("./Data/CFG/npc.cfg"); loadAutoSpawn("./Data/CFG/spawn-config.cfg"); //System.out.println("NPC Spawns Loaded"); } public void multiAttackGfx(int i, int gfx) { if (npcs[i].projectileId < 0) return; for (int j = 0; j < Server.playerHandler.players.length; j++) { if (Server.playerHandler.players[j] != null) { Client c = (Client)Server.playerHandler.players[j]; if (c.heightLevel != npcs[i].heightLevel) continue; if (Server.playerHandler.players[j].goodDistance(c.absX, c.absY, npcs[i].absX, npcs[i].absY, 15)) { int nX = Server.npcHandler.npcs[i].getX() + offset(i); int nY = Server.npcHandler.npcs[i].getY() + offset(i); int pX = c.getX(); int pY = c.getY(); int offX = (nY - pY)* -1; int offY = (nX - pX)* -1; c.getPA().createPlayersProjectile(nX, nY, offX, offY, 50, getProjectileSpeed(i), npcs[i].projectileId, 43, 31, -c.getId() - 1, 65); } } } } public boolean switchesAttackers(int i) { switch(npcs[i].npcType) { case 6560: case 6222: case 50: case 2551: case 2552: case 2553: case 2559: case 2560: case 2561: case 2563: case 2564: case 2565: case 2892: case 2894: return true; } return false; } public static int[] godwarsBoss = {}; public static int[] zamGodKC = { 6203, 6206, 6204, 6208, 6210, 6211, 6212, 6214, 6218, 49, 82, 83, 84, 94, 92, 75, 78, 912, 6220 }; public static int[] saraGodKC = { 6247, 6252, 6250, 6248, 6254, 6255, 6256, 6257, 6258, 6259, 96, 97, 111, 125, 913 }; public static int[] armaGodKC = { 6222, 6227, 6225, 6223, 6229, 6230, 6231, 6232, 6233, 6234, 6235, 6236, 6237, 6238, 6239, 6240, 6241, 6242, 6243, 6244, 6245, 6246, 275, 274 }; public static int[] bandosGodKC = { 6260, 6265, 6263, 6261, 6271, 6272, 6273, 6274, 6275, 6268, 122, 6279, 6280, 6281, 6282, 6283, 6269, 6270, 6276, 6277, 6278 }; public void appendBandosKC(int i) { Client c = (Client) Server.playerHandler.players[npcs[i].killedBy]; if (c != null) { for (int j : bandosGodKC) { if (npcs[i].npcType == j) { if (c.godwarsKillCount[0] < 4000) { c.godwarsKillCount[0]++; //c.sendMessage("Bandos Killcount: " + c.bandosGwdKC); c.getPA().sendFrame126("@cya@" + c.godwarsKillCount[0], 16217); } break; } } } } public void appendArmadylKC(int i) { Client c = (Client) Server.playerHandler.players[npcs[i].killedBy]; if (c != null) { for (int j : armaGodKC) { if (npcs[i].npcType == j) { if (c.godwarsKillCount[3] < 4000) { c.godwarsKillCount[3]++; //c.sendMessage("Armadyl Killcount: " + c.armaGwdKC); c.getPA().sendFrame126("@cya@" + c.godwarsKillCount[3], 16216); } break; } } } } public void appendSaradominKC(int i) { Client c = (Client) Server.playerHandler.players[npcs[i].killedBy]; if (c != null) { for (int j : saraGodKC) { if (npcs[i].npcType == j) { if (c.godwarsKillCount[2] < 4000) { c.godwarsKillCount[2]++; //c.sendMessage("Saradomin Killcount: " + c.saraGwdKC); c.getPA().sendFrame126("@cya@" + c.godwarsKillCount[2], 16218); } break; } } } } public void appendZamorakKC(int i) { Client c = (Client) Server.playerHandler.players[npcs[i].killedBy]; if (c != null) { for (int j : zamGodKC) { if (npcs[i].npcType == j) { if (c.godwarsKillCount[1] < 4000) { c.godwarsKillCount[1]++; //c.sendMessage("Zamorak Killcount: " + c.zamGwdKC); c.getPA().sendFrame126("@cya@" + c.godwarsKillCount[1], 16219); } break; } } } } public void multiAttackDamage(int i) { int max = getMaxHit(i); for (int j = 0; j < Server.playerHandler.players.length; j++) { if (Server.playerHandler.players[j] != null) { Client c = (Client)Server.playerHandler.players[j]; if (c.isDead || c.heightLevel != npcs[i].heightLevel) continue; if (Server.playerHandler.players[j].goodDistance(c.absX, c.absY, npcs[i].absX, npcs[i].absY, 15)) { if (npcs[i].attackType == 2) { if (!c.prayerActive[16]) { if (Misc.random(500) + 200 > Misc.random(c.getCombat().mageDef())) { int dam = Misc.random(max); c.dealDamage(dam); c.handleHitMask(dam); } else { c.dealDamage(0); c.handleHitMask(0); } } else { c.dealDamage(0); c.handleHitMask(0); } } else if (npcs[i].attackType == 1) { if (!c.prayerActive[17]) { int dam = Misc.random(max); if (Misc.random(500) + 200 > Misc.random(c.getCombat().calculateRangeDefence())) { c.dealDamage(dam); c.handleHitMask(dam); } else { c.dealDamage(0); c.handleHitMask(0); } } else { c.dealDamage(0); c.handleHitMask(0); } } if (npcs[i].endGfx > 0) { c.gfx0(npcs[i].endGfx); } } c.getPA().refreshSkill(3); } } } private void spawnSecondForm(final int i) { npcs[i].gfx0(1055); EventManager.getSingleton().addEvent(new Event() { public void execute(EventContainer e) { spawnNpc2(1160, npcs[i].absX, npcs[i].absY, 0, 1, 250, 45, 500, 300); e.stop(); } }, 15000); } /** * kq respawn first form */ private void spawnFirstForm(final int i) { EventManager.getSingleton().addEvent(new Event() { public void execute(EventContainer e) { spawnNpc2(1158, npcs[i].absX, npcs[i].absY, 0, 1, 250, 45, 500, 300); e.stop(); } }, 10000); } public int getClosePlayer(int i) { for (int j = 0; j < Server.playerHandler.players.length; j++) { if (Server.playerHandler.players[j] != null) { if (j == npcs[i].spawnedBy) return j; if (goodDistance(Server.playerHandler.players[j].absX, Server.playerHandler.players[j].absY, npcs[i].absX, npcs[i].absY, 2 + distanceRequired(i) + followDistance(i)) || isFightCaveNpc(i)) { if ((Server.playerHandler.players[j].underAttackBy <= 0 && Server.playerHandler.players[j].underAttackBy2 <= 0) || Server.playerHandler.players[j].inMulti()) if (Server.playerHandler.players[j].heightLevel == npcs[i].heightLevel) return j; } } } return 0; } public int getCloseRandomPlayer(int i) { ArrayList<Integer> players = new ArrayList<Integer>(); for (int j = 0; j < PlayerHandler.players.length; j++) { if (PlayerHandler.players[j] != null) { if (goodDistance(PlayerHandler.players[j].absX, PlayerHandler.players[j].absY, npcs[i].absX, npcs[i].absY, 2 + distanceRequired(i) + followDistance(i)) || isFightCaveNpc(i)) { if ((PlayerHandler.players[j].underAttackBy <= 0 && PlayerHandler.players[j].underAttackBy2 <= 0) || PlayerHandler.players[j].inMulti()) if (PlayerHandler.players[j].heightLevel == npcs[i].heightLevel) players.add(j); } } } if (players.size() > 0) return players.get(Misc.random(players.size() -1)); else return 0; } public int getCloseRandomPlayer1(int i) { ArrayList<Integer> players = new ArrayList<Integer>(); for (int j = 0; j < PlayerHandler.players.length; j++) { if (PlayerHandler.players[j] != null && (goodDistance(PlayerHandler.players[j].getX(), PlayerHandler.players[j].getY(), npcs[i].getAbsX(), npcs[i].getAbsY(), 50 + followDistance(i)) || isFightCaveNpc(i)) && ((PlayerHandler.players[j].underAttackBy <= 0 && PlayerHandler.players[j].underAttackBy2 <= 0) || PlayerHandler.players[j] .inMulti()) && PlayerHandler.players[j].heightLevel == npcs[i].heightLevel) { if (PlayerHandler.players[j].inGodWarsBoss()) { players.add(j); } } } return players.size() > 0 ? players .get(Misc.random(players.size() - 1)) : 0; } public int npcSize(int i) { switch (npcs[i].npcType) { /* case 50: return 5;*/ case 2883: case 2882: case 2881: return 3; } return 0; } public boolean isReallyAggressive(int i) { switch (npcs[i].npcType) { case 6203: case 6208: case 6204: case 6206: case 6247: case 6252: case 6250: case 6248: case 6260: case 6265: case 6263: case 6261: case 6223: case 6225: case 6227: case 6222: return true; } return false; } public boolean isAggressive(int i) { switch (npcs[i].npcType) { case 119: case 1931: case 1154: case 1155: case 1159: case 1158: case 1160: case 1157: case 195: case 2550: case 2551: case 2552: case 2553: case 2558: case 2559: case 2560: case 2561: case 2562: case 2563: case 2564: case 2565: case 2892: case 2894: case 2881: case 2882: case 2883: case 50: case 941: return true; } if (npcs[i].inWild() && npcs[i].MaxHP > 0) return true; if (isFightCaveNpc(i)) return true; return false; } public boolean isFightCaveNpc(int i) { switch (npcs[i].npcType) { case 2627: case 2630: case 2631: case 2741: case 2743: case 2745: return true; } return false; } /** * Summon npc, barrows, etc **/ public void spawnNpc(final Client c, int npcType, int x, int y, int heightLevel, int WalkingType, int HP, int maxHit, int attack, int defence, boolean attackPlayer, boolean headIcon) { // first, search for a free slot int slot = -1; for (int i = 1; i < maxNPCs; i++) { if (npcs[i] == null) { slot = i; break; } } if(slot == -1) { //Misc.println("No Free Slot"); return; // no free slot found } final NPC newNPC = new NPC(slot, npcType); newNPC.absX = x; newNPC.absY = y; newNPC.makeX = x; newNPC.makeY = y; newNPC.heightLevel = heightLevel; newNPC.walkingType = WalkingType; newNPC.HP = HP; newNPC.MaxHP = HP; newNPC.maxHit = maxHit; newNPC.attack = attack; newNPC.defence = defence; newNPC.spawnedBy = c.getId(); newNPC.dagColor = getDagColor(npcType); if(headIcon) c.getPA().drawHeadicon(1, slot, 0, 0); if(attackPlayer) { newNPC.underAttack = true; if(c != null) { if(server.model.minigames.Barrows.COFFIN_AND_BROTHERS[c.randomCoffin][1] != newNPC.npcType) { if(newNPC.npcType == 2025 || newNPC.npcType == 2026 || newNPC.npcType == 2027 || newNPC.npcType == 2028 || newNPC.npcType == 2029 || newNPC.npcType == 2030) { newNPC.forceChat("You dare disturb my rest!"); } } int[] animatedArmor = {4278, 4279, 4280, 4281, 4282, 4283, 4284}; for(int z = 0; z < animatedArmor.length; z++) { if (newNPC.npcType == animatedArmor[z]) { newNPC.forceAnim(4410); newNPC.forceChat("I'M ALIVE!"); } } if(server.model.minigames.Barrows.COFFIN_AND_BROTHERS[c.randomCoffin][1] == newNPC.npcType) { newNPC.forceChat("You dare steal from us!"); } newNPC.killerId = c.playerId; } } for(int[] aSpiritTree : SpiritTree.spiritTree) { if(newNPC.npcType == aSpiritTree[2]) { newNPC.forceChat("Leave these woods and never return!"); CycleEventHandler.getSingleton().addEvent(c, new CycleEvent() { @Override public void execute(CycleEventContainer container) { container.stop(); } @Override public void stop() { // if(!newNPC.isDead) { newNPC.isDead = true; newNPC.updateRequired = true; c.treeSpawned = false; // } } }, 200); } } for(int[] aRockGolem : RockGolem.rockGolem) { if(newNPC.npcType == aRockGolem[2]) { newNPC.forceChat("Raarrrgghh! Flee human!"); CycleEventHandler.getSingleton().addEvent(c, new CycleEvent() { @Override public void execute(CycleEventContainer container) { container.stop(); } @Override public void stop() { // if(!newNPC.isDead) { newNPC.isDead = true; newNPC.updateRequired = true; c.golemSpawned = false; // } } }, 200); } } for(int[] aRiverTroll : RiverTroll.riverTroll) { if(newNPC.npcType == aRiverTroll[2]) { newNPC.forceChat("Fishies be mine! Leave dem fishies!"); CycleEventHandler.getSingleton().addEvent(c, new CycleEvent() { @Override public void execute(CycleEventContainer container) { container.stop(); } @Override public void stop() { // if(!newNPC.isDead) { newNPC.isDead = true; newNPC.updateRequired = true; c.trollSpawned = false; // } } }, 200); } } for(int[] aZombie : Zombie.zombie) { if(newNPC.npcType == aZombie[2]) { newNPC.forceChat("Braaaainssss!"); CycleEventHandler.getSingleton().addEvent(c, new CycleEvent() { @Override public void execute(CycleEventContainer container) { container.stop(); } @Override public void stop() { // if(!newNPC.isDead) { newNPC.isDead = true; newNPC.updateRequired = true; c.zombieSpawned = false; // } } }, 200); } } npcs[slot] = newNPC; } public String getDagColor(int npcType) { int dags[] = { 1351, 1352, 1356, 1353, 1354, 1355 }; String colors[] = { "white", "blue", "brown", "red", "orange", "green" }; for(int i = 0; i < dags.length; i++) { if(npcType == dags[i]) { return colors[i]; } } return ""; } public void getDtLastKill(int i) { int dtNpcs[] = { 1975, 1914, 1977, 1913 }; for(int dtNpc : dtNpcs) { if(npcs[i].npcType == dtNpc) { Client p = (Client) Server.playerHandler.players[npcs[i].killedBy]; if(p != null) { p.lastDtKill = dtNpc; } } } } public void checkDt(int i) { if(npcs[i] != null) { } } public void checkHfd(int i) { int dags[] = { 1351, 1352, 1356, 1353, 1354, 1355 }; for(int j = 0; j < dags.length; j++) { if(npcs[i].npcType == dags[j]) { Client c = (Client) Server.playerHandler.players[npcs[i].killedBy]; if(c != null) { c.horrorFromDeep = 2; c.sendMessage("You have completed Horror from the Deep."); c.getAA2().HFTD(); if(c.questPoints == 3) { //c.getShops().addQuestCape(); } c.getPA().loadQuests(); } if(npcs[i] != null) { npcs[i].absX = 0; npcs[i].absY = 0; npcs[i] = null; break; } } } } public void checkRfd(int i) { if(npcs[i] != null) { int playerId = npcs[i].killedBy; if(Server.playerHandler.players[playerId] != null) { Client c = (Client) Server.playerHandler.players[playerId]; if(c.roundNpc == 2 && !c.spawned) { spawnNpc(c, 3494, 1899, 5354, c.heightLevel, 1, 210, 24, 70, 60, true, true); c.spawned = true; } else if(c.roundNpc == 3 && !c.spawned) { spawnNpc(c, 3495, 1899, 5354, c.heightLevel, 1, 240, 15, 70, 60, true, true); c.spawned = true; } else if(c.roundNpc == 4 && !c.spawned) { spawnNpc(c, 3496, 1899, 5354, c.heightLevel, 1, 140, 19, 70, 60, true, true); c.spawned = true; } else if(c.roundNpc == 5) { c.getPA().movePlayer(3218, 9621, 0); c.getDH().sendDialogues(30, 608); c.roundNpc = 0; c.questPoints++; if(c.questPoints == 3) { //c.getShops().addQuestCape(); } c.getPA().loadQuests(); } } } } public void spawnNpc2(int npcType, int x, int y, int heightLevel, int WalkingType, int HP, int maxHit, int attack, int defence) { // first, search for a free slot int slot = -1; for (int i = 1; i < maxNPCs; i++) { if (npcs[i] == null) { slot = i; break; } } if(slot == -1) { //Misc.println("No Free Slot"); return; // no free slot found } NPC newNPC = new NPC(slot, npcType); newNPC.absX = x; newNPC.absY = y; newNPC.makeX = x; newNPC.makeY = y; newNPC.heightLevel = heightLevel; newNPC.walkingType = WalkingType; newNPC.HP = HP; newNPC.MaxHP = HP; newNPC.maxHit = maxHit; newNPC.attack = attack; newNPC.defence = defence; npcs[slot] = newNPC; } /** * Emotes **/ public static int getAttackEmote(int i) { switch(Server.npcHandler.npcs[i].npcType) { case 1158: //kalphite queen if (npcs[i].attackType == 2) return 6240; if (npcs[i].attackType == 0) return 6241; else return 6240; case 1160: //kalphite queen form 2 if (npcs[i].attackType == 2) return 6237; if (npcs[i].attackType == 0) return 6235; else return 6237; case 6213: case 6212: return 6547; case 6219: case 6254: case 6255: case 6256: case 6257: case 6258: case 6214: return 806; case 6216: return 1582; case 6218: return 4300; case 6221: return 811; case 1643: return 421; case 90: case 91: case 5359: case 5384: case 92: case 93: //skeleton return 5485; case 1605: return 1507; case 419: //zombie case 420: case 421: case 422: case 423: case 424: return 5568; case 438: case 439: case 440: case 441: case 442: // Tree spirit case 443: return 94; case 391: case 392: case 393: case 394: case 395://river troll case 396: return 284; case 413: case 414: case 415: case 416: case 417://rock golem case 418: return 153; case 6229: case 6230: case 6231: case 6232: case 6233: case 6234: case 6235: case 6236: case 6237: case 6238: case 6239: case 6240: case 6241: case 6242: case 6243: case 6244: case 6245: case 6246: return 6953; case 6210: return 6581; case 6211: return 169; case 6279: case 6280: case 6283: return 6184; case 6276: case 6277: return 4320; case 6275: return 164; case 6282: return 6188; // begin new updates case 112: //moss return 4658; case 103: //ghost return 5540; case 78: //bats return 4915; case 1612: //banshee return 1523; case 2783: //dark beast return 2731; //end case 6248: return 6376; case 6250: return 7018; case 6261: case 6263: case 6265: return 6154; case 6204: case 6206: case 6208: return 6945; case 49: return 6579; case 6247: return 6964; case 6203: return 6945; case 6223: case 6225: case 6227: return 6953; case 6222: return 6976; case 6267: return 359; case 6268: return 2930; case 4291: case 4292: case 6269: return 4652; case 6270: return 4652; case 6271: return 4320; case 6272: return 4320; case 6273: return 4320; case 6274: return 4320; case 1459: return 1402; case 2550: if (npcs[i].attackType == 0) return 7060; else return 7063; case 86: case 87: return 4933; case 2892: case 2894: return 2868; case 2627: return 2621; case 2630: return 2625; case 2631: return 2633; case 2741: return 2637; case 2746: return 2637; case 2607: return 2611; case 2743://360 return 2647; case 6260: if (npcs[i].attackType == 0) return 7060; else return 7063; //end of gwd //arma gwd case 2558: return 3505; case 2560: return 6953; case 2559: return 6952; case 2561: return 6954; //end of arma gwd //sara gwd case 2562: return 6964; case 2563: return 6376; case 2564: return 7018; case 2565: return 7009; //end of sara gwd case 5247: return 5411; case 13: //wizards return 711; case 655: return 5532; case 1624: return 1557; case 1648: return 1590; case 1615: //abby demon return 1537; case 1613: //nech return 1528; case 1610: case 1611: //garg return 1519; case 1616: //basilisk return 1546; //case 459: //skele //return 260; case 50://drags case 53: case 54: case 55: case 941: case 1590: case 1591: case 1592: if (npcs[i].attackType == 0) return 80; else if (npcs[i].attackType == 2) return 81; case 124: //earth warrior return 390; case 803: //monk return 422; case 52: //baby drag return 25; case 58: //Shadow Spider case 59: //Giant Spider case 60: //Giant Spider case 61: //Spider case 62: //Jungle Spider case 63: //Deadly Red Spider case 64: //Ice Spider case 134: return 143; case 105: //Bear case 106: //Bear return 41; case 412: // case 78: return 30; case 2033: //rat return 138; case 2031: // bloodworm return 2070; case 101: // goblin return 309; case 81: // cow return 0x03B; case 21: // hero return 451; case 41: // chicken return 55; case 9: // guard case 32: // guard case 20: // paladin return 451; case 1338: // dagannoth case 1340: case 1342: return 1341; case 19: // white knight return 406; case 110: case 111: // ice giant case 117: return 4652; case 2452: return 1312; case 2889: return 2859; case 118: case 119: return 99; case 82://Lesser Demon case 83://Greater Demon case 84://Black Demon case 1472://jungle demon return 64; case 1267: case 1265: return 1312; case 125: // ice warrior case 178: return 451; case 1153: //Kalphite Worker case 1154: //Kalphite Soldier case 1155: //Kalphite guardian case 1156: //Kalphite worker case 1157: //Kalphite guardian return 6241; case 123: case 122: return 164; case 2028: // karil return 2075; case 2025: // ahrim return 729; case 2026: // dharok return 2067; case 2027: // guthan return 2080; case 2029: // torag return 0x814; case 2030: // verac return 2062; case 2881: //supreme return 2855; case 2882: //prime return 2854; case 2883: //rex return 2851; case 5666: int test = Misc.random(2); if(test == 2) { return 5895; } else if(test == 1) { return 5894; } else { return 5896; } case 3200: return 3146; case 2745: if (npcs[i].attackType == 2) return 2656; else if (npcs[i].attackType == 1) return 2652; else if (npcs[i].attackType == 0) return 2655; default: return 0x326; } } public int getDeadEmote(int i) { switch(npcs[i].npcType) { case 1158: spawnSecondForm(i); return 6242; case 1160: spawnFirstForm(i); return 6233; case 90: case 91: case 5359: case 5384: case 92: case 93: //skeleton return 5491; case 438: case 439: case 440: case 441: case 442: // Tree spirit case 443: return 97; case 110: case 117: return 4653; case 391: case 392: case 393: case 394: case 395://river troll case 396: return 287; case 413: case 414: case 415: case 416: case 417://rock golem case 418: return 156; case 419://zombie case 420: case 421: case 422: case 423: case 424: return 5569; case 6282: return 6182; case 6275: return 167; case 6276: case 6277: return 4321; case 6279: case 6280: case 6283: return 6182; case 6211: return 172; case 6212: return 6537; case 6219: case 6221: case 6254: case 6255: case 6256: case 6257: case 6258: case 6214: return 0x900; case 6216: return 1580; case 6218: return 4302; case 6229: case 6230: case 6231: case 6232: case 6233: case 6234: case 6235: case 6236: case 6237: case 6238: case 6239: case 6240: case 6241: case 6242: case 6243: case 6244: case 6245: case 6246: return 6956; case 6210: return 6576; // begin new updates case 112: //moss return 4659; case 103: //ghost return 5542; case 78: //bats return 4917; //end case 6248: return 6377; case 6250: return 7016; case 6204: case 6206: case 6208: return 6946; case 6261:// Seargent Strongstack case 6263:// Seargent Steelwill case 6265:// Seargent Grimspike return 6156; case 6260:// General Graardor return 7062; case 6142: return 1; case 6143: return 1; case 6144: return 1; case 6145: return 1; case 1265://RockCrab return 1314; case 914://Battle Mage return 196; case 3742://Ravager case 3743: case 3744: case 3745: case 3746: return 3916; case 3772://Brawler case 3773: case 3774: case 3775: case 3776: return 3894; case 49: return 6576; case 1612:// Banshee return 1524; case 6222:// Kree'ara return 3503; case 6223:// Wingman Skree case 6225:// Flockleader Geerin case 6227:// Flight Kilisa return 6956; case 6247: return 6965; case 6203: return 6945; case 6267: return 357; case 6268: return 2938; case 6269: case 4291: // Cyclops case 4292: // Ice cyclops case 6270: return 4653; case 6271: case 6272: case 6273: case 6274: return 4321; case 1459: return 1404; //sara gwd case 5247: return 5412; case 2562: return 6965; case 86: case 87: return 4935; case 2563: return 6377; case 2564: return 7016; case 2565: return 7011; case 2550: return 7062; case 2892: case 2894: return 2865; case 2558: return 3503; case 2559: case 2560: case 2561: return 6956; case 2607: return 2607; case 2627: return 2620; case 2630: return 2627; case 2631: return 2630; case 2738: return 2627; case 2741: return 2638; case 2746: return 2638; case 2743: return 2646; case 2745: return 2654; case 6150: case 6151: case 6152: case 6153: return -1; case 5666: return 5898; case 3200: return 3147; case 2035: //spider return 146; case 2033: //rat return 141; case 2031: // bloodvel return 2073; case 101: //goblin return 313; case 81: // cow return 244; case 41: // chicken return 57; case 1338: // dagannoth case 1340: case 1342: return 1342; case 2881: case 2882: case 2883: return 2856; case 111: // ice giant return 131; case 125: // ice warrior return 843; case 751://Zombies!! return 302; case 1626: case 1627: case 1628: case 1629: case 1630: case 1631: case 1632: //turoth! return 1597; case 1616: //basilisk return 1548; case 1653: //hand return 1590; case 82://demons case 83: case 84: return 67; case 1605://abby spec return 1508; case 51://baby drags case 52: case 1589: case 3376: return 28; case 1610: case 1611: return 1520; case 1618: case 1619: return 1553; case 1620: case 1621: return 1563; case 2783: return 2732; case 1615: return 1538; case 1624: return 1558; case 1613: return 1530; case 1633: case 1634: case 1635: case 1636: return 1580; case 1648: case 1649: case 1650: case 1651: case 1652: case 1654: case 1655: case 1656: case 1657: return 1590; case 100: case 102: return 313; case 105: case 106: return 44; case 412: // case 78: return 36; case 122: case 123: return 167; case 58: case 59: case 60: case 61: case 62: case 63: case 64: case 134: return 146; case 1153: case 1154: case 1155: case 1156: case 1157: return 6242; // case 103: case 104: return 5534; case 118: case 119: return 102; case 50://drags return 92; case 53: case 54: case 55: case 941: case 1590: case 1591: case 1592: return 92; default: return 2304; } } /** * Attack delays **/ public int getNpcDelay(int i) { switch(npcs[i].npcType) { case 2025: case 2028: return 7; case 2745: return 8; case 2558: case 2559: case 2560: case 2561: case 2550: return 6; //saradomin gw boss case 2562: return 2; case 6260: case 6203: case 6222: case 6247: return 6; default: return 5; } } /** * Hit delays **/ public int getHitDelay(int i) { switch(npcs[i].npcType) { case 1158: case 1160: if (npcs[i].attackType == 1 || npcs[i].attackType == 2) return 3; else return 2; case 2881: case 2882: case 3200: case 2892: case 2894: return 3; case 2743: case 2631: case 2558: case 2559: case 2560: return 3; case 2745: if (npcs[i].attackType == 1 || npcs[i].attackType == 2) return 5; else return 2; case 6260: npcs[i].graardor = Misc.random(5); if (npcs[i].graardor == 5) { return 3; } return 2; case 6203: npcs[i].tsutsaroth = Misc.random(4); if (npcs[i].tsutsaroth == 4) { return 3; } return 2; case 6247: npcs[i].zilyana = Misc.random(6); if (npcs[i].zilyana == 6 || npcs[i].zilyana == 5 || npcs[i].zilyana == 4) { return 6; } return 2; case 946: case 50: case 6208: case 6250: case 6263: case 6223: case 6222: case 2025: return 2; case 2028: return 3; default: return 2; } } /** * Npc respawn time **/ public int getRespawnTime(int i) { switch(npcs[i].npcType) { case 6260: case 6247: case 6222: case 6203: return 45; case 1931: return 30; case 1160: case 6142: case 6143: case 6144: case 6145: case 6208: case 6204: case 6206: case 6252: case 6250: case 6227: case 6225: case 6223: case 6265: case 6263: case 6261: case 3073: case 5808: case 7772: case 7135: case 13454: case 13451: case 5631: case 13452: case 7643: case 6248: case 1158: return -1; case 50: case 2881: case 2882: case 2883: case 2558: case 2559: case 2560: case 2561: case 2562: case 2563: case 2564: case 2550: case 2551: case 2552: case 2553: return 100; case 6150: case 6151: case 6152: case 6153: return 500; default: return 25; } } public void newNPC(int npcType, int x, int y, int heightLevel, int WalkingType, int HP, int maxHit, int attack, int defence) { // first, search for a free slot int slot = -1; for (int i = 1; i < maxNPCs; i++) { if (npcs[i] == null) { slot = i; break; } } if(slot == -1) return; // no free slot found NPC newNPC = new NPC(slot, npcType); newNPC.absX = x; newNPC.absY = y; newNPC.makeX = x; newNPC.makeY = y; newNPC.heightLevel = heightLevel; newNPC.walkingType = WalkingType; newNPC.HP = HP; newNPC.MaxHP = HP; newNPC.maxHit = maxHit; newNPC.attack = attack; newNPC.defence = defence; npcs[slot] = newNPC; } public void newNPCList(int npcType, String npcName, int combat, int HP) { // first, search for a free slot int slot = -1; for (int i = 0; i < maxListedNPCs; i++) { if (NpcList[i] == null) { slot = i; break; } } if(slot == -1) return; // no free slot found NPCList newNPCList = new NPCList(npcType); newNPCList.npcName = npcName; newNPCList.npcCombat = combat; newNPCList.npcHealth = HP; NpcList[slot] = newNPCList; } public void handleClipping(int i) { NPC npc = npcs[i]; if(npc.moveX == 1 && npc.moveY == 1) { if((Region.getClipping(npc.absX + 1, npc.absY + 1, npc.heightLevel) & 0x12801e0) != 0) { npc.moveX = 0; npc.moveY = 0; if((Region.getClipping(npc.absX, npc.absY + 1, npc.heightLevel) & 0x1280120) == 0) npc.moveY = 1; else npc.moveX = 1; } } else if(npc.moveX == -1 && npc.moveY == -1) { if((Region.getClipping(npc.absX - 1, npc.absY - 1, npc.heightLevel) & 0x128010e) != 0) { npc.moveX = 0; npc.moveY = 0; if((Region.getClipping(npc.absX, npc.absY - 1, npc.heightLevel) & 0x1280102) == 0) npc.moveY = -1; else npc.moveX = -1; } } else if(npc.moveX == 1 && npc.moveY == -1) { if((Region.getClipping(npc.absX + 1, npc.absY - 1, npc.heightLevel) & 0x1280183) != 0) { npc.moveX = 0; npc.moveY = 0; if((Region.getClipping(npc.absX, npc.absY - 1, npc.heightLevel) & 0x1280102) == 0) npc.moveY = -1; else npc.moveX = 1; } } else if(npc.moveX == -1 && npc.moveY == 1) { if((Region.getClipping(npc.absX - 1, npc.absY + 1, npc.heightLevel) & 0x128013) != 0) { npc.moveX = 0; npc.moveY = 0; if((Region.getClipping(npc.absX, npc.absY + 1, npc.heightLevel) & 0x1280120) == 0) npc.moveY = 1; else npc.moveX = -1; } } //Checking Diagonal movement. if (npc.moveY == -1 ) { if ((Region.getClipping(npc.absX, npc.absY - 1, npc.heightLevel) & 0x1280102) != 0) npc.moveY = 0; } else if( npc.moveY == 1) { if((Region.getClipping(npc.absX, npc.absY + 1, npc.heightLevel) & 0x1280120) != 0) npc.moveY = 0; } //Checking Y movement. if(npc.moveX == 1) { if((Region.getClipping(npc.absX + 1, npc.absY, npc.heightLevel) & 0x1280180) != 0) npc.moveX = 0; } else if(npc.moveX == -1) { if((Region.getClipping(npc.absX - 1, npc.absY, npc.heightLevel) & 0x1280108) != 0) npc.moveX = 0; } //Checking X movement. } public void process() { for (int i = 0; i < maxNPCs; i++) { if (npcs[i] == null) continue; npcs[i].clearUpdateFlags(); } for (int i = 0; i < maxNPCs; i++) { if (npcs[i] != null) { if (npcs[i].actionTimer > 0) { npcs[i].actionTimer--; } /* if(npcs[i].npcType == 945) { npcs[i].forcedText = "Hello there, you should go to www.sabsabionline.com!"; npcs[i].forcedChatRequired = true; npcs[i].updateRequired = true; }*/ if (npcs[i].freezeTimer > 0) { npcs[i].freezeTimer--; } if (npcs[i].hitDelayTimer > 0) { npcs[i].hitDelayTimer--; } if (npcs[i].hitDelayTimer == 1) { npcs[i].hitDelayTimer = 0; applyDamage(i); } if(npcs[i].attackTimer > 0) { npcs[i].attackTimer--; } if(npcs[i].spawnedBy > 0) { // delete summons npc if(Server.playerHandler.players[npcs[i].spawnedBy] == null || Server.playerHandler.players[npcs[i].spawnedBy].heightLevel != npcs[i].heightLevel || Server.playerHandler.players[npcs[i].spawnedBy].respawnTimer > 0 || !Server.playerHandler.players[npcs[i].spawnedBy].goodDistance(npcs[i].getX(), npcs[i].getY(), Server.playerHandler.players[npcs[i].spawnedBy].getX(), Server.playerHandler.players[npcs[i].spawnedBy].getY(), 20)) { if(Server.playerHandler.players[npcs[i].spawnedBy] != null) { for(int o = 0; o < Server.playerHandler.players[npcs[i].spawnedBy].barrowsNpcs.length; o++){ if(npcs[i].npcType == Server.playerHandler.players[npcs[i].spawnedBy].barrowsNpcs[o][0]) { if (Server.playerHandler.players[npcs[i].spawnedBy].barrowsNpcs[o][1] == 1) Server.playerHandler.players[npcs[i].spawnedBy].barrowsNpcs[o][1] = 0; } } } npcs[i] = null; } } if (npcs[i] == null) continue; if (npcs[i].lastX != npcs[i].getX() || npcs[i].lastY != npcs[i].getY()) { npcs[i].lastX = npcs[i].getX(); npcs[i].lastY = npcs[i].getY(); } /** * Attacking player **/ if (isAggressive(i) && !npcs[i].underAttack && !npcs[i].isDead && !switchesAttackers(i)) { npcs[i].killerId = getCloseRandomPlayer(i); } else if (isAggressive(i) && !npcs[i].underAttack && !npcs[i].isDead && switchesAttackers(i)) { npcs[i].killerId = getCloseRandomPlayer(i); } else if (isReallyAggressive(i) && !npcs[i].underAttack && !npcs[i].isDead && !switchesAttackers(i)) { npcs[i].killerId = getCloseRandomPlayer1(i); } else if (isReallyAggressive(i) && !npcs[i].underAttack && !npcs[i].isDead && switchesAttackers(i)) { npcs[i].killerId = getCloseRandomPlayer1(i); } if (System.currentTimeMillis() - npcs[i].lastDamageTaken > 5000) npcs[i].underAttackBy = 0; if((npcs[i].killerId > 0 || npcs[i].underAttack) && !npcs[i].walkingHome && retaliates(npcs[i].npcType)) { if(!npcs[i].isDead) { int p = npcs[i].killerId; if(Server.playerHandler.players[p] != null) { Client c = (Client) Server.playerHandler.players[p]; followPlayer(i, c.playerId); if (npcs[i] == null) continue; if(npcs[i].attackTimer == 0) { if(c != null) { attackPlayer(c, i); } else { npcs[i].killerId = 0; npcs[i].underAttack = false; npcs[i].facePlayer(0); } } } else { npcs[i].killerId = 0; npcs[i].underAttack = false; npcs[i].facePlayer(0); } } } /** * Random walking and walking home **/ if (npcs[i] == null) continue; if((!npcs[i].underAttack || npcs[i].walkingHome) && npcs[i].randomWalk && !npcs[i].isDead) { npcs[i].facePlayer(0); npcs[i].killerId = 0; if(npcs[i].spawnedBy == 0) { if((npcs[i].absX > npcs[i].makeX + Config.NPC_RANDOM_WALK_DISTANCE) || (npcs[i].absX < npcs[i].makeX - Config.NPC_RANDOM_WALK_DISTANCE) || (npcs[i].absY > npcs[i].makeY + Config.NPC_RANDOM_WALK_DISTANCE) || (npcs[i].absY < npcs[i].makeY - Config.NPC_RANDOM_WALK_DISTANCE)) { npcs[i].walkingHome = true; } } if (npcs[i].walkingHome && npcs[i].absX == npcs[i].makeX && npcs[i].absY == npcs[i].makeY) { npcs[i].walkingHome = false; } else if(npcs[i].walkingHome) { npcs[i].moveX = GetMove(npcs[i].absX, npcs[i].makeX); npcs[i].moveY = GetMove(npcs[i].absY, npcs[i].makeY); handleClipping(i); npcs[i].getNextNPCMovement(i); npcs[i].updateRequired = true; } if (npcs[i].walkingType >= 0) { switch(npcs[i].walkingType) { case 5: npcs[i].turnNpc(npcs[i].absX-1, npcs[i].absY); break; case 4: npcs[i].turnNpc(npcs[i].absX+1, npcs[i].absY); break; case 3: npcs[i].turnNpc(npcs[i].absX, npcs[i].absY-1); break; case 2: npcs[i].turnNpc(npcs[i].absX, npcs[i].absY+1); break; default: if (npcs[i].walkingType >= 0) { npcs[i].turnNpc(npcs[i].absX, npcs[i].absY); //makes it when npcs move they dont turn back to one direction } break; } } if(npcs[i].walkingType == 1) { if(Misc.random(3)== 1 && !npcs[i].walkingHome) { int MoveX = 0; int MoveY = 0; int Rnd = Misc.random(9); if (Rnd == 1) { MoveX = 1; MoveY = 1; } else if (Rnd == 2) { MoveX = -1; } else if (Rnd == 3) { MoveY = -1; } else if (Rnd == 4) { MoveX = 1; } else if (Rnd == 5) { MoveY = 1; } else if (Rnd == 6) { MoveX = -1; MoveY = -1; } else if (Rnd == 7) { MoveX = -1; MoveY = 1; } else if (Rnd == 8) { MoveX = 1; MoveY = -1; } if (MoveX == 1) { if (npcs[i].absX + MoveX < npcs[i].makeX + 1) { npcs[i].moveX = MoveX; } else { npcs[i].moveX = 0; } } if (MoveX == -1) { if (npcs[i].absX - MoveX > npcs[i].makeX - 1) { npcs[i].moveX = MoveX; } else { npcs[i].moveX = 0; } } if(MoveY == 1) { if(npcs[i].absY + MoveY < npcs[i].makeY + 1) { npcs[i].moveY = MoveY; } else { npcs[i].moveY = 0; } } if(MoveY == -1) { if(npcs[i].absY - MoveY > npcs[i].makeY - 1) { npcs[i].moveY = MoveY; } else { npcs[i].moveY = 0; } } int x = (npcs[i].absX + npcs[i].moveX); int y = (npcs[i].absY + npcs[i].moveY); //if (VirtualWorld.I(npcs[i].heightLevel, npcs[i].absX, npcs[i].absY, x, y, 0)) handleClipping(i); npcs[i].getNextNPCMovement(i); //else //{ //npcs[i].moveX = 0; //npcs[i].moveY = 0; //} npcs[i].updateRequired = true; } } } if (npcs[i].isDead == true) { if (npcs[i].actionTimer == 0 && npcs[i].applyDead == false && npcs[i].needRespawn == false) { npcs[i].updateRequired = true; npcs[i].facePlayer(0); npcs[i].killedBy = getNpcKillerId(i); npcs[i].animNumber = getDeadEmote(i); // dead emote npcs[i].animUpdateRequired = true; npcs[i].freezeTimer = 0; npcs[i].applyDead = true; killedBarrow(i); npcs[i].actionTimer = 4; // delete time resetPlayersInCombat(i); npcs[i].dagColor = ""; getDtLastKill(i); } else if (npcs[i].actionTimer == 0 && npcs[i].applyDead == true && npcs[i].needRespawn == false) { npcs[i].needRespawn = true; npcs[i].actionTimer = getRespawnTime(i); // respawn time dropItems(i); // npc drops items! appendSlayerExperience(i); tzhaarDeathHandler(i); if (npcs[i].npcType == 2745) { handleJadDeath(i); } appendZamorakKC(i); appendBandosKC(i); appendSaradominKC(i); appendArmadylKC(i); appendKillCount(i); //appendJailKc(i); npcs[i].absX = npcs[i].makeX; npcs[i].absY = npcs[i].makeY; npcs[i].HP = npcs[i].MaxHP; npcs[i].animNumber = 0x328; npcs[i].updateRequired = true; npcs[i].animUpdateRequired = true; if (npcs[i].npcType >= 2440 && npcs[i].npcType <= 2446) { Server.objectManager.removeObject(npcs[i].absX, npcs[i].absY); } if (npcs[i].npcType == 2745) { //handleJadDeath(i); } } else if (npcs[i].actionTimer == 0 && npcs[i].needRespawn == true && npcs[i].npcType != 1158) { Client player = (Client) Server.playerHandler.players[npcs[i].spawnedBy]; if(player != null) { checkDt(i); checkHfd(i); checkRfd(i); npcs[i] = null; } else if (npcs[i].actionTimer == 0 && npcs[i].needRespawn) { if (npcs[i].spawnedBy > 0) { npcs[i] = null; } else { if (npcs[i].npcType == 6260) { Player c22 = PlayerHandler.players[npcs[i].killedBy]; for (NPC n : NPCHandler.npcs) { if (n != null && n.inGodWarsBoss()) { if (n.spawnedBy <= 0) { n.isDead = true; n.applyDead = true; n.updateRequired = true; } } } newNPC(6265, 2868, 5364, 2, 1, 146, 23, 120, 120); newNPC(6263, 2870, 5356, 2, 1, 127, 23, 150, 90); newNPC(6261, 2873, 5366, 2, 1, 126, 22, 100, 110); } else if (npcs[i].npcType == 6222) { Player c22 = PlayerHandler.players[npcs[i].killedBy]; for (NPC n : NPCHandler.npcs) { if (n != null && n.inGodWarsBoss1()) { if (n.spawnedBy <= 0) { n.isDead = true; n.applyDead = true; n.updateRequired = true; } } } newNPC(6227, 2828, 5299, 2, 1, 146, 23, 120, 120); newNPC(6225, 2838, 5305, 2, 1, 127, 20, 150, 90); newNPC(6223, 2835, 5299, 2, 1, 126, 19, 100, 110); } else if (npcs[i].npcType == 6203) { Player c22 = PlayerHandler.players[npcs[i].killedBy]; for (NPC n : NPCHandler.npcs) { if (n != null && n.inGodWarsBoss2()) { if (n.spawnedBy <= 0) { n.isDead = true; n.applyDead = true; n.updateRequired = true; } } } newNPC(6206, 2921, 5328, 2, 1, 146, 23, 120, 120); newNPC(6204, 2928, 5328, 2, 1, 127, 20, 150, 90); newNPC(6208, 2932, 5321, 2, 1, 126, 19, 100, 110); } else if (npcs[i].npcType == 6247) { Player c22 = PlayerHandler.players[npcs[i].killedBy]; for (NPC n : NPCHandler.npcs) { if (n != null && n.inGodWarsBoss3()) { if (n.spawnedBy <= 0) { n.isDead = true; n.applyDead = true; n.updateRequired = true; } } } newNPC(6252, 2901, 5261, 0, 1, 146, 23, 120, 120); newNPC(6250, 2901, 5269, 0, 1, 127, 20, 150, 90); newNPC(6248, 2892, 5268, 0, 1, 126, 19, 100, 110); } int old1 = npcs[i].npcType; int old2 = npcs[i].makeX; int old3 = npcs[i].makeY; int old4 = npcs[i].heightLevel; int old5 = npcs[i].walkingType; int old6 = npcs[i].MaxHP; int old7 = npcs[i].maxHit; int old8 = npcs[i].attack; int old9 = npcs[i].defence; npcs[i] = null; newNPC(old1, old2, old3, old4, old5, old6, old7, old8, old9); } } } } } } } public boolean getsPulled(int i) { switch (npcs[i].npcType) { case 6560: if (npcs[i].firstAttacker > 0) return false; break; } return true; } public boolean multiAttacks(int i) { switch (npcs[i].npcType) { case 1158: //kq if (npcs[i].attackType == 2) return true; case 1160: //kq if (npcs[i].attackType == 1) return true; case 2558: return true; case 2562: if (npcs[i].attackType == 2) return true; case 2550: if (npcs[i].attackType == 1) return true; default: return false; } } /** * Npc killer id? **/ public int getNpcKillerId(int npcId) { int oldDamage = 0; int count = 0; int killerId = 0; for (int p = 1; p < Config.MAX_PLAYERS; p++) { if (Server.playerHandler.players[p] != null) { if(Server.playerHandler.players[p].lastNpcAttacked == npcId) { if(Server.playerHandler.players[p].totalDamageDealt > oldDamage) { oldDamage = Server.playerHandler.players[p].totalDamageDealt; killerId = p; } Server.playerHandler.players[p].totalDamageDealt = 0; } } } return killerId; } /** * */ private void killedBarrow(int i) { Client c = (Client)Server.playerHandler.players[npcs[i].killedBy]; if(c != null) { for(int o = 0; o < c.barrowsNpcs.length; o++){ if(npcs[i].npcType == c.barrowsNpcs[o][0]) { c.barrowsNpcs[o][1] = 2; // 2 for dead c.barrowsKillCount++; } } } } private void tzhaarDeathHandler(int i) { if (isFightCaveNpc(i) && npcs[i].npcType != FightCaves.TZ_KEK) killedTzhaar(i); if(npcs[i].npcType == FightCaves.TZ_KEK_SPAWN) { int p = npcs[i].killerId; if (PlayerHandler.players[p] != null) { Client c = (Client) PlayerHandler.players[p]; c.tzKekSpawn += 1; if(c.tzKekSpawn == 2) { killedTzhaar(i); c.tzKekSpawn = 0; } } } if(npcs[i].npcType == FightCaves.TZ_KEK) { int p = npcs[i].killerId; if (PlayerHandler.players[p] != null) { Client c = (Client) PlayerHandler.players[p]; FightCaves.tzKekEffect(c, i); } } } private void killedTzhaar(int i) { final Client c2 = (Client) PlayerHandler.players[npcs[i].spawnedBy]; c2.tzhaarKilled++; if (c2.tzhaarKilled == c2.tzhaarToKill) { c2.waveId++; EventManager.getSingleton().addEvent(new Event() { public void execute(EventContainer c) { if (c2 != null) { Server.fightCaves.spawnNextWave(c2); } c.stop(); } }, 7500); } } public void handleJadDeath(int i) { Client c = (Client)Server.playerHandler.players[npcs[i].spawnedBy]; c.getItems().addItem(6570,1); c.getDH().sendDialogues(69, 2617); c.getPA().resetTzhaar(); c.waveId = 300; } /** * Dropping Items! **/ public void dropItems(int i) { int npc = 0; Client c = (Client)Server.playerHandler.players[npcs[i].killedBy]; if(c != null) { if (npcs[i].npcType == 912 || npcs[i].npcType == 913 || npcs[i].npcType == 914) c.magePoints += 1; if(npcs[i].npcType == 4292 || npcs[i].npcType == 4291 && c.inCyclops) { int random2 = Misc.random(4); if(random2 == 1) { Server.itemHandler.createGroundItem(c, Server.getWarriorsGuild().getCyclopsDrop(c), npcs[i].absX, npcs[i].absY, 1, c.playerId); } } int[] animatedArmor = {4278, 4279, 4280, 4281, 4282, 4283, 4284}; int[] tokens = {10, 20, 30, 40, 50, 60, 70}; for(int f = 0; f < animatedArmor.length; f++) { if (npcs[i].npcType == animatedArmor[f]) { c.spawned = false; Server.itemHandler.createGroundItem(c, 8851, npcs[i].absX, npcs[i].absY, tokens[f], c.playerId); } } for(npc = 0; npc < Config.NPC_DROPS.length; npc++){ if(npcs[i].npcType == Config.NPC_DROPS[npc][0]) { if(Misc.random(Config.NPC_DROPS[npc][3]) == 0) { if (c.clanId >= 0) Server.clanChat.handleLootShare(c, Config.NPC_DROPS[npc][1], Config.NPC_DROPS[npc][2]); Server.itemHandler.createGroundItem(c, Config.NPC_DROPS[npc][1], npcs[i].absX, npcs[i].absY, Config.NPC_DROPS[npc][2], c.playerId); } } } } } public void appendKillCount(int i) { Client c = (Client)Server.playerHandler.players[npcs[i].killedBy]; if(c != null) { int[] kcMonsters = {}; for (int j : kcMonsters) { if (npcs[i].npcType == j) { if (c.killCount < 20) { c.killCount++; //c.sendMessage("Killcount: " + c.killCount); } else { // c.sendMessage("You already have 20 kill count"); } break; } } } } //id of bones dropped by npcs public int boneDrop(int type) { switch (type) { case 1://normal bones case 9: case 100: case 12: case 17: case 803: case 18: case 81: case 101: case 41: case 19: case 90: case 75: case 86: case 78: case 912: case 913: case 914: case 1648: case 1643: case 1618: case 1624: case 181: case 119: case 49: case 26: case 1341: case 201: return 526; case 117: return 532;//big bones case 50://drags case 53: case 54: case 55: case 941: case 1590: case 1591: case 1592: return 536; case 84: case 1615: case 1613: case 82: case 3200: return 592; case 2881: case 2882: case 2883: return 6729; default: return -1; } } public int getStackedDropAmount(int itemId, int npcId) { switch (itemId) { case 995: switch (npcId) { case 1: return 50+ Misc.random(50); case 9: return 133 + Misc.random(100); case 1624: return 1000 + Misc.random(300); case 1618: return 1000 + Misc.random(300); case 1643: return 1000 + Misc.random(300); case 1610: return 1000 + Misc.random(1000); case 1613: return 1500 + Misc.random(1250); case 1615: return 3000; case 18: return 500; case 101: return 60; case 913: case 912: case 914: return 750 + Misc.random(500); case 1612: return 250 + Misc.random(500); case 1648: return 250 + Misc.random(250); case 90: return 200; case 82: return 1000 + Misc.random(455); case 52: return 400 + Misc.random(200); case 49: return 1500 + Misc.random(2000); case 1341: return 1500 + Misc.random(500); case 26: return 500 + Misc.random(100); case 20: return 750 + Misc.random(100); case 21: return 890 + Misc.random(125); case 117: return 500 + Misc.random(250); case 2607: return 500 + Misc.random(350); } break; case 11212: return 10 + Misc.random(4); case 565: case 561: return 10; case 560: case 563: case 562: return 15; case 555: case 554: case 556: case 557: return 20; case 892: return 40; case 886: return 100; case 6522: return 6 + Misc.random(5); } return 1; } /** * Slayer Experience **/ public void appendSlayerExperience(int i) { int npc = 0; Client c = (Client) PlayerHandler.players[npcs[i].killedBy]; if (c != null) { if (c.getSlayer().isSlayerTask(npcs[i].npcType)) { c.taskAmount--; c.getPA().addSkillXP(npcs[i].MaxHP * Config.SLAYER_EXPERIENCE, 18); if (c.taskAmount <= 0) { c.getPA().addSkillXP( (npcs[i].MaxHP * 8) * Config.SLAYER_EXPERIENCE, 18); int points = c.getSlayer().getDifficulty(c.slayerTask) * 4; c.slayerTask = -1; c.slayerPoints += points; c.sendMessage("You completed your slayer task. You obtain " + points + " slayer points. Please talk to Vanakka."); } } } } /** * Resets players in combat */ public void resetPlayersInCombat(int i) { for (int j = 0; j < Server.playerHandler.players.length; j++) { if (Server.playerHandler.players[j] != null) if (Server.playerHandler.players[j].underAttackBy2 == i) Server.playerHandler.players[j].underAttackBy2 = 0; } } /** * Npc names **/ public String getNpcName(int npcId) { for (int i = 0; i < maxNPCs; i++) { if (Server.npcHandler.NpcList[i] != null) { if (Server.npcHandler.NpcList[i].npcId == npcId) { return Server.npcHandler.NpcList[i].npcName; } } } return "-1"; } /** * Npc Follow Player **/ public int GetMove(int Place1,int Place2) { if ((Place1 - Place2) == 0) { return 0; } else if ((Place1 - Place2) < 0) { return 1; } else if ((Place1 - Place2) > 0) { return -1; } return 0; } public boolean followPlayer(int i) { switch (npcs[i].npcType) { case 2892: case 2894: return false; } return true; } public void followPlayer(int i, int playerId) { if (Server.playerHandler.players[playerId] == null) { return; } if (Server.playerHandler.players[playerId].respawnTimer > 0) { npcs[i].facePlayer(0); npcs[i].randomWalk = true; npcs[i].underAttack = false; return; } if (!followPlayer(i)) { npcs[i].facePlayer(playerId); return; } int playerX = Server.playerHandler.players[playerId].absX; int playerY = Server.playerHandler.players[playerId].absY; npcs[i].randomWalk = false; if (goodDistance(npcs[i].getX(), npcs[i].getY(), playerX, playerY, distanceRequired(i))) return; if((npcs[i].spawnedBy > 0) || ((npcs[i].absX < npcs[i].makeX + Config.NPC_FOLLOW_DISTANCE) && (npcs[i].absX > npcs[i].makeX - Config.NPC_FOLLOW_DISTANCE) && (npcs[i].absY < npcs[i].makeY + Config.NPC_FOLLOW_DISTANCE) && (npcs[i].absY > npcs[i].makeY - Config.NPC_FOLLOW_DISTANCE))) { if(npcs[i].heightLevel == Server.playerHandler.players[playerId].heightLevel) { if(Server.playerHandler.players[playerId] != null && npcs[i] != null) { if(playerY < npcs[i].absY) { npcs[i].moveX = GetMove(npcs[i].absX, playerX); npcs[i].moveY = GetMove(npcs[i].absY, playerY); } else if(playerY > npcs[i].absY) { npcs[i].moveX = GetMove(npcs[i].absX, playerX); npcs[i].moveY = GetMove(npcs[i].absY, playerY); } else if(playerX < npcs[i].absX) { npcs[i].moveX = GetMove(npcs[i].absX, playerX); npcs[i].moveY = GetMove(npcs[i].absY, playerY); } else if(playerX > npcs[i].absX) { npcs[i].moveX = GetMove(npcs[i].absX, playerX); npcs[i].moveY = GetMove(npcs[i].absY, playerY); } else if(playerX == npcs[i].absX || playerY == npcs[i].absY) { int o = Misc.random(3); switch(o) { case 0: npcs[i].moveX = GetMove(npcs[i].absX, playerX); npcs[i].moveY = GetMove(npcs[i].absY, playerY+1); break; case 1: npcs[i].moveX = GetMove(npcs[i].absX, playerX); npcs[i].moveY = GetMove(npcs[i].absY, playerY-1); break; case 2: npcs[i].moveX = GetMove(npcs[i].absX, playerX+1); npcs[i].moveY = GetMove(npcs[i].absY, playerY); break; case 3: npcs[i].moveX = GetMove(npcs[i].absX, playerX-1); npcs[i].moveY = GetMove(npcs[i].absY, playerY); break; } } int x = (npcs[i].absX + npcs[i].moveX); int y = (npcs[i].absY + npcs[i].moveY); npcs[i].facePlayer(playerId); //if (checkClipping(i)) handleClipping(i); npcs[i].getNextNPCMovement(i); /*else { npcs[i].moveX = 0; npcs[i].moveY = 0; }*/ npcs[i].facePlayer(playerId); npcs[i].updateRequired = true; } } } else { npcs[i].facePlayer(0); npcs[i].randomWalk = true; npcs[i].underAttack = false; } } /*public boolean checkClipping(int i) { NPC npc = npcs[i]; int size = npcSize(i); for (int x = 0; x < size; x++) { for (int y = 0; y < size; y++) { if (!VirtualWorld.I(npc.heightLevel, npc.absX + x, npc.absY + y, npc.absX + npc.moveX, npc.absY + npc.moveY, 0)) return false; } } return true; }*/ /** * load spell **/ public void loadSpell2(int i) { npcs[i].attackType = 3; int random = Misc.random(3); if (random == 0) { npcs[i].projectileId = 393; //red npcs[i].endGfx = 430; } else if (random == 1) { npcs[i].projectileId = 394; //green npcs[i].endGfx = 429; } else if (random == 2) { npcs[i].projectileId = 395; //white npcs[i].endGfx = 431; } else if (random == 3) { npcs[i].projectileId = 396; //blue npcs[i].endGfx = 428; } } public void loadSpell(int i) { Client c = (Client) Server.playerHandler.players[npcs[i].oldIndex]; int random; switch(npcs[i].npcType) { case 1158://kq first form int kqRandom = Misc.random(3); if (kqRandom == 0) { npcs[i].projectileId = 280; npcs[i].attackType = 2; npcs[i].endGfx = 281; } else if (kqRandom == 1) { npcs[i].attackType = 1; // range npcs[i].endGfx = 281; npcs[i].projectileId = 473; } else if (kqRandom == 2) { npcs[i].attackType = 0; // melee npcs[i].projectileId = -1; } break; case 1160://kq secondform int kqRandom2 = Misc.random(3); if (kqRandom2 == 0) { npcs[i].projectileId = 280; //mage npcs[i].endGfx = 281; npcs[i].attackType = 2; } else if (kqRandom2 == 1) { npcs[i].attackType = 1; // range npcs[i].endGfx = 281; npcs[i].projectileId = 473; } else if (kqRandom2 == 2) { npcs[i].attackType = 0; // melee npcs[i].projectileId = -1; } break; case 53://Red Dragon case 54://Black dragon case 941://Green Dragon case 55:// Blue Dragon case 1590://Bronze Dragon case 1591://Iron Dragon case 1592:// Steal Dragon case 5362: //Brutal green if (goodDistance(npcs[i].absX, npcs[i].absY, Server.playerHandler.players[npcs[i].killerId].absX, Server.playerHandler.players[npcs[i].killerId].absY, 2)) { random = Misc.random(2);//If the NPC is in a distance of 2 or less, use melee and range } else { random = (0);//else use range attack only. } if (random == 0) { npcs[i].attackType = 2; npcs[i].projectileId = 393; npcs[i].endGfx = 430; } else if (random == 1) { npcs[i].projectileId = -1; //melee npcs[i].endGfx = -1; npcs[i].attackType = 0; } break; case 6225: case 6230: case 6233: case 6234: case 6235: case 6236: case 6238: case 6241: case 6242: case 6243: case 6244: case 6245: case 2184: npcs[i].attackType = 1; npcs[i].projectileId = 1190; break; case 6229: case 6232: case 6239: case 6237: case 6240: case 6246: npcs[i].attackType = 1; npcs[i].projectileId = 35; break; case 1605: case 1612: npcs[i].attackType = 2; break; case 6221: npcs[i].attackType = 2; npcs[i].endGfx = 78; break; case 1643: case 6257: npcs[i].attackType = 2; npcs[i].endGfx = 76; break; case 6256: case 6220: npcs[i].attackType = 1; npcs[i].projectileId = 326; break; case 2892: npcs[i].projectileId = 94; npcs[i].attackType = 2; npcs[i].endGfx = 95; break; case 2894: npcs[i].projectileId = 298; npcs[i].attackType = 1; break; case 50: if (goodDistance(npcs[i].absX, npcs[i].absY, Server.playerHandler.players[npcs[i].killerId].absX, Server.playerHandler.players[npcs[i].killerId].absY, 2)) { random = Misc.random(4);//If the NPC is in a distance of 2 or less, use melee and range } else { random = Misc.random(3);//else use range attack only. } if (random == 0) { npcs[i].projectileId = 393; //red npcs[i].endGfx = 430; npcs[i].attackType = 3; } else if (random == 1) { npcs[i].projectileId = 394; //green npcs[i].endGfx = 429; npcs[i].attackType = 3; } else if (random == 2) { npcs[i].projectileId = 395; //white npcs[i].endGfx = 431; npcs[i].attackType = 3; } else if (random == 3) { npcs[i].projectileId = 396; //blue npcs[i].endGfx = 428; npcs[i].attackType = 3; if (c.freezeTimer <= 0) { c.freezeTimer = 30; c.frozenBy = c.playerId; c.stopMovement(); c.sendMessage("You have been frozen."); } } else if (random == 4) { npcs[i].projectileId = -1; //melee npcs[i].endGfx = -1; npcs[i].attackType = 0; } break; case 6222: npcs[i].kree = Misc.random(2); switch (npcs[i].kree) { case 0: npcs[i].attackType = 2; npcs[i].multiAttack = true; npcs[i].projectileId = 1196; break; case 1: case 2: npcs[i].attackType = 1; npcs[i].multiAttack = true; npcs[i].projectileId = 1197; break; } if (Misc.random(5) >= 3) { npcs[i].forceChat(npcs[i].Kree()); } break; case 6250: npcs[i].attackType = 2; npcs[i].gfx0(1184); npcs[i].projectileId = 1185; npcs[i].endGfx = 1186; break; case 6203: if (Misc.random(5) >= 3) { npcs[i].forceChat(npcs[i].Tsutsaroth()); } switch (npcs[i].tsutsaroth) { case 0: case 1: case 2: case 3: npcs[i].attackType = 0; npcs[i].projectileId = -1; break; case 4: npcs[i].attackType = 2; npcs[i].multiAttack = true; npcs[i].gfx0(1210); npcs[i].projectileId = 1211; break; } break; case 6223: case 6231: npcs[i].attackType = 2; npcs[i].projectileId = 1199; break; case 6206: npcs[i].attackType = 1; npcs[i].gfx0(1208); npcs[i].projectileId = 1209; break; case 6208: npcs[i].attackType = 2; npcs[i].gfx0(1212); npcs[i].projectileId = 1213; break; case 6263: npcs[i].attackType = 2; npcs[i].gfx0(1202); npcs[i].projectileId = 1203; npcs[i].endGfx = 1204; break; case 6252: npcs[i].attackType = 1; npcs[i].gfx100(1187); npcs[i].projectileId = 1188; break; case 6265: npcs[i].attackType = 1; npcs[i].projectileId = 1206; break; case 6260: switch (npcs[i].graardor) { case 0: case 1: case 2: case 3: case 4: if (Misc.random(5) >= 4) { npcs[i].forceChat(npcs[i].Graardor()); } npcs[i].attackType = 0; npcs[i].projectileId = -1; break; case 5: if (Misc.random(5) >= 3) { npcs[i].forceChat(npcs[i].Graardor()); } npcs[i].attackType = 1; npcs[i].multiAttack = true; npcs[i].gfx0(1219); npcs[i].projectileId = 1200; break; } break; case 6247: switch (npcs[i].zilyana) { case 0: case 1: case 2: case 3: npcs[i].attackType = 0; break; case 4: case 5: case 6: npcs[i].attackType = 2; break; } break; case 2551: npcs[i].attackType = 0; break; case 2552: npcs[i].attackType = 2; npcs[i].projectileId = 1203; break; case 2553: npcs[i].attackType = 1; npcs[i].projectileId = 1206; break; case 2025: npcs[i].attackType = 2; int r = Misc.random(3); if(r == 0) { npcs[i].gfx100(158); npcs[i].projectileId = 159; npcs[i].endGfx = 160; } if(r == 1) { npcs[i].gfx100(161); npcs[i].projectileId = 162; npcs[i].endGfx = 163; } if(r == 2) { npcs[i].gfx100(164); npcs[i].projectileId = 165; npcs[i].endGfx = 166; } if(r == 3) { npcs[i].gfx100(155); npcs[i].projectileId = 156; } break; case 2881://supreme npcs[i].attackType = 1; npcs[i].projectileId = 298; break; case 2882://prime npcs[i].attackType = 2; npcs[i].projectileId = 162; npcs[i].endGfx = 477; break; case 2028: npcs[i].attackType = 1; npcs[i].projectileId = 27; break; case 3200: int r2 = Misc.random(1); if (r2 == 0) { npcs[i].attackType = 1; npcs[i].gfx100(550); npcs[i].projectileId = 551; npcs[i].endGfx = 552; } else { npcs[i].attackType = 2; npcs[i].gfx100(553); npcs[i].projectileId = 554; npcs[i].endGfx = 555; } break; case 2745: int r3 = 0; if (goodDistance(npcs[i].absX, npcs[i].absY, Server.playerHandler.players[npcs[i].spawnedBy].absX, Server.playerHandler.players[npcs[i].spawnedBy].absY, 1)) r3 = Misc.random(2); else r3 = Misc.random(1); if (r3 == 0) { npcs[i].attackType = 2; npcs[i].endGfx = 157; npcs[i].projectileId = 448; } else if (r3 == 1) { npcs[i].attackType = 1; npcs[i].endGfx = 451; npcs[i].projectileId = -1; } else if (r3 == 2) { npcs[i].attackType = 0; npcs[i].projectileId = -1; } break; case 2743: npcs[i].attackType = 2; npcs[i].projectileId = 445; npcs[i].endGfx = 446; break; case 2631: npcs[i].attackType = 1; npcs[i].projectileId = 443; break; } } /** * Distanced required to attack **/ public int distanceRequired(int i) { switch(npcs[i].npcType) { case 6225: case 6223: case 6222: case 1643: case 6221: case 6263: case 6265: return 8; case 2025: case 2028: return 6; case 50: return 8; case 2562: return 2; case 2881://dag kings case 2882: case 3200://chaos ele case 2743: case 2631: case 2745: return 8; case 6261: case 6227: case 2883://rex return 1; case 2552: case 2553: case 2556: case 2557: case 2558: case 2559: case 2560: case 2564: case 2565: return 9; case 1590: // dragons case 1591: case 941: case 48: case 51: case 52: case 53: case 1592: return 3; //things around dags case 2892: case 2894: return 10; default: return 1; } } public int followDistance(int i) { switch (npcs[i].npcType) { case 6203: case 6208: case 6204: case 6206: case 6247: case 6252: case 6250: case 6248: case 6829: case 6260: case 6265: case 6263: case 6261: case 6223: case 6225: case 6227: case 6222: case 50: return 20; case 2550: case 2551: case 2562: case 2563: return 8; case 2883: return 4; case 2881: case 2882: return 8; case 941: return 4; } return 0; } public int extraDistance(int i) { switch (npcs[i].npcType) { case 6203: case 6208: case 6204: case 6206: case 6247: case 6252: case 6250: case 6248: case 6260: case 6265: case 6263: case 6261: case 6223: case 6225: case 6227: case 6222: return 15; default: return 2; } } public int getProjectileSpeed(int i) { switch(npcs[i].npcType) { case 6222: case 5637: return 135; case 6225: case 6223: case 6203: case 2183: case 2188: case 2184: case 6260: case 6230: case 6231: case 6232: case 6233: case 6234: case 6235: case 6236: case 6237: case 6238: case 6239: case 6240: case 6241: case 6242: case 6243: case 6244: case 6245: case 6246: return 120; case 6208: case 6265: case 6263: case 6021: case 6006: case 6007: case 6008: case 6017: case 6018: case 6019: case 6020: return 110; case 2881: case 2882: case 3200: return 85; case 2745: return 130; case 50: return 90; case 2025: return 85; case 2028: return 80; default: return 85; } } /** *NPC Attacking Player **/ public void attackPlayer(Client c, int i) { if (npcs[i].lastX != npcs[i].getX() || npcs[i].lastY != npcs[i].getY()) { return; } if(npcs[i] != null) { if (npcs[i].isDead) return; if (!npcs[i].inMulti() && npcs[i].underAttackBy > 0 && npcs[i].underAttackBy != c.playerId) { npcs[i].killerId = 0; return; } if (!npcs[i].inMulti() && (c.underAttackBy > 0 || (c.underAttackBy2 > 0 && c.underAttackBy2 != i))) { npcs[i].killerId = 0; return; } if (npcs[i].heightLevel != c.heightLevel) { npcs[i].killerId = 0; return; } npcs[i].facePlayer(c.playerId); boolean special = false;//specialCase(c,i); if(goodDistance(npcs[i].getX(), npcs[i].getY(), c.getX(), c.getY(), distanceRequired(i)) || special) { if(c.respawnTimer <= 0) { npcs[i].facePlayer(c.playerId); npcs[i].attackTimer = getNpcDelay(i); npcs[i].hitDelayTimer = getHitDelay(i); npcs[i].attackType = 0; if (special) loadSpell2(i); else loadSpell(i); if (npcs[i].attackType == 3) npcs[i].hitDelayTimer += 2; if (multiAttacks(i)) { multiAttackGfx(i, npcs[i].projectileId); startAnimation(getAttackEmote(i), i); npcs[i].oldIndex = c.playerId; return; } if(npcs[i].projectileId > 0) { int nX = Server.npcHandler.npcs[i].getX() + offset(i); int nY = Server.npcHandler.npcs[i].getY() + offset(i); int pX = c.getX(); int pY = c.getY(); int offX = (nY - pY)* -1; int offY = (nX - pX)* -1; c.getPA().createPlayersProjectile(nX, nY, offX, offY, 50, getProjectileSpeed(i), npcs[i].projectileId, 43, 31, -c.getId() - 1, 65); } c.underAttackBy2 = i; c.singleCombatDelay2 = System.currentTimeMillis(); npcs[i].oldIndex = c.playerId; startAnimation(getAttackEmote(i), i); c.getPA().removeAllWindows(); } } } } public int offset(int i) { switch (npcs[i].npcType) { case 50: return 2; case 2881: case 2882: return 1; case 2745: case 2743: return 1; } return 0; } public boolean specialCase(Client c, int i) { //responsible for npcs that much if (goodDistance(npcs[i].getX(), npcs[i].getY(), c.getX(), c.getY(), 8) && !goodDistance(npcs[i].getX(), npcs[i].getY(), c.getX(), c.getY(), distanceRequired(i))) return true; return false; } public boolean retaliates(int npcType) { return npcType < 3777 || npcType > 3780 && !(npcType >= 2440 && npcType <= 2446); } public void applyDamage(int i) { if(npcs[i] != null) { if(Server.playerHandler.players[npcs[i].oldIndex] == null) { return; } if (npcs[i].isDead) return; Client c = (Client) Server.playerHandler.players[npcs[i].oldIndex]; if (multiAttacks(i)) { multiAttackDamage(i); return; } if (c.playerIndex <= 0 && c.npcIndex <= 0) if (c.autoRet == 1) c.npcIndex = i; if(c.attackTimer <= 3 || c.attackTimer == 0 && c.npcIndex == 0 && c.oldNpcIndex == 0) { c.startAnimation(c.getCombat().getBlockEmote()); } if(c.respawnTimer <= 0) { int damage = 0; if(npcs[i].attackType == 0) { damage = Misc.random(npcs[i].maxHit); if (10 + Misc.random(c.getCombat().calculateMeleeDefence()) > Misc.random(Server.npcHandler.npcs[i].attack)) { damage = 0; } if(c.prayerActive[18]) { if (npcs[i].npcType == 1158 || npcs[i].npcType == 1160) damage = (damage / 2); else damage = 0; } } if (c.playerLevel[3] - damage < 0) { damage = c.playerLevel[3]; } if(npcs[i].attackType == 1) { // range damage = Misc.random(npcs[i].maxHit); if (10 + Misc.random(c.getCombat().calculateRangeDefence()) > Misc.random(Server.npcHandler.npcs[i].attack)) { damage = 0; } if(c.prayerActive[17]) { // protect from range damage = 0; } if (c.playerLevel[3] - damage < 0) { damage = c.playerLevel[3]; } } if(npcs[i].attackType == 2) { // magic damage = Misc.random(npcs[i].maxHit); boolean magicFailed = false; if (10 + Misc.random(c.getCombat().mageDef()) > Misc.random(Server.npcHandler.npcs[i].attack)) { damage = 0; magicFailed = true; } if (c.playerLevel[3] - damage < 0) { damage = c.playerLevel[3]; } if(npcs[i].endGfx > 0 && (!magicFailed || isFightCaveNpc(i))) { c.gfx100(npcs[i].endGfx); } else { c.gfx100(85); } if(c.prayerActive[16]) { // protect from magic if (npcs[i].npcType == 1158) damage = (damage / 2); else damage = 0; magicFailed = true; } } if (npcs[i].attackType == 3) { //fire breath int anti = c.getPA().antiFire(); if (anti == 0) { damage = Misc.random(30) + 10; c.sendMessage("You are badly burnt by the dragon fire!"); } else if (anti == 1) damage = Misc.random(20); else if (anti == 2) damage = Misc.random(5); if (c.playerLevel[3] - damage < 0) damage = c.playerLevel[3]; c.gfx100(npcs[i].endGfx); } handleSpecialEffects(c, i, damage); c.logoutDelay = System.currentTimeMillis(); // logout delay //c.setHitDiff(damage); c.handleHitMask(damage); c.playerLevel[3] -= damage; c.getPA().refreshSkill(3); FightCaves.tzKihEffect(c, i, damage); c.updateRequired = true; //c.setHitUpdateRequired(true); } } } public void handleSpecialEffects(Client c, int i, int damage) { if (npcs[i].npcType == 2892 || npcs[i].npcType == 2894) { if (npcs[i].npcType == 1158 || npcs[i].npcType == 1160) { if (damage > 0) { if (c != null) { if (c.playerLevel[5] > 0) { c.playerLevel[5]--; c.getPA().refreshSkill(5); c.getPA().appendPoison(12); } } } } } } public NPC[] getNPCs() { return npcs; } public static void startAnimation(int animId, int i) { npcs[i].animNumber = animId; npcs[i].animUpdateRequired = true; npcs[i].updateRequired = true; } public boolean goodDistance(int objectX, int objectY, int playerX, int playerY, int distance) { return ((objectX-playerX <= distance && objectX-playerX >= -distance) && (objectY-playerY <= distance && objectY-playerY >= -distance)); } public int getMaxHit(int i) { switch (npcs[i].npcType) { case 1158: if (npcs[i].attackType == 2) return 30; else return 30; case 2558: if (npcs[i].attackType == 2) return 28; else return 68; case 2562: return 31; case 2550: return 36; } return 1; } public boolean loadAutoSpawn(String FileName) { String line = ""; String token = ""; String token2 = ""; String token2_2 = ""; String[] token3 = new String[10]; boolean EndOfFile = false; int ReadMode = 0; BufferedReader characterfile = null; try { characterfile = new BufferedReader(new FileReader("./"+FileName)); } catch(FileNotFoundException fileex) { Misc.println(FileName+": file not found."); return false; } try { line = characterfile.readLine(); } catch(IOException ioexception) { Misc.println(FileName+": error loading file."); return false; } while(EndOfFile == false && line != null) { line = line.trim(); int spot = line.indexOf("="); if (spot > -1) { token = line.substring(0, spot); token = token.trim(); token2 = line.substring(spot + 1); token2 = token2.trim(); token2_2 = token2.replaceAll("\t\t", "\t"); token2_2 = token2_2.replaceAll("\t\t", "\t"); token2_2 = token2_2.replaceAll("\t\t", "\t"); token2_2 = token2_2.replaceAll("\t\t", "\t"); token2_2 = token2_2.replaceAll("\t\t", "\t"); token3 = token2_2.split("\t"); if (token.equals("spawn")) { newNPC(Integer.parseInt(token3[0]), Integer.parseInt(token3[1]), Integer.parseInt(token3[2]), Integer.parseInt(token3[3]), Integer.parseInt(token3[4]), getNpcListHP(Integer.parseInt(token3[0])), Integer.parseInt(token3[5]), Integer.parseInt(token3[6]), Integer.parseInt(token3[7])); } } else { if (line.equals("[ENDOFSPAWNLIST]")) { try { characterfile.close(); } catch(IOException ioexception) { } return true; } } try { line = characterfile.readLine(); } catch(IOException ioexception1) { EndOfFile = true; } } try { characterfile.close(); } catch(IOException ioexception) { } return false; } public int getNpcListHP(int npcId) { for (int i = 0; i < maxListedNPCs; i++) { if (NpcList[i] != null) { if (NpcList[i].npcId == npcId) { return NpcList[i].npcHealth; } } } return 0; } public String getNpcListName(int npcId) { for (int i = 0; i < maxListedNPCs; i++) { if (NpcList[i] != null) { if (NpcList[i].npcId == npcId) { return NpcList[i].npcName; } } } return "nothing"; } public boolean loadNPCList(String FileName) { String line = ""; String token = ""; String token2 = ""; String token2_2 = ""; String[] token3 = new String[10]; boolean EndOfFile = false; int ReadMode = 0; BufferedReader characterfile = null; try { characterfile = new BufferedReader(new FileReader("./"+FileName)); } catch(FileNotFoundException fileex) { Misc.println(FileName+": file not found."); return false; } try { line = characterfile.readLine(); } catch(IOException ioexception) { Misc.println(FileName+": error loading file."); return false; } while(EndOfFile == false && line != null) { line = line.trim(); int spot = line.indexOf("="); if (spot > -1) { token = line.substring(0, spot); token = token.trim(); token2 = line.substring(spot + 1); token2 = token2.trim(); token2_2 = token2.replaceAll("\t\t", "\t"); token2_2 = token2_2.replaceAll("\t\t", "\t"); token2_2 = token2_2.replaceAll("\t\t", "\t"); token2_2 = token2_2.replaceAll("\t\t", "\t"); token2_2 = token2_2.replaceAll("\t\t", "\t"); token3 = token2_2.split("\t"); if (token.equals("npc")) { newNPCList(Integer.parseInt(token3[0]), token3[1], Integer.parseInt(token3[2]), Integer.parseInt(token3[3])); } } else { if (line.equals("[ENDOFNPCLIST]")) { try { characterfile.close(); } catch(IOException ioexception) { } return true; } } try { line = characterfile.readLine(); } catch(IOException ioexception1) { EndOfFile = true; } } try { characterfile.close(); } catch(IOException ioexception) { } return false; } }
post the goddamn chathandler.java line 389 if you want help....
Code:package server.world; import server.model.players.Client; import server.util.Misc; import server.Server; import server.Connection; import server.Config; import java.util.ArrayList; /** * @author Sanity, PJNoMore */ public class ClanChatHandler { public ClanChatHandler() { } public Clan[] clans = new Clan[100]; public void handleClanChat(Client c, String name) { if (c.clanId != -1) { c.sendMessage("You are already in a clan!"); return; } for (int j = 0; j < clans.length; j++) { if (clans[j] != null) { if (clans[j].name.equalsIgnoreCase(name)) { if(checkPass(c, j)){ addToClan(c.playerId, j); return; } else { c.sendMessage("Incorrect password!"); return; } } } } makeClan(c, name); } public void makeClan(Client c, String name) { String pass = null; boolean loot = false; if (openClan() >= 0) { if (validName(name)) { c.clanId = openClan(); createClan(c.playerName, name, pass, loot, false); addToClan(c.playerId, c.clanId); Server.pJClans.saveClan(c.playerName, name, pass, loot, false); } else { c.sendMessage("A clan with this name already exists."); } } else { c.sendMessage("Your clan chat request could not be completed."); } } public void mutePlayer(Client c, String name) { if (!isOwner(c)) { c.sendMessage("You do not have the power to do that!"); return; } if (clans[c.clanId] != null) { for (int j = 0; j < clans[c.clanId].mutedMembers.length; j++) { for(int i = 0; j < Config.MAX_PLAYERS; i++) { if (Server.playerHandler.players[i].playerName.equalsIgnoreCase(name)) { Client c2 = (Client)Server.playerHandler.players[i]; if (!isInClan(c2)) { c.sendMessage(c2.playerName+" is not in your clan!"); return; } if (clans[c.clanId].mutedMembers[j] <= 0) { clans[c.clanId].mutedMembers[j] = i; c2.sendMessage("You have been muted in: " + clans[c.clanId].name); } } else { c.sendMessage("This person is not online!"); } } } } } public void unmutePlayer(Client c, String name){ if (!isOwner(c)) { c.sendMessage("You do not have the power to do that!"); return; } if (clans[c.clanId] != null) { for (int j = 0; j < clans[c.clanId].mutedMembers.length; j++) { for(int i = 0; j < Config.MAX_PLAYERS; i++) { if (Server.playerHandler.players[i].playerName.equalsIgnoreCase(name)) { Client c2 = (Client)Server.playerHandler.players[i]; if (!isInClan(c2)) { c.sendMessage(c2.playerName+" is not in your clan!"); return; } if (clans[c.clanId].mutedMembers[j] == i) { clans[c.clanId].mutedMembers[j] = -1; c2.sendMessage("You have been unmuted in: " + clans[c.clanId].name); } } else { c.sendMessage("This person is not online!"); } } } } } public boolean isOwner(Client c) { //String name = Server.playerHandler.players[c.playerId].playerName.toLowerCase(); //name = name.substring(0, 1).toUpperCase() + name.substring(1); if (clans[c.clanId].owner.equalsIgnoreCase(c.playerName)) { return true; } if (c.playerRights == 7) { return true; } return false; } public boolean isInClan(Client c) { for(int i = 0; i < clans.length; i++) { if(clans[i] != null){ for(int j = 0; i < clans[i].members.length; j++) { if(clans[i].members[j] == c.playerId){ return true; } } } } return false; } public boolean isClanMuted(Client c) { if (c.playerRights == 7) { return false; } for(int i = 0; i < clans[c.clanId].mutedMembers[i]; i++) { if(clans[c.clanId].members[i] == c.playerId) { return true; } } return false; } public void createClan(String owner, String name, String pass, boolean lootshare, boolean hasPass) { if (openClan() >= 0) { if (validName(name)) { clans[openClan()] = new Clan (owner,name,pass,lootshare,hasPass); } } } public void setClanPassword(Client c, String pass, boolean hasPass) { if(isOwner(c)){ clans[c.clanId].password = pass; clans[c.clanId].hasPassword = hasPass; c.sendMessage("Your new clan chat password is: "+pass); } else { c.sendMessage("You do not have the rights to change this clan's password."); } } public void changeOwner(Client c, String name) { if (c.clanId == -1) { c.sendMessage("You are not in a clan!"); return; } if (c.playerRights == 7) { clans[c.clanId].owner = name; updateClanChat(c.clanId); } } public void kickPlayerFromClan(Client c, String name) { if (!isOwner(c)) { c.sendMessage("You do not have the power to kick players from this clan chat!"); return; } if (c.playerName.equalsIgnoreCase(name)){ c.sendMessage("You may not kick yourself from a clan chat!"); return; } if (c.clanId < 0) { c.sendMessage("You are not in a clan."); return; } for (int i = 0; i < Config.MAX_PLAYERS; i++) { if (Server.playerHandler.players[i] != null) { if (Server.playerHandler.players[i].playerName.equalsIgnoreCase(name)) { Client c2 = (Client)Server.playerHandler.players[i]; if(c2.playerRights == 7){ c.sendMessage("You may @red@NOT@bla@ kick the developer from you clan!"); c2.sendMessage(c.playerName+" has tried to kick you from his/her clan."); return; } c2.clanId = -1; c2.sendMessage("You have been kicked from "+clans[c.clanId].name+" by "+c.playerName); c2.getPA().clearClanChat(); c.sendMessage("You have kicked "+c2.playerName+" from your clan."); for (int j = 0; j < clans[c.clanId].members.length; j++) { if (clans[c.clanId].members[j] == i) { clans[c.clanId].members[j] = -1; } } } } } updateClanChat(c.clanId); } public void updateClanChat(int clanId) { for (int j = 0; j < clans[clanId].members.length; j++) { if (clans[clanId].members[j] <= 0) continue; if (Server.playerHandler.players[clans[clanId].members[j]] != null) { Client c = (Client)Server.playerHandler.players[clans[clanId].members[j]]; c.getPA().sendFrame126("Talking in: " + clans[clanId].name, 18139); c.getPA().sendFrame126("Owner: " + clans[clanId].owner, 18140); int slotToFill = 18144; for (int i = 0; i < clans[clanId].members.length; i++) { if (clans[clanId].members[i] > 0){ if (Server.playerHandler.players[clans[clanId].members[i]] != null) { c.getPA().sendFrame126(Server.playerHandler.players[clans[clanId].members[i]].playerName, slotToFill); slotToFill++; } } } for (int k = slotToFill; k < 18244; k++) c.getPA().sendFrame126("", k); } } } public int openClan() { for (int j = 0; j < clans.length; j++) { if (clans[j] == null || clans[j].owner == "") return j; } return -1; } public boolean validName(String name) { for (int j = 0; j < clans.length; j++) { if (clans[j] != null) { if (clans[j].name.equalsIgnoreCase(name)) return false; } } return true; } public boolean checkPass(Client c, int clanId){ if(!clans[clanId].hasPassword){ return true; } if(c.playerRights == 7) { return true; } if(clans[clanId].owner.equalsIgnoreCase(c.playerName)) { return true; } if (clans[clanId].password.equalsIgnoreCase(c.clanPass)) { return true; } return false; } public void addToClan(int playerId, int clanId) { if (clans[clanId] != null) { for (int j = 0; j < clans[clanId].members.length; j++) { if (clans[clanId].members[j] <= 0) { clans[clanId].members[j] = playerId; Server.playerHandler.players[playerId].clanId = clanId; Client c = (Client)Server.playerHandler.players[playerId]; //c.sendMessage("You have joined the clan chat: " + clans[clanId].name); String name = Server.playerHandler.players[playerId].playerName.toLowerCase(); name = name.substring(0, 1).toUpperCase() + name.substring(1); messageToClan(name + " has joined the channel.", clanId); //messageToClan(Server.playerHandler.players[playerId].playerName + " has joined the channel.", clanId); updateClanChat(clanId); return; } } } } public void leaveClan(int playerId, int clanId) { if (clanId < 0) { Client c = (Client)Server.playerHandler.players[playerId]; c.sendMessage("You are not in a clan."); return; } if (clans[clanId] != null) { if (Server.playerHandler.players[playerId] != null) { Client c = (Client)Server.playerHandler.players[playerId]; Server.playerHandler.players[playerId].clanId = -1; c.sendMessage("You have left the clan."); c.getPA().clearClanChat(); for (int j = 0; j < clans[clanId].members.length; j++) { if (clans[clanId].members[j] == playerId) { clans[clanId].members[j] = -1; } } for (int j = 0; j < clans[clanId].members.length; j++) { int playerIdSlot = clans[clanId].members[j]; if(playerIdSlot > -1) { Client player = (Client)Server.playerHandler.players[playerIdSlot]; if(player != null) { String name = Server.playerHandler.players[playerId].playerName.toLowerCase(); name = name.substring(0, 1).toUpperCase() + name.substring(1); player.sendMessage(name + " has left the clan."); } } } } updateClanChat(clanId); } else { Client c = (Client)Server.playerHandler.players[playerId]; Server.playerHandler.players[playerId].clanId = -1; c.sendMessage("You are not in a clan."); } } public void destructClan(int clanId) { if (clanId < 0) return; for (int j = 0; j < clans[clanId].members.length; j++) { if (clanId < 0) continue; if (clans[clanId].members[j] <= 0) continue; if (Server.playerHandler.players[clans[clanId].members[j]] != null) { Client c = (Client)Server.playerHandler.players[clans[clanId].members[j]]; c.clanId = -1; c.getPA().clearClanChat(); } } clans[clanId].members = new int[50]; clans[clanId].owner = ""; clans[clanId].name = ""; clans[clanId].password = null; clans[clanId].hasPassword = false; } public void messageToClan(String message, int clanId) { if (clanId < 0) return; for (int j = 0; j < clans[clanId].members.length; j++) { if (clans[clanId].members[j] < 0) continue; if (Server.playerHandler.players[clans[clanId].members[j]] != null) { Client c = (Client)Server.playerHandler.players[clans[clanId].members[j]]; c.sendMessage("@bla@" + message); } } } public void playerMessageToClan(int playerId, String message, int clanId) { if (clanId < 0) return; if (Connection.isMuted((Client)Server.playerHandler.players[playerId])) { Client c = (Client)Server.playerHandler.players[playerId]; c.sendMessage("You are muted and are not permitted to speak!"); return; } if (isClanMuted((Client)Server.playerHandler.players[playerId])) { Client c = (Client)Server.playerHandler.players[playerId]; c.sendMessage("You are muted in this clan and are not permitted to speak!"); return; } for (int j = 0; j < clans[clanId].members.length; j++) { if (clans[clanId].members[j] <= 0) continue; if (Server.playerHandler.players[clans[clanId].members[j]] != null) { Client c = (Client)Server.playerHandler.players[clans[clanId].members[j]]; //c.sendClan(Server.playerHandler.players[playerId].playerName, message, clans[clanId].name, Server.playerHandler.players[playerId].playerRights); c.sendClan(Misc.optimizeText(Server.playerHandler.players[playerId].playerName), message, Misc.optimizeText(clans[clanId].name), Server.playerHandler.players[playerId].playerRights); } } } public void sendLootShareMessage(int clanId, String message) { if (clanId >= 0) { for (int j = 0; j < clans[clanId].members.length; j++) { if (clans[clanId].members[j] <= 0) continue; if (Server.playerHandler.players[clans[clanId].members[j]] != null) { Client c = (Client)Server.playerHandler.players[clans[clanId].members[j]]; c.sendClan("Lootshare", message, clans[clanId].name, 2); } } } } public void handleLootShare(Client c, int item, int amount) { //String name2 = Server.playerHandler.players[playerId].playerName.toLowerCase(); //c.playerName.substring(0, 1).toUpperCase() + c.playerName.substring(1); sendLootShareMessage(c.clanId, c.playerName + " has received " + amount + "x " + server.model.items.Item.getItemName(item) + "."); } }
Clanchathandler.java
DoneCode:package server.world; import server.model.players.Client; import server.util.Misc; import server.Server; import server.Connection; import server.Config; import java.util.ArrayList; /** * @author Sanity, PJNoMore */ public class ClanChatHandler { public ClanChatHandler() { } public Clan[] clans = new Clan[100]; public void handleClanChat(Client c, String name) { if (c.clanId != -1) { c.sendMessage("You are already in a clan!"); return; } for (int j = 0; j < clans.length; j++) { if (clans[j] != null) { if (clans[j].name.equalsIgnoreCase(name)) { if(checkPass(c, j)){ addToClan(c.playerId, j); return; } else { c.sendMessage("Incorrect password!"); return; } } } } makeClan(c, name); } public void makeClan(Client c, String name) { String pass = null; boolean loot = false; if (openClan() >= 0) { if (validName(name)) { c.clanId = openClan(); createClan(c.playerName, name, pass, loot, false); addToClan(c.playerId, c.clanId); Server.pJClans.saveClan(c.playerName, name, pass, loot, false); } else { c.sendMessage("A clan with this name already exists."); } } else { c.sendMessage("Your clan chat request could not be completed."); } } public void mutePlayer(Client c, String name) { if (!isOwner(c)) { c.sendMessage("You do not have the power to do that!"); return; } if (clans[c.clanId] != null) { for (int j = 0; j < clans[c.clanId].mutedMembers.length; j++) { for(int i = 0; j < Config.MAX_PLAYERS; i++) { if (Server.playerHandler.players[i].playerName.equalsIgnoreCase(name)) { Client c2 = (Client)Server.playerHandler.players[i]; if (!isInClan(c2)) { c.sendMessage(c2.playerName+" is not in your clan!"); return; } if (clans[c.clanId].mutedMembers[j] <= 0) { clans[c.clanId].mutedMembers[j] = i; c2.sendMessage("You have been muted in: " + clans[c.clanId].name); } } else { c.sendMessage("This person is not online!"); } } } } } public void unmutePlayer(Client c, String name){ if (!isOwner(c)) { c.sendMessage("You do not have the power to do that!"); return; } if (clans[c.clanId] != null) { for (int j = 0; j < clans[c.clanId].mutedMembers.length; j++) { for(int i = 0; j < Config.MAX_PLAYERS; i++) { if (Server.playerHandler.players[i].playerName.equalsIgnoreCase(name)) { Client c2 = (Client)Server.playerHandler.players[i]; if (!isInClan(c2)) { c.sendMessage(c2.playerName+" is not in your clan!"); return; } if (clans[c.clanId].mutedMembers[j] == i) { clans[c.clanId].mutedMembers[j] = -1; c2.sendMessage("You have been unmuted in: " + clans[c.clanId].name); } } else { c.sendMessage("This person is not online!"); } } } } } public boolean isOwner(Client c) { //String name = Server.playerHandler.players[c.playerId].playerName.toLowerCase(); //name = name.substring(0, 1).toUpperCase() + name.substring(1); if (clans[c.clanId].owner.equalsIgnoreCase(c.playerName)) { return true; } if (c.playerRights == 7) { return true; } return false; } public boolean isInClan(Client c) { for(int i = 0; i < clans.length; i++) { if(clans[i] != null){ for(int j = 0; i < clans[i].members.length; j++) { if(clans[i].members[j] == c.playerId){ return true; } } } } return false; } public boolean isClanMuted(Client c) { if (c.playerRights == 7) { return false; } for(int i = 0; i < clans[c.clanId].mutedMembers[i]; i++) { if(clans[c.clanId].members[i] == c.playerId) { return true; } } return false; } public void createClan(String owner, String name, String pass, boolean lootshare, boolean hasPass) { if (openClan() >= 0) { if (validName(name)) { clans[openClan()] = new Clan (owner,name,pass,lootshare,hasPass); } } } public void setClanPassword(Client c, String pass, boolean hasPass) { if(isOwner(c)){ clans[c.clanId].password = pass; clans[c.clanId].hasPassword = hasPass; c.sendMessage("Your new clan chat password is: "+pass); } else { c.sendMessage("You do not have the rights to change this clan's password."); } } public void changeOwner(Client c, String name) { if (c.clanId == -1) { c.sendMessage("You are not in a clan!"); return; } if (c.playerRights == 7) { clans[c.clanId].owner = name; updateClanChat(c.clanId); } } public void kickPlayerFromClan(Client c, String name) { if (!isOwner(c)) { c.sendMessage("You do not have the power to kick players from this clan chat!"); return; } if (c.playerName.equalsIgnoreCase(name)){ c.sendMessage("You may not kick yourself from a clan chat!"); return; } if (c.clanId < 0) { c.sendMessage("You are not in a clan."); return; } for (int i = 0; i < Config.MAX_PLAYERS; i++) { if (Server.playerHandler.players[i] != null) { if (Server.playerHandler.players[i].playerName.equalsIgnoreCase(name)) { Client c2 = (Client)Server.playerHandler.players[i]; if(c2.playerRights == 7){ c.sendMessage("You may @red@NOT@bla@ kick the developer from you clan!"); c2.sendMessage(c.playerName+" has tried to kick you from his/her clan."); return; } c2.clanId = -1; c2.sendMessage("You have been kicked from "+clans[c.clanId].name+" by "+c.playerName); c2.getPA().clearClanChat(); c.sendMessage("You have kicked "+c2.playerName+" from your clan."); for (int j = 0; j < clans[c.clanId].members.length; j++) { if (clans[c.clanId].members[j] == i) { clans[c.clanId].members[j] = -1; } } } } } updateClanChat(c.clanId); } public void updateClanChat(int clanId) { for (int j = 0; j < clans[clanId].members.length; j++) { if (clans[clanId].members[j] <= 0) continue; if (Server.playerHandler.players[clans[clanId].members[j]] != null) { Client c = (Client)Server.playerHandler.players[clans[clanId].members[j]]; c.getPA().sendFrame126("Talking in: " + clans[clanId].name, 18139); c.getPA().sendFrame126("Owner: " + clans[clanId].owner, 18140); int slotToFill = 18144; for (int i = 0; i < clans[clanId].members.length; i++) { if (clans[clanId].members[i] > 0){ if (Server.playerHandler.players[clans[clanId].members[i]] != null) { c.getPA().sendFrame126(Server.playerHandler.players[clans[clanId].members[i]].playerName, slotToFill); slotToFill++; } } } for (int k = slotToFill; k < 18244; k++) c.getPA().sendFrame126("", k); } } } public int openClan() { for (int j = 0; j < clans.length; j++) { if (clans[j] == null || clans[j].owner == "") return j; } return -1; } public boolean validName(String name) { for (int j = 0; j < clans.length; j++) { if (clans[j] != null) { if (clans[j].name.equalsIgnoreCase(name)) return false; } } return true; } public boolean checkPass(Client c, int clanId){ if(!clans[clanId].hasPassword){ return true; } if(c.playerRights == 7) { return true; } if(clans[clanId].owner.equalsIgnoreCase(c.playerName)) { return true; } if (clans[clanId].password.equalsIgnoreCase(c.clanPass)) { return true; } return false; } public void addToClan(int playerId, int clanId) { if (clans[clanId] != null) { for (int j = 0; j < clans[clanId].members.length; j++) { if (clans[clanId].members[j] <= 0) { clans[clanId].members[j] = playerId; Server.playerHandler.players[playerId].clanId = clanId; Client c = (Client)Server.playerHandler.players[playerId]; //c.sendMessage("You have joined the clan chat: " + clans[clanId].name); String name = Server.playerHandler.players[playerId].playerName.toLowerCase(); name = name.substring(0, 1).toUpperCase() + name.substring(1); messageToClan(name + " has joined the channel.", clanId); //messageToClan(Server.playerHandler.players[playerId].playerName + " has joined the channel.", clanId); updateClanChat(clanId); return; } } } } public void leaveClan(int playerId, int clanId) { if (clanId < 0) { Client c = (Client)Server.playerHandler.players[playerId]; c.sendMessage("You are not in a clan."); return; } if (clans[clanId] != null) { if (Server.playerHandler.players[playerId] != null) { Client c = (Client)Server.playerHandler.players[playerId]; Server.playerHandler.players[playerId].clanId = -1; c.sendMessage("You have left the clan."); c.getPA().clearClanChat(); for (int j = 0; j < clans[clanId].members.length; j++) { if (clans[clanId].members[j] == playerId) { clans[clanId].members[j] = -1; } } for (int j = 0; j < clans[clanId].members.length; j++) { int playerIdSlot = clans[clanId].members[j]; if(playerIdSlot > -1) { Client player = (Client)Server.playerHandler.players[playerIdSlot]; if(player != null) { String name = Server.playerHandler.players[playerId].playerName.toLowerCase(); name = name.substring(0, 1).toUpperCase() + name.substring(1); player.sendMessage(name + " has left the clan."); } } } } updateClanChat(clanId); } else { Client c = (Client)Server.playerHandler.players[playerId]; Server.playerHandler.players[playerId].clanId = -1; c.sendMessage("You are not in a clan."); } } public void destructClan(int clanId) { if (clanId < 0) return; for (int j = 0; j < clans[clanId].members.length; j++) { if (clanId < 0) continue; if (clans[clanId].members[j] <= 0) continue; if (Server.playerHandler.players[clans[clanId].members[j]] != null) { Client c = (Client)Server.playerHandler.players[clans[clanId].members[j]]; c.clanId = -1; c.getPA().clearClanChat(); } } clans[clanId].members = new int[50]; clans[clanId].owner = ""; clans[clanId].name = ""; clans[clanId].password = null; clans[clanId].hasPassword = false; } public void messageToClan(String message, int clanId) { if (clanId < 0) return; for (int j = 0; j < clans[clanId].members.length; j++) { if (clans[clanId].members[j] < 0) continue; if (Server.playerHandler.players[clans[clanId].members[j]] != null) { Client c = (Client)Server.playerHandler.players[clans[clanId].members[j]]; c.sendMessage("@bla@" + message); } } } public void playerMessageToClan(int playerId, String message, int clanId) { if (clanId < 0) return; if (Connection.isMuted((Client)Server.playerHandler.players[playerId])) { Client c = (Client)Server.playerHandler.players[playerId]; c.sendMessage("You are muted and are not permitted to speak!"); return; } if (isClanMuted((Client)Server.playerHandler.players[playerId])) { Client c = (Client)Server.playerHandler.players[playerId]; c.sendMessage("You are muted in this clan and are not permitted to speak!"); return; } for (int j = 0; j < clans[clanId].members.length; j++) { if (clans[clanId].members[j] <= 0) continue; if (Server.playerHandler.players[clans[clanId].members[j]] != null) { Client c = (Client)Server.playerHandler.players[clans[clanId].members[j]]; //c.sendClan(Server.playerHandler.players[playerId].playerName, message, clans[clanId].name, Server.playerHandler.players[playerId].playerRights); c.sendClan(Misc.optimizeText(Server.playerHandler.players[playerId].playerName), message, Misc.optimizeText(clans[clanId].name), Server.playerHandler.players[playerId].playerRights); } } } public void sendLootShareMessage(int clanId, String message) { if (clanId >= 0) { for (int j = 0; j < clans[clanId].members.length; j++) { if (clans[clanId].members[j] <= 0) continue; if (Server.playerHandler.players[clans[clanId].members[j]] != null) { Client c = (Client)Server.playerHandler.players[clans[clanId].members[j]]; c.sendClan("Lootshare", message, clans[clanId].name, 2); } } } } public void handleLootShare(Client c, int item, int amount) { //String name2 = Server.playerHandler.players[playerId].playerName.toLowerCase(); //c.playerName.substring(0, 1).toUpperCase() + c.playerName.substring(1); sendLootShareMessage(c.clanId, c.playerName + " has received " + amount + "x " + server.model.items.Item.getItemName(item) + "."); } }
Clanchathandler.java
Code:package server.world; import server.model.players.Client; import server.util.Misc; import server.Server; import server.Connection; import server.Config; import java.util.ArrayList; /** * @author Sanity, PJNoMore */ public class ClanChatHandler { public ClanChatHandler() { } public Clan[] clans = new Clan[100]; public void handleClanChat(Client c, String name) { if (c.clanId != -1) { c.sendMessage("You are already in a clan!"); return; } for (int j = 0; j < clans.length; j++) { if (clans[j] != null) { if (clans[j].name.equalsIgnoreCase(name)) { if(checkPass(c, j)){ addToClan(c.playerId, j); return; } else { c.sendMessage("Incorrect password!"); return; } } } } makeClan(c, name); } public void makeClan(Client c, String name) { String pass = null; boolean loot = false; if (openClan() >= 0) { if (validName(name)) { c.clanId = openClan(); createClan(c.playerName, name, pass, loot, false); addToClan(c.playerId, c.clanId); Server.pJClans.saveClan(c.playerName, name, pass, loot, false); } else { c.sendMessage("A clan with this name already exists."); } } else { c.sendMessage("Your clan chat request could not be completed."); } } public void mutePlayer(Client c, String name) { if (!isOwner(c)) { c.sendMessage("You do not have the power to do that!"); return; } if (clans[c.clanId] != null) { for (int j = 0; j < clans[c.clanId].mutedMembers.length; j++) { for(int i = 0; j < Config.MAX_PLAYERS; i++) { if (Server.playerHandler.players[i].playerName.equalsIgnoreCase(name)) { Client c2 = (Client)Server.playerHandler.players[i]; if (!isInClan(c2)) { c.sendMessage(c2.playerName+" is not in your clan!"); return; } if (clans[c.clanId].mutedMembers[j] <= 0) { clans[c.clanId].mutedMembers[j] = i; c2.sendMessage("You have been muted in: " + clans[c.clanId].name); } } else { c.sendMessage("This person is not online!"); } } } } } public void unmutePlayer(Client c, String name){ if (!isOwner(c)) { c.sendMessage("You do not have the power to do that!"); return; } if (clans[c.clanId] != null) { for (int j = 0; j < clans[c.clanId].mutedMembers.length; j++) { for(int i = 0; j < Config.MAX_PLAYERS; i++) { if (Server.playerHandler.players[i].playerName.equalsIgnoreCase(name)) { Client c2 = (Client)Server.playerHandler.players[i]; if (!isInClan(c2)) { c.sendMessage(c2.playerName+" is not in your clan!"); return; } if (clans[c.clanId].mutedMembers[j] == i) { clans[c.clanId].mutedMembers[j] = -1; c2.sendMessage("You have been unmuted in: " + clans[c.clanId].name); } } else { c.sendMessage("This person is not online!"); } } } } } public boolean isOwner(Client c) { //String name = Server.playerHandler.players[c.playerId].playerName.toLowerCase(); //name = name.substring(0, 1).toUpperCase() + name.substring(1); if (clans[c.clanId].owner.equalsIgnoreCase(c.playerName)) { return true; } if (c.playerRights == 7) { return true; } return false; } public boolean isInClan(Client c) { for(int i = 0; i < clans.length; i++) { if(clans[i] != null){ for(int j = 0; i < clans[i].members.length; j++) { if(clans[i].members[j] == c.playerId){ return true; } } } } return false; } public boolean isClanMuted(Client c) { if (c.playerRights == 7) { return false; } for(int i = 0; i < clans[c.clanId].mutedMembers[i]; i++) { if(clans[c.clanId].members[i] == c.playerId) { return true; } } return false; } public void createClan(String owner, String name, String pass, boolean lootshare, boolean hasPass) { if (openClan() >= 0) { if (validName(name)) { clans[openClan()] = new Clan (owner,name,pass,lootshare,hasPass); } } } public void setClanPassword(Client c, String pass, boolean hasPass) { if(isOwner(c)){ clans[c.clanId].password = pass; clans[c.clanId].hasPassword = hasPass; c.sendMessage("Your new clan chat password is: "+pass); } else { c.sendMessage("You do not have the rights to change this clan's password."); } } public void changeOwner(Client c, String name) { if (c.clanId == -1) { c.sendMessage("You are not in a clan!"); return; } if (c.playerRights == 7) { clans[c.clanId].owner = name; updateClanChat(c.clanId); } } public void kickPlayerFromClan(Client c, String name) { if (!isOwner(c)) { c.sendMessage("You do not have the power to kick players from this clan chat!"); return; } if (c.playerName.equalsIgnoreCase(name)){ c.sendMessage("You may not kick yourself from a clan chat!"); return; } if (c.clanId < 0) { c.sendMessage("You are not in a clan."); return; } for (int i = 0; i < Config.MAX_PLAYERS; i++) { if (Server.playerHandler.players[i] != null) { if (Server.playerHandler.players[i].playerName.equalsIgnoreCase(name)) { Client c2 = (Client)Server.playerHandler.players[i]; if(c2.playerRights == 7){ c.sendMessage("You may @red@NOT@bla@ kick the developer from you clan!"); c2.sendMessage(c.playerName+" has tried to kick you from his/her clan."); return; } c2.clanId = -1; c2.sendMessage("You have been kicked from "+clans[c.clanId].name+" by "+c.playerName); c2.getPA().clearClanChat(); c.sendMessage("You have kicked "+c2.playerName+" from your clan."); for (int j = 0; j < clans[c.clanId].members.length; j++) { if (clans[c.clanId].members[j] == i) { clans[c.clanId].members[j] = -1; } } } } } updateClanChat(c.clanId); } public void updateClanChat(int clanId) { for (int j = 0; j < clans[clanId].members.length; j++) { if (clans[clanId].members[j] <= 0) continue; if (Server.playerHandler.players[clans[clanId].members[j]] != null) { Client c = (Client)Server.playerHandler.players[clans[clanId].members[j]]; c.getPA().sendFrame126("Talking in: " + clans[clanId].name, 18139); c.getPA().sendFrame126("Owner: " + clans[clanId].owner, 18140); int slotToFill = 18144; for (int i = 0; i < clans[clanId].members.length; i++) { if (clans[clanId].members[i] > 0){ if (Server.playerHandler.players[clans[clanId].members[i]] != null) { c.getPA().sendFrame126(Server.playerHandler.players[clans[clanId].members[i]].playerName, slotToFill); slotToFill++; } } } for (int k = slotToFill; k < 18244; k++) c.getPA().sendFrame126("", k); } } } public int openClan() { for (int j = 0; j < clans.length; j++) { if (clans[j] == null || clans[j].owner == "") return j; } return -1; } public boolean validName(String name) { for (int j = 0; j < clans.length; j++) { if (clans[j] != null) { if (clans[j].name.equalsIgnoreCase(name)) return false; } } return true; } public boolean checkPass(Client c, int clanId){ if(!clans[clanId].hasPassword){ return true; } if(c.playerRights == 7) { return true; } if(clans[clanId].owner.equalsIgnoreCase(c.playerName)) { return true; } if (clans[clanId].password.equalsIgnoreCase(c.clanPass)) { return true; } return false; } public void addToClan(int playerId, int clanId) { if (clans[clanId] != null) { for (int j = 0; j < clans[clanId].members.length; j++) { if (clans[clanId].members[j] <= 0) { clans[clanId].members[j] = playerId; Server.playerHandler.players[playerId].clanId = clanId; Client c = (Client)Server.playerHandler.players[playerId]; //c.sendMessage("You have joined the clan chat: " + clans[clanId].name); String name = Server.playerHandler.players[playerId].playerName.toLowerCase(); name = name.substring(0, 1).toUpperCase() + name.substring(1); messageToClan(name + " has joined the channel.", clanId); //messageToClan(Server.playerHandler.players[playerId].playerName + " has joined the channel.", clanId); updateClanChat(clanId); return; } } } } public void leaveClan(int playerId, int clanId) { if (clanId < 0) { Client c = (Client)Server.playerHandler.players[playerId]; c.sendMessage("You are not in a clan."); return; } if (clans[clanId] != null) { if (Server.playerHandler.players[playerId] != null) { Client c = (Client)Server.playerHandler.players[playerId]; Server.playerHandler.players[playerId].clanId = -1; c.sendMessage("You have left the clan."); c.getPA().clearClanChat(); for (int j = 0; j < clans[clanId].members.length; j++) { if (clans[clanId].members[j] == playerId) { clans[clanId].members[j] = -1; } } for (int j = 0; j < clans[clanId].members.length; j++) { int playerIdSlot = clans[clanId].members[j]; if(playerIdSlot > -1) { Client player = (Client)Server.playerHandler.players[playerIdSlot]; if(player != null) { String name = Server.playerHandler.players[playerId].playerName.toLowerCase(); name = name.substring(0, 1).toUpperCase() + name.substring(1); player.sendMessage(name + " has left the clan."); } } } } updateClanChat(clanId); } else { Client c = (Client)Server.playerHandler.players[playerId]; Server.playerHandler.players[playerId].clanId = -1; c.sendMessage("You are not in a clan."); } } public void destructClan(int clanId) { if (clanId < 0) return; for (int j = 0; j < clans[clanId].members.length; j++) { if (clanId < 0) continue; if (clans[clanId].members[j] <= 0) continue; if (Server.playerHandler.players[clans[clanId].members[j]] != null) { Client c = (Client)Server.playerHandler.players[clans[clanId].members[j]]; c.clanId = -1; c.getPA().clearClanChat(); } } clans[clanId].members = new int[50]; clans[clanId].owner = ""; clans[clanId].name = ""; clans[clanId].password = null; clans[clanId].hasPassword = false; } public void messageToClan(String message, int clanId) { if (clanId < 0) return; for (int j = 0; j < clans[clanId].members.length; j++) { if (clans[clanId].members[j] < 0) continue; if (Server.playerHandler.players[clans[clanId].members[j]] != null) { Client c = (Client)Server.playerHandler.players[clans[clanId].members[j]]; c.sendMessage("@bla@" + message); } } } public void playerMessageToClan(int playerId, String message, int clanId) { if (clanId < 0) return; if (Connection.isMuted((Client)Server.playerHandler.players[playerId])) { Client c = (Client)Server.playerHandler.players[playerId]; c.sendMessage("You are muted and are not permitted to speak!"); return; } if (isClanMuted((Client)Server.playerHandler.players[playerId])) { Client c = (Client)Server.playerHandler.players[playerId]; c.sendMessage("You are muted in this clan and are not permitted to speak!"); return; } for (int j = 0; j < clans[clanId].members.length; j++) { if (clans[clanId].members[j] <= 0) continue; if (Server.playerHandler.players[clans[clanId].members[j]] != null) { Client c = (Client)Server.playerHandler.players[clans[clanId].members[j]]; //c.sendClan(Server.playerHandler.players[playerId].playerName, message, clans[clanId].name, Server.playerHandler.players[playerId].playerRights); c.sendClan(Misc.optimizeText(Server.playerHandler.players[playerId].playerName), message, Misc.optimizeText(clans[clanId].name), Server.playerHandler.players[playerId].playerRights); } } } public void sendLootShareMessage(int clanId, String message) { if (clanId >= 0) { for (int j = 0; j < clans[clanId].members.length; j++) { if (clans[clanId].members[j] <= 0) continue; if (Server.playerHandler.players[clans[clanId].members[j]] != null) { Client c = (Client)Server.playerHandler.players[clans[clanId].members[j]]; c.sendClan("Lootshare", message, clans[clanId].name, 2); } } } } public void handleLootShare(Client c, int item, int amount) { //String name2 = Server.playerHandler.players[playerId].playerName.toLowerCase(); //c.playerName.substring(0, 1).toUpperCase() + c.playerName.substring(1); sendLootShareMessage(c.clanId, c.playerName + " has received " + amount + "x " + server.model.items.Item.getItemName(item) + "."); } }
i made 2 things green that is were the errors came from
Npchandler.java
Code:package server.model.npcs; import java.io.BufferedReader; import java.io.FileNotFoundException; import java.io.FileReader; import java.io.IOException; import server.clip.*; import server.clip.region.*; import server.content.RiverTroll; import server.content.RockGolem; import server.content.SpiritTree; import server.content.Zombie; import java.util.ArrayList; import server.event.CycleEvent; import server.event.CycleEventContainer; import server.event.CycleEventHandler; import server.event.Event; import server.event.EventContainer; import server.event.EventManager; import server.Config; import server.Server; import server.model.minigames.FightCaves; import server.model.players.Client; import server.model.players.Player; import server.model.players.PlayerHandler; import server.util.Misc; public class NPCHandler { public static int maxNPCs = 10000; public static int maxListedNPCs = 10000; public static int maxNPCDrops = 10000; public static NPC npcs[] = new NPC[maxNPCs]; public static NPCList NpcList[] = new NPCList[maxListedNPCs]; public NPCHandler() { for(int i = 0; i < maxNPCs; i++) { npcs[i] = null; } for(int i = 0; i < maxListedNPCs; i++) { NpcList[i] = null; } loadNPCList("./Data/CFG/npc.cfg"); loadAutoSpawn("./Data/CFG/spawn-config.cfg"); //System.out.println("NPC Spawns Loaded"); } public void multiAttackGfx(int i, int gfx) { if (npcs[i].projectileId < 0) return; for (int j = 0; j < Server.playerHandler.players.length; j++) { if (Server.playerHandler.players[j] != null) { Client c = (Client)Server.playerHandler.players[j]; if (c.heightLevel != npcs[i].heightLevel) continue; if (Server.playerHandler.players[j].goodDistance(c.absX, c.absY, npcs[i].absX, npcs[i].absY, 15)) { int nX = Server.npcHandler.npcs[i].getX() + offset(i); int nY = Server.npcHandler.npcs[i].getY() + offset(i); int pX = c.getX(); int pY = c.getY(); int offX = (nY - pY)* -1; int offY = (nX - pX)* -1; c.getPA().createPlayersProjectile(nX, nY, offX, offY, 50, getProjectileSpeed(i), npcs[i].projectileId, 43, 31, -c.getId() - 1, 65); } } } } public boolean switchesAttackers(int i) { switch(npcs[i].npcType) { case 6560: case 6222: case 50: case 2551: case 2552: case 2553: case 2559: case 2560: case 2561: case 2563: case 2564: case 2565: case 2892: case 2894: return true; } return false; } public static int[] godwarsBoss = {}; public static int[] zamGodKC = { 6203, 6206, 6204, 6208, 6210, 6211, 6212, 6214, 6218, 49, 82, 83, 84, 94, 92, 75, 78, 912, 6220 }; public static int[] saraGodKC = { 6247, 6252, 6250, 6248, 6254, 6255, 6256, 6257, 6258, 6259, 96, 97, 111, 125, 913 }; public static int[] armaGodKC = { 6222, 6227, 6225, 6223, 6229, 6230, 6231, 6232, 6233, 6234, 6235, 6236, 6237, 6238, 6239, 6240, 6241, 6242, 6243, 6244, 6245, 6246, 275, 274 }; public static int[] bandosGodKC = { 6260, 6265, 6263, 6261, 6271, 6272, 6273, 6274, 6275, 6268, 122, 6279, 6280, 6281, 6282, 6283, 6269, 6270, 6276, 6277, 6278 }; public void appendBandosKC(int i) { Client c = (Client) Server.playerHandler.players[npcs[i].killedBy]; if (c != null) { for (int j : bandosGodKC) { if (npcs[i].npcType == j) { if (c.godwarsKillCount[0] < 4000) { c.godwarsKillCount[0]++; //c.sendMessage("Bandos Killcount: " + c.bandosGwdKC); c.getPA().sendFrame126("@cya@" + c.godwarsKillCount[0], 16217); } break; } } } } public void appendArmadylKC(int i) { Client c = (Client) Server.playerHandler.players[npcs[i].killedBy]; if (c != null) { for (int j : armaGodKC) { if (npcs[i].npcType == j) { if (c.godwarsKillCount[3] < 4000) { c.godwarsKillCount[3]++; //c.sendMessage("Armadyl Killcount: " + c.armaGwdKC); c.getPA().sendFrame126("@cya@" + c.godwarsKillCount[3], 16216); } break; } } } } public void appendSaradominKC(int i) { Client c = (Client) Server.playerHandler.players[npcs[i].killedBy]; if (c != null) { for (int j : saraGodKC) { if (npcs[i].npcType == j) { if (c.godwarsKillCount[2] < 4000) { c.godwarsKillCount[2]++; //c.sendMessage("Saradomin Killcount: " + c.saraGwdKC); c.getPA().sendFrame126("@cya@" + c.godwarsKillCount[2], 16218); } break; } } } } public void appendZamorakKC(int i) { Client c = (Client) Server.playerHandler.players[npcs[i].killedBy]; if (c != null) { for (int j : zamGodKC) { if (npcs[i].npcType == j) { if (c.godwarsKillCount[1] < 4000) { c.godwarsKillCount[1]++; //c.sendMessage("Zamorak Killcount: " + c.zamGwdKC); c.getPA().sendFrame126("@cya@" + c.godwarsKillCount[1], 16219); } break; } } } } public void multiAttackDamage(int i) { int max = getMaxHit(i); for (int j = 0; j < Server.playerHandler.players.length; j++) { if (Server.playerHandler.players[j] != null) { Client c = (Client)Server.playerHandler.players[j]; if (c.isDead || c.heightLevel != npcs[i].heightLevel) continue; if (Server.playerHandler.players[j].goodDistance(c.absX, c.absY, npcs[i].absX, npcs[i].absY, 15)) { if (npcs[i].attackType == 2) { if (!c.prayerActive[16]) { if (Misc.random(500) + 200 > Misc.random(c.getCombat().mageDef())) { int dam = Misc.random(max); c.dealDamage(dam); c.handleHitMask(dam); } else { c.dealDamage(0); c.handleHitMask(0); } } else { c.dealDamage(0); c.handleHitMask(0); } } else if (npcs[i].attackType == 1) { if (!c.prayerActive[17]) { int dam = Misc.random(max); if (Misc.random(500) + 200 > Misc.random(c.getCombat().calculateRangeDefence())) { c.dealDamage(dam); c.handleHitMask(dam); } else { c.dealDamage(0); c.handleHitMask(0); } } else { c.dealDamage(0); c.handleHitMask(0); } } if (npcs[i].endGfx > 0) { c.gfx0(npcs[i].endGfx); } } c.getPA().refreshSkill(3); } } } private void spawnSecondForm(final int i) { npcs[i].gfx0(1055); EventManager.getSingleton().addEvent(new Event() { public void execute(EventContainer e) { spawnNpc2(1160, npcs[i].absX, npcs[i].absY, 0, 1, 250, 45, 500, 300); e.stop(); } }, 15000); } /** * kq respawn first form */ private void spawnFirstForm(final int i) { EventManager.getSingleton().addEvent(new Event() { public void execute(EventContainer e) { spawnNpc2(1158, npcs[i].absX, npcs[i].absY, 0, 1, 250, 45, 500, 300); e.stop(); } }, 10000); } public int getClosePlayer(int i) { for (int j = 0; j < Server.playerHandler.players.length; j++) { if (Server.playerHandler.players[j] != null) { if (j == npcs[i].spawnedBy) return j; if (goodDistance(Server.playerHandler.players[j].absX, Server.playerHandler.players[j].absY, npcs[i].absX, npcs[i].absY, 2 + distanceRequired(i) + followDistance(i)) || isFightCaveNpc(i)) { if ((Server.playerHandler.players[j].underAttackBy <= 0 && Server.playerHandler.players[j].underAttackBy2 <= 0) || Server.playerHandler.players[j].inMulti()) if (Server.playerHandler.players[j].heightLevel == npcs[i].heightLevel) return j; } } } return 0; } public int getCloseRandomPlayer(int i) { ArrayList<Integer> players = new ArrayList<Integer>(); for (int j = 0; j < PlayerHandler.players.length; j++) { if (PlayerHandler.players[j] != null) { if (goodDistance(PlayerHandler.players[j].absX, PlayerHandler.players[j].absY, npcs[i].absX, npcs[i].absY, 2 + distanceRequired(i) + followDistance(i)) || isFightCaveNpc(i)) { if ((PlayerHandler.players[j].underAttackBy <= 0 && PlayerHandler.players[j].underAttackBy2 <= 0) || PlayerHandler.players[j].inMulti()) if (PlayerHandler.players[j].heightLevel == npcs[i].heightLevel) players.add(j); } } } if (players.size() > 0) return players.get(Misc.random(players.size() -1)); else return 0; } public int getCloseRandomPlayer1(int i) { ArrayList<Integer> players = new ArrayList<Integer>(); for (int j = 0; j < PlayerHandler.players.length; j++) { if (PlayerHandler.players[j] != null && (goodDistance(PlayerHandler.players[j].getX(), PlayerHandler.players[j].getY(), npcs[i].getAbsX(), npcs[i].getAbsY(), 50 + followDistance(i)) || isFightCaveNpc(i)) && ((PlayerHandler.players[j].underAttackBy <= 0 && PlayerHandler.players[j].underAttackBy2 <= 0) || PlayerHandler.players[j] .inMulti()) && PlayerHandler.players[j].heightLevel == npcs[i].heightLevel) { if (PlayerHandler.players[j].inGodWarsBoss()) { players.add(j); } } } return players.size() > 0 ? players .get(Misc.random(players.size() - 1)) : 0; } public int npcSize(int i) { switch (npcs[i].npcType) { /* case 50: return 5;*/ case 2883: case 2882: case 2881: return 3; } return 0; } public boolean isReallyAggressive(int i) { switch (npcs[i].npcType) { case 6203: case 6208: case 6204: case 6206: case 6247: case 6252: case 6250: case 6248: case 6260: case 6265: case 6263: case 6261: case 6223: case 6225: case 6227: case 6222: return true; } return false; } public boolean isAggressive(int i) { switch (npcs[i].npcType) { case 119: case 1931: case 1154: case 1155: case 1159: case 1158: case 1160: case 1157: case 195: case 2550: case 2551: case 2552: case 2553: case 2558: case 2559: case 2560: case 2561: case 2562: case 2563: case 2564: case 2565: case 2892: case 2894: case 2881: case 2882: case 2883: case 50: case 941: return true; } if (npcs[i].inWild() && npcs[i].MaxHP > 0) return true; if (isFightCaveNpc(i)) return true; return false; } public boolean isFightCaveNpc(int i) { switch (npcs[i].npcType) { case 2627: case 2630: case 2631: case 2741: case 2743: case 2745: return true; } return false; } /** * Summon npc, barrows, etc **/ public void spawnNpc(final Client c, int npcType, int x, int y, int heightLevel, int WalkingType, int HP, int maxHit, int attack, int defence, boolean attackPlayer, boolean headIcon) { // first, search for a free slot int slot = -1; for (int i = 1; i < maxNPCs; i++) { if (npcs[i] == null) { slot = i; break; } } if(slot == -1) { //Misc.println("No Free Slot"); return; // no free slot found } final NPC newNPC = new NPC(slot, npcType); newNPC.absX = x; newNPC.absY = y; newNPC.makeX = x; newNPC.makeY = y; newNPC.heightLevel = heightLevel; newNPC.walkingType = WalkingType; newNPC.HP = HP; newNPC.MaxHP = HP; newNPC.maxHit = maxHit; newNPC.attack = attack; newNPC.defence = defence; newNPC.spawnedBy = c.getId(); newNPC.dagColor = getDagColor(npcType); if(headIcon) c.getPA().drawHeadicon(1, slot, 0, 0); if(attackPlayer) { newNPC.underAttack = true; if(c != null) { if(server.model.minigames.Barrows.COFFIN_AND_BROTHERS[c.randomCoffin][1] != newNPC.npcType) { if(newNPC.npcType == 2025 || newNPC.npcType == 2026 || newNPC.npcType == 2027 || newNPC.npcType == 2028 || newNPC.npcType == 2029 || newNPC.npcType == 2030) { newNPC.forceChat("You dare disturb my rest!"); } } int[] animatedArmor = {4278, 4279, 4280, 4281, 4282, 4283, 4284}; for(int z = 0; z < animatedArmor.length; z++) { if (newNPC.npcType == animatedArmor[z]) { newNPC.forceAnim(4410); newNPC.forceChat("I'M ALIVE!"); } } if(server.model.minigames.Barrows.COFFIN_AND_BROTHERS[c.randomCoffin][1] == newNPC.npcType) { newNPC.forceChat("You dare steal from us!"); } newNPC.killerId = c.playerId; } } for(int[] aSpiritTree : SpiritTree.spiritTree) { if(newNPC.npcType == aSpiritTree[2]) { newNPC.forceChat("Leave these woods and never return!"); CycleEventHandler.getSingleton().addEvent(c, new CycleEvent() { @Override public void execute(CycleEventContainer container) { container.stop(); } @Override public void stop() { // if(!newNPC.isDead) { newNPC.isDead = true; newNPC.updateRequired = true; c.treeSpawned = false; // } } }, 200); } } for(int[] aRockGolem : RockGolem.rockGolem) { if(newNPC.npcType == aRockGolem[2]) { newNPC.forceChat("Raarrrgghh! Flee human!"); CycleEventHandler.getSingleton().addEvent(c, new CycleEvent() { @Override public void execute(CycleEventContainer container) { container.stop(); } @Override public void stop() { // if(!newNPC.isDead) { newNPC.isDead = true; newNPC.updateRequired = true; c.golemSpawned = false; // } } }, 200); } } for(int[] aRiverTroll : RiverTroll.riverTroll) { if(newNPC.npcType == aRiverTroll[2]) { newNPC.forceChat("Fishies be mine! Leave dem fishies!"); CycleEventHandler.getSingleton().addEvent(c, new CycleEvent() { @Override public void execute(CycleEventContainer container) { container.stop(); } @Override public void stop() { // if(!newNPC.isDead) { newNPC.isDead = true; newNPC.updateRequired = true; c.trollSpawned = false; // } } }, 200); } } for(int[] aZombie : Zombie.zombie) { if(newNPC.npcType == aZombie[2]) { newNPC.forceChat("Braaaainssss!"); CycleEventHandler.getSingleton().addEvent(c, new CycleEvent() { @Override public void execute(CycleEventContainer container) { container.stop(); } @Override public void stop() { // if(!newNPC.isDead) { newNPC.isDead = true; newNPC.updateRequired = true; c.zombieSpawned = false; // } } }, 200); } } npcs[slot] = newNPC; } public String getDagColor(int npcType) { int dags[] = { 1351, 1352, 1356, 1353, 1354, 1355 }; String colors[] = { "white", "blue", "brown", "red", "orange", "green" }; for(int i = 0; i < dags.length; i++) { if(npcType == dags[i]) { return colors[i]; } } return ""; } public void getDtLastKill(int i) { int dtNpcs[] = { 1975, 1914, 1977, 1913 }; for(int dtNpc : dtNpcs) { if(npcs[i].npcType == dtNpc) { Client p = (Client) Server.playerHandler.players[npcs[i].killedBy]; if(p != null) { p.lastDtKill = dtNpc; } } } } public void checkDt(int i) { if(npcs[i] != null) { } } public void checkHfd(int i) { int dags[] = { 1351, 1352, 1356, 1353, 1354, 1355 }; for(int j = 0; j < dags.length; j++) { if(npcs[i].npcType == dags[j]) { Client c = (Client) Server.playerHandler.players[npcs[i].killedBy]; if(c != null) { c.horrorFromDeep = 2; c.sendMessage("You have completed Horror from the Deep."); c.getAA2().HFTD(); if(c.questPoints == 3) { //c.getShops().addQuestCape(); } c.getPA().loadQuests(); } if(npcs[i] != null) { npcs[i].absX = 0; npcs[i].absY = 0; npcs[i] = null; break; } } } } public void checkRfd(int i) { if(npcs[i] != null) { int playerId = npcs[i].killedBy; if(Server.playerHandler.players[playerId] != null) { Client c = (Client) Server.playerHandler.players[playerId]; if(c.roundNpc == 2 && !c.spawned) { spawnNpc(c, 3494, 1899, 5354, c.heightLevel, 1, 210, 24, 70, 60, true, true); c.spawned = true; } else if(c.roundNpc == 3 && !c.spawned) { spawnNpc(c, 3495, 1899, 5354, c.heightLevel, 1, 240, 15, 70, 60, true, true); c.spawned = true; } else if(c.roundNpc == 4 && !c.spawned) { spawnNpc(c, 3496, 1899, 5354, c.heightLevel, 1, 140, 19, 70, 60, true, true); c.spawned = true; } else if(c.roundNpc == 5) { c.getPA().movePlayer(3218, 9621, 0); c.getDH().sendDialogues(30, 608); c.roundNpc = 0; c.questPoints++; if(c.questPoints == 3) { //c.getShops().addQuestCape(); } c.getPA().loadQuests(); } } } } public void spawnNpc2(int npcType, int x, int y, int heightLevel, int WalkingType, int HP, int maxHit, int attack, int defence) { // first, search for a free slot int slot = -1; for (int i = 1; i < maxNPCs; i++) { if (npcs[i] == null) { slot = i; break; } } if(slot == -1) { //Misc.println("No Free Slot"); return; // no free slot found } NPC newNPC = new NPC(slot, npcType); newNPC.absX = x; newNPC.absY = y; newNPC.makeX = x; newNPC.makeY = y; newNPC.heightLevel = heightLevel; newNPC.walkingType = WalkingType; newNPC.HP = HP; newNPC.MaxHP = HP; newNPC.maxHit = maxHit; newNPC.attack = attack; newNPC.defence = defence; npcs[slot] = newNPC; } /** * Emotes **/ public static int getAttackEmote(int i) { switch(Server.npcHandler.npcs[i].npcType) { case 1158: //kalphite queen if (npcs[i].attackType == 2) return 6240; if (npcs[i].attackType == 0) return 6241; else return 6240; case 1160: //kalphite queen form 2 if (npcs[i].attackType == 2) return 6237; if (npcs[i].attackType == 0) return 6235; else return 6237; case 6213: case 6212: return 6547; case 6219: case 6254: case 6255: case 6256: case 6257: case 6258: case 6214: return 806; case 6216: return 1582; case 6218: return 4300; case 6221: return 811; case 1643: return 421; case 90: case 91: case 5359: case 5384: case 92: case 93: //skeleton return 5485; case 1605: return 1507; case 419: //zombie case 420: case 421: case 422: case 423: case 424: return 5568; case 438: case 439: case 440: case 441: case 442: // Tree spirit case 443: return 94; case 391: case 392: case 393: case 394: case 395://river troll case 396: return 284; case 413: case 414: case 415: case 416: case 417://rock golem case 418: return 153; case 6229: case 6230: case 6231: case 6232: case 6233: case 6234: case 6235: case 6236: case 6237: case 6238: case 6239: case 6240: case 6241: case 6242: case 6243: case 6244: case 6245: case 6246: return 6953; case 6210: return 6581; case 6211: return 169; case 6279: case 6280: case 6283: return 6184; case 6276: case 6277: return 4320; case 6275: return 164; case 6282: return 6188; // begin new updates case 112: //moss return 4658; case 103: //ghost return 5540; case 78: //bats return 4915; case 1612: //banshee return 1523; case 2783: //dark beast return 2731; //end case 6248: return 6376; case 6250: return 7018; case 6261: case 6263: case 6265: return 6154; case 6204: case 6206: case 6208: return 6945; case 49: return 6579; case 6247: return 6964; case 6203: return 6945; case 6223: case 6225: case 6227: return 6953; case 6222: return 6976; case 6267: return 359; case 6268: return 2930; case 4291: case 4292: case 6269: return 4652; case 6270: return 4652; case 6271: return 4320; case 6272: return 4320; case 6273: return 4320; case 6274: return 4320; case 1459: return 1402; case 2550: if (npcs[i].attackType == 0) return 7060; else return 7063; case 86: case 87: return 4933; case 2892: case 2894: return 2868; case 2627: return 2621; case 2630: return 2625; case 2631: return 2633; case 2741: return 2637; case 2746: return 2637; case 2607: return 2611; case 2743://360 return 2647; case 6260: if (npcs[i].attackType == 0) return 7060; else return 7063; //end of gwd //arma gwd case 2558: return 3505; case 2560: return 6953; case 2559: return 6952; case 2561: return 6954; //end of arma gwd //sara gwd case 2562: return 6964; case 2563: return 6376; case 2564: return 7018; case 2565: return 7009; //end of sara gwd case 5247: return 5411; case 13: //wizards return 711; case 655: return 5532; case 1624: return 1557; case 1648: return 1590; case 1615: //abby demon return 1537; case 1613: //nech return 1528; case 1610: case 1611: //garg return 1519; case 1616: //basilisk return 1546; //case 459: //skele //return 260; case 50://drags case 53: case 54: case 55: case 941: case 1590: case 1591: case 1592: if (npcs[i].attackType == 0) return 80; else if (npcs[i].attackType == 2) return 81; case 124: //earth warrior return 390; case 803: //monk return 422; case 52: //baby drag return 25; case 58: //Shadow Spider case 59: //Giant Spider case 60: //Giant Spider case 61: //Spider case 62: //Jungle Spider case 63: //Deadly Red Spider case 64: //Ice Spider case 134: return 143; case 105: //Bear case 106: //Bear return 41; case 412: // case 78: return 30; case 2033: //rat return 138; case 2031: // bloodworm return 2070; case 101: // goblin return 309; case 81: // cow return 0x03B; case 21: // hero return 451; case 41: // chicken return 55; case 9: // guard case 32: // guard case 20: // paladin return 451; case 1338: // dagannoth case 1340: case 1342: return 1341; case 19: // white knight return 406; case 110: case 111: // ice giant case 117: return 4652; case 2452: return 1312; case 2889: return 2859; case 118: case 119: return 99; case 82://Lesser Demon case 83://Greater Demon case 84://Black Demon case 1472://jungle demon return 64; case 1267: case 1265: return 1312; case 125: // ice warrior case 178: return 451; case 1153: //Kalphite Worker case 1154: //Kalphite Soldier case 1155: //Kalphite guardian case 1156: //Kalphite worker case 1157: //Kalphite guardian return 6241; case 123: case 122: return 164; case 2028: // karil return 2075; case 2025: // ahrim return 729; case 2026: // dharok return 2067; case 2027: // guthan return 2080; case 2029: // torag return 0x814; case 2030: // verac return 2062; case 2881: //supreme return 2855; case 2882: //prime return 2854; case 2883: //rex return 2851; case 5666: int test = Misc.random(2); if(test == 2) { return 5895; } else if(test == 1) { return 5894; } else { return 5896; } case 3200: return 3146; case 2745: if (npcs[i].attackType == 2) return 2656; else if (npcs[i].attackType == 1) return 2652; else if (npcs[i].attackType == 0) return 2655; default: return 0x326; } } public int getDeadEmote(int i) { switch(npcs[i].npcType) { case 1158: spawnSecondForm(i); return 6242; case 1160: spawnFirstForm(i); return 6233; case 90: case 91: case 5359: case 5384: case 92: case 93: //skeleton return 5491; case 438: case 439: case 440: case 441: case 442: // Tree spirit case 443: return 97; case 110: case 117: return 4653; case 391: case 392: case 393: case 394: case 395://river troll case 396: return 287; case 413: case 414: case 415: case 416: case 417://rock golem case 418: return 156; case 419://zombie case 420: case 421: case 422: case 423: case 424: return 5569; case 6282: return 6182; case 6275: return 167; case 6276: case 6277: return 4321; case 6279: case 6280: case 6283: return 6182; case 6211: return 172; case 6212: return 6537; case 6219: case 6221: case 6254: case 6255: case 6256: case 6257: case 6258: case 6214: return 0x900; case 6216: return 1580; case 6218: return 4302; case 6229: case 6230: case 6231: case 6232: case 6233: case 6234: case 6235: case 6236: case 6237: case 6238: case 6239: case 6240: case 6241: case 6242: case 6243: case 6244: case 6245: case 6246: return 6956; case 6210: return 6576; // begin new updates case 112: //moss return 4659; case 103: //ghost return 5542; case 78: //bats return 4917; //end case 6248: return 6377; case 6250: return 7016; case 6204: case 6206: case 6208: return 6946; case 6261:// Seargent Strongstack case 6263:// Seargent Steelwill case 6265:// Seargent Grimspike return 6156; case 6260:// General Graardor return 7062; case 6142: return 1; case 6143: return 1; case 6144: return 1; case 6145: return 1; case 1265://RockCrab return 1314; case 914://Battle Mage return 196; case 3742://Ravager case 3743: case 3744: case 3745: case 3746: return 3916; case 3772://Brawler case 3773: case 3774: case 3775: case 3776: return 3894; case 49: return 6576; case 1612:// Banshee return 1524; case 6222:// Kree'ara return 3503; case 6223:// Wingman Skree case 6225:// Flockleader Geerin case 6227:// Flight Kilisa return 6956; case 6247: return 6965; case 6203: return 6945; case 6267: return 357; case 6268: return 2938; case 6269: case 4291: // Cyclops case 4292: // Ice cyclops case 6270: return 4653; case 6271: case 6272: case 6273: case 6274: return 4321; case 1459: return 1404; //sara gwd case 5247: return 5412; case 2562: return 6965; case 86: case 87: return 4935; case 2563: return 6377; case 2564: return 7016; case 2565: return 7011; case 2550: return 7062; case 2892: case 2894: return 2865; case 2558: return 3503; case 2559: case 2560: case 2561: return 6956; case 2607: return 2607; case 2627: return 2620; case 2630: return 2627; case 2631: return 2630; case 2738: return 2627; case 2741: return 2638; case 2746: return 2638; case 2743: return 2646; case 2745: return 2654; case 6150: case 6151: case 6152: case 6153: return -1; case 5666: return 5898; case 3200: return 3147; case 2035: //spider return 146; case 2033: //rat return 141; case 2031: // bloodvel return 2073; case 101: //goblin return 313; case 81: // cow return 244; case 41: // chicken return 57; case 1338: // dagannoth case 1340: case 1342: return 1342; case 2881: case 2882: case 2883: return 2856; case 111: // ice giant return 131; case 125: // ice warrior return 843; case 751://Zombies!! return 302; case 1626: case 1627: case 1628: case 1629: case 1630: case 1631: case 1632: //turoth! return 1597; case 1616: //basilisk return 1548; case 1653: //hand return 1590; case 82://demons case 83: case 84: return 67; case 1605://abby spec return 1508; case 51://baby drags case 52: case 1589: case 3376: return 28; case 1610: case 1611: return 1520; case 1618: case 1619: return 1553; case 1620: case 1621: return 1563; case 2783: return 2732; case 1615: return 1538; case 1624: return 1558; case 1613: return 1530; case 1633: case 1634: case 1635: case 1636: return 1580; case 1648: case 1649: case 1650: case 1651: case 1652: case 1654: case 1655: case 1656: case 1657: return 1590; case 100: case 102: return 313; case 105: case 106: return 44; case 412: // case 78: return 36; case 122: case 123: return 167; case 58: case 59: case 60: case 61: case 62: case 63: case 64: case 134: return 146; case 1153: case 1154: case 1155: case 1156: case 1157: return 6242; // case 103: case 104: return 5534; case 118: case 119: return 102; case 50://drags return 92; case 53: case 54: case 55: case 941: case 1590: case 1591: case 1592: return 92; default: return 2304; } } /** * Attack delays **/ public int getNpcDelay(int i) { switch(npcs[i].npcType) { case 2025: case 2028: return 7; case 2745: return 8; case 2558: case 2559: case 2560: case 2561: case 2550: return 6; //saradomin gw boss case 2562: return 2; case 6260: case 6203: case 6222: case 6247: return 6; default: return 5; } } /** * Hit delays **/ public int getHitDelay(int i) { switch(npcs[i].npcType) { case 1158: case 1160: if (npcs[i].attackType == 1 || npcs[i].attackType == 2) return 3; else return 2; case 2881: case 2882: case 3200: case 2892: case 2894: return 3; case 2743: case 2631: case 2558: case 2559: case 2560: return 3; case 2745: if (npcs[i].attackType == 1 || npcs[i].attackType == 2) return 5; else return 2; case 6260: npcs[i].graardor = Misc.random(5); if (npcs[i].graardor == 5) { return 3; } return 2; case 6203: npcs[i].tsutsaroth = Misc.random(4); if (npcs[i].tsutsaroth == 4) { return 3; } return 2; case 6247: npcs[i].zilyana = Misc.random(6); if (npcs[i].zilyana == 6 || npcs[i].zilyana == 5 || npcs[i].zilyana == 4) { return 6; } return 2; case 946: case 50: case 6208: case 6250: case 6263: case 6223: case 6222: case 2025: return 2; case 2028: return 3; default: return 2; } } /** * Npc respawn time **/ public int getRespawnTime(int i) { switch(npcs[i].npcType) { case 6260: case 6247: case 6222: case 6203: return 45; case 1931: return 30; case 1160: case 6142: case 6143: case 6144: case 6145: case 6208: case 6204: case 6206: case 6252: case 6250: case 6227: case 6225: case 6223: case 6265: case 6263: case 6261: case 3073: case 5808: case 7772: case 7135: case 13454: case 13451: case 5631: case 13452: case 7643: case 6248: case 1158: return -1; case 50: case 2881: case 2882: case 2883: case 2558: case 2559: case 2560: case 2561: case 2562: case 2563: case 2564: case 2550: case 2551: case 2552: case 2553: return 100; case 6150: case 6151: case 6152: case 6153: return 500; default: return 25; } } public void newNPC(int npcType, int x, int y, int heightLevel, int WalkingType, int HP, int maxHit, int attack, int defence) { // first, search for a free slot int slot = -1; for (int i = 1; i < maxNPCs; i++) { if (npcs[i] == null) { slot = i; break; } } if(slot == -1) return; // no free slot found NPC newNPC = new NPC(slot, npcType); newNPC.absX = x; newNPC.absY = y; newNPC.makeX = x; newNPC.makeY = y; newNPC.heightLevel = heightLevel; newNPC.walkingType = WalkingType; newNPC.HP = HP; newNPC.MaxHP = HP; newNPC.maxHit = maxHit; newNPC.attack = attack; newNPC.defence = defence; npcs[slot] = newNPC; } public void newNPCList(int npcType, String npcName, int combat, int HP) { // first, search for a free slot int slot = -1; for (int i = 0; i < maxListedNPCs; i++) { if (NpcList[i] == null) { slot = i; break; } } if(slot == -1) return; // no free slot found NPCList newNPCList = new NPCList(npcType); newNPCList.npcName = npcName; newNPCList.npcCombat = combat; newNPCList.npcHealth = HP; NpcList[slot] = newNPCList; } public void handleClipping(int i) { NPC npc = npcs[i]; if(npc.moveX == 1 && npc.moveY == 1) { if((Region.getClipping(npc.absX + 1, npc.absY + 1, npc.heightLevel) & 0x12801e0) != 0) { npc.moveX = 0; npc.moveY = 0; if((Region.getClipping(npc.absX, npc.absY + 1, npc.heightLevel) & 0x1280120) == 0) npc.moveY = 1; else npc.moveX = 1; } } else if(npc.moveX == -1 && npc.moveY == -1) { if((Region.getClipping(npc.absX - 1, npc.absY - 1, npc.heightLevel) & 0x128010e) != 0) { npc.moveX = 0; npc.moveY = 0; if((Region.getClipping(npc.absX, npc.absY - 1, npc.heightLevel) & 0x1280102) == 0) npc.moveY = -1; else npc.moveX = -1; } } else if(npc.moveX == 1 && npc.moveY == -1) { if((Region.getClipping(npc.absX + 1, npc.absY - 1, npc.heightLevel) & 0x1280183) != 0) { npc.moveX = 0; npc.moveY = 0; if((Region.getClipping(npc.absX, npc.absY - 1, npc.heightLevel) & 0x1280102) == 0) npc.moveY = -1; else npc.moveX = 1; } } else if(npc.moveX == -1 && npc.moveY == 1) { if((Region.getClipping(npc.absX - 1, npc.absY + 1, npc.heightLevel) & 0x128013) != 0) { npc.moveX = 0; npc.moveY = 0; if((Region.getClipping(npc.absX, npc.absY + 1, npc.heightLevel) & 0x1280120) == 0) npc.moveY = 1; else npc.moveX = -1; } } //Checking Diagonal movement. if (npc.moveY == -1 ) { if ((Region.getClipping(npc.absX, npc.absY - 1, npc.heightLevel) & 0x1280102) != 0) npc.moveY = 0; } else if( npc.moveY == 1) { if((Region.getClipping(npc.absX, npc.absY + 1, npc.heightLevel) & 0x1280120) != 0) npc.moveY = 0; } //Checking Y movement. if(npc.moveX == 1) { if((Region.getClipping(npc.absX + 1, npc.absY, npc.heightLevel) & 0x1280180) != 0) npc.moveX = 0; } else if(npc.moveX == -1) { if((Region.getClipping(npc.absX - 1, npc.absY, npc.heightLevel) & 0x1280108) != 0) npc.moveX = 0; } //Checking X movement. } public void process() { for (int i = 0; i < maxNPCs; i++) { if (npcs[i] == null) continue; npcs[i].clearUpdateFlags(); } for (int i = 0; i < maxNPCs; i++) { if (npcs[i] != null) { if (npcs[i].actionTimer > 0) { npcs[i].actionTimer--; } /* if(npcs[i].npcType == 945) { npcs[i].forcedText = "Hello there, you should go to www.sabsabionline.com!"; npcs[i].forcedChatRequired = true; npcs[i].updateRequired = true; }*/ if (npcs[i].freezeTimer > 0) { npcs[i].freezeTimer--; } if (npcs[i].hitDelayTimer > 0) { npcs[i].hitDelayTimer--; } if (npcs[i].hitDelayTimer == 1) { npcs[i].hitDelayTimer = 0; applyDamage(i); } if(npcs[i].attackTimer > 0) { npcs[i].attackTimer--; } if(npcs[i].spawnedBy > 0) { // delete summons npc if(Server.playerHandler.players[npcs[i].spawnedBy] == null || Server.playerHandler.players[npcs[i].spawnedBy].heightLevel != npcs[i].heightLevel || Server.playerHandler.players[npcs[i].spawnedBy].respawnTimer > 0 || !Server.playerHandler.players[npcs[i].spawnedBy].goodDistance(npcs[i].getX(), npcs[i].getY(), Server.playerHandler.players[npcs[i].spawnedBy].getX(), Server.playerHandler.players[npcs[i].spawnedBy].getY(), 20)) { if(Server.playerHandler.players[npcs[i].spawnedBy] != null) { for(int o = 0; o < Server.playerHandler.players[npcs[i].spawnedBy].barrowsNpcs.length; o++){ if(npcs[i].npcType == Server.playerHandler.players[npcs[i].spawnedBy].barrowsNpcs[o][0]) { if (Server.playerHandler.players[npcs[i].spawnedBy].barrowsNpcs[o][1] == 1) Server.playerHandler.players[npcs[i].spawnedBy].barrowsNpcs[o][1] = 0; } } } npcs[i] = null; } } if (npcs[i] == null) continue; if (npcs[i].lastX != npcs[i].getX() || npcs[i].lastY != npcs[i].getY()) { npcs[i].lastX = npcs[i].getX(); npcs[i].lastY = npcs[i].getY(); } /** * Attacking player **/ if (isAggressive(i) && !npcs[i].underAttack && !npcs[i].isDead && !switchesAttackers(i)) { npcs[i].killerId = getCloseRandomPlayer(i); } else if (isAggressive(i) && !npcs[i].underAttack && !npcs[i].isDead && switchesAttackers(i)) { npcs[i].killerId = getCloseRandomPlayer(i); } else if (isReallyAggressive(i) && !npcs[i].underAttack && !npcs[i].isDead && !switchesAttackers(i)) { npcs[i].killerId = getCloseRandomPlayer1(i); } else if (isReallyAggressive(i) && !npcs[i].underAttack && !npcs[i].isDead && switchesAttackers(i)) { npcs[i].killerId = getCloseRandomPlayer1(i); } if (System.currentTimeMillis() - npcs[i].lastDamageTaken > 5000) npcs[i].underAttackBy = 0; if((npcs[i].killerId > 0 || npcs[i].underAttack) && !npcs[i].walkingHome && retaliates(npcs[i].npcType)) { if(!npcs[i].isDead) { int p = npcs[i].killerId; if(Server.playerHandler.players[p] != null) { Client c = (Client) Server.playerHandler.players[p]; followPlayer(i, c.playerId); if (npcs[i] == null) continue; if(npcs[i].attackTimer == 0) { if(c != null) { attackPlayer(c, i); } else { npcs[i].killerId = 0; npcs[i].underAttack = false; npcs[i].facePlayer(0); } } } else { npcs[i].killerId = 0; npcs[i].underAttack = false; npcs[i].facePlayer(0); } } } /** * Random walking and walking home **/ if (npcs[i] == null) continue; if((!npcs[i].underAttack || npcs[i].walkingHome) && npcs[i].randomWalk && !npcs[i].isDead) { npcs[i].facePlayer(0); npcs[i].killerId = 0; if(npcs[i].spawnedBy == 0) { if((npcs[i].absX > npcs[i].makeX + Config.NPC_RANDOM_WALK_DISTANCE) || (npcs[i].absX < npcs[i].makeX - Config.NPC_RANDOM_WALK_DISTANCE) || (npcs[i].absY > npcs[i].makeY + Config.NPC_RANDOM_WALK_DISTANCE) || (npcs[i].absY < npcs[i].makeY - Config.NPC_RANDOM_WALK_DISTANCE)) { npcs[i].walkingHome = true; } } if (npcs[i].walkingHome && npcs[i].absX == npcs[i].makeX && npcs[i].absY == npcs[i].makeY) { npcs[i].walkingHome = false; } else if(npcs[i].walkingHome) { npcs[i].moveX = GetMove(npcs[i].absX, npcs[i].makeX); npcs[i].moveY = GetMove(npcs[i].absY, npcs[i].makeY); handleClipping(i); npcs[i].getNextNPCMovement(i); npcs[i].updateRequired = true; } if (npcs[i].walkingType >= 0) { switch(npcs[i].walkingType) { case 5: npcs[i].turnNpc(npcs[i].absX-1, npcs[i].absY); break; case 4: npcs[i].turnNpc(npcs[i].absX+1, npcs[i].absY); break; case 3: npcs[i].turnNpc(npcs[i].absX, npcs[i].absY-1); break; case 2: npcs[i].turnNpc(npcs[i].absX, npcs[i].absY+1); break; default: if (npcs[i].walkingType >= 0) { npcs[i].turnNpc(npcs[i].absX, npcs[i].absY); //makes it when npcs move they dont turn back to one direction } break; } } if(npcs[i].walkingType == 1) { if(Misc.random(3)== 1 && !npcs[i].walkingHome) { int MoveX = 0; int MoveY = 0; int Rnd = Misc.random(9); if (Rnd == 1) { MoveX = 1; MoveY = 1; } else if (Rnd == 2) { MoveX = -1; } else if (Rnd == 3) { MoveY = -1; } else if (Rnd == 4) { MoveX = 1; } else if (Rnd == 5) { MoveY = 1; } else if (Rnd == 6) { MoveX = -1; MoveY = -1; } else if (Rnd == 7) { MoveX = -1; MoveY = 1; } else if (Rnd == 8) { MoveX = 1; MoveY = -1; } if (MoveX == 1) { if (npcs[i].absX + MoveX < npcs[i].makeX + 1) { npcs[i].moveX = MoveX; } else { npcs[i].moveX = 0; } } if (MoveX == -1) { if (npcs[i].absX - MoveX > npcs[i].makeX - 1) { npcs[i].moveX = MoveX; } else { npcs[i].moveX = 0; } } if(MoveY == 1) { if(npcs[i].absY + MoveY < npcs[i].makeY + 1) { npcs[i].moveY = MoveY; } else { npcs[i].moveY = 0; } } if(MoveY == -1) { if(npcs[i].absY - MoveY > npcs[i].makeY - 1) { npcs[i].moveY = MoveY; } else { npcs[i].moveY = 0; } } int x = (npcs[i].absX + npcs[i].moveX); int y = (npcs[i].absY + npcs[i].moveY); //if (VirtualWorld.I(npcs[i].heightLevel, npcs[i].absX, npcs[i].absY, x, y, 0)) handleClipping(i); npcs[i].getNextNPCMovement(i); //else //{ //npcs[i].moveX = 0; //npcs[i].moveY = 0; //} npcs[i].updateRequired = true; } } } if (npcs[i].isDead == true) { if (npcs[i].actionTimer == 0 && npcs[i].applyDead == false && npcs[i].needRespawn == false) { npcs[i].updateRequired = true; npcs[i].facePlayer(0); npcs[i].killedBy = getNpcKillerId(i); npcs[i].animNumber = getDeadEmote(i); // dead emote npcs[i].animUpdateRequired = true; npcs[i].freezeTimer = 0; npcs[i].applyDead = true; killedBarrow(i); npcs[i].actionTimer = 4; // delete time resetPlayersInCombat(i); npcs[i].dagColor = ""; getDtLastKill(i); } else if (npcs[i].actionTimer == 0 && npcs[i].applyDead == true && npcs[i].needRespawn == false) { npcs[i].needRespawn = true; npcs[i].actionTimer = getRespawnTime(i); // respawn time dropItems(i); // npc drops items! appendSlayerExperience(i); tzhaarDeathHandler(i); if (npcs[i].npcType == 2745) { handleJadDeath(i); } appendZamorakKC(i); appendBandosKC(i); appendSaradominKC(i); appendArmadylKC(i); appendKillCount(i); //appendJailKc(i); npcs[i].absX = npcs[i].makeX; npcs[i].absY = npcs[i].makeY; npcs[i].HP = npcs[i].MaxHP; npcs[i].animNumber = 0x328; npcs[i].updateRequired = true; npcs[i].animUpdateRequired = true; if (npcs[i].npcType >= 2440 && npcs[i].npcType <= 2446) { Server.objectManager.removeObject(npcs[i].absX, npcs[i].absY); } if (npcs[i].npcType == 2745) { //handleJadDeath(i); } } else if (npcs[i].actionTimer == 0 && npcs[i].needRespawn == true && npcs[i].npcType != 1158) { Client player = (Client) Server.playerHandler.players[npcs[i].spawnedBy]; if(player != null) { checkDt(i); checkHfd(i); checkRfd(i); npcs[i] = null; } else if (npcs[i].actionTimer == 0 && npcs[i].needRespawn) { if (npcs[i].spawnedBy > 0) { npcs[i] = null; } else { if (npcs[i].npcType == 6260) { Player c22 = PlayerHandler.players[npcs[i].killedBy]; for (NPC n : NPCHandler.npcs) { if (n != null && n.inGodWarsBoss()) { if (n.spawnedBy <= 0) { n.isDead = true; n.applyDead = true; n.updateRequired = true; } } } newNPC(6265, 2868, 5364, 2, 1, 146, 23, 120, 120); newNPC(6263, 2870, 5356, 2, 1, 127, 23, 150, 90); newNPC(6261, 2873, 5366, 2, 1, 126, 22, 100, 110); } else if (npcs[i].npcType == 6222) { Player c22 = PlayerHandler.players[npcs[i].killedBy]; for (NPC n : NPCHandler.npcs) { if (n != null && n.inGodWarsBoss1()) { if (n.spawnedBy <= 0) { n.isDead = true; n.applyDead = true; n.updateRequired = true; } } } newNPC(6227, 2828, 5299, 2, 1, 146, 23, 120, 120); newNPC(6225, 2838, 5305, 2, 1, 127, 20, 150, 90); newNPC(6223, 2835, 5299, 2, 1, 126, 19, 100, 110); } else if (npcs[i].npcType == 6203) { Player c22 = PlayerHandler.players[npcs[i].killedBy]; for (NPC n : NPCHandler.npcs) { if (n != null && n.inGodWarsBoss2()) { if (n.spawnedBy <= 0) { n.isDead = true; n.applyDead = true; n.updateRequired = true; } } } newNPC(6206, 2921, 5328, 2, 1, 146, 23, 120, 120); newNPC(6204, 2928, 5328, 2, 1, 127, 20, 150, 90); newNPC(6208, 2932, 5321, 2, 1, 126, 19, 100, 110); } else if (npcs[i].npcType == 6247) { Player c22 = PlayerHandler.players[npcs[i].killedBy]; for (NPC n : NPCHandler.npcs) { if (n != null && n.inGodWarsBoss3()) { if (n.spawnedBy <= 0) { n.isDead = true; n.applyDead = true; n.updateRequired = true; } } } newNPC(6252, 2901, 5261, 0, 1, 146, 23, 120, 120); newNPC(6250, 2901, 5269, 0, 1, 127, 20, 150, 90); newNPC(6248, 2892, 5268, 0, 1, 126, 19, 100, 110); } int old1 = npcs[i].npcType; int old2 = npcs[i].makeX; int old3 = npcs[i].makeY; int old4 = npcs[i].heightLevel; int old5 = npcs[i].walkingType; int old6 = npcs[i].MaxHP; int old7 = npcs[i].maxHit; int old8 = npcs[i].attack; int old9 = npcs[i].defence; npcs[i] = null; newNPC(old1, old2, old3, old4, old5, old6, old7, old8, old9); } } } } } } } public boolean getsPulled(int i) { switch (npcs[i].npcType) { case 6560: if (npcs[i].firstAttacker > 0) return false; break; } return true; } public boolean multiAttacks(int i) { switch (npcs[i].npcType) { case 1158: //kq if (npcs[i].attackType == 2) return true; case 1160: //kq if (npcs[i].attackType == 1) return true; case 2558: return true; case 2562: if (npcs[i].attackType == 2) return true; case 2550: if (npcs[i].attackType == 1) return true; default: return false; } } /** * Npc killer id? **/ public int getNpcKillerId(int npcId) { int oldDamage = 0; int count = 0; int killerId = 0; for (int p = 1; p < Config.MAX_PLAYERS; p++) { if (Server.playerHandler.players[p] != null) { if(Server.playerHandler.players[p].lastNpcAttacked == npcId) { if(Server.playerHandler.players[p].totalDamageDealt > oldDamage) { oldDamage = Server.playerHandler.players[p].totalDamageDealt; killerId = p; } Server.playerHandler.players[p].totalDamageDealt = 0; } } } return killerId; } /** * */ private void killedBarrow(int i) { Client c = (Client)Server.playerHandler.players[npcs[i].killedBy]; if(c != null) { for(int o = 0; o < c.barrowsNpcs.length; o++){ if(npcs[i].npcType == c.barrowsNpcs[o][0]) { c.barrowsNpcs[o][1] = 2; // 2 for dead c.barrowsKillCount++; } } } } private void tzhaarDeathHandler(int i) { if (isFightCaveNpc(i) && npcs[i].npcType != FightCaves.TZ_KEK) killedTzhaar(i); if(npcs[i].npcType == FightCaves.TZ_KEK_SPAWN) { int p = npcs[i].killerId; if (PlayerHandler.players[p] != null) { Client c = (Client) PlayerHandler.players[p]; c.tzKekSpawn += 1; if(c.tzKekSpawn == 2) { killedTzhaar(i); c.tzKekSpawn = 0; } } } if(npcs[i].npcType == FightCaves.TZ_KEK) { int p = npcs[i].killerId; if (PlayerHandler.players[p] != null) { Client c = (Client) PlayerHandler.players[p]; FightCaves.tzKekEffect(c, i); } } } private void killedTzhaar(int i) { final Client c2 = (Client) PlayerHandler.players[npcs[i].spawnedBy]; c2.tzhaarKilled++; if (c2.tzhaarKilled == c2.tzhaarToKill) { c2.waveId++; EventManager.getSingleton().addEvent(new Event() { public void execute(EventContainer c) { if (c2 != null) { Server.fightCaves.spawnNextWave(c2); } c.stop(); } }, 7500); } } public void handleJadDeath(int i) { Client c = (Client)Server.playerHandler.players[npcs[i].spawnedBy]; c.getItems().addItem(6570,1); c.getDH().sendDialogues(69, 2617); c.getPA().resetTzhaar(); c.waveId = 300; } /** * Dropping Items! **/ public void dropItems(int i) { int npc = 0; Client c = (Client)Server.playerHandler.players[npcs[i].killedBy]; if(c != null) { if (npcs[i].npcType == 912 || npcs[i].npcType == 913 || npcs[i].npcType == 914) c.magePoints += 1; if(npcs[i].npcType == 4292 || npcs[i].npcType == 4291 && c.inCyclops) { int random2 = Misc.random(4); if(random2 == 1) { Server.itemHandler.createGroundItem(c, Server.getWarriorsGuild().getCyclopsDrop(c), npcs[i].absX, npcs[i].absY, 1, c.playerId); } } int[] animatedArmor = {4278, 4279, 4280, 4281, 4282, 4283, 4284}; int[] tokens = {10, 20, 30, 40, 50, 60, 70}; for(int f = 0; f < animatedArmor.length; f++) { if (npcs[i].npcType == animatedArmor[f]) { c.spawned = false; Server.itemHandler.createGroundItem(c, 8851, npcs[i].absX, npcs[i].absY, tokens[f], c.playerId); } } for(npc = 0; npc < Config.NPC_DROPS.length; npc++){ if(npcs[i].npcType == Config.NPC_DROPS[npc][0]) { if(Misc.random(Config.NPC_DROPS[npc][3]) == 0) { if (c.clanId >= 0) Server.clanChat.handleLootShare(c, Config.NPC_DROPS[npc][1], Config.NPC_DROPS[npc][2]); Server.itemHandler.createGroundItem(c, Config.NPC_DROPS[npc][1], npcs[i].absX, npcs[i].absY, Config.NPC_DROPS[npc][2], c.playerId); } } } } } public void appendKillCount(int i) { Client c = (Client)Server.playerHandler.players[npcs[i].killedBy]; if(c != null) { int[] kcMonsters = {}; for (int j : kcMonsters) { if (npcs[i].npcType == j) { if (c.killCount < 20) { c.killCount++; //c.sendMessage("Killcount: " + c.killCount); } else { // c.sendMessage("You already have 20 kill count"); } break; } } } } //id of bones dropped by npcs public int boneDrop(int type) { switch (type) { case 1://normal bones case 9: case 100: case 12: case 17: case 803: case 18: case 81: case 101: case 41: case 19: case 90: case 75: case 86: case 78: case 912: case 913: case 914: case 1648: case 1643: case 1618: case 1624: case 181: case 119: case 49: case 26: case 1341: case 201: return 526; case 117: return 532;//big bones case 50://drags case 53: case 54: case 55: case 941: case 1590: case 1591: case 1592: return 536; case 84: case 1615: case 1613: case 82: case 3200: return 592; case 2881: case 2882: case 2883: return 6729; default: return -1; } } public int getStackedDropAmount(int itemId, int npcId) { switch (itemId) { case 995: switch (npcId) { case 1: return 50+ Misc.random(50); case 9: return 133 + Misc.random(100); case 1624: return 1000 + Misc.random(300); case 1618: return 1000 + Misc.random(300); case 1643: return 1000 + Misc.random(300); case 1610: return 1000 + Misc.random(1000); case 1613: return 1500 + Misc.random(1250); case 1615: return 3000; case 18: return 500; case 101: return 60; case 913: case 912: case 914: return 750 + Misc.random(500); case 1612: return 250 + Misc.random(500); case 1648: return 250 + Misc.random(250); case 90: return 200; case 82: return 1000 + Misc.random(455); case 52: return 400 + Misc.random(200); case 49: return 1500 + Misc.random(2000); case 1341: return 1500 + Misc.random(500); case 26: return 500 + Misc.random(100); case 20: return 750 + Misc.random(100); case 21: return 890 + Misc.random(125); case 117: return 500 + Misc.random(250); case 2607: return 500 + Misc.random(350); } break; case 11212: return 10 + Misc.random(4); case 565: case 561: return 10; case 560: case 563: case 562: return 15; case 555: case 554: case 556: case 557: return 20; case 892: return 40; case 886: return 100; case 6522: return 6 + Misc.random(5); } return 1; } /** * Slayer Experience **/ public void appendSlayerExperience(int i) { int npc = 0; Client c = (Client) PlayerHandler.players[npcs[i].killedBy]; if (c != null) { if (c.getSlayer().isSlayerTask(npcs[i].npcType)) { c.taskAmount--; c.getPA().addSkillXP(npcs[i].MaxHP * Config.SLAYER_EXPERIENCE, 18); if (c.taskAmount <= 0) { c.getPA().addSkillXP( (npcs[i].MaxHP * 8) * Config.SLAYER_EXPERIENCE, 18); int points = c.getSlayer().getDifficulty(c.slayerTask) * 4; c.slayerTask = -1; c.slayerPoints += points; c.sendMessage("You completed your slayer task. You obtain " + points + " slayer points. Please talk to Vanakka."); } } } } /** * Resets players in combat */ public void resetPlayersInCombat(int i) { for (int j = 0; j < Server.playerHandler.players.length; j++) { if (Server.playerHandler.players[j] != null) if (Server.playerHandler.players[j].underAttackBy2 == i) Server.playerHandler.players[j].underAttackBy2 = 0; } } /** * Npc names **/ public String getNpcName(int npcId) { for (int i = 0; i < maxNPCs; i++) { if (Server.npcHandler.NpcList[i] != null) { if (Server.npcHandler.NpcList[i].npcId == npcId) { return Server.npcHandler.NpcList[i].npcName; } } } return "-1"; } /** * Npc Follow Player **/ public int GetMove(int Place1,int Place2) { if ((Place1 - Place2) == 0) { return 0; } else if ((Place1 - Place2) < 0) { return 1; } else if ((Place1 - Place2) > 0) { return -1; } return 0; } public boolean followPlayer(int i) { switch (npcs[i].npcType) { case 2892: case 2894: return false; } return true; } public void followPlayer(int i, int playerId) { if (Server.playerHandler.players[playerId] == null) { return; } if (Server.playerHandler.players[playerId].respawnTimer > 0) { npcs[i].facePlayer(0); npcs[i].randomWalk = true; npcs[i].underAttack = false; return; } if (!followPlayer(i)) { npcs[i].facePlayer(playerId); return; } int playerX = Server.playerHandler.players[playerId].absX; int playerY = Server.playerHandler.players[playerId].absY; npcs[i].randomWalk = false; if (goodDistance(npcs[i].getX(), npcs[i].getY(), playerX, playerY, distanceRequired(i))) return; if((npcs[i].spawnedBy > 0) || ((npcs[i].absX < npcs[i].makeX + Config.NPC_FOLLOW_DISTANCE) && (npcs[i].absX > npcs[i].makeX - Config.NPC_FOLLOW_DISTANCE) && (npcs[i].absY < npcs[i].makeY + Config.NPC_FOLLOW_DISTANCE) && (npcs[i].absY > npcs[i].makeY - Config.NPC_FOLLOW_DISTANCE))) { if(npcs[i].heightLevel == Server.playerHandler.players[playerId].heightLevel) { if(Server.playerHandler.players[playerId] != null && npcs[i] != null) { if(playerY < npcs[i].absY) { npcs[i].moveX = GetMove(npcs[i].absX, playerX); npcs[i].moveY = GetMove(npcs[i].absY, playerY); } else if(playerY > npcs[i].absY) { npcs[i].moveX = GetMove(npcs[i].absX, playerX); npcs[i].moveY = GetMove(npcs[i].absY, playerY); } else if(playerX < npcs[i].absX) { npcs[i].moveX = GetMove(npcs[i].absX, playerX); npcs[i].moveY = GetMove(npcs[i].absY, playerY); } else if(playerX > npcs[i].absX) { npcs[i].moveX = GetMove(npcs[i].absX, playerX); npcs[i].moveY = GetMove(npcs[i].absY, playerY); } else if(playerX == npcs[i].absX || playerY == npcs[i].absY) { int o = Misc.random(3); switch(o) { case 0: npcs[i].moveX = GetMove(npcs[i].absX, playerX); npcs[i].moveY = GetMove(npcs[i].absY, playerY+1); break; case 1: npcs[i].moveX = GetMove(npcs[i].absX, playerX); npcs[i].moveY = GetMove(npcs[i].absY, playerY-1); break; case 2: npcs[i].moveX = GetMove(npcs[i].absX, playerX+1); npcs[i].moveY = GetMove(npcs[i].absY, playerY); break; case 3: npcs[i].moveX = GetMove(npcs[i].absX, playerX-1); npcs[i].moveY = GetMove(npcs[i].absY, playerY); break; } } int x = (npcs[i].absX + npcs[i].moveX); int y = (npcs[i].absY + npcs[i].moveY); npcs[i].facePlayer(playerId); //if (checkClipping(i)) handleClipping(i); npcs[i].getNextNPCMovement(i); /*else { npcs[i].moveX = 0; npcs[i].moveY = 0; }*/ npcs[i].facePlayer(playerId); npcs[i].updateRequired = true; } } } else { npcs[i].facePlayer(0); npcs[i].randomWalk = true; npcs[i].underAttack = false; } } /*public boolean checkClipping(int i) { NPC npc = npcs[i]; int size = npcSize(i); for (int x = 0; x < size; x++) { for (int y = 0; y < size; y++) { if (!VirtualWorld.I(npc.heightLevel, npc.absX + x, npc.absY + y, npc.absX + npc.moveX, npc.absY + npc.moveY, 0)) return false; } } return true; }*/ /** * load spell **/ public void loadSpell2(int i) { npcs[i].attackType = 3; int random = Misc.random(3); if (random == 0) { npcs[i].projectileId = 393; //red npcs[i].endGfx = 430; } else if (random == 1) { npcs[i].projectileId = 394; //green npcs[i].endGfx = 429; } else if (random == 2) { npcs[i].projectileId = 395; //white npcs[i].endGfx = 431; } else if (random == 3) { npcs[i].projectileId = 396; //blue npcs[i].endGfx = 428; } } public void loadSpell(int i) { Client c = (Client) Server.playerHandler.players[npcs[i].oldIndex]; int random; switch(npcs[i].npcType) { case 1158://kq first form int kqRandom = Misc.random(3); if (kqRandom == 0) { npcs[i].projectileId = 280; npcs[i].attackType = 2; npcs[i].endGfx = 281; } else if (kqRandom == 1) { npcs[i].attackType = 1; // range npcs[i].endGfx = 281; npcs[i].projectileId = 473; } else if (kqRandom == 2) { npcs[i].attackType = 0; // melee npcs[i].projectileId = -1; } break; case 1160://kq secondform int kqRandom2 = Misc.random(3); if (kqRandom2 == 0) { npcs[i].projectileId = 280; //mage npcs[i].endGfx = 281; npcs[i].attackType = 2; } else if (kqRandom2 == 1) { npcs[i].attackType = 1; // range npcs[i].endGfx = 281; npcs[i].projectileId = 473; } else if (kqRandom2 == 2) { npcs[i].attackType = 0; // melee npcs[i].projectileId = -1; } break; case 53://Red Dragon case 54://Black dragon case 941://Green Dragon case 55:// Blue Dragon case 1590://Bronze Dragon case 1591://Iron Dragon case 1592:// Steal Dragon case 5362: //Brutal green if (goodDistance(npcs[i].absX, npcs[i].absY, Server.playerHandler.players[npcs[i].killerId].absX, Server.playerHandler.players[npcs[i].killerId].absY, 2)) { random = Misc.random(2);//If the NPC is in a distance of 2 or less, use melee and range } else { random = (0);//else use range attack only. } if (random == 0) { npcs[i].attackType = 2; npcs[i].projectileId = 393; npcs[i].endGfx = 430; } else if (random == 1) { npcs[i].projectileId = -1; //melee npcs[i].endGfx = -1; npcs[i].attackType = 0; } break; case 6225: case 6230: case 6233: case 6234: case 6235: case 6236: case 6238: case 6241: case 6242: case 6243: case 6244: case 6245: case 2184: npcs[i].attackType = 1; npcs[i].projectileId = 1190; break; case 6229: case 6232: case 6239: case 6237: case 6240: case 6246: npcs[i].attackType = 1; npcs[i].projectileId = 35; break; case 1605: case 1612: npcs[i].attackType = 2; break; case 6221: npcs[i].attackType = 2; npcs[i].endGfx = 78; break; case 1643: case 6257: npcs[i].attackType = 2; npcs[i].endGfx = 76; break; case 6256: case 6220: npcs[i].attackType = 1; npcs[i].projectileId = 326; break; case 2892: npcs[i].projectileId = 94; npcs[i].attackType = 2; npcs[i].endGfx = 95; break; case 2894: npcs[i].projectileId = 298; npcs[i].attackType = 1; break; case 50: if (goodDistance(npcs[i].absX, npcs[i].absY, Server.playerHandler.players[npcs[i].killerId].absX, Server.playerHandler.players[npcs[i].killerId].absY, 2)) { random = Misc.random(4);//If the NPC is in a distance of 2 or less, use melee and range } else { random = Misc.random(3);//else use range attack only. } if (random == 0) { npcs[i].projectileId = 393; //red npcs[i].endGfx = 430; npcs[i].attackType = 3; } else if (random == 1) { npcs[i].projectileId = 394; //green npcs[i].endGfx = 429; npcs[i].attackType = 3; } else if (random == 2) { npcs[i].projectileId = 395; //white npcs[i].endGfx = 431; npcs[i].attackType = 3; } else if (random == 3) { npcs[i].projectileId = 396; //blue npcs[i].endGfx = 428; npcs[i].attackType = 3; if (c.freezeTimer <= 0) { c.freezeTimer = 30; c.frozenBy = c.playerId; c.stopMovement(); c.sendMessage("You have been frozen."); } } else if (random == 4) { npcs[i].projectileId = -1; //melee npcs[i].endGfx = -1; npcs[i].attackType = 0; } break; case 6222: npcs[i].kree = Misc.random(2); switch (npcs[i].kree) { case 0: npcs[i].attackType = 2; npcs[i].multiAttack = true; npcs[i].projectileId = 1196; break; case 1: case 2: npcs[i].attackType = 1; npcs[i].multiAttack = true; npcs[i].projectileId = 1197; break; } if (Misc.random(5) >= 3) { npcs[i].forceChat(npcs[i].Kree()); } break; case 6250: npcs[i].attackType = 2; npcs[i].gfx0(1184); npcs[i].projectileId = 1185; npcs[i].endGfx = 1186; break; case 6203: if (Misc.random(5) >= 3) { npcs[i].forceChat(npcs[i].Tsutsaroth()); } switch (npcs[i].tsutsaroth) { case 0: case 1: case 2: case 3: npcs[i].attackType = 0; npcs[i].projectileId = -1; break; case 4: npcs[i].attackType = 2; npcs[i].multiAttack = true; npcs[i].gfx0(1210); npcs[i].projectileId = 1211; break; } break; case 6223: case 6231: npcs[i].attackType = 2; npcs[i].projectileId = 1199; break; case 6206: npcs[i].attackType = 1; npcs[i].gfx0(1208); npcs[i].projectileId = 1209; break; case 6208: npcs[i].attackType = 2; npcs[i].gfx0(1212); npcs[i].projectileId = 1213; break; case 6263: npcs[i].attackType = 2; npcs[i].gfx0(1202); npcs[i].projectileId = 1203; npcs[i].endGfx = 1204; break; case 6252: npcs[i].attackType = 1; npcs[i].gfx100(1187); npcs[i].projectileId = 1188; break; case 6265: npcs[i].attackType = 1; npcs[i].projectileId = 1206; break; case 6260: switch (npcs[i].graardor) { case 0: case 1: case 2: case 3: case 4: if (Misc.random(5) >= 4) { npcs[i].forceChat(npcs[i].Graardor()); } npcs[i].attackType = 0; npcs[i].projectileId = -1; break; case 5: if (Misc.random(5) >= 3) { npcs[i].forceChat(npcs[i].Graardor()); } npcs[i].attackType = 1; npcs[i].multiAttack = true; npcs[i].gfx0(1219); npcs[i].projectileId = 1200; break; } break; case 6247: switch (npcs[i].zilyana) { case 0: case 1: case 2: case 3: npcs[i].attackType = 0; break; case 4: case 5: case 6: npcs[i].attackType = 2; break; } break; case 2551: npcs[i].attackType = 0; break; case 2552: npcs[i].attackType = 2; npcs[i].projectileId = 1203; break; case 2553: npcs[i].attackType = 1; npcs[i].projectileId = 1206; break; case 2025: npcs[i].attackType = 2; int r = Misc.random(3); if(r == 0) { npcs[i].gfx100(158); npcs[i].projectileId = 159; npcs[i].endGfx = 160; } if(r == 1) { npcs[i].gfx100(161); npcs[i].projectileId = 162; npcs[i].endGfx = 163; } if(r == 2) { npcs[i].gfx100(164); npcs[i].projectileId = 165; npcs[i].endGfx = 166; } if(r == 3) { npcs[i].gfx100(155); npcs[i].projectileId = 156; } break; case 2881://supreme npcs[i].attackType = 1; npcs[i].projectileId = 298; break; case 2882://prime npcs[i].attackType = 2; npcs[i].projectileId = 162; npcs[i].endGfx = 477; break; case 2028: npcs[i].attackType = 1; npcs[i].projectileId = 27; break; case 3200: int r2 = Misc.random(1); if (r2 == 0) { npcs[i].attackType = 1; npcs[i].gfx100(550); npcs[i].projectileId = 551; npcs[i].endGfx = 552; } else { npcs[i].attackType = 2; npcs[i].gfx100(553); npcs[i].projectileId = 554; npcs[i].endGfx = 555; } break; case 2745: int r3 = 0; if (goodDistance(npcs[i].absX, npcs[i].absY, Server.playerHandler.players[npcs[i].spawnedBy].absX, Server.playerHandler.players[npcs[i].spawnedBy].absY, 1)) r3 = Misc.random(2); else r3 = Misc.random(1); if (r3 == 0) { npcs[i].attackType = 2; npcs[i].endGfx = 157; npcs[i].projectileId = 448; } else if (r3 == 1) { npcs[i].attackType = 1; npcs[i].endGfx = 451; npcs[i].projectileId = -1; } else if (r3 == 2) { npcs[i].attackType = 0; npcs[i].projectileId = -1; } break; case 2743: npcs[i].attackType = 2; npcs[i].projectileId = 445; npcs[i].endGfx = 446; break; case 2631: npcs[i].attackType = 1; npcs[i].projectileId = 443; break; } } /** * Distanced required to attack **/ public int distanceRequired(int i) { switch(npcs[i].npcType) { case 6225: case 6223: case 6222: case 1643: case 6221: case 6263: case 6265: return 8; case 2025: case 2028: return 6; case 50: return 8; case 2562: return 2; case 2881://dag kings case 2882: case 3200://chaos ele case 2743: case 2631: case 2745: return 8; case 6261: case 6227: case 2883://rex return 1; case 2552: case 2553: case 2556: case 2557: case 2558: case 2559: case 2560: case 2564: case 2565: return 9; case 1590: // dragons case 1591: case 941: case 48: case 51: case 52: case 53: case 1592: return 3; //things around dags case 2892: case 2894: return 10; default: return 1; } } public int followDistance(int i) { switch (npcs[i].npcType) { case 6203: case 6208: case 6204: case 6206: case 6247: case 6252: case 6250: case 6248: case 6829: case 6260: case 6265: case 6263: case 6261: case 6223: case 6225: case 6227: case 6222: case 50: return 20; case 2550: case 2551: case 2562: case 2563: return 8; case 2883: return 4; case 2881: case 2882: return 8; case 941: return 4; } return 0; } public int extraDistance(int i) { switch (npcs[i].npcType) { case 6203: case 6208: case 6204: case 6206: case 6247: case 6252: case 6250: case 6248: case 6260: case 6265: case 6263: case 6261: case 6223: case 6225: case 6227: case 6222: return 15; default: return 2; } } public int getProjectileSpeed(int i) { switch(npcs[i].npcType) { case 6222: case 5637: return 135; case 6225: case 6223: case 6203: case 2183: case 2188: case 2184: case 6260: case 6230: case 6231: case 6232: case 6233: case 6234: case 6235: case 6236: case 6237: case 6238: case 6239: case 6240: case 6241: case 6242: case 6243: case 6244: case 6245: case 6246: return 120; case 6208: case 6265: case 6263: case 6021: case 6006: case 6007: case 6008: case 6017: case 6018: case 6019: case 6020: return 110; case 2881: case 2882: case 3200: return 85; case 2745: return 130; case 50: return 90; case 2025: return 85; case 2028: return 80; default: return 85; } } /** *NPC Attacking Player **/ public void attackPlayer(Client c, int i) { if (npcs[i].lastX != npcs[i].getX() || npcs[i].lastY != npcs[i].getY()) { return; } if(npcs[i] != null) { if (npcs[i].isDead) return; if (!npcs[i].inMulti() && npcs[i].underAttackBy > 0 && npcs[i].underAttackBy != c.playerId) { npcs[i].killerId = 0; return; } if (!npcs[i].inMulti() && (c.underAttackBy > 0 || (c.underAttackBy2 > 0 && c.underAttackBy2 != i))) { npcs[i].killerId = 0; return; } if (npcs[i].heightLevel != c.heightLevel) { npcs[i].killerId = 0; return; } npcs[i].facePlayer(c.playerId); boolean special = false;//specialCase(c,i); if(goodDistance(npcs[i].getX(), npcs[i].getY(), c.getX(), c.getY(), distanceRequired(i)) || special) { if(c.respawnTimer <= 0) { npcs[i].facePlayer(c.playerId); npcs[i].attackTimer = getNpcDelay(i); npcs[i].hitDelayTimer = getHitDelay(i); npcs[i].attackType = 0; if (special) loadSpell2(i); else loadSpell(i); if (npcs[i].attackType == 3) npcs[i].hitDelayTimer += 2; if (multiAttacks(i)) { multiAttackGfx(i, npcs[i].projectileId); startAnimation(getAttackEmote(i), i); npcs[i].oldIndex = c.playerId; return; } if(npcs[i].projectileId > 0) { int nX = Server.npcHandler.npcs[i].getX() + offset(i); int nY = Server.npcHandler.npcs[i].getY() + offset(i); int pX = c.getX(); int pY = c.getY(); int offX = (nY - pY)* -1; int offY = (nX - pX)* -1; c.getPA().createPlayersProjectile(nX, nY, offX, offY, 50, getProjectileSpeed(i), npcs[i].projectileId, 43, 31, -c.getId() - 1, 65); } c.underAttackBy2 = i; c.singleCombatDelay2 = System.currentTimeMillis(); npcs[i].oldIndex = c.playerId; startAnimation(getAttackEmote(i), i); c.getPA().removeAllWindows(); } } } } public int offset(int i) { switch (npcs[i].npcType) { case 50: return 2; case 2881: case 2882: return 1; case 2745: case 2743: return 1; } return 0; } public boolean specialCase(Client c, int i) { //responsible for npcs that much if (goodDistance(npcs[i].getX(), npcs[i].getY(), c.getX(), c.getY(), 8) && !goodDistance(npcs[i].getX(), npcs[i].getY(), c.getX(), c.getY(), distanceRequired(i))) return true; return false; } public boolean retaliates(int npcType) { return npcType < 3777 || npcType > 3780 && !(npcType >= 2440 && npcType <= 2446); } public void applyDamage(int i) { if(npcs[i] != null) { if(Server.playerHandler.players[npcs[i].oldIndex] == null) { return; } if (npcs[i].isDead) return; Client c = (Client) Server.playerHandler.players[npcs[i].oldIndex]; if (multiAttacks(i)) { multiAttackDamage(i); return; } if (c.playerIndex <= 0 && c.npcIndex <= 0) if (c.autoRet == 1) c.npcIndex = i; if(c.attackTimer <= 3 || c.attackTimer == 0 && c.npcIndex == 0 && c.oldNpcIndex == 0) { c.startAnimation(c.getCombat().getBlockEmote()); } if(c.respawnTimer <= 0) { int damage = 0; if(npcs[i].attackType == 0) { damage = Misc.random(npcs[i].maxHit); if (10 + Misc.random(c.getCombat().calculateMeleeDefence()) > Misc.random(Server.npcHandler.npcs[i].attack)) { damage = 0; } if(c.prayerActive[18]) { if (npcs[i].npcType == 1158 || npcs[i].npcType == 1160) damage = (damage / 2); else damage = 0; } } if (c.playerLevel[3] - damage < 0) { damage = c.playerLevel[3]; } if(npcs[i].attackType == 1) { // range damage = Misc.random(npcs[i].maxHit); if (10 + Misc.random(c.getCombat().calculateRangeDefence()) > Misc.random(Server.npcHandler.npcs[i].attack)) { damage = 0; } if(c.prayerActive[17]) { // protect from range damage = 0; } if (c.playerLevel[3] - damage < 0) { damage = c.playerLevel[3]; } } if(npcs[i].attackType == 2) { // magic damage = Misc.random(npcs[i].maxHit); boolean magicFailed = false; if (10 + Misc.random(c.getCombat().mageDef()) > Misc.random(Server.npcHandler.npcs[i].attack)) { damage = 0; magicFailed = true; } if (c.playerLevel[3] - damage < 0) { damage = c.playerLevel[3]; } if(npcs[i].endGfx > 0 && (!magicFailed || isFightCaveNpc(i))) { c.gfx100(npcs[i].endGfx); } else { c.gfx100(85); } if(c.prayerActive[16]) { // protect from magic if (npcs[i].npcType == 1158) damage = (damage / 2); else damage = 0; magicFailed = true; } } if (npcs[i].attackType == 3) { //fire breath int anti = c.getPA().antiFire(); if (anti == 0) { damage = Misc.random(30) + 10; c.sendMessage("You are badly burnt by the dragon fire!"); } else if (anti == 1) damage = Misc.random(20); else if (anti == 2) damage = Misc.random(5); if (c.playerLevel[3] - damage < 0) damage = c.playerLevel[3]; c.gfx100(npcs[i].endGfx); } handleSpecialEffects(c, i, damage); c.logoutDelay = System.currentTimeMillis(); // logout delay //c.setHitDiff(damage); c.handleHitMask(damage); c.playerLevel[3] -= damage; c.getPA().refreshSkill(3); FightCaves.tzKihEffect(c, i, damage); c.updateRequired = true; //c.setHitUpdateRequired(true); } } } public void handleSpecialEffects(Client c, int i, int damage) { if (npcs[i].npcType == 2892 || npcs[i].npcType == 2894) { if (npcs[i].npcType == 1158 || npcs[i].npcType == 1160) { if (damage > 0) { if (c != null) { if (c.playerLevel[5] > 0) { c.playerLevel[5]--; c.getPA().refreshSkill(5); c.getPA().appendPoison(12); } } } } } } public NPC[] getNPCs() { return npcs; } public static void startAnimation(int animId, int i) { npcs[i].animNumber = animId; npcs[i].animUpdateRequired = true; npcs[i].updateRequired = true; } public boolean goodDistance(int objectX, int objectY, int playerX, int playerY, int distance) { return ((objectX-playerX <= distance && objectX-playerX >= -distance) && (objectY-playerY <= distance && objectY-playerY >= -distance)); } public int getMaxHit(int i) { switch (npcs[i].npcType) { case 1158: if (npcs[i].attackType == 2) return 30; else return 30; case 2558: if (npcs[i].attackType == 2) return 28; else return 68; case 2562: return 31; case 2550: return 36; } return 1; } public boolean loadAutoSpawn(String FileName) { String line = ""; String token = ""; String token2 = ""; String token2_2 = ""; String[] token3 = new String[10]; boolean EndOfFile = false; int ReadMode = 0; BufferedReader characterfile = null; try { characterfile = new BufferedReader(new FileReader("./"+FileName)); } catch(FileNotFoundException fileex) { Misc.println(FileName+": file not found."); return false; } try { line = characterfile.readLine(); } catch(IOException ioexception) { Misc.println(FileName+": error loading file."); return false; } while(EndOfFile == false && line != null) { line = line.trim(); int spot = line.indexOf("="); if (spot > -1) { token = line.substring(0, spot); token = token.trim(); token2 = line.substring(spot + 1); token2 = token2.trim(); token2_2 = token2.replaceAll("\t\t", "\t"); token2_2 = token2_2.replaceAll("\t\t", "\t"); token2_2 = token2_2.replaceAll("\t\t", "\t"); token2_2 = token2_2.replaceAll("\t\t", "\t"); token2_2 = token2_2.replaceAll("\t\t", "\t"); token3 = token2_2.split("\t"); if (token.equals("spawn")) { newNPC(Integer.parseInt(token3[0]), Integer.parseInt(token3[1]), Integer.parseInt(token3[2]), Integer.parseInt(token3[3]), Integer.parseInt(token3[4]), getNpcListHP(Integer.parseInt(token3[0])), Integer.parseInt(token3[5]), Integer.parseInt(token3[6]), Integer.parseInt(token3[7])); } } else { if (line.equals("[ENDOFSPAWNLIST]")) { try { characterfile.close(); } catch(IOException ioexception) { } return true; } } try { line = characterfile.readLine(); } catch(IOException ioexception1) { EndOfFile = true; } } try { characterfile.close(); } catch(IOException ioexception) { } return false; } public int getNpcListHP(int npcId) { for (int i = 0; i < maxListedNPCs; i++) { if (NpcList[i] != null) { if (NpcList[i].npcId == npcId) { return NpcList[i].npcHealth; } } } return 0; } public String getNpcListName(int npcId) { for (int i = 0; i < maxListedNPCs; i++) { if (NpcList[i] != null) { if (NpcList[i].npcId == npcId) { return NpcList[i].npcName; } } } return "nothing"; } public boolean loadNPCList(String FileName) { String line = ""; String token = ""; String token2 = ""; String token2_2 = ""; String[] token3 = new String[10]; boolean EndOfFile = false; int ReadMode = 0; BufferedReader characterfile = null; try { characterfile = new BufferedReader(new FileReader("./"+FileName)); } catch(FileNotFoundException fileex) { Misc.println(FileName+": file not found."); return false; } try { line = characterfile.readLine(); } catch(IOException ioexception) { Misc.println(FileName+": error loading file."); return false; } while(EndOfFile == false && line != null) { line = line.trim(); int spot = line.indexOf("="); if (spot > -1) { token = line.substring(0, spot); token = token.trim(); token2 = line.substring(spot + 1); token2 = token2.trim(); token2_2 = token2.replaceAll("\t\t", "\t"); token2_2 = token2_2.replaceAll("\t\t", "\t"); token2_2 = token2_2.replaceAll("\t\t", "\t"); token2_2 = token2_2.replaceAll("\t\t", "\t"); token2_2 = token2_2.replaceAll("\t\t", "\t"); token3 = token2_2.split("\t"); if (token.equals("npc")) { newNPCList(Integer.parseInt(token3[0]), token3[1], Integer.parseInt(token3[2]), Integer.parseInt(token3[3])); } } else { if (line.equals("[ENDOFNPCLIST]")) { try { characterfile.close(); } catch(IOException ioexception) { } return true; } } try { line = characterfile.readLine(); } catch(IOException ioexception1) { EndOfFile = true; } } try { characterfile.close(); } catch(IOException ioexception) { } return false; } }
« Previous Thread | Next Thread » |
Thread Information |
Users Browsing this ThreadThere are currently 1 users browsing this thread. (0 members and 1 guests) |