A bit bored while a friend gets on, but I made this a while ago and deciding to release this now.
Too a while to make them as close as I could to rs.
Code:
package org.rs2server.rs2.model.combat.npcs;
import java.util.Random;
import org.rs2server.rs2.model.Animation;
import org.rs2server.rs2.model.Hit;
import org.rs2server.rs2.model.Mob;
import org.rs2server.rs2.model.NPC;
import org.rs2server.rs2.model.Player;
import org.rs2server.rs2.model.Prayers;
import org.rs2server.rs2.model.Skills;
import org.rs2server.rs2.model.World;
import org.rs2server.rs2.model.Hit.HitType;
import org.rs2server.rs2.model.combat.CombatAction;
import org.rs2server.rs2.model.combat.impl.AbstractCombatAction;
import org.rs2server.rs2.tickable.Tickable;
import org.rs2server.util.Misc;
/**
* @author Organic
* Class Commander Zilyana
*/
public class CommanderZilyana extends AbstractCombatAction {
/**
* The singleton instance.
*/
private static final CommanderZilyana INSTANCE = new CommanderZilyana();
/**
* Gets the singleton instance.
* @return The singleton instance.
*/
public static CombatAction getAction() {
return INSTANCE;
}
/**
* The random number generator.
*/
private final Random random = new Random();
/**
* Default private constructor.
*/
public CommanderZilyana() {
}
public enum CombatStyle {
MELEE,
MAGIC
}
@Override
public void hit(final Mob attacker, final Mob victim) {
super.hit(attacker, victim);
if(!attacker.isNPC()) {
return;
}
NPC npc = (NPC) attacker;
CombatStyle style = CombatStyle.MELEE;
int maxHit;
int damage;
int randomHit;
int hitDelay;
boolean blockAnimation;
final int hit;
if(attacker.getLocation().isWithinDistance(attacker, victim, 3)) {
switch(random.nextInt(2)) {
case 0:
style = CombatStyle.MELEE;
break;
case 1:
style = CombatStyle.MAGIC;
break;
}
}
switch(style) {
case MAGIC:
attacker.playAnimation(Animation.create(6967));
hitDelay = 2;
blockAnimation = true;
if (victim.getCombatState().getPrayer(Prayers.PROTECT_FROM_MAGIC)) {
maxHit = 0;
} else {
maxHit = 30;
}
randomHit = Misc.random(maxHit);
hit = randomHit;
World.getWorld().submit(new Tickable(2) {
@Override
public void execute() {
stop();
for (final Player near : World.getWorld().getPlayers()) {
if (near != null
&& near != attacker
&& near != victim
&& near.getSkills().getLevel(Skills.HITPOINTS) > 0) {
if (Misc.getDistance(near.getLocation(),
attacker.getLocation()) < 10) {
int hitz = hit;
if (near.getCombatState().getPrayer(
Prayers.PROTECT_FROM_MAGIC)) {
hitz = (int) (hitz * 0.4);
}
hitz = Misc.random(hitz);
near.inflictDamage(
new Hit(hitz > 0 ? HitType.NORMAL_HIT
: HitType.ZERO_DAMAGE_HIT, hitz),
near);
}
}
}
}
});
if (victim.getCombatState().getPrayer(Prayers.PROTECT_FROM_MAGIC)) {
maxHit = (int) (maxHit * 0.0);
}
randomHit = Misc.random(maxHit);
if (randomHit > victim.getSkills().getLevel(Skills.HITPOINTS)) {
randomHit = victim.getSkills().getLevel(Skills.HITPOINTS);
}
break;
default:
case MELEE:
attacker.playAnimation(attacker.getAttackAnimation());
hitDelay = 1;
blockAnimation = true;
maxHit = npc.getCombatDefinition().getMaxHit();
damage = damage(maxHit, attacker, victim, attacker.getCombatState().getAttackType(), Skills.ATTACK , Prayers.PROTECT_FROM_MELEE, false, false);
randomHit = random.nextInt(damage < 1 ? 1 : damage + 1);
if(randomHit > victim.getSkills().getLevel(Skills.HITPOINTS)) {
randomHit = victim.getSkills().getLevel(Skills.HITPOINTS);
}
hit = randomHit;
break;
}
attacker.getCombatState().setAttackDelay(4);
attacker.getCombatState().setSpellDelay(4);
World.getWorld().submit(new Tickable(hitDelay) {
@Override
public void execute() {
victim.inflictDamage(new Hit(hit), attacker);
smite(attacker, victim, hit);
recoil(attacker, victim, hit);
this.stop();
}
});
vengeance(attacker, victim, hit, 1);
victim.getActiveCombatAction().defend(attacker, victim, blockAnimation);
}
@Override
public int distance(Mob attacker) {
return 5;
}
}
Code:
package org.rs2server.rs2.model.combat.npcs;
import java.util.Random;
import org.rs2server.rs2.model.Animation;
import org.rs2server.rs2.model.Graphic;
import org.rs2server.rs2.model.Hit;
import org.rs2server.rs2.model.Hit.HitType;
import org.rs2server.rs2.model.Mob;
import org.rs2server.rs2.model.NPC;
import org.rs2server.rs2.model.Player;
import org.rs2server.rs2.model.Prayers;
import org.rs2server.rs2.model.Projectile;
import org.rs2server.rs2.model.Skills;
import org.rs2server.rs2.model.World;
import org.rs2server.rs2.model.combat.CombatAction;
import org.rs2server.rs2.model.combat.impl.AbstractCombatAction;
import org.rs2server.rs2.tickable.Tickable;
import org.rs2server.util.Misc;
/**
* @author Organic
* Class GeneralGraardor
*/
public class GeneralGraardor extends AbstractCombatAction {
/**
* The singleton instance.
*/
private static final GeneralGraardor INSTANCE = new GeneralGraardor();
/**
* Gets the singleton instance.
* @return The singleton instance.
*/
public static CombatAction getAction() {
return INSTANCE;
}
/**
* The random number generator.
*/
private final Random random = new Random();
/**
* Default private constructor.
*/
public GeneralGraardor() {
}
public enum CombatStyle {
MELEE,
RANGE
}
@Override
public void hit(final Mob attacker, final Mob victim) {
super.hit(attacker, victim);
if(!attacker.isNPC()) {
return; //this should be an NPC!
}
NPC npc = (NPC) attacker;
CombatStyle style = CombatStyle.RANGE;
int maxHit;
int damage;
int randomHit;
int hitDelay;
boolean blockAnimation;
final int hit;
if(attacker.getLocation().isWithinDistance(attacker, victim, 1)) {
switch(random.nextInt(2)) {
case 0:
style = CombatStyle.MELEE;
break;
case 1:
style = CombatStyle.RANGE;
break;
}
}
switch(style) {
case MELEE:
attacker.playAnimation(attacker.getAttackAnimation());
hitDelay = 1;
blockAnimation = true;
maxHit = npc.getCombatDefinition().getMaxHit();
damage = damage(maxHit, attacker, victim, attacker.getCombatState().getAttackType(), Skills.ATTACK , Prayers.PROTECT_FROM_MELEE, false, false);
randomHit = random.nextInt(damage < 1 ? 1 : damage + 1);
if(randomHit > victim.getSkills().getLevel(Skills.HITPOINTS)) {
randomHit = victim.getSkills().getLevel(Skills.HITPOINTS);
}
hit = randomHit;
break;
default:
case RANGE:
attacker.playAnimation(Animation.create(7063));
for (final Player near : World.getWorld().getPlayers()) {
if (Misc.getDistance(near.getLocation(),
attacker.getLocation()) < 10) {
attacker.playProjectile(Projectile.create(attacker
.getCentreLocation(), near.getCentreLocation(),
1200, 45, 50, 80, 60, 25, near
.getProjectileLockonIndex(), 5, 48));
}
}
hitDelay = 2;
blockAnimation = false;
if (victim.getCombatState().getPrayer(Prayers.PROTECT_FROM_MISSILES)) {
maxHit = 17;
} else {
maxHit = 36;
}
randomHit = Misc.random(maxHit);
hit = randomHit;
World.getWorld().submit(new Tickable(2) {
@Override
public void execute() {
stop();
for (final Player near : World.getWorld().getPlayers()) {
if (near != null
&& near != attacker
&& near != victim
&& near.getSkills().getLevel(Skills.HITPOINTS) > 0) {
if (Misc.getDistance(near.getLocation(),
attacker.getLocation()) < 10) {
near.playGraphics(Graphic.create(1200));
int hitz = hit;
if (near.getCombatState().getPrayer(
Prayers.PROTECT_FROM_MISSILES)) {
hitz = (int) (hitz * 0.4);
}
hitz = Misc.random(hitz);
near.inflictDamage(
new Hit(hitz > 0 ? HitType.NORMAL_HIT
: HitType.ZERO_DAMAGE_HIT, hitz),
near);
}
}
}
}
});
if (victim.getCombatState().getPrayer(Prayers.PROTECT_FROM_MISSILES)) {
maxHit = (int) (maxHit * 0.0);
}
randomHit = Misc.random(maxHit);
if (randomHit > victim.getSkills().getLevel(Skills.HITPOINTS)) {
randomHit = victim.getSkills().getLevel(Skills.HITPOINTS);
}
break;
}
attacker.getCombatState().setAttackDelay(4);
attacker.getCombatState().setSpellDelay(4);
World.getWorld().submit(new Tickable(hitDelay) {
@Override
public void execute() {
victim.inflictDamage(new Hit(hit), attacker);
smite(attacker, victim, hit);
recoil(attacker, victim, hit);
this.stop();
}
});
vengeance(attacker, victim, hit, 1);
victim.getActiveCombatAction().defend(attacker, victim, blockAnimation);
}
@Override
public int distance(Mob attacker) {
return 5;
}
}
Code:
package org.rs2server.rs2.model.combat.npcs;
import java.util.Random;
import org.rs2server.rs2.model.Hit;
import org.rs2server.rs2.model.Location;
import org.rs2server.rs2.model.Mob;
import org.rs2server.rs2.model.Player;
import org.rs2server.rs2.model.Prayers;
import org.rs2server.rs2.model.Projectile;
import org.rs2server.rs2.model.Skills;
import org.rs2server.rs2.model.World;
import org.rs2server.rs2.model.Hit.HitType;
import org.rs2server.rs2.model.combat.CombatAction;
import org.rs2server.rs2.model.combat.impl.AbstractCombatAction;
import org.rs2server.rs2.tickable.Tickable;
import org.rs2server.util.Misc;
/**
* @author Organic
* Class KreeArra
*/
public class KreeArra extends AbstractCombatAction {
/**
* The singleton instance.
*/
private static final KreeArra INSTANCE = new KreeArra();
/**
* Gets the singleton instance.
* @return The singleton instance.
*/
public static CombatAction getAction() {
return INSTANCE;
}
/**
* The random number generator.
*/
private final Random random = new Random();
/**
* Default private constructor.
*/
public KreeArra() {
}
/**
*
* @param victim
* moves around the room randomly by armadyl's attacks.
* TODO: Make it so you cannot just stand in the corner and stop the method.
*/
private void movePlayerRandom(Mob victim) {
int random = Misc.random(2);
int xToMove = Misc.random(1);
int yToMove = Misc.random(1);
int xCoord = victim.getLocation().getX();
int yCoord = victim.getLocation().getY();
if (xCoord > 2841 || xCoord < 2823 || yCoord < 5295 || yCoord > 5307) {
return;
} else if (random == 1) {
victim.setTeleportTarget(Location.create(xCoord +- xToMove, yCoord +- yToMove, 2));
}
}
/**
* What attacks Kree can do.
*/
private enum CombatStyle {
MAGE,
RANGE,
}
/**
* Gets the attack style and the hit for the victim(s).
*/
@Override
public void hit(final Mob attacker, final Mob victim) {
super.hit(attacker, victim);
if (!attacker.isNPC()) {
return;
}
CombatStyle style = CombatStyle.RANGE;
int maxHit;
int randomHit;
int hitDelay;
boolean blockAnimation;
final int hit;
if (attacker.getLocation().isWithinDistance(attacker, victim, 10)) {
switch(random.nextInt(2)) {
case 0:
style = CombatStyle.MAGE;
break;
case 1:
style = CombatStyle.RANGE;
break;
}
}
switch (style) {
case MAGE:
attacker.playAnimation(attacker.getAttackAnimation());
for (final Player near : World.getWorld().getPlayers()) {
if (Misc
.getDistance(near.getLocation(), attacker.getLocation()) < 10) {
attacker.playProjectile(Projectile.create(attacker
.getCentreLocation(), near.getCentreLocation(),
1198, 45, 50, 80, 60, 25, near
.getProjectileLockonIndex(), 5, 48));
movePlayerRandom(near);
}
}
hitDelay = 2;
blockAnimation = true;
;
if (victim.getCombatState()
.getPrayer(Prayers.PROTECT_FROM_MAGIC)) {
maxHit = 0;
} else {
maxHit = 21;
}
randomHit = Misc.random(maxHit);
hit = randomHit;
World.getWorld().submit(new Tickable(2) {
@Override
public void execute() {
stop();
for (final Player near : World.getWorld().getPlayers()) {
if (near != null
&& near != attacker
&& near != victim
&& near.getSkills().getLevel(Skills.HITPOINTS) > 0) {
if (Misc.getDistance(near.getLocation(), attacker
.getLocation()) < 10) {
int hitz = hit;
if (near.getCombatState().getPrayer(
Prayers.PROTECT_FROM_MAGIC)) {
hitz = (int) (hitz * 0.4);
}
hitz = Misc.random(hitz);
near
.inflictDamage(
new Hit(
hitz > 0 ? HitType.NORMAL_HIT
: HitType.ZERO_DAMAGE_HIT,
hitz), near);
}
}
}
}
});
if (victim.getCombatState()
.getPrayer(Prayers.PROTECT_FROM_MAGIC)) {
maxHit = (int) (maxHit * 0.0);
}
randomHit = Misc.random(maxHit);
if (randomHit > victim.getSkills().getLevel(Skills.HITPOINTS)) {
randomHit = victim.getSkills().getLevel(Skills.HITPOINTS);
}
break;
default:
case RANGE:
attacker.playAnimation(attacker.getAttackAnimation());
for (final Player near : World.getWorld().getPlayers()) {
if (Misc
.getDistance(near.getLocation(), attacker.getLocation()) < 10) {
attacker.playProjectile(Projectile.create(attacker
.getCentreLocation(), near.getCentreLocation(),
1197, 45, 50, 80, 60, 25, near
.getProjectileLockonIndex(), 5, 48));
movePlayerRandom(near);
}
}
hitDelay = 2;
blockAnimation = true;
;
if (victim.getCombatState()
.getPrayer(Prayers.PROTECT_FROM_MISSILES)) {
maxHit = 0;
} else {
maxHit = 71;
}
randomHit = Misc.random(maxHit);
hit = randomHit;
World.getWorld().submit(new Tickable(2) {
@Override
public void execute() {
stop();
for (final Player near : World.getWorld().getPlayers()) {
if (near != null
&& near != attacker
&& near != victim
&& near.getSkills().getLevel(Skills.HITPOINTS) > 0) {
if (Misc.getDistance(near.getLocation(), attacker
.getLocation()) < 10) {
int hitz = hit;
if (near.getCombatState().getPrayer(
Prayers.PROTECT_FROM_MISSILES)) {
hitz = (int) (hitz * 0.4);
}
hitz = Misc.random(hitz);
near
.inflictDamage(
new Hit(
hitz > 0 ? HitType.NORMAL_HIT
: HitType.ZERO_DAMAGE_HIT,
hitz), near);
}
}
}
}
});
if (victim.getCombatState()
.getPrayer(Prayers.PROTECT_FROM_MISSILES)) {
maxHit = (int) (maxHit * 0.0);
}
randomHit = Misc.random(maxHit);
if (randomHit > victim.getSkills().getLevel(Skills.HITPOINTS)) {
randomHit = victim.getSkills().getLevel(Skills.HITPOINTS);
}
break;
}
System.out.println(""+style+"");
attacker.getCombatState().setAttackDelay(4);
attacker.getCombatState().setSpellDelay(4);
World.getWorld().submit(new Tickable(hitDelay) {
@Override
public void execute() {
victim.inflictDamage(new Hit(hit), attacker);
smite(attacker, victim, hit);
recoil(attacker, victim, hit);
this.stop();
}
});
vengeance(attacker, victim, hit, 1);
victim.getActiveCombatAction().defend(attacker, victim, blockAnimation);
}
@Override
public int distance(Mob attacker) {
return 5;
}
}
Code:
package org.rs2server.rs2.model.combat.npcs;
import java.util.Random;
import org.rs2server.rs2.model.Animation;
import org.rs2server.rs2.model.Graphic;
import org.rs2server.rs2.model.Hit;
import org.rs2server.rs2.model.Hit.HitType;
import org.rs2server.rs2.model.Mob;
import org.rs2server.rs2.model.NPC;
import org.rs2server.rs2.model.Player;
import org.rs2server.rs2.model.Prayers;
import org.rs2server.rs2.model.Projectile;
import org.rs2server.rs2.model.Skills;
import org.rs2server.rs2.model.World;
import org.rs2server.rs2.model.combat.CombatAction;
import org.rs2server.rs2.model.combat.impl.AbstractCombatAction;
import org.rs2server.rs2.tickable.Tickable;
import org.rs2server.util.Misc;
/**
* @author Organic
* Class KrilTsutsaroth
*/
public class KrilTsutsaroth extends AbstractCombatAction {
/**
* The singleton instance.
*/
private static final KrilTsutsaroth INSTANCE = new KrilTsutsaroth();
/**
* Gets the singleton instance.
* @return The singleton instance.
*/
public static CombatAction getAction() {
return INSTANCE;
}
/**
* The random number generator.
*/
private final Random random = new Random();
/**
* Default private constructor.
*/
public KrilTsutsaroth() {
}
public enum CombatStyle {
MELEE,
MAGIC
}
@Override
public void hit(final Mob attacker, final Mob victim) {
super.hit(attacker, victim);
if(!attacker.isNPC()) {
return;
}
NPC npc = (NPC) attacker;
CombatStyle style = CombatStyle.MELEE;
int maxHit;
int damage;
int randomHit;
int hitDelay;
boolean blockAnimation;
final int hit;
if(attacker.getLocation().isWithinDistance(attacker, victim, 3)) {
switch(random.nextInt(2)) {
case 0:
style = CombatStyle.MELEE;
break;
case 1:
style = CombatStyle.MAGIC;
break;
}
}
switch(style) {
case MAGIC:
attacker.playAnimation(Animation.create(6947));
attacker.playGraphics(Graphic.create(1, 0, 1212));
for (final Player near : World.getWorld().getPlayers()) {
if (Misc.getDistance(near.getLocation(),
attacker.getLocation()) < 10) {
attacker.playProjectile(Projectile.create(attacker
.getCentreLocation(), near.getCentreLocation(),
1211, 45, 50, 80, 60, 25, near
.getProjectileLockonIndex(), 5, 48));
}
}
hitDelay = 2;
blockAnimation = true;
if (victim.getCombatState().getPrayer(Prayers.PROTECT_FROM_MAGIC)) {
maxHit = 0;
} else {
maxHit = 30;
}
randomHit = Misc.random(maxHit);
hit = randomHit;
World.getWorld().submit(new Tickable(2) {
@Override
public void execute() {
stop();
for (final Player near : World.getWorld().getPlayers()) {
if (near != null
&& near != attacker
&& near != victim
&& near.getSkills().getLevel(Skills.HITPOINTS) > 0) {
if (Misc.getDistance(near.getLocation(),
attacker.getLocation()) < 10) {
near.playGraphics(Graphic.create(1200));
int hitz = hit;
if (near.getCombatState().getPrayer(
Prayers.PROTECT_FROM_MAGIC)) {
hitz = (int) (hitz * 0.4);
}
hitz = Misc.random(hitz);
near.inflictDamage(
new Hit(hitz > 0 ? HitType.NORMAL_HIT
: HitType.ZERO_DAMAGE_HIT, hitz),
near);
}
}
}
}
});
if (victim.getCombatState().getPrayer(Prayers.PROTECT_FROM_MAGIC)) {
maxHit = (int) (maxHit * 0.0);
}
randomHit = Misc.random(maxHit);
if (randomHit > victim.getSkills().getLevel(Skills.HITPOINTS)) {
randomHit = victim.getSkills().getLevel(Skills.HITPOINTS);
}
break;
default:
case MELEE:
attacker.playAnimation(attacker.getAttackAnimation());
hitDelay = 1;
blockAnimation = true;
maxHit = npc.getCombatDefinition().getMaxHit();
int specialAttack = Misc.random(4);
if (specialAttack == 2) {
int prayer = 0;
int ignorePrayerMaxHit = 49;
int amountToDrain = (int) (ignorePrayerMaxHit * 0.05);
ignorePrayerMaxHit = (int) (ignorePrayerMaxHit * 1);
damage = damage(ignorePrayerMaxHit, attacker, victim, attacker.getCombatState().getAttackType(), Skills.ATTACK , prayer, false, false);
victim.getActionSender().sendMessage("K'ril Tsutsaroth slams through your protection prayer, leaving you feeling drained.");
victim.getSkills().decreasePrayerPoints(amountToDrain);
} else {
damage = damage(maxHit, attacker, victim, attacker.getCombatState().getAttackType(), Skills.ATTACK , Prayers.PROTECT_FROM_MELEE, false, false);
}
randomHit = random.nextInt(damage < 1 ? 1 : damage + 1);
if(randomHit > victim.getSkills().getLevel(Skills.HITPOINTS)) {
randomHit = victim.getSkills().getLevel(Skills.HITPOINTS);
}
hit = randomHit;
break;
}
attacker.getCombatState().setAttackDelay(4);
attacker.getCombatState().setSpellDelay(4);
World.getWorld().submit(new Tickable(hitDelay) {
@Override
public void execute() {
victim.inflictDamage(new Hit(hit), attacker);
smite(attacker, victim, hit);
recoil(attacker, victim, hit);
this.stop();
}
});
vengeance(attacker, victim, hit, 1);
victim.getActiveCombatAction().defend(attacker, victim, blockAnimation);
}
@Override
public int distance(Mob attacker) {
return 5;
}
}
Code:
public String getName() {
if(getId() == 6222) {
name = "KreeArra";
}
if(getId() == 6203) {
name = "KrilTsutsaroth";
}
return name;
}
Code:
<entry>
<int>6247</int> //Saradmoin Boss(commander zilyanna)
<CombatDefinition>
<maxHit>31</maxHit>
<combatCooldownDelay>8</combatCooldownDelay>
<respawnTicks>200</respawnTicks>
<aggressive>true</aggressive>
<attack>
<id>6964</id>
<delay>0</delay>
</attack>
<defend>
<id>6966</id>
<delay>0</delay>
</defend>
<death>
<id>6965</id>
<delay>0</delay>
</death>
<attackType>CRUSH</attackType>
<combatStyle>ACCURATE</combatStyle>
<combatActionType>CUSTOM</combatActionType>
<skills>
<entry>
<skill>ATTACK</skill>
<int>75</int>
</entry>
<entry>
<skill>MAGIC</skill>
<int>75</int>
</entry>
<entry>
<skill>DEFENCE</skill>
<int>75</int>
</entry>
<entry>
<skill>HITPOINTS</skill>
<int>255</int>
</entry>
</skills>
<bonuses>
<int>190</int>
<int>190</int>
<int>190</int>
<int>190</int>
<int>190</int>
<int>190</int>
<int>190</int>
<int>190</int>
<int>190</int>
<int>190</int>
<int>190</int>
<int>0</int>
<int>0</int>
</bonuses>
<constantDrops>
</constantDrops>
<randomDrops/>
</CombatDefinition>
</entry>
<entry>
<int>6250</int> //Growler
<CombatDefinition>
<maxHit>20</maxHit>
<combatCooldownDelay>5</combatCooldownDelay>
<respawnTicks>200</respawnTicks>
<aggressive>true</aggressive>
<spell>SARADOMIN_GROWLER</spell>
<attack>
<id>7019</id>
<delay>0</delay>
</attack>
<defend>
<id>7017</id>
<delay>0</delay>
</defend>
<death>
<id>7016</id>
<delay>0</delay>
</death>
<attackType>MAGIC</attackType>
<combatStyle>AUTOCAST</combatStyle>
<combatActionType>MAGE</combatActionType>
<skills>
<entry>
<skill>ATTACK</skill>
<int>99</int>
</entry>
<entry>
<skill>DEFENCE</skill>
<int>60</int>
</entry>
<entry>
<skill>HITPOINTS</skill>
<int>150</int>
</entry>
</skills>
<bonuses>
<int>120</int>
<int>120</int>
<int>120</int>
<int>120</int>
<int>120</int>
<int>95</int>
<int>95</int>
<int>95</int>
<int>95</int>
<int>95</int>
<int>95</int>
<int>0</int>
<int>0</int>
</bonuses>
<constantDrops>
</constantDrops>
<randomDrops/>
</CombatDefinition>
</entry>
<entry>
<int>6222</int>
<CombatDefinition>
<maxHit>20</maxHit>
<combatCooldownDelay>6</combatCooldownDelay>
<aggressive>true</aggressive>
<godWarsTeam>ARMADYL</godWarsTeam>
<projectileId>1197</projectileId>
<attack>
<id>6976</id>
<delay>0</delay>
</attack>
<defend>
<id>6974</id>
<delay>0</delay>
</defend>
<death>
<id>6975</id>
<delay>0</delay>
</death>
<attackType>RANGE</attackType>
<combatStyle>AGGRESSIVE_1</combatStyle>
<combatActionType>CUSTOM</combatActionType>
<skills>
<entry>
<skill>ATTACK</skill>
<int>140</int>
</entry>
<entry>
<skill>MAGIC</skill>
<int>120</int>
</entry>
<entry>
<skill>RANGE</skill>
<int>300</int>
</entry>
<entry>
<skill>DEFENCE</skill>
<int>250</int>
</entry>
<entry>
<skill>HITPOINTS</skill>
<int>255</int>
</entry>
</skills>
<bonuses>
<int>140</int>
<int>140</int>
<int>140</int>
<int>140</int>
<int>140</int>
<int>120</int>
<int>120</int>
<int>120</int>
<int>120</int>
<int>120</int>
<int>120</int>
<int>0</int>
<int>0</int>
</bonuses>
<constantDrops>
<npcdrop>
<frequency>1.0</frequency>
<item>
<id>536</id>
<count>1</count>
</item>
</npcdrop>
</constantDrops>
<randomDrops/>
</CombatDefinition>
</entry>
<entry>
<int>6263</int>
<CombatDefinition>
<maxHit>30</maxHit>
<combatCooldownDelay>4</combatCooldownDelay>
<respawnTicks>200</respawnTicks>
<aggressive>true</aggressive>
<godWarsTeam>BANDOS</godWarsTeam>
<spell>BANDOS_MINION_STEELWILL</spell>
<attack>
<id>7027</id>
<delay>0</delay>
</attack>
<defend>
<id>6155</id>
<delay>0</delay>
</defend>
<death>
<id>6156</id>
<delay>0</delay>
</death>
<attackType>MAGIC</attackType>
<combatStyle>AUTOCAST</combatStyle>
<combatActionType>MAGE</combatActionType>
<skills>
<entry>
<skill>ATTACK</skill>
<int>100</int>
</entry>
<entry>
<skill>MAGIC</skill>
<int>100</int>
</entry>
<entry>
<skill>DEFENCE</skill>
<int>100</int>
</entry>
<entry>
<skill>HITPOINTS</skill>
<int>150</int>
</entry>
</skills>
<bonuses>
<int>170</int>
<int>170</int>
<int>170</int>
<int>170</int>
<int>170</int>
<int>175</int>
<int>175</int>
<int>175</int>
<int>175</int>
<int>175</int>
<int>175</int>
<int>0</int>
<int>0</int>
</bonuses>
<constantDrops>
</constantDrops>
<randomDrops/>
</CombatDefinition>
</entry>
<entry>
<int>6260</int> //grad
<CombatDefinition>
<maxHit>55</maxHit>
<combatCooldownDelay>5</combatCooldownDelay>
<respawnTicks>200</respawnTicks>
<aggressive>true</aggressive>
<godWarsTeam>BANDOS</godWarsTeam>
<attack>
<id>7060</id>
<delay>0</delay>
</attack>
<defend>
<id>7061</id>
<delay>0</delay>
</defend>
<death>
<id>7062</id>
<delay>0</delay>
</death>
<attackType>CRUSH</attackType>
<combatStyle>ACCURATE</combatStyle>
<combatActionType>CUSTOM</combatActionType>
<skills>
<entry>
<skill>ATTACK</skill>
<int>200</int>
</entry>
<entry>
<skill>RANGE</skill>
<int>200</int>
</entry>
<entry>
<skill>MAGIC</skill>
<int>70</int>
</entry>
<entry>
<skill>DEFENCE</skill>
<int>99</int>
</entry>
<entry>
<skill>HITPOINTS</skill>
<int>240</int>
</entry>
</skills>
<bonuses>
<int>190</int>
<int>190</int>
<int>190</int>
<int>190</int>
<int>190</int>
<int>190</int>
<int>190</int>
<int>190</int>
<int>190</int>
<int>190</int>
<int>190</int>
<int>0</int>
<int>0</int>
</bonuses>
<constantDrops>
<npcdrop>
<frequency>1.0</frequency>
<item>
<id>526</id>
<count>1</count>
</item>
</npcdrop>
</constantDrops>
<randomDrops>
<npcdrop>
<frequency>0.01</frequency>
<item>
<id>11724</id>
<count>1</count>
</item>
</npcdrop>
<npcdrop>
<frequency>0.01</frequency>
<item>
<id>11726</id>
<count>1</count>
</item>
</npcdrop>
<npcdrop>
<frequency>0.01</frequency>
<item>
<id>11728</id>
<count>1</count>
</item>
</npcdrop>
<npcdrop>
<frequency>0.01</frequency>
<item>
<id>11704</id>
<count>1</count>
</item>
</npcdrop>
<npcdrop>
<frequency>0.01</frequency>
<item>
<id>11690</id>
<count>1</count>
</item>
</npcdrop>
<npcdrop>
<frequency>0.2</frequency>
<item>
<id>454</id>
<count>120</count>
</item>
</npcdrop>
<npcdrop>
<frequency>0.3</frequency>
<item>
<id>450</id>
<count>20</count>
</item>
</npcdrop>
<npcdrop>
<frequency>0.3</frequency>
<item>
<id>1513</id>
<count>20</count>
</item>
</npcdrop>
<npcdrop>
<frequency>0.4</frequency>
<item>
<id>1139</id>
<count>1</count>
</item>
</npcdrop>
<npcdrop>
<frequency>0.3</frequency>
<item>
<id>561</id>
<count>350</count>
</item>
</npcdrop>
<npcdrop>
<frequency>0.5</frequency>
<item>
<id>385</id>
<count>4</count>
</item>
</npcdrop>
<npcdrop>
<frequency>0.3</frequency>
<item>
<id>3024</id>
<count>4</count>
</item>
</npcdrop>
</randomDrops>
</CombatDefinition>
</entry>
<entry>
<int>6203</int> //Zamora boss K'ril Tsutsaroth
<CombatDefinition>
<maxHit>46</maxHit>
<combatCooldownDelay>5</combatCooldownDelay>
<respawnTicks>200</respawnTicks>
<aggressive>true</aggressive>
<attack>
<id>6954</id>
<delay>0</delay>
</attack>
<defend>
<id>6944</id>
<delay>0</delay>
</defend>
<death>
<id>6946</id>
<delay>0</delay>
</death>
<attackType>CRUSH</attackType>
<combatStyle>ACCURATE</combatStyle>
<combatActionType>CUSTOM</combatActionType>
<skills>
<entry>
<skill>ATTACK</skill>
<int>75</int>
</entry>
<entry>
<skill>MAGIC</skill>
<int>75</int>
</entry>
<entry>
<skill>DEFENCE</skill>
<int>75</int>
</entry>
<entry>
<skill>HITPOINTS</skill>
<int>255</int>
</entry>
</skills>
<bonuses>
<int>190</int>
<int>190</int>
<int>190</int>
<int>190</int>
<int>190</int>
<int>190</int>
<int>190</int>
<int>190</int>
<int>190</int>
<int>190</int>
<int>190</int>
<int>0</int>
<int>0</int>
</bonuses>
<constantDrops>
</constantDrops>
<randomDrops/>
</CombatDefinition>
</entry>
Code:
function bandosSteelWill(attacker, victim, spell, autocast, clientSpeed, magicCombatAction, gfxDelay, delay) {
attacker.playAnimation(Animation.create(7027));
attacker.playGraphics(Graphic.create(1202));
attacker.playProjectile(Projectile.create(attacker.getCentreLocation(), victim.getCentreLocation(), 1203, 45, 50, 80, 30, 30, victim.getProjectileLockonIndex(), 0, 48));
magicCombatAction.hitEnemy(attacker, victim, spell, Graphic.create(1204, 100, 100), PoisonType.NONE, false, 4, 1, 0);
attacker.getCombatState().setSpellDelay(6);
attacker.getCombatState().setAttackDelay(4);
}
function saradominGrowler(attacker, victim, spell, autocast, clientSpeed, magicCombatAction, gfxDelay, delay) {
attacker.playAnimation(Animation.create(7019));
attacker.playGraphics(Graphic.create(1184));
attacker.playProjectile(Projectile.create(attacker.getCentreLocation(), victim.getCentreLocation(), 1185, 35, 50, 80, 5, 8, victim.getProjectileLockonIndex(), 0, 48));
magicCombatAction.hitEnemy(attacker, victim, spell, Graphic.create(1184, 100, 50), PoisonType.NONE, false, 4, 1, 0);
attacker.getCombatState().setSpellDelay(6);
attacker.getCombatState().setAttackDelay(4);
}
Code:
/**
* Bandos spiritual mage
*/
SARADOMIN_GROWLER(900, 1, SpellBook.MODERN_MAGICS,
SpellType.COMBAT, new Item[] {}, "saradominGrowler", null),
/**
* Bandos minion steelwill
*/
BANDOS_MINION_STEELWILL(900, 1, SpellBook.MODERN_MAGICS,
SpellType.COMBAT, new Item[] {}, "bandosSteelWill", null)
Code:
ARMADYL_GRAPPLE(26303, Location.create(0, 0, 0), 1, 0, "armadylGrapple"),
Code:
function armadylGrapple(player, obstacle, object) {
var dir = 0;
y = 10;
if(player.getLocation().getY() > 5269) {
dir = 2;
y = -10;
}
var forceMovementVars = [ 0, 0, 0, y, 90, 150, dir, 4 ];
Agility.forceMovement(player, Animation.create(7081), forceMovementVars, 3, true);
}
Code:
package org.rs2server.rs2.model.skills.impl;
import org.rs2server.rs2.event.Event;
import org.rs2server.rs2.model.Animation;
import org.rs2server.rs2.model.Graphic;
import org.rs2server.rs2.model.Location;
import org.rs2server.rs2.model.Player;
import org.rs2server.rs2.model.Skills;
import org.rs2server.rs2.model.World;
import org.rs2server.rs2.model.skills.Agility;
/**
* Performs the zamorak bridge in Godwars.
*
* @author iBucky and Organic
*
*/
public class ZamorakBridge {
private static final String startMessage = "You jump into the icy cold water.";
private static final String endMessage = "You climb out of the water safely.";
private static final int jumpGFX = 68;
private static final int jumpAnimation = 772;
public static void performAction(final Player player) {
if (player.getSkills().getLevel(Skills.HITPOINTS) < 70) {
player.getActionSender().sendMessage(
"You need a Hitpoints level of 70 to swim across.");
} else {
player.playAnimation(Animation.create (3067));
World.getWorld().submit(new Event(595) {
@Override
public void execute() {
if (player.getLocation().getY() < 5340) {
player.getActionSender().sendMessage(startMessage);
player.setTeleportTarget(Location.create(2885, 5335, 2));
player.playGraphics(Graphic.create(jumpGFX));
player.playAnimation(Animation.create (jumpAnimation));
stop();
} else if (player.getLocation().getY() > 5340) {
player.getActionSender().sendMessage(startMessage);
player.setTeleportTarget(Location.create(2885, 5342, 2));
player.playGraphics(Graphic.create (jumpGFX));
player.playAnimation(Animation.create (jumpAnimation));
stop();
}
}
});
World.getWorld().submit(new Event(900) {
@Override
public void execute() {
int y = 0;
int swimEmote = 6989;
if (player.getLocation().getY() < 5340) {
y = 5343;
} else if (player.getLocation().getY() > 5340) {
y = 5334;
}
Agility.forceWalkingQueue(player, Animation.create(swimEmote), 2885, y,
0, 12, true);
stop();
}
});
World.getWorld().submit(new Event(7800) {
@Override
public void execute() {
if (player.getLocation().getY() < 5340) {
player.getActionSender().sendMessage(endMessage);
player.setTeleportTarget(Location.create(2885, 5333, 2));
stop();
} else {
player.getActionSender().sendMessage(endMessage);
player.setTeleportTarget(Location.create(2885, 5345, 2));
stop();
}
}
});
}
}
}
Code:
case 26303:
Item weapon = player.getEquipment().get(Equipment.SLOT_WEAPON);
EquipmentDefinition weaponEquipDef = weapon
.getEquipmentDefinition();
BowType bowType = weaponEquipDef.getBowType();
if (player.getSkills().getLevel(Skills.RANGE) < 70) {
player.getActionSender().sendMessage("You need a range level of 70 to swing across.");
} else if (player.getInventory().getCount(9418) < 1) {
player
.getActionSender()
.sendMessage(
"You need a mithril grapple to swing across.");
return;
} else if (bowType != BowType.RUNE_CBOW) {
player.getActionSender().sendMessage("You need a rune crossbow to swing across");
return;
} else {
Agility.tackleObstacle(player,
Obstacle.ARMADYL_GRAPPLE, obj);
player.getActionSender().sendMessage("You fire your mithril grapple over the pillar and swing across.");
}
break;
case 26439:
ZamorakBridge.performAction(player);
break;
case 26445:
if(player.getInventory().getCount(954) < 1) {
player.getActionSender().sendMessage("You need a rope to climb down this obstacle.");
} else if(player.getSkills().getLevel(Skills.AGILITY) < 70) {
player.getActionSender().sendMessage("You need at least 70 agility to climb down this obstacle");
} else {
player.getActionSender().sendMessage("You quickly attach the rope and climb down.");
final Location TELEPORT_LOCATION = Location.create(2920, 5274, 0);
player.setTeleportTarget(TELEPORT_LOCATION);
}
break;
It really shouldn't be too hard to figure out where everything goes, if im missing something please let me know.
Please enjoy. Comment and constructive criticism are more than welcome.