Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- 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.model.players.Player;
- import server.event.EventManager;
- import server.model.npcs.NPC;
- import server.model.npcs.NPCHandler;
- import server.event.EventContainer;
- import server.event.Event;
- import java.util.Random;
- public class CombatAssistant{
- private Client c;
- public CombatAssistant(Client Client) {
- this.c = Client;
- }
- private final Random random = new Random();
- public int[][] slayerReqs = {{1648,5},{1612,15},{1643,45},{1618,50},{1624,65},{1610,75},{1613,80},{1615,85},{2783,90},{3590,95},{3592,85},{3591,85},{5666,96},{1472,90}};
- 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;
- }
- public int getHitType(boolean range, boolean magic) {
- if(range)
- return 2;
- if(magic)
- return 3;
- return 1;
- }
- /*
- *Multi Barrage
- */
- public void multiSpellOnNPC(int originalNpc) {
- //c.PlayerAttType = 2;
- if (!multis() || !c.inMulti())
- return;
- NPC o2 = (NPC) NPCHandler.npcs[originalNpc];
- int origX = o2.absX;
- int origY = o2.absY;
- for (int indx = 0; indx < NPCHandler.maxNPCs; indx++) {
- if (NPCHandler.npcs[indx] != null) {
- NPC o = (NPC) NPCHandler.npcs[indx];
- if (!(o.absX >= origX - 2 && o.absX <= origX + 2
- && o.absY >= origY - 2 && o.absY <= origY + 2)
- || !o.inMulti())
- continue;
- if (!checkNpcReq(indx) || indx == originalNpc)
- continue;
- int bonusAttack = getBonusAttack(indx);
- if (Misc.random(NPCHandler.npcs[indx].defence) > 10
- + Misc.random(mageAtk()) + bonusAttack) {
- if (getEndGfxHeight() == 100) { // end GFX
- o.gfx100(c.MAGIC_SPELLS[c.oldSpellId][5]);
- } else {
- o.gfx0(c.MAGIC_SPELLS[c.oldSpellId][5]);
- }
- int damage = Misc.random(finalMagicDamage(c));
- 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);
- spellEffects(damage, indx);
- setColorMasks(damage, finalMagicDamage(c), 1);
- if (damage > -1) {
- NPCHandler.npcs[indx].hitDiff = damage;
- NPCHandler.npcs[indx].HP -= damage;
- NPCHandler.npcs[indx].hitUpdateRequired = true;
- c.totalDamageDealt += damage;
- }
- } else {
- int damage = 0;
- o.gfx100(85);
- NPCHandler.npcs[indx].hitDiff = damage;
- NPCHandler.npcs[indx].hitUpdateRequired = true;
- c.totalDamageDealt += damage;
- }
- }
- }
- }
- public void multiSpellOnPlayer(int originalPlayer) {
- if (!multis() || !c.inMulti())
- return;
- //c.PlayerAttType = 2;
- Client o2 = (Client) PlayerHandler.players[originalPlayer];
- int origX = o2.absX;
- int origY = o2.absY;
- for (int indx = 0; indx < Config.MAX_PLAYERS; indx++) {
- if (PlayerHandler.players[indx] != null) {
- Client o = (Client) PlayerHandler.players[indx];
- if (!(o.absX >= origX - 2 && o.absX <= origX + 2
- && o.absY >= origY - 2 && o.absY <= origY + 2)
- || !o.inMulti())
- continue;
- if (!checkPlayerReq(indx) || indx == originalPlayer
- || indx == c.playerId)
- continue;
- if (Misc.random(o.getCombat().mageDef()) > Misc
- .random(mageAtk())) {
- if (getEndGfxHeight() == 100) { // end GFX
- o.gfx100(c.MAGIC_SPELLS[c.oldSpellId][5]);
- } else {
- o.gfx0(c.MAGIC_SPELLS[c.oldSpellId][5]);
- }
- int damage = Misc.random(finalMagicDamage(c));
- if(damage > 20) { // Soak Mage
- o.soaked = (int) (damage * getBonus(o, ABSORB_MAGIC_BONUS));
- damage -= o.soaked;
- }
- 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);
- spellEffects(damage, indx);
- hitPlayer(indx, damage);
- } else {
- o.gfx100(85);
- hitPlayer(indx, 0);
- }
- }
- }
- }
- public void spellEffects(int damage, int indx) {
- switch (c.MAGIC_SPELLS[c.oldSpellId][0]) {
- case 12901:
- case 12919:
- 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;
- }
- int freezeDelay = getFreezeTime();
- if (c.playerIndex > 0) {
- if(freezeDelay > 0 && PlayerHandler.players[indx].freezeTimer == 0)
- PlayerHandler.players[indx].freezeTimer = freezeDelay;
- } else if (c.npcIndex > 0) {
- if(freezeDelay > 0 && NPCHandler.npcs[indx].freezeTimer == 0)
- NPCHandler.npcs[indx].freezeTimer = freezeDelay;
- }
- }
- public void hitPlayer(int damage, int i) {
- Client o = (Client) PlayerHandler.players[i];
- if(o == null)
- return;
- o.setHitDiff(damage);
- o.setHitUpdateRequired(true);
- o.dealDamage(damage);
- o.updateRequired = true;
- o.underAttackBy = c.playerId;
- o.logoutDelay = System.currentTimeMillis();
- o.singleCombatDelay = System.currentTimeMillis();
- }
- public boolean checkNpcReq(int i) {
- if (NPCHandler.npcs[i].isDead || NPCHandler.npcs[i].MaxHP <= 0) {
- c.usingMagic = false;
- c.faceUpdate(0);
- c.npcIndex = 0;
- return false;
- }
- if(c.respawnTimer > 0) {
- c.npcIndex = 0;
- return false;
- }
- if (NPCHandler.npcs[i].underAttackBy > 0 && NPCHandler.npcs[i].underAttackBy != c.playerId && !NPCHandler.npcs[i].inMulti()) {
- c.npcIndex = 0;
- c.sendMessage("This monster is already in combat.");
- return false;
- }
- if ((c.underAttackBy > 0 || c.underAttackBy2 > 0) && c.underAttackBy2 != i && !c.inMulti()) {
- resetPlayerAttack();
- c.sendMessage("I am already under attack.");
- return false;
- }
- if (!goodSlayer(i)) {
- resetPlayerAttack();
- return false;
- }
- if (NPCHandler.npcs[i].npcType == 6258) {
- if (92 > c.getLevelForXP(c.playerXP[c.playerPrayer])) {
- c.sendMessage("You need a prayer level of 92 to harm this NPC.");
- resetPlayerAttack();
- return false;
- }
- }
- if (NPCHandler.npcs[i].spawnedBy != c.playerId && NPCHandler.npcs[i].spawnedBy > 0) {
- resetPlayerAttack();
- c.sendMessage("This monster was not spawned for you.");
- return false;
- }
- return true;
- }
- public boolean checkPlayerReq(int i) {
- if (PlayerHandler.players[i].isDead) {
- resetPlayerAttack();
- return false;
- }
- if(c.respawnTimer > 0 || PlayerHandler.players[i].respawnTimer > 0) {
- resetPlayerAttack();
- return false;
- }
- /*if (c.teleTimer > 0 || Server.playerHandler.players[i].teleTimer > 0) {
- resetPlayerAttack();
- return;
- }*/
- if(!c.getCombat().checkReqs()) {
- return false;
- }
- if(c.playerRights == 2){
- c.sendMessage("Staff are not allowed to pk");
- c.sendMessage("Your account has been blacklisted for an owner to see");
- return false;
- }
- if (c.getPA().getWearingAmount() < 4 && c.duelStatus < 1) {
- c.sendMessage("You must be wearing at least 4 items to attack someone.");
- resetPlayerAttack();
- return false;
- }
- boolean sameSpot = c.absX == PlayerHandler.players[i].getX() && c.absY == PlayerHandler.players[i].getY();
- if(!c.goodDistance(PlayerHandler.players[i].getX(), PlayerHandler.players[i].getY(), c.getX(), c.getY(), 25) && !sameSpot) {
- resetPlayerAttack();
- return false;
- }
- if(PlayerHandler.players[i].respawnTimer > 0) {
- PlayerHandler.players[i].playerIndex = 0;
- resetPlayerAttack();
- return false;
- }
- if (PlayerHandler.players[i].heightLevel != c.heightLevel) {
- resetPlayerAttack();
- return false;
- }
- return true;
- }
- /**
- * Attack Npcs
- */
- public void attackNpc(int i) {
- 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.playerEquipment[c.playerWeapon] == 15241) {
- c.gfx0(2138);
- }
- if(c.playerEquipment[c.playerWeapon] == 15241 && 15243 != c.playerEquipment[c.playerArrows]){
- c.sendMessage("You can't use Hand Cannon without the shots! (You dumb?)");
- return;
- }
- if (Server.npcHandler.npcs[i].summon == true) {
- if(Server.npcHandler.npcs[i].index != c.playerId || c.wildLevel == 0) {
- resetPlayerAttack();
- c.sendMessage("You cannot attack this monster.");
- //c.sendMessage("This is "+Server.npcHandler.npcz[i]+" NPC.");
- 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(c.respawnTimer > 0) {
- c.npcIndex = 0;
- 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].summoner == true) {
- c.sendMessage("You cannot attack your own npc idiot.");
- resetPlayerAttack();
- return;
- }
- if ((c.underAttackBy > 0 || c.underAttackBy2 > 0) && c.underAttackBy2 != i && !c.inMulti()) {
- resetPlayerAttack();
- c.sendMessage("I am already under attack.");
- 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 (!goodSlayer(i)) {
- resetPlayerAttack();
- 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;
- boolean usingCross = c.playerEquipment[c.playerWeapon] == 9185 || c.playerEquipment[c.playerWeapon] == 18357;
- c.bonusAttack = 0;
- c.rangeItemUsed = 0;
- c.projectileStage = 0;
- //c.SaveGame();
- if (c.autocasting) {
- c.spellId = c.autocastId;
- c.usingMagic = true;
- }
- 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;
- }
- }
- }
- c.typeOfDamageMask = getHitType(usingBow || usingOtherRangeWeapons || usingCross, c.usingMagic);
- c.typeOfDamageMask2 = getHitType(usingBow || usingOtherRangeWeapons || usingCross, c.usingMagic);
- if (armaNpc(i) && !usingCross && !usingBow && !c.usingMagic && !usingCrystalBow() && !usingOtherRangeWeapons) {
- resetPlayerAttack();
- c.sendMessage("You can only Range/Mage Armadyl creeps!");
- 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)) {
- 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(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.playerEquipment[c.playerWeapon] == 15241) {
- 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 || c.playerEquipment[c.playerWeapon] == 15241) { // 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 = 1;
- 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) {
- 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 == 14481 || c.lastWeaponUsed == 15704 || c.lastWeaponUsed == 11235 || c.lastWeaponUsed == 15702 || c.lastWeaponUsed == 15701 || c.lastWeaponUsed == 15703 || c.lastWeaponUsed == 14482 || c.lastWeaponUsed == 19143 || c.lastWeaponUsed == 19146 || c.lastWeaponUsed == 19149 || c.bowSpecShot == 1)
- damage2 = Misc.random(rangeMaxHit());
- boolean ignoreDef = false;
- if (Misc.random(5) == 1 && c.lastArrowUsed == 9243 && c.playerEquipment[c.playerWeapon] == 9185) {
- ignoreDef = true;
- Server.npcHandler.npcs[i].gfx0(758);
- }
- if (Misc.random(4) == 1 && c.lastArrowUsed == 9245 && c.playerEquipment[c.playerWeapon] == 18357) {
- ignoreDef = true;
- Server.npcHandler.npcs[i].gfx0(753);
- }
- 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 && c.playerEquipment[c.playerWeapon] == 9185 || c.playerEquipment[c.playerWeapon] == 18357) {
- damage = Server.npcHandler.npcs[i].HP/5;
- //c.handleHitMask(c.playerLevel[3]/10);
- }
- if (c.lastWeaponUsed == 15701 || c.lastWeaponUsed == 15702 || c.lastWeaponUsed == 11235 || c.lastWeaponUsed == 15703 || c.lastWeaponUsed == 15704 || c.lastWeaponUsed == 19143 || c.lastWeaponUsed == 19146 || c.lastWeaponUsed == 19149 || c.bowSpecS
Add Comment
Please, Sign In to add comment