public static void fightCaveAttacks(Npc npc, Player p) { if (npc.isDead() || npc.isDestroyed() || p.isDead() || p.isDestroyed() || p.isDead() || !Location.inFightCave(p.getLocation()) || p.getTeleportTo() != null) { return; } int damage = misc.random(npc.getMaxHit()); int prayer = p.getPrayers().getHeadIcon(); int hitDelay = npc.getHitDelay(); int animation = npc.getAttackAnimation(); switch(npc.getId()) { case 2734: // Tz-Kih (lvl 22) case 2735: if (prayer == PrayerData.MELEE) { damage = 0; } break; case 2739: // Tz-Xil (lvl 90) case 2740: if (prayer == PrayerData.RANGE) { damage = 0; } p.getPackets().sendProjectile(npc.getLocation(), p.getLocation(), 32, 1616, 50, 40, 34, 50, p); break; case 2741: // Yt-MejKot (lvl 180) case 2742: if (prayer == PrayerData.MELEE) { damage = 0; } // TODO healing break; case 2743: // Ket-Zek (lvl 360) case 2744: if (!p.getLocation().withinDistance(npc.getLocation(), 2)) { hitDelay = 1600; animation = 9266; npc.setLastGraphics(new Graphics(1622)); damage = misc.random(49); if (prayer == PrayerData.MAGIC) { damage = 0; } Event sendProjectileToNpc = new Event(300); sendProjectileToNpc.setAction(() => { sendProjectileToNpc.stop(); p.getPackets().sendProjectile(npc.getLocation(), p.getLocation(), 32, 1623, 50, 40, 34, 80, p); }); Server.registerEvent(sendProjectileToNpc); } else { damage = misc.random(64); if (prayer == PrayerData.MELEE) { damage = 0; } } break; case 2745: // TzTok Jad (lvl 702) doJadAttacks(p, npc); break; } if (npc.getId() == 2745){ return; } if (animation != 65535) { npc.setLastAnimation(new Animation(animation)); } p.setLastAttacked(Environment.TickCount); npc.setLastAttack(Environment.TickCount); p.setAttacker(npc); npc.resetCombatTurns(); if (damage > p.getHp()) { damage = p.getHp(); } int npcId = npc.getId(); Event losePrayerFightingEvent = new Event(hitDelay); losePrayerFightingEvent.setAction(() => { losePrayerFightingEvent.stop(); if (!Location.inFightCave(p.getLocation()) || p.getTeleportTo() != null) { return; } if (npcId == 2734 || npcId == 2735) { int prayerLevel = p.getSkills().getCurLevel(Skills.SKILL.PRAYER); int newPrayerLevel = prayerLevel -= (damage + 1); if (newPrayerLevel <= 0) { newPrayerLevel = 0; } p.getSkills().setCurLevel(Skills.SKILL.PRAYER, newPrayerLevel); p.getPackets().sendSkillLevel(Skills.SKILL.PRAYER); } else if (npcId == 2743 || npcId == 2744) { if (misc.random(1) == 0) { p.setLastGraphics(new Graphics(1624, 0)); } } if ((p.getCombatTurns() > 2 || p.getCombatTurns() < 0)) { p.setLastAnimation(new Animation(p.getDefenceAnimation())); } p.hit(damage); }); Server.registerEvent(losePrayerFightingEvent); }
private static void doJadAttacks(Player p, Npc npc) { if (npc.getHp() <= (npc.getMaxHp() * 0.50)) { if (p.getFightCave() != null) { if (!p.getFightCave().isHealersSpawned()) { summonJadHealers(p, npc); p.getFightCave().setHealersSpawned(true); } } } npc.resetCombatTurns(); npc.setEntityFocus(p.getClientIndex()); switch(misc.random(1)) { case 0: // Range npc.setLastAnimation(new Animation(9276)); npc.setLastGraphics(new Graphics(1625)); Event jadRangeAttackEvent = new Event(1600); int jadRangeAttackStatus = 0; jadRangeAttackEvent.setAction(() => { int hit = 0; int prayer = p.getPrayers().getHeadIcon(); if (jadRangeAttackStatus == 0) { jadRangeAttackStatus++; jadRangeAttackEvent.setTick(1500); p.setLastGraphics(new Graphics(451)); if (prayer == PrayerData.RANGE) { hit = 0; } else { hit = misc.random(96); } } else { if (prayer != PrayerData.RANGE) { hit = misc.random(96); } jadRangeAttackEvent.stop(); p.setLastAttacked(Environment.TickCount); npc.setLastAttack(Environment.TickCount); p.setAttacker(npc); if (hit > p.getHp()) { hit = p.getHp(); } if (!Location.inFightCave(p.getLocation()) || p.getTeleportTo() != null) { return; } if ((p.getCombatTurns() > 2 || p.getCombatTurns() < 0)) { p.setLastAnimation(new Animation(p.getDefenceAnimation())); } p.hit(hit); Event animationEvent = new Event(100); animationEvent.setAction(() => { animationEvent.stop(); p.setLastGraphics(new Graphics(157, 0, 100)); }); Server.registerEvent(animationEvent); } }); Server.registerEvent(jadRangeAttackEvent); break; case 1: // Magic npc.setLastGraphics(new Graphics(1626)); Event jadMagicAttackEvent = new Event(300); int jadMagicAttackStatus = 0; jadMagicAttackEvent.setAction(() => { int hit = 0; int prayer = p.getPrayers().getHeadIcon(); npc.setLastAnimation(new Animation(9278)); if (jadMagicAttackStatus == 0) { jadMagicAttackStatus++; jadMagicAttackEvent.setTick(1600); p.getPackets().sendProjectile(npc.getLocation(), p.getLocation(), 32, 1627, 50, 40, 34, 90, p); } else { jadMagicAttackEvent.stop(); if (prayer == PrayerData.MAGIC) { hit = 0; } else { hit = misc.random(96); } p.setLastAttacked(Environment.TickCount); npc.setLastAttack(Environment.TickCount); p.setAttacker(npc); if (hit > p.getHp()) { hit = p.getHp(); } if (!Location.inFightCave(p.getLocation()) || p.getTeleportTo() != null) { return; } if ((p.getCombatTurns() > 2 || p.getCombatTurns() < 0)) { p.setLastAnimation(new Animation(p.getDefenceAnimation())); } p.hit(hit); Event animationEvent = new Event(100); animationEvent.setAction(() => { animationEvent.stop(); p.setLastGraphics(new Graphics(157, 0, 100)); }); Server.registerEvent(animationEvent); } }); Server.registerEvent(jadMagicAttackEvent); break; } }