Bom Vamos Comecar. (Obs : Se achar dificil achar os lugares baixe o Eclipse, Para o Source nao para o Client.
Primeiro Abra Nex.java, e procure por :
- CÓDIGO:
setNextForceTalk(new ForceTalk("NOW, THE POWER OF ZAROS!"));
Substitua isso Por :
- CÓDIGO:
setNextAnimation(new Animation(17410));
Agora vá para NexCombat.java e tiro tudo oque esta lá e Ponha :
- CÓDIGO:
package com.rs.game.npc.combat.impl;
import java.util.ArrayList;
import java.util.HashMap;
import com.rs.cache.loaders.NPCDefinitions;
import com.rs.game.Animation;
import com.rs.game.Entity;
import com.rs.game.ForceMovement;
import com.rs.game.ForceTalk;
import com.rs.game.Graphics;
import com.rs.game.Hit;
import com.rs.game.Hit.HitLook;
import com.rs.game.World;
import com.rs.game.WorldObject;
import com.rs.game.WorldTile;
import com.rs.game.npc.NPC;
import com.rs.game.npc.combat.CombatScript;
import com.rs.game.npc.combat.NPCCombatDefinitions;
import com.rs.game.npc.godwars.zaros.Nex;
import com.rs.game.player.Player;
import com.rs.game.player.cutscenes.NexCutScene;
import com.rs.game.tasks.WorldTask;
import com.rs.game.tasks.WorldTasksManager;
import com.rs.utils.Utils;
public class NexCombat extends CombatScript {
@Override
public Object[] getKeys() {
return new Object[] {
"Nex"
};
}
public WorldTile[] NO_ESCAPE_TELEPORTS = {
new WorldTile(2924, 5213, 0), // north
new WorldTile(2934, 5202, 0), // east,
new WorldTile(2924, 5192, 0), // south
new WorldTile(2913, 5202, 0),
}; // west
@Override
public int attack(final NPC npc, final Entity target) {
final NPCCombatDefinitions defs = npc.getCombatDefinitions();
final Nex nex = (Nex) npc;
int size = npc.getSize();
// attacks close only
if (nex.isFollowTarget()) {
int distanceX = target.getX() - npc.getX();
int distanceY = target.getY() - npc.getY();
if (distanceX > size || distanceX < -1 || distanceY > size || distanceY < -1) return 0;
nex.setFollowTarget(Utils.getRandom(1) == 0);
// first stage close attacks
if (nex.getAttacksStage() == 0) {
// virus 1/3 probability every 1min
if (nex.getLastVirus() < Utils.currentTimeMillis() && Utils.getRandom(2) == 0) {
nex.setLastVirus(Utils.currentTimeMillis() + 60000);
npc.setNextForceTalk(new ForceTalk("Let the virus flow through you."));
nex.playSound(3296, 2);
npc.setNextAnimation(new Animation(17413));
nex.sendVirusAttack(new ArrayList < Entity > (),
npc.getPossibleTargets(), target);
return defs.getAttackDelay();
}
}
// no escape, 1/10 probability doing it
if (Utils.getRandom(nex.getStage() == 4 ? 5 : 10) == 0) {
npc.setNextForceTalk(new ForceTalk("There is..."));
nex.playSound(3294, 2);
npc.setCantInteract(true);
npc.getCombat().removeTarget();
final int idx = Utils.random(NO_ESCAPE_TELEPORTS.length);
final WorldTile dir = NO_ESCAPE_TELEPORTS[idx];
final WorldTile center = new WorldTile(2924, 5202, 0);
WorldTasksManager.schedule(new WorldTask() {
private int count;
@Override
public void run() {
if (count == 0) {
npc.setNextAnimation(new Animation(17411));
npc.setNextGraphics(new Graphics(1216));
} else if (count == 1) {
nex.setNextWorldTile(dir);
nex.setNextForceTalk(new ForceTalk("NO ESCAPE!"));
nex.playSound(3292, 2);
nex.setNextForceMovement(new ForceMovement(dir, 1,
center, 3, idx == 3 ? 1 : idx == 2 ? 0 : idx == 1 ? 3 : 2));
for (Entity entity: nex.calculatePossibleTargets(
center, dir, idx == 0 || idx == 2)) {
if (entity instanceof Player) {
Player player = (Player) entity;
player.getCutscenesManager().play(
new NexCutScene(dir, idx));
player.applyHit(new Hit(
npc,
Utils.getRandom(nex.getStage() == 4 ? 800 : 650),
HitLook.REGULAR_DAMAGE));
player.setNextAnimation(new Animation(17408));
player.setNextForceMovement(new ForceMovement(
player, 1, idx == 3 ? 3 : idx == 2 ? 2 : idx == 1 ? 1 : 0));
}
}
} else if (count == 3) {
nex.setNextWorldTile(center);
} else if (count == 4) {
nex.setTarget(target);
npc.setCantInteract(false);
stop();
}
count++;
}
}, 0, 1);
return defs.getAttackDelay();
}
// normal melee attack
int damage = getRandomMaxHit(npc, defs.getMaxHit(),
NPCCombatDefinitions.MELEE, target);
delayHit(npc, 0, target, getMeleeHit(npc, damage));
npc.setNextAnimation(new Animation(defs.getAttackEmote()));
return defs.getAttackDelay();
// far attacks
} else {
nex.setFollowTarget(Utils.getRandom(1) == 0);
// drag a player to center
if (Utils.getRandom(15) == 0) {
int distance = 0;
Entity settedTarget = null;
for (Entity t: npc.getPossibleTargets()) {
if (t instanceof Player) {
int thisDistance = Utils.getDistance(t.getX(),
t.getY(), npc.getX(), npc.getY());
if (settedTarget == null || thisDistance > distance) {
distance = thisDistance;
settedTarget = t;
}
}
}
if (settedTarget != null && distance > 10) {
final Player player = (Player) settedTarget;
player.lock(3);
player.setNextAnimation(new Animation(17408));
player.setNextForceMovement(new ForceMovement(nex, 2, Utils.getMoveDirection(
npc.getCoordFaceX(player.getSize()) - player.getX(),
npc.getCoordFaceY(player.getSize()) - player.getY())));
npc.setNextAnimation(new Animation(17414));
npc.setTarget(player);
player.setNextAnimation(new Animation(17408));
WorldTasksManager.schedule(new WorldTask() {@Override
public void run() {
player.setNextWorldTile(nex);
player.getPackets()
.sendGameMessage("You've been injured and you can't use protective curses!");
player.setPrayerDelay(Utils.getRandom(20000) + 5); // random
// 20
// seconds
player.getPackets().sendGameMessage("You're stunned.");
}
});
return defs.getAttackDelay();
}
}
// first stage close attacks
if (nex.getAttacksStage() == 0) {
npc.setNextAnimation(new Animation(17413));
for (Entity t: npc.getPossibleTargets()) {
World.sendProjectile(npc, t, 471, 41, 16, 41, 35, 16, 0);
int damage = getRandomMaxHit(npc, defs.getMaxHit(),
NPCCombatDefinitions.MAGE, t);
delayHit(npc, 1, t, getMagicHit(npc, damage));
if (damage > 0 && Utils.getRandom(5) == 0) // 1/6
// probability
// poisoning
t.getPoison().makePoisoned(80);
}
return defs.getAttackDelay();
} else if (nex.getAttacksStage() == 1) {
if (!nex.isEmbracedShadow()) {
nex.setEmbracedShadow(true);
npc.setNextForceTalk(new ForceTalk("Embrace darkness!"));
nex.playSound(3322, 2);
npc.setNextAnimation(new Animation(17412));
npc.setNextGraphics(new Graphics(1217));
WorldTasksManager.schedule(new WorldTask() {@Override
public void run() {
if (nex.getAttacksStage() != 1 || nex.hasFinished()) {
for (Entity entity: nex.getPossibleTargets()) {
if (entity instanceof Player) {
Player player = (Player) entity;
player.getPackets().sendGlobalConfig(
1435, 255);
}
}
stop();
return;
}
if (Utils.getRandom(2) == 0) {
for (Entity entity: nex.getPossibleTargets()) {
if (entity instanceof Player) {
Player player = (Player) entity;
int distance = Utils.getDistance(
player.getX(), player.getY(),
npc.getX(), npc.getY());
if (distance > 30) distance = 30;
player.getPackets().sendGlobalConfig(
1435, (distance * 255 / 30));
}
}
}
}
}, 0, 0);
return defs.getAttackDelay();
}
if (!nex.isTrapsSettedUp() && Utils.getRandom(2) == 0) {
nex.setTrapsSettedUp(true);
npc.setNextForceTalk(new ForceTalk("Fear the Shadow!"));
nex.playSound(3314, 2);
npc.setNextAnimation(new Animation(17407));
npc.setNextGraphics(new Graphics(1215));
ArrayList < Entity > possibleTargets = nex.getPossibleTargets();
final HashMap < String, int[] > tiles = new HashMap < String, int[] > ();
for (Entity t: possibleTargets) {
String key = t.getX() + "_" + t.getY();
if (!tiles.containsKey(t.getX() + "_" + t.getY())) {
tiles.put(key, new int[] {
t.getX(), t.getY()
});
World.spawnTemporaryObject(new WorldObject(57261,
10, 0, t.getX(), t.getY(), 0), 2400);
}
}
WorldTasksManager.schedule(new WorldTask() {
private boolean firstCall;
@Override
public void run() {
if (!firstCall) {
ArrayList < Entity > possibleTargets = nex.getPossibleTargets();
for (int[] tile: tiles.values()) {
World.sendGraphics(null, new Graphics(383),
new WorldTile(tile[0], tile[1], 0));
for (Entity t: possibleTargets)
if (t.getX() == tile[0] && t.getY() == tile[1]) t.applyHit(new Hit(npc, Utils.getRandom(400) + 400,
HitLook.REGULAR_DAMAGE));
}
firstCall = true;
} else {
nex.setTrapsSettedUp(false);
stop();
}
}
}, 3, 3);
return defs.getAttackDelay();
}
npc.setNextAnimation(new Animation(17413));
for (final Entity t: npc.getPossibleTargets()) {
int distance = Utils.getDistance(t.getX(), t.getY(),
npc.getX(), npc.getY());
if (distance <= 10) {
int damage = 800 - (distance * 800 / 11);
World.sendProjectile(npc, t, 380, 41, 16, 41, 35, 16, 0);
delayHit(
npc,
1,
t,
getRangeHit(
npc,
getRandomMaxHit(npc, damage,
NPCCombatDefinitions.RANGE, t)));
WorldTasksManager.schedule(new WorldTask() {@Override
public void run() {
t.setNextGraphics(new Graphics(471));
}
}, 1);
}
}
return defs.getAttackDelay();
} else if (nex.getAttacksStage() == 2) {
if (Utils.getRandom(4) == 0 && target instanceof Player) {
npc.setNextForceTalk(new ForceTalk("I demand a blood sacrifice!"));
nex.playSound(3293, 2);
final Player player = (Player) target;
player.getAppearence().setGlowRed(true);
player.getPackets().sendGameMessage("Nex has marked you as a sacrifice, RUN!");
final int x = player.getX();
final int y = player.getY();
WorldTasksManager.schedule(new WorldTask() {@Override
public void run() {
player.getAppearence().setGlowRed(false);
if (x == player.getX() && y == player.getY()) {
player.getPackets()
.sendGameMessage("You didn't make it far enough in time - Nex fires a punishing attack!");
npc.setNextAnimation(new Animation(17413));
for (final Entity t: npc.getPossibleTargets()) {
World.sendProjectile(npc, t, 374, 41, 16,
41, 35, 16, 0);
final int damage = getRandomMaxHit(npc,
290, NPCCombatDefinitions.MAGE, t);
delayHit(npc, 1, t,
getMagicHit(npc, damage));
WorldTasksManager.schedule(new WorldTask() {@Override
public void run() {
t.setNextGraphics(new Graphics(376));
nex.heal(damage / 4);
if (t instanceof Player) {
Player p = (Player) t;
p.getPrayer()
.drainPrayerOnHalf();
}
}
}, 1);
}
}
}
}, defs.getAttackDelay());
return defs.getAttackDelay() * 2;
}
if (nex.getLastSiphon() < Utils.currentTimeMillis() && npc.getHitpoints() <= 18000 && Utils.getRandom(2) == 0) {
nex.setLastSiphon(Utils.currentTimeMillis() + 30000);
nex.killBloodReavers();
npc.setNextForceTalk(new ForceTalk("A siphon will solve this!"));
nex.playSound(3317, 2);
npc.setNextAnimation(new Animation(17409));
npc.setNextGraphics(new Graphics(1201));
nex.setDoingSiphon(true);
int bloodReaverSize = NPCDefinitions.getNPCDefinitions(13458).size;
int respawnedBloodReaverCount = 0;
int maxMinions = Utils.getRandom(3);
if (maxMinions != 0) {
int[][] dirs = Utils.getCoordOffsetsNear(bloodReaverSize);
for (int dir = 0; dir < dirs[0].length; dir++) {
final WorldTile tile = new WorldTile(new WorldTile(
target.getX() + dirs[0][dir], target.getY() + dirs[1][dir], target.getPlane()));
if (World.canMoveNPC(tile.getPlane(), tile.getX(),
tile.getY(), bloodReaverSize)) { // if found
// done
nex.getBloodReavers()[respawnedBloodReaverCount++] = new NPC(
13458, tile, - 1, true, true);
if (respawnedBloodReaverCount == maxMinions) break;
}
}
}
WorldTasksManager.schedule(new WorldTask() {@Override
public void run() {
nex.setDoingSiphon(false);
}
}, 8);
return defs.getAttackDelay();
}
npc.setNextAnimation(new Animation(17414));
World.sendProjectile(npc, target, 374, 41, 16, 41, 35, 16, 0);
delayHit(
npc,
1,
target,
getMagicHit(
npc,
getRandomMaxHit(npc, defs.getMaxHit(),
NPCCombatDefinitions.MAGE, target)));
return defs.getAttackDelay();
} else if (nex.getAttacksStage() == 3) {
npc.setNextAnimation(new Animation(17414));
for (final Entity t: npc.getPossibleTargets()) {
World.sendProjectile(npc, t, 362, 41, 16, 41, 35, 16, 0);
int damage = getRandomMaxHit(npc, defs.getMaxHit(),
NPCCombatDefinitions.MAGE, t);
delayHit(npc, 1, t, getMagicHit(npc, damage));
if (damage > 0 && Utils.getRandom(5) == 0) { // 1/6
// probability
// freezing
WorldTasksManager.schedule(new WorldTask() {@Override
public void run() {
t.addFreezeDelay(18000);
t.setNextGraphics(new Graphics(369));
}
}, 2);
}
}
return defs.getAttackDelay();
} else if (nex.getAttacksStage() == 4) {
npc.setNextAnimation(new Animation(17413));
for (Entity t: npc.getPossibleTargets()) {
World.sendProjectile(npc, t, 471, 41, 16, 41, 35, 16, 0);
int damage = getRandomMaxHit(npc, defs.getMaxHit(),
NPCCombatDefinitions.MAGE, t);
delayHit(npc, 1, t, getMagicHit(npc, damage));
}
return defs.getAttackDelay();
}
}
return defs.getAttackDelay();
}
}
Agora va Para ZarosGodwars e substitua tudo por :
- CÓDIGO:
package com.rs.game.minigames;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.concurrent.TimeUnit;
import com.rs.cores.CoresManager;
import com.rs.game.Animation;
import com.rs.game.Entity;
import com.rs.game.ForceTalk;
import com.rs.game.Graphics;
import com.rs.game.World;
import com.rs.game.WorldTile;
import com.rs.game.npc.godwars.zaros.Nex;
import com.rs.game.npc.godwars.zaros.NexMinion;
import com.rs.game.player.Player;
import com.rs.game.tasks.WorldTask;
import com.rs.game.tasks.WorldTasksManager;
import com.rs.utils.Utils;
public final class ZarosGodwars {
private static final List < Player > playersOn = Collections.synchronizedList(new ArrayList < Player > ());
// private static final Object LOCK = new Object();
public static Nex nex;
public static NexMinion fumus;
public static NexMinion umbra;
public static NexMinion cruor;
public static NexMinion glacies;
public static int getPlayersCount() {
return playersOn.size();
}
public static void breakFumusBarrier() {
// synchronized(LOCK) {
if (fumus == null) return;
fumus.breakBarrier();
// }
}
public static void breakUmbraBarrier() {
// synchronized(LOCK) {
if (umbra == null) return;
umbra.breakBarrier();
// }
}
public static void breakCruorBarrier() {
// synchronized(LOCK) {
if (cruor == null) return;
cruor.breakBarrier();
// }
}
public static void breakGlaciesBarrier() {
// synchronized(LOCK) {
if (glacies == null) return;
glacies.breakBarrier();
// }
}
public static void addPlayer(Player player) {
// synchronized(LOCK) {
if (playersOn.contains(player)) {
// System.out.println("ERROR DOUBLE ENTRY!");
return;
}
playersOn.add(player);
startWar();
// }
}
public static void removePlayer(Player player) {
// synchronized(LOCK) {
playersOn.remove(player);
cancelWar();
// }
}
public static void deleteNPCS() {
if (nex != null) {
nex.killBloodReavers();
nex.finish();
nex = null;
}
if (fumus != null) {
fumus.finish();
fumus = null;
}
if (umbra != null) {
umbra.finish();
umbra = null;
}
if (cruor != null) {
cruor.finish();
cruor = null;
}
if (glacies != null) {
glacies.finish();
glacies = null;
}
}
private static void cancelWar() {
if (getPlayersCount() == 0) deleteNPCS();
}
public static ArrayList < Entity > getPossibleTargets() {
// synchronized(LOCK) {
ArrayList < Entity > possibleTarget = new ArrayList < Entity > (
playersOn.size());
for (Player player: playersOn) {
if (player == null || player.isDead() || player.hasFinished() || !player.isRunning()) continue;
possibleTarget.add(player);
/*
* if (player.getFamiliar() != null &&
* player.getFamiliar().isAgressive())
* possibleTarget.add(player.getFamiliar());
*/
}
return possibleTarget;
// }
}
public static void moveNextStage() {
// synchronized(LOCK) {
if (nex == null) return;
nex.moveNextStage();
// }
}
public static void endWar() {
// synchronized(LOCK) {
deleteNPCS();
CoresManager.slowExecutor.schedule(new Runnable() {
@Override
public void run() {
startWar();
}
}, 1, TimeUnit.MINUTES);
// }
}
private static void startWar() {
if (getPlayersCount() >= 1) {
if (nex == null) {
World.spawnNPC(13447, new WorldTile(2924, 5202, 0), - 1, true,
true);
WorldTasksManager.schedule(new WorldTask() {
private int count = 0;
@Override
public void run() {
// synchronized(LOCK) {
if (nex == null) {
stop();
return;
}
if (count == 1) {
nex.setNextForceTalk(new ForceTalk("AT LAST!"));
nex.setNextAnimation(new Animation(17412));
nex.setNextGraphics(new Graphics(1217));
nex.playSound(3295, 2);
} else if (count == 3) {
World.spawnNPC(13451, new WorldTile(2913, 5215, 0), - 1, true, true);
fumus.setDirection(Utils.getFaceDirection(1, - 1));
nex.setNextFaceWorldTile(new WorldTile(fumus.getCoordFaceX(fumus.getSize()), fumus.getCoordFaceY(fumus.getSize()), 0));
nex.setNextForceTalk(new ForceTalk("Fumus!"));
nex.setNextAnimation(new Animation(17413));
World.sendProjectile(fumus, nex, 2244, 18, 18, 60,
30, 0, 0);
nex.playSound(3325, 2);
} else if (count == 5) {
World.spawnNPC(13452, new WorldTile(2937, 5215, 0), - 1, true, true);
umbra.setDirection(Utils.getFaceDirection(-1, - 1));
nex.setNextFaceWorldTile(new WorldTile(umbra.getCoordFaceX(umbra.getSize()), umbra.getCoordFaceY(umbra.getSize()), 0));
nex.setNextForceTalk(new ForceTalk("Umbra!"));
nex.setNextAnimation(new Animation(17413));
World.sendProjectile(umbra, nex, 2244, 18, 18, 60,
30, 0, 0);
nex.playSound(3313, 2);
} else if (count == 7) {
World.spawnNPC(13453, new WorldTile(2937, 5191, 0), - 1, true, true);
cruor.setDirection(Utils.getFaceDirection(-1, 1));
nex.setNextFaceWorldTile(new WorldTile(cruor.getCoordFaceX(cruor.getSize()), cruor.getCoordFaceY(cruor.getSize()), 0));
nex.setNextForceTalk(new ForceTalk("Cruor!"));
nex.setNextAnimation(new Animation(17413));
World.sendProjectile(cruor, nex, 2244, 18, 18, 60,
30, 0, 0);
nex.playSound(3299, 2);
} else if (count == 9) {
World.spawnNPC(13454, new WorldTile(2913, 5191, 0), - 1, true, true);
glacies.setNextFaceWorldTile(new WorldTile(glacies.getCoordFaceX(glacies.getSize()), glacies.getCoordFaceY(glacies.getSize()), 0));
glacies.setDirection(Utils.getFaceDirection(1, 1));
nex.setNextFaceWorldTile(new WorldTile(glacies.getCoordFaceX(glacies.getSize()), glacies.getCoordFaceY(glacies.getSize()), 0));
nex.setNextForceTalk(new ForceTalk("Glacies!"));
nex.setNextAnimation(new Animation(17413));
World.sendProjectile(glacies, nex, 2244, 18, 18,
60, 30, 0, 0);
nex.playSound(3304, 2);
} else if (count == 11) {
nex.setNextForceTalk(new ForceTalk("Fill my soul with smoke!"));
World.sendProjectile(fumus, nex, 2244, 18, 18, 60,
30, 0, 0);
nex.playSound(3310, 2);
} else if (count == 13) {
nex.setCantInteract(false);
stop();
return;
}
count++;
}
// }
}, 0, 1);
}
}
}
private ZarosGodwars() {
}
}
Estamos Quase Lá!, Va para NPCCombat.java e procure por :
- CÓDIGO:
tile.getY() - npc.getY())));
Abaixo Disso ponha :
- CÓDIGO:
npc.setNextAnimation(new Animation(17408));
Caso Nao tenho os Anim do Nex, Geralmente tera mas caso nao tenha va para unpackedCombatDefinitionsList.txt e ponha isso :
- CÓDIGO:
//Nex - 1001
17407 17406 17415 5 3 150 369 SPECIAL -1 -1 AGRESSIVE
//Nex - 1001
17407 17406 17415 5 3 150 369 SPECIAL -1 -1 AGRESSIVE
//Nex - 1001
17407 17406 17415 5 3 150 369 SPECIAL -1 -1 AGRESSIVE
//Nex -1001
17407 17406 17415 5 3 150 369 SPECIAL -1 -1 AGRESSIVE
Delete o combate packed definitions nao o unpacked e clique para run seu server e o packed voltara com o Nex e seus anims
Antes que postem algo, nao fiz esse code hoje, nao e copia de ninguem e meu pois ja tive meu private server, e futuramente estarei postando mas coisas de Servervido Privado de runescape, estava acabando a roleta maluca mas estou com um bug na interface.
Bom E isso Ai, Valeu Pessoal.