Code:
package main.model.npcs;
import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;
import main.model.items.*;
import main.model.npcs.dropsystem.*;
import main.Config;
import main.Server;
import main.clip.region.Region;
import main.event.CycleEvent;
import main.event.CycleEventContainer;
import main.event.CycleEventHandler;
import main.event.Event;
import main.event.EventContainer;
import main.event.EventManager;
import main.model.minigames.Barrows;
import main.model.npcs.pet.Pet;
import main.model.players.Client;
import main.model.players.Events;
import main.model.players.Player;
import main.model.players.PlayerHandler;
import main.model.players.skills.DuoSlayer;
import main.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 NPCHandler() {
for (int i = 0; i < maxNPCs; i++) {
npcs[i] = null;
NPCDefinitions.getDefinitions()[i] = null;
}
loadNPCList("./Data/CFG/npc.cfg");
loadAutoSpawn("./Data/CFG/spawn-config.cfg");
}
public static final int[] slayerReqs = { 1648, 5, 1600, 10, 1612, 15, 1631,
20, 1620, 25, 1633, 30, 3153, 33, 1616, 40, 1643, 45, 1618, 50,
1637, 52, 1623, 55, 1604, 60, 6220, 63, 1608, 70, 3068, 72, 9467,
73, 1610, 75, 9465, 77, 9172, 78, 1613, 80, 1615, 85, 2783, 90,
9463, 93, 1624, 65 };
public void multiAttackGfx(int i, int gfx) {
if (npcs[i].projectileId < 0)
return;
for (int j = 0; j < PlayerHandler.players.length; j++) {
if (PlayerHandler.players[j] != null) {
Client c = (Client) PlayerHandler.players[j];
if (c.heightLevel != npcs[i].heightLevel)
continue;
if (PlayerHandler.players[j].goodDistance(c.absX, c.absY,
npcs[i].absX, npcs[i].absY, 15)) {
int nX = NPCHandler.npcs[i].getX() + offset(i);
int nY = 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 isZombie(int j) {
switch (NPCHandler.npcs[j].npcType) {
case 73:
case 74 :
case 75 :
case 76 :
case 77 :
case 1826 :
case 2837 :
case 2839 :
case 2840 :
case 2841 :
case 2842 :
case 2060 :
case 5399 :
case 5397 :
case 5398 :
case 5395 :
case 3622 :
case 3066 :
return true;
default:
return false;
}
}
public static 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;
}
public int spawnNpc3(Client c, int npcType, int x, int y, int heightLevel,
int WalkingType, int HP, int maxHit, int attack, int defence,
boolean attackPlayer, boolean headIcon, boolean summonFollow) {
// 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 -1;
}
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.facePlayer(c.playerId);
if (headIcon)
c.getPA().drawHeadicon(1, slot, 0, 0);
if (summonFollow) {
newNPC.summoner = true;
newNPC.summonedBy = c.playerId;
c.summonId = npcType;
c.hasNpc = true;
}
if (attackPlayer) {
/*
* newNPC.underAttack = false; if(c != null) { newNPC.killerId =
* c.playerId; }
*/
}
npcs[slot] = newNPC;
followPlayer(slot, c.playerId);
return slot;
}
public int summonItemId(int itemId) {
if (itemId == 1555)
return 761;
if (itemId == 1556)
return 762;
if (itemId == 1557)
return 763;
if (itemId == 1558)
return 764;
if (itemId == 1559)
return 765;
if (itemId == 1560)
return 766;
if (itemId == 1561)
return 768;
if (itemId == 1562)
return 769;
if (itemId == 1563)
return 770;
if (itemId == 1564)
return 771;
if (itemId == 1565)
return 772;
if (itemId == 1566)
return 773;
if (itemId == 7585)
return 3507;
if (itemId == 7584)
return 3506;
if (itemId == 7583)
return 3505;
if (itemId == 12653)
return 4000; // prince
if (itemId == 12694)
return 4003; // ele
if (itemId == 12650)
return 4001; // bandos
if (itemId == 12649)
return 4005; // arma
if (itemId == 12652)
return 4006; // zammy
if (itemId == 12651)
return 4007; // sara
if (itemId == 12643)
return 4008; // dag sup
if (itemId == 12644)
return 4009; // dag prime
if (itemId == 12645)
return 4010; // dag rex
if (itemId == 12655)
return 6305; // kraken
return 0;
}
public boolean switchesAttackers(int i) {
switch (npcs[i].npcType) {
case 4056:
return true;
case 3068:
case 3943:
case 2551:
case 2552:
case 2553:
case 2559:
case 2560:
case 3847:
case 2561:
case 2563:
case 2564:
case 2565:
case 2892:
case 2894:
case 6218:
case 1158:
case 1160:
return true;
}
return false;
}
public void multiAttackDamage(int i) {
int max = getMaxHit(i);
for (int j = 0; j < PlayerHandler.players.length; j++) {
if (PlayerHandler.players[j] != null) {
Client c = (Client) PlayerHandler.players[j];
if (c.isDead || c.heightLevel != npcs[i].heightLevel)
continue;
if (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);
}
}
}
public int getClosePlayer(int i) {
for (int j = 0; j < PlayerHandler.players.length; j++) {
if (PlayerHandler.players[j] != null) {
if (j == npcs[i].spawnedBy)
return j;
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)
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 npcSize(int i) {
switch (npcs[i].npcType) {
case 2883:
case 2882:
case 2881:
return 3;
}
return 0;
}
public boolean isAggressive(int i) {
switch (npcs[i].npcType) {
case 4056:
case 3499:
case 3500:
case 3501:
case 3502:
case 3943:
case 5363:
case 3847:
//case 4056:
case 1158:
case 1160:
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 2035:
// GWD
case 6250:// Npcs That Give ArmaKC
case 6230:
case 6231:
case 6229:
case 6232:
case 6240:
case 6241:
case 6242:
case 6233:
case 6234:
case 6243:
case 6244:
case 6245:
case 6246:
case 6238:
case 6239:
case 6227:
case 6625:
case 6223:
case 6222: // end of armadyl npcs
case 122:// Npcs That Give BandosKC
case 100:// Npcs That Give BandosKC
case 6278:
case 6277:
case 6276:
case 6283:
case 6282:
case 6281:
case 6280:
case 6279:
case 6271:
case 6272:
case 6273:
case 6274:
case 6269:
case 6270:
case 6268:
case 6265:
case 6263:
case 6261:
//case 6260: // end of bandos npcs
case 6221:
case 6219:
case 6220:
case 6217:
case 6216:
case 6215:
case 6214:
case 6213:
case 6212:
case 6211:
case 6218:
case 6208:
case 6206:
case 6204:
case 6203:
case 6275:
case 6257:// Npcs That Give SaraKC
case 6255:
case 6256:
case 6258:
case 6259:
case 6254:
case 6252:
case 6248:
case 6247:
return true;
}
if (isZombie(i))
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();
if (headIcon)
c.getPA().drawHeadicon(1, slot, 0, 0);
if (attackPlayer) {
newNPC.underAttack = true;
if (c != null) {
if(Barrows.COFFIN_AND_BROTHERS[c.randomCoffin][1] != newNPC.npcType && (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!");
}
if(Barrows.COFFIN_AND_BROTHERS[c.randomCoffin][1] == newNPC.npcType) {
newNPC.forceChat("You dare steal from us!");
}
if(npcType >= 4279 && npcType <= 4284) {
newNPC.forceChat("I\'m ALIVE!");
}
newNPC.killerId = c.playerId;
}
}
for (int[] Guard : Events.NPCs) {
if (newNPC.npcType == Guard[2]) {
newNPC.forceChat("Halt, Thief!");
CycleEventHandler.getSingleton().addEvent(c, new CycleEvent() {
@Override
public void execute(CycleEventContainer container) {
container.stop();
}
@Override
public void stop() {
newNPC.isDead = true;
newNPC.updateRequired = true;
c.hasEvent = false;
}
}, 200);
}
}
npcs[slot] = newNPC;
}
/**
* Emotes
**/
public static int getAttackEmote(int i) {
for (int npc = 2015; npc < 2021; npc++) {
if(NPCHandler.npcs[i].npcType == npc) {
return 5554;
}
}
for (int npc = 1958; npc < 1969; npc++) {
if(NPCHandler.npcs[i].npcType == npc) {
return 5549;
}
}
switch (NPCHandler.npcs[i].npcType) {
case 2044: //zulrah
case 2042:
return 5068;
case 2043:
return 5807;
case 3068:// wyv
if (npcs[i].attackType == 0)
return 2989;
if (npcs[i].attackType == 3)
return 2989;
case 3499: //callisto
return 4925;
case 3501: // Scorpia
return 6254;
case 3500: // Venenatis
return 5327;
case 3502: // Vet'ion
return 5485;
case 3847:
return 3992;
//list starts here
case 1940:
return 1142;
case 1600:
case 1601:
case 1602:
case 1603:
return 227;
case 1218:
return 1263;
case 5993://Experiment No.2
return 6513;
case 5902:
return 6319;
case 6261:
case 6263:
case 6265:
return 6154;
case 1560:
case 1561:
case 1562:
case 1563:
case 1564:
case 1565:
case 1566:
return 284;
case 1317:
case 2267:
case 2268:
case 2269:
case 3181:
case 3182:
case 3183:
case 3184:
case 3185:
return 451;
case 1973:
return 5499;
case 1976:
return 6562;
case 6279:
case 6280:
case 6281:
case 6282:
return 6185;
case 5529:
return 5782;
case 6116:
return 6811;
case 5247:
return 5411;
case 6260:
return 7060;
case 5219:
case 5218:
case 5217:
case 5216:
case 5215:
case 5214:
case 5213:
return 5097;
case 5233:
case 5232:
case 5231:
case 5230:
return 5395;
case 3761:
case 3760:
return 3880;
case 3771:
return 3922;
case 3062:
return 2955;
case 131:
return 5669;
case 4404:
case 4405:
case 4406:
return 4266;
case 1019:
return 1029;
case 1020:
return 1035;
case 1021:
return 1040;
case 1022:
return 1044;
case 1676:
return 1626;
case 1677:
return 1616;
case 1678:
return 1612;
case 195:
case 196:
case 202:
case 204:
case 203:
return 412;
case 4353:
case 4354:
case 4355:
return 4234;
case 2709:
case 2710:
case 2711:
case 2712:
return 1162;
case 1007:
return 811;
case 1608:
return 1512;
case 3058:
return 2930;
case 113:
return 128;
case 114:
case 115:
return 359;
case 1265:
return 1312;
case 118:
return 99;
case 127:
return 185;
case 914:
return 197;
case 1620:
case 1621:
return 1562;
case 678:
return 426;
case 1192:
return 1245;
case 119:
return 99;
case 2263:
return 2182;
case 3347:
case 3346:
return 3326;
case 3063:
return 2930;
case 3061:
return 2958;
case 3066:
return 2927;
case 3452:
return 5411;
case 2783:
return 2731;
case 908:
return 128;
case 909:
return 143;
case 911:
return 64;
case 1624:
case 1625:
return 1557;
case 3060:
return 2962;
case 2598:
case 2599:
case 2600:
case 2601:
case 2602:
case 2603:
case 2604:
return 2609;
case 2892:
return 2869;
case 2881:
return 2855;
case 2882:
return 2854;
case 2883:
return 2853;
case 2457:
return 2365;
case 1590:
case 1591:
case 1592:
return 80;
case 1341:
return 1341;
case 2606:
return 2609;
case 66:
case 67:
case 168:
case 169:
case 162:
case 68:
return 190;
case 913:
case 912:
return 1162;
case 160:
case 161:
return 191;
case 163:
case 164:
return 192;
case 438:
case 439:
case 440:
case 441:
case 442:
case 443:
return 94;
case 391:
case 392:
case 393:
case 394:
case 395:
case 396:
return 284;
case 413:
case 414:
case 415:
case 416:
case 417:
case 418:
return 153;
case 3741:
return 3901;
case 3776:
return 3897;
case 3751:
case 3750:
case 3749:
case 3748:
case 3747:
return 3908;
case 1153:
case 1154:
case 1155:
case 1156:
case 1157:
case 1158:
return 6223;
case 1160:
return 6235;
case 2734:
case 2627:
return 2621;
case 2630:
case 2738:
case 2736:
case 2629:
return 2625;
case 2631:
case 2632:
return 2633;
case 2741:
return 2636;
case 60:
case 62:
case 64:
case 59:
case 61:
case 63:
case 134:
case 1009:
case 2035:
return 5327;
case 6006:
return 6547;
case 1612:
return 1523;
case 1648:
case 1649:
case 1650:
case 1651:
case 1652:
case 1653:
case 1654:
case 1655:
case 1656:
case 1657:
return 1592;
case 1604:
case 1605:
case 1606:
case 1607:
return 1507;
case 1618:
case 1619:
return 1552;
case 1643:
case 1644:
case 1645:
case 1646:
case 1647:
return 429;
case 1613:
return 1528;
case 1610:
case 1611:
return 1517;
case 1615:
return 1537;
case 1633:
case 3406:
return 1582;
case 1459:
return 1402;
case 1456:
return 1394;
case 1125:
return 284;
case 1096:
case 1097:
case 1098:
case 1106:
case 1942:
case 1108:
case 1109:
case 1110:
case 1111:
case 1112:
case 1116:
case 1117:
case 1101:
return 284;
case 1095:
return 1142;
case 49:
case 142:
case 95:
case 1951:
return 6581;
case 74:
case 75:
case 76:
return 5571;
case 73:
case 751:
case 77:
return 5568;
case 50:
return 91;
case 103:
case 104:
case 655:
case 749:
case 491:
return 5540;
case 708:
return 169;
case 397:
return 59;
case 172:
return 1162;
case 86:
case 87:
return 4935;
case 47:
return 2705;
case 122:
return 164;
case 141:
return 6579;
case 1593:
return 6562;
case 1954:
case 152:
case 45:
case 1558:
return 75;
case 89:
return 6376;
case 133:
return 289;
case 1585:
case 110:
case 1582:
case 1583:
case 1584:
case 1586:
case 4291:
case 4292:
return 4666;
case 111:
case 4687:
return 4672;
case 4690:
case 4691:
case 4692:
case 4693:
case 117:
case 116:
case 112:
case 1587:
case 1588:
return 4652;
case 128:
case 1479:
return 275;
case 2591:
case 2620:
return 2609;
case 2610:
case 2619:
return 2610;
case 2033:
case 748:
return 138;
case 2031:
return 2070;
case 101:
return 309;
case 90:
case 91:
case 5359:
case 5384:
case 92:
case 93:
return 5485;
case 1766:
case 1767:
case 81:
return 5849;
case 3065:
return 2721;
case 21:
return 451;
case 1017:
case 2693:
case 41:
return 5387;
case 82:
case 83:
case 752:
case 3064:
case 4694:
case 4695:
case 4696:
case 4697:
case 84:
case 4702:
case 4703:
case 4704:
case 4705:
return 64;
case 123:
return 163;
case 9:
case 32:
case 20:
return 451;
case 2456:
return 1343;
case 2455:
case 2454:
case 1338:
case 1340:
case 1342:
return 1341;
case 941:
case 55:
case 54:
case 742:
case 1589:
case 52:
case 53:
case 4669:
case 4670:
case 4671:
return 91;
case 1092:
case 19:
return 406;
case 125:
return 451;
case 78:
case 412:
return 30;
case 105:
case 1195:
case 1196:
return 4922;
case 2889:
return 2859;
case 132:
return 220;
case 108:
case 1477:
return 6254;
case 107:
case 144:
return 6254;
case 2028:
return 2075;
case 2025:
return 729;
case 2026:
return 2067;
case 2027:
return 2080;
case 2029:
return 0x814;
case 2030:
return 2062;
case 6212://Werewolf
case 6213://Werewolf
return 6536;
case 6271://Ork
case 6272://Ork
case 6273://Ork
case 6274://Ork
return 4320;
case 6285://Warped Terrorbird
case 6293://Warped Terrorbird
return 7108;
case 6296://Warped Tortoise
case 6297://Warped Tortoise
return 7093;
case 6763://Dried Zombie
return 5578;
case 5248://Queen Spawn
return 5092;
case 5452://Icelord
case 5453://Icelord
case 5454://Icelord
case 5455://Icelord
return 5725;
case 5627://Sorebones
case 5628://Sorebones
return 5647;
case 5691://Undead Lumberjack
case 5699://Undead Lumberjack
case 5707://Undead Lumberjack
case 5715://Undead Lumberjack
case 5723://Undead Lumberjack
case 5731://Undead Lumberjack
case 5739://Undead Lumberjack
case 5747://Undead Lumberjack
return 5970;
case 5750://Cave Bug
return 6079;
case 5906://A doubt
return 6310;
case 3313://Tanglefoot
return 3262;
case 4397://Catablepon
case 4398://Catablepon
case 4399://Catablepon
return 4273;
case 4418://Gorak
case 6218://Gorak
return 4300;
case 4463://Vampire Juvenate
case 4464://Vampire Juvenate
case 4465://Vampire Juvenate
return 7183;
case 4527://Suqah
return 4387;
case 4893://Giant Lobster
return 6261;
case 4971://Baby Roc
return 5031;
case 4972://Giant Roc
return 5024;
case 5176://Ogre Shaman
case 5181://Ogre Shaman
case 5184://Ogre Shaman
case 5187://Ogre Shaman
case 5190://Ogre Shaman
case 5193://Ogre Shaman
return 359;
case 1831://Cave Slime
return 1793;
case 2497://Tribesman
return 729;
case 10100://Bulwark Beast
return 13001;
case 2361://Elf Warrior
case 2362://Elf Warrior
case 1183://Elf Warrior
return 426;
case 3495://Kalphite Queen 2
if (npcs[i].attackType == 0)
return 2075;
else
return 1979;
case 3200://Chaos Elemental
return 3146;
case 6222://Kree'arra
return 3505;
case 6225://Flockleader Geerin
return 6953;
case 6223://Wingman Skree
return 6952;
case 6227://Flight Kilisa
return 6954;
case 6247://Commander Zilyana
return 6964;
case 6248://Starlight
return 6376;
case 6250://Growler
return 7018;
case 6252://Bree
return 7009;
case 8281://Ballance Elemental
return 10680;
case 8282://Ballance Elemental
return 10669;
case 8283://Ballance Elemental
return 10681;
case 8597://Avatar Of Creation
case 9437://Decaying Avatar
return 11202;
case 8596://Avatar Of Destruction
return 11197;
case 3497://Gelatinnoth Mother
case 3498://Gelatinnoth Mother
return 1341;
case 7133://Bork
return 8754;
case 5666://Barrelchest
if (npcs[i].attackType == 0)
return 5894;
else
return 5895;
case 3340://Giant Mole
if(npcs[i].attackType == 7)
return 3311;
else if (npcs[i].attackType == 0) //melee
return 3312;
case 2746://Yt-Hurkot
return 2637;
case 2607://Tzhaar-Xil
return 2611;
case 2743://Ket-Zek
return 9264;
case 7368://Void Shifter
case 7369://Void Shifter
return 8130;
case 7371://Void Ravager
return 8093;
case 7352://Void Torcher
return 8234;
case 5228://Penance Runner
return 5228;
//Training & Misc
case 1640://Jelly
return 8575;
case 1250://Fiyr Shade
return 1284;
case 6753://Mummy
return 5554;
case 5250://Scarab Mage
return 7621;
case 7808://Mummy Warrior
return 5554;
case 7135://Ork Legion
return 8760;
case 2894://Spinolyp
return 2868;
case 2037://Skeleton
return 5485;
case 6270://Cyclops
case 6269://Ice cyclops
return 4652;
case 6219:// Spiritual Warrior
case 6255:// Spiritual Warrior
return 451;
case 13://Wizard
return 711;
case 1616://Basilisk
return 1546;
case 5363://Mithril Dragon
return 80;
case 124://Earth Warrior
return 390;
case 803://Monk
return 422;
case 51://Baby Dragon
case 106://Bear
return 41;
case 102://Goblin
case 100://Goblin
case 1770:
case 1771:
case 1772:
case 1773:
case 2678:
case 2679:
case 1774:
case 1775:
case 1776:
return 6188;
case 2452://Giant Rock Crab
return 1312;
case 1472://Jungle Demon
return 64;
case 1267://Rock Crab
return 1312;
case 5234:
case 5235:
case 5236:
case 5237: // Penance ranger
return 5396;
case 910:
case 907:
return 729;
case 3835:
return 6240;
case 3836:
return 6234;
case 3496:
if (npcs[i].attackType == 0)
return 3508;
else
return 3507;
case 3494:
return 1750;
case 3493:
if (npcs[i].attackType == 0)
return 3501;
else
return 3502; // end
case 3581:
return Misc.random(1) == 0 ? 5485 : 5487;
case 3291:
return 5485;
case 1575:
return 6581;
case 1471:
return 5519;
case 94:
return 5485;
case 709:
case 2550:
if (npcs[i].attackType == 0)
return 7060;
else
return 7063;
case 6203:
return 6945;
case 6204:
case 6206:
case 6208:
return 64;
// bandos gwd
case 5365: // skele
return 260;
case 178:
return 451;
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;
case 6254:
case 6256:
case 6257:
case 6258:
case 6214:
return 806;
case 6216:
return 1582;
case 6221:
return 811;
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 6268:
return 2935;
case 6283:
return 6184;
case 6276:
case 6277:
return 4320;
case 6275:
return 164;
default:
return 0x326;
}
}
public int getDeadEmote(int i) {
for (int npc = 2015; npc < 2021; npc++) {
if(NPCHandler.npcs[i].npcType == npc) {
return 5555;
}
}
for (int npc = 1958; npc < 1969; npc++) {
if(NPCHandler.npcs[i].npcType == npc) {
return 5551;
}
}
switch (npcs[i].npcType) {
// pest control portals
case 6142:
case 6143:
case 6144:
case 6145:
return -1;
case 3068:// wyv
return 2987;// wyv death
case 2044:
case 2043:
case 2042:
return 5072;
case 3499:
////bosslog(3499, i);
return 4929;
case 3501: // Scorpia
//bosslog(3501, i);
return 6256;
case 3500: // Venenatis
//bosslog(3500, i);
case 3502: // Vet'ion
//bosslog(3502, i);
return 5491;
//case 4056:
//return 5808;
case 3847:
//bosslog(3847, i);
return 3993;
case 6218:// Corporeal Beast
return 10059;
case 1940:
return 286;
case 1600:
case 1601:
case 1602:
case 1603:
return 228;
case 1560:
case 1561:
case 1562:
case 1563:
case 1564:
case 1565:
case 1566:
return 287;
case 6261:
case 6263:
case 6265:
return 6156;
case 6279:
case 6280:
case 6281:
case 6282:
return 6182;
case 5902:
return 6322;
case 1973:
return 5503;
case 1976:
return 6564;
case 5529:
return 5784;
case 6116:
return 6812;
case 5247:
return 5412;
case 5233:
case 5232:
case 5231:
case 5230:
return 5397;
case 1019:
return 1031;
case 1020:
return 1037;
case 1021:
return 1041;
case 1022:
return 1048;
case 5219:
case 5218:
case 5217:
case 5216:
case 5215:
case 5214:
case 5213:
return 5098;
case 4353:
case 4354:
case 4355:
return 4233;
case 113:
return 131;
case 114:
case 115:
return 361;
case 3058:
return 2938;
case 3057:
return 2945;
case 3063:
return 2938;
case 131:
return 5671;
case 1608:
return 1513;
case 1676:
return 1628;
case 1677:
return 1618;
case 1678:
return 1614;
case 4404:
case 4405:
case 4406:
return 4265;
case 914:
return 196;
case 3065:
return 2728;
case 1620:
case 1621:
return 1563;
case 3066:
return 2925;
case 1265:
return 1314;
case 118:
return 102;
case 2263:
return 2183;
case 2598:
case 2599:
case 2600:
case 2601:
case 2602:
case 2603:
case 2606:
case 2591:
case 2604:
return 2607;
case 3347:
case 3346:
return 3327;
case 1192:
return 1246;
case 1624:
case 1625:
return 1558;
case 2892:
return 2865;
case 127:
return 188;
case 119:
return 102;
case 2881:
case 2882:
case 2883:
return 2856;
case 1590:
case 1591:
case 1592:
return 92;
case 2783:
return 2733;
case 3452:
return 5412;
case 2889:
return 2862;
case 1354:
case 1341:
return 1342;
case 3200:
return 3147;
case 2457:
return 2367;
case 66:
case 67:
case 168:
case 169:
case 162:
case 68:
return 196;
case 160:
case 161:
return 196;
case 163:
case 164:
return 196;
case 1153:
case 1154:
case 1155:
case 1156:
case 1157:
case 1158:
return 6230;
case 1160:
return 6234;
case 438:
case 439:
case 440:
case 441:
case 442:
case 443:
return 97;
case 391:
case 392:
case 393:
case 394:
case 395:
case 396:
return 287;
case 413:
case 414:
case 415:
case 416:
case 417:
case 418:
return 156;
case 2745:
return 2654;
case 2743:
return 2646;
case 2734:
case 2627:
return 2620;
case 2630:
case 2629:
case 2736:
case 2738:
return 2627;
case 2631:
case 2632:
return 2630;
case 2741:
return 2638;
case 908:
return 131;
case 909:
return 146;
case 911:
return 67;
case 60:
case 59:
case 61:
case 63:
case 64:
case 134:
case 2035:
case 62:
case 1009:
return 5329;
case 6006:
return 6537;
case 1612:
return 1524;
case 1648:
case 1649:
case 1650:
case 1651:
case 1652:
case 1653:
case 1654:
case 1655:
case 1656:
case 1657:
return 1590;
case 1604:
case 1605:
case 1606:
case 1607:
return 1508;
case 1618:
case 1619:
return 1553;
case 1643:
case 1644:
case 1645:
case 1646:
case 1647:
return 2304;
case 1613:
return 1530;
case 1610:
case 1611:
return 1518;
case 1615:
return 1538;
case 3406:
case 1633:
return 1580;
case 1456:
return 1397;
case 122:
return 167;
case 1125:
return 287;
case 1096:
case 1097:
case 1098:
case 1942:
case 1108:
case 1109:
case 1110:
case 1111:
case 1112:
case 1116:
case 1117:
case 1101:
case 1106:
case 1095:
return 287;
case 103:
case 104:
case 749:
case 655:
case 491:
return 5542;
case 49:
case 142:
case 95:
case 1951:
return 6576;
case 74:
case 75:
case 76:
return 5569;
case 73:
case 751:
case 77:
return 5569;
case 50:
return 92;
case 708:
case 3062:
return 172;
case 81:
case 397:
return 5851;
case 86:
case 87:
return 4933;
case 47:
return 2707;
case 2620:
case 2610:
case 2619:
return 2607;
case 89:
return 6377;
case 133:
return 292;
case 2033:
case 748:
return 141;
case 2031:
return 2073;
case 101:
return 313;
case 105:
case 1195:
case 1196:
return 4930;
case 128:
case 1479:
return 278;
case 132:
return 223;
case 108:
case 1477:
return 6256;
case 144:
case 107:
return 6256;
case 90:
case 91:
case 5359:
case 5384:
case 92:
case 93:
return 5491;
case 82:
case 3064:
case 4694:
case 4695:
case 4696:
case 4697:
case 83:
case 752:
case 84:
case 4702:
case 4703:
case 4704:
case 4705:
return 67;
case 941:
case 55:
case 53:
case 4669:
case 4670:
case 4671:
case 742:
case 1589:
case 54:
case 52:
return 92;
case 6260:
return 7062;
case 123:
case 3061:
return 167;
case 141:
return 6570;
case 1593:
return 6564;
case 152:
case 45:
case 1558:
case 1954:
return 78;
case 1459:
return 1404;
case 78:
case 412:
return 36;
case 1766:
case 1767:
return 0x03E;
case 1017:
case 2693:
case 41:
return 5389;
case 1585:
case 110:
case 1582:
case 1583:
case 1584:
case 1586:
case 4291:
case 4292:
return 4673;
case 111:
case 4687:
return 4673;
case 4690:
case 4691:
case 4692:
case 4693:
case 117:
case 116:
case 112:
case 1587:
case 1588:
return 4653;
case 2455:
case 2454:
case 2456:
case 1338:
case 1340:
case 1342:
return 1342;
case 125:
return 843;
case 5993://Experiment No.2
return 6512;
case 6212://Werewolf
case 6213://Werewolf
return 6537;
case 6271://Ork
case 6272://Ork
case 6273://Ork
case 6274://Ork
return 4321;
case 6285://Warped Terrorbird
case 6293://Warped Terrorbird
return 7109;
case 6296://Warped Tortoise
case 6297://Warped Tortoise
return 7091;
case 6763://Dried Zombie
return 5569;
case 5248://Queen Spawn
return 5093;
case 5452://Icelord
case 5453://Icelord
case 5454://Icelord
case 5455://Icelord
return 5726;
case 5627://Sorebones
case 5628://Sorebones
return 5649;
case 5691://Undead Lumberjack
case 5699://Undead Lumberjack
case 5707://Undead Lumberjack
case 5715://Undead Lumberjack
case 5723://Undead Lumberjack
case 5731://Undead Lumberjack
case 5739://Undead Lumberjack
case 5747://Undead Lumberjack
return 5972;
case 5750://Cave Bug
return 6081;
case 5906://A doubt
return 6315;
case 3313://Tanglefoot
return 3263;
case 4397://Catablepon
case 4398://Catablepon
case 4399://Catablepon
return 4270;
case 4418://Gorak
return 4302;
case 4527://Suqah
return 4389;
case 4893://Giant Lobster
return 6267;
case 4971://Baby Roc
return 5033;
case 4972://Giant Roc
return 5037;
case 5176://Ogre Shaman
case 5181://Ogre Shaman
case 5184://Ogre Shaman
case 5187://Ogre Shaman
case 5190://Ogre Shaman
case 5193://Ogre Shaman
return 361;
case 1831://Cave Slime
return 1792;
case 907://Kolodion
case 910://Kolodion
case 2497://Tribesman
return 714;
case 10100://Bulwark Beast
return 13005;
case 1250://Fiyr Shade
return 1285;
case 9172://Aquanite
return 12039;
case 3497://Gelatinoth Mother
case 3498://Gelatinoth Mother
return 1342;
case 8777://Handcannonneer
return 12181;
case 5250://Scarab Mage
return 7616;
case 7808://Mummy Warrior
return 5555;
case 6753://Mummy
return 5555;
case 7797://Kurask Overlord
return 9440;
case 8324://Elite Black Knight
return 836;
case 10815://New Red Dragon
case 10607://New Green Dragon
case 10224://New Black Dragon
return 13153;
case 7133://Bork
return 8756;
case 7135://Ork Legion
return 8761;
case 3340://Giant Mole
return 3310;
case 8321://Elite Dark Mage
return 2304;
case 5666://Barrelchest
return 5898;
case 6247://Commander Zilyana
return 6965;
case 6248://Starlight
return 6377;
case 6250://Growler
return 7016;
case 6252://Bree
return 7011;
case 8133://Corpreal Beast
return 10050;
case 8349://Tormented Demon
return 10924;
case 2894://Spinolyp
return 2865;
case 6222://Kree'ara
return 3503;
case 6223://Wingman Skree
case 6225://Flockleader Geerin
case 6227://Flight Kilisa
return 6956;
case 2607://Tzhaar-Xil
return 2607;
case 2746://Yt-Hurkot
return 2638;
case 102://Goblin
case 100://Goblin
case 1770:
case 1771:
case 1772:
case 1773:
case 2678:
case 2679:
case 1774:
case 1775:
case 1776:
return 6182;
case 1626://Turoth
case 1627://Turoth
case 1628://Turoth
case 1629://Turoth
case 1630://Turoth
case 1631://Turoth
case 1632://Turoth
return 1597;
case 1616://Basilisk
return 1548;
case 1472://Jungle Demon
return 67;
case 51://Baby Dragon
case 3376://Baby Black Dragon
return 28;
case 1634://Pyrefiend
case 1635://Pyrefiend
case 1636://Pyrefiend
return 1580;
case 106://Black Bear
return 44;
case 58://Shadow Spider
return 146;
case 2440:
case 2443:
case 2446:
return -1;
case 5234:
case 5235:
case 5236:
case 5237: // Penance ranger
return 5397;
case 3835:
return 6242;
case 3836:
return 6233;
case 709:
case 3496:
return 3509;
case 3493:
return 3503;
case 3494:
return 1752;
case 6203:
return 6946;
case 6204:
case 6206:
case 6208:
return 67;
case 6275:
return 167;
case 6276:
case 6277:
return 4321;
case 6211:
return 172;
case 6219:
case 6221:
case 6254:
case 6255:
case 6256:
case 6257:
case 6258:
case 6214:
return 0x900;
case 6216:
return 1580;
case 6268:
return 2938;
case 6269:
case 6270:
return 4653;
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;
// bandos gwd
case 2551:
case 2552:
case 2553:
return 6156;
case 2550:
return 7062;
case 3777:
case 3778:
case 3779:
case 3780:
return -1;
case 3581:
return 5491;
case 3291:
return 5491;
case 94:
return 5491;
case 1471:
return 5521;
case 1575:
return 6576;
default:
return 2304;
}
}
public static int getBlockEmote(int i) {
if (npcs[i].npcType == 3776)
return 3895;
if (npcs[i].npcType == 3761)
return 3881;
if (npcs[i].npcType == 3760)
return 3881;
if (npcs[i].npcType == 3771)
return 3921;
if (npcs[i].npcType == 3751 || npcs[i].npcType == 3750
|| npcs[i].npcType == 3749 || npcs[i].npcType == 3748
|| npcs[i].npcType == 3747)
return 3909;
if (npcs[i].npcType == 3741)
return 3902;
switch (npcs[i].npcType) {
case 78:
case 412: // bat
return 4916;
case 6250: // sara lion
return 7017;
case 6248: // sara horse
return 6375;
case 6247: // sara boss
return 6966;
case 2060:// slash bash
return 360;
case 5902:// inadequacy
return 6319;
case 5421:// mutant tarn
return 5618;
case 5666:// barrelchest
return 5897;
case 5665:
case 5664:// zombiepirate
return 5890;
case 3847: // stq
return 3992;
case 103:
case 104:
case 655:
case 749:
case 491: // ghost
return 5541;
case 3200: // chaos ele
return 3148;
case 115: // ogre
return 360;
case 3340: // giant mole
return 3311;
case 4972: // giant roc
return 5026;
case 4971: // baby roc
return 5032;
case 1608: // kurask
return 1514;
case 1616: // basilisk
return 1547;
case 1632: // turoth
return 1596;
case 1622: // rockslug
return 1567;
case 1600: // cave crawler
return -1;
case 6279:
case 6280:
case 6281:
case 6282:
return 6183;
case 5529:
return 5783;
// bandos
case 6260:
return 7061;
case 6261:
case 6263:
case 6265:
return 6155;
case 5247:
return 5413;
case 6116: // Seagull
return 6810;
case 5233:
case 5232:
case 5231:
case 5230:
return 5396;
case 5219:
case 5218:
case 5217:
case 5216:
case 5215:
case 5214:
case 5213:
return 5096; // Penance
case 113:
return 129;
case 114:
return 360;
case 3058:
return 2937;
case 3061:
return 2961;
case 3063:
return 2937;
case 131:
return 5670;
case 1676:
return 1627;
case 1677:
return 1617;
case 1678:
return 1613;
case 1019:
return 1030;
case 1020:
return 1036;
case 1021:
return 1042;
case 1022:
return 1046;
case 914:
return 194;
case 4353:
case 4354:
case 4355:
return 4232;
case 4404:
case 4405:
case 4406:
return 4267;
case 3065:
return 2720;
case 1620:
case 1621:
return 1560;
case 3066:
return 2926;
case 1265:
return 1313;
case 118:
return 100;
case 2263:
return 2181;
case 82:
case 84:
case 4702:
case 4703:
case 4704:
case 4705:
case 752:
case 4694:
case 4695:
case 4696:
case 4697:
case 3064:
case 83: // lesser
return 65;
case 3347:
case 3346:
return 3325;
case 1192:
return 1244;
case 3062:
return 2953;
case 3060:
return 2964;
case 2892: // Spinolyp
case 2894: // Spinolyp
case 2896: // Spinolyp
return 2869;
case 1624:
case 1625:
return 1555;
case 1354:
case 1341:
case 2455:// dagannoth
case 2454:
case 2456:
return 1340;
case 127:
return 186;
case 119:
return 100;
case 2881: // supreme
case 2882: // prime
case 2883: // rex
return 2852;
case 3452:// penance queen
return 5413;
case 2745:
return 2653;
case 2743:
return 2645;
case 1590:// metal dragon
case 1591:
case 1592:
case 5363:
return 89;
case 2598:
case 2599:
case 2600:
case 2610:
case 2601:
case 2602:
case 2603:
case 2606:// tzhaar-xil
case 2591:
case 2604:// tzhar-hur
return 2606;
case 66:
case 67:
case 168:
case 169:
case 162:
case 68:// gnomes
return 193;
case 160:
case 161:
return 194;
case 163:
case 164:
return 193;
case 438:
case 439:
case 440:
case 441:
case 442: // Tree spirit
case 443:
return 95;
case 391:
case 392:
case 393:
case 394:
case 395:// river troll
case 396:
case 1560:
case 1566:
return 285;
case 413:
case 414:
case 415:
case 416:
case 417:// rock golem
case 418:
return 154;
case 1153:
case 1154:
case 1155:
case 1156:
case 1157:
case 1158: // kalphite
return 6232;
case 1160: // kalphite
return 6237;
case 2783:// dark beast
return 2732;
case 2734:
case 2627:// tzhaar
return 2622;
case 2630:
case 2629:
case 2736:
case 2738:
return 2626;
case 2631:
case 2632:
return 2629;
case 2741:
return 2635;
case 908:
return 129;
case 909:
return 147;
case 911:
return 65;
case 1459:// monkey guard
return 1403;
case 1633: // pyrefiend
case 3406:
return 1581;
case 1612:// banshee
return 1525;
case 1648:
case 1649:
case 1650:
case 1651:
case 1652:
case 1653:
case 1654:
case 1655:
case 1656:
case 1657:// crawling hand
return 1591;
case 1604:
case 1605:
case 1606:
case 1607:// aberrant specter
return 1509;
case 1618:
case 1619:// bloodveld
return 1550;
case 1643:
case 1644:
case 1645:
case 1646:
case 1647:// infernal mage
return 430;
case 1613:// nechryael
return 1529;
case 1610:
case 1611:// gargoyle
return 1519;
case 1615:// abyssal demon
return 1537;
case 1770:
case 1771:
case 1772:
case 1773:
case 101:
case 2678:
case 2679:
case 1774:
case 1775:
case 1769:
case 1776:// goblins
return 6183;
case 132: // monkey
return 221;
case 6006: // wolfman
return 6538;
case 1456:// monkey archer
return 1395;
case 108:// scorpion
case 1477:
return 6255;
case 107:
case 144:
return 6255;
case 1125:// dad
return 285;
case 1096:
case 1097:
case 1098:
case 1942:
case 1108:
case 1109:
case 1110:
case 1111:
case 1112:
case 1116:
case 1117:
case 1101:// troll
case 1106:
return 285;
case 1095:
return 285;
case 123:
case 122:// hobgoblin
return 165;
case 49:// hellhound
case 142:
case 95:
case 96:
case 125:
return 6578;
case 141:
return 6578;
case 1593:
return 6563;
case 152:
case 45:
case 1558: // wolf
case 1954:
return 76;
case 89:
return 6375;
case 133: // unicorns
return 290;
case 105:
case 1195:
case 1196:// bear
return 4921;
case 74:
case 75:
case 76:
return 5574;
case 73:
case 751: // zombie
case 77:
case 419:
case 420:
case 421:
case 422:
case 423:
case 424:
return 5574;
case 60:
case 64:
case 59:
case 61:
case 63:
case 134:
case 2035: // spider
case 62:
case 1009:
return 5328;
case 1585:
case 110:
case 1582:
case 1583:
case 1584:
case 1586: // giant
case 4291:
case 4292:
return 4671;
case 111:
case 4687:
return 4671;
case 4690:
case 4691:
case 4692:
case 4693:
case 117:
case 116:
case 112:
case 1587:
case 1588:
return 4651;
case 50: // kbd
return 89;
case 941:// green dragon
case 55:
case 742:
case 1589:
case 53:
case 4669:
case 4670:
case 4671:
case 52:
case 54:
return 89;
case 2889:
return 2860;
case 81: // cow
case 397:
return 5850;
case 708: // imp
return 170;
case 86:
case 87:
return 139;
case 47:// rat
return 2706;
case 2457:
return 2366;
case 128: // snake
case 1479:
return 276;
case 1017:
case 2693:
case 41: // chicken
return 5388;
case 90:
case 91:
case 5359:
case 5384:
case 92:
case 93: // skeleton
return 5489;
/*case 3247: // Hobgoblin
case 6270: // Cyclops
case 6269: // Ice cyclops
case 6219: // Spiritual Warrior
case 6255: // Spiritual Warrior
case 6229: // Spirtual Warrior arma
case 6218: // Gorak
case 6212: // Werewolf
case 6220: // Spirtual Ranger
case 6256: // Spirtual Ranger
case 6257: // Spirtual Mage
case 6221: // Spirtual Mage
case 6276: // Spirtual Ranger
case 6278: // Spirtual Mage
case 6272: // Ork
case 6274: // Ork
case 6277: // Spirtual Warrior bandos
case 6230: // Spirtual Ranger
case 6233: // Aviansie
case 6239: // Aviansie
case 6232: // Aviansie
case 6254: // Saradomin Priest
case 6258: // Saradomin Knight
case 6231: // Spirtual Mage
return -1;*/
default:
return -1;
}
}
/**
* 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 6260:
return 6;
// saradomin gw boss
case 2562:
return 2;
case 1158:
case 1160:
return 6;
case 53:
case 54:
case 55:
case 941:
case 1590:
case 1591:
case 1592:
return 7;
case 6222:
case 6225:
case 6223:
case 6227:
case 2550:
return 6;
case 6203:
return 5;
case 6204:
case 6206:
case 6208:
return 6;
// saradomin gw boss
case 6247:
return 2;
default:
return 5;
}
}
/**
* Hit delays
**/
public int getHitDelay(int i) {
switch (npcs[i].npcType) {
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 2025:
return 4;
case 2028:
return 3;
default:
return 2;
}
}
/**
* Npc respawn time
**/
public int getRespawnTime(int i) {
if (isZombie(i))
return -1;
switch (npcs[i].npcType) {
case 2881:
case 2882:
case 2883:
case 2558:
case 2559:
case 2560:
case 2561:
case 2562:
case 2563:
case 2564:
case 6260:
case 6222:
case 6203:
case 6247:
case 3068:
return 60;
case 3847:
case 3943:
return 60;
case 3499:
case 3500:
case 3501:
case 3502:
return 60;
case 6142:
case 6143:
case 6144:
case 6145:
return -1;
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) {
NPCDefinitions newNPCList = new NPCDefinitions(npcType);
newNPCList.setNpcName(npcName);
newNPCList.setNpcCombat(combat);
newNPCList.setNpcHealth(HP);
NPCDefinitions.getDefinitions()[npcType] = 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) {
NPC npc = npcs[i];
Client petOwner = (Client) PlayerHandler.players[npc.summonedBy];
if (petOwner == null && npc.summoned)
{
Pet.deletePet(npc);
}
if (petOwner != null && petOwner.isDead)
{
Pet.deletePet(npc);
}
if (petOwner != null && petOwner.getPetSummoned() && npc.summoned)
{
if (petOwner.goodDistance(npc.getX(), npc.getY(), petOwner.absX, petOwner.absY, 15))
{
Server.npcHandler.followPlayer(i, petOwner.playerId);
}
else
{
Pet.deletePet(npc);
Pet.summonPet(petOwner, petOwner.petID, petOwner.absX, petOwner.absY - 1, petOwner.heightLevel);
}
}
}
}
for (int i = 0; i < maxNPCs; i++) {
if (npcs[i] != null) {
if (npcs[i].summoner == true) {
Client c = (Client) PlayerHandler.players[npcs[i].spawnedBy];
if (c != null && c.playerIndex < 1) {
if (!npcs[i].underAttack) {
if (!PlayerHandler.players[npcs[i].spawnedBy]
.goodDistance(
npcs[i].getX(),
npcs[i].getY(),
PlayerHandler.players[npcs[i].spawnedBy]
.getX(),
PlayerHandler.players[npcs[i].spawnedBy]
.getY(), 2)
&& c.npcIndex < 1)
followPlayer(i, c.playerId);
}
} else {
if (c != null && npcs[i].summoner == true) {
if (!PlayerHandler.players[npcs[i].spawnedBy]
.goodDistance(
npcs[i].getX(),
npcs[i].getY(),
PlayerHandler.players[npcs[i].spawnedBy]
.getX(),
PlayerHandler.players[npcs[i].spawnedBy]
.getY(), 5)
&& c.playerIndex < 1 || c.npcIndex < 1) {
followPlayer(i, c.playerId);
}
}
}
}
if (npcs[i].actionTimer > 0) {
npcs[i].actionTimer--;
}
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 (PlayerHandler.players[npcs[i].spawnedBy] == null
|| PlayerHandler.players[npcs[i].spawnedBy].heightLevel != npcs[i].heightLevel
|| PlayerHandler.players[npcs[i].spawnedBy].respawnTimer > 0
|| !PlayerHandler.players[npcs[i].spawnedBy]
.goodDistance(
npcs[i].getX(),
npcs[i].getY(),
PlayerHandler.players[npcs[i].spawnedBy]
.getX(),
PlayerHandler.players[npcs[i].spawnedBy]
.getY(), 20)) {
if (PlayerHandler.players[npcs[i].spawnedBy] != null) {
for (int o = 0; o < PlayerHandler.players[npcs[i].spawnedBy].barrowsNpcs.length; o++) {
if (npcs[i].npcType == PlayerHandler.players[npcs[i].spawnedBy].barrowsNpcs[o][0]) {
if (PlayerHandler.players[npcs[i].spawnedBy].barrowsNpcs[o][1] == 1)
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);
}
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 (PlayerHandler.players[p] != null) {
Client c = (Client) PlayerHandler.players[p];
followPlayer(i, c.playerId);
if (npcs[i] == null)
continue;
if (npcs[i].attackTimer == 0) {
attackPlayer(c, i);
}
} 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);
handleClipping(i);
npcs[i].updateRequired = true;
}
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 (npcs[i].heightLevel, npcs[i].absX,
// npcs[i].absY, x, y, 0))
handleClipping(i);
npcs[i].getNextNPCMovement(i);
handleClipping(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);
killedCrypt(i);
if (isFightCaveNpc(i))
killedTzhaar(i);
npcs[i].actionTimer = 4; // delete time
resetPlayersInCombat(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);
appendSlayerExperience(i);
appendDuoSlayerExperience(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 == 2745) {
handleJadDeath(i);
}
if (isZombie(i)) {
}
} else if (npcs[i].actionTimer == 0
&& npcs[i].needRespawn == true
&& npcs[i].npcType != 6142
&& npcs[i].npcType != 6143
&& npcs[i].npcType != 6144
&& npcs[i].npcType != 6145) {
Client player = (Client) PlayerHandler.players[npcs[i].spawnedBy];
if (player != null) {
npcs[i] = null;
} else {
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);
}
}
}
}
}
}
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 killedCrypt(int i) {
Client c = (Client)Server.playerHandler.players[npcs[i].killedBy];
if(c != null) {
for(int o = 0; o < c.barrowCrypt.length; o++){
if(npcs[i].npcType == c.barrowCrypt[o][0]) {
c.barrowsKillCount++;
c.getPA().sendFrame126(""+c.barrowsKillCount, 16137);
}
}
}
}
public boolean getsPulled(int i) {
switch (npcs[i].npcType) {
case 6260:
if (npcs[i].firstAttacker > 0)
return false;
break;
}
return true;
}
public boolean multiAttacks(int i) {
switch (npcs[i].npcType) {
case 3499: //callisto
if (npcs[i].attackType == 1)
return true;
case 3943:
if (npcs[i].attackType == 2)
return true;
case 3847: //kraken
if (npcs[i].attackType == 1)
return true;
case 6222:// kree
if (npcs[i].attackType == 1 || npcs[i].attackType == 2)
return true;
case 6218:// corp
if (npcs[i].attackType == 2 || npcs[i].attackType == 1)
return true;
case 2558:
return true;
case 2562:
if (npcs[i].attackType == 2)
return true;
case 6260:
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 (PlayerHandler.players[p] != null) {
if (PlayerHandler.players[p].lastNpcAttacked == npcId) {
if (PlayerHandler.players[p].totalDamageDealt > oldDamage) {
oldDamage = PlayerHandler.players[p].totalDamageDealt;
killerId = p;
}
PlayerHandler.players[p].totalDamageDealt = 0;
}
}
}
return killerId;
}
/**
*
*/
private void killedTzhaar(int i) {
final Client c2 = (Client) PlayerHandler.players[npcs[i].spawnedBy];
c2.tzhaarKilled++;
if (c2.tzhaarKilled == c2.tzhaarToKill) {
c2.waveId++;
if (c2 != null) {
Server.fightCaves.spawnNextWave(c2);
}
}
}
public void handleJadDeath(int i) {
Client c = (Client) PlayerHandler.players[npcs[i].spawnedBy];
c.getItems().addItem(6570, 1);
c.sendMessage("Congratulations on completing the fight caves minigame!");
c.getPA().resetTzhaar();
c.waveId = 300;
}
private void spawnSecondForm(final int i) {
EventManager.getSingleton().addEvent(new Event() {
@Override
public void execute(EventContainer e) {
spawnNpc2(1160, npcs[i].absX, npcs[i].absY, 0, 1, 255, 31, 600,
300);
e.stop();
}
}, 4000);
}
private void spawnFirstForm(final int i) {
EventManager.getSingleton().addEvent(new Event() {
@Override
public void execute(EventContainer e) {
spawnNpc2(1158, npcs[i].absX, npcs[i].absY, 0, 1, 255, 31, 600,
300);
e.stop();
}
}, 30000);
}
public static void appendAssaultCount(int i) {
Client c = (Client) PlayerHandler.players[npcs[i].killedBy];
if (c != null) {
int[] assaultMonsters = { 253, 258 };
for (int j : assaultMonsters) {
if (npcs[i].npcType == 258) {
c.assaultPoints += 2;
}
if (npcs[i].npcType == j) {
c.assaultPoints++;
c.sendMessage("@blu@Barbarian Assault Points: @red@" + c.assaultPoints);
c.getPA().loadQuests();
}
}
}
}
public void handleAssaultMG(int i) {
Client c = (Client) PlayerHandler.players[npcs[i].killedBy];
c.assaultPoints += 1;
c.sendMessage("@red@You now have " + c.assaultPoints + " Assault Point(s).");
c.getPA().sendFrame126(
"@or1@Assault Points: @gre@" + c.assaultPoints + "", 29171);
}
public void defenderDrop(int i) {
Client c = (Client) PlayerHandler.players[npcs[i].killedBy];
int dropDef = Misc.random(12);
int x = npcs[i].absX;
int y = npcs[i].absY;
if (dropDef == 1) {
if (c.playerEquipment[c.playerShield] == 8844) {
c.getItems().addItem(8845, 1);
c.sendMessage("@blu@You receive an Iron Defender in your Inventory!");
}
if (c.playerEquipment[c.playerShield] == 8845) {
c.getItems().addItem(8846, 1);
c.sendMessage("@blu@You receive a Steel Defender in your Inventory!");
}
if (c.playerEquipment[c.playerShield] == 8846) {
c.getItems().addItem(8847, 1);
c.sendMessage("@blu@You receive a Black Defender in your Inventory!");
}
if (c.playerEquipment[c.playerShield] == 8847) {
c.getItems().addItem(8848, 1);
c.sendMessage("@blu@You receive a Mithril Defender in your Inventory!");
}
if (c.playerEquipment[c.playerShield] == 8848) {
c.getItems().addItem(8849, 1);
c.sendMessage("@blu@You receive an Adamant Defender in your Inventory!");
}
if (c.playerEquipment[c.playerShield] == 8849) {
c.getItems().addItem(8850, 1);
c.sendMessage("@blu@You receive a Rune Defender in your Inventory!");
}
if (c.playerEquipment[c.playerShield] == 8850) {
c.getItems().addItem(12954, 1);
c.sendMessage("@blu@You receive a Dragon Defender in your Inventory!");
}
if (c.playerEquipment[c.playerShield] == 12594) {
c.getItems().addItem(12954, 1);
c.sendMessage("@blu@You receive a Dragon Defender in your Inventory!");
} else {
c.sendMessage("@blu@You receive a Bronze Defender wield it for a chance to obtain a better one.");
c.getItems().addItem(8844, 1);
}
}
}
/*
*
* Zulrah
*
*/
boolean zulrahB;
boolean zulrahR;
boolean zulrahG;
public void changeForm(Client c) {
int B = 2044;
int G = 2022;
int R = 2043;
/*
* If zulraB is true, then it searches for NPC_ID_FOR_B, else if zulrahG is true,
* it searches for NPC_ID_FOR_G, otherwise, it searches for NPC_ID_FOR_R
*/
NPC zulrah = getNpcForId((zulrahB ? 2044 : (zulrahG ? 2042 : 2043)));
// Could not find the npc for some reason, don't attempt to modify it and return.
if(zulrah == null)
return;
// How often our NPC changes forms
//boolean change = Misc.random(10) > 8;
// No change, no need to continue.
/*if(!change)
return;*/
//c.RebuildNPCList = true;
int changeBase = Misc.random(3);
if (zulrah.HP <= 437 && zulrah.HP > 374) {
zulrah.npcType = 2043;
zulrahB = false;
zulrahG = false;
zulrahR = true;
c.RebuildNPCList = true;
} else if (zulrah.HP <= 374 && zulrah.HP > 311) {
zulrah.npcType = 2044;
zulrahB = true;
zulrahG = false;
zulrahR = false;
c.RebuildNPCList = true;
} else if (zulrah.HP <= 311 && zulrah.HP > 248) {
zulrah.npcType = 2042;
zulrahB = false;
zulrahG = true;
zulrahR = false;
c.RebuildNPCList = true;
} else if (zulrah.HP <= 248 && zulrah.HP > 185) {
zulrah.npcType = 2044;
zulrahB = true;
zulrahG = false;
zulrahR = false;
c.RebuildNPCList = true;
} else if (zulrah.HP <= 185 && zulrah.HP > 123) {
zulrah.npcType = 2042;
zulrahB = false;
zulrahG = true;
zulrahR = false;
c.RebuildNPCList = true;
} else if (zulrah.HP <= 123 && zulrah.HP > 61) {
zulrah.npcType = 2044;
zulrahB = true;
zulrahG = false;
zulrahR = false;
c.RebuildNPCList = true;
} else if (zulrah.HP <= 61 && zulrah.HP > 0) { //mage & ranged green
zulrah.npcType = 2042;
zulrahB = false;
zulrahG = true;
zulrahR = false;
c.RebuildNPCList = true;
}
/*switch(changeBase) {
case 0:
case 1:
zulrah.npcType = 2044;
zulrahB = true;
zulrahG = false;
zulrahR = false;
c.sendMessage("c");
break;
case 2:
zulrah.npcType = 2042;
zulrahB = false;
zulrahG = true;
zulrahR = false;
c.sendMessage("c");
break;
case 3:
zulrah.npcType = 2043;
zulrahB = false;
zulrahG = false;
zulrahR = true;
c.sendMessage("c");
break;
}*/
// Anim update if you use anims.
zulrah.animUpdateRequired = true;
// Updates the look of the npc.
zulrah.updateRequired = true;
}
public void spawnZulrah(Client c, int npcType) {
zulrahB = false;
zulrahG = true;
zulrahR = false;
int x = 3087;
int y = 3499;
int trial = Misc.random(1);
//NPCHandler.startAnimation(5071, 2044);
Server.npcHandler.spawnNpc(c, npcType, x, y, 0, 0, 500, 41, 1, 1, true, false);
if (trial == 0) {
changeForm(c);
} else {
changeForm(c);
}
}
/*
*
* End
*
*/
public static NPC getNpcForId(int npcId) {
for(NPC n : NPCHandler.npcs) {
if(n != null && n.npcType == npcId) {
return n;
}
}
return null;
}
/*public void bosslog(int npcId, int i) {
Client c = (Client) PlayerHandler.players[npcs[i].killedBy];
switch (npcId) {
case 3943:
c.giantSeaSnakeKills += 1;
c.sendMessage("@red@You now have " + c.giantSeaSnakeKills + " Giant Sea Snake Kills.");
break;
case 3499:
c.callistoKills += 1;
c.sendMessage("@red@You now have " + c.callistoKills + " Callisto Kills.");
break;
case 3500:
c.venKills += 1;
c.sendMessage("@red@You now have " + c.venKills + " Venenatis Kills.");
break;
case 3501:
c.scorpiaKills += 1;
c.sendMessage("@red@You now have " + c.scorpiaKills + " Scorpia Kills.");
break;
case 3502:
c.vetKills += 1;
c.sendMessage("@red@You now have " + c.vetKills + " Vet'ion Kills.");
break;
case 5363:
c.mithDragKills += 1;
c.sendMessage("@red@You now have " + c.mithDragKills + " Mithril Dragon Kills.");
break;
case 3847:
c.krakenKills += 1;
c.sendMessage("@red@You now have " + c.krakenKills
+ " Kraken Kills.");
break;
case 2881:
c.supremeKills += 1;
c.sendMessage("@red@You now have " + c.supremeKills
+ " Dagannoth Supreme Kills.");
break;
case 2882:
c.primeKills += 1;
c.sendMessage("@red@You now have " + c.primeKills
+ " Dagannoth Prime Kills.");
break;
case 2883:
c.rexKills += 1;
c.sendMessage("@red@You now have " + c.rexKills
+ " Dagannoth Rex Kills.");
break;
case 6247:
c.saraKills += 1;
c.sendMessage("@red@You now have " + c.saraKills
+ " Command Zilyana Kills.");
break;
case 6222:
c.armaKills += 1;
c.sendMessage("@red@You now have " + c.armaKills
+ " Kree'arra Kills.");
break;
case 6260:
c.bandosKills += 1;
c.sendMessage("@red@You now have " + c.bandosKills
+ " General Graardor Kills.");
break;
case 6203:
c.zammyKills += 1;
c.sendMessage("@red@You now have " + c.zammyKills
+ " K'ril Ts Kills.");
break;
case 1158:
case 1160:
c.kqKills += 1;
c.sendMessage("@red@You now have " + c.kqKills
+ " Kalphite Queen Kills.");
break;
case 5666:
c.barrelKills += 1;
c.sendMessage("@red@You now have " + c.barrelKills
+ " Barrelchest Kills.");
break;
case 3200:
c.chaosKills += 1;
c.sendMessage("@red@You now have " + c.chaosKills
+ " Chaos Elemental Kills.");
break;
case 50:
c.kbdKills += 1;
c.sendMessage("@red@You now have " + c.kbdKills
+ " King Black Dragon Kills.");
break;
}
}*/
/**
* Duo Slayer Experience
**/
public static void appendDuoSlayerExperience(int i) {
Client c = (Client)PlayerHandler.players[npcs[i].killedBy];
boolean k = false;
int slayerXP = npcs[i].MaxHP * Config.SLAYER_EXPERIENCE;
int partnerSlayerXP = slayerXP / 4;
if (c != null) {
if (c.duoTask == npcs[i].npcType) {
k = true;
}
if (k) {
c.duoTaskAmount--;
c.getPA().addSkillXP(c, slayerXP, 18);
if (c.getDuoPartner() != null)
c.getDuoPartner().duoTaskAmount--;
if (c.getDuoPartner() != null
&& c.getDuoPartner().connectedFrom != c.connectedFrom) {
c.getPA().addSkillXP(((Client) c.getDuoPartner()), partnerSlayerXP, 18);
}
}
if (c.duoTaskAmount == 0) {
final Player partner = c.getDuoPartner();
DuoSlayer.getInstance().complete(c, partner);
}
}
}
/*public void SlayerLog(int npcId, int i) {
Client c = (Client) PlayerHandler.players[npcs[i].killedBy];
switch (npcId) {
case 1648:// done
c.crawlingHandKills += 1;
// c.sendMessage("@red@ Your Crawling Hand Kill Count Is: " +
// c.crawlingHandKills + " ");
break;
case 1612:// done
c.bansheeKills += 1;
c.sendMessage("@red@ Your Banshee Kill Count Is: " + c.bansheeKills
+ " ");
break;
case 117:// done
c.hillGiantKills += 1;
// c.sendMessage("@red@ Your Hill Giant Kill Count Is: " +
// c.HillGiantKills + " ");
break;
case 1265:// done
//c.crabsKilled += 1;
c.sendMessage("@red@ Your Rock Crab Kill Count Is: "
+ c.crabsKilled + " ");
break;
case 103:// done
c.ghostKills += 1;
// c.sendMessage("@red@ Your Ghost Kill Count Is: " + c.GhostKills +
// " ");
break;
case 78:// done
c.giantBatKills += 1;
// c.sendMessage("@red@ Your Giant Bat Kill Count Is: " +
// c.GiantBatKills + " ");
break;
case 119:// done
c.chaosDwarfKills += 1;
// c.sendMessage("@red@ Your Chaos Dwarf Kill Count Is: " +
// c.ChaosDwarfKills + " ");
break;
case 18:// done
c.alKills += 1;
// c.sendMessage("@red@ Your Al-Khalid Warriors Kill Count Is: " +
// c.AlKills + " ");
break;
case 101:// done
c.goblinKills += 1;
// c.sendMessage("@red@ Your Goblins Kill Count Is: " +
// c.GoblinKills + " ");
break;
case 181:// done
c.chaosDruidKills += 1;
// c.sendMessage("@red@ Your Chaos Druid Kill Count Is: " +
// c.ChaosDruidKills + " ");
break;
case 1643:
c.infernalMageKills += 1;
c.sendMessage("@red@ Your Infernal Mage Kill Count Is: "
+ c.infernalMageKills + " ");
break;
case 1618:
c.bloodveldKills += 1;
c.sendMessage("@red@ Your Bloodveld Kill Count Is: "
+ c.bloodveldKills + " ");
break;
case 941:
c.greenDragKills += 1;
c.sendMessage("@red@ Your Green Dragon Kill Count Is: "
+ c.greenDragKills + " ");
break;
case 82:
//c.lesserDemonKills += 1;
break;
case 52:
c.babyDragKills += 1;
break;
case 112:
c.mossGiantKills += 1;
break;
case 125:
c.iceWarriorKills += 1;
break;
case 1624:
c.dustKills += 1;
c.sendMessage("@red@ Your Dust Devil Kill Count Is: " + c.dustKills
+ " ");
break;
case 1610:
c.gargKills += 1;
c.sendMessage("@red@ Your Gargoyle Kill Count Is: " + c.gargKills
+ " ");
break;
case 1613:
c.nechKills += 1;
c.sendMessage("@red@ Your Nechryael Kill Count Is: " + c.nechKills
+ " ");
break;
case 1615:
c.abbyKills += 1;
c.sendMessage("@red@ Your Abyssal Demon Kill Count Is: "
+ c.abbyKills + " ");
break;
case 55:
c.blueDragKills += 1;
c.sendMessage("@red@ Your Blue Dragon Kill Count Is: "
+ c.blueDragKills + " ");
break;
case 3068:
c.WyvernKills++;
c.sendMessage("@red@ Your Skeletal Wyvern Kill Count Is: "
+ c.WyvernKills + " ");
break;
case 84:
c.blackDemonKills += 1;
c.sendMessage("@red@ Your Black Demon Kill Count Is: "
+ c.blackDemonKills + " ");
break;
case 2783:
c.darkBeastKills += 1;
c.sendMessage("@red@ Your Dark Beast Kill Count Is: "
+ c.darkBeastKills + " ");
break;
}
}*/
/**
* Dropping Items!
**/
public void sendDrop(Client player, Drop drop, int i) {
if(drop.getItemId() >= Config.ITEM_LIMIT){
return;
}
if(Item.getItemName(drop.getItemId()) == null){
return;
}
GameItem item = new GameItem(drop.getItemId(), 1).stackable ? new GameItem(
drop.getItemId(), (drop.getMinAmount() * Config.DROP_RATE)
+ Misc.random(drop.getExtraAmount() * Config.DROP_RATE))
: new GameItem(drop.getItemId(), drop.getMinAmount()
+ Misc.random(drop.getExtraAmount()));
Server.itemHandler.createGroundItem(player, item.id, npcs[i].absX,
npcs[i].absY, item.amount, player.playerId);
}
public void dropItems(int i) {
Client killer = (Client)PlayerHandler.players[npcs[i].killedBy];
Drop[] drops = NPCDrops.getDrops(npcs[i].npcType);
if (drops == null)
return;
Client c = (Client) PlayerHandler.players[npcs[i].killedBy];
if (c != null) {
if (npcs[i].npcType == 912 || npcs[i].npcType == 913
|| npcs[i].npcType == 914)
c.magePoints += 1;
Drop[] possibleDrops = new Drop[drops.length];
int possibleDropsCount = 0;
for (Drop drop : drops) {
if (drop.getRate() == 100)
sendDrop(killer, drop, i);
else {
if ((Misc.random(99) + 1) <= drop.getRate() * 1.0)
possibleDrops[possibleDropsCount++] = drop;
}
}
if (possibleDropsCount > 0)
sendDrop(killer,
possibleDrops[Misc.random(possibleDropsCount - 1)], i);
}
}
// 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:
return 526;
case 3068:
return 6812;
case 117:
return 532;// big bones
case 50:// drags
case 53:
case 54:
case 55:
case 941:
case 1590:
case 1591:
case 1592:
case 5363:
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 void appendKillCount(int i) {
Client c = (Client) PlayerHandler.players[npcs[i].killedBy];
if (c != null) {
int[] kcMonsters = { 122, 49, 2558, 2559, 2560, 2561, 2550, 2551,
2552, 2553, 2562, 2563, 2564, 2565 };
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;
}
}
}
}
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;
}
public void appendSlayerExperience(int i) {
int npc = 0;
Client c = (Client) PlayerHandler.players[npcs[i].killedBy];
if (c != null) {
if (c.slayerTask == npcs[i].npcType) {
c.taskAmount--;
c.getPA().addSkillXP(npcs[i].MaxHP * Config.SLAYER_EXPERIENCE,
18);
c.getPA()
.sendFrame126(
"@or1@Task: @gre@"
+ c.taskAmount
+ " "
+ Server.npcHandler.getNpcListName(c.slayerTask)
+ " ", 29168);
if (c.taskAmount <= 0) {
if (c.combatLevel < 50) {
c.getPA().addSkillXP(
(npcs[i].MaxHP * 8) * Config.SLAYER_EXPERIENCE,
18);
c.slayerTask = -1;
c.slayerPoints += 5;
c.getPA().sendFrame126(
"@or1@Slayer Points: @gre@" + c.slayerPoints
+ " ", 29167);
c.sendMessage("You completed your low level slayer task. Please see a slayer master to get a new one.");
c.sendMessage("Also you have received @red@5 @bla@slayer points for this.");
// c.getItems().addItem(995, 250000);
if (c.playerEquipment[c.playerHat] == 13263) {
c.slayerPoints += 12;
c.getPA().addSkillXP(
(npcs[i].MaxHP * 5)
* Config.SLAYER_EXPERIENCE, 18);
c.sendMessage("@red@You've recieved a bonus of xp and 12 slayer points because wearing slayer helmet.");
}
} else if (c.combatLevel >= 50 && c.combatLevel <= 90) {
c.getPA()
.addSkillXP(
(npcs[i].MaxHP * 12)
* Config.SLAYER_EXPERIENCE, 18);
c.slayerTask = -1;
c.slayerPoints += 10;
c.getPA().sendFrame126(
"@or1@Slayer Points: @gre@" + c.slayerPoints
+ " ", 7339);
c.sendMessage("You completed your @blu@medium@bla@ level slayer task. Please see a slayer master to get a new one.");
c.sendMessage("Also you have received @blu@10 @bla@slayer points for this.");
// c.getItems().addItem(995, 500000);
if (c.playerEquipment[c.playerHat] == 13263) {
c.slayerPoints += 12;
c.getPA().addSkillXP(
(npcs[i].MaxHP * 5)
* Config.SLAYER_EXPERIENCE, 18);
c.sendMessage("@red@You've recieved a bonus of xp and 12 slayer points because wearing slayer helmet.");
}
} else if (c.combatLevel > 90 && c.combatLevel <= 138) {
c.getPA()
.addSkillXP(
(npcs[i].MaxHP * 12)
* Config.SLAYER_EXPERIENCE, 18);
c.slayerTask = -1;
c.slayerPoints += 15;
c.getPA().sendFrame126(
"@or1@Slayer Points: @gre@" + c.slayerPoints
+ " ", 7339);
c.sendMessage("You completed your @red@high@bla@ level slayer task. Please see a slayer master to get a new one.");
c.sendMessage("Also you have received @red@15 @bla@slayer points for this.");
// c.getItems().addItem(995, 1000000);
if (c.playerEquipment[c.playerHat] == 13263) {
c.slayerPoints += 12;
c.getPA().addSkillXP(
(npcs[i].MaxHP * 5)
* Config.SLAYER_EXPERIENCE, 18);
c.sendMessage("@red@You've recieved a bonus of xp and 12 slayer points because wearing slayer helmet.");
}
} else if (c.combatLevel >= 100 && c.eliteTask == true) {
c.getPA()
.addSkillXP(
(npcs[i].MaxHP * 12)
* Config.SLAYER_EXPERIENCE, 18);
c.slayerTask = -1;
c.slayerPoints += 20;
c.getPA().sendFrame126(
"@or1@Slayer Points: @gre@" + c.slayerPoints
+ " ", 7339);
c.sendMessage("You completed your @red@elite@bla@ level slayer task. Please see a slayer master to get a new one.");
c.sendMessage("Also you have received @red@20 @bla@slayer points for this.");
c.eliteTask = false;
// c.getItems().addItem(995, 1000000);
if (c.playerEquipment[c.playerHat] == 13263) {
c.slayerPoints += 22;
c.getPA().addSkillXP(
(npcs[i].MaxHP * 5)
* Config.SLAYER_EXPERIENCE, 18);
c.sendMessage("@red@You've recieved a bonus of xp and 22 slayer points because wearing slayer helmet.");
}
}
}
}
}
}
/**
* Resets players in combat
*/
public void resetPlayersInCombat(int i) {
for (int j = 0; j < PlayerHandler.players.length; j++) {
if (PlayerHandler.players[j] != null)
if (PlayerHandler.players[j].underAttackBy2 == i)
PlayerHandler.players[j].underAttackBy2 = 0;
}
}
/**
* Npc names
**/
public String getNpcName(int npcId) {
if (npcId <= -1) {
return "None";
}
if (NPCDefinitions.getDefinitions()[npcId] == null) {
return "None";
}
return NPCDefinitions.getDefinitions()[npcId].getNpcName();
}
/**
* 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) {
if (npcs[i] == null)
return false;
switch (npcs[i].npcType) {
case 2892:
case 2894:
/*
* case 2030: case 2029: case 2028: case 2027: case 2026: case 2025:
*/
return false;
}
return true;
}
public void followPlayer(int i, int playerId) {
if (PlayerHandler.players[playerId] == null) {
return;
}
if (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 = PlayerHandler.players[playerId].absX;
int playerY = 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 == PlayerHandler.players[playerId].heightLevel) {
if (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);
handleClipping(i);
npcs[i].getNextNPCMovement(i);
handleClipping(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;
}
}
/**
* 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;
}
}
int r3 = 0;
public void loadSpell(int i) {
switch (npcs[i].npcType) {
case 4056:
int zulrah = Misc.random(1);
if (zulrah == 0) {
}
break;
case 3068:
if (Misc.random(10) > 7) {
npcs[i].projectileId = 395; // icy
npcs[i].endGfx = 431;
npcs[i].attackType = 3;
startAnimation(2989, i);
} else {
startAnimation(2980, i);
npcs[i].attackType = 0;
}
break;
case 3499:
int random5 = Misc.random(2);
if (random5 == 0) {
npcs[i].projectileId = 435; //red
npcs[i].attackType = 3;
npcs[i].endGfx = 402;
npcs[i].forceChat("I WILL KILL YOU!");
} else if (random5 == 1) {
npcs[i].projectileId = 26; //red
npcs[i].attackType = 2;
npcs[i].endGfx = 267;
npcs[i].forceChat("HAHAHAHA!");
} else if (random5 == 2) {
npcs[i].projectileId = 59; //melee
npcs[i].endGfx = 354;
npcs[i].attackType = 0;
} else if (random5 == 3) {
npcs[i].attackType = 0;
npcs[i].projectileId = 481;
npcs[i].forceChat("THE TIME HAS COME!!!!!!! HAHAHAHA!");
}
break;
case 3501: // scorpia
int random45 = Misc.random(2);
if (random45 == 0) {
npcs[i].attackType = 0;
} else if (random45 == 1) {
npcs[i].projectileId = 359;
npcs[i].attackType = 3;
} else if (random45 == 2) {
npcs[i].projectileId = 311;
npcs[i].attackType = 0;
npcs[i].forceChat("Skrrrrrrrrrrrrr!!!!");
}
break;
case 3500: //venenatis
int random4 = Misc.random(2);
if (random4 == 0) {
npcs[i].projectileId = 435; //red
npcs[i].attackType = 3;
npcs[i].endGfx = 402;
npcs[i].forceChat("I WILL KILL YOU!");
} else if (random4 == 1) {
npcs[i].projectileId = 26; //red
npcs[i].attackType = 2;
npcs[i].endGfx = 267;
npcs[i].forceChat("HAHAHAHA!");
} else if (random4 == 2) {
npcs[i].projectileId = 59; //melee
npcs[i].endGfx = 354;
npcs[i].attackType = 0;
} else if (random4 == 3) {
npcs[i].attackType = 0;
npcs[i].projectileId = 481;
npcs[i].forceChat("THE TIME HAS COME!!!!!!! HAHAHAHA!");
}
break;
case 3502: //vetion
int random25 = Misc.random(2);
if (random25 == 0) {
npcs[i].endGfx = 83;
npcs[i].attackType = 0;
} else if (random25 == 1) {
npcs[i].endGfx = 346;
npcs[i].attackType = 3;
} else if (random25 == 2) {
npcs[i].attackType = 0;
npcs[i].projectileId = 364;
npcs[i].forceChat("YOU.SHALL.REGRET.ATTACKING.ME!");
}
break;
case 6222:// Kree'arra
int random1 = Misc.random(1);
npcs[i].attackType = 1 + random1;
if (npcs[i].attackType == 1) {
npcs[i].projectileId = 1197;
} else {
npcs[i].attackType = 2;
npcs[i].projectileId = 1196;
}
break;
case 6218:
if (goodDistance(npcs[i].absX, npcs[i].absY,
PlayerHandler.players[npcs[i].killerId].absX,
PlayerHandler.players[npcs[i].killerId].absY, 2))
r3 = Misc.random(2);
else
r3 = Misc.random(1);
if (r3 == 0) {
npcs[i].attackType = 2;
npcs[i].endGfx = -1;
npcs[i].projectileId = 1825;
} else if (r3 == 1) {
npcs[i].attackType = 1;
npcs[i].endGfx = -1;
npcs[i].projectileId = 1824;
} else if (r3 == 2) {
npcs[i].attackType = 0;
npcs[i].gfx100(1834);
npcs[i].projectileId = -1;
}
break;
// kalphite queen form 1
case 1158:
for (int j = 0; j < PlayerHandler.players.length; j++) {
if (PlayerHandler.players[j] != null) {
int kq1;
if (goodDistance(npcs[i].absX, npcs[i].absY,
PlayerHandler.players[npcs[i].killerId].absX,
PlayerHandler.players[npcs[i].killerId].absY, 1))
kq1 = Misc.random(2);
else
kq1 = Misc.random(1);
if (kq1 == 0) {
npcs[i].attackType = 2; // mage
npcs[i].gfx0(278);
npcs[i].projectileId = 280;
npcs[i].endGfx = 281;
} else if (kq1 == 1) {
npcs[i].attackType = 1; // range
npcs[i].gfx0(-1);
npcs[i].endGfx = -1;
npcs[i].projectileId = 473;
} else if (kq1 == 2) {
npcs[i].attackType = 0; // melee
npcs[i].projectileId = -1;
}
}
}
break;
// kalphite queen form 2
case 1160:
for (int j = 0; j < PlayerHandler.players.length; j++) {
if (PlayerHandler.players[j] != null) {
int kq1;
if (goodDistance(npcs[i].absX, npcs[i].absY,
PlayerHandler.players[npcs[i].killerId].absX,
PlayerHandler.players[npcs[i].killerId].absY, 1))
kq1 = Misc.random(2);
else
kq1 = Misc.random(1);
if (kq1 == 0) {
npcs[i].attackType = 2; // mage
npcs[i].gfx0(279);
npcs[i].projectileId = 280;
npcs[i].endGfx = 281;
} else if (kq1 == 1) {
npcs[i].attackType = 1; // range
npcs[i].gfx0(-1);
npcs[i].endGfx = -1;
npcs[i].projectileId = 473;
} else if (kq1 == 2) {
npcs[i].attackType = 0; // melee
npcs[i].projectileId = -1;
}
}
}
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 2044:
int zulrahB = Misc.random(1);
if (zulrahB == 0)
npcs[i].projectileId = 394; // green
npcs[i].endGfx = 429;
npcs[i].attackType = 1;
if (zulrahB == 1)
npcs[i].projectileId = 393; // red
npcs[i].endGfx = 430;
npcs[i].attackType = 2;
break;
case 2042:
npcs[i].projectileId = 394; // green
npcs[i].endGfx = 429;
npcs[i].attackType = 1;
break;
case 2043:
npcs[i].projectileId = -1;
npcs[i].endGfx = -1;
npcs[i].attackType = 0;
break;
case 50:
case 5363:
int random = Misc.random(4);
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;
} else if (random == 4) {
npcs[i].projectileId = -1; // melee
npcs[i].endGfx = -1;
npcs[i].attackType = 0;
}
break;
// arma npcs
case 2561:
npcs[i].attackType = 0;
break;
case 2560:
npcs[i].attackType = 1;
npcs[i].projectileId = 1190;
break;
case 2559:
npcs[i].attackType = 2;
npcs[i].projectileId = 1203;
break;
case 2558:
random = Misc.random(1);
npcs[i].attackType = 1 + random;
if (npcs[i].attackType == 1) {
npcs[i].projectileId = 1197;
} else {
npcs[i].attackType = 2;
npcs[i].projectileId = 1198;
}
break;
// sara npcs
case 2562: // sara
random = Misc.random(1);
if (random == 0) {
npcs[i].attackType = 2;
npcs[i].endGfx = 1224;
npcs[i].projectileId = -1;
} else if (random == 1)
npcs[i].attackType = 0;
break;
case 2563: // star
npcs[i].attackType = 0;
break;
case 2564: // growler
npcs[i].attackType = 2;
npcs[i].projectileId = 1203;
break;
case 2565: // bree
npcs[i].attackType = 1;
npcs[i].projectileId = 9;
break;
// bandos npcs
case 6260:
random = Misc.random(2);
if (random == 0 || random == 1)
npcs[i].attackType = 0;
else {
npcs[i].attackType = 1;
npcs[i].endGfx = 1211;
npcs[i].projectileId = 288;
}
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 3847:
int rand = Misc.random(2);
if (rand == 0) {
npcs[i].projectileId = 162; // green
npcs[i].endGfx = 163;
npcs[i].attackType = 2;
} else if (rand == 1) {
npcs[i].attackType = 1;
npcs[i].endGfx = 166;
npcs[i].projectileId = 165;
} else if (rand == 2) {
npcs[i].attackType = 0;
}
break;
case 3943:
int rando = Misc.random(2);
if (rando == 0) {
npcs[i].projectileId = 162; // green
npcs[i].endGfx = 163;
npcs[i].attackType = 2;
} else if (rando == 1) {
npcs[i].projectileId = 395; // white
npcs[i].endGfx = 431;
npcs[i].attackType = 1;
}
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,
PlayerHandler.players[npcs[i].spawnedBy].absX,
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 = 443;
} 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 4056:
return 8;
case 3499:
case 3500:
case 3501:
case 3502:
return 12;
case 2025:
case 2028:
return 6;
case 6222:
return 20;
case 6218:
case 1158:
case 1160:
return 7;
case 50:
case 5363:
case 2562:
return 2;
case 2881:// dag kings
case 2882:
case 3200:// chaos ele
case 2743:
case 2631:
case 2745:
case 3847:
return 8;
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;
// things around dags
case 2892:
case 3943:
case 2894:
return 10;
//start
//stop
default:
return 1;
}
}
public int followDistance(int i) {
switch (npcs[i].npcType) {
case 6260:
case 2551:
case 2562:
case 2563:
case 6203:
case 6222:
case 6247:
return 5;
case 6261://bandos
case 6265:
case 6263:
case 6204://zammy
case 6206:
case 6208:
case 6250://sara
case 6248:
case 6252:
case 6225://arma
case 6227:
return 2;
//case 3847:
//case 3943:
//return 1;
case 2883:
return 4;
case 2881:
case 2882:
return 1;
case 6218:
return 25;
}
return 0;
}
public int getProjectileSpeed(int i) {
switch (npcs[i].npcType) {
case 2881:
case 2882:
case 3200:
return 85;
case 6222:
return 105;
case 2745:
return 130;
case 50:
case 5363:
case 1158:
case 1160:
return 90;
case 6218:
return 105;
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 = NPCHandler.npcs[i].getX() + offset(i);
int nY = 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();
if (c.teleporting) {
c.startAnimation(65535);
c.teleporting = false;
c.isRunning = false;
c.gfx0(-1);
c.startAnimation(-1);
}
}
}
}
}
public int offset(int i) {
switch (npcs[i].npcType) {
case 6218:
return 2;
case 1158:
case 1160:
return 2;
case 50:
case 5363:
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 < 6142 || npcType > 6145
&& !(npcType >= 2440 && npcType <= 2446);
}
public void applyDamage(int i) {
if (npcs[i] != null) {
if (PlayerHandler.players[npcs[i].oldIndex] == null) {
return;
}
if (npcs[i].isDead)
return;
Client c = (Client) 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(NPCHandler.npcs[i].attack)) {
damage = 0;
}
if (c.prayerActive[18]) { // protect from melee
if (npcs[i].npcType == 3499 || npcs[i].npcType == 3500) {
damage = (damage / 2);
} else
if (npcs[i].npcType == 1615) {
damage = 0;
} else
if (npcs[i].npcType == 3502 || npcs[i].npcType == 3502) {
damage = (damage / 2);
} else
if (npcs[i].npcType == 3847) {
damage = (damage / 2);
} else
if (npcs[i].npcType == 4056) {
damage = (damage / 2);
} else
if (npcs[i].npcType == 3943) {
damage = (damage / 2);
} else
if (npcs[i].npcType == 6247) {
damage = (damage / 4);
} else
if (npcs[i].npcType == 6248) {
damage = (damage / 2);
} else
if (npcs[i].npcType == 6250) {
damage = (damage / 2);
} else
if (npcs[i].npcType == 6252) {
damage = (damage / 2);
} else
if (npcs[i].npcType == 6203) {
damage = (damage / 4);
} else
if (npcs[i].npcType == 6204) {
damage = (damage / 2);
} else
if (npcs[i].npcType == 6206) {
damage = (damage / 2);
} else
if (npcs[i].npcType == 6208) {
damage = (damage / 4);
} else
if (npcs[i].npcType == 6260) {
damage = (damage / 2);
} else
if (npcs[i].npcType == 6261) {
damage = (damage / 2);
} else
if (npcs[i].npcType == 6263) {
damage = (damage / 2);
} else
if (npcs[i].npcType == 6265) {
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(NPCHandler.npcs[i].attack)) {
damage = 0;
}
if (c.prayerActive[17]) { // protect from range
if (npcs[i].npcType == 6222) {
damage = (damage / 4);
}
if (npcs[i].npcType == 3499 || npcs[i].npcType == 3500) {
damage = (damage / 2);
}
if (npcs[i].npcType == 3502 || npcs[i].npcType == 3502) {
damage = (damage / 2);
}
if (npcs[i].npcType == 4056) {
damage = (damage / 2);
}
if (npcs[i].npcType == 3847) {
damage = (damage / 2);
}
if (npcs[i].npcType == 3943) {
damage = (damage / 2);
} else {
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(NPCHandler.npcs[i].attack)) {
damage = 0;
magicFailed = true;
}
if (c.prayerActive[16]) { // protect from magic
if (npcs[i].npcType == 3847) {
damage = (damage / 2);
}
if (npcs[i].npcType == 3499) {
damage = (damage / 1);
}
if (npcs[i].npcType == 3502) {
damage = (damage / 2);
}
if (npcs[i].npcType == 3501) {
damage = (damage / 2);
}
if (npcs[i].npcType == 3500) {
damage = (damage / 2);
}
if (npcs[i].npcType == 4056) {
damage = (damage / 2);
}
if (npcs[i].npcType == 3499) {
damage = (damage / 2);
}
if (npcs[i].npcType == 3943) {
damage = (damage / 2);
}
if (npcs[i].npcType == 6222) {
damage = (damage / 4);
} else {
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 (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!");
}
if(c.playerEquipment[c.playerShield] == 11284 && c.dfsCharge <= 49){
c.dfsCharge += 1;
c.gfx0(1164);
c.startAnimation(6695);
c.sendMessage("Your shield abosrbs the dragon's fire.");
}
if(c.playerEquipment[c.playerShield] == 11283 && c.dfsCharge <= 49){
c.dfsCharge += 1;
c.startAnimation(6696);
c.gfx0(1164);
c.sendMessage("Your shield abosrbs the dragon's fire.");
}
else if (anti == 1)
damage = Misc.random(12);
else if (anti == 2)
damage = Misc.random(6);
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);
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 (damage > 0) {
if (c != null) {
if (c.playerLevel[5] > 0) {
c.playerLevel[5]--;
c.getPA().refreshSkill(5);
c.getPA().appendPoison(12);
}
}
}
}
}
public static void startAnimation(int animId, int i) {
npcs[i].animNumber = animId;
npcs[i].animUpdateRequired = true;
npcs[i].updateRequired = true;
}
public NPC[] getNPCs() {
return npcs;
}
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 3068:
if (npcs[i].attackType == 0)
return 18;
else
return 50;
case 3499:
if (npcs[i].attackType == 1)
return 58;
else
if (npcs[i].attackType == 0)
return 60;
case 6222:
if (npcs[i].attackType == 1)
return 71;
else
return 21;
case 3847:
if (npcs[i].attackType == 1)
return 37;
case 3943:
if (npcs[i].attackType == 2)
return 40;
case 2558:
if (npcs[i].attackType == 2)
return 28;
else
return 68;
case 1158:
case 1160:
return 31;
case 6218:
if (npcs[i].attackType == 2)
return 69;
if (npcs[i].attackType == 1)
return 58;
if (npcs[i].attackType == 0)
return 51;
case 2562:
return 31;
case 6260:
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) {
if (npcId <= -1) {
return 0;
}
if (NPCDefinitions.getDefinitions()[npcId] == null) {
return 0;
}
return NPCDefinitions.getDefinitions()[npcId].getNpcHealth();
}
public String getNpcListName(int npcId) {
if (npcId <= -1) {
return "None";
}
if (NPCDefinitions.getDefinitions()[npcId] == null) {
return "None";
}
return NPCDefinitions.getDefinitions()[npcId].getNpcName();
}
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;
}
}