Dragon claws
Code:
case 14484:
case 23695:
player.setNextAnimationNoPriority(new Animation(10961), player);
player.setNextGraphics(new Graphics(1950));
int[] hits = new int[] { 0, 1 };
int hit = getRandomMaxHit(player, weaponId, attackStyle, false, true, 1.0, true);
if (hit > 100) {
hits = new int[] { hit, hit / 2, (hit / 2) / 2, (hit / 2) - ((hit / 2) / 2) };
} else {
hit = getRandomMaxHit(player, weaponId, attackStyle, false, true, 1.0, true);
if (hit > 100) {
hits = new int[] { 0, hit, hit / 2, hit - (hit / 2) };
} else {
hit = getRandomMaxHit(player, weaponId, attackStyle, false, true, 1.0, true);
if (hit > 100) {
hits = new int[] { 0, 0, hit / 2, (hit / 2) + 10 };
} else {
hit = getRandomMaxHit(player, weaponId, attackStyle, false, true, 1.0, true);
if (hit > 100) {
hits = new int[] { 0, 0, 0, (int) (hit * 1.0) };
} else {
int[] miss = { Utils.random(10), Utils.random(10) };
for (int i = 0; i < miss.length; i++) {
delayHit(0, weaponId, attackStyle, getMeleeHit(player, miss[i]));
}
}
}
}
}
for (int i = 0; i < hits.length; i++) {
if (i > 1) {
delayHit(1, weaponId, attackStyle, getMeleeHit(player, hits[i]));
} else {
delayNormalHit(weaponId, attackStyle, getMeleeHit(player, hits[i]));
}
}
break;
Dragon Dagger
Code:
case 1215: // dragon dagger
case 5698: // dds
player.setNextAnimationNoPriority(new Animation(1062), player);
player.setNextGraphics(new Graphics(252, 0, 100));
if (target instanceof Player) {
delayNormalHit(weaponId, attackStyle,
getMeleeHit(player,
getRandomMaxHit(player, weaponId, attackStyle, false, true, 1.15, true)),
getMeleeHit(player,
getRandomMaxHit(player, weaponId, attackStyle, false, true, 1.15, true)));
} else {
delayNormalHit(weaponId, attackStyle, getMeleeHit(player,
getRandomMaxHit(player, weaponId, attackStyle, false, true, 1.15, true)));
delayHit(1, weaponId, attackStyle, getMeleeHit(player,
getRandomMaxHit(player, weaponId, attackStyle, false, true, 1.15, true)));
}
soundId = 2537;
break;
Korasi Sword
Code:
case 19780:
case 19784: // korasi sword
player.setNextAnimation(new Animation(14788));
player.setNextGraphics(new Graphics(1729));
final double multiplier = 0.5 + Math.random();
attackTarget(getMultiAttackTargets(player), new MultiAttack() {
private boolean nextTarget; // real target is firsts
final int weaponId = player.getEquipment().getWeaponId();
// player on array
@Override
public boolean attack() {
final Entity[] targets = getMultiAttackTargets(player);
int korasiDamage = getMaxHit(player, weaponId, attackStyle, false, true, 1.0);
korasiDamage *= multiplier;
max_hit = (int) (korasiDamage * 1.5);
Hit h = getMagicHit(player, korasiDamage / targets.length + 1);
h.setCriticalMark();
delayHit(0, weaponId, attackStyle, h);
WorldTasksManager.schedule(new WorldTask() {
@Override
public void run() {
for (Entity e : targets)
e.setNextGraphics(new Graphics(2795, 0, 100));
target.setNextGraphics(new Graphics(2795, 0, 100));
}
});
if (!nextTarget) {
if (korasiDamage == -1)
return false;
nextTarget = true;
}
return nextTarget;
}
});
return combatDelay;
Statius' warhammer & Bandos godsword
Code:
case 11696: // bgs
case 24512:
case 23680:
player.setNextAnimation(new Animation(11991));
player.setNextGraphics(new Graphics(2114));
int damage1 = getRandomMaxHit(player, weaponId, attackStyle, false, true, 1.15, true);
delayNormalHit(weaponId, attackStyle, getMeleeHit(player, damage1));
if (target instanceof Player) {
Player targetPlayer = ((Player) target);
int amountLeft;
if ((amountLeft = targetPlayer.getSkills().drainLevel(Skills.DEFENCE, damage1 / 10)) > 0) {
if ((amountLeft = targetPlayer.getSkills().drainLevel(Skills.STRENGTH, amountLeft)) > 0) {
if ((amountLeft = targetPlayer.getSkills().drainLevel(Skills.PRAYER, amountLeft)) > 0) {
if ((amountLeft = targetPlayer.getSkills().drainLevel(Skills.ATTACK, amountLeft)) > 0) {
if ((amountLeft = targetPlayer.getSkills().drainLevel(Skills.MAGIC,
amountLeft)) > 0) {
if (targetPlayer.getSkills().drainLevel(Skills.RANGE, amountLeft) > 0) {
break;
}
}
}
}
}
}
} else {
if (damage1 > 0) {
NPC n = (NPC) target;
int npcDef = n.getBonuses()[CombatDefinitions.NPC_DEFENCE_LEVEL];
player.getPackets().sendGameMessage(npcDef + " current def.");
int drain = damage1 / 20;
if ((npcDef - drain) < 0)
npcDef = 0;
else
npcDef -= drain;
player.getPackets().sendGameMessage(npcDef + " last def.");
n.getBonuses()[CombatDefinitions.NPC_DEFENCE_LEVEL] = npcDef;
}
}
break;
case 13902: // statius hammer
case 13904:
player.setNextAnimation(new Animation(10505));
player.setNextGraphics(new Graphics(1840));
int warhammerDamage = getRandomMaxHit(player, weaponId, attackStyle, false, true, 1.21, true);
delayNormalHit(weaponId, attackStyle, getMeleeHit(player, warhammerDamage));
if (target instanceof Player) {
Player targetPlayer = ((Player) target);
int amountLeft;
if ((amountLeft = targetPlayer.getSkills().drainLevel(Skills.DEFENCE, warhammerDamage / 10)) > 0) {
if ((amountLeft = targetPlayer.getSkills().drainLevel(Skills.STRENGTH, amountLeft)) > 0) {
if ((amountLeft = targetPlayer.getSkills().drainLevel(Skills.PRAYER, amountLeft)) > 0) {
if ((amountLeft = targetPlayer.getSkills().drainLevel(Skills.ATTACK, amountLeft)) > 0) {
if ((amountLeft = targetPlayer.getSkills().drainLevel(Skills.MAGIC,
amountLeft)) > 0) {
if (targetPlayer.getSkills().drainLevel(Skills.RANGE, amountLeft) > 0) {
break;
}
}
}
}
}
}
} else {
if (warhammerDamage > 0) {
NPC n = (NPC) target;
int npcDef = n.getBonuses()[CombatDefinitions.NPC_DEFENCE_LEVEL];
player.getPackets().sendGameMessage(npcDef + " current def.");
int drain = warhammerDamage / 20;
if ((npcDef - drain) < 0)
npcDef = 0;
else
npcDef -= drain;
player.getPackets().sendGameMessage(npcDef + " last def.");
n.getBonuses()[CombatDefinitions.NPC_DEFENCE_LEVEL] = npcDef;
}
}
break;
Abyssal vine whip
Code:
case 21371: // Abby Vine Whip
case 21372:
case 21373:
case 21374:
case 21375:
processVineCall(player);
break;
Code:
public void processVineCall(final Player player) {
int weaponId = player.getEquipment().getWeaponId();
final int attackStyle = player.getCombatDefinitions().getAttackStyle();
final Entity finalTarget = target;
player.setNextAnimation(new Animation(11971));
if (Utils.random(1) == 0 && !target.getPoison().isPoisoned()) {
target.getPoison().makePoisoned(48);
}
delayNormalHit(weaponId, attackStyle,
getMeleeHit(player, getRandomMaxHit(player, weaponId, attackStyle, false, true, 1.0, true)));
if (finalTarget.getTemporaryAttributtes().get("VINEEFFECT") == Boolean.TRUE) {
finalTarget.vineHits = 10;
} else
finalTarget.vineHits += 10;
finalTarget.getTemporaryAttributtes().put("VINEEFFECT", Boolean.TRUE);
final WorldTile vineTile = new WorldTile(target.getX(), target.getY(), target.getPlane());
WorldTasksManager.schedule(new WorldTask() {
@Override
public void run() {
/*
* if (player.getEquipment().getWeaponId() != 21371) { player.getPackets()
* .sendGameMessage("Since you no longer wield a vine whip, the vine ignores your call"
* ); finalTarget.getTemporaryAttributtes().remove("VINEEFFECT");
* finalTarget.vineHits = 0; stop(); return; }
*/
if (finalTarget.isDead() || finalTarget.hasFinished() || player.isDead() || player.hasFinished()) {
finalTarget.getTemporaryAttributtes().remove("VINEEFFECT");
finalTarget.vineHits = 0;
stop();
return;
}
if (finalTarget.vineHits > 0) {
finalTarget.vineHits--;
World.sendGraphics(null, new Graphics(478), vineTile);
}
if (finalTarget.vineHits < 1) {
finalTarget.getTemporaryAttributtes().remove("VINEEFFECT");
stop();
}
int damage = 0;
if (player.isAtMultiArea() && target.isAtMultiArea()) {
if (target instanceof Player) {
int i = 0;
damage = Utils.random(80, 130);
if (Utils.inCircle(finalTarget, vineTile, 1))
finalTarget.applyHit(new Hit(player, damage, HitLook.MELEE_DAMAGE));
for (Player players : World.getPlayers()) {
if (players != null) {
if (Math.abs(player.getSkills().getCombatLevel()
- players.getSkills().getCombatLevel()) > WildernessControler
.getWildLevel(player)
&& Utils.inCircle(players, vineTile, 1)) {
if (i > 2)
continue;
damage = Utils.random(80, 130);
i++;
if (i > 0) {
addMeleeCombatXp(player, damage, weaponId, attackStyle);
players.applyHit(new Hit(player, damage, HitLook.MELEE_DAMAGE));
}
}
}
}
} else {
NPC t = (NPC) target;
int i = 0;
damage = Utils.random(80, 130);
if (Utils.inCircle(finalTarget, vineTile, t.getSize()))
finalTarget.applyHit(new Hit(player, damage, HitLook.MELEE_DAMAGE));
for (NPC npcs : World.getNPCs()) {
if (npcs != null && npcs != finalTarget && Utils.inCircle(npcs, vineTile, npcs.getSize())
&& t.getDefinitions().hasAttackOption()) {
if (i > 2)
continue;
damage = Utils.random(80, 130);
i++;
if (i > 0) {
addMeleeCombatXp(player, damage, weaponId, attackStyle);
npcs.applyHit(new Hit(player, damage, HitLook.MELEE_DAMAGE));
}
}
}
}
} else {
damage = Utils.random(80, 130);
if (Utils.inCircle(target, vineTile, 1)) {
addMeleeCombatXp(player, damage, weaponId, attackStyle);
finalTarget.applyHit(new Hit(player, damage, HitLook.MELEE_DAMAGE));
}
}
}
}, 4, 2);
}
Hand Cannon
Code:
case 15241: // Hand cannon
player.setNextAnimation(new Animation(12175));
WorldTasksManager.schedule(new WorldTask() {
int loop = 0;
@Override
public void run() {
if ((target.isDead() || player.isDead() || loop > 6)) {
stop();
return;
}
if (loop == 2) {
if (player.getEquipment().getWeaponId() == 15241) {
player.setNextGraphics(new Graphics(2138));
player.setNextAnimation(new Animation(12153));
World.sendCannonProjectile(player, target, 2143);
dropAmmo(player, 1);
delayHit(Utils.getDistance(player, target) > 3 ? 2 : 1, weaponId, attackStyle,
getRangeHit(player, getRandomMaxHit(player, weaponId, attackStyle, true)));
player.getActionManager().setActionDelay(1);
} else {
player.getCombatDefinitions().restoreSpecialAttack(50);
}
} else if (loop == 3) {
stop();
}
loop++;
}
}, 0, (int) 0.25);
combatDelay = 9;
break;
Dark bow
Code:
case 11235: // dark bows
case 15701:
case 15702:
case 15703:
case 15704:
int ammoId = player.getEquipment().getAmmoId();
player.setNextAnimation(new Animation(getWeaponAttackEmote(weaponId, attackStyle)));
player.setNextGraphics(new Graphics(getStartArrowProjectileId(weaponId, ammoId), 0, 100));
boolean dragonArrows = ItemDefinitions.getItemDefinitions(player.getEquipment().getAmmoId()).getName()
.toLowerCase().contains("dragon arrow");
int damage = getRandomMaxHit(player, weaponId, attackStyle, true, true, 1.270, true);
int damage2 = getRandomMaxHit(player, weaponId, attackStyle, true, true, 1.270, true);
int minimum = dragonArrows ? 80 : 50;
if (damage < minimum) {
damage = minimum;
} else
damage += minimum;
if (damage2 < minimum) {
damage2 = minimum;
} else
damage2 += minimum;
World.sendSlowBowProjectile(player, target, dragonArrows ? 1099 : 1103);
World.sendSlowBow2Projectile(player, target, dragonArrows ? 1099 : 1103);
int distance = Utils.getDistance(player, target);
delayHit(distance >= 5 ? 2 : distance >= 3 ? 1 : 1, weaponId, attackStyle, getRangeHit(player, damage));
delayHit(distance >= 5 ? 4 : distance >= 3 ? 1 : 2, weaponId, attackStyle,
getRangeHit(player, damage2));
checkSwiftGlovesEffect(player, attackStyle, weaponId, damage2, getArrowProjectileId(weaponId, ammoId),
2);
WorldTasksManager.schedule(new WorldTask() {
@Override
public void run() {
if (player == null || target == null || player.isDead() || player.hasFinished()
|| target.isDead() || target.hasFinished())
return;
target.setNextGraphics(new Graphics(dragonArrows ? 1100 : 1103, 0, 100));
target.setNextGraphics(new Graphics(dragonArrows ? 1100 : 1103, 0, 100));
}
}, distance == 3 ? 1 : 2);
break;
Zaniks crossbow
Code:
case 14684: // zanik cbow
player.setNextAnimation(new Animation(11359));
player.setNextGraphics(new Graphics(1714));
WorldTasksManager.schedule(new WorldTask() {
int loop = 0;
@Override
public void run() {
if ((target.isDead() || player.isDead() || loop > 3)) {
stop();
return;
}
if (loop == 1) {
ItemDefinitions defs = ItemDefinitions
.getItemDefinitions(player.getEquipment().getWeaponId());
World.sendCBOWProjectile(player, target, 2001);
delayHit(Utils.getDistance(player, target) > 3 ? 2 : 1, weaponId, attackStyle,
getRangeHit(player,
getRandomMaxHit(player, weaponId, attackStyle, true, true, 1.0, true) + 30
+ Utils.getRandom(120)));
dropAmmo(player, 1);
player.getActionManager().setActionDelay(defs.getAttackSpeed());
} else if (loop == 3)
stop();
loop++;
}
}, 0, (int) 0.25);
break;
Morrigans javelin
Code:
case 13954:// morrigan javelin
case 12955:
case 13956:
case 13879:
case 13880:
case 13881:
case 13882:
player.setNextGraphics(new Graphics(1836));
player.setNextAnimation(new Animation(10501));
World.sendThrowProjectile(player, target, 1837);
final int hit = getRandomMaxHit(player, weaponId, attackStyle, true, true, 1.0, true);
delayHit(Utils.getDistance(player, target) > 3 ? 2 : 1, weaponId, attackStyle,
getRangeHit(player, hit));
processMorriganJavelins(player, hit);
dropAmmo(player, -1);
break;
Code:
public void processMorriganJavelins(final Player player, int hit) {
final Entity finalTarget = target;
if (finalTarget.getTemporaryAttributtes().get("MORRIGANEFFECT") == Boolean.TRUE) {
finalTarget.morriganHits += hit;
return;
}
finalTarget.getTemporaryAttributtes().put("MORRIGANEFFECT", Boolean.TRUE);
finalTarget.morriganHits += hit;
WorldTasksManager.schedule(new WorldTask() {
@Override
public void run() {
if (finalTarget.isDead() || finalTarget.hasFinished() || player.isDead() || player.hasFinished()) {
stop();
finalTarget.morriganHits = 0;
finalTarget.getTemporaryAttributtes().remove("MORRIGANEFFECT");
return;
}
if (finalTarget.morriganHits >= 50) {
finalTarget.morriganHits -= 50;
finalTarget.applyHit(new Hit(player, 50, HitLook.REGULAR_DAMAGE));
} else {
finalTarget.applyHit(new Hit(player, finalTarget.morriganHits, HitLook.REGULAR_DAMAGE));
finalTarget.morriganHits = 0;
finalTarget.getTemporaryAttributtes().remove("MORRIGANEFFECT");
stop();
return;
}
}
}, 2, 2);
}