Thread: Hyperion Godwar Bosses/Obstacles

Results 1 to 7 of 7
  1. #1 Hyperion Godwar Bosses and Obstacles 
    Shake n Bake

    Organic's Avatar
    Join Date
    Apr 2010
    Posts
    2,499
    Thanks given
    204
    Thanks received
    324
    Rep Power
    588
    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.

    Just live life at its fullest.

    LOL
    Reply With Quote  
     


  2. #2  
    Myre


    Join Date
    Apr 2012
    Age
    26
    Posts
    1,519
    Thanks given
    407
    Thanks received
    367
    Rep Power
    475
    Thank you for this, will use for later

    Spoiler for Spoiler:

    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;
    Reply With Quote  
     

  3. #3  
    Registered Member

    Join Date
    Jan 2013
    Posts
    583
    Thanks given
    343
    Thanks received
    146
    Rep Power
    163
    Great job buddy!

    I don't know what you heard about me
    But a pleb can't get a rep out of me
    No rep, no thanks, you can't see
    That I'm a mother****ing P - I - M - P

    Cool Cats
    Thakiller 🎺 Scu11 🎸 Tyler 🎷 Lare 🎤 ur nan
    Reply With Quote  
     

  4. #4  
    Shake n Bake

    Organic's Avatar
    Join Date
    Apr 2010
    Posts
    2,499
    Thanks given
    204
    Thanks received
    324
    Rep Power
    588
    Thanks

    Just live life at its fullest.

    LOL
    Reply With Quote  
     

  5. #5  
    Registered Member
    Shoutbox's Avatar
    Join Date
    Sep 2013
    Posts
    1,748
    Thanks given
    580
    Thanks received
    363
    Rep Power
    834
    Nice release Will most likely use
    S A D B O Y S

    私は自分自身を殺すために待つことができない
    Reply With Quote  
     

  6. #6  
    Banned
    Join Date
    Nov 2013
    Age
    28
    Posts
    433
    Thanks given
    465
    Thanks received
    69
    Rep Power
    0
    Thank-you for this.
    Reply With Quote  
     

  7. #7  
    Eric
    Guest
    Do you have the animation for the Zamorak Bridge by any chance?
    Reply With Quote  
     


Thread Information
Users Browsing this Thread

There are currently 1 users browsing this thread. (0 members and 1 guests)


User Tag List

Similar Threads

  1. 508 godwar boss emotes
    By WTFZ in forum Configuration
    Replies: 10
    Last Post: 10-08-2009, 09:09 AM
  2. Adding all Godwars Bosses!(my first tut)
    By Valkyrie07 in forum Configuration
    Replies: 74
    Last Post: 08-11-2009, 11:17 AM
  3. [req]K'ril Tsutaroth (Zamorak godwars boss)
    By `Lubricant in forum Requests
    Replies: 6
    Last Post: 07-24-2009, 08:10 PM
  4. GFX and emotes for godwars boss
    By Rowan112 in forum Requests
    Replies: 0
    Last Post: 05-28-2009, 07:08 AM
  5. Real Zammy Godwars boss
    By blood rush20 in forum Show-off
    Replies: 8
    Last Post: 01-21-2009, 09:44 PM
Posting Permissions
  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •