Code:
package server.model.players;
import server.Config;
import server.Server;
import server.util.Misc;
import server.model.players.Client;
import server.model.players.PlayerSave;
import server.event.EventManager;
import server.model.npcs.NPC;
import server.model.npcs.NPCHandler;
import server.event.EventContainer;
import server.event.Event;
public class CombatAssistant{
private Client c;
public CombatAssistant(Client Client) {
this.c = Client;
}
//public boolean usingCross() = c.playerEquipment[c.playerWeapon] == 9185 && c.playerEquipment[c.playerWeapon] == 18357;
public boolean usingCross() {
return
c.playerEquipment[c.playerWeapon] == 9185 || c.playerEquipment[c.playerWeapon] == 18357;
}
public int[][] slayerReqs = {{1648,5},{1612,15},{1643,45},{1618,50},{1624,65},{1610,75},{1613,80},{1615,85},{2783,90}, {3590, 92}, {3591, 82}, {3592, 72}};
public boolean goodSlayer(int i) {
for (int j = 0; j < slayerReqs.length; j++) {
if (slayerReqs[j][0] == Server.npcHandler.npcs[i].npcType) {
if (slayerReqs[j][1] > c.playerLevel[c.playerSlayer]) {
c.sendMessage("You need a slayer level of " + slayerReqs[j][1] + " to harm this NPC.");
return false;
}
}
}
return true;
}
/**
* Attack Npcs
*/
public void attackNpc(int i) {
if (c.playerEquipment[c.playerWeapon] == 15241) {
c.gfx0(2138);
}
if (c.playerEquipment[c.playerWeapon] == 772) {
c.spellId = 51;
}
if (c.playerEquipment[c.playerWeapon] == 19362) {
c.spellId = 52;
}
if(c.playerEquipment[c.playerWeapon] == 15241 && 15243 != c.playerEquipment[c.playerArrows]){
c.sendMessage("You can't use the Handcannon without Handcannon shots!");
return;
}
if (Server.npcHandler.npcs[i].isDead && Server.npcHandler.npcs[i].npcType == 795) {
c.pcPoints += 1;
}
if (Server.npcHandler.npcs[i] != null) {
if (Server.npcHandler.npcs[i].isDead || Server.npcHandler.npcs[i].MaxHP <= 0) {
c.usingMagic = false;
c.faceUpdate(0);
c.npcIndex = 0;
return;
}
if(c.specEffect == 4) {
c.specEffect = 0;
}
if (c.inWG()) {
resetPlayerAttack();
c.stopMovement();
return;
}
if (Server.npcHandler.npcs[i].npcType == 1000 || Server.npcHandler.npcs[i].npcType == 1001 || Server.npcHandler.npcs[i].npcType == 3100 || Server.npcHandler.npcs[i].npcType == 1002 || Server.npcHandler.npcs[i].npcType == 1003) {
resetPlayerAttack();
c.stopMovement();
return; // Bandos
}
if (Server.npcHandler.npcs[i].npcType == 3104) {
c.sendMessage("You must click the gate before attacking the Corporeal Beast!");
resetPlayerAttack();
c.stopMovement();
return; // Corporeal beast *fake*
}
if (Server.npcHandler.npcs[i].npcType == 1004 || Server.npcHandler.npcs[i].npcType == 1005 || Server.npcHandler.npcs[i].npcType == 1006 || Server.npcHandler.npcs[i].npcType == 1007) {
resetPlayerAttack();
c.stopMovement();
return; // Arma
}
if (Server.npcHandler.npcs[i].npcType == 1008 || Server.npcHandler.npcs[i].npcType == 1009 || Server.npcHandler.npcs[i].npcType == 1010 || Server.npcHandler.npcs[i].npcType == 1011) {
resetPlayerAttack();
c.stopMovement();
return; // Zammy
}
if (Server.npcHandler.npcs[i].npcType == 1012 || Server.npcHandler.npcs[i].npcType == 1013 || Server.npcHandler.npcs[i].npcType == 1014 || Server.npcHandler.npcs[i].npcType == 1015) {
resetPlayerAttack();
c.stopMovement();
return; // Sara
}
if (Server.npcHandler.npcs[i].summon == true) {
if(Server.npcHandler.npcs[i].index != c.playerId || c.wildLevel <= 1) {
resetPlayerAttack();
c.sendMessage("You cannot attack this monster.");
// c.sendMessage("This is "+Server.npcHandler.npcz[i]+" NPC.");
return;
}
}
if(c.respawnTimer > 0) {
c.npcIndex = 0;
return;
}
if (Server.npcHandler.npcs[i].underAttackBy > 0 && Server.npcHandler.npcs[i].underAttackBy != c.playerId && !Server.npcHandler.npcs[i].inMulti()) {
c.npcIndex = 0;
c.sendMessage("This monster is already in combat.");
return;
}
if (Server.npcHandler.npcs[i].inMulti() && c.lastsummon > 0) {
Server.npcHandler.attackNPC(i, c.summoningnpcid);
}
if ((c.underAttackBy > 0 || c.underAttackBy2 > 0) && c.underAttackBy2 != i && !c.inMulti()) {
resetPlayerAttack();
c.sendMessage("I am already under attack.");
return;
}
if (!goodSlayer(i)) {
resetPlayerAttack();
return;
}
/*if (Server.npcHandler.npcs[i].spawnedBy != c.playerId && Server.npcHandler.npcs[i].spawnedBy > 0 && Server.npcHandler.npcs[i].summon != true) {
resetPlayerAttack();
c.sendMessage("This monster was not spawned for you.");
return;
}
if (Server.npcHandler.npcs[i].spawnedBy != c.playerId && Server.npcHandler.npcs[i].spawnedBy > 0) {
resetPlayerAttack();
c.sendMessage("This monster was not spawned for you.");
return;
}*/
if(c.attackTimer <= 0) {
boolean usingBow = false;
boolean usingArrows = false;
boolean usingOtherRangeWeapons = false;
c.bonusAttack = 0;
c.rangeItemUsed = 0;
c.projectileStage = 0;
//c.SaveGame();
if (c.autocasting) {
c.spellId = c.autocastId;
c.usingMagic = true;
}
if (kalphite1(i) && !c.fullVerac() || kalphite1(i) && c.usingMagic) {
resetPlayerAttack();
c.sendMessage("Your attacks have no effect on the Queen, maybe veracs would damage him?");
return;
}
if(c.spellId > 0) {
c.usingMagic = true;
}
c.attackTimer = getAttackDelay(c.getItems().getItemName(c.playerEquipment[c.playerWeapon]).toLowerCase());
c.specAccuracy = 1.0;
c.specDamage = 1.0;
if(!c.usingMagic) {
for (int bowId : c.BOWS) {
if(c.playerEquipment[c.playerWeapon] == bowId) {
usingBow = true;
for (int arrowId : c.ARROWS) {
if(c.playerEquipment[c.playerArrows] == arrowId) {
usingArrows = true;
c.gfx100(getRangeStartGFX());
}
}
}
}
for (int otherRangeId : c.OTHER_RANGE_WEAPONS) {
if(c.playerEquipment[c.playerWeapon] == otherRangeId) {
usingOtherRangeWeapons = true;
}
}
}
if (armaNpc(i) && !usingCross() && !usingBow && !c.usingMagic && !usingCrystalBow() && !usingOtherRangeWeapons) {
resetPlayerAttack();
c.sendMessage("You will only be able to attack these with range or mage!");
return;
}
if((!c.goodDistance(c.getX(), c.getY(), Server.npcHandler.npcs[i].getX(), Server.npcHandler.npcs[i].getY(), 2) && (usingHally() && !usingOtherRangeWeapons && !usingBow && !usingCross() && !c.usingMagic)) ||(!c.goodDistance(c.getX(), c.getY(), Server.npcHandler.npcs[i].getX(), Server.npcHandler.npcs[i].getY(), 4) && (usingOtherRangeWeapons && !usingCross() && !usingBow && !c.usingMagic)) || (!c.goodDistance(c.getX(), c.getY(), Server.npcHandler.npcs[i].getX(), Server.npcHandler.npcs[i].getY(), 1) && (!usingOtherRangeWeapons && !usingHally() && !usingCross() && !usingBow && !c.usingMagic)) || ((!c.goodDistance(c.getX(), c.getY(), Server.npcHandler.npcs[i].getX(), Server.npcHandler.npcs[i].getY(), 8) && (usingBow || usingCross() || c.usingMagic)))) {
c.attackTimer = 2;
return;
}
if(!usingCross() && !usingArrows && usingBow && (c.playerEquipment[c.playerWeapon] < 4212 || c.playerEquipment[c.playerWeapon] > 4223)) {
c.sendMessage("You have run out of arrows!");
c.stopMovement();
c.npcIndex = 0;
return;
}
if(correctBowAndArrows() < c.playerEquipment[c.playerArrows] && Config.CORRECT_ARROWS && usingBow && !usingCrystalBow() && usingCross()) {
c.sendMessage("You can't use "+c.getItems().getItemName(c.playerEquipment[c.playerArrows]).toLowerCase()+"s with a "+c.getItems().getItemName(c.playerEquipment[c.playerWeapon]).toLowerCase()+".");
c.stopMovement();
c.npcIndex = 0;
return;
}
if (usingCross() && !properBolts()) {
c.sendMessage("You must use bolts with a crossbow.");
c.stopMovement();
resetPlayerAttack();
return;
}
if(usingBow || usingCross() || c.usingMagic || usingOtherRangeWeapons || (c.goodDistance(c.getX(), c.getY(), Server.npcHandler.npcs[i].getX(), Server.npcHandler.npcs[i].getY(), 2) && usingHally())) {
c.stopMovement();
}
if(!checkMagicReqs(c.spellId)) {
c.stopMovement();
c.npcIndex = 0;
return;
}
c.faceUpdate(i);
//c.specAccuracy = 1.0;
//c.specDamage = 1.0;
Server.npcHandler.npcs[i].underAttackBy = c.playerId;
Server.npcHandler.npcs[i].lastDamageTaken = System.currentTimeMillis();
if(c.usingSpecial && !c.usingMagic) {
if(checkSpecAmount(c.playerEquipment[c.playerWeapon])){
c.lastWeaponUsed = c.playerEquipment[c.playerWeapon];
c.lastArrowUsed = c.playerEquipment[c.playerArrows];
activateSpecial(c.playerEquipment[c.playerWeapon], i);
return;
} else {
c.sendMessage("You don't have the required special energy to use this attack.");
c.usingSpecial = false;
c.getItems().updateSpecialBar();
c.npcIndex = 0;
return;
}
}
if(usingBow || c.usingMagic || usingOtherRangeWeapons) {
c.mageFollow = true;
} else {
c.mageFollow = false;
}
c.specMaxHitIncrease = 0;
if(!c.usingMagic) {
c.startAnimation(getWepAnim(c.getItems().getItemName(c.playerEquipment[c.playerWeapon]).toLowerCase()));
} else {
c.startAnimation(c.MAGIC_SPELLS[c.spellId][2]);
}
c.lastWeaponUsed = c.playerEquipment[c.playerWeapon];
c.lastArrowUsed = c.playerEquipment[c.playerArrows];
if(!usingBow && !usingCross() && !c.usingMagic && !usingOtherRangeWeapons) { // melee hit delay
c.hitDelay = getHitDelay(c.getItems().getItemName(c.playerEquipment[c.playerWeapon]).toLowerCase());
c.projectileStage = 0;
c.oldNpcIndex = i;
}
if(usingBow && !usingOtherRangeWeapons && !c.usingMagic || usingCross()) { // range hit delay
if (usingCross())
c.usingBow = true;
if (c.fightMode == 2)
c.attackTimer--;
c.lastArrowUsed = c.playerEquipment[c.playerArrows];
c.lastWeaponUsed = c.playerEquipment[c.playerWeapon];
c.gfx100(getRangeStartGFX());
c.hitDelay = getHitDelay(c.getItems().getItemName(c.playerEquipment[c.playerWeapon]).toLowerCase());
c.projectileStage = 1;
c.oldNpcIndex = i;
if(c.playerEquipment[c.playerWeapon] >= 4212 && c.playerEquipment[c.playerWeapon] <= 4223) {
c.rangeItemUsed = c.playerEquipment[c.playerWeapon];
c.crystalBowArrowCount++;
c.lastArrowUsed = 0;
} else {
c.rangeItemUsed = c.playerEquipment[c.playerArrows];
c.getItems().deleteArrow();
}
fireProjectileNpc();
}
if(usingBow && usingCross() && c.usingMagic && usingOtherRangeWeapons) {
c.getPA().followNpc();
c.stopMovement();
} else {
c.followId = 0;
c.followId2 = i;
}
if(usingOtherRangeWeapons && !c.usingMagic && !usingCross() && !usingBow) { // knives, darts, etc hit delay
c.rangeItemUsed = c.playerEquipment[c.playerWeapon];
c.getItems().deleteEquipment();
c.gfx100(getRangeStartGFX());
c.lastArrowUsed = 0;
c.hitDelay = getHitDelay(c.getItems().getItemName(c.playerEquipment[c.playerWeapon]).toLowerCase());
c.projectileStage = 1;
c.oldNpcIndex = i;
if (c.fightMode == 2)
c.attackTimer--;
fireProjectileNpc();
}
if(c.usingMagic) { // magic hit delay
int pX = c.getX();
int pY = c.getY();
int nX = Server.npcHandler.npcs[i].getX();
int nY = Server.npcHandler.npcs[i].getY();
int offX = (pY - nY)* -1;
int offY = (pX - nX)* -1;
c.castingMagic = true;
c.projectileStage = 2;
if(c.MAGIC_SPELLS[c.spellId][3] > 0) {
if(getStartGfxHeight() == 100) {
c.gfx100(c.MAGIC_SPELLS[c.spellId][3]);
} else {
c.gfx0(c.MAGIC_SPELLS[c.spellId][3]);
}
}
if(c.MAGIC_SPELLS[c.spellId][4] > 0) {
c.getPA().createPlayersProjectile(pX, pY, offX, offY, 50, 78, c.MAGIC_SPELLS[c.spellId][4], getStartHeight(), getEndHeight(), i + 1, 50);
}
c.hitDelay = getHitDelay(c.getItems().getItemName(c.playerEquipment[c.playerWeapon]).toLowerCase());
c.oldNpcIndex = i;
c.oldSpellId = c.spellId;
c.spellId = 0;
if (!c.autocasting)
c.npcIndex = 0;
}
if(c.curseActive[18]) { // SoulSplit GFX's - CAUSES CRASH
if(c.oldNpcIndex > 0) {
if(Server.npcHandler.npcs[c.oldNpcIndex] != null) {
try {
if(c.curseActive[18] && !c.prayerActive[23] && c.playerLevel[3] <= 99) {
int heal =5;
if(c.playerLevel[3] + heal >= c.getPA().getLevelForXP(c.playerXP[3])) {
c.playerLevel[3] = c.getPA().getLevelForXP(c.playerXP[3]);
} else {
c.playerLevel[3] += heal;
}
c.getPA().refreshSkill(3);
}
final int pX = c.getX();
final int pY = c.getY();
final int nX = Server.npcHandler.npcs[c.oldNpcIndex].getX();
final int nY = Server.npcHandler.npcs[c.oldNpcIndex].getY();
final int offX = (pY - nY)* -1;
final int offY = (pX - nX)* -1;
c.SSPLIT = true;
c.getPA().createPlayersProjectile2(pX, pY, offX, offY, 50, 50, 2263, 9, 9, c.oldNpcIndex + 1, 24, 0);
EventManager.getSingleton().addEvent(new Event() {
public void execute(EventContainer b) {
Server.npcHandler.npcs[c.oldNpcIndex].gfx0(2264); // 1738
c.SSPLIT = false;
b.stop();
}
}, 500);
/*EventManager.getSingleton().addEvent(new Event() { // CAUSES CRASH
public void execute(EventContainer b) {
//c.getPA().createPlayersProjectile2(nX, nY, offX, offY, 50, 50, 2263, 9, 9, - c.playerId - 1, 24, 0);
b.stop();
}
}, 800);*/
} catch (Exception e) {
e.printStackTrace();
}
}
}
}
if(c.crystalBowArrowCount >= 250){
switch(c.playerEquipment[c.playerWeapon]) {
case 4223: // 1/10 bow
c.getItems().wearItem(-1, 1, 3);
c.sendMessage("Your crystal bow has fully degraded.");
if(!c.getItems().addItem(4207, 1)) {
Server.itemHandler.createGroundItem(c, 4207, c.getX(), c.getY(), 1, c.getId());
}
c.crystalBowArrowCount = 0;
break;
default:
c.getItems().wearItem(++c.playerEquipment[c.playerWeapon], 1, 3);
c.sendMessage("Your crystal bow degrades.");
c.crystalBowArrowCount = 0;
break;
}
}
}
}
}
public void delayedHit(int i) { // npc hit delay
if (Server.npcHandler.npcs[i] != null) {
if (Server.npcHandler.npcs[i].isDead) {
c.npcIndex = 0;
return;
}
Server.npcHandler.npcs[i].facePlayer(c.playerId);
if (Server.npcHandler.npcs[i].underAttackBy > 0 && Server.npcHandler.getsPulled(i)) {
Server.npcHandler.npcs[i].killerId = c.playerId;
} else if (Server.npcHandler.npcs[i].underAttackBy < 0 && !Server.npcHandler.getsPulled(i)) {
Server.npcHandler.npcs[i].killerId = c.playerId;
}
c.lastNpcAttacked = i;
if(c.projectileStage == 0 && !c.usingMagic && !c.castingMagic) { // melee hit damage
if (!c.usingClaws)
applyNpcMeleeDamage(i, 1, Misc.random(calculateMeleeMaxHit()));
if(c.doubleHit && !c.usingClaws) {
applyNpcMeleeDamage(i, 2, Misc.random(calculateMeleeMaxHit()));
}
if(c.doubleHit && c.usingClaws) {
c.delayedDamage = c.clawDamage;
c.delayedDamage2 = c.clawDamage/2;
applyNpcMeleeDamage(i, 1, c.clawDamage);
applyNpcMeleeDamage(i, 2, c.clawDamage/2);
}
}
if(!c.castingMagic && c.projectileStage > 0) { // range hit damage
int damage = Misc.random(rangeMaxHit());
int damage2 = -1;
if (c.lastWeaponUsed == 11235 || c.lastWeaponUsed == 14481 || c.lastWeaponUsed == 14482 || c.bowSpecShot == 1)
damage2 = Misc.random(rangeMaxHit());
boolean ignoreDef = false;
if (Misc.random(5) == 1 && c.lastArrowUsed == 9243 && usingCross()) {
ignoreDef = true;
Server.npcHandler.npcs[i].gfx0(758);
}
if(Misc.random(Server.npcHandler.npcs[i].defence) > Misc.random(10+calculateRangeAttack()) && !ignoreDef) {
damage = 0;
} else if (Server.npcHandler.npcs[i].npcType == 2881 || Server.npcHandler.npcs[i].npcType == 2883 || Server.npcHandler.npcs[i].npcType == 3340 && !ignoreDef) {
damage = 0;
}
if (Misc.random(4) == 1 && c.lastArrowUsed == 9242 && damage > 0 && usingCross()) {
Server.npcHandler.npcs[i].gfx0(754);
damage = Server.npcHandler.npcs[i].HP/20;
//c.handleHitMask(c.playerLevel[3]/10);
c.dealDamage(c.playerLevel[3]/40);
c.gfx0(754);
}
if (c.lastWeaponUsed == 11235 || c.bowSpecShot == 1) {
if (Misc.random(Server.npcHandler.npcs[i].defence) > Misc.random(10+calculateRangeAttack()))
damage2 = 0;
}
if (c.dbowSpec) {
Server.npcHandler.npcs[i].gfx100(1100);
if(c.dbowDelay == 4)
if (damage < 8)
damage = 8;
else if(c.dbowDelay == 1)
if (damage2 < 8)
damage2 = 8;
c.dbowSpec = false;
}
if (damage > 0 && Misc.random(5) == 1 && c.lastArrowUsed == 9244 && usingCross()) {
damage *= 1.45;
Server.npcHandler.npcs[i].gfx0(756);
}
if (Server.npcHandler.npcs[i].HP - damage < 0) {
damage = Server.npcHandler.npcs[i].HP;
}
if (Server.npcHandler.npcs[i].HP - damage <= 0 && damage2 > 0) {
damage2 = 0;
}
if(c.fightMode == 3) {
c.getPA().addSkillXP((damage*Config.RANGE_EXP_RATE/3), 4);
c.getPA().addSkillXP((damage*Config.RANGE_EXP_RATE/3), 1);
c.getPA().addSkillXP((damage*Config.RANGE_EXP_RATE/3), 3);
c.getPA().refreshSkill(1);
c.getPA().refreshSkill(3);
c.getPA().refreshSkill(4);
} else {
c.getPA().addSkillXP((damage*Config.RANGE_EXP_RATE), 4);
c.getPA().addSkillXP((damage*Config.RANGE_EXP_RATE/3), 3);
c.getPA().refreshSkill(3);
c.getPA().refreshSkill(4);
}
if (damage > 0) {
if (Server.npcHandler.npcs[i].npcType >= 6142 && Server.npcHandler.npcs[i].npcType <= 6145) {
c.pcDamage += damage;
}
}
boolean dropArrows = true;
for(int noArrowId : c.NO_ARROW_DROP) {
if(c.lastWeaponUsed == noArrowId) {
dropArrows = false;
break;
}
}
if(dropArrows) {
c.getItems().dropArrowNpc();
}
Server.npcHandler.npcs[i].underAttack = true;
Server.npcHandler.npcs[i].hitDiff = damage;
Server.npcHandler.npcs[i].HP -= damage;
if (damage2 > -1) {
Server.npcHandler.npcs[i].hitDiff2 = damage2;
Server.npcHandler.npcs[i].HP -= damage2;
c.totalDamageDealt += damage2;
}
if (c.killingNpcIndex != c.oldNpcIndex) {
c.totalDamageDealt = 0;
}
c.killingNpcIndex = c.oldNpcIndex;
c.totalDamageDealt += damage;
Server.npcHandler.npcs[i].hitUpdateRequired = true;
if (damage2 > -1)
Server.npcHandler.npcs[i].hitUpdateRequired2 = true;
Server.npcHandler.npcs[i].updateRequired = true;
} else if (c.projectileStage > 0) { // magic hit damage
int damage = Misc.random(finalMagicDamage(c));
if(godSpells()) {
if(System.currentTimeMillis() - c.godSpellDelay < Config.GOD_SPELL_CHARGE) {
damage += Misc.random(10);
}
}
boolean magicFailed = false;
//c.npcIndex = 0;
int bonusAttack = getBonusAttack(i);
if (Misc.random(Server.npcHandler.npcs[i].defence) > 10+ Misc.random(mageAtk()) + bonusAttack) {
damage = 0;
magicFailed = true;
} else if (Server.npcHandler.npcs[i].npcType == 2881 || Server.npcHandler.npcs[i].npcType == 2882) {
damage = 0;
magicFailed = true;
}
if (Server.npcHandler.npcs[i].HP - damage < 0) {
damage = Server.npcHandler.npcs[i].HP;
}
c.getPA().addSkillXP((c.MAGIC_SPELLS[c.oldSpellId][7] + damage*Config.MAGIC_EXP_RATE), 6);
c.getPA().addSkillXP((c.MAGIC_SPELLS[c.oldSpellId][7] + damage*Config.MAGIC_EXP_RATE/3), 3);
c.getPA().refreshSkill(3);
c.getPA().refreshSkill(6);
if (damage > 0) {
if (Server.npcHandler.npcs[i].npcType >= 6142 && Server.npcHandler.npcs[i].npcType <= 6145) {
c.pcDamage += damage;
}
}
if(getEndGfxHeight() == 100 && !magicFailed){ // end GFX
Server.npcHandler.npcs[i].gfx100(c.MAGIC_SPELLS[c.oldSpellId][5]);
} else if (!magicFailed){
Server.npcHandler.npcs[i].gfx0(c.MAGIC_SPELLS[c.oldSpellId][5]);
}
if(magicFailed) {
Server.npcHandler.npcs[i].gfx100(85);
}
if(!magicFailed) {
int freezeDelay = getFreezeTime();//freeze
if(freezeDelay > 0 && Server.npcHandler.npcs[i].freezeTimer == 0) {
Server.npcHandler.npcs[i].freezeTimer = freezeDelay;
}
switch(c.MAGIC_SPELLS[c.oldSpellId][0]) {
case 12901:
case 12919: // blood spells
case 12911:
case 12929:
int heal = Misc.random(damage / 2);
if(c.playerLevel[3] + heal >= c.getPA().getLevelForXP(c.playerXP[3])) {
c.playerLevel[3] = c.getPA().getLevelForXP(c.playerXP[3]);
} else {
c.playerLevel[3] += heal;
}
c.getPA().refreshSkill(3);
break;
}
}
Server.npcHandler.npcs[i].underAttack = true;
if(finalMagicDamage(c) != 0) {
Server.npcHandler.npcs[i].hitDiff = damage;
Server.npcHandler.npcs[i].HP -= damage;
Server.npcHandler.npcs[i].hitUpdateRequired = true;
c.totalDamageDealt += damage;
}
c.killingNpcIndex = c.oldNpcIndex;
Server.npcHandler.npcs[i].updateRequired = true;
c.usingMagic = false;
c.castingMagic = false;
c.oldSpellId = 0;
}
}
if(c.bowSpecShot <= 0) {
c.oldNpcIndex = 0;
c.projectileStage = 0;
c.doubleHit = false;
c.lastWeaponUsed = 0;
c.bowSpecShot = 0;
}
if(c.bowSpecShot >= 2) {
c.bowSpecShot = 0;
//c.attackTimer = getAttackDelay(c.getItems().getItemName(c.playerEquipment[c.playerWeapon]).toLowerCase());
}
if(c.bowSpecShot == 1) {
fireProjectileNpc();
c.hitDelay = 2;
c.bowSpecShot = 0;
}
}
public void applyNpcMeleeDamage(int i, int damageMask, int damage) {
c.previousDamage = damage;
boolean fullVeracsEffect = c.getPA().fullVeracs() && Misc.random(3) == 1;
if (Server.npcHandler.npcs[i].HP - damage < 0) {
damage = Server.npcHandler.npcs[i].HP;
}
if (!fullVeracsEffect && !c.usingClaws) {
if (Misc.random(Server.npcHandler.npcs[i].defence) > 10 + Misc.random(calculateMeleeAttack())) {
damage = 0;
} else if (Server.npcHandler.npcs[i].npcType == 2882 || Server.npcHandler.npcs[i].npcType == 2883) {
damage = 0;
}
}
boolean guthansEffect = false;
if (c.getPA().fullGuthans()) {
if (Misc.random(3) == 1) {
guthansEffect = true;
}
}
if(c.fightMode == 3) {
c.getPA().addSkillXP((damage*Config.MELEE_EXP_RATE/3), 0);
c.getPA().addSkillXP((damage*Config.MELEE_EXP_RATE/3), 1);
c.getPA().addSkillXP((damage*Config.MELEE_EXP_RATE/3), 2);
c.getPA().addSkillXP((damage*Config.MELEE_EXP_RATE/3), 3);
c.getPA().refreshSkill(0);
c.getPA().refreshSkill(1);
c.getPA().refreshSkill(2);
c.getPA().refreshSkill(3);
} else {
c.getPA().addSkillXP((damage*Config.MELEE_EXP_RATE), c.fightMode);
c.getPA().addSkillXP((damage*Config.MELEE_EXP_RATE/3), 3);
c.getPA().refreshSkill(c.fightMode);
c.getPA().refreshSkill(3);
}
if (damage > 0) {
if (Server.npcHandler.npcs[i].npcType >= 6142 && Server.npcHandler.npcs[i].npcType <= 6145) {
c.pcDamage += damage;
}
}
if (damage > 0 && guthansEffect) {
c.playerLevel[3] += damage;
if (c.playerLevel[3] > c.getLevelForXP(c.playerXP[3]))
c.playerLevel[3] = c.getLevelForXP(c.playerXP[3]);
c.getPA().refreshSkill(3);
Server.npcHandler.npcs[i].gfx0(398);
}
Server.npcHandler.npcs[i].underAttack = true;
//Server.npcHandler.npcs[i].killerId = c.playerId;
c.killingNpcIndex = c.npcIndex;
c.lastNpcAttacked = i;
switch (c.specEffect) {
case 4:
if (damage > 0) {
if (c.playerLevel[3] + damage > c.getLevelForXP(c.playerXP[3]))
if (c.playerLevel[3] > c.getLevelForXP(c.playerXP[3]));
else
c.playerLevel[3] = c.getLevelForXP(c.playerXP[3]);
else
c.playerLevel[3] += damage;
c.getPA().refreshSkill(3);
}
break;
case 5:
c.clawDelay = 2;
//c.clawDamage = Misc.random(calculateMeleeMaxHit());
break;
case 7:
c.dbowDelay = 6;
break;
}
switch(damageMask) {
case 1:
Server.npcHandler.npcs[i].hitDiff = damage;
Server.npcHandler.npcs[i].HP -= damage;
c.totalDamageDealt += damage;
Server.npcHandler.npcs[i].hitUpdateRequired = true;
Server.npcHandler.npcs[i].updateRequired = true;
break;
case 2:
Server.npcHandler.npcs[i].hitDiff2 = damage;
Server.npcHandler.npcs[i].HP -= damage;
c.totalDamageDealt += damage;
Server.npcHandler.npcs[i].hitUpdateRequired2 = true;
Server.npcHandler.npcs[i].updateRequired = true;
c.doubleHit = false;
break;
}
}
public void fireProjectileNpc() {
if(c.oldNpcIndex > 0) {
if(Server.npcHandler.npcs[c.oldNpcIndex] != null) {
c.projectileStage = 2;
int pX = c.getX();
int pY = c.getY();
int nX = Server.npcHandler.npcs[c.oldNpcIndex].getX();
int nY = Server.npcHandler.npcs[c.oldNpcIndex].getY();
int offX = (pY - nY)* -1;
int offY = (pX - nX)* -1;
c.getPA().createPlayersProjectile(pX, pY, offX, offY, 50, getProjectileSpeed(), getRangeProjectileGFX(), 43, 31, c.oldNpcIndex + 1, getStartDelay());
if (usingDbow())
c.getPA().createPlayersProjectile2(pX, pY, offX, offY, 50, getProjectileSpeed(), getRangeProjectileGFX(), 60, 31, c.oldNpcIndex + 1, getStartDelay(), 35);
}
}
}
/**
* Attack Players, same as npc tbh xD
**/
public void attackPlayer(int i) {
if (c.playerEquipment[c.playerWeapon] == 15241) {
c.gfx0(2138);
}
if (c.playerEquipment[c.playerWeapon] == 772) {
c.spellId = 51;
}
if (c.playerEquipment[c.playerWeapon] == 19362) {
c.spellId = 52;
}
if(c.playerEquipment[c.playerWeapon] == 15241 && 15243 != c.playerEquipment[c.playerArrows]){
c.sendMessage("You can't use the Handcannon without Handcannon shots!");
return;
}
if(c.vestaDelay > 0) {
resetPlayerAttack();
return;
}
if(c.curseActive[19]) { // Turmoil
c.getstr = PlayerHandler.players[i].playerLevel[2] * 10 / 100;
c.getdef = PlayerHandler.players[i].playerLevel[1] * 15 / 100;
c.getatt = PlayerHandler.players[i].playerLevel[0] * 15 / 100;
}
if(c.curseActive[10]) { // Leech Attack
c.getatt = PlayerHandler.players[i].playerLevel[0] * 10 / 100;
}
if(c.curseActive[13]) { // Leech Defense
c.getdef = PlayerHandler.players[i].playerLevel[1] * 10 / 100;
}
if(c.curseActive[14]) { // Leech Strength
c.getstr = PlayerHandler.players[i].playerLevel[2] * 10 / 100;
}
if(c.curseActive[11]) { // Leech Ranged
c.getdef = PlayerHandler.players[i].playerLevel[4] * 10 / 100;
}
if(c.curseActive[12]) { // Leech Magic
c.getdef = PlayerHandler.players[i].playerLevel[6] * 10 / 100;
}
for (int u : c.Bolts) {
for (int y : c.BOWS) {
if(y == c.playerEquipment[c.playerWeapon] && !usingCross() && u == c.playerEquipment[c.playerArrows] && c.playerEquipment[c.playerWeapon] != 15241 && u == c.playerEquipment[c.playerArrows]){
c.sendMessage("You can only use arrows with this bow.");
return;
}
}
}
if(c.specEffect == 4) {
c.specEffect = 0;
}
if (Server.playerHandler.players[i] != null) {
if (Server.playerHandler.players[i].isDead) {
resetPlayerAttack();
return;
}
if(c.respawnTimer > 0 || Server.playerHandler.players[i].respawnTimer > 0) {
resetPlayerAttack();
return;
}
if(!c.getCombat().checkReqs()) {
return;
}
if(c.trade11 > 0) {
c.sendMessage("You must wait 15 minutes before attacking anyone!");
c.sendMessage("this is because you're a new player. (Stops transfering gold)");
resetPlayerAttack();
return;
}
if(Server.playerHandler.players[i].trade11 > 0) {
c.sendMessage("You cannot attack a player that has just started the game!");
c.sendMessage("this is to stop STG (Stop transfering gold)");
resetPlayerAttack();
return;
}
if (c.getPA().getWearingAmount() < 3 && c.duelStatus < 1) {
c.sendMessage("You must be wearing at least 3 items to attack someone.");
resetPlayerAttack();
return;
}
boolean sameSpot = c.absX == Server.playerHandler.players[i].getX() && c.absY == Server.playerHandler.players[i].getY();
if(!c.goodDistance(Server.playerHandler.players[i].getX(), Server.playerHandler.players[i].getY(), c.getX(), c.getY(), 25) && !sameSpot) {
resetPlayerAttack();
return;
}
if(Server.playerHandler.players[i].respawnTimer > 0) {
Server.playerHandler.players[i].playerIndex = 0;
resetPlayerAttack();
return;
}
if (Server.playerHandler.players[i].heightLevel != c.heightLevel) {
resetPlayerAttack();
return;
}
//c.sendMessage("Made it here0.");
/*c.followId = i;
c.followId2 = 0;*/
c.getPA().followPlayer(i);
if(c.attackTimer <= 0) {
c.usingBow = false;
c.specEffect = 0;
c.usingRangeWeapon = false;
c.rangeItemUsed = 0;
boolean usingBow = false;
boolean usingArrows = false;
boolean usingOtherRangeWeapons = false;
//boolean usingCross() = c.playerEquipment[c.playerWeapon] == 9185 && c.playerEquipment[c.playerWeapon] == 18357;
c.projectileStage = 0;
if (c.absX == Server.playerHandler.players[i].absX && c.absY == Server.playerHandler.players[i].absY) {
if (c.freezeTimer > 0) {
resetPlayerAttack();
return;
}
c.attackTimer = 0;
return;
}
if(!c.usingMagic) {
for (int bowId : c.BOWS) {
if(c.playerEquipment[c.playerWeapon] == bowId) {
usingBow = true;
for (int arrowId : c.ARROWS) {
if(c.playerEquipment[c.playerArrows] == arrowId) {
usingArrows = true;
}
}
}
}
for (int otherRangeId : c.OTHER_RANGE_WEAPONS) {
if(c.playerEquipment[c.playerWeapon] == otherRangeId) {
usingOtherRangeWeapons = true;
}
}
}
if (c.autocasting) {
c.spellId = c.autocastId;
c.usingMagic = true;
}
//c.sendMessage("Made it here2.");
if(c.spellId > 0) {
c.usingMagic = true;
}
c.attackTimer = getAttackDelay(c.getItems().getItemName(c.playerEquipment[c.playerWeapon]).toLowerCase());
if(c.duelRule[9]){
boolean canUseWeapon = false;
for(int funWeapon: Config.FUN_WEAPONS) {
if(c.playerEquipment[c.playerWeapon] == funWeapon) {
canUseWeapon = true;
}
}
if(!canUseWeapon) {
c.sendMessage("You can only use fun weapons in this duel!");
resetPlayerAttack();
return;
}
}
//c.sendMessage("Made it here3.");
if(c.duelRule[2] && (usingBow || usingOtherRangeWeapons)) {
c.sendMessage("Range has been disabled in this duel!");
return;
}
if(c.duelRule[3] && (!usingBow && !usingOtherRangeWeapons && !c.usingMagic)) {
c.sendMessage("Melee has been disabled in this duel!");
return;
}
if(c.duelRule[4] && c.usingMagic) {
c.sendMessage("Magic has been disabled in this duel!");
resetPlayerAttack();
return;
}
if((!c.goodDistance(c.getX(), c.getY(), Server.playerHandler.players[i].getX(), Server.playerHandler.players[i].getY(), 4) && (usingOtherRangeWeapons && !usingBow && !c.usingMagic))
|| (!c.goodDistance(c.getX(), c.getY(), Server.playerHandler.players[i].getX(), Server.playerHandler.players[i].getY(), 2) && (!usingOtherRangeWeapons && usingHally() && !usingBow && !c.usingMagic))
|| (!c.goodDistance(c.getX(), c.getY(), Server.playerHandler.players[i].getX(), Server.playerHandler.players[i].getY(), getRequiredDistance()) && (!usingOtherRangeWeapons && !usingHally() && !usingBow && !c.usingMagic))
|| (!c.goodDistance(c.getX(), c.getY(), Server.playerHandler.players[i].getX(), Server.playerHandler.players[i].getY(), 10) && (usingBow || c.usingMagic))) {
//c.sendMessage("Setting attack timer to 1");
c.attackTimer = 1;
if (!usingBow && !c.usingMagic && !usingOtherRangeWeapons && c.freezeTimer > 0)
resetPlayerAttack();
return;
}
if(!usingCross() && !usingArrows && usingBow && (c.playerEquipment[c.playerWeapon] < 4212 || c.playerEquipment[c.playerWeapon] > 4223) && !c.usingMagic) {
if(c.playerEquipment[c.playerWeapon] == 15241)
c.sendMessage("You have run out of Shots!");
else
c.sendMessage("You have run out of arrows!");
c.stopMovement();
resetPlayerAttack();
return;
}
if(correctBowAndArrows() < c.playerEquipment[c.playerArrows] && Config.CORRECT_ARROWS && usingBow && !usingCrystalBow() && !usingCross() && !c.usingMagic) {
c.sendMessage("You can't use "+c.getItems().getItemName(c.playerEquipment[c.playerArrows]).toLowerCase()+"s with a "+c.getItems().getItemName(c.playerEquipment[c.playerWeapon]).toLowerCase()+".");
c.stopMovement();
resetPlayerAttack();
return;
}
if(!usingCross() && !usingArrows && usingBow && (c.playerEquipment[c.playerWeapon] < 4212 || c.playerEquipment[c.playerWeapon] > 4223)) {
if(c.playerEquipment[c.playerWeapon] == 15241)
c.sendMessage("You have run out of shots");
else
c.sendMessage("You have run out of arrows!");
c.stopMovement();
c.npcIndex = 0;
return;
}
if (usingCross() && !properBolts() && !c.usingMagic) {
c.sendMessage("You must use bolts with a crossbow.");
c.stopMovement();
resetPlayerAttack();
return;
}
if(usingBow || c.usingMagic || usingOtherRangeWeapons || usingHally()) {
c.stopMovement();
}
if(!checkMagicReqs(c.spellId)) {
c.stopMovement();
resetPlayerAttack();
return;
}
c.faceUpdate(i+32768);
if(c.duelStatus != 5 && !c.inPits && c.inWild()) {
if(!c.attackedPlayers.contains(c.playerIndex) && !Server.playerHandler.players[c.playerIndex].attackedPlayers.contains(c.playerId)) {
c.attackedPlayers.add(c.playerIndex);
c.isSkulled = true;
c.skullTimer = Config.SKULL_TIMER;
c.headIconPk = 0;
c.getPA().requestUpdates();
}
}
c.specAccuracy = 1.0;
c.specDamage = 1.0;
c.delayedDamage = c.delayedDamage2 = 0;
if(c.usingSpecial && !c.usingMagic) {
if(c.duelRule[10] && c.duelStatus == 5) {
c.sendMessage("Special attacks have been disabled during this duel!");
c.usingSpecial = false;
c.getItems().updateSpecialBar();
resetPlayerAttack();
return;
}
if(checkSpecAmount(c.playerEquipment[c.playerWeapon])){
c.lastArrowUsed = c.playerEquipment[c.playerArrows];
activateSpecial(c.playerEquipment[c.playerWeapon], i);
//c.followId = c.playerIndex;
c.getPA().followPlayer(c.playerIndex);
return;
} else {
c.sendMessage("You don't have the required special energy to use this attack.");
c.usingSpecial = false;
c.getItems().updateSpecialBar();
c.playerIndex = 0;
return;
}
}
if(!c.usingMagic) {
c.startAnimation(getWepAnim(c.getItems().getItemName(c.playerEquipment[c.playerWeapon]).toLowerCase()));
c.mageFollow = false;
} else {
c.startAnimation(c.MAGIC_SPELLS[c.spellId][2]);
c.mageFollow = true;
c.followId = c.playerIndex;
}
Server.playerHandler.players[i].underAttackBy = c.playerId;
Server.playerHandler.players[i].logoutDelay = System.currentTimeMillis();
Server.playerHandler.players[i].singleCombatDelay = System.currentTimeMillis();
Server.playerHandler.players[i].killerId = c.playerId;
c.lastArrowUsed = 0;
c.rangeItemUsed = 0;
if(!usingBow && !c.usingMagic && !usingOtherRangeWeapons) { // melee hit delay
c.followId = Server.playerHandler.players[c.playerIndex].playerId;
c.getPA().followPlayer(c.playerIndex);
c.hitDelay = getHitDelay(c.getItems().getItemName(c.playerEquipment[c.playerWeapon]).toLowerCase());
c.delayedDamage = Misc.random(calculateMeleeMaxHit());
c.projectileStage = 0;
c.oldPlayerIndex = i;
}
if(usingBow && !usingOtherRangeWeapons && !c.usingMagic || usingCross()) { // range hit delay
if(c.playerEquipment[c.playerWeapon] >= 4212 && c.playerEquipment[c.playerWeapon] <= 4223) {
c.rangeItemUsed = c.playerEquipment[c.playerWeapon];
c.crystalBowArrowCount++;
} else {
c.rangeItemUsed = c.playerEquipment[c.playerArrows];
c.getItems().deleteArrow();
}
if (c.fightMode == 2)
c.attackTimer--;
if (usingCross())
c.usingBow = true;
c.usingBow = true;
c.followId = Server.playerHandler.players[c.playerIndex].playerId;
c.getPA().followPlayer(c.playerIndex);
c.lastWeaponUsed = c.playerEquipment[c.playerWeapon];
c.lastArrowUsed = c.playerEquipment[c.playerArrows];
c.gfx100(getRangeStartGFX());
c.hitDelay = getHitDelay(c.getItems().getItemName(c.playerEquipment[c.playerWeapon]).toLowerCase());
c.projectileStage = 1;
c.oldPlayerIndex = i;
fireProjectilePlayer();
}
if(usingOtherRangeWeapons) { // knives, darts, etc hit delay
c.rangeItemUsed = c.playerEquipment[c.playerWeapon];
c.getItems().deleteEquipment();
c.usingRangeWeapon = true;
c.followId = Server.playerHandler.players[c.playerIndex].playerId;
c.getPA().followPlayer(c.playerIndex);
c.gfx100(getRangeStartGFX());
if (c.fightMode == 2)
c.attackTimer--;
c.hitDelay = getHitDelay(c.getItems().getItemName(c.playerEquipment[c.playerWeapon]).toLowerCase());
c.projectileStage = 1;
c.oldPlayerIndex = i;
fireProjectilePlayer();
}
if(c.usingMagic) { // magic hit delay
int pX = c.getX();
int pY = c.getY();
int nX = Server.playerHandler.players[i].getX();
int nY = Server.playerHandler.players[i].getY();
int offX = (pY - nY)* -1;
int offY = (pX - nX)* -1;
c.castingMagic = true;
c.projectileStage = 2;
if(c.MAGIC_SPELLS[c.spellId][3] > 0) {
if(getStartGfxHeight() == 100) {
c.gfx100(c.MAGIC_SPELLS[c.spellId][3]);
} else {
c.gfx0(c.MAGIC_SPELLS[c.spellId][3]);
}
}
if(c.MAGIC_SPELLS[c.spellId][4] > 0) {
c.getPA().createPlayersProjectile(pX, pY, offX, offY, 50, 78, c.MAGIC_SPELLS[c.spellId][4], getStartHeight(), getEndHeight(), -i - 1, getStartDelay());
}
if (c.autocastId > 0) {
c.followId = c.playerIndex;
c.followDistance = 5;
}
c.hitDelay = getHitDelay(c.getItems().getItemName(c.playerEquipment[c.playerWeapon]).toLowerCase());
c.oldPlayerIndex = i;
c.oldSpellId = c.spellId;
c.spellId = 0;
Client o = (Client)Server.playerHandler.players[i];
if(c.MAGIC_SPELLS[c.oldSpellId][0] == 12891 && o.isMoving) {
//c.sendMessage("Barrage projectile..");
c.getPA().createPlayersProjectile(pX, pY, offX, offY, 50, 85, 368, 25, 25, -i - 1, getStartDelay());
}
if(Misc.random(o.getCombat().mageDef()) > Misc.random(mageAtk())) {
c.magicFailed = true;
} else {
c.magicFailed = false;
}
int freezeDelay = getFreezeTime();//freeze time
if(freezeDelay > 0 && Server.playerHandler.players[i].freezeTimer <= -3 && !c.magicFailed) {
Server.playerHandler.players[i].freezeTimer = freezeDelay;
o.resetWalkingQueue();
o.sendMessage("You have been frozen.");
o.frozenBy = c.playerId;
}
if (!c.autocasting && c.spellId <= 0)
c.playerIndex = 0;
}
if(c.curseActive[10]) { //Leech Attack
int failed = Misc.random(5);
Client c2 = (Client)PlayerHandler.players[i];
if(failed < 5) {
c.Lattack = false;
return;
} else if(failed == 5) {
c2.playerLevel[0] -= Misc.random(8);
if (c2.playerLevel[0] < 1)
c2.playerLevel[0] = 1;
c2.getPA().refreshSkill(0);
}
if(c.oldPlayerIndex > 0) {
if(PlayerHandler.players[c.oldPlayerIndex] != null) {
final int pX = c.getX();
final int pY = c.getY();
final int nX = PlayerHandler.players[i].getX();
final int nY = PlayerHandler.players[i].getY();
final int offX = (pY - nY)* -1;
final int offY = (pX - nX)* -1;
c.getPA().createPlayersProjectile2(pX, pY, offX, offY, 50, 50, 2252, 9, 9, - c.oldPlayerIndex - 1, 24, 0);
c2.sendMessage("Your attack has been leeched by " +Misc.optimizeText(c.playerName)+"!");
c2.gfx0(2253);
c.startAnimation(12575);
c.Lattack = false;
}
}
}
if(c.curseActive[13]) { //Leech Defense
int failed = Misc.random(5);
Client c2 = (Client)PlayerHandler.players[i];
if(failed < 5) {
c.Ldefense = false;
return;
} else if(failed == 5) {
c2.playerLevel[1] -= Misc.random(8);
if (c2.playerLevel[1] < 1)
c2.playerLevel[1] = 1;
c2.getPA().refreshSkill(1);
}
if(c.oldPlayerIndex > 0) {
if(PlayerHandler.players[c.oldPlayerIndex] != null) {
final int pX = c.getX();
final int pY = c.getY();
final int nX = PlayerHandler.players[i].getX();
final int nY = PlayerHandler.players[i].getY();
final int offX = (pY - nY)* -1;
final int offY = (pX - nX)* -1;
c.getPA().createPlayersProjectile2(pX, pY, offX, offY, 50, 50, 2242, 9, 9, - c.oldPlayerIndex - 1, 24, 0);
c2.sendMessage("Your defense has been leeched by " +Misc.optimizeText(c.playerName)+"!");
c2.gfx0(2246);
c.startAnimation(12575);
c.Ldefense = false;
}
}
}
if(c.curseActive[14]) { //Leech Strength
int failed = Misc.random(5);
Client c2 = (Client)PlayerHandler.players[i];
if(failed < 5) {
c.Lstrength = false;
return;
} else if(failed == 5) {
c2.playerLevel[2] -= Misc.random(8);
if (c2.playerLevel[2] < 1)
c2.playerLevel[2] = 1;
c2.getPA().refreshSkill(2);
}
if(c.oldPlayerIndex > 0) {
if(PlayerHandler.players[c.oldPlayerIndex] != null) {
final int pX = c.getX();
final int pY = c.getY();
final int nX = PlayerHandler.players[i].getX();
final int nY = PlayerHandler.players[i].getY();
final int offX = (pY - nY)* -1;
final int offY = (pX - nX)* -1;
c.getPA().createPlayersProjectile2(pX, pY, offX, offY, 50, 50, 2248, 9, 9, - c.oldPlayerIndex - 1, 24, 0);
c2.sendMessage("Your strength has been leeched by " +Misc.optimizeText(c.playerName)+"!");
c2.gfx0(2250);
c.startAnimation(12575);
c.Lstrength = false;
}
}
}
if(c.curseActive[11]) { //Leech Ranged
int failed = Misc.random(5);
Client c2 = (Client)PlayerHandler.players[i];
if(failed < 5) {
c.Lranged = false;
return;
} else if(failed == 5) {
c2.playerLevel[4] -= Misc.random(8);
if (c2.playerLevel[4] < 1)
c2.playerLevel[4] = 1;
c2.getPA().refreshSkill(4);
}
if(c.oldPlayerIndex > 0) {
if(PlayerHandler.players[c.oldPlayerIndex] != null) {
final int pX = c.getX();
final int pY = c.getY();
final int nX = PlayerHandler.players[i].getX();
final int nY = PlayerHandler.players[i].getY();
final int offX = (pY - nY)* -1;
final int offY = (pX - nX)* -1;
c.getPA().createPlayersProjectile2(pX, pY, offX, offY, 50, 50, 2236, 9, 9, - c.oldPlayerIndex - 1, 24, 0);
c2.sendMessage("Your ranged has been leeched by " +Misc.optimizeText(c.playerName)+"!");
c2.gfx0(2238);
c.startAnimation(12575);
c.Lranged = false;
}
}
}
if(c.curseActive[12]) { //Leech Magic
int failed = Misc.random(5);
Client c2 = (Client)PlayerHandler.players[i];
if(failed < 5) {
c.Lmagic = false;
return;
} else if(failed == 5) {
c2.playerLevel[6] -= Misc.random(8);
if (c2.playerLevel[6] < 1)
c2.playerLevel[6] = 1;
c2.getPA().refreshSkill(6);
}
if(c.oldPlayerIndex > 0) {
if(PlayerHandler.players[c.oldPlayerIndex] != null) {
final int pX = c.getX();
final int pY = c.getY();
final int nX = PlayerHandler.players[i].getX();
final int nY = PlayerHandler.players[i].getY();
final int offX = (pY - nY)* -1;
final int offY = (pX - nX)* -1;
c.getPA().createPlayersProjectile2(pX, pY, offX, offY, 50, 50, 2240, 9, 9, - c.oldPlayerIndex - 1, 24, 0);
c2.sendMessage("Your Magic has been leeched by " +Misc.optimizeText(c.playerName)+"!");
c2.gfx0(2242);
c.startAnimation(12575);
c.Lmagic = false;
}
}
}
if(c.curseActive[16]) { //Leech Special
int failed = Misc.random(10);
Client c2 = (Client)PlayerHandler.players[i];
if(failed < 10) {
c.Lspecial = false;
return;
} else if(failed == 10) {
c2.specAmount -= 0.5;
//c2.specAmount -= Misc.random(8);
if (c2.specAmount < 1)
c2.specAmount = 1;
}
if(c.oldPlayerIndex > 0) {
if(PlayerHandler.players[c.oldPlayerIndex] != null) {
final int pX = c.getX();
final int pY = c.getY();
final int nX = PlayerHandler.players[i].getX();
final int nY = PlayerHandler.players[i].getY();
final int offX = (pY - nY)* -1;
final int offY = (pX - nX)* -1;
c.getPA().createPlayersProjectile2(pX, pY, offX, offY, 50, 50, 2256, 9, 9, - c.oldPlayerIndex - 1, 24, 0);
c2.sendMessage("Your special attack has been leeched by " +Misc.optimizeText(c.playerName)+"!");
c2.gfx0(2258);
c.startAnimation(12575);
c.getItems().updateSpecialBar();
c.Lspecial = false;
}
}
}
if(c.curseActive[18]) { // SoulSplit GFX's - CAUSES CRASH
if(c.oldPlayerIndex > 0) {
if(Server.playerHandler.players[c.oldPlayerIndex] != null) {
try {
final int pX = c.getX();
final int pY = c.getY();
final int nX = Server.playerHandler.players[i].getX();
final int nY = Server.playerHandler.players[i].getY();
final int offX = (pY - nY)* -1;
final int offY = (pX - nX)* -1;
c.SSPLIT = true;
c.getPA().createPlayersProjectile2(pX, pY, offX, offY, 50, 50, 2263, 9, 9, - c.oldPlayerIndex - 1, 24, 0);
EventManager.getSingleton().addEvent(new Event() {
public void execute(EventContainer b) {
if (c == null)
return;
if (Server.playerHandler.players[c.oldPlayerIndex] == null)
return;
Server.playerHandler.players[c.oldPlayerIndex].gfx0(2264); // 1738
c.SSPLIT = false;
b.stop();
}
}, 500);
/*EventManager.getSingleton().addEvent(new Event() { // CAUSES CRASH
public void execute(EventContainer b) {
//c.getPA().createPlayersProjectile2(nX, nY, offX, offY, 50, 50, 2263, 9, 9, - c.playerId - 1, 24, 0);
b.stop();
}
}, 800);*/
} catch (Exception e) {
e.printStackTrace();
}
}
}
}
if(usingBow && Config.CRYSTAL_BOW_DEGRADES) { // crystal bow degrading
if(c.playerEquipment[c.playerWeapon] == 4212) { // new crystal bow becomes full bow on the first shot
c.getItems().wearItem(4214, 1, 3);
}
if(c.crystalBowArrowCount >= 250){
switch(c.playerEquipment[c.playerWeapon]) {
case 4223: // 1/10 bow
c.getItems().wearItem(-1, 1, 3);
c.sendMessage("Your crystal bow has fully degraded.");
if(!c.getItems().addItem(4207, 1)) {
Server.itemHandler.createGroundItem(c, 4207, c.getX(), c.getY(), 1, c.getId());
}
c.crystalBowArrowCount = 0;
break;
default:
c.getItems().wearItem(++c.playerEquipment[c.playerWeapon], 1, 3);
c.sendMessage("Your crystal bow degrades.");
c.crystalBowArrowCount = 0;
break;
}
}
}
}
}
}
public boolean usingCrystalBow() {
return c.playerEquipment[c.playerWeapon] >= 4212 && c.playerEquipment[c.playerWeapon] <= 4223;
}
public boolean kalphite1(int i) {
switch (Server.npcHandler.npcs[i].npcType) {
case 1158:
return true;
}
return false;
}
public boolean kalphite2(int i) {
switch (Server.npcHandler.npcs[i].npcType) {
case 1160:
return true;
}
return false;
}
int[][] deflectData = {
//prayerActive[id], gfx, anim
{33, 2228, 12573},//Deflect Mage
{34, 2229, 12573},//Deflect Range
{35, 2230, 12573},//Deflect Melee
};
public void appendDeflect(int otherPlayer, int damage) {//Handles Deflect Prayers
for(int i = 0; i < deflectData.length; i++) {
if (damage <= 0) {
return;
}
Player o = Server.playerHandler.players[otherPlayer];
if ((o.playerLevel[3] - damage) >= 3) {
damage = (int)(damage/2+1);
if (damage > c.playerLevel[3]) {
damage = c.playerLevel[3];
}
if(o.prayerActive[deflectData[i][0]]) {
c.setHitDiff2(damage);
c.setHitUpdateRequired2(true);
c.playerLevel[3] -= damage;
c.getPA().refreshSkill(3);
o.gfx0(deflectData[i][1]);
o.startAnimation(deflectData[i][2]);
}
}
c.updateRequired = true;
}
}
public void appendVengeance(int otherPlayer, int damage) {
if (damage <= 0)
return;
Player o = Server.playerHandler.players[otherPlayer];
o.forcedText = "Taste Vengeance!";
o.forcedChatUpdateRequired = true;
o.updateRequired = true;
o.vengOn = false;
if ((o.playerLevel[3] - damage) > 0) {
damage = (int)(damage * 0.75);
if (damage > c.playerLevel[3]) {
damage = c.playerLevel[3];
}
c.setHitDiff2(damage);
c.setHitUpdateRequired2(true);
c.playerLevel[3] -= damage;
c.getPA().refreshSkill(3);
}
c.updateRequired = true;
}
public void appendVengeanceNPC(int otherPlayer, int damage) {
if (damage <= 0)
return;
if (c.npcIndex > 0 && Server.npcHandler.npcs[c.npcIndex] != null) {
c.forcedText = "Taste Vengeance!";
c.forcedChatUpdateRequired = true;
c.updateRequired = true;
c.vengOn = false;
if ((Server.npcHandler.npcs[c.npcIndex].HP - damage) > 0) {
damage = (int)(damage * 0.75);
if (damage > Server.npcHandler.npcs[c.npcIndex].HP) {
damage = Server.npcHandler.npcs[c.npcIndex].HP;
}
Server.npcHandler.npcs[c.npcIndex].HP -= damage;
Server.npcHandler.npcs[c.npcIndex].hitDiff2 = damage;
Server.npcHandler.npcs[c.npcIndex].hitUpdateRequired2 = true;
Server.npcHandler.npcs[c.npcIndex].updateRequired = true;
}
}
c.updateRequired = true;
}
public void playerDelayedHit(int i) {
if (Server.playerHandler.players[i] != null) {
if (Server.playerHandler.players[i].isDead || c.isDead || Server.playerHandler.players[i].playerLevel[3] <= 0 || c.playerLevel[3] <= 0) {
c.playerIndex = 0;
return;
}
if (Server.playerHandler.players[i].respawnTimer > 0) {
c.faceUpdate(0);
c.playerIndex = 0;
return;
}
Client o = (Client) Server.playerHandler.players[i];
o.getPA().removeAllWindows();
if (o.playerIndex <= 0 && o.npcIndex <= 0) {
if (o.autoRet == 1) {
o.playerIndex = c.playerId;
}
}
if(o.attackTimer <= 3 || o.attackTimer == 0 && o.playerIndex == 0 && !c.castingMagic) { // block animation
o.startAnimation(o.getCombat().getBlockEmote());
}
if(o.inTrade) {
o.getTradeAndDuel().declineTrade();
}
/* if(c.projectileStage == 0 && !c.usingMagic && !c.castingMagic) { // melee hit damage
applyPlayerMeleeDamage(i, 1, Misc.random(calculateMeleeMaxHit()));
if(c.doubleHit && !c.usingClaws) {
applyPlayerMeleeDamage(i, 2, Misc.random(calculateMeleeMaxHit()));
}
if(c.doubleHit && c.usingClaws) {
applyPlayerMeleeDamage(i, 2, c.previousDamage / 2);
}
}*/
if(c.projectileStage == 0 && !c.usingMagic && !c.castingMagic) { // melee hit damage
if (!c.usingClaws)
applyPlayerMeleeDamage(i, 1, Misc.random(calculateMeleeMaxHit()));
if(c.doubleHit && !c.usingClaws) {
applyPlayerMeleeDamage(i, 2, Misc.random(calculateMeleeMaxHit()));
}
if(c.doubleHit && c.usingClaws) {
//System.out.println(c.clawDamage + " " + c.clawDamage/2 + " " + c.clawDamage/4 + " " + c.clawDamage/4 + 1);
c.delayedDamage = c.clawDamage;
c.delayedDamage2 = c.clawDamage/2;
applyPlayerMeleeDamage(i, 1, c.clawDamage);
applyPlayerMeleeDamage(i, 2, c.clawDamage/2);
}
}
if(!c.castingMagic && c.projectileStage > 0) { // range hit damage
int damage = Misc.random(rangeMaxHit());
int damage2 = -1;
int PrayerDrain = damage / 4;
if (c.lastWeaponUsed == 11235 || c.bowSpecShot == 1)
damage2 = Misc.random(rangeMaxHit());
boolean ignoreDef = false;
if (Misc.random(4) == 1 && c.lastArrowUsed == 9243 && usingCross()) {
ignoreDef = true;
o.gfx0(758);
}
if(Misc.random(10+o.getCombat().calculateRangeDefence()) > Misc.random(10+calculateRangeAttack()) && !ignoreDef) {
damage = 0;
}
if (c.lastWeaponUsed == 11235 || c.bowSpecShot == 1) {
if (Misc.random(10+o.getCombat().calculateRangeDefence()) > Misc.random(10+calculateRangeAttack()))
damage2 = 0;
}
if (c.dbowSpec) {
o.gfx100(1100);
if (damage < 8)
damage = 8;
if (damage2 < 8)
damage2 = 8;
c.dbowSpec = false;
}
if (usingCross() && damage > 0 && Misc.random(5) == 1 && c.lastArrowUsed == 9244) {
damage *= 1.45;
o.gfx0(756);
}
if(o.prayerActive[17] || o.curseActive[8] && System.currentTimeMillis() - o.protRangeDelay > 1500) { // if prayer active reduce damage by half
damage = (int)damage * 60 / 100;
if (o.playerEquipment[o.playerShield] == 15023 && o.playerLevel[5] >= 1 && damage >= 1) {
//if (Misc.random(2) == 1) {
damage = (int)damage * 42 / 100;
damage2 = (int)damage2 * 42 / 100;
o.playerLevel[5] -= PrayerDrain;
o.getPA().refreshSkill(5);
if (o.playerLevel[5] <= 0) {
o.playerLevel[5] = 0;
o.getCombat().resetPrayers();
o.getPA().refreshSkill(5);
//}
}
}
if (o.playerEquipment[o.playerShield] == 13742 && !o.prayerActive[17] || !o.curseActive[8] && damage >= 1) {
if(Misc.random(4) == 3) {
damage = (int)damage * 65 / 100;
damage2 = (int)damage2 * 65 / 100;
}
}
if (c.lastWeaponUsed == 11235 || c.bowSpecShot == 1)
damage2 = (int)damage2 * 60 / 100;
}
if (o.playerEquipment[o.playerWeapon] == 15486 && damage >= 1 && o.SolProtect >= 1) {
damage = (int)damage / 2;
damage2 = (int)damage2 / 2;
}
if (o.playerEquipment[o.playerShield] == 15023 && !o.prayerActive[17] || !o.curseActive[8] && o.playerLevel[5] >= 1 && damage >= 1) {
//if(Misc.random(2) == 1) {
damage = (int)damage * 70 / 100;
damage2 = (int)damage2 * 70 / 100;
o.playerLevel[5] -= PrayerDrain;
o.getPA().refreshSkill(5);
if (o.playerLevel[5] <= 0) {
o.playerLevel[5] = 0;
o.getCombat().resetPrayers();
o.getPA().refreshSkill(5);
//}
}
}
if (Server.playerHandler.players[i].playerLevel[3] - damage < 0) {
if(o.prayerActive[33] && damage > 0) {//Mage Deflect
appendDeflect(i, damage);
}
if(o.prayerActive[35] && damage > 0) {//Melee Deflect
appendDeflect(i, damage);
}
damage = Server.playerHandler.players[i].playerLevel[3];
}
if (Server.playerHandler.players[i].playerLevel[3] - damage - damage2 < 0) {
damage2 = Server.playerHandler.players[i].playerLevel[3] - damage;
}
if (damage < 0)
damage = 0;
if (damage2 < 0 && damage2 != -1)
damage2 = 0;
if (o.vengOn) {
appendVengeance(i, damage);
appendVengeance(i, damage2);
}
if (damage > 0)
//applyRecoil(damage, i);
Deflect(damage, i);
if (damage2 > 0)
//applyRecoil(damage2, i);
Deflect(damage2, i);
if(c.fightMode == 3) {
c.getPA().addSkillXP((damage*Config.RANGE_EXP_RATE/3), 4);
c.getPA().addSkillXP((damage*Config.RANGE_EXP_RATE/3), 1);
c.getPA().addSkillXP((damage*Config.RANGE_EXP_RATE/3), 3);
c.getPA().refreshSkill(1);
c.getPA().refreshSkill(3);
c.getPA().refreshSkill(4);
} else {
c.getPA().addSkillXP((damage*Config.RANGE_EXP_RATE), 4);
c.getPA().addSkillXP((damage*Config.RANGE_EXP_RATE/3), 3);
c.getPA().refreshSkill(3);
c.getPA().refreshSkill(4);
}
boolean dropArrows = true;
for(int noArrowId : c.NO_ARROW_DROP) {
if(c.lastWeaponUsed == noArrowId) {
dropArrows = false;
break;
}
}
if(dropArrows) {
c.getItems().dropArrowPlayer();
}
Server.playerHandler.players[i].underAttackBy = c.playerId;
Server.playerHandler.players[i].logoutDelay = System.currentTimeMillis();
Server.playerHandler.players[i].singleCombatDelay = System.currentTimeMillis();
Server.playerHandler.players[i].killerId = c.playerId;
//Server.playerHandler.players[i].setHitDiff(damage);
//Server.playerHandler.players[i].playerLevel[3] -= damage;
Server.playerHandler.players[i].dealDamage(damage);
Server.playerHandler.players[i].damageTaken[c.playerId] += damage;
c.killedBy = Server.playerHandler.players[i].playerId;
Server.playerHandler.players[i].handleHitMask(damage);
if (damage2 != -1) {
//Server.playerHandler.players[i].playerLevel[3] -= damage2;
Server.playerHandler.players[i].dealDamage(damage2);
Server.playerHandler.players[i].damageTaken[c.playerId] += damage2;
Server.playerHandler.players[i].handleHitMask(damage2);
}
o.getPA().refreshSkill(3);
//Server.playerHandler.players[i].setHitUpdateRequired(true);
Server.playerHandler.players[i].updateRequired = true;
applySmite(i, damage);
if (damage2 != -1)
applySmite(i, damage2);
} else if (c.projectileStage > 0) { // magic hit damage
int damage = Misc.random(finalMagicDamage(c));
if(godSpells()) {
if(System.currentTimeMillis() - c.godSpellDelay < Config.GOD_SPELL_CHARGE) {
damage += 10;
}
}
if(c.playerEquipment[c.playerWeapon] == 15486) {
damage += 5;
}
int PrayerDrain = damage / 4;
//c.playerIndex = 0;
if (c.magicFailed)
damage = 0;
if(o.prayerActive[16] || o.curseActive[7] && System.currentTimeMillis() - o.protMageDelay > 1500) { // if prayer active reduce damage by half
damage = (int)damage * 60 / 100;
if (o.playerEquipment[o.playerShield] == 15023 && o.playerLevel[5] >= 1 && damage >= 1) {
//if (Misc.random(2) == 1) {
damage = (int)damage * 42 / 100;
o.playerLevel[5] -= PrayerDrain;
o.getPA().refreshSkill(5);
if (o.playerLevel[5] <= 0) {
o.playerLevel[5] = 0;
o.getCombat().resetPrayers();
o.getPA().refreshSkill(5);
}
}
}
//}
if (o.playerEquipment[o.playerShield] == 13742 && !o.prayerActive[16] || !o.curseActive[7] && damage >= 1) {
if(Misc.random(4) == 3) {
damage = (int)damage * 65 / 100;
}
}
if (o.playerEquipment[o.playerWeapon] == 15486 && damage >= 1 && o.SolProtect >= 1) {
damage = (int)damage / 2;
}
if (o.playerEquipment[o.playerShield] == 15023 && !o.prayerActive[16] || !o.curseActive[7] && o.playerLevel[5] >= 1 && damage >= 1) {
//if(Misc.random(2) == 1) {
damage = (int)damage * 70 / 100;
o.getPA().refreshSkill(5);
o.playerLevel[5] -= PrayerDrain;
if (o.playerLevel[5] <= 0) {
o.playerLevel[5] = 0;
o.getCombat().resetPrayers();
o.getPA().refreshSkill(5);
//}
}
}
if (Server.playerHandler.players[i].playerLevel[3] - damage < 0) {
damage = Server.playerHandler.players[i].playerLevel[3];
}
if (o.vengOn)
appendVengeance(i, damage);
if (damage > 0)
//applyRecoil(damage, i);
Deflect(damage, i);
c.getPA().addSkillXP((c.MAGIC_SPELLS[c.oldSpellId][7] + damage*Config.MAGIC_EXP_RATE), 6);
c.getPA().addSkillXP((c.MAGIC_SPELLS[c.oldSpellId][7] + damage*Config.MAGIC_EXP_RATE/3), 3);
c.getPA().refreshSkill(3);
c.getPA().refreshSkill(6);
if(getEndGfxHeight() == 100 && !c.magicFailed){ // end GFX
Server.playerHandler.players[i].gfx100(c.MAGIC_SPELLS[c.oldSpellId][5]);
} else if (!c.magicFailed){
Server.playerHandler.players[i].gfx0(c.MAGIC_SPELLS[c.oldSpellId][5]);
} else if(c.magicFailed) {
Server.playerHandler.players[i].gfx100(85);
}
if(!c.magicFailed) {
if(System.currentTimeMillis() - Server.playerHandler.players[i].reduceStat > 35000) {
Server.playerHandler.players[i].reduceStat = System.currentTimeMillis();
switch(c.MAGIC_SPELLS[c.oldSpellId][0]) {
case 12987:
case 13011:
case 12999:
case 13023:
Server.playerHandler.players[i].playerLevel[0] -= ((o.getPA().getLevelForXP(Server.playerHandler.players[i].playerXP[0]) * 10) / 100);
break;
}
}
switch(c.MAGIC_SPELLS[c.oldSpellId][0]) {
case 12445: //teleblock
if (System.currentTimeMillis() - o.teleBlockDelay > o.teleBlockLength) {
o.teleBlockDelay = System.currentTimeMillis();
o.sendMessage("You have been teleblocked.");
if (o.prayerActive[16] || o.curseActive[7] && System.currentTimeMillis() - o.protMageDelay > 1500)
o.teleBlockLength = 150000;
else
o.teleBlockLength = 300000;
}
break;
case 12901:
case 12919: // blood spells
case 12911:
case 12929:
int heal = (int)(damage / 4);
if(c.playerLevel[3] + heal > c.getPA().getLevelForXP(c.playerXP[3])) {
c.playerLevel[3] = c.getPA().getLevelForXP(c.playerXP[3]);
} else {
c.playerLevel[3] += heal;
}
c.getPA().refreshSkill(3);
break;
case 1153:
Server.playerHandler.players[i].playerLevel[0] -= ((o.getPA().getLevelForXP(Server.playerHandler.players[i].playerXP[0]) * 5) / 100);
o.sendMessage("Your attack level has been reduced!");
Server.playerHandler.players[i].reduceSpellDelay[c.reduceSpellId] = System.currentTimeMillis();
o.getPA().refreshSkill(0);
break;
case 1157:
Server.playerHandler.players[i].playerLevel[2] -= ((o.getPA().getLevelForXP(Server.playerHandler.players[i].playerXP[2]) * 5) / 100);
o.sendMessage("Your strength level has been reduced!");
Server.playerHandler.players[i].reduceSpellDelay[c.reduceSpellId] = System.currentTimeMillis();
o.getPA().refreshSkill(2);
break;
case 1161:
Server.playerHandler.players[i].playerLevel[1] -= ((o.getPA().getLevelForXP(Server.playerHandler.players[i].playerXP[1]) * 5) / 100);
o.sendMessage("Your defence level has been reduced!");
Server.playerHandler.players[i].reduceSpellDelay[c.reduceSpellId] = System.currentTimeMillis();
o.getPA().refreshSkill(1);
break;
case 1542:
Server.playerHandler.players[i].playerLevel[1] -= ((o.getPA().getLevelForXP(Server.playerHandler.players[i].playerXP[1]) * 10) / 100);
o.sendMessage("Your defence level has been reduced!");
Server.playerHandler.players[i].reduceSpellDelay[c.reduceSpellId] = System.currentTimeMillis();
o.getPA().refreshSkill(1);
break;
case 1543:
Server.playerHandler.players[i].playerLevel[2] -= ((o.getPA().getLevelForXP(Server.playerHandler.players[i].playerXP[2]) * 10) / 100);
o.sendMessage("Your strength level has been reduced!");
Server.playerHandler.players[i].reduceSpellDelay[c.reduceSpellId] = System.currentTimeMillis();
o.getPA().refreshSkill(2);
break;
case 1562:
Server.playerHandler.players[i].playerLevel[0] -= ((o.getPA().getLevelForXP(Server.playerHandler.players[i].playerXP[0]) * 10) / 100);
o.sendMessage("Your attack level has been reduced!");
Server.playerHandler.players[i].reduceSpellDelay[c.reduceSpellId] = System.currentTimeMillis();
o.getPA().refreshSkill(0);
break;
}
}
Server.playerHandler.players[i].logoutDelay = System.currentTimeMillis();
Server.playerHandler.players[i].underAttackBy = c.playerId;
Server.playerHandler.players[i].killerId = c.playerId;
Server.playerHandler.players[i].singleCombatDelay = System.currentTimeMillis();
if(finalMagicDamage(c) != 0) {
//Server.playerHandler.players[i].playerLevel[3] -= damage;
Server.playerHandler.players[i].dealDamage(damage);
Server.playerHandler.players[i].damageTaken[c.playerId] += damage;
c.totalPlayerDamageDealt += damage;
if (!c.magicFailed) {
//Server.playerHandler.players[i].setHitDiff(damage);
//Server.playerHandler.players[i].setHitUpdateRequired(true);
Server.playerHandler.players[i].handleHitMask(damage);
}
}
applySmite(i, damage);
c.killedBy = Server.playerHandler.players[i].playerId;
o.getPA().refreshSkill(3);
Server.playerHandler.players[i].updateRequired = true;
c.usingMagic = false;
c.castingMagic = false;
if (o.inMulti() && multis()) {
c.barrageCount = 0;
for (int j = 0; j < Server.playerHandler.players.length; j++) {
if (Server.playerHandler.players[j] != null) {
if (j == o.playerId)
continue;
if (c.barrageCount >= 9)
break;
if (o.goodDistance(o.getX(), o.getY(), Server.playerHandler.players[j].getX(), Server.playerHandler.players[j].getY(), 1))
appendMultiBarrage(j, c.magicFailed);
}
}
}
c.getPA().refreshSkill(3);
c.getPA().refreshSkill(6);
c.oldSpellId = 0;
}
}
c.getPA().requestUpdates();
int oldindex = c.oldPlayerIndex;
if(c.bowSpecShot <= 0) {
c.oldPlayerIndex = 0;
c.projectileStage = 0;
c.lastWeaponUsed = 0;
c.doubleHit = false;
c.bowSpecShot = 0;
}
if(c.bowSpecShot != 0) {
c.bowSpecShot = 0;
}
}
public int getWeaponDistance(String weaponName) {
if(c.usingMagic) {
return 10;
}
if(weaponName.contains("knife")){
if(c.fightMode == 3) {
return 6;
} else {
return 4;
}
}
if(weaponName.contains("dart")) {
if(c.fightMode == 3) {
return 5;
} else {
return 3;
}
}
if(weaponName.contains("thrownaxe") || c.playerEquipment[c.playerWeapon] == 13883){
if(c.fightMode == 3) {
return 6;
} else {
return 4;
}
}
if(weaponName.contains("javelin") || c.playerEquipment[c.playerWeapon] == 13879){
if(c.fightMode == 3) {
return 7;
} else {
return 5;
}
}
if(weaponName.contains("shortbow")){
if(c.fightMode == 3) {
return 9;
} else {
return 7;
}
}
if(weaponName.contains("crossbow")){
if(c.fightMode == 3) {
return 9;
} else {
return 7;
}
}
if(weaponName.contains("composite bow")){
if(c.fightMode == 3) {
return 11;
} else {
return 10;
}
}
if(weaponName.contains("dark bow")){
if(c.fightMode == 3) {
return 13;
} else {
return 12;
}
}
if(weaponName.contains("longbow") ||weaponName.contains("crystal")) {
return 10;
}
if(weaponName.contains("halberd")) {
return 2;
}
switch(c.playerEquipment[c.playerWeapon]) {
case 6522:
if(c.fightMode == 3) {
return 6;
} else {
return 5;
}
}
return 1;
}
public boolean multis() {
switch (c.MAGIC_SPELLS[c.oldSpellId][0]) {
case 12891:
case 12881:
case 13011:
case 13023:
case 12919: // blood spells
case 12929:
case 12963:
case 12975:
return true;
}
return false;
}
public void appendMultiBarrage(int playerId, boolean splashed) {
if (Server.playerHandler.players[playerId] != null) {
Client c2 = (Client)Server.playerHandler.players[playerId];
if (c2.isDead || c2.respawnTimer > 0)
return;
if (checkMultiBarrageReqs(playerId)) {
c.barrageCount++;
if (Misc.random(mageAtk()) > Misc.random(mageDef()) && !c.magicFailed) {
if(getEndGfxHeight() == 100){ // end GFX
c2.gfx100(c.MAGIC_SPELLS[c.oldSpellId][5]);
} else {
c2.gfx0(c.MAGIC_SPELLS[c.oldSpellId][5]);
}
int damage = Misc.random(finalMagicDamage(c));
if (c2.prayerActive[12] || c2.curseActive[7]) {
damage *= (int)(.60);
}
if (c2.playerLevel[3] - damage < 0) {
damage = c2.playerLevel[3];
}
c.getPA().addSkillXP((c.MAGIC_SPELLS[c.oldSpellId][7] + damage*Config.MAGIC_EXP_RATE), 6);
c.getPA().addSkillXP((c.MAGIC_SPELLS[c.oldSpellId][7] + damage*Config.MAGIC_EXP_RATE/3), 3);
//Server.playerHandler.players[playerId].setHitDiff(damage);
//Server.playerHandler.players[playerId].setHitUpdateRequired(true);
Server.playerHandler.players[playerId].handleHitMask(damage);
//Server.playerHandler.players[playerId].playerLevel[3] -= damage;
Server.playerHandler.players[playerId].dealDamage(damage);
Server.playerHandler.players[playerId].damageTaken[c.playerId] += damage;
c2.getPA().refreshSkill(3);
c.totalPlayerDamageDealt += damage;
multiSpellEffect(playerId, damage);
} else {
c2.gfx100(85);
}
}
}
}
public void multiSpellEffect(int playerId, int damage) {
switch(c.MAGIC_SPELLS[c.oldSpellId][0]) {
case 13011:
case 13023:
if(System.currentTimeMillis() - Server.playerHandler.players[playerId].reduceStat > 35000) {
Server.playerHandler.players[playerId].reduceStat = System.currentTimeMillis();
Server.playerHandler.players[playerId].playerLevel[0] -= ((Server.playerHandler.players[playerId].getLevelForXP(Server.playerHandler.players[playerId].playerXP[0]) * 10) / 100);
}
break;
case 12919: // blood spells
case 12929:
int heal = (int)(damage / 4);
if(c.playerLevel[3] + heal >= c.getPA().getLevelForXP(c.playerXP[3])) {
c.playerLevel[3] = c.getPA().getLevelForXP(c.playerXP[3]);
} else {
c.playerLevel[3] += heal;
}
c.getPA().refreshSkill(3);
break;
case 12891:
case 12881:
if (Server.playerHandler.players[playerId].freezeTimer < -4) {
Server.playerHandler.players[playerId].freezeTimer = getFreezeTime();
Server.playerHandler.players[playerId].stopMovement();
}
break;
}
}
public void applyPlayerClawDamage(int i, int damageMask, int damage){
//int PrayerDrain = damage / 4;
Client o = (Client) Server.playerHandler.players[i];
if(o == null) {
return;
}
c.previousDamage = damage;
boolean veracsEffect = false;
boolean guthansEffect = false;
if (c.getPA().fullVeracs()) {
if (Misc.random(4) == 1) {
veracsEffect = true;
}
}
if (c.getPA().fullGuthans()) {
if (Misc.random(4) == 1) {
guthansEffect = true;
}
}
if (damageMask == 1) {
damage = c.delayedDamage;
c.delayedDamage = 0;
} else {
damage = c.delayedDamage2;
c.delayedDamage2 = 0;
}
if(Misc.random(o.getCombat().calculateMeleeDefence()) > Misc.random(calculateMeleeAttack()) && !veracsEffect) {
damage = 0;
c.bonusAttack = 0;
} else if (c.playerEquipment[c.playerWeapon] == 5698 && o.poisonDamage <= 0 && Misc.random(3) == 1) {
o.getPA().appendPoison(13);
c.bonusAttack += damage/3;
} else {
c.bonusAttack += damage/3;
}
if(o.prayerActive[18] || o.curseActive[9] && System.currentTimeMillis() - o.protMeleeDelay > 1500 && !veracsEffect) { // if prayer active reduce damage by 40%
damage = (int)damage * 60 / 100;
if (o.playerEquipment[o.playerShield] == 13740 && o.playerLevel[5] >= 1 && damage >= 1) {
//if (Misc.random(2) == 1) {
damage = (int)damage * 42 / 100;
//o.playerLevel[5] -= PrayerDrain;
o.getPA().refreshSkill(5);
if (o.playerLevel[5] <= 0) {
o.playerLevel[5] = 0;
o.getCombat().resetPrayers();
o.getPA().refreshSkill(5);
//}
}
}
}
if (o.playerEquipment[o.playerWeapon] == 15486 && damage >= 1 && o.SolProtect >= 1) {
damage = (int)damage / 2;
}
if (o.playerEquipment[o.playerShield] == 13742 && !o.prayerActive[18] || !o.curseActive[9] && damage >= 1) {
if(Misc.random(4) == 3) {
damage = (int)damage * 65 / 100;
}
}
if (o.playerEquipment[o.playerShield] == 13740 && !o.prayerActive[18] || !o.curseActive[9] && o.playerLevel[5] >= 1 && damage >= 1) {
//if(Misc.random(2) == 1) {
damage = (int)damage * 70 / 100;
o.getPA().refreshSkill(5);
//o.playerLevel[5] -= PrayerDrain;
if (o.playerLevel[5] <= 0) {
o.playerLevel[5] = 0;
o.getCombat().resetPrayers();
o.getPA().refreshSkill(5);
}
//}
}
if (c.maxNextHit) {
damage = calculateMeleeMaxHit();
}
if (damage > 0 && guthansEffect) {
c.playerLevel[3] += damage;
if (c.playerLevel[3] > c.getLevelForXP(c.playerXP[3]))
c.playerLevel[3] = c.getLevelForXP(c.playerXP[3]);
c.getPA().refreshSkill(3);
o.gfx0(398);
}
if (c.ssSpec && damageMask == 2) {
damage = 5 + Misc.random(11);
c.ssSpec = false;
}
if (Server.playerHandler.players[i].playerLevel[3] - damage < 0) {
damage = Server.playerHandler.players[i].playerLevel[3];
}
if (o.vengOn && damage > 0)
appendVengeance(i, damage);
if (damage > 0)
//applyRecoil(damage, i);
Deflect(damage, i);
switch(c.specEffect) {
case 1: // dragon scimmy special
if(damage > 0) {
if(o.prayerActive[16] || o.prayerActive[17] || o.prayerActive[18] || o.curseActive[7] || o.curseActive[8] || o.curseActive[9]) {
o.headIcon = -1;
o.getPA().sendFrame36(c.PRAYER_GLOW[16], 0);
o.getPA().sendFrame36(c.PRAYER_GLOW[17], 0);
o.getPA().sendFrame36(c.PRAYER_GLOW[18], 0);
o.getPA().sendFrame36(c.CURSE_GLOW[7], 0);
o.getPA().sendFrame36(c.CURSE_GLOW[8], 0);
o.getPA().sendFrame36(c.CURSE_GLOW[9], 0);
}
o.sendMessage("You have been injured!");
o.stopPrayerDelay = System.currentTimeMillis();
o.prayerActive[16] = false;
o.prayerActive[17] = false;
o.prayerActive[18] = false;
o.curseActive[7] = false;
o.curseActive[8] = false;
o.curseActive[9] = false;
o.getPA().requestUpdates();
}
break;
case 2:
if (Misc.random(2) == 1) {
if (damage > 0) {
if (o.freezeTimer <= 0)
o.freezeTimer = 30;
o.gfx0(369);
o.sendMessage("You have been frozen.");
o.frozenBy = c.playerId;
o.stopMovement();
c.sendMessage("You freeze your enemy.");
} else if (Misc.random(2) == 2) {
c.gfx100(1667);
}
}
break;
case 3:
if (damage > 0) {
o.playerLevel[1] -= damage;
o.sendMessage("You feel weak.");
if (o.playerLevel[1] < 1)
o.playerLevel[1] = 1;
o.getPA().refreshSkill(1);
}
break;
case 4:
if (damage > 0) {
if (c.playerLevel[3] + damage > c.getLevelForXP(c.playerXP[3]))
if (c.playerLevel[3] > c.getLevelForXP(c.playerXP[3]));
else
c.playerLevel[3] = c.getLevelForXP(c.playerXP[3]);
else
c.playerLevel[3] += damage;
c.getPA().refreshSkill(3);
}
break;
case 5:
c.clawDelay = 2;
break;
case 6:
o.vestaDelay = 12;
break;
}
c.specEffect = 0;
if(c.fightMode == 3) {
c.getPA().addSkillXP((damage*Config.MELEE_EXP_RATE/3), 0);
c.getPA().addSkillXP((damage*Config.MELEE_EXP_RATE/3), 1);
c.getPA().addSkillXP((damage*Config.MELEE_EXP_RATE/3), 2);
c.getPA().addSkillXP((damage*Config.MELEE_EXP_RATE/3), 3);
c.getPA().refreshSkill(0);
c.getPA().refreshSkill(1);
c.getPA().refreshSkill(2);
c.getPA().refreshSkill(3);
} else {
c.getPA().addSkillXP((damage*Config.MELEE_EXP_RATE), c.fightMode);
c.getPA().addSkillXP((damage*Config.MELEE_EXP_RATE/3), 3);
c.getPA().refreshSkill(c.fightMode);
c.getPA().refreshSkill(3);
}
Server.playerHandler.players[i].logoutDelay = System.currentTimeMillis();
Server.playerHandler.players[i].underAttackBy = c.playerId;
Server.playerHandler.players[i].killerId = c.playerId;
Server.playerHandler.players[i].singleCombatDelay = System.currentTimeMillis();
if (c.killedBy != Server.playerHandler.players[i].playerId)
c.totalPlayerDamageDealt = 0;
c.killedBy = Server.playerHandler.players[i].playerId;
applySmite(i, damage);
switch(damageMask) {
case 1:
/*if (!Server.playerHandler.players[i].getHitUpdateRequired()){
Server.playerHandler.players[i].setHitDiff(damage);
Server.playerHandler.players[i].setHitUpdateRequired(true);
} else {
Server.playerHandler.players[i].setHitDiff2(damage);
Server.playerHandler.players[i].setHitUpdateRequired2(true);
}*/
//Server.playerHandler.players[i].playerLevel[3] -= damage;
Server.playerHandler.players[i].dealDamage(damage);
Server.playerHandler.players[i].damageTaken[c.playerId] += damage;
c.totalPlayerDamageDealt += damage;
Server.playerHandler.players[i].updateRequired = true;
o.getPA().refreshSkill(3);
break;
case 2:
/*if (!Server.playerHandler.players[i].getHitUpdateRequired2()){
Server.playerHandler.players[i].setHitDiff2(damage);
Server.playerHandler.players[i].setHitUpdateRequired2(true);
} else {
Server.playerHandler.players[i].setHitDiff(damage);
Server.playerHandler.players[i].setHitUpdateRequired(true);
}*/
//Server.playerHandler.players[i].playerLevel[3] -= damage;
Server.playerHandler.players[i].dealDamage(damage);
Server.playerHandler.players[i].damageTaken[c.playerId] += damage;
c.totalPlayerDamageDealt += damage;
Server.playerHandler.players[i].updateRequired = true;
c.doubleHit = false;
o.getPA().refreshSkill(3);
break;
}
Server.playerHandler.players[i].handleHitMask(damage);
}
public void applyPlayerMeleeDamage(int i, int damageMask, int damage){
Client o = (Client) Server.playerHandler.players[i];
if(o == null) {
return;
}
damage = 0;
boolean veracsEffect = false;
boolean guthansEffect = false;
if (c.getPA().fullVeracs()) {
if (Misc.random(4) == 1) {
veracsEffect = true;
}
}
if (c.getPA().fullGuthans()) {
if (Misc.random(4) == 1) {
guthansEffect = true;
}
}
if (damageMask == 1) {
damage = c.delayedDamage;
c.delayedDamage = 0;
} else {
damage = c.delayedDamage2;
c.delayedDamage2 = 0;
}
if(Misc.random(o.getCombat().calculateMeleeDefence()) > Misc.random(calculateMeleeAttack()) && !veracsEffect && !c.usingClaws) {
damage = 0;
c.bonusAttack = 0;
} else if (c.playerEquipment[c.playerWeapon] == 5698 && o.poisonDamage <= 0 && Misc.random(3) == 1) {
o.getPA().appendPoison(13);
c.bonusAttack += damage/3;
} else {
c.bonusAttack += damage/3;
}
int PrayerDrain = damage / 4;
if(o.prayerActive[18] || o.curseActive[9] && System.currentTimeMillis() - o.protMeleeDelay > 1500 && !veracsEffect) { // if prayer active reduce damage by 40%
damage = (int)damage * 60 / 100;
if (o.playerEquipment[o.playerShield] == 13740 && o.playerLevel[5] >= 1 && damage >= 1) {
//if (Misc.random(2) == 1) {
damage = (int)damage * 42 / 100;
//o.playerLevel[5] -= PrayerDrain;
o.getPA().refreshSkill(5);
if (o.playerLevel[5] <= 0) {
o.playerLevel[5] = 0;
o.getCombat().resetPrayers();
o.getPA().refreshSkill(5);
//}
}
}
}
if (o.playerEquipment[o.playerShield] == 13742 && !o.prayerActive[18] || !o.curseActive[9] && damage >= 1) {
if(Misc.random(4) == 3) {
damage = (int)damage * 65 / 100;
}
}
if (o.playerEquipment[o.playerShield] == 13740 && !o.prayerActive[18] || !o.curseActive[9] && o.playerLevel[5] >= 1 && damage >= 1) {
damage = (int)damage * 70 / 100;
o.playerLevel[5] -= PrayerDrain;
o.getPA().refreshSkill(5);
if (o.playerLevel[5] <= 0) {
o.playerLevel[5] = 0;
o.getCombat().resetPrayers();
o.getPA().refreshSkill(5);
}
}
if (o.playerEquipment[o.playerWeapon] == 15486 && damage >= 1 && o.SolProtect >= 1) {
damage = (int)damage / 2;
}
if (c.maxNextHit) {
damage = calculateMeleeMaxHit();
}
if (damage > 0 && guthansEffect) {
c.playerLevel[3] += damage;
if (c.playerLevel[3] > c.getLevelForXP(c.playerXP[3]))
c.playerLevel[3] = c.getLevelForXP(c.playerXP[3]);
c.getPA().refreshSkill(3);
o.gfx0(398);
}
if (c.ssSpec && damageMask == 2) {
damage = 5 + Misc.random(11);
c.ssSpec = false;
}
if (Server.playerHandler.players[i].playerLevel[3] - damage < 0) {
damage = Server.playerHandler.players[i].playerLevel[3];
}
if (o.vengOn && damage > 0)
appendVengeance(i, damage);
if (damage > 0)
//applyRecoil(damage, i);
Deflect(damage, i);
switch(c.specEffect) {
case 5:
c.clawDelay = 2;
break;
case 1: // dragon scimmy special
if(damage > 0) {
if(o.prayerActive[16] || o.prayerActive[17] || o.prayerActive[18] || o.curseActive[7] || o.curseActive[8] || o.curseActive[9]) {
o.headIcon = -1;
o.getPA().sendFrame36(c.PRAYER_GLOW[16], 0);
o.getPA().sendFrame36(c.PRAYER_GLOW[17], 0);
o.getPA().sendFrame36(c.PRAYER_GLOW[18], 0);
o.getPA().sendFrame36(c.CURSE_GLOW[7], 0);
o.getPA().sendFrame36(c.CURSE_GLOW[8], 0);
o.getPA().sendFrame36(c.CURSE_GLOW[9], 0);
}
o.sendMessage("You have been injured!");
o.stopPrayerDelay = System.currentTimeMillis();
o.prayerActive[16] = false;
o.prayerActive[17] = false;
o.prayerActive[18] = false;
o.curseActive[7] = false;
o.curseActive[8] = false;
o.curseActive[9] = false;
o.getPA().requestUpdates();
}
break;
case 2:
if (damage > 0) {
if (o.freezeTimer <= 0)
o.freezeTimer = 30;
o.gfx0(2104);
o.sendMessage("You have been frozen.");
o.frozenBy = c.playerId;
o.stopMovement();
c.sendMessage("You freeze your enemy.");
}
break;
case 3:
if (damage > 0) {
o.playerLevel[1] -= damage;
o.sendMessage("You feel weak.");
if (o.playerLevel[1] < 1)
o.playerLevel[1] = 1;
o.getPA().refreshSkill(1);
}
break;
case 4:
if (damage > 0) {
if (c.playerLevel[3] + damage > c.getLevelForXP(c.playerXP[3]))
if (c.playerLevel[3] > c.getLevelForXP(c.playerXP[3]));
else
c.playerLevel[3] = c.getLevelForXP(c.playerXP[3]);
else
c.playerLevel[3] += damage;
c.getPA().refreshSkill(3);
}
break;
}
c.specEffect = 0;
if(c.fightMode == 3) {
c.getPA().addSkillXP((damage*Config.MELEE_EXP_RATE/3), 0);
c.getPA().addSkillXP((damage*Config.MELEE_EXP_RATE/3), 1);
c.getPA().addSkillXP((damage*Config.MELEE_EXP_RATE/3), 2);
c.getPA().addSkillXP((damage*Config.MELEE_EXP_RATE/3), 3);
c.getPA().refreshSkill(0);
c.getPA().refreshSkill(1);
c.getPA().refreshSkill(2);
c.getPA().refreshSkill(3);
} else {
c.getPA().addSkillXP((damage*Config.MELEE_EXP_RATE), c.fightMode);
c.getPA().addSkillXP((damage*Config.MELEE_EXP_RATE/3), 3);
c.getPA().refreshSkill(c.fightMode);
c.getPA().refreshSkill(3);
}
Server.playerHandler.players[i].logoutDelay = System.currentTimeMillis();
Server.playerHandler.players[i].underAttackBy = c.playerId;
Server.playerHandler.players[i].killerId = c.playerId;
Server.playerHandler.players[i].singleCombatDelay = System.currentTimeMillis();
if (c.killedBy != Server.playerHandler.players[i].playerId)
c.totalPlayerDamageDealt = 0;
c.killedBy = Server.playerHandler.players[i].playerId;
applySmite(i, damage);
switch(damageMask) {
case 1:
/*if (!Server.playerHandler.players[i].getHitUpdateRequired()){
Server.playerHandler.players[i].setHitDiff(damage);
Server.playerHandler.players[i].setHitUpdateRequired(true);
} else {
Server.playerHandler.players[i].setHitDiff2(damage);
Server.playerHandler.players[i].setHitUpdateRequired2(true);
}*/
//Server.playerHandler.players[i].playerLevel[3] -= damage;
Server.playerHandler.players[i].dealDamage(damage);
Server.playerHandler.players[i].damageTaken[c.playerId] += damage;
c.totalPlayerDamageDealt += damage;
Server.playerHandler.players[i].updateRequired = true;
o.getPA().refreshSkill(3);
break;
case 2:
/*if (!Server.playerHandler.players[i].getHitUpdateRequired2()){
Server.playerHandler.players[i].setHitDiff2(damage);
Server.playerHandler.players[i].setHitUpdateRequired2(true);
} else {
Server.playerHandler.players[i].setHitDiff(damage);
Server.playerHandler.players[i].setHitUpdateRequired(true);
}*/
//Server.playerHandler.players[i].playerLevel[3] -= damage;
Server.playerHandler.players[i].dealDamage(damage);
Server.playerHandler.players[i].damageTaken[c.playerId] += damage;
c.totalPlayerDamageDealt += damage;
Server.playerHandler.players[i].updateRequired = true;
c.doubleHit = false;
o.getPA().refreshSkill(3);
break;
}
Server.playerHandler.players[i].handleHitMask(damage);
c.previousDamage = damage;
}
public void applySmite(int index, int damage) {
if (!c.prayerActive[23] && !c.curseActive[18])
return;
if (damage <= 0)
return;
if (Server.playerHandler.players[index] != null) {
Client c2 = (Client)Server.playerHandler.players[index];
if(c.curseActive[18] && !c.prayerActive[23] && c.playerLevel[3] <= 99) {
int heal = (int)(damage/5);
if(c.playerLevel[3] + heal >= c.getPA().getLevelForXP(c.playerXP[3])) {
c.playerLevel[3] = c.getPA().getLevelForXP(c.playerXP[3]);
} else {
c.playerLevel[3] += heal;
}
c.getPA().refreshSkill(3);
}
c2.playerLevel[5] -= (int)(damage/4);
if (c2.playerLevel[5] <= 0) {
c2.playerLevel[5] = 0;
c2.getCombat().resetPrayers();
}
c2.getPA().refreshSkill(5);
}
}
public void fireProjectilePlayer() {
if(c.oldPlayerIndex > 0) {
if(Server.playerHandler.players[c.oldPlayerIndex] != null) {
c.projectileStage = 2;
int pX = c.getX();
int pY = c.getY();
int oX = Server.playerHandler.players[c.oldPlayerIndex].getX();
int oY = Server.playerHandler.players[c.oldPlayerIndex].getY();
int offX = (pY - oY)* -1;
int offY = (pX - oX)* -1;
if(c.playerEquipment[c.playerWeapon] == 15241) {
if(!c.specGfx) {
c.gfx0(2138);
}
c.getPA().createPlayersProjectile2(pX, pY, offX, offY, 50, 55, getRangeProjectileGFX(), 22, 22, c.oldPlayerIndex - 1, getStartDelay(), -1);
c.handCannonDestory();
c.specGfx = false;
} else if(!c.msbSpec)
c.getPA().createPlayersProjectile(pX, pY, offX, offY, 50, getProjectileSpeed(), getRangeProjectileGFX(), 43, 31, - c.oldPlayerIndex - 1, getStartDelay());
else if (c.msbSpec) {
c.getPA().createPlayersProjectile2(pX, pY, offX, offY, 50, getProjectileSpeed(), getRangeProjectileGFX(), 43, 31, - c.oldPlayerIndex - 1, getStartDelay(), 10);
c.msbSpec = false;
}
if (usingDbow())
c.getPA().createPlayersProjectile2(pX, pY, offX, offY, 50, getProjectileSpeed(), getRangeProjectileGFX(), 60, 31, - c.oldPlayerIndex - 1, getStartDelay(), 35);
}
}
}
public boolean usingDbow() {
return c.playerEquipment[c.playerWeapon] == 11235;
}
/**Prayer**/
public void activatePrayer(int i) {
if(c.duelRule[7]){
for(int p = 0; p < c.PRAYER.length; p++) { // reset prayer glows
c.prayerActive[p] = false;
c.getPA().sendFrame36(c.PRAYER_GLOW[p], 0);
}
c.sendMessage("Prayer has been disabled in this duel!");
return;
}
if(c.altarPrayed == 1) {
for(int p = 0; p < c.PRAYER.length; p++) { // reset prayer glows
c.prayerActive[p] = false;
c.getPA().sendFrame36(c.PRAYER_GLOW[p], 0);
}
c.sendMessage("You are not on the right prayerbook!!");
return;
}
if (i == 24 && c.getPA().getLevelForXP(c.playerXP[1]) < 70) {
c.getPA().sendFrame36(c.PRAYER_GLOW[i], 0);
c.sendMessage("You need 60 Defence to use Chivarly");
return;
}
if (i == 25 && c.getPA().getLevelForXP(c.playerXP[1]) < 70) {
c.getPA().sendFrame36(c.PRAYER_GLOW[i], 0);
c.sendMessage("You need 70 defence to use Piety");
return;
}
int[] defPray = {0,5,13,24,25};
int[] strPray = {1,6,14,24,25};
int[] atkPray = {2,7,15,24,25};
int[] rangePray = {3,11,19};
int[] magePray = {4,12,20};
if(c.playerLevel[5] > 0 || !Config.PRAYER_POINTS_REQUIRED){
if(c.getPA().getLevelForXP(c.playerXP[5]) >= c.PRAYER_LEVEL_REQUIRED[i] || !Config.PRAYER_LEVEL_REQUIRED) {
boolean headIcon = false;
switch(i) {
case 0:
case 5:
case 13:
if(c.prayerActive[i] == false) {
for (int j = 0; j < defPray.length; j++) {
if (defPray[j] != i) {
c.prayerActive[defPray[j]] = false;
c.getPA().sendFrame36(c.PRAYER_GLOW[defPray[j]], 0);
}
}
}
break;
case 1:
case 6:
case 14:
if(c.prayerActive[i] == false) {
for (int j = 0; j < strPray.length; j++) {
if (strPray[j] != i) {
c.prayerActive[strPray[j]] = false;
c.getPA().sendFrame36(c.PRAYER_GLOW[strPray[j]], 0);
}
}
for (int j = 0; j < rangePray.length; j++) {
if (rangePray[j] != i) {
c.prayerActive[rangePray[j]] = false;
c.getPA().sendFrame36(c.PRAYER_GLOW[rangePray[j]], 0);
}
}
for (int j = 0; j < magePray.length; j++) {
if (magePray[j] != i) {
c.prayerActive[magePray[j]] = false;
c.getPA().sendFrame36(c.PRAYER_GLOW[magePray[j]], 0);
}
}
}
break;
case 2:
case 7:
case 15:
if(c.prayerActive[i] == false) {
for (int j = 0; j < atkPray.length; j++) {
if (atkPray[j] != i) {
c.prayerActive[atkPray[j]] = false;
c.getPA().sendFrame36(c.PRAYER_GLOW[atkPray[j]], 0);
}
}
for (int j = 0; j < rangePray.length; j++) {
if (rangePray[j] != i) {
c.prayerActive[rangePray[j]] = false;
c.getPA().sendFrame36(c.PRAYER_GLOW[rangePray[j]], 0);
}
}
for (int j = 0; j < magePray.length; j++) {
if (magePray[j] != i) {
c.prayerActive[magePray[j]] = false;
c.getPA().sendFrame36(c.PRAYER_GLOW[magePray[j]], 0);
}
}
}
break;
case 3://range prays
case 11:
case 19:
if(c.prayerActive[i] == false) {
for (int j = 0; j < atkPray.length; j++) {
if (atkPray[j] != i) {
c.prayerActive[atkPray[j]] = false;
c.getPA().sendFrame36(c.PRAYER_GLOW[atkPray[j]], 0);
}
}
for (int j = 0; j < strPray.length; j++) {
if (strPray[j] != i) {
c.prayerActive[strPray[j]] = false;
c.getPA().sendFrame36(c.PRAYER_GLOW[strPray[j]], 0);
}
}
for (int j = 0; j < rangePray.length; j++) {
if (rangePray[j] != i) {
c.prayerActive[rangePray[j]] = false;
c.getPA().sendFrame36(c.PRAYER_GLOW[rangePray[j]], 0);
}
}
for (int j = 0; j < magePray.length; j++) {
if (magePray[j] != i) {
c.prayerActive[magePray[j]] = false;
c.getPA().sendFrame36(c.PRAYER_GLOW[magePray[j]], 0);
}
}
}
break;
case 4:
case 12:
case 20:
if(c.prayerActive[i] == false) {
for (int j = 0; j < atkPray.length; j++) {
if (atkPray[j] != i) {
c.prayerActive[atkPray[j]] = false;
c.getPA().sendFrame36(c.PRAYER_GLOW[atkPray[j]], 0);
}
}
for (int j = 0; j < strPray.length; j++) {
if (strPray[j] != i) {
c.prayerActive[strPray[j]] = false;
c.getPA().sendFrame36(c.PRAYER_GLOW[strPray[j]], 0);
}
}
for (int j = 0; j < rangePray.length; j++) {
if (rangePray[j] != i) {
c.prayerActive[rangePray[j]] = false;
c.getPA().sendFrame36(c.PRAYER_GLOW[rangePray[j]], 0);
}
}
for (int j = 0; j < magePray.length; j++) {
if (magePray[j] != i) {
c.prayerActive[magePray[j]] = false;
c.getPA().sendFrame36(c.PRAYER_GLOW[magePray[j]], 0);
}
}
}
break;
case 10:
c.lastProtItem = System.currentTimeMillis();
break;
case 16:
case 17:
case 18:
if(System.currentTimeMillis() - c.stopPrayerDelay < 5000) {
c.sendMessage("You have been injured and can't use this prayer!");
c.getPA().sendFrame36(c.PRAYER_GLOW[16], 0);
c.getPA().sendFrame36(c.PRAYER_GLOW[17], 0);
c.getPA().sendFrame36(c.PRAYER_GLOW[18], 0);
return;
}
if (i == 16)
c.protMageDelay = System.currentTimeMillis();
else if (i == 17)
c.protRangeDelay = System.currentTimeMillis();
else if (i == 18)
c.protMeleeDelay = System.currentTimeMillis();
case 21:
case 22:
case 23:
headIcon = true;
for(int p = 16; p < 24; p++) {
if(i != p && p != 19 && p != 20) {
c.prayerActive[p] = false;
c.getPA().sendFrame36(c.PRAYER_GLOW[p], 0);
}
}
break;
case 24:
if (c.prayerActive[i] == false) {
for (int j = 0; j < atkPray.length; j++) {
if (atkPray[j] != i) {
c.prayerActive[atkPray[j]] = false;
c.getPA().sendFrame36(c.PRAYER_GLOW[atkPray[j]], 0);
}
}
for (int j = 0; j < strPray.length; j++) {
if (strPray[j] != i) {
c.prayerActive[strPray[j]] = false;
c.getPA().sendFrame36(c.PRAYER_GLOW[strPray[j]], 0);
}
}
for (int j = 0; j < rangePray.length; j++) {
if (rangePray[j] != i) {
c.prayerActive[rangePray[j]] = false;
c.getPA().sendFrame36(c.PRAYER_GLOW[rangePray[j]], 0);
}
}
for (int j = 0; j < magePray.length; j++) {
if (magePray[j] != i) {
c.prayerActive[magePray[j]] = false;
c.getPA().sendFrame36(c.PRAYER_GLOW[magePray[j]], 0);
}
}
for (int j = 0; j < defPray.length; j++) {
if (defPray[j] != i) {
c.prayerActive[defPray[j]] = false;
c.getPA().sendFrame36(c.PRAYER_GLOW[defPray[j]], 0);
}
}
}
break;
case 25:
if (c.prayerActive[i] == false) {
for (int j = 0; j < atkPray.length; j++) {
if (atkPray[j] != i) {
c.prayerActive[atkPray[j]] = false;
c.getPA().sendFrame36(c.PRAYER_GLOW[atkPray[j]], 0);
}
}
for (int j = 0; j < strPray.length; j++) {
if (strPray[j] != i) {
c.prayerActive[strPray[j]] = false;
c.getPA().sendFrame36(c.PRAYER_GLOW[strPray[j]], 0);
}
}
for (int j = 0; j < rangePray.length; j++) {
if (rangePray[j] != i) {
c.prayerActive[rangePray[j]] = false;
c.getPA().sendFrame36(c.PRAYER_GLOW[rangePray[j]], 0);
}
}
for (int j = 0; j < magePray.length; j++) {
if (magePray[j] != i) {
c.prayerActive[magePray[j]] = false;
c.getPA().sendFrame36(c.PRAYER_GLOW[magePray[j]], 0);
}
}
for (int j = 0; j < defPray.length; j++) {
if (defPray[j] != i) {
c.prayerActive[defPray[j]] = false;
c.getPA().sendFrame36(c.PRAYER_GLOW[defPray[j]], 0);
}
}
}
break;
}
if(!headIcon) {
if(c.prayerActive[i] == false) {
c.prayerActive[i] = true;
c.getPA().sendFrame36(c.PRAYER_GLOW[i], 1);
} else {
c.prayerActive[i] = false;
c.getPA().sendFrame36(c.PRAYER_GLOW[i], 0);
}
} else {
if(c.prayerActive[i] == false) {
c.prayerActive[i] = true;
c.getPA().sendFrame36(c.PRAYER_GLOW[i], 1);
c.headIcon = c.PRAYER_HEAD_ICONS[i];
c.getPA().requestUpdates();
} else {
c.prayerActive[i] = false;
c.getPA().sendFrame36(c.PRAYER_GLOW[i], 0);
c.headIcon = -1;
c.getPA().requestUpdates();
}
}
} else {
c.getPA().sendFrame36(c.PRAYER_GLOW[i],0);
c.getPA().sendFrame126("You need a @[email protected] level of "+c.PRAYER_LEVEL_REQUIRED[i]+" to use "+c.PRAYER_NAME[i]+".", 357);
c.getPA().sendFrame126("Click here to continue", 358);
c.getPA().sendFrame164(356);
c.nextChat = 0;
}
} else {
c.getPA().sendFrame36(c.PRAYER_GLOW[i],0);
c.sendMessage("You have run out of prayer points!");
}
}
/**
*Specials
**/
public void activateSpecial(int weapon, int i){
if(Server.npcHandler.npcs[i] == null && c.npcIndex > 0) {
return;
}
if(Server.playerHandler.players[i] == null && c.playerIndex > 0) {
return;
}
c.doubleHit = false;
c.specEffect = 0;
c.projectileStage = 0;
c.specMaxHitIncrease = 2;
if(c.npcIndex > 0) {
c.oldNpcIndex = i;
} else if (c.playerIndex > 0){
c.oldPlayerIndex = i;
Server.playerHandler.players[i].underAttackBy = c.playerId;
Server.playerHandler.players[i].logoutDelay = System.currentTimeMillis();
Server.playerHandler.players[i].singleCombatDelay = System.currentTimeMillis();
Server.playerHandler.players[i].killerId = c.playerId;
}
switch(weapon) {
case 15241: // hand cannon spec!!
c.usingBow = true;
c.rangeItemUsed = c.playerEquipment[c.playerArrows];
c.getItems().deleteArrow();
c.lastWeaponUsed = weapon;
c.startAnimation(12175);
c.specAccuracy = 8.5;
c.specDamage = 2.25;
c.hitDelay = 5;
c.attackTimer-= 7;
c.hitDelay = getHitDelay(c.getItems().getItemName(c.playerEquipment[c.playerWeapon]).toLowerCase());
if (c.fightMode == 2)
if (c.playerIndex > 0)
fireProjectilePlayer();
else if (c.npcIndex > 0)
fireProjectileNpc();
break;
case 1305: // dragon long
c.gfx100(248);
c.startAnimation(1058);
c.hitDelay = getHitDelay(c.getItems().getItemName(c.playerEquipment[c.playerWeapon]).toLowerCase());
c.specAccuracy = 1.10;
c.specDamage = 1.20;
break;
case 1215: // dragon daggers
case 1231:
case 5680:
case 5698:
c.gfx100(252);
c.startAnimation(1062);
c.hitDelay = getHitDelay(c.getItems().getItemName(c.playerEquipment[c.playerWeapon]).toLowerCase());
c.doubleHit = true;
c.specAccuracy = 1.75;
c.specDamage = 1.28;
break;
case 13047:
case 13049:
c.gfx100(252);
c.startAnimation(1062);
c.hitDelay = getHitDelay(c.getItems().getItemName(c.playerEquipment[c.playerWeapon]).toLowerCase());
c.doubleHit = true;
c.specAccuracy = 2.3;
c.specDamage = 1.65;
break;
case 6818:
c.gfx100(278);
c.startAnimation(2876);
c.specAccuracy = 10.0;
c.specDamage = 3.5;
c.doubleHit = true;
c.hitDelay = getHitDelay(c.getItems().getItemName(c.playerEquipment[c.playerWeapon]).toLowerCase());
c.forcedText = "TASTE MY WRATH!!!";
break;
case 10887:
c.gfx100(1027);
c.specAccuracy = 5.0;
c.specDamage = 1.15;
c.startAnimation(5870);
c.hitDelay = getHitDelay(c.getItems().getItemName(c.playerEquipment[c.playerWeapon]).toLowerCase());
break;
case 14484:
c.gfx0(1950);
c.startAnimation(10961);
c.specAccuracy = 9.5;
c.clawDamage = 0;
c.specDamage = 1.17;
if (c.playerIndex > 0) {
Client o = (Client) Server.playerHandler.players[c.playerIndex];
if (Misc.random(calculateMeleeAttack()) > Misc.random(o.getCombat().calculateMeleeDefence())) {
c.clawDamage = Misc.random(calculateMeleeMaxHit() + 5);
} else {
c.clawDamage = Misc.random(calculateMeleeMaxHit() + 5);
}
c.clawIndex = c.playerIndex;
c.clawType = 1;
} else if (c.npcIndex > 0) {
NPC n = Server.npcHandler.npcs[c.npcIndex];
if (Misc.random(calculateMeleeAttack()) > Misc.random(n.defence)) {
c.clawDamage = Misc.random(calculateMeleeMaxHit() + Misc.random(6));
} else {
c.clawDamage = Misc.random(calculateMeleeMaxHit() /2);
}
c.clawIndex = c.npcIndex;
c.clawType = 2;
}
c.doubleHit = true;
c.usingClaws = true;
c.specEffect = 5;
c.hitDelay = getHitDelay(c.getItems().getItemName(c.playerEquipment[c.playerWeapon]).toLowerCase());
break;
case 4068: // Frostpyre
c.startAnimation(440);
c.specDamage = 1.50;
c.specAccuracy = 4.00;
c.gfx0(1350);
c.hitDelay = getHitDelay(c.getItems().getItemName(c.playerEquipment[c.playerWeapon]).toLowerCase());
break;
case 4151: // whip
case 15441: // whip
case 15442: // whip
case 15443: // whip
case 15444: // whip
if(Server.npcHandler.npcs[i] != null) {
Server.npcHandler.npcs[i].gfx100(341);
}
c.specAccuracy = 1.10;
c.startAnimation(11971);
c.hitDelay = getHitDelay(c.getItems().getItemName(c.playerEquipment[c.playerWeapon]).toLowerCase());
break;
case 13045:
if(Server.npcHandler.npcs[i] != null) {
Server.npcHandler.npcs[i].gfx100(341);
}
c.specAccuracy = 2.5;
c.specDamage = 1.80;
c.startAnimation(11971);
c.gfx0(188);
c.hitDelay = getHitDelay(c.getItems().getItemName(c.playerEquipment[c.playerWeapon]).toLowerCase());
break;
case 11694: // ags
c.startAnimation(7074);
c.specDamage = 1.63;
c.specAccuracy = 3.85;
c.gfx0(1222);
c.hitDelay = getHitDelay(c.getItems().getItemName(c.playerEquipment[c.playerWeapon]).toLowerCase());
break;
case 19780:
c.gfx100(1224);
c.startAnimation(1872);
c.specAccuracy = 100.00;
c.specDamage = 1.95;
c.ssSpec = true;
c.hitDelay = getHitDelay(c.getItems().getItemName(c.playerEquipment[c.playerWeapon]).toLowerCase());
break;
case 11730:
c.gfx100(1224);
c.startAnimation(7072);
c.hitDelay = getHitDelay(c.getItems().getItemName(c.playerEquipment[c.playerWeapon]).toLowerCase());
c.doubleHit = true;
c.ssSpec = true;
c.specAccuracy = 1.30;
break;
case 13905: // Vesta spear
c.startAnimation(10499);
c.gfx0(1835);
c.specAccuracy = 1.25;
c.specEffect = 6;
c.hitDelay = getHitDelay(c.getItems().getItemName(c.playerEquipment[c.playerWeapon]).toLowerCase());
break;
case 13899: // Vesta LongSword
c.startAnimation(10502);
c.hitDelay = getHitDelay(c.getItems().getItemName(c.playerEquipment[c.playerWeapon]).toLowerCase()+1);
c.specDamage = 1.30;
c.specAccuracy = 2.85;
break;
case 13902: // Statius
c.startAnimation(10505);
c.gfx0(1840);
c.hitDelay = getHitDelay(c.getItems().getItemName(c.playerEquipment[c.playerWeapon]).toLowerCase()+1);
c.specDamage = 1.40;
c.specAccuracy = 2.85;
break;
case 13576: // Dragon warhammer
c.startAnimation(10505);
c.gfx0(1840);
c.hitDelay = getHitDelay(c.getItems().getItemName(c.playerEquipment[c.playerWeapon]).toLowerCase()+1);
c.specDamage = 2.30;
c.specAccuracy = 2.85;
break;
case 11700:
c.startAnimation(7070);
c.gfx0(1221);
if (c.playerIndex > 0) {
} else {
Server.npcHandler.npcs[c.npcIndex].gfx0(2104);
}
c.specAccuracy = 1.35;
c.hitDelay = getHitDelay(c.getItems().getItemName(c.playerEquipment[c.playerWeapon]).toLowerCase());
c.specEffect = 2;
break;
case 11696:
c.startAnimation(7073);
c.gfx0(1223);
c.specDamage = 1.30;
c.specAccuracy = 1.85;
c.hitDelay = getHitDelay(c.getItems().getItemName(c.playerEquipment[c.playerWeapon]).toLowerCase());
c.specEffect = 3;
break;
case 11698:
c.startAnimation(7071);
c.gfx0(1220);
c.specAccuracy = 2.00;
c.specDamage = 1.30;
c.specEffect = 4;
c.hitDelay = getHitDelay(c.getItems().getItemName(c.playerEquipment[c.playerWeapon]).toLowerCase());
break;
case 3204: // d hally
c.gfx100(282);
c.startAnimation(1203);
c.hitDelay = getHitDelay(c.getItems().getItemName(c.playerEquipment[c.playerWeapon]).toLowerCase());
if(Server.npcHandler.npcs[i] != null && c.npcIndex > 0) {
if(!c.goodDistance(c.getX(), c.getY(), Server.npcHandler.npcs[i].getX(), Server.npcHandler.npcs[i].getY(), 1)){
c.doubleHit = true;
}
}
if(Server.playerHandler.players[i] != null && c.playerIndex > 0) {
if(!c.goodDistance(c.getX(), c.getY(), Server.playerHandler.players[i].getX(),Server.playerHandler.players[i].getY(), 1)){
c.doubleHit = true;
c.delayedDamage2 = Misc.random(calculateMeleeMaxHit());
}
}
break;
case 4153: // maul
c.startAnimation(1667);
c.hitDelay = getHitDelay(c.getItems().getItemName(c.playerEquipment[c.playerWeapon]).toLowerCase());
/*if (c.playerIndex > 0)
gmaulPlayer(i);
else
gmaulNpc(i);*/
c.gfx100(337);
break;
case 4587: // dscimmy
c.gfx100(347);
c.specEffect = 1;
c.startAnimation(1872);
c.hitDelay = getHitDelay(c.getItems().getItemName(c.playerEquipment[c.playerWeapon]).toLowerCase());
break;
case 1434: // mace
c.startAnimation(1060);
c.gfx100(251);
c.specMaxHitIncrease = 3;
c.hitDelay = getHitDelay(c.getItems().getItemName(c.playerEquipment[c.playerWeapon]).toLowerCase())+1;
c.specDamage = 1.35;
c.specAccuracy = 1.15;
break;
case 859: // magic long
c.usingBow = true;
c.bowSpecShot = 3;
c.rangeItemUsed = c.playerEquipment[c.playerArrows];
c.getItems().deleteArrow();
c.lastWeaponUsed = weapon;
c.startAnimation(426);
c.gfx100(250);
c.hitDelay = getHitDelay(c.getItems().getItemName(c.playerEquipment[c.playerWeapon]).toLowerCase());
c.projectileStage = 1;
if (c.fightMode == 2)
c.attackTimer--;
break;
case 13883: // Morrigan Throwing Axe
c.usingRangeWeapon = true;
c.rangeItemUsed = c.playerEquipment[c.playerWeapon];
c.getItems().deleteArrow();
c.lastWeaponUsed = weapon;
c.startAnimation(10501);
c.gfx0(1836);
c.hitDelay = 3;
c.specAccuracy = 1.90;
c.specDamage = 1.40;
c.projectileStage = 1;
c.hitDelay = getHitDelay(c.getItems().getItemName(c.playerEquipment[c.playerWeapon]).toLowerCase());
if (c.fightMode == 2)
c.attackTimer--;
if (c.playerIndex > 0)
fireProjectilePlayer();
else if (c.npcIndex > 0)
fireProjectileNpc();
break;
case 13879: // Morrigan Javeline
c.usingRangeWeapon = true;
c.rangeItemUsed = c.playerEquipment[c.playerWeapon];
c.getItems().deleteArrow();
c.lastWeaponUsed = weapon;
c.startAnimation(10504);
c.gfx0(1838);
c.specAccuracy = 2.00;
c.specDamage = 1.40;
c.hitDelay = 3;
c.projectileStage = 1;
c.hitDelay = getHitDelay(c.getItems().getItemName(c.playerEquipment[c.playerWeapon]).toLowerCase());
if (c.fightMode == 2)
c.attackTimer--;
if (c.playerIndex > 0)
fireProjectilePlayer();
else if (c.npcIndex > 0)
fireProjectileNpc();
break;
case 861: // magic short
c.usingBow = true;
c.bowSpecShot = 1;
c.rangeItemUsed = c.playerEquipment[c.playerArrows];
c.getItems().deleteArrow();
c.lastWeaponUsed = weapon;
c.startAnimation(1074);
c.hitDelay = 3;
c.projectileStage = 1;
c.hitDelay = getHitDelay(c.getItems().getItemName(c.playerEquipment[c.playerWeapon]).toLowerCase());
if (c.fightMode == 2)
c.attackTimer--;
if (c.playerIndex > 0)
fireProjectilePlayer();
else if (c.npcIndex > 0)
fireProjectileNpc();
break;
case 11235: // dark bow
case 15701: // dark bow
case 15702: // dark bow
case 15703: // dark bow
case 15704: // dark bow
c.usingBow = true;
c.dbowSpec = true;
c.rangeItemUsed = c.playerEquipment[c.playerArrows];
c.getItems().deleteArrow();
c.getItems().deleteArrow();
c.lastWeaponUsed = weapon;
c.hitDelay = 3;
c.startAnimation(426);
c.projectileStage = 1;
c.gfx100(getRangeStartGFX());
c.hitDelay = getHitDelay(c.getItems().getItemName(c.playerEquipment[c.playerWeapon]).toLowerCase());
if (c.fightMode == 2)
c.attackTimer--;
if (c.playerIndex > 0)
fireProjectilePlayer();
else if (c.npcIndex > 0)
fireProjectileNpc();
c.specAccuracy = 10.00;
c.specDamage = 2.00;
break;
}
c.delayedDamage = Misc.random(calculateMeleeMaxHit());
c.delayedDamage2 = Misc.random(calculateMeleeMaxHit());
c.usingSpecial = false;
c.getItems().updateSpecialBar();
}
public boolean checkSpecAmount(int weapon) {
if(c.playerEquipment[c.playerRing] == 19669)
{
c.specAmount += c.specAmount*0.1;
}
switch(weapon) {
case 1249:
case 1215:
case 1231:
case 5680:
case 5698:
case 1305:
case 1434:
case 13899:
if(c.specAmount >= 2.50) {
c.specAmount -= 2.50;
c.getItems().addSpecialBar(weapon);
return true;
}
return false;
case 4151:
case 15241:
case 15441: // whip
case 15442: // whip
case 15443: // whip
case 15444: // whip
case 11694:
case 14484:
case 4068:
case 11698:
case 4153:
case 13902:
case 13905:
case 13883:
case 11716:
case 13879:
case 15486:
case 10887:
if(c.specAmount >= 5) {
c.specAmount -= 5;
c.getItems().addSpecialBar(weapon);
return true;
}
return false;
case 19780:
if(c.specAmount >= 6) {
c.specAmount -= 6;
c.getItems().addSpecialBar(weapon);
return true;
}
return false;
case 6818:
if(c.specAmount >= 10) {
c.specAmount -= 10;
c.getItems().addSpecialBar(weapon);
return true;
}
return false;
case 13045:
case 13576:
if(c.specAmount >= 5) {
c.specAmount -= 5;
c.getItems().addSpecialBar(weapon);
return true;
}
return false;
case 13047:
if(c.specAmount >= 5) {
c.specAmount -= 5;
c.getItems().addSpecialBar(weapon);
return true;
}
return false;
case 13049:
if(c.specAmount >= 5) {
c.specAmount -= 5;
c.getItems().addSpecialBar(weapon);
return true;
}
return false;
case 3204:
if(c.specAmount >= 3) {
c.specAmount -= 3;
c.getItems().addSpecialBar(weapon);
return true;
}
return false;
case 1377:
case 11696:
case 11730:
if(c.specAmount >= 10) {
c.specAmount -= 10;
c.getItems().addSpecialBar(weapon);
return true;
}
return false;
case 4587:
case 859:
case 861:
case 15701: // dark bow
case 15702: // dark bow
case 15703: // dark bow
case 15704: // dark bow
case 11235:
case 11700:
if(c.specAmount >= 5.5) {
c.specAmount -= 5.5;
c.getItems().addSpecialBar(weapon);
return true;
}
return false;
default:
return true; // incase u want to test a weapon
}
}
public void resetPlayerAttack() {
c.usingMagic = false;
c.npcIndex = 0;
c.faceUpdate(0);
c.playerIndex = 0;
c.getPA().resetFollow();
//c.sendMessage("Reset attack.");
}
public int getCombatDifference(int combat1, int combat2) {
if(combat1 > combat2) {
return (combat1 - combat2);
}
if(combat2 > combat1) {
return (combat2 - combat1);
}
return 0;
}
/**
*Get killer id
**/
public int getKillerId(int playerId) {
int oldDamage = 0;
int count = 0;
int killerId = 0;
for (int i = 1; i < Config.MAX_PLAYERS; i++) {
if (Server.playerHandler.players[i] != null) {
if(Server.playerHandler.players[i].killedBy == playerId) {
if (Server.playerHandler.players[i].withinDistance(Server.playerHandler.players[playerId])) {
if(Server.playerHandler.players[i].totalPlayerDamageDealt > oldDamage) {
oldDamage = Server.playerHandler.players[i].totalPlayerDamageDealt;
killerId = i;
}
}
Server.playerHandler.players[i].totalPlayerDamageDealt = 0;
Server.playerHandler.players[i].killedBy = 0;
}
}
}
return killerId;
}
double[] prayerData = {
1, // Thick Skin.
1, // Burst of Strength.
1, // Clarity of Thought.
1, // Sharp Eye.
1, // Mystic Will.
2, // Rock Skin.
2, // SuperHuman Strength.
2, // Improved Reflexes.
0.4, // Rapid restore.
0.6, // Rapid Heal.
0.6, // Protect Items.
1.5, // Hawk eye.
2, // Mystic Lore.
4, // Steel Skin.
4, // Ultimate Strength.
4, // Incredible Reflexes.
4, // Protect from Magic.
4, // Protect from Missiles.
4, // Protect from Melee.
4, // Eagle Eye.
4, // Mystic Might.
1, // Retribution.
2, // Redemption.
6, // Smite.
8, // Chivalry.
8, // Piety.
};
double[] curseData = {
0.6, // Protect Item
2, // Sap Warrior
2, // Sap Range
2, // Sap Mage
2, // Sap Spirit
1, // Berserker
4, // Deflect Summoning
4, // Deflect Mage
4, // Deflect Range
4, // Deflect Melee
4, // Leech Attack
4, // Leech Range
4, // Leech Mage
4, // Leech Defence
4, // Leech Strength
4, // Leech Energy
4, // Leech Special
4, // Wrath
8, // Soul Split
10, // Turmoil
};
public void handlePrayerDrain() {
c.usingPrayer = false;
double toRemove = 0.0;
for (int j = 0; j < prayerData.length; j++) {
if (c.prayerActive[j]) {
toRemove += prayerData[j]/90;
c.usingPrayer = true;
}
}
for (int j = 0; j < curseData.length; j++) {
if (c.curseActive[j]) {
toRemove += curseData[j]/90;
c.usingPrayer = true;
}
}
if (toRemove > 0) {
toRemove /= (1 + (0.035 * c.playerBonus[11]));
}
c.prayerPoint -= toRemove;
if (c.prayerPoint <= 0) {
c.prayerPoint = 1.0 + c.prayerPoint;
reducePrayerLevel();
}
}
public void reducePrayerLevel() {
if(c.playerLevel[5] - 1 > 0) {
c.playerLevel[5] -= 1;
} else {
c.sendMessage("You have run out of prayer points!");
c.playerLevel[5] = 0;
c.getCombat().resetPrayers();
c.prayerId = -1;
}
c.getPA().refreshSkill(5);
}
public void resetPrayers() {
for(int i = 0; i < c.prayerActive.length; i++) {
c.prayerActive[i] = false;
c.getPA().sendFrame36(c.PRAYER_GLOW[i], 0);
}
for(int i = 0; i < c.curseActive.length; i++) {
c.curseActive[i] = false;
c.getPA().sendFrame36(c.CURSE_GLOW[i], 0);
}
c.headIcon = -1;
c.getPA().requestUpdates();
}
/**
* Wildy and duel info
**/
public boolean checkReqs() {
if(Server.playerHandler.players[c.playerIndex] == null) {
return false;
}
if (c.playerIndex == c.playerId)
return false;
if (c.inPits && Server.playerHandler.players[c.playerIndex].inPits)
return true;
if(Server.playerHandler.players[c.playerIndex].inDuelArena() && c.duelStatus != 5 && !c.usingMagic) {
if(c.arenas() || c.duelStatus == 5) {
c.sendMessage("You can't challenge inside the arena!");
return false;
}
c.getTradeAndDuel().requestDuel(c.playerIndex);
return false;
}
if(c.duelStatus == 5 && Server.playerHandler.players[c.playerIndex].duelStatus == 5) {
if(Server.playerHandler.players[c.playerIndex].duelingWith == c.getId()) {
return true;
} else {
c.sendMessage("This isn't your opponent!");
return false;
}
}
if(!Server.playerHandler.players[c.playerIndex].inWild() && Server.playerHandler.players[c.playerIndex].safeTimer <= 0) {
c.sendMessage("That player is not in the wilderness.");
c.stopMovement();
c.getCombat().resetPlayerAttack();
return false;
}
if(Server.playerHandler.players[c.playerIndex].safeZone()) {
c.sendMessage("This player is currently in a safe zone.");
c.stopMovement();
c.getCombat().resetPlayerAttack();
return false;
}
if(!c.inWild() && c.safeTimer <= 0) {
c.sendMessage("You are not in the wilderness.");
c.stopMovement();
c.getCombat().resetPlayerAttack();
return false;
}
if(c.safeZone()) {
c.sendMessage("You are standing in a safe zone.");
c.stopMovement();
c.getCombat().resetPlayerAttack();
return false;
}
if(!c.inFunPk()){
if(Config.COMBAT_LEVEL_DIFFERENCE) {
int combatDif1 = c.getCombat().getCombatDifference(c.combatLevel, Server.playerHandler.players[c.playerIndex].combatLevel);
if(combatDif1 > c.wildLevel || combatDif1 > Server.playerHandler.players[c.playerIndex].wildLevel) {
c.sendMessage("Your combat level difference is too great to attack that player here.");
c.stopMovement();
c.getCombat().resetPlayerAttack();
return false;
}
}
}
if(Config.SINGLE_AND_MULTI_ZONES) {
if(!Server.playerHandler.players[c.playerIndex].inMulti()) { // single combat zones
if(Server.playerHandler.players[c.playerIndex].underAttackBy != c.playerId && Server.playerHandler.players[c.playerIndex].underAttackBy != 0) {
c.sendMessage("That player is already in combat.");
c.stopMovement();
c.getCombat().resetPlayerAttack();
return false;
}
if(Server.playerHandler.players[c.playerIndex].playerId != c.underAttackBy && c.underAttackBy != 0 || c.underAttackBy2 > 0) {
c.sendMessage("You are already in combat.");
c.stopMovement();
c.getCombat().resetPlayerAttack();
return false;
}
}
}
return true;
}
public boolean checkMultiBarrageReqs(int i) {
if(Server.playerHandler.players[i] == null) {
return false;
}
if (i == c.playerId)
return false;
if (c.inPits && Server.playerHandler.players[i].inPits)
return true;
if(!Server.playerHandler.players[i].inWild()) {
return false;
}
if(Config.COMBAT_LEVEL_DIFFERENCE && !c.inFunPk() && !Server.playerHandler.players[i].inFunPk()) {
int combatDif1 = c.getCombat().getCombatDifference(c.combatLevel, Server.playerHandler.players[i].combatLevel);
if(combatDif1 > c.wildLevel || combatDif1 > Server.playerHandler.players[i].wildLevel) {
c.sendMessage("Your combat level difference is too great to attack that player here.");
return false;
}
}
if(Config.SINGLE_AND_MULTI_ZONES) {
if(!Server.playerHandler.players[i].inMulti()) { // single combat zones
if(Server.playerHandler.players[i].underAttackBy != c.playerId && Server.playerHandler.players[i].underAttackBy != 0) {
return false;
}
if(Server.playerHandler.players[i].playerId != c.underAttackBy && c.underAttackBy != 0) {
c.sendMessage("You are already in combat.");
return false;
}
}
}
return true;
}
/**
*Weapon stand, walk, run, etc emotes
**/
public void getPlayerAnimIndex(String weaponName){
c.playerStandIndex = 0x328;
c.playerTurnIndex = 0x337;
c.playerWalkIndex = 0x333;
c.playerTurn180Index = 0x334;
c.playerTurn90CWIndex = 0x335;
c.playerTurn90CCWIndex = 0x336;
c.playerRunIndex = 0x338;
if(weaponName.contains("halberd") || weaponName.contains("guthan")) {
c.playerStandIndex = 809;
c.playerWalkIndex = 1146;
c.playerRunIndex = 1210;
return;
}
if(weaponName.contains("dharok")) {
c.playerStandIndex = 0x811;
c.playerWalkIndex = 0x67F;
c.playerRunIndex = 0x680;
return;
}
if(weaponName.contains("balmung")) {
c.playerStandIndex = 0x811;
c.playerWalkIndex = 0x67F;
c.playerRunIndex = 0x680;
return;
}
if(weaponName.contains("zamorakian")) {
c.playerStandIndex = 12010;
c.playerWalkIndex = 12012;
c.playerRunIndex = 12016;
return;
}
if(weaponName.contains("ahrim")) {
c.playerStandIndex = 809;
c.playerWalkIndex = 1146;
c.playerRunIndex = 1210;
return;
}
if(weaponName.contains("verac") || weaponName.contains("rapier") || weaponName.contains("chaotic staff") || weaponName.contains("longsword")) {
c.playerStandIndex = 0x328;
c.playerWalkIndex = 0x333;
c.playerRunIndex = 824;
return;
}
if (weaponName.contains("scimitar") || weaponName.contains("silverlight") || weaponName.contains("korasi's")) {
c.playerStandIndex = 12021;
c.playerRunIndex = 12023;
c.playerWalkIndex = 12024;
return;
}
if (weaponName.contains("scimitar") || weaponName.contains("silverlight") || weaponName.contains("Frostpyre")) {
c.playerStandIndex = 12021;
c.playerRunIndex = 12023;
c.playerWalkIndex = 12024;
return;
}
if (weaponName.contains("wand") || weaponName.contains("staff") || weaponName.contains("staff") || weaponName.contains("spear")) {
c.playerStandIndex = 8980;
c.playerRunIndex = 1210;
c.playerWalkIndex = 1146;
return;
}
if(weaponName.contains("karil")) {
c.playerStandIndex = 2074;
c.playerWalkIndex = 2076;
c.playerRunIndex = 2077;
return;
}
if(weaponName.contains("2h sword") || weaponName.contains("godsword") || weaponName.contains("saradomin sw")) {
c.playerStandIndex = 7047;
c.playerWalkIndex = 7046;
c.playerRunIndex = 7039;
return;
}
if(weaponName.contains("bow")) {
c.playerStandIndex = 808;
c.playerWalkIndex = 819;
c.playerRunIndex = 824;
return;
}
switch(c.playerEquipment[c.playerWeapon]) {
case 16955: // rapier primal
c.playerStandIndex = 12021;
c.playerWalkIndex = 12024;
c.playerRunIndex = 12023;
break;
case 18349: // rapier chaotic
c.playerStandIndex = 12021;
c.playerWalkIndex = 12024;
c.playerRunIndex = 12023;
break;
case 18353: // maul chaotic
case 13576:
c.playerStandIndex = 13217;
c.playerWalkIndex = 13218;
c.playerRunIndex = 13220;
break;
case 16425: // primal chaotic
c.playerStandIndex = 13217;
c.playerWalkIndex = 13218;
c.playerRunIndex = 13220;
break;
case 4151:
case 15441: // whip
case 15442: // whip
case 15443: // whip
case 15444: // whip
case 13045:
c.playerStandIndex = 11973;
c.playerWalkIndex = 11975;
c.playerRunIndex = 1661;
break;
case 15039:
c.playerStandIndex = 12000;
c.playerWalkIndex = 1663;
c.playerRunIndex = 1664;
break;
case 10887:
c.playerStandIndex = 5869;
c.playerWalkIndex = 5867;
c.playerRunIndex = 5868;
break;
case 6528:
c.playerStandIndex = 0x811;
c.playerWalkIndex = 2064;
c.playerRunIndex = 1664;
break;
case 4153:
c.playerStandIndex = 1662;
c.playerWalkIndex = 1663;
c.playerRunIndex = 1664;
break;
case 15241:
c.playerStandIndex = 12155;
c.playerWalkIndex = 12154;
c.playerRunIndex = 12154;
break;
case 11694:
case 11696:
case 11730:
case 11698:
case 11700:
c.playerStandIndex = 4300;
c.playerWalkIndex = 4306;
c.playerRunIndex = 4305;
break;
case 1305:
c.playerStandIndex = 809;
break;
}
}
/**
* Weapon emotes
**/
public int getWepAnim(String weaponName) {
if(c.playerEquipment[c.playerWeapon] <= 0) {
switch(c.fightMode) {
case 0:
return 422;
case 2:
return 423;
case 1:
return 451;
}
}
if(weaponName.contains("knife") || weaponName.contains("dart") || weaponName.contains("javelin") || weaponName.contains("thrownaxe")){
return 806;
}
if(weaponName.contains("halberd")) {
return 440;
}
if(weaponName.startsWith("dragon dagger")) {
return 402;
}
if(weaponName.endsWith("dagger")) {
return 412;
}
if(weaponName.contains("2h sword") || weaponName.contains("godsword") || weaponName.contains("saradomin sword")) {
switch(c.fightMode) {
case 0:
return 7041;
case 2:
return 7042;
case 1:
return 7048;
}
}
if(weaponName.contains("scimitar") || weaponName.contains("longsword") || weaponName.contains("korasi's")) {
switch(c.fightMode) {
case 0:
return 12029;
case 1: // New Scimmi models
return 12029;
case 2:
return 12029;
case 3:
return 12028;
}
}
if(weaponName.contains("rapier")) {
switch(c.fightMode) {
case 0:
return 386;
case 1:
return 386;
case 2:
return 386;
case 3:
return 386;
}
}
if(weaponName.contains("dharok")) {
switch(c.fightMode) {
case 0:
return 2066;
case 1:
return 2066;
case 2:
return 2066;
case 3:
return 2067;
}
}
if(weaponName.contains("balmung")) {
switch(c.fightMode) {
case 0:
return 2067;
case 1:
return 2067;
case 2:
return 2067;
case 3:
return 2066;
}
}
if(weaponName.contains("sword")) {
return 451;
}
if(weaponName.contains("karil")) {
return 2075;
}
if(weaponName.contains("chaotic crossbow")) {
return 4230;
}
if(weaponName.contains("bow") && !weaponName.contains("'bow")) {
return 426;
}
if (weaponName.contains("'bow"))
return 4230;
switch(c.playerEquipment[c.playerWeapon]) { // if you don't want to use strings
case 6522:
return 2614;
case 13905:
return 2080;
case 17149:
return 2080;
case 4153: // granite maul
return 1665;
case 4726: // guthan
return 2080;
case 11716:
return 12006;
case 13879:
case 13883:
return 806;
case 14484: // Dclaw
return 393;
case 15039: // Chaotic maul
return 2661;
case 15241:
return 12153;
case 4747: // torag
return 0x814;
case 4710: // ahrim
return 406;
case 18353:
return 13055;
case 16425:
return 13055;
case 16955:
return 386;
case 18349:
return 386;
case 4755: // verac
return 2062;
case 4734: // karil
return 2075;
case 10887:
return 5865;
case 4151:
case 15441: // whip
case 15442: // whip
case 15443: // whip
case 15444: // whip
case 13045:
case 13576:
return 1658;
case 6528:
return 2661;
default:
return 451;
}
}
/**
* Block emotes
*/
public int getBlockEmote() {
switch(c.playerEquipment[c.playerShield]) {
case 11283:
case 11284:
case 6524:
case 13738:
case 13740:
case 13742:
case 13744:
case 1187:
case 1540:
case 10352:
case 1201:
case 18363:
case 18359:
case 18361:
return 1156;//shields
case 8850:
case 8849:
case 8848:
case 8847:
case 8846:
case 8845:
case 8844:
case 20072:
return 4177;//defenders
}
switch(c.playerEquipment[c.playerWeapon]) {
case 4755:
case 5698:
case 1216:
return 2063;
case 4726:
case 1249:
case 3204:
case 11716:
return 435;
case 6818:
case 1321:
case 1323:
case 1325:
case 1327:
case 1329:
case 1331:
case 1333:
case 6611:
case 4587:
case 19780:
return 12030;
case 15349:
case 15351:
return 12030;
case 6914:
case 4675:
return 415;
case 18355:
case 15486:
return 12806;
case 10887:
return 5866;
case 4153:
return 1666;
case 14484:
return 397;
case 4151:
case 15441:
case 15442:
case 15443:
case 15444:
case 15445:
return 11974;
case 11694:
case 11698:
case 11700:
case 11696:
case 11730:
return 13051;
case 18353:
return 13054;
case 18351:
return 13042;
case 15241:
return 12156;
default:
return 424;
}
}
/**
* Weapon and magic attack speed!
**/
public int getAttackDelay(String s) {
if(c.usingMagic) {
switch(c.MAGIC_SPELLS[c.spellId][0]) {
case 12871: // ice blitz
case 13023: // shadow barrage
case 12891: // ice barrage
return 5;
default:
return 5;
}
}
if(c.playerEquipment[c.playerWeapon] == -1)
return 4;//unarmed
switch (c.playerEquipment[c.playerWeapon]) {
case 11235:
case 15701: // dark bow
case 15702: // dark bow
case 15703: // dark bow
case 15704: // dark bow
return 9;
case 13879:
return 8;
case 15241: // hand cannon
return 6;
case 15037:
case 11730:
return 4;
case 14484:
return 5;
case 13883:
return 6;
case 10887:
case 6528:
case 18353:
case 16425:
return 7;
case 13905:
return 5;
case 17149:
return 5;
}
if(s.endsWith("greataxe"))
return 7;
else if(s.equals("torags hammers"))
return 5;
else if(s.equals("guthans warspear"))
return 5;
else if(s.equals("veracs flail"))
return 5;
else if(s.equals("ahrims staff"))
return 6;
else if(s.contains("staff")){
if(s.contains("zamarok") || s.contains("guthix") || s.contains("saradomian") || s.contains("slayer") || s.contains("ancient"))
return 4;
else
return 5;
} else if(s.contains("bow")){
if(s.contains("composite") || s.equals("seercull"))
return 5;
else if (s.contains("aril"))
return 4;
else if(s.contains("Ogre"))
return 8;
else if(s.contains("short") || s.contains("hunt") || s.contains("sword"))
return 4;
else if(s.contains("long") || s.contains("crystal"))
return 6;
else if(s.contains("'bow"))
return 7;
return 5;
}
else if(s.contains("dagger"))
return 4;
else if(s.contains("godsword") || s.contains("2h"))
return 6;
else if(s.contains("longsword"))
return 5;
else if(s.contains("sword"))
return 4;
else if(s.contains("scimitar"))
return 4;
else if(s.contains("mace"))
return 5;
else if(s.contains("battleaxe"))
return 6;
else if(s.contains("pickaxe"))
return 5;
else if(s.contains("thrownaxe"))
return 5;
else if(s.contains("axe"))
return 5;
else if(s.contains("warhammer"))
return 6;
else if(s.contains("2h"))
return 7;
else if(s.contains("spear"))
return 5;
else if(s.contains("claw"))
return 4;
else if(s.contains("halberd"))
return 7;
//sara sword, 2400ms
else if(s.equals("granite maul"))
return 7;
else if(s.equals("toktz-xil-ak"))//sword
return 4;
else if(s.equals("tzhaar-ket-em"))//mace
return 5;
else if(s.equals("tzhaar-ket-om"))//maul
return 7;
else if(s.equals("toktz-xil-ek"))//knife
return 4;
else if(s.equals("toktz-xil-ul"))//rings
return 4;
else if(s.equals("toktz-mej-tal"))//staff
return 6;
else if(s.contains("whip"))
return 4;
else if(s.contains("dart"))
return 3;
else if(s.contains("knife"))
return 3;
else if(s.contains("javelin"))
return 6;
return 5;
}
/**
* How long it takes to hit your enemy
**/
public int getHitDelay(String weaponName) {
if(c.usingMagic) {
switch(c.MAGIC_SPELLS[c.spellId][0]) {
case 12891:
return 4;
case 12871:
return 6;
default:
return 4;
}
} else {
if(weaponName.contains("knife") || weaponName.contains("dart") || weaponName.contains("javelin") || weaponName.contains("thrownaxe") || c.playerEquipment[c.playerWeapon] == 13879 || c.playerEquipment[c.playerWeapon] == 13883){
return 3;
}
if(weaponName.contains("cross") || weaponName.contains("c'bow") || weaponName.contains("hand cannon") || weaponName.contains("chaotic crossbow")) {
return 4;
}
if(weaponName.contains("bow") && !c.dbowSpec) {
return 4;
} else if (c.dbowSpec) {
return 4;
}
switch(c.playerEquipment[c.playerWeapon]) {
case 6522: // Toktz-xil-ul
return 3;
default:
return 2;
}
}
}
public int getRequiredDistance() {
if (c.followId > 0 && c.freezeTimer <= 0 && !c.isMoving)
return 2;
else if(c.followId > 0 && c.freezeTimer <= 0 && c.isMoving) {
return 3;
} else {
return 1;
}
}
public boolean usingHally() {
switch(c.playerEquipment[c.playerWeapon]) {
case 3190:
case 3192:
case 3194:
case 3196:
case 3198:
case 3200:
case 3202:
case 3204:
return true;
default:
return false;
}
}
/**
* Melee
**/
public int calculateMeleeAttack() {
int attackLevel = c.playerLevel[0];
//2, 5, 11, 18, 19
if (c.prayerActive[2]) {
attackLevel += c.getLevelForXP(c.playerXP[c.playerAttack]) * 0.05;
} else if (c.prayerActive[7]) {
attackLevel += c.getLevelForXP(c.playerXP[c.playerAttack]) * 0.1;
} else if (c.prayerActive[15]) {
attackLevel += c.getLevelForXP(c.playerXP[c.playerAttack]) * 0.15;
} else if (c.prayerActive[24]) {
attackLevel += c.getLevelForXP(c.playerXP[c.playerAttack]) * 0.18;
} else if (c.prayerActive[25]) {
attackLevel += c.getLevelForXP(c.playerXP[c.playerAttack]) * 0.22;
} else if (c.curseActive[19]) { // turmoil
attackLevel += c.getLevelForXP(c.playerXP[c.playerAttack]) * 0.17 + c.getatt;
}
if (c.fullVoidEliteMelee() || c.fullVoidMelee() || c.fullStatius() || c.fullVesta() || c.fullTorva())
attackLevel += c.getLevelForXP(c.playerXP[c.playerAttack]) * 0.2;
attackLevel *= c.specAccuracy;
int i = c.playerBonus[bestMeleeAtk()];
i += c.bonusAttack;
if (c.playerEquipment[c.playerAmulet] == 11128 && c.playerEquipment[c.playerWeapon] == 6528) {
i *= 1.30;
}
return (int)(attackLevel + (attackLevel * 0.17) + (i + i * 0.05));
}
public int bestMeleeAtk()
{
if(c.playerBonus[0] > c.playerBonus[1] && c.playerBonus[0] > c.playerBonus[2])
return 0;
if(c.playerBonus[1] > c.playerBonus[0] && c.playerBonus[1] > c.playerBonus[2])
return 1;
return c.playerBonus[2] <= c.playerBonus[1] || c.playerBonus[2] <= c.playerBonus[0] ? 0 : 2;
}
public int calculateMeleeMaxHit() {
/*
*Redone By:
*G Wishart & i0wn3v3ry
*/
double maxHit = 0;
int attBonus = c.playerBonus[10]; //attack
int attack = c.playerLevel[0]; //attack
int strBonus = c.playerBonus[10]; //strength
int strength = c.playerLevel[2]; //strength
int defBonus = c.playerBonus[10]; //defense
int defense = c.playerLevel[1]; //defense
int ranBonus = c.playerBonus[10]; //range
int range = c.playerLevel[4]; //range
int magBonus = c.playerBonus[10]; //mage
int magic = c.playerLevel[6]; //mage
int attlvlForXP = c.getLevelForXP(c.playerXP[0]); //attack
int strlvlForXP = c.getLevelForXP(c.playerXP[2]); //strength
int deflvlForXP = c.getLevelForXP(c.playerXP[1]); //defense
int ranlvlForXP = c.getLevelForXP(c.playerXP[4]); //range
int maglvlForXP = c.getLevelForXP(c.playerXP[6]); //mage
int lvlForXP = c.getLevelForXP(c.playerXP[2]);
if(c.curseActive[10]) { // Leech Attack
attack += (int)(attlvlForXP * .10 + c.getatt);
}
if(c.curseActive[13]) { // Leech Defense
defense += (int)(deflvlForXP * .10 + c.getdef);
}
if(c.curseActive[14]) { // Leech Strength
strength += (int)(strlvlForXP * .10 + c.getstr);
}
if(c.curseActive[11]) { // Leech Ranged
range += (int)(ranlvlForXP * .10 + c.getran);
}
if(c.curseActive[12]) { // Leech Magic
magic += (int)(maglvlForXP * .10 + c.getmag);
}
if(c.prayerActive[1]) {
strength += (int)(lvlForXP * .05);
} else
if(c.prayerActive[6]) {
strength += (int)(lvlForXP * .1);
} else
if(c.prayerActive[14]) {
strength += (int)(lvlForXP * .15);
} else
if(c.prayerActive[24]) {
strength += (int)(lvlForXP * .18);
} else
if(c.prayerActive[25]) {
strength += (int)(lvlForXP * .23);
}
if(c.curseActive[19]) { // turmoil
strength += (int)(lvlForXP * .25 + c.getstr);
}
if(c.playerEquipment[c.playerHat] == 2526 && c.playerEquipment[c.playerChest] == 2520 && c.playerEquipment[c.playerLegs] == 2522) {
maxHit += (maxHit * 10 / 100);
}
if(c.playerEquipment[c.playerShield] == 20072) {
maxHit *= 1.03;
}
if(c.fullTorva()) {
maxHit *= 1.18;
}
if(c.fullStatius()) {
maxHit *= 1.16;
}
if(c.fullVesta()) {
maxHit *= 1.17;
}
if (c.fullVoidEliteMelee()) {
maxHit *= 1.15;
}
if (c.fullVoidMelee())
maxHit = (int)(maxHit * 1.15);
maxHit += 1.05D + (double)(strBonus * strength) * 0.00175D;
maxHit += (double)strength * 0.11D;
if (c.playerEquipment[c.playerWeapon] == 4718 && c.playerEquipment[c.playerHat] == 4716 && c.playerEquipment[c.playerChest] == 4720 && c.playerEquipment[c.playerLegs] == 4722) {
maxHit += (c.getPA().getLevelForXP(c.playerXP[3]) - c.playerLevel[3]) / 2;
}
if (c.specDamage > 1)
maxHit = (int)(maxHit * c.specDamage);
if (maxHit < 0)
maxHit = 1;
if (c.playerEquipment[c.playerAmulet] == 11128
&& c.playerEquipment[c.playerWeapon] == 6528)
{
maxHit *= 1.20;
}
return (int)Math.floor(maxHit);
}
public int calculateMeleeDefence()
{
int defenceLevel = c.playerLevel[1];
int i = c.playerBonus[bestMeleeDef()];
if (c.prayerActive[0]) {
defenceLevel += c.getLevelForXP(c.playerXP[c.playerDefence]) * 0.05;
} else if (c.prayerActive[5]) {
defenceLevel += c.getLevelForXP(c.playerXP[c.playerDefence]) * 0.1;
} else if (c.prayerActive[13]) {
defenceLevel += c.getLevelForXP(c.playerXP[c.playerDefence]) * 0.15;
} else if (c.prayerActive[24]) {
defenceLevel += c.getLevelForXP(c.playerXP[c.playerDefence]) * 0.2;
} else if (c.prayerActive[25]) {
defenceLevel += c.getLevelForXP(c.playerXP[c.playerDefence]) * 0.25;
}
return (int)(defenceLevel + (defenceLevel * 0.15) + (i + i * 0.05));
}
public int bestMeleeDef()
{
if(c.playerBonus[5] > c.playerBonus[6] && c.playerBonus[5] > c.playerBonus[7])
return 5;
if(c.playerBonus[6] > c.playerBonus[5] && c.playerBonus[6] > c.playerBonus[7])
return 6;
return c.playerBonus[7] <= c.playerBonus[5] || c.playerBonus[7] <= c.playerBonus[6] ? 5 : 7;
}
/**
* Range
**/
public int calculateRangeAttack() {
int attackLevel = c.playerLevel[4];
attackLevel *= c.specAccuracy;
if (c.fullVoidRange() || c.fullPernix() || c.fullVoidEliteRange())
attackLevel += c.getLevelForXP(c.playerXP[c.playerRanged]) * 0.2;
if (c.prayerActive[3])
attackLevel *= 1.05;
else if (c.prayerActive[11])
attackLevel *= 1.92;
else if (c.prayerActive[19])
attackLevel *= 1.15;
//dbow spec
if (c.fullVoidRange() && c.specAccuracy > 1.15) {
attackLevel *= 1.95;
}
if (c.fullVoidRange()) {
if(c.playerWeapon == 15241)
//b *= 1.35;
attackLevel *= 2.30;
}
if (c.fullVoidEliteRange() && c.specAccuracy > 1.15) {
attackLevel *= 1.95;
}
if (c.fullVoidEliteRange()) {
attackLevel *= 1.95;
}
if (c.zaryteBow()) {
attackLevel *= 1.95;
}
if (c.cCbow()) {
attackLevel *= 1.96;
}
if (c.fullPernix()) {
attackLevel *= 1.95;
}
if (c.faithfulShield()) {
attackLevel *= 1.30;
}
return (int) (attackLevel + (c.playerBonus[4] * 2.15));
}
public int calculateRangeDefence() {
int defenceLevel = c.playerLevel[1];
if (c.prayerActive[0]) {
defenceLevel += c.getLevelForXP(c.playerXP[c.playerDefence]) * 0.05;
} else if (c.prayerActive[5]) {
defenceLevel += c.getLevelForXP(c.playerXP[c.playerDefence]) * 0.1;
} else if (c.prayerActive[13]) {
defenceLevel += c.getLevelForXP(c.playerXP[c.playerDefence]) * 0.17;
} else if (c.prayerActive[24]) {
defenceLevel += c.getLevelForXP(c.playerXP[c.playerDefence]) * 0.2;
} else if (c.prayerActive[25]) {
defenceLevel += c.getLevelForXP(c.playerXP[c.playerDefence]) * 0.25;
} else if (c.curseActive[19]) { // turmoil
defenceLevel += c.getLevelForXP(c.playerXP[c.playerDefence]) * 0.15 + c.getdef;
}
return (int) (defenceLevel + c.playerBonus[9] + (c.playerBonus[9] / 2));
}
public boolean usingBolts() {
return c.playerEquipment[c.playerArrows] >= 9130 && c.playerEquipment[c.playerArrows] <= 9145 || c.playerEquipment[c.playerArrows] >= 9230 && c.playerEquipment[c.playerArrows] <= 9245 || c.playerEquipment[c.playerArrows] == 15243;
}
public int rangeMaxHit() {
int rangeLevel = c.playerLevel[4];
double modifier = 1.0;
double wtf = c.specDamage;
int itemUsed = c.usingBow ? c.lastArrowUsed : c.lastWeaponUsed;
if (c.prayerActive[3])
modifier += 0.07;
else if (c.prayerActive[11])
modifier += 0.19;
else if (c.prayerActive[19])
modifier += 0.16;
if (c.playerEquipment[c.playerWeapon] == 9185)
modifier += 0.25;
if (c.playerEquipment[c.playerWeapon] == 18357)
modifier += 0.28;
if (c.playerEquipment[c.playerWeapon] == 20172)
modifier += 0.26;
if (c.playerEquipment[c.playerAmulet] == 15126)
modifier += 0.05;
if (c.fullVoidRange())
modifier += 0.15;
if (c.fullVoidEliteRange())
modifier += 0.16;
if (c.zaryteBow())
modifier +=.30;
if (c.cCbow())
modifier += .42;
if (c.faithfulShield())
modifier +=.06;
if (c.fullPernix())
modifier += .20;
double c = modifier * rangeLevel;
int rangeStr = getRangeStr(itemUsed);
double max =(c + 18) * (rangeStr + 64) / 640;
if (wtf != 1)
max *= wtf;
if (max < 1)
max = 1;
return (int)max;
}
/*public int getRangeStr(int i) {
if (i == 4214)
return 70;
switch (i) {
//bronze to rune bolts
case 877://bronze bolts
return 10;
case 9140://iron bolts
return 46;
case 9141://steel bolts
return 64;
case 9142://mith bolts
return 82;
case 9241://emerald bolts e
return 85;
case 9240://saphhire bolts e
return 83;
case 9143://addy bolts
return 100;
case 9243://diamond bolts e
return 105;
case 9242://ruby bolts e
return 103;
case 9144://rune bolts
return 115;
case 9244://dragon bolts e
return 132;
case 13882:
case 13881:
case 13880:
case 13879:
return 170;
case 13883:
return 130;
//bronze to dragon arrows
case 882:
return 7;
case 884:
return 10;
case 886:
return 16;
case 888:
return 22;
case 890:
return 31;
case 892:
case 4740:
return 35;
case 11212:
return 80;
//knifes
case 864:
return 3;
case 863:
return 4;
case 865:
return 7;
case 866:
return 10;
case 867:
return 14;
case 868:
return 54;
}
return 0;
}*/
public int getRangeStr(int i) {
int str = 0;
int[][] data = {
{877, 10}, {9140, 46}, {9145, 36}, {9141, 64},
{9142, 82}, {9143,100}, {9144,115}, {9236, 14},
{9237, 30}, {9238, 48}, {9239, 66}, {9240, 83},
{9241, 85}, {9242,103}, {9243,105}, {9244,117},
{9245,120}, {882, 7}, {884, 10}, {886, 16},
{888, 22}, {890, 31}, {892, 49},{15243, 150}, {4740, 55},
{11212, 60}, {806, 1}, {807, 3}, {808, 4},
{809, 7}, {810,10}, {811,14}, {11230,20},
{864, 3}, {863, 4}, {865, 7}, {866, 10},
{867, 14}, {868, 24}, {825, 6}, {826,10},
{827,12}, {828,18}, {829,28}, {830,42},
{800, 5}, {801, 7}, {802,11}, {803,16},
{804,23}, {805,36}, {9976, 0}, {9977, 15},
{4212, 70}, {4214, 70}, {4215, 70}, {4216, 70},
{4217, 70}, {4218, 70}, {4219, 70}, {4220, 70},
{4221, 70}, {4222, 70}, {4223, 70}, {6522, 49},
{10034, 15},
};
for(int l = 0; l < data.length; l++) {
if(i == data[l][0]) {
str = data[l][1];
}
}
return str;
}
/*public int rangeMaxHit() {
int weapon = c.playerEquipment[c.playerWeapon];
int rangehit = 0;
rangehit += c.playerLevel[4] / 7.5;
int weapon = c.lastWeaponUsed;
int Arrows = c.lastArrowUsed;
if (weapon == 4223) {//Cbow 1/10
rangehit = 2;
rangehit += c.playerLevel[4] / 7;
} else if (weapon == 4222) {//Cbow 2/10
rangehit = 3;
rangehit += c.playerLevel[4] / 7;
} else if (weapon == 4221) {//Cbow 3/10
rangehit = 3;
rangehit += c.playerLevel[4] / 6.5;
} else if (weapon == 4220) {//Cbow 4/10
rangehit = 4;
rangehit += c.playerLevel[4] / 6.5;
} else if (weapon == 4219) {//Cbow 5/10
rangehit = 4;
rangehit += c.playerLevel[4] / 6;
} else if (weapon == 4218) {//Cbow 6/10
rangehit = 5;
rangehit += c.playerLevel[4] / 6;
} else if (weapon == 4217) {//Cbow 7/10
rangehit = 5;
rangehit += c.playerLevel[4] / 5.5;
} else if (weapon == 4216) {//Cbow 8/10
rangehit = 6;
rangehit += c.playerLevel[4] / 5.5;
} else if (weapon == 4215) {//Cbow 9/10
rangehit = 6;
rangehit += c.playerLevel[4] / 5;
} else if (weapon == 4214) {//Cbow Full
rangehit = 7;
rangehit += c.playerLevel[4] / 5;
} else if (weapon == 6522) {
rangehit = 5;
rangehit += c.playerLevel[4] / 6;
} else if (weapon == 9029) {//dragon darts
rangehit = 8;
rangehit += c.playerLevel[4] / 10;
} else if (weapon == 811 || weapon == 868) {//rune darts
rangehit = 2;
rangehit += c.playerLevel[4] / 8.5;
} else if (weapon == 13879) {
rangehit = 10;
rangehit += c.playerLevel[4] / 17;
} else if (weapon == 13880) {
rangehit = 10;
rangehit += c.playerLevel[4] / 17;
} else if (weapon == 13881) {
rangehit = 10;
rangehit += c.playerLevel[4] / 17;
} else if (weapon == 13882) {
rangehit = 10;
rangehit += c.playerLevel[4] / 17;
} else if (weapon == 13883) {
rangehit = 7;
rangehit += c.playerLevel[4] / 17;
} else if (weapon == 20171) {
rangehit = 11;
rangehit += c.playerLevel[4] / 17;
} else if (weapon == 18357) {
rangehit = 12;
rangehit += c.playerLevel[4] / 17;
} else if (weapon == 15241) {
rangehit = 10;
rangehit += c.playerLevel[4] / 17;
} else if (weapon == 810 || weapon == 867) {//adamant darts
rangehit = 2;
rangehit += c.playerLevel[4] / 9;
} else if (weapon == 809 || weapon == 866) {//mithril darts
rangehit = 2;
rangehit += c.playerLevel[4] / 9.5;
} else if (weapon == 808 || weapon == 865) {//Steel darts
rangehit = 2;
rangehit += c.playerLevel[4] / 10;
} else if (weapon == 807 || weapon == 863) {//Iron darts
rangehit = 2;
rangehit += c.playerLevel[4] / 10.5;
} else if (weapon == 806 || weapon == 864) {//Bronze darts
rangehit = 1;
rangehit += c.playerLevel[4] / 11;
} else if (Arrows == 4740 && weapon == 4734) {//BoltRacks
rangehit = 3;
rangehit += c.playerLevel[4] / 6;
} else if (Arrows == 15243) {//Hand cannon shots
rangehit = 4;
rangehit += c.playerLevel[4] / 6;
} else if (Arrows == 11212) {//dragon arrows
rangehit = 4;
rangehit += c.playerLevel[4] / 5.5;
} else if (Arrows == 892) {//rune arrows
rangehit = 3;
rangehit += c.playerLevel[4] / 6;
} else if (Arrows == 890) {//adamant arrows
rangehit = 2;
rangehit += c.playerLevel[4] / 7;
} else if (Arrows == 888) {//mithril arrows
rangehit = 2;
rangehit += c.playerLevel[4] / 7.5;
} else if (Arrows == 886) {//steel arrows
rangehit = 2;
rangehit += c.playerLevel[4] / 8;
} else if (Arrows == 884) {//Iron arrows
rangehit = 2;
rangehit += c.playerLevel[4] / 9;
} else if (Arrows == 882) {//Bronze arrows
rangehit = 1;
rangehit += c.playerLevel[4] / 9.5;
} else if (Arrows == 9244) {
rangehit = 8;
rangehit += c.playerLevel[4] / 3;
} else if (Arrows == 9139) {
rangehit = 12;
rangehit += c.playerLevel[4] / 4;
} else if (Arrows == 9140) {
rangehit = 2;
rangehit += c.playerLevel[4] / 7;
} else if (Arrows == 9141) {
rangehit = 3;
rangehit += c.playerLevel[4] / 6;
} else if (Arrows == 9142) {
rangehit = 4;
rangehit += c.playerLevel[4] / 6;
} else if (Arrows == 9143) {
rangehit = 7;
rangehit += c.playerLevel[4] / 5;
} else if (Arrows == 9144) {
rangehit = 7;
rangehit += c.playerLevel[4] / 4.5;
}
int bonus = 0;
bonus -= rangehit / 10;
rangehit += bonus;
if (c.specDamage != 1)
rangehit *= c.specDamage;
if (rangehit == 0)
rangehit++;
if (c.fullVoidRange()) {
rangehit *= 1.10;
}
if (c.fullVoidEliteRange()) {
rangehit *= 1.12;
}
if (c.prayerActive[3])
rangehit *= 1.05;
else if (c.prayerActive[11])
rangehit *= 1.10;
else if (c.prayerActive[19])
rangehit *= 1.15;
return rangehit;
}*/
public boolean properBolts() {
return c.playerEquipment[c.playerArrows] >= 9140 && c.playerEquipment[c.playerArrows] <= 9144
|| c.playerEquipment[c.playerArrows] >= 9240 && c.playerEquipment[c.playerArrows] <= 9245 || c.playerEquipment[c.playerArrows] == 15243;
}
public int correctBowAndArrows() {
//if (usingBolts())
//return -1;
switch(c.playerEquipment[c.playerWeapon]) {
case 843:
case 845:
case 839:
case 841:
return 884;
case 847:
case 849:
return 886;
case 851:
case 853:
return 888;
case 855:
case 857:
return 890;
case 859:
case 861:
return 892;
case 4734:
case 4935:
case 4936:
case 4937:
return 4740;
case 11235:
case 15701: // dark bow
case 15702: // dark bow
case 15703: // dark bow
case 15704: // dark bow
case 14481:
case 14482:
case 20171:
return 11212;
case 15241:
return 15243;
case 9185:
case 18357:
/*return 9140;
return 9144;
return 9240;
return 9241;
return 9242;
return 9243;
return 9244;*/
return 9245;
}
return -1;
}
public int getRangeStartGFX() {
switch(c.rangeItemUsed) {
case 863:
return 220;
case 864:
return 219;
case 865:
return 221;
case 866: // knives
return 223;
case 867:
return 224;
case 868:
return 225;
case 869:
return 222;
case 806:
return 232;
case 807:
return 233;
case 808:
return 234;
case 809: // darts
return 235;
case 810:
return 236;
case 811:
return 237;
case 825:
return 206;
case 826:
return 207;
case 827: // javelin
return 208;
case 828:
return 209;
case 829:
return 210;
case 830:
return 211;
case 800:
return 42;
case 801:
return 43;
case 802:
return 44; // axes
case 803:
return 45;
case 804:
return 46;
case 805:
return 48;
case 882:
return 19;
case 884:
return 18;
case 886:
return 20;
case 888:
return 21;
case 890:
return 22;
case 892:
return 24;
case 11212:
return 26;
case 4212:
case 4214:
case 4215:
case 4216:
case 4217:
case 4218:
case 4219:
case 4220:
case 4221:
case 4222:
case 4223:
return 250;
}
return -1;
}
public void drawback() {
if (c.playerEquipment[c.playerArrows] == 882){
c.gfx0(18);
}
/*else if (playerEquipment[playerWeapon] == 13649){
javerlin(105, 1190);
}
else if (playerEquipment[playerWeapon] == 13650){
thaxe(105, 1195);
}*/
else if (c.playerEquipment[c.playerArrows] == 864){
c.gfx0(219);
}
else if (c.playerEquipment[c.playerArrows] == 863){
c.gfx0(220);
}
else if (c.playerEquipment[c.playerArrows] == 865){
c.gfx0(221);
}
else if (c.playerEquipment[c.playerArrows] == 866){
c.gfx0(223);
}
else if (c.playerEquipment[c.playerArrows] == 867){
c.gfx0(224);
}
else if (c.playerEquipment[c.playerArrows] == 868){
c.gfx0(225);
}
else if (c.playerEquipment[c.playerArrows] == 869){
c.gfx0(222);
}
else if (c.playerEquipment[c.playerArrows] == 884) {
c.gfx0(19);
}
else if (c.playerEquipment[c.playerArrows] == 888) {
c.gfx0(21);
}
else if (c.playerEquipment[c.playerArrows] == 890) {
c.gfx0(22);
}
else if (c.playerEquipment[c.playerArrows] == 11212) {
c.gfx0(26);
}
else if (c.playerEquipment[c.playerArrows] == 892) {
c.gfx0(24);
}
else if (c.playerEquipment[c.playerArrows] == 9244) {
c.gfx0(28);
}
else if (c.playerEquipment[c.playerArrows] == 725) {
c.gfx0(28);
}
else if (c.playerEquipment[c.playerArrows] == 9340) {
c.gfx0(28);
}
}
public int getRangeProjectileGFX() {
if (c.dbowSpec) {
return 1099;
}
if(c.bowSpecShot > 0) {
switch(c.rangeItemUsed) {
default:
return 249;
}
}
if (c.playerEquipment[c.playerWeapon] == 9185 || c.playerEquipment[c.playerWeapon] == 18357)
return 27;
if (c.playerEquipment[c.playerWeapon] == 15241)
return 2143;
switch(c.rangeItemUsed) {
case 13883:
return 1839;
case 13882:
case 13881:
case 13880:
case 13879:
return 1837;
case 863:
return 213;
case 864:
return 212;
case 865:
return 214;
case 866: // knives
return 216;
case 867:
return 217;
case 868:
return 218;
case 869:
return 215;
case 806:
return 226;
case 807:
return 227;
case 808:
return 228;
case 809: // darts
return 229;
case 810:
return 230;
case 811:
return 231;
case 825:
return 200;
case 826:
return 201;
case 827: // javelin
return 202;
case 828:
return 203;
case 829:
return 204;
case 830:
return 205;
case 6522: // Toktz-xil-ul
return 442;
case 800:
return 36;
case 801:
return 35;
case 802:
return 37; // axes
case 803:
return 38;
case 804:
return 39;
case 805:
return 40;
case 882:
return 10;
case 884:
return 9;
case 886:
return 11;
case 888:
return 12;
case 890:
return 13;
case 892:
return 15;
case 11212:
return 17;
case 4740: // bolt rack
return 27;
case 4212:
case 4214:
case 4215:
case 4216:
case 4217:
case 4218:
case 4219:
case 4220:
case 4221:
case 4222:
case 4223:
case 20171:
case 18357:
case 15241:
return 249;
}
return -1;
}
public int getProjectileSpeed() {
if (c.dbowSpec)
return 100;
return 70;
}
public int getProjectileShowDelay() {
switch(c.playerEquipment[c.playerWeapon]) {
case 863:
case 864:
case 865:
case 866: // knives
case 867:
case 868:
case 869:
case 806:
case 807:
case 808:
case 809: // darts
case 810:
case 811:
case 825:
case 826:
case 827: // javelin
case 828:
case 829:
case 830:
case 800:
case 801:
case 802:
case 803: // axes
case 804:
case 805:
case 4734:
case 9185:
case 18357:
case 4935:
case 4936:
case 4937:
case 20172:
case 15241:
return 15;
default:
return 5;
}
}
/**
* Mage
**/
public static int finalMagicDamage(Client c) {
double damage = c.MAGIC_SPELLS[c.oldSpellId][6];
double damageMultiplier = 1;
if (c.playerLevel[c.playerMagic] > c.getLevelForXP(c.playerXP[6])
&& c.getLevelForXP(c.playerXP[6]) >= 95)
damageMultiplier += .03 * (c.playerLevel[c.playerMagic] - 99);
else
damageMultiplier = 1;
switch (c.playerEquipment[c.playerWeapon]) {
case 772:
damageMultiplier += .13;
break;
case 19362:
damageMultiplier += .15;
break;
case 18371: // Gravite Staff
damageMultiplier += .05;
break;
case 4675: // Ancient Staff
case 4710: // Ahrim's Staff
case 4862: // Ahrim's Staff
case 4864: // Ahrim's Staff
case 4865: // Ahrim's Staff
case 6914: // Master Wand
case 8841: // Void Knight Mace
case 13867: // Zuriel's Staff
case 13869: // Zuriel's Staff (Deg)
damageMultiplier += .10;
break;
case 15486: // Staff of Light
damageMultiplier += .15;
break;
case 18355: // Chaotic Staff
damageMultiplier += .20;
break;
}
switch (c.playerEquipment[c.playerAmulet]) {
case 18333: // Arcane Pulse
damageMultiplier += .05;
break;
case 18334:// Arcane Blast
damageMultiplier += .10;
break;
case 18335:// Arcane Stream
damageMultiplier += .15;
break;
case 20064:
damageMultiplier += 5000;
break;
}
switch (c.playerEquipment[c.playerHat]) {
case 20159: // Virtus Mask
damageMultiplier += .03;
break;
}
switch (c.playerEquipment[c.playerChest]) {
case 20159: // Virtus Body
damageMultiplier += .06;
break;
}
switch (c.playerEquipment[c.playerLegs]) {
case 20159: // Virtus Legs
damageMultiplier += .04;
break;
}
damage *= damageMultiplier;
return (int) damage;
}
/**
* Magic
**/
public int mageAtk()
{
int attackLevel = c.playerLevel[6];
/*if (c.playerEquipment[c.playerWeapon] == 15486)
attackLevel += 0.15;*/
if (c.fullVoidMage() || c.fullVoidEliteMage())
attackLevel += c.getLevelForXP(c.playerXP[6]) * 0.2;
if (c.prayerActive[4])
attackLevel *= 1.05;
else if (c.prayerActive[12])
attackLevel *= 1.10;
else if (c.prayerActive[20])
attackLevel *= 1.15;
return (int) (attackLevel + (c.playerBonus[3] * 2));
}
public int mageDef()
{
int defenceLevel = c.playerLevel[1]/2 + c.playerLevel[6]/2;
if (c.prayerActive[0]) {
defenceLevel += c.getLevelForXP(c.playerXP[c.playerDefence]) * 0.05;
} else if (c.prayerActive[3]) {
defenceLevel += c.getLevelForXP(c.playerXP[c.playerDefence]) * 0.1;
} else if (c.prayerActive[9]) {
defenceLevel += c.getLevelForXP(c.playerXP[c.playerDefence]) * 0.15;
} else if (c.prayerActive[18]) {
defenceLevel += c.getLevelForXP(c.playerXP[c.playerDefence]) * 0.2;
} else if (c.prayerActive[19]) {
defenceLevel += c.getLevelForXP(c.playerXP[c.playerDefence]) * 0.25;
}
return (int) (defenceLevel + c.playerBonus[8] + (c.playerBonus[8] / 3));
}
public boolean wearingStaff(int runeId) {
int wep = c.playerEquipment[c.playerWeapon];
switch (runeId) {
case 554:
if (wep == 1387)
return true;
break;
case 555:
if (wep == 1383)
return true;
break;
case 556:
if (wep == 1381)
return true;
break;
case 557:
if (wep == 1385)
return true;
break;
}
return false;
}
public boolean checkMagicReqs(int spell) {
if(c.usingMagic && Config.RUNES_REQUIRED) { // check for runes
if((!c.getItems().playerHasItem(c.MAGIC_SPELLS[spell][8], c.MAGIC_SPELLS[spell][9]) && !wearingStaff(c.MAGIC_SPELLS[spell][8])) ||
(!c.getItems().playerHasItem(c.MAGIC_SPELLS[spell][10], c.MAGIC_SPELLS[spell][11]) && !wearingStaff(c.MAGIC_SPELLS[spell][10])) ||
(!c.getItems().playerHasItem(c.MAGIC_SPELLS[spell][12], c.MAGIC_SPELLS[spell][13]) && !wearingStaff(c.MAGIC_SPELLS[spell][12])) ||
(!c.getItems().playerHasItem(c.MAGIC_SPELLS[spell][14], c.MAGIC_SPELLS[spell][15]) && !wearingStaff(c.MAGIC_SPELLS[spell][14]))){
c.sendMessage("You don't have the required runes to cast this spell.");
return false;
}
}
if(c.usingMagic && c.playerIndex > 0) {
if(Server.playerHandler.players[c.playerIndex] != null) {
for(int r = 0; r < c.REDUCE_SPELLS.length; r++){ // reducing spells, confuse etc
if(Server.playerHandler.players[c.playerIndex].REDUCE_SPELLS[r] == c.MAGIC_SPELLS[spell][0]) {
c.reduceSpellId = r;
if((System.currentTimeMillis() - Server.playerHandler.players[c.playerIndex].reduceSpellDelay[c.reduceSpellId]) > Server.playerHandler.players[c.playerIndex].REDUCE_SPELL_TIME[c.reduceSpellId]) {
Server.playerHandler.players[c.playerIndex].canUseReducingSpell[c.reduceSpellId] = true;
} else {
Server.playerHandler.players[c.playerIndex].canUseReducingSpell[c.reduceSpellId] = false;
}
break;
}
}
if(!Server.playerHandler.players[c.playerIndex].canUseReducingSpell[c.reduceSpellId]) {
c.sendMessage("That player is currently immune to this spell.");
c.usingMagic = false;
c.stopMovement();
resetPlayerAttack();
return false;
}
}
}
int staffRequired = getStaffNeeded();
if(c.usingMagic && staffRequired > 0 && Config.RUNES_REQUIRED) { // staff required
if(c.playerEquipment[c.playerWeapon] != staffRequired) {
c.sendMessage("You need a "+c.getItems().getItemName(staffRequired).toLowerCase()+" to cast this spell.");
return false;
}
}
if(c.usingMagic && Config.MAGIC_LEVEL_REQUIRED) { // check magic level
if(c.playerLevel[6] < c.MAGIC_SPELLS[spell][1]) {
c.sendMessage("You need to have a magic level of " +c.MAGIC_SPELLS[spell][1]+" to cast this spell.");
return false;
}
}
if(c.usingMagic && Config.RUNES_REQUIRED) {
if(c.MAGIC_SPELLS[spell][8] > 0) { // deleting runes
if (!wearingStaff(c.MAGIC_SPELLS[spell][8]))
c.getItems().deleteItem(c.MAGIC_SPELLS[spell][8], c.getItems().getItemSlot(c.MAGIC_SPELLS[spell][8]), c.MAGIC_SPELLS[spell][9]);
}
if(c.MAGIC_SPELLS[spell][10] > 0) {
if (!wearingStaff(c.MAGIC_SPELLS[spell][10]))
c.getItems().deleteItem(c.MAGIC_SPELLS[spell][10], c.getItems().getItemSlot(c.MAGIC_SPELLS[spell][10]), c.MAGIC_SPELLS[spell][11]);
}
if(c.MAGIC_SPELLS[spell][12] > 0) {
if (!wearingStaff(c.MAGIC_SPELLS[spell][12]))
c.getItems().deleteItem(c.MAGIC_SPELLS[spell][12], c.getItems().getItemSlot(c.MAGIC_SPELLS[spell][12]), c.MAGIC_SPELLS[spell][13]);
}
if(c.MAGIC_SPELLS[spell][14] > 0) {
if (!wearingStaff(c.MAGIC_SPELLS[spell][14]))
c.getItems().deleteItem(c.MAGIC_SPELLS[spell][14], c.getItems().getItemSlot(c.MAGIC_SPELLS[spell][14]), c.MAGIC_SPELLS[spell][15]);
}
}
return true;
}
public int getFreezeTime() {
switch(c.MAGIC_SPELLS[c.oldSpellId][0]) {
case 1572:
case 12861: // ice rush
return 10;
case 1582:
case 12881: // ice burst
return 17;
case 1592:
case 12871: // ice blitz
return 25;
case 12891: // ice barrage
return 33;
default:
return 0;
}
}
public void freezePlayer(int i) {
}
public int getStartHeight() {
switch(c.MAGIC_SPELLS[c.spellId][0]) {
case 1562: // stun
return 25;
case 12939:// smoke rush
return 35;
case 12987: // shadow rush
return 38;
case 12861: // ice rush
return 15;
case 12951: // smoke blitz
return 38;
case 12999: // shadow blitz
return 25;
case 12911: // blood blitz
return 25;
default:
return 43;
}
}
public int getEndHeight() {
switch(c.MAGIC_SPELLS[c.spellId][0]) {
case 1562: // stun
return 10;
case 12939: // smoke rush
return 20;
case 12987: // shadow rush
return 28;
case 12861: // ice rush
return 10;
case 12951: // smoke blitz
return 28;
case 12999: // shadow blitz
return 15;
case 12911: // blood blitz
return 10;
default:
return 31;
}
}
public int getStartDelay() {
if(c.playerEquipment[c.playerWeapon] == 15241)
return 30;
switch(c.MAGIC_SPELLS[c.spellId][0]) {
case 1539:
return 60;
default:
return 53;
}
}
public int getStaffNeeded() {
switch(c.MAGIC_SPELLS[c.spellId][0]) {
case 1539:
return 1409;
case 12037:
return 4170;
case 1190:
return 2415;
case 1191:
return 2416;
case 1192:
return 2417;
default:
return 0;
}
}
public boolean godSpells() {
switch(c.MAGIC_SPELLS[c.spellId][0]) {
case 1190:
return true;
case 1191:
return true;
case 1192:
return true;
default:
return false;
}
}
public int getEndGfxHeight() {
switch(c.MAGIC_SPELLS[c.oldSpellId][0]) {
case 12987:
case 12901:
case 12861:
case 12445:
case 1192:
case 13011:
case 12919:
case 12881:
case 12999:
case 12911:
case 12871:
case 13023:
case 12929:
case 12891:
return 0;
default:
return 100;
}
}
public int getStartGfxHeight() {
switch(c.MAGIC_SPELLS[c.spellId][0]) {
case 12871:
case 12891:
return 0;
default:
return 100;
}
}
/*public void handleDfs() {
if (System.currentTimeMillis() - c.dfsDelay > 30000) {
if(c.dfsCount == 0) {
c.sendMessage("Your shield has no charges left.");
return;
}
if (c.playerIndex > 0 && Server.playerHandler.players[c.playerIndex] != null) {
int damage = Misc.random(15) + 5;
c.startAnimation(2836);
c.gfx0(600);
Server.playerHandler.players[c.playerIndex].playerLevel[3] -= damage;
Server.playerHandler.players[c.playerIndex].hitDiff2 = damage;
Server.playerHandler.players[c.playerIndex].hitUpdateRequired2 = true;
Server.playerHandler.players[c.playerIndex].updateRequired = true;
c.dfsDelay = System.currentTimeMillis();
} else {
c.sendMessage("I should be in combat before using this.");
}
} else {
c.sendMessage("My shield hasn't finished recharging yet.");
}
}*/
public void handleDfs() {
final Player opp = Server.playerHandler.players[c.playerIndex];
if (opp == null)
return;
if (System.currentTimeMillis() - c.dfsDelay > 30000) {
if(c.dfsCount == 0) {
c.sendMessage("Your shield has no charges left.");
return;
}
if (c.playerIndex > 0 && Server.playerHandler.players[c.playerIndex] != null) {
c.projectileStage = 2;
final int pX = c.getX();
final int pY = c.getY();
final int oX = opp.getX();
final int oY = opp.getY();
final int offX = (pY - oY)* -1;
final int offY = (pX - oX)* -1;
c.startAnimation(6696);
c.gfx0(1165);
c.dfsCount -= 1;
EventManager.getSingleton().addEvent(new Event() {
int damage = (int)Math.round(Math.random() * 25);
public void execute(EventContainer b) {
if (opp != null) {
opp.gfx100(1167);
if (opp.playerLevel[3] - damage < 0) {
damage = opp.playerLevel[3];
}
opp.playerLevel[3] -= damage;
opp.hitDiff2 = damage;
opp.hitUpdateRequired2 = true;
opp.updateRequired = true;
}
b.stop();
}
}, 1700);
EventManager.getSingleton().addEvent(new Event() {
public void execute(EventContainer b) {
if (c.playerIndex != 0)
c.getPA().createPlayersProjectile2(pX, pY, offX, offY, 50, 50, 1166, 30, 30, - c.playerIndex - 1, 30, 5);
b.stop();
}
}, 1000);
c.dfsDelay = System.currentTimeMillis();
}
}
}
/*public void handleDfsNPC() {
if (System.currentTimeMillis() - c.dfsDelay > 30000) {
if(c.dfsCount == 0) {
c.sendMessage("Your shield has no charges left.");
return;
}
if (c.npcIndex > 0 && Server.npcHandler.npcs[c.npcIndex] != null) {
int damage = Misc.random(25) + 5;
c.dfsCount -= 1;
c.startAnimation(2836);
c.gfx0(600);
Server.npcHandler.npcs[c.npcIndex].HP -= damage;
Server.npcHandler.npcs[c.npcIndex].hitDiff2 = damage;
Server.npcHandler.npcs[c.npcIndex].hitUpdateRequired2 = true;
Server.npcHandler.npcs[c.npcIndex].updateRequired = true;
c.dfsDelay = System.currentTimeMillis();
} else {
c.sendMessage("I should be in combat before using this.");
}
} else {
c.sendMessage("My shield hasn't finished recharging yet.");
}
}*/
public void handleDfsNPC() {
try {
if(c.npcIndex > 0) {
if(c.dfsCount == 0) {
c.sendMessage("Your shield has no charges left.");
return;
}
if(Server.npcHandler.npcs[c.npcIndex] != null) {
c.projectileStage = 2;
final int pX = c.getX();
final int pY = c.getY();
final int nX = Server.npcHandler.npcs[c.npcIndex].getX();
final int nY = Server.npcHandler.npcs[c.npcIndex].getY();
final int offX = (pY - nY)* -1;
final int offY = (pX - nX)* -1;
if (System.currentTimeMillis() - c.dfsDelay > 30000) {
if (c.npcIndex > 0 && Server.npcHandler.npcs[c.npcIndex] != null) {
final int damage = Misc.random(15) + 10;
c.startAnimation(6696);
c.gfx0(1165);
c.dfsCount -= 1;
Server.npcHandler.npcs[c.npcIndex].hitUpdateRequired2 = true;
Server.npcHandler.npcs[c.npcIndex].updateRequired = true;
Server.npcHandler.npcs[c.npcIndex].hitDiff2 = damage;
Server.npcHandler.npcs[c.npcIndex].HP -= damage;
Server.npcHandler.npcs[c.npcIndex].gfx100(1167);
EventManager.getSingleton().addEvent(new Event() {
public void execute(EventContainer b) {
c.getPA().createPlayersProjectile(pX, pY, offX, offY, 50, 50, 1166, 31, 35, - c.npcIndex - 1, 30);
b.stop();
}
}, 1000);
if(Server.npcHandler.npcs[c.npcIndex].isDead == true) {
c.sendMessage("This NPC is already dead!");
return;
}
c.dfsDelay = System.currentTimeMillis();
} else {
c.sendMessage("I should be in combat before using this.");
}
} else {
c.sendMessage("My shield hasn't finished recharging yet.");
} }
}
}
catch (Exception e)
{
}
}
public void handleZerker() {
if(c.isDonator == 1){
if (System.currentTimeMillis() - c.dfsDelay > 60000) {
if (c.playerIndex > 0 && Server.playerHandler.players[c.playerIndex] != null) {
int damage = Misc.random(10) + 7;
c.startAnimation(369);
c.gfx0(369);
Server.playerHandler.players[c.playerIndex].playerLevel[3] -= damage;
Server.playerHandler.players[c.playerIndex].hitDiff2 = damage;
c.forcedText = "Feel the power of the Berserker Ring!";
Server.playerHandler.players[c.playerIndex].hitUpdateRequired2 = true;
Server.playerHandler.players[c.playerIndex].updateRequired = true;
c.dfsDelay = System.currentTimeMillis();
} else {
c.sendMessage("I should be in combat before using this.");
}
} else {
c.sendMessage("My ring hasn't finished recharging yet (60 Seconds)");
}if (c.isDonator == 0)
c.sendMessage("Only Donators can use the ring's Special attack");
}
}
public void handleWarrior() {
if(c.isDonator == 1){
if (System.currentTimeMillis() - c.dfsDelay > 60000) {
if (c.playerIndex > 0 && Server.playerHandler.players[c.playerIndex] != null) {
int damage = Misc.random(10) + 7;
c.startAnimation(369);
c.gfx0(369);
Server.playerHandler.players[c.playerIndex].playerLevel[3] -= damage;
c.forcedText = "Feel the power of the Warrior Ring!";
Server.playerHandler.players[c.playerIndex].hitDiff2 = damage;
Server.playerHandler.players[c.playerIndex].hitUpdateRequired2 = true;
Server.playerHandler.players[c.playerIndex].updateRequired = true;
c.dfsDelay = System.currentTimeMillis();
} else {
c.sendMessage("I should be in combat before using this.");
}
} else {
c.sendMessage("My ring hasn't finished recharging yet (60 Seconds)");
}if (c.isDonator == 0)
c.sendMessage("Only Donators can use the ring's Special attack");
}
}
public void handleSeers() {
/*
c.castingMagic = true;
if(c.isDonator == 1){
if (System.currentTimeMillis() - c.dfsDelay > 60000) {
if (c.playerIndex > 0 && Server.playerHandler.players[c.playerIndex] != null) {
int damage = Misc.random(10) + 7;
c.startAnimation(1979);
Server.playerHandler.players[c.playerIndex].gfx0(369);
c.gfx0(368);
Server.playerHandler.players[c.playerIndex].freezeTimer = 15;
Server.playerHandler.players[c.playerIndex].resetWalkingQueue();
Server.playerHandler.players[c.playerIndex].frozenBy = c.playerId;
Server.playerHandler.players[c.playerIndex].playerLevel[3] -= damage;
c.forcedText = ("Feel the power of the Seers Ring!");
Server.playerHandler.players[c.playerIndex].hitDiff2 = damage;
Server.playerHandler.players[c.playerIndex].hitUpdateRequired2 = true;
Server.playerHandler.players[c.playerIndex].updateRequired = true;
c.dfsDelay = System.currentTimeMillis();
} else {
c.sendMessage("I should be in combat before using this.");
}
} else {
c.sendMessage("My ring hasn't finished recharging yet (60 Seconds)");
}if (c.isDonator == 0)
*/
}
public void Zammybook() {
c.startAnimation(1670);
EventManager.getSingleton().addEvent(new Event() {
public void execute(EventContainer b) {
c.forcedChatUpdateRequired = true;
c.updateRequired = true;
c.forcedText = ("Two great warriors, joined by hand,");
b.stop();
}
}, 400);
EventManager.getSingleton().addEvent(new Event() {
public void execute(EventContainer b) {
c.forcedText = ("to spread destruction across the land.");
c.forcedChatUpdateRequired = true;
c.updateRequired = true;
b.stop();
}
}, 1200);
EventManager.getSingleton().addEvent(new Event() {
public void execute(EventContainer b) {
c.forcedText = ("In Zamorak's name, now two are one.");
c.forcedChatUpdateRequired = true;
c.updateRequired = true;
b.stop();
}
}, 1900);
}
public void handleArcher() {
if(c.isDonator == 1){
if (System.currentTimeMillis() - c.dfsDelay > 60000) {
if (c.playerIndex > 0 && Server.playerHandler.players[c.playerIndex] != null) {
int damage = Misc.random(10) + 7;
c.startAnimation(369);
c.gfx0(369);
Server.playerHandler.players[c.playerIndex].playerLevel[3] -= damage;
Server.playerHandler.players[c.playerIndex].hitDiff2 = damage;
c.forcedText = "Feel the power of the Archer Ring!";
Server.playerHandler.players[c.playerIndex].hitUpdateRequired2 = true;
Server.playerHandler.players[c.playerIndex].updateRequired = true;
c.dfsDelay = System.currentTimeMillis();
} else {
c.sendMessage("I should be in combat before using this.");
}
} else {
c.sendMessage("My ring hasn't finished recharging yet (60 Seconds)");
}if (c.isDonator == 0)
c.sendMessage("Only Donators can use the ring's Special attack");
}
}
public void applyRecoil(int damage, int i) {
if (damage > 0 && Server.playerHandler.players[i].playerEquipment[c.playerRing] == 2550) {
int recDamage = damage/10 + 1;
if (!c.getHitUpdateRequired()) {
c.setHitDiff(recDamage);
removeRecoil(c);
c.recoilHits = recDamage;
c.setHitUpdateRequired(true);
} else if (!c.getHitUpdateRequired2()) {
c.setHitDiff2(recDamage);
c.setHitUpdateRequired2(true);
}
c.dealDamage(recDamage);
c.updateRequired = true;
}
}
public void Deflect(int damage, int i) {
if (damage > 0 && Server.playerHandler.players[i].curseActive[7] || Server.playerHandler.players[i].curseActive[8] || Server.playerHandler.players[i].curseActive[9]) {
int recDamage = damage/6;
if (!c.getHitUpdateRequired()) {
c.setHitDiff(recDamage);
c.recoilHits = recDamage;
c.setHitUpdateRequired(true);
} else if (!c.getHitUpdateRequired2()) {
c.setHitDiff2(recDamage);
c.setHitUpdateRequired2(true);
}
c.dealDamage(recDamage);
c.updateRequired = true;
}
}
public void applyRecoilNPC(int damage, int i) {
if (damage > 0 && c.playerEquipment[c.playerRing] == 2550) {
int recDamage = damage/10 + 1;
Server.npcHandler.npcs[c.npcIndex].HP -= recDamage;
Server.npcHandler.npcs[c.npcIndex].hitDiff2 = recDamage;
Server.npcHandler.npcs[c.npcIndex].hitUpdateRequired2 = true;
Server.npcHandler.npcs[c.npcIndex].updateRequired = true;
c.updateRequired = true;
removeRecoil(c);
c.recoilHits = damage;
}
}
public void removeRecoil(Client c) {
if(c.recoilHits >= 50) {
c.getItems().removeItem(2550, c.playerRing);
c.getItems().deleteItem(2550, c.getItems().getItemSlot(2550), 1);
c.sendMessage("Your ring of recoil shaters!");
c.recoilHits = 0;
} else {
c.recoilHits++;
}
}
public static void addCharge(Client c) {
if(c.playerEquipment[c.playerShield] != 11283) {
return;
}
if(c.dfsCount >= 40) {
c.dfsCount = 40;
c.sendMessage("Your shield has already 40 charges.");
return;
}
c.dfsCount++;
c.startAnimation(6695);
c.gfx0(1164);
c.sendMessage("You absord the fire breath and charge your Dragonfire shield.");
}
public int getBonusAttack(int i) {
switch (Server.npcHandler.npcs[i].npcType) {
case 2883:
return Misc.random(50) + 30;
case 2026:
case 2027:
case 2029:
case 2030:
return Misc.random(50) + 30;
}
return 0;
}
public void handleGmaulPlayer() {
if (c.playerIndex > 0) {
Client o = (Client)Server.playerHandler.players[c.playerIndex];
if (c.goodDistance(c.getX(), c.getY(), o.getX(), o.getY(), c.getCombat().getRequiredDistance())) {
if (c.getCombat().checkReqs()) {
if (c.getCombat().checkSpecAmount(4153)) {
boolean hit = Misc.random(c.getCombat().calculateMeleeAttack()) > Misc.random(o.getCombat().calculateMeleeDefence());
int damage = 0;
if (hit)
damage = Misc.random(c.getCombat().calculateMeleeMaxHit());
if (o.prayerActive[18] && System.currentTimeMillis() - o.protMeleeDelay > 1500)
damage *= .6;
if(o.playerLevel[3] - damage <= 0) {
damage = o.playerLevel[3];
}
if(o.playerLevel[3] > 0) {
o.handleHitMask(damage);
c.startAnimation(1667);
o.gfx100(337);
o.dealDamage(damage);
}
}
}
}
} else if(c.npcIndex > 0) {
int x = Server.npcHandler.npcs[c.npcIndex].absX;
int y = Server.npcHandler.npcs[c.npcIndex].absY;
if (c.goodDistance(c.getX(), c.getY(), x, y, 2)) {
if (c.getCombat().checkReqs()) {
if (c.getCombat().checkSpecAmount(4153)) {
int damage = Misc.random(c.getCombat().calculateMeleeMaxHit());
if(Server.npcHandler.npcs[c.npcIndex].HP - damage < 0) {
damage = Server.npcHandler.npcs[c.npcIndex].HP;
}
if(Server.npcHandler.npcs[c.npcIndex].HP > 0) {
Server.npcHandler.npcs[c.npcIndex].HP -= damage;
Server.npcHandler.npcs[c.npcIndex].handleHitMask(damage);
c.startAnimation(1667);
c.gfx100(337);
}
}
}
}
}
}
public boolean armaNpc(int i) {
switch (Server.npcHandler.npcs[i].npcType) {
case 6222:
case 6223:
case 6229:
case 6225:
case 6230:
case 6227:
case 6232:
case 6239:
case 6233:
case 6231:
return true;
}
return false;
}
}
Bump~ Really need help please :c