Rename & Repackage

This commit is contained in:
dark98
2021-03-11 00:21:56 +00:00
parent caa4625efa
commit 3bf473129d
1921 changed files with 2017 additions and 2010 deletions
@@ -0,0 +1,315 @@
package com.rs2;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.util.ArrayList;
import com.rs2.game.players.Player;
/**
* Connection Check Class
*
* @author Ryan / Lmctruck30
*/
public class Connection {
public static ArrayList<String> bannedIps = new ArrayList<String>();
public static ArrayList<String> bannedNames = new ArrayList<String>();
public static ArrayList<String> mutedIps = new ArrayList<String>();
public static ArrayList<String> mutedNames = new ArrayList<String>();
public static ArrayList<String> loginLimitExceeded = new ArrayList<String>();
/**
* Adds the banned usernames and ips from the text file to the ban list
**/
public static void initialize() {
banUsers();
banIps();
muteUsers();
muteIps();
}
/**
* Adding Name To List
*/
public static void addIpToLoginList(String IP) {
loginLimitExceeded.add(IP);
}
/**
* Remove Ip From List
*/
public static void removeIpFromLoginList(String IP) {
loginLimitExceeded.remove(IP);
}
/**
* Clear Name List
*/
public static void clearLoginList() {
loginLimitExceeded.clear();
}
public static boolean checkLoginList(String IP) {
loginLimitExceeded.add(IP);
int num = 0;
for (String ips : loginLimitExceeded) {
if (IP.equals(ips)) {
num++;
}
}
if (num > 5) {
return true;
}
return false;
}
public static void unMuteUser(String name) {
mutedNames.remove(name);
deleteFromFile("./data/bans/UsersMuted.txt", name);
}
public static void unIPMuteUser(String name) {
mutedIps.remove(name);
deleteFromFile("./data/bans/IpsMuted.txt", name);
}
/**
* Adding Ban IP
**/
public static void addIpToBanList(String IP) {
bannedIps.add(IP);
}
public static void addIpToMuteList(String IP) {
mutedIps.add(IP);
addIpToMuteFile(IP);
}
/**
* Removing Ban IP
**/
public static void removeIpFromBanList(String IP) {
bannedIps.remove(IP);
}
/**
* Contains Ban IP
**/
public static boolean isIpBanned(String IP) {
if (bannedIps.contains(IP)) {
return true;
}
return false;
}
/**
* Adding banned username
**/
public static void addNameToBanList(String name) {
bannedNames.add(name.toLowerCase());
}
public static void addNameToMuteList(String name) {
mutedNames.add(name.toLowerCase());
addUserToFile(name);
}
/**
* Removing banned username
**/
public static void removeNameFromBanList(String name) {
bannedNames.remove(name.toLowerCase());
deleteFromFile("./data/bans/UsersBanned.txt", name);
}
public static void removeNameFromMuteList(String name) {
bannedNames.remove(name.toLowerCase());
deleteFromFile("./data/bans/UsersMuted.txt", name);
}
public static void deleteFromFile(String file, String name) {
try {
BufferedReader r = new BufferedReader(new FileReader(file));
ArrayList<String> contents = new ArrayList<String>();
while (true) {
String line = r.readLine();
if (line == null) {
break;
} else {
line = line.trim();
}
if (!line.equalsIgnoreCase(name)) {
contents.add(line);
}
}
r.close();
BufferedWriter w = new BufferedWriter(new FileWriter(file));
for (String line : contents) {
w.write(line, 0, line.length());
w.newLine();
}
w.flush();
w.close();
} catch (Exception e) {
}
}
/**
* Contains banned username
**/
public static boolean isNamedBanned(String name) {
if (bannedNames.contains(name.toLowerCase())) {
return true;
}
return false;
}
/**
* Reads all usernames from text file then adds them all to the ban list
**/
public static void banUsers() {
try {
BufferedReader in = new BufferedReader(new FileReader(
"./data/bans/UsersBanned.txt"));
String data = null;
try {
while ((data = in.readLine()) != null) {
addNameToBanList(data);
}
} finally {
in.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
public static void muteUsers() {
try {
BufferedReader in = new BufferedReader(new FileReader(
"./data/bans/UsersMuted.txt"));
String data = null;
try {
while ((data = in.readLine()) != null) {
mutedNames.add(data);
}
} finally {
in.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
/**
* Reads all the Ips from text file then adds them all to ban list
**/
public static void banIps() {
try {
BufferedReader in = new BufferedReader(new FileReader(
"./data/bans/IpsBanned.txt"));
String data = null;
try {
while ((data = in.readLine()) != null) {
addIpToBanList(data);
}
} finally {
in.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
public static void muteIps() {
try {
BufferedReader in = new BufferedReader(new FileReader(
"./data/bans/IpsMuted.txt"));
String data = null;
try {
while ((data = in.readLine()) != null) {
mutedIps.add(data);
}
} finally {
in.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
/**
* Writes the username into the text file - when using the ::ban playername
* command
**/
public static void addNameToFile(String Name) {
try {
BufferedWriter out = new BufferedWriter(new FileWriter(
"./data/bans/UsersBanned.txt", true));
try {
out.newLine();
out.write(Name);
} finally {
out.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
public static void addUserToFile(String Name) {
try {
BufferedWriter out = new BufferedWriter(new FileWriter(
"./data/bans/UsersMuted.txt", true));
try {
out.newLine();
out.write(Name);
} finally {
out.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
/**
* Writes the IP into the text file - use ::ipban username
**/
public static void addIpToFile(String Name) {
try {
BufferedWriter out = new BufferedWriter(new FileWriter(
"./data/bans/IpsBanned.txt", true));
try {
out.newLine();
out.write(Name);
} finally {
out.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
public static void addIpToMuteFile(String Name) {
try {
BufferedWriter out = new BufferedWriter(new FileWriter("./data/bans/IpsMuted.txt", true));
try {
out.newLine();
out.write(Name);
} finally {
out.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
public static boolean isMuted(Player player) {
return mutedNames.contains(player.playerName.toLowerCase()) || mutedIps.contains(player.connectedFrom);
}
}
@@ -0,0 +1,84 @@
package com.rs2;
public class GameConstants {
public final static boolean SERVER_DEBUG = false;
public final static String SERVER_NAME = "2006Scape", SERVER_VERSION = "Server Stage v " + GameConstants.TEST_VERSION + ".";
public final static String WEBSITE_LINK = "https://2006Scape.org";
public final static double TEST_VERSION = 2.3;
public final static int ITEM_LIMIT = 15000, MAXITEM_AMOUNT = Integer.MAX_VALUE, CLIENT_VERSION = 999999,
WORLD = 1, IPS_ALLOWED = 250, CONNECTION_DELAY = 100,
MESSAGE_DELAY = 6000, MAX_PLAYERS = 200, REQ_AMOUNT = 150;
public final static boolean SOUND = true,
GUILDS = true, WORLD_LIST_FIX = false,
PARTY_ROOM_DISABLED = true,
PRINT_OBJECT_ID = false, EXPERIMENTS = false;
public static int[] SIDEBARS = { 2423, 3917, 638, 3213, 1644, 5608, 1151,
18128, 5065, 5715, 2449, 904, 147, 962 };
public static boolean TUTORIAL_ISLAND = false,
MEMBERS_ONLY = false, sendServerPackets = false,
CLUES_ENABLED = false;
public final static int[] FUN_WEAPONS = { 2460, 2461, 2462, 2463, 2464,
2465, 2466, 2467, 2468, 2469, 2470, 2471, 2471, 2473, 2474, 2475,
2476, 2477 }; // fun weapons for dueling
public static boolean ADMIN_CAN_TRADE = false; // can admins trade?
public final static boolean ADMIN_DROP_ITEMS = false;
public final static boolean ADMIN_CAN_SELL_ITEMS = false;
public final static int RESPAWN_X = 3222; // when dead respawn here
public final static int RESPAWN_Y = 3218;
public final static int DUELING_RESPAWN_X = 3362;
public final static int DUELING_RESPAWN_Y = 3263;
public final static int NO_TELEPORT_WILD_LEVEL = 20;
public final static boolean ITEM_REQUIREMENTS = true;
public final static int CASTLE_WARS_X = 2439;
public final static int CASTLE_WARS_Y = 3087;
public static double XP_RATE = 1;
public final static int SAVE_TIMER = 120; // save every 2 minute
public final static int NPC_RANDOM_WALK_DISTANCE = 5;
public final static int NPC_FOLLOW_DISTANCE = 10;
public final static String[] UNDEAD = {
"armoured zombie", "ankous", "banshee", "crawling hand", "dried zombie", "ghost", "ghostly warrior", "ghast",
"mummy", "mighty banshee", "reventant imp", "reventant goblin", "reventant icefiend", "reventant pyrefiend",
"reventant hobgoblin", "reventant vampyre", "reventant werewolf", "reventant cyclops", "reventant darkbeast",
"reventant demon", "reventant ork", "reventant hellhound", "reventant knight", "reventant dragon",
"shade", "skeleton", "skeleton brute", "skeleton thug", "skeleton warload", "summoned zombie",
"skorge", "tortured soul", "undead chicken", "undead cow", "undead one", "undead troll", "zombie", "zombie rat", "zogre"
};
public final static int TIMEOUT = 60;
public final static int CYCLE_TIME = 600;
public final static int BUFFER_SIZE = 10000;
public final static int ATTACK = 0, DEFENCE = 1, STRENGTH = 2,
HITPOINTS = 3, RANGED = 4, PRAYER = 5, MAGIC = 6, COOKING = 7,
WOODCUTTING = 8, FLETCHING = 9, FISHING = 10, FIREMAKING = 11,
CRAFTING = 12, SMITHING = 13, MINING = 14, HERBLORE = 15,
AGILITY = 16, THIEVING = 17, SLAYER = 18, FARMING = 19,
RUNECRAFTING = 20;
}
@@ -0,0 +1,294 @@
package com.rs2;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.net.InetSocketAddress;
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;
import com.rs2.game.bots.BotHandler;
import org.apache.mina.common.IoAcceptor;
import org.apache.mina.transport.socket.nio.SocketAcceptor;
import org.apache.mina.transport.socket.nio.SocketAcceptorConfig;
import com.rs2.event.CycleEventHandler;
import com.rs2.game.content.minigames.FightCaves;
import com.rs2.game.content.minigames.FightPits;
import com.rs2.game.content.minigames.PestControl;
import com.rs2.game.content.minigames.castlewars.CastleWars;
import com.rs2.game.content.minigames.trawler.Trawler;
import com.rs2.game.globalworldobjects.Doors;
import com.rs2.game.globalworldobjects.DoubleDoors;
import com.rs2.game.items.ItemDefinition;
import com.rs2.game.npcs.NpcHandler;
import com.rs2.game.players.Client;
import com.rs2.game.players.Player;
import com.rs2.game.players.PlayerHandler;
import com.rs2.game.players.PlayerSave;
import com.rs2.game.shops.ShopHandler;
import com.rs2.integrations.PlayersOnlineWebsite;
import com.rs2.integrations.RegisteredAccsWebsite;
import com.rs2.integrations.SettingsLoader;
import com.rs2.integrations.discord.DiscordActivity;
import com.rs2.integrations.discord.JavaCord;
import com.rs2.net.ConnectionHandler;
import com.rs2.net.ConnectionThrottleFilter;
import com.rs2.tick.Scheduler;
import com.rs2.tick.Tick;
import com.rs2.util.HostBlacklist;
import com.rs2.world.GlobalDropsHandler;
import com.rs2.world.ItemHandler;
import com.rs2.world.ObjectHandler;
import com.rs2.world.ObjectManager;
import com.rs2.world.clip.ObjectDefinition;
import com.rs2.world.clip.RegionFactory;
/**
* Server.java
*
* @author Sanity
* @author Graham
* @author Blake
* @author Ryan Lmctruck30
* @author Integration Julian.
*/
public class GameEngine {
private static long minutesCounter;
private static void startMinutesCounter() {
try {
minuteFile = new BufferedReader(new FileReader(
"./data/minutes.log"));
minutesCounter = Long.parseLong(minuteFile.readLine());
} catch (Exception e) {
e.printStackTrace();
}
}
private static void setMinutesCounter(long minutesCounter) {
try {
BufferedWriter minuteCounter = new BufferedWriter(new FileWriter(
"./data/minutes.log"));
minuteCounter.write(Long.toString(minutesCounter));
minuteCounter.close();
} catch (IOException e) {
e.printStackTrace();
}
}
public static long getMinutesCounter() {
long d = TimeUnit.MILLISECONDS.toMinutes(System.currentTimeMillis()
- minutesCounter);
return d;
}
private static final Scheduler scheduler2 = new Scheduler();
public static Scheduler getScheduler() {
return scheduler2;
}
public static void schedule(Tick tick) {
getScheduler().schedule(tick);
}
public static String ersSecret;
public static int[] cannonsX = new int [50];
public static int[] cannonsY = new int [50];
public static String[] cannonsO = new String [50];
public static boolean sleeping;
public static boolean updateServer = false;
public static long lastMassSave = System.currentTimeMillis();
private static IoAcceptor acceptor;
private static ConnectionHandler connectionHandler;
private static ConnectionThrottleFilter throttleFilter;
public static boolean shutdownServer = false;
public static int garbageCollectDelay = 40;
public static boolean shutdownClientHandler;
private static int serverlistenerPort;
public static ItemHandler itemHandler = new ItemHandler();
public static PlayerHandler playerHandler = new PlayerHandler();
public static NpcHandler npcHandler = new NpcHandler();
private static ShopHandler shopHandler = new ShopHandler();
public static ObjectHandler objectHandler = new ObjectHandler();
public static ObjectManager objectManager = new ObjectManager();
public static FightCaves fightCaves = new FightCaves();
private static PestControl pestControl = new PestControl();
public static Trawler trawler = new Trawler();
private final static ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(1);
private final static Lock lock = new ReentrantLock();
/**
* Port and Cycle rate.
*/
static {
serverlistenerPort = 43594;
shutdownServer = false;
}
public static void main(java.lang.String[] args)
throws NullPointerException, IOException {
System.out.println("Starting game engine..");
if (GameConstants.SERVER_DEBUG) {
System.out.println("@@@@ DEBUG MODE IS ENABLED @@@@");
}
if (!new File("data").exists())
{
System.out.println("************************************");
System.out.println("************************************");
System.out.println("************************************");
System.out.println("WARNING: I could not find the /data folder. You are LIKELY running this in the wrong directory!");
System.out.println("In IntelliJ, fix it by clicking \"Server\" > Edit Configurations at the top of your screen");
System.out.println("Then changing the \"Working Directory\" to be in \"2006Scape/2006Scape Server\", instead of just \"2006Scape\"");
System.out.println("************************************");
System.out.println("************************************");
System.out.println("************************************");
System.exit(1);
}
/**
* Starting Up Server
*/
System.out.println("Launching " + GameConstants.SERVER_NAME + "...");
/**
* Start Integration Services
**/
SettingsLoader.loadSettings();
JavaCord.init();
/**
* Accepting Connections
*/
acceptor = new SocketAcceptor();
connectionHandler = new ConnectionHandler();
SocketAcceptorConfig sac = new SocketAcceptorConfig();
sac.getSessionConfig().setTcpNoDelay(false);
sac.setReuseAddress(true);
sac.setBacklog(100);
throttleFilter = new ConnectionThrottleFilter(GameConstants.CONNECTION_DELAY);
sac.getFilterChain().addFirst("throttleFilter", throttleFilter);
acceptor.bind(new InetSocketAddress(serverlistenerPort), connectionHandler, sac);
/**
* Initialise Handlers
*/
ObjectDefinition.loadConfig();
RegionFactory.load();
Doors.getSingleton().load();
DoubleDoors.getSingleton().load();
ItemDefinition.read();
GlobalDropsHandler.initialize();
Connection.initialize();
HostBlacklist.loadBlacklist();
BotHandler.loadPlayerShops();
startMinutesCounter();
setMinutesCounter(minutesCounter);
/**
* Server Successfully Loaded
*/
System.out.println("Server listening on port " + serverlistenerPort);
/**
* Main Server Tick
*
* This scheduler will tick once every 600ms. If the previous tick takes
* 300ms to execute, this scheduler will wait 300ms only before the next
* tick.
*
* scheduleAtFixedRate() does not invoke concurrent Runnables.
*/
scheduler.scheduleAtFixedRate(new Runnable() {
public void run() {
/**
* Main Server Tick
*/
try {
if (GameEngine.shutdownServer) {
scheduler.shutdown();
}
itemHandler.process();
playerHandler.process();
npcHandler.process();
shopHandler.process();
objectManager.process();
CastleWars.process();
FightPits.process();
pestControl.process();
CycleEventHandler.getSingleton().process();
PlayersOnlineWebsite.addUpdatePlayersOnlineTask();
RegisteredAccsWebsite.addUpdateRegisteredUsersTask();
DiscordActivity.updateActivity();
if (System.currentTimeMillis() - lastMassSave > 300000) {
for (Player p : PlayerHandler.players) {
if (p == null) {
continue;
}
PlayerSave.saveGame((Client) p);
System.out.println("Saved game for " + p.playerName + ".");
lastMassSave = System.currentTimeMillis();
}
}
} catch (Exception ex) {
ex.printStackTrace();
System.out.println("A fatal exception has been thrown!");
for (Player p : PlayerHandler.players) {
if (p == null) {
continue;
}
if (p.inTrade) {
((Client) p).getTrading().declineTrade();
}
if (p.duelStatus == 6) {
((Client) p).getDueling().claimStakedItems();
}
PlayerSave.saveGame((Client) p);
System.out.println("Saved game for " + p.playerName + ".");
}
scheduler.shutdown(); // Kills the tickloop thread if Exception is thrown.
}
}
}, 0, GameConstants.CYCLE_TIME, TimeUnit.MILLISECONDS);
/*
* I'd recommend disabling this until I can be bothered to implement it
* properly.
*/
// CommandConsole.getInstance();
try {
while (!scheduler.awaitTermination(60, TimeUnit.SECONDS)) {
// TODO
// Cleanup?
}
} catch (InterruptedException e) {
e.printStackTrace();
}
acceptor = null;
connectionHandler = null;
sac = null;
System.exit(0);
}
public static boolean playerExecuted = false;
private static BufferedReader minuteFile;
}
@@ -0,0 +1,70 @@
package com.rs2.console;
import java.util.ArrayList;
import java.util.NoSuchElementException;
import java.util.Scanner;
import com.rs2.GameConstants;
import com.rs2.console.commands.ListPlayers;
import com.rs2.console.commands.Stop;
/**
*
* @author RS-Emulators
*
*/
public class CommandConsole implements Runnable {
private static CommandConsole cc;
private Thread self;
private Scanner scanner;
// Lazy, not intending to add runtime class loading.
private ArrayList<CommandProcessor> cmds = new ArrayList<CommandProcessor>();
private CommandConsole() {
cmds.add(new ListPlayers());
cmds.add(new Stop());
scanner = new Scanner(System.in);
cc = this;
self = new Thread(cc);
self.start();
}
@Override
public void run() {
System.out.println("Welcome to " + GameConstants.SERVER_NAME + ".");
while (true) {
System.out.print("> ");
String input = null;
try {
input = scanner.nextLine();
String[] splited = input.split("\\s+");
if (splited[0].isEmpty()) {
System.out.println("Command not recognized. Try 'help'.");
continue;
}
if (splited[0].equalsIgnoreCase("help")) {
for (CommandProcessor cmd : cmds) {
System.out.println(cmd.help());
}
continue;
}
for (CommandProcessor cmd : cmds) {
if (cmd.command(splited)) {
break;
}
}
} catch (NoSuchElementException | NullPointerException e) {
}
}
}
public static CommandConsole getInstance() {
if (cc == null) {
cc = new CommandConsole();
}
return cc;
}
}
@@ -0,0 +1,13 @@
package com.rs2.console;
/**
*
* @author RS-Emulators
*
*/
public interface CommandProcessor {
public boolean command(String[] cmd);
public String help();
}
@@ -0,0 +1,31 @@
package com.rs2.console.commands;
import com.rs2.console.CommandProcessor;
import com.rs2.game.players.Player;
import com.rs2.game.players.PlayerHandler;
/**
*
* @author RS-Emulators
*
*/
public class ListPlayers implements CommandProcessor {
@Override
public boolean command(String[] cmd) {
if (!cmd[0].equalsIgnoreCase("list")) {
return false;
}
System.out.println("Currently online: " + PlayerHandler.getPlayerCount());
for (Player p : PlayerHandler.players) {
System.out.print(p.playerName + ",");
}
return true;
}
@Override
public String help() {
return "list - lists online players.";
}
}
@@ -0,0 +1,28 @@
package com.rs2.console.commands;
import com.rs2.GameEngine;
import com.rs2.console.CommandProcessor;
/**
*
* @author RS-Emulators
*
*/
public class Stop implements CommandProcessor {
@Override
public boolean command(String[] cmd) {
if (!cmd[0].equalsIgnoreCase("stop")) {
return false;
}
System.out.println("Setting shutdown flag to true...");
GameEngine.shutdownServer = true;
return true;
}
@Override
public String help() {
return "stop - sets GameEngine.shutdownServer to true.";
}
}
@@ -0,0 +1,22 @@
package com.rs2.event;
/**
* What the event must implement
*
* @author Stuart <RogueX>
*/
public abstract class CycleEvent {
/**
* Code which should be ran when the event is executed
*
* @param container
*/
public abstract void execute(CycleEventContainer container);
/**
* Code which should be ran when the event stops
*/
public abstract void stop();
}
@@ -0,0 +1,137 @@
package com.rs2.event;
/**
* The wrapper for our event
*
* @author Stuart <RogueX>
* @author Null++
*/
public class CycleEventContainer {
/**
* Event owner
*/
private final Object owner;
/**
* Is the event running or not
*/
private boolean isRunning;
/**
* The amount of cycles per event execution
*/
private int tick;
/**
* The actual event
*/
private final CycleEvent event;
/**
* The current amount of cycles passed
*/
private int cyclesPassed;
/**
* The event ID
*/
private final int eventID;
/**
* Sets the event containers details
*
* @param owner
* , the owner of the event
* @param event
* , the actual event to run
* @param tick
* , the cycles between execution of the event
*/
public CycleEventContainer(int id, Object owner, CycleEvent event, int tick) {
eventID = id;
this.owner = owner;
this.event = event;
isRunning = true;
cyclesPassed = 0;
this.tick = tick;
}
/**
* Execute the contents of the event
*/
public void execute() {
event.execute(this);
}
/**
* Stop the event from running
*/
public void stop() {
isRunning = false;
event.stop();
}
/**
* Does the event need to be ran?
*
* @return true yes false no
*/
public boolean needsExecution() {
if (!isRunning()) {
return false;
}
if (++cyclesPassed >= tick) {
cyclesPassed = 0;
return true;
}
return false;
}
/**
* Returns the owner of the event
*
* @return
*/
public Object getOwner() {
return owner;
}
/**
* Is the event running?
*
* @return true yes false no
*/
public boolean isRunning() {
return isRunning;
}
/**
* Returns the event id
*
* @return id
*/
public int getID() {
return eventID;
}
/**
* Returns the current cycle/tick.
*
* @return
*/
public int getTick() {
return tick;
}
/**
* Set the amount of cycles between the execution
*
* @param tick
*/
public void setTick(int tick) {
this.tick = tick;
}
}
@@ -0,0 +1,142 @@
package com.rs2.event;
import java.util.ArrayList;
import java.util.List;
/**
* Handles all of our cycle based events
*
* @author Stuart <RogueX>
* @author Null++
*/
public class CycleEventHandler {
/**
* The instance of this class
*/
private static CycleEventHandler instance;
/**
* Returns the instance of this class
*
* @return
*/
public static CycleEventHandler getSingleton() {
if (instance == null) {
instance = new CycleEventHandler();
}
return instance;
}
/**
* Holds all of our events currently being ran
*/
private final List<CycleEventContainer> events;
/**
* Creates a new instance of this class
*/
public CycleEventHandler() {
events = new ArrayList<CycleEventContainer>();
}
/**
* Add an event to the list
*
* @param id
* @param owner
* @param event
* @param cycles
*/
public CycleEventContainer addEvent(int id, Object owner, CycleEvent event, int cycles) {
CycleEventContainer container = new CycleEventContainer(id, owner, event, cycles);
events.add(container);
return container;
}
/**
* Add an event to the list
*
* @param owner
* @param event
* @param cycles
*/
public CycleEventContainer addEvent(Object owner, CycleEvent event, int cycles) {
CycleEventContainer container = new CycleEventContainer(-1, owner, event, cycles);
events.add(container);
return container;
}
/**
* Execute and remove events
*/
public void process() {
List<CycleEventContainer> eventsCopy = new ArrayList<CycleEventContainer>(
events);
List<CycleEventContainer> remove = new ArrayList<CycleEventContainer>();
for (CycleEventContainer c : eventsCopy) {
if (c != null) {
if (c.needsExecution() && c.isRunning()) {
c.execute();
if (!c.isRunning()) {
remove.add(c);
}
}
}
}
for (CycleEventContainer c : remove) {
events.remove(c);
}
}
/**
* Returns the amount of events currently running
*
* @return amount
*/
public int getEventsCount() {
return events.size();
}
/**
* Stops all events for a specific owner and id
*
* @param owner
*/
public void stopEvents(Object owner) {
for (CycleEventContainer c : events) {
if (c.getOwner() == owner) {
c.stop();
}
}
}
/**
* Stops all events for a specific owner and id
*
* @param owner
* @param id
*/
public void stopEvents(Object owner, int id) {
for (CycleEventContainer c : events) {
if (c.getOwner() == owner && id == c.getID()) {
c.stop();
}
}
}
/**
* Stops all events for a specific owner and id
*
* @param id
*/
public void stopEvents(int id) {
for (CycleEventContainer c : events) {
if (id == c.getID()) {
c.stop();
}
}
}
}
@@ -0,0 +1,99 @@
package com.rs2.game.bots;
import static com.rs2.game.players.PlayerSave.loadPlayerInfo;
import java.text.DecimalFormat;
import java.util.*;
import com.rs2.GameEngine;
import com.rs2.game.items.ItemAssistant;
import com.rs2.game.players.Client;
import com.rs2.util.Misc;
public class Bot {
private Client botClient;
static Timer timer = new Timer();
public Bot(String username, Integer x, Integer y, Integer z) {
botClient = new Client(null);
botClient.playerName = username;
botClient.playerName = username;
botClient.playerName2 = botClient.playerName;
// TODO: randomize the bot passwords
botClient.playerPass = "bot_password";
botClient.properName = Character.toUpperCase(username.charAt(1)) + username.substring(2);
botClient.saveFile = true;
botClient.saveCharacter = true;
botClient.isActive = true;
botClient.disconnected = false;
botClient.npcCanAttack = false;
botClient.canWalkTutorial = true;
botClient.tutorialProgress = 36;
GameEngine.playerHandler.newPlayerClient(botClient);
loadPlayerInfo(botClient, username, "bot_password", false);
if (x != null) {
botClient.getPlayerAssistant().movePlayer(x, y, z);
}
new TradeChat().run();
}
public Client getBotClient() {
return botClient;
}
class TradeChat extends TimerTask {
@Override
public void run() {
sendTradeChat();
int delay = (5 + new Random().nextInt(15)) * 1000;
timer.schedule(new TradeChat(), delay);
}
}
public void sendTradeChat() {
ArrayList<Integer> items = new ArrayList<Integer>();
for (int slot = 0; slot < 40; slot++){
if(botClient.bankItems[slot] > 0)
items.add(botClient.bankItems[slot] - 1);
}
if (items.size() <= 0) return;
int item_id = Misc.randomArrayListItem(items);
String item_name = ItemAssistant.getItemName(item_id).toLowerCase();
int value = BotHandler.getItemPrice(botClient.shopId, item_id);
if (value <= 0) return;
String _message = "Selling " + item_name + " " + formatSellPrice(value) + " ea - " + botClient.playerName;
// Disable the force chat for now, maybe use that instead, maybe not
//botClient.forcedChat("Selling " + item_name + " " + formatSellPrice(value) + " ea");
// Normal chat from here down:
botClient.setChatTextColor(Misc.random(11));
botClient.setChatTextEffects(Misc.random(5));
Misc.textPack(botClient.inStream, _message);
botClient.setChatTextSize((byte) botClient.inStream.currentOffset);
botClient.setChatText(botClient.inStream.buffer);
botClient.inStream.currentOffset = 0;
botClient.setChatTextUpdateRequired(true);
}
private String formatSellPrice(int price) {
DecimalFormat df = new DecimalFormat("#.##");
if (price >= 1e9) {
return df.format(Math.floor(price / 1e8) / 10) + "b";
} else if (price >= 1e6) {
return df.format(Math.floor(price / 1e5) / 10) + "m";
} else if (price >= 1e3) {
return df.format(Math.floor(price / 100) / 10) + "k";
} else {
return price + "gp";
}
}
}
@@ -0,0 +1,5 @@
package com.rs2.game.bots;
public class BotConstants {
public static final int MAX_BOTS = 100;
}
@@ -0,0 +1,230 @@
package com.rs2.game.bots;
import java.io.File;
import java.security.SecureRandom;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Random;
import com.rs2.GameConstants;
import com.rs2.game.players.Client;
import com.rs2.game.players.Player;
import com.rs2.game.players.PlayerHandler;
import com.rs2.game.shops.ShopHandler;
import com.rs2.util.Misc;
import static com.rs2.game.players.PlayerSave.loadPlayerInfo;
public class BotHandler {
static final List<Bot> botList = new ArrayList<>(BotConstants.MAX_BOTS);
static final Random random = new SecureRandom();
static final int currency = 995;
public static Bot connectBot(String username, Integer x, Integer y, Integer z) {
Bot bot;
if (PlayerHandler.playerCount >= GameConstants.MAX_PLAYERS) {
System.out.println("Bot could not be connected, server is full.");
return null;
}
bot = new Bot(username, x, y, z);
botList.add(bot);
return bot;
}
public static void loadPlayerShops() {
File dir = new File(System.getProperty("user.dir") + "/data/characters/");
File[] directoryListing = dir.listFiles();
if (directoryListing != null) {
for (File child : directoryListing) {
if (child.getName().startsWith("")) {
String playerName = child.getName().split("")[1];
playerName = playerName.substring(0, playerName.length() - 4);
Client determineIfLoadBasedOnShop = new Client(null);
determineIfLoadBasedOnShop.playerName = getShopName(playerName);
Client determineIfLoadBasedOnLevel = new Client(null); //supports legacy bots who's levels didn't update, rip
determineIfLoadBasedOnLevel.playerName = playerName;
loadPlayerInfo(determineIfLoadBasedOnShop, getShopName(playerName), "bot_password", false);
loadPlayerInfo(determineIfLoadBasedOnLevel, playerName, "bot_password", false);
if (determineIfLoadBasedOnLevel.getPlayerAssistant().getTotalLevel() < 50 || determineIfLoadBasedOnShop.bankItemsN[0] == 0) {
continue;
}
String shopName = getShopName(playerName);
Bot bot = connectBot(shopName, null, null, null);
Client playerShop = bot.getBotClient();
ShopHandler.createPlayerShop(playerShop);
}
}
}
}
public static void playerShop(Player player) {
if (!player.inPlayerShopArea()) {
player.getPacketSender().sendMessage("You need to be in a bank zone or trade area for this.");
return;
}
player.getPacketSender().sendMessage("Shop commands- ::shop, ::withdrawshop, ::closeshop");
player.getPacketSender().sendMessage("Your shop will permanently stay if you're total level > 50!");
Client playerShop = getPlayerShop(player.playerName);
if (playerShop == null) {
String shopName = getShopName(player.playerName);
Bot bot = connectBot(shopName, player.getX(), player.getY(), player.getH());
playerShop = bot.getBotClient();
ShopHandler.createPlayerShop(playerShop);
}
playerShop.getPlayerAssistant().movePlayer(player.getX(), player.getY(), player.getH());
playerShop.faceUpdate(player.face);
playerShop.turnPlayerTo(player.getX() + Misc.random(-1, 1), player.getY() + Misc.random(-1, 1));
int i = 0;
// Remove all inventory items except money
for (int item_id : playerShop.playerItems) {
if (item_id > 0 && item_id != currency + 1) {
playerShop.playerItems[i] = 0;
playerShop.playerItemsN[i] = 0;
}
i++;
}
// Set bot to same level as player
playerShop.combatLevel = player.combatLevel;
i = 0;
for (int level : player.playerLevel) {
playerShop.playerLevel[i] = level;
playerShop.playerXP[i] = playerShop.getPlayerAssistant().getXPForLevel(level);
playerShop.getPlayerAssistant().refreshSkill(i);
i++;
}
// Take the appearance of the player
i = 0;
for (int id : player.playerAppearance) {
playerShop.playerAppearance[i] = id;
i++;
}
// Dress the bot the same as the player
i = 0;
for (int item_id : player.playerEquipment) {
playerShop.playerEquipment[i] = item_id;
playerShop.playerEquipmentN[i] = 1;
i++;
}
}
private static String getShopName(String playerName) {
return "" + playerName;
}
private static Client getPlayerShop(String playerName) {
String shopName = getShopName(playerName);
for (Bot bot : botList) {
if (bot != null && bot.getBotClient() != null) {
Client botClient = bot.getBotClient();
if (botClient.playerName.equalsIgnoreCase(shopName)) {
return botClient;
}
}
}
return null;
}
private static Client getPlayerShop(int shop_id) {
for (Bot bot : botList) {
if (bot != null && bot.getBotClient() != null) {
Client botClient = bot.getBotClient();
if (botClient.shopId == shop_id) {
return botClient;
}
}
}
return null;
}
public static void closeShop(Player player) {
Client shop = getPlayerShop(player.playerName);
if (shop == null) return;
shop.getPlayerAssistant().movePlayer(0, 0, 0);
new Thread(() -> {
try {
Thread.sleep(500);
shop.disconnected = true;
shop.logout(true);
for (int index = 0; index < botList.size(); index++) {
if (botList.get(index).getBotClient().properName.equalsIgnoreCase(player.properName)) {
botList.remove(index);
return;
}
index++;
}
} catch (Exception e) {
System.err.println(e);
}
}).start();
}
public static void addCoins(int shop_id, int amount) {
Client shop = getPlayerShop(shop_id);
if (shop == null) return;
shop.getItemAssistant().addItem(currency, amount);
}
public static void takeCoins(Player player) {
if (!player.getItemAssistant().playerHasItem(currency) && player.getItemAssistant().freeSlots() <= 0) {
player.getPacketSender().sendMessage("You don't have enough space in your inventory.");
return;
}
Client shop = getPlayerShop(player.playerName);
if (shop == null) return;
if (!shop.getItemAssistant().playerHasItem(currency)) {
player.getPacketSender().sendMessage("There are no coins to collect.");
return;
}
int totalCoins = shop.getItemAssistant().getItemAmount(currency);
player.getItemAssistant().addItem(currency, totalCoins);
shop.getItemAssistant().deleteItem(currency, totalCoins);
player.getPacketSender().sendMessage("You collected " + totalCoins + " coins.");
}
public static void addTobank(int shop_id, int item_id, int amount) {
Client shop = getPlayerShop(shop_id);
if (shop == null) return;
shop.getItemAssistant().addItemToBank(item_id, amount);
}
public static void removeFrombank(int shop_id, int item_id, int amount) {
Client shop = getPlayerShop(shop_id);
if (shop == null) return;
shop.getItemAssistant().removeItemFromBank(item_id, amount);
}
public static int getItemPrice(int shop_id, int item_id) {
item_id++;
Client shop = getPlayerShop(shop_id);
if (shop == null) return 0;
for (int slot = 0; slot < ShopHandler.MAX_SHOP_ITEMS; slot++) {
if (shop.bankItems[slot] == item_id) {
return Math.max(1, shop.bankItemsV[slot]);
}
}
return 0;
}
public static void setPrice(int shop_id, int item_id, int amount) {
item_id++;
Client shop = getPlayerShop(shop_id);
if (shop == null) return;
for (int slot = 0; slot < ShopHandler.MAX_SHOP_ITEMS; slot++) {
if (shop.bankItems[slot] == item_id) {
shop.bankItemsV[slot] = amount;
}
}
}
}
@@ -0,0 +1,348 @@
package com.rs2.game.content;
import java.util.Calendar;
import java.util.GregorianCalendar;
import com.rs2.game.players.Player;
import com.rs2.util.Misc;
/**
* Handles the BankPin on Bank's
*
* @author Michael
* @author Ian / Core
* @author Linus
* @author Genesis
*/
public class BankPin {
public int recovery_Delay = 3;
private final Player client;
public BankPin(Player player) {
this.client = player;
}
public int allowTimer = 2000000;
public int dateExpired() {
return client.pinDeleteDateRequested = dateRequested() + recovery_Delay;
}
public int dateRequested() {
Calendar cal = new GregorianCalendar();
int day = cal.get(Calendar.DAY_OF_MONTH);
int month = cal.get(Calendar.MONTH);
int year = cal.get(Calendar.YEAR);
return client.pinDeleteDateRequested = year * 10000 + month * 100 + day;
}
public void closeBankPin() {
firstPin = secondPin = thirdPin = fourthPin = client.playerBankPin = 0;
falseButtons();
client.getPacketSender().closeAllWindows();
}
public void pinSettingFrames() {
int pinSendFrames[] = { 15075, 15080, 15110, 15171, 15076, 15176,
15104, 15082, 15079 };
for (int j = 0; j < 9; j++) {
client.getPacketSender().sendString("", pinSendFrames[j]);
}
client.getPacketSender().sendString("Welcome to our bank", 15038);
client.getPacketSender().sendString("recovery system.", 15039);
client.getPacketSender().sendString("Remember, it's important", 15040);
client.getPacketSender().sendString("to change your recovery", 15041);
client.getPacketSender().sendString("pin and password", 15042);
client.getPacketSender().sendString("every 1-3 months", 15043);
if (!client.hasBankpin) {
client.getPacketSender().sendString("Set a Bank Pin", 15078);
client.getPacketSender().sendString("No PIN Set", 15105);
} else {
client.getPacketSender().sendString("Delete your PIN", 15078);
if (client.requestPinDelete) {
client.getPacketSender().sendString("Pending delete", 15105);
} else {
client.getPacketSender().sendString("Has Bank PIN", 15105);
}
}
client.getPacketSender().sendString(recovery_Delay + " days", 15107);
}
public void bankPinSettings() {
pinSettingFrames();
client.getPacketSender().showInterface(14924);
}
private int resetBankNumbers() {
return firstPin = secondPin = thirdPin = fourthPin = client.playerBankPin = client.firstPin = client.secondPin = client.thirdPin = client.fourthPin = -1;
}
public boolean resetBankPin() {
resetBankNumbers();
falseButtons();
client.getPacketSender().closeAllWindows();
return client.hasBankpin = false;
}
public void bankPinEnter(int button) {
if (allowTimer > 0 && allowTimer <= 300000) {
int time = allowTimer / 6000;
if (time >= 2) {
client.getPacketSender()
.sendMessage(
"Please wait "
+ time
+ " minutes before attempting your bank pin again.");
} else if (time == 1) {
client.getPacketSender()
.sendMessage(
"Please wait "
+ time
+ " minute before attempting your bank pin again.");
} else if (time <= 0) {
client.getPacketSender()
.sendMessage(
"Please wait less "
+ "than a minute before attempting your bank pin again.");
}
return;
}
sendPins();
if (!client.firstPinEnter) {
handleButtonOne(button);
} else if (!client.secondPinEnter) {
handleButtonTwo(button);
} else if (!client.thirdPinEnter) {
handleButtonThree(button);
} else if (!client.fourthPinEnter) {
handleButtonFour(button);
}
}
public void openPin() {
if (client.enterdBankpin) {
client.getPacketSender().openUpBank();
return;
}
randomizeNumbers();
client.getPacketSender().sendString("First click the FIRST digit",
15313);
client.getPacketSender().sendString("", 14923);
int pinSendFrames[] = { 14913, 14914, 14915, 14916 };
for (int j = 0; j < 4; j++) {
client.getPacketSender().sendString("?", pinSendFrames[j]);
}
client.getPacketSender().showInterface(7424);
sendPins();
}
private void sendPins() {
if (client.enterdBankpin) {
client.getPacketSender().openUpBank();
return;
}
for (int i = 0; i < getBankPins().length; i++) {
client.getPacketSender().sendString("" + getBankPins()[i],
stringIds[i]);
}
}
private void handleButtonOne(int button) {
client.getPacketSender().sendString("Now click the SECOND digit",
15313);
client.getPacketSender().sendString("*", 14913);
for (int i = 0; i < getActionButtons().length; i++) {
if (getActionButtons()[i] == button) {
firstPin = getBankPins()[i];
}
}
client.firstPinEnter = true;
randomizeNumbers();
}
private void handleButtonTwo(int button) {
client.getPacketSender().sendString("Now click the THIRD digit",
15313);
client.getPacketSender().sendString("*", 14914);
for (int i = 0; i < getActionButtons().length; i++) {
if (getActionButtons()[i] == button) {
secondPin = getBankPins()[i];
}
}
client.secondPinEnter = true;
randomizeNumbers();
}
private void handleButtonThree(int button) {
client.getPacketSender().sendString("Now click the LAST digit",
15313);
client.getPacketSender().sendString("*", 14915);
for (int i = 0; i < getActionButtons().length; i++) {
if (getActionButtons()[i] == button) {
thirdPin = getBankPins()[i];
}
}
client.thirdPinEnter = true;
randomizeNumbers();
}
private boolean falseButtons() {
return client.fourthPinEnter = client.thirdPinEnter = client.secondPinEnter = client.firstPinEnter = false;
}
private void handleButtonFour(int button) {
if (client.enterdBankpin) {
client.getPacketSender().openUpBank();
return;
}
client.getPacketSender().sendString("*", 14916);
for (int i = 0; i < getActionButtons().length; i++) {
if (getActionButtons()[i] == button) {
fourthPin = getBankPins()[i];
}
}
client.fourthPinEnter = true;
if (!client.hasBankpin) {
client.firstPin = client.bankPin1 = firstPin;
client.secondPin = client.bankPin2 = secondPin;
client.thirdPin = client.bankPin3 = thirdPin;
client.fourthPin = client.bankPin4 = fourthPin;
client.hasBankpin = client.enterdBankpin = true;
client.getPacketSender().sendMessage(
"You have just created a bank pin.");
client.getPacketSender().sendMessage(
"Your new Bank PIN is: " + firstPin + " - " + secondPin
+ " - " + thirdPin + " - " + fourthPin);
client.saveCharacter = true;
}
int one = firstPin, two = secondPin, three = thirdPin, four = fourthPin;
if (client.bankPin1 == one && client.bankPin2 == two
&& client.bankPin3 == three && client.bankPin4 == four) {
falseButtons();
client.getPacketSender().closeAllWindows();
client.enterdBankpin = true;
client.playerBankPin = 15000;
client.getPacketSender().openUpBank();
} else {
client.attemptsRemaining--;
if (client.attemptsRemaining <= 0) {
allowTimer = 30000;
}
if (client.attemptsRemaining == -1) {
client.attemptsRemaining = 3;
allowTimer = 2000000;
}
if (client.attemptsRemaining > 1) {
client.getPacketSender().sendMessage(
"Invalid pin. You have " + client.attemptsRemaining
+ " attempts remaining.");
} else if (client.attemptsRemaining == 1) {
client.getPacketSender().sendMessage(
"Invalid pin. You have " + client.attemptsRemaining
+ " attempt remaining.");
} else if (client.attemptsRemaining <= 0) {
client.getPacketSender()
.sendMessage(
"Invalid pin. You must wait 5 minutes before attempting again.");
}
client.getPacketSender().closeAllWindows();
falseButtons();
}
}
private void randomizeNumbers() {
int i = Misc.random(4);
if (i == client.lastPinSettings) {
i = client.lastPinSettings == 0 ? client.lastPinSettings
: client.lastPinSettings;
}
switch (i) {
case 0:
bankPins[0] = 1;
bankPins[1] = 7;
bankPins[2] = 0;
bankPins[3] = 8;
bankPins[4] = 4;
bankPins[5] = 6;
bankPins[6] = 5;
bankPins[7] = 9;
bankPins[8] = 3;
bankPins[9] = 2;
break;
case 1:
bankPins[0] = 5;
bankPins[1] = 4;
bankPins[2] = 3;
bankPins[3] = 7;
bankPins[4] = 8;
bankPins[5] = 6;
bankPins[6] = 9;
bankPins[7] = 2;
bankPins[8] = 1;
bankPins[9] = 0;
break;
case 2:
bankPins[0] = 4;
bankPins[1] = 7;
bankPins[2] = 6;
bankPins[3] = 5;
bankPins[4] = 2;
bankPins[5] = 3;
bankPins[6] = 1;
bankPins[7] = 8;
bankPins[8] = 9;
bankPins[9] = 0;
break;
case 3:
bankPins[0] = 9;
bankPins[1] = 4;
bankPins[2] = 2;
bankPins[3] = 7;
bankPins[4] = 8;
bankPins[5] = 6;
bankPins[6] = 0;
bankPins[7] = 3;
bankPins[8] = 1;
bankPins[9] = 5;
break;
}
client.lastPinSettings = i;
sendPins();
}
private final int bankPins[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };
private final int stringIds[] = { 14883, 14884, 14885, 14886, 14887, 14888,
14889, 14890, 14891, 14892 };
private final int actionButtons[] = { 58025, 58026, 58027, 58028, 58029,
58030, 58031, 58032, 58033, 58034 };
private int[] getBankPins() {
return bankPins;
}
private int[] getActionButtons() {
return actionButtons;
}
private int firstPin;
private int secondPin;
private int thirdPin;
private int fourthPin;
@Override
public String toString() {
return "BankPin{" + "recovery_Delay=" + recovery_Delay + ", client="
+ client + ", allowTimer=" + allowTimer + ", bankPins="
+ bankPins + ", stringIds=" + stringIds + ", actionButtons="
+ actionButtons + ", firstPin=" + firstPin + ", secondPin="
+ secondPin + ", thirdPin=" + thirdPin + ", fourthPin="
+ fourthPin + '}';
}
}
@@ -0,0 +1,70 @@
package com.rs2.game.content;
import java.util.HashMap;
import com.rs2.game.players.Player;
public class EmoteHandler {
private final Player player;
public EmoteHandler(Player player2) {
this.player = player2;
}
public Emotes EMOTES = null;
public enum Emotes {
Yes(168, 855, -1), No(169, 856, -1), Bow(164, 858, -1), Angry(167, 864,
-1), Think(162, 857, -1), Wave(163, 863, -1), Shrug(52058,
2113, -1), Cheer(171, 862, -1), Beckon(165, 859, -1), Laugh(
170, 861, -1), Jump_For_Joy(52054, 2109, -1), Yawn(52056, 2111,
-1), Dance(166, 866, -1), Jig(52051, 2106, -1), Twirl(52052,
2107, -1), Headbang(52053, 2108, -1), Cry(161, 860, -1), Blow_Kiss(
43092, 0x558, 574), Panic(52050, 2105, -1), Rasberry(52055,
2110, -1), Clap(172, 865, -1), Salute(52057, 2112, -1), Goblin_Bow(
52071, 0x84F, -1), Goblin_Salute(52072, 0x850, -1), Glass_Box(
2155, 0x46B, -1), Climb_Rope(25103, 0x46A, -1), Lean(25106,
0x469, -1), Glass_Wall(2154, 0x468, -1), Idea(88060, 4276, 712), Stomp(
88061, 4278, -1), Flap(88062, 4280, -1), Slap_Head(88063, 4275,
-1), Zombie_Walk(72032, 3544, -1), Zombie_Dance(72033, 3543, -1), Zombie_Hand(
88065, 7272, 1244), Scared(59062, 2836, -1), Bunny_Hop(72254,
3866, -1);
private Emotes(int buttonId, int animId, int gfxId) {
buttonID = buttonId;
animID = animId;
gfxID = gfxId;
}
public static HashMap<Integer, Emotes> emotes = new HashMap<Integer, Emotes>();
public static Emotes loadEmote(int buttonId) {
return emotes.get(buttonId);
}
static {
for (Emotes e : Emotes.values()) {
emotes.put(e.buttonID, e);
}
}
public int gfxID;
public int animID;
public int buttonID;
}
public void startEmote(int buttonId) {
Emotes EMOTES = Emotes.loadEmote(buttonId);
if (EMOTES != null && this.EMOTES == null) {
this.EMOTES = EMOTES;
if (EMOTES.animID != 1) {
if (player.tutorialProgress == 10) {
player.getDialogueHandler().sendDialogues(3039, 0);
}
player.startAnimation(EMOTES.animID);
EMOTES = null;
this.EMOTES = null;
}
}
}
}
File diff suppressed because it is too large Load Diff
@@ -0,0 +1,35 @@
package com.rs2.game.content.combat;
/**
* CombatConstants
* @author Andrew (Mr Extremez)
*/
public class CombatConstants {
public final static int MELEE_EXP_RATE = 4;
public final static int RANGE_EXP_RATE = 4;
public final static int MAGIC_EXP_RATE = 4;
public final static int INCREASE_SPECIAL_AMOUNT = 17500;
public final static int GOD_SPELL_CHARGE = 300000;
public final static boolean CORRECT_ARROWS = true;
public final static boolean CRYSTAL_BOW_DEGRADES = true;
public final static int SKULL_TIMER = 1200;
public final static int TELEBLOCK_DELAY = 20000;
public final static boolean SINGLE_AND_MULTI_ZONES = true;
public final static boolean COMBAT_LEVEL_DIFFERENCE = true;
public final static boolean COMBAT_SOUNDS = true;
}
@@ -0,0 +1,379 @@
package com.rs2.game.content.combat;
import java.util.HashMap;
import com.rs2.game.content.combat.range.RangeData;
import com.rs2.game.content.music.sound.CombatSounds;
import com.rs2.game.npcs.NpcHandler;
import com.rs2.game.players.Client;
import com.rs2.game.players.Player;
import com.rs2.game.players.PlayerHandler;
import com.rs2.util.Misc;
public class Specials {
private final Player player;
public Specials(Player player2) {
this.player = player2;
}
private enum specialAttack {
// ItemName(ItemId, SpecDamage, SpecAccuracy, SpecAmount, Anim, GFX0,
// GFX100, DoubleHit, SsSpec, SpecEffect)
ABYSSAL_WHIP(4151, 1, 1.25, 5, 1658, 341, -1, false, 0),
DRAGON_DAGGER(1215, 1.15, 1.25, 2.5, 1062, -1, 252, true, 0),
DRAGON_DAGGER_P(1231, 1.15, 1.25, 2.5, 1062, -1, 252, true, 0),
DRAGON_DAGGER_PP(5698, 1.15, 1.25, 2.5, 1062, -1, 252, true, 0),
DRAGON_DAGGER_PPP(5680, 1.15, 1.25, 2.5, 1062, -1, 252, true, 0),
DRAGON_LONG(1305, 1.20, 1.10, 2.5, 1058, -1, 248, false, 0),
DRAGON_MACE(1434, 1.55, 1.25, 2.5, 1060, -1, 251, false, 0),
DRAGON_SCIMITAR(4587, 1, 1.25, 5.5, 1872, -1, 347, false, 1),
DRAGON_HALBERD(3204, 1.25, .85, 3, 1203, -1, 282, true, 0),
GRANITE_MAUL(4153, 1.10, .85, 5, 1667, -1, 337, false, 0),
MAGIC_SHORTBOW(861, 1.05, .95, 5.5, 1074, -1, -1, true, 0),
MAGIC_LONGBOW(859, 1.20, 1.05, 5.5, 426, -1, -1, false, 0);
private int weapon, anim, gfx1, gfx2, specEffect;
private double specDamage, specAccuracy, specAmount;
private boolean doubleHit;
private specialAttack(int weapon, double specDamage,
double specAccuracy, double specAmount, int anim, int gfx1,
int gfx2, boolean doubleHit, int specEffect) {
this.weapon = weapon;
this.specDamage = specDamage;
this.specAccuracy = specAccuracy;
this.specAmount = specAmount;
this.anim = anim;
this.gfx1 = gfx1;
this.gfx2 = gfx2;
this.doubleHit = doubleHit;
this.specEffect = specEffect;
}
private int getWeapon() {
return weapon;
}
private double getSpecDamage() {
return specDamage;
}
private double getSpecAccuracy() {
return specAccuracy;
}
private double getSpecAmount() {
return specAmount;
}
private int getAnim() {
return anim;
}
private int getGfx1() {
return gfx1;
}
private int getGfx2() {
return gfx2;
}
private boolean getDoubleHit() {
return doubleHit;
}
@SuppressWarnings("unused")
private int getSpecEffect() {
return specEffect;
}
public static HashMap<Integer, specialAttack> specialAttack = new HashMap<Integer, specialAttack>();
static {
for (specialAttack SA : specialAttack.values()) {
specialAttack.put(SA.getWeapon(), SA);
}
}
}
public void activateSpecial(int weapon, Client other, int i) {
int equippedWeapon = player.playerEquipment[player.playerWeapon];
if ((NpcHandler.npcs[i] == null && player.npcIndex > 0) || (PlayerHandler.players[player.playerIndex] == null && player.playerIndex > 0)) {
return;
}
player.doubleHit = false;
player.specEffect = 0;
player.projectileStage = 0;
player.specMaxHitIncrease = 2;
if (player.npcIndex > 0) {
player.oldNpcIndex = i;
} else if (player.playerIndex > 0) {
player.oldPlayerIndex = i;
PlayerHandler.players[i].underAttackBy = player.playerId;
PlayerHandler.players[i].logoutDelay = System.currentTimeMillis();
PlayerHandler.players[i].singleCombatDelay = System.currentTimeMillis();
PlayerHandler.players[i].killerId = player.playerId;
}
player.specEffect = 0;
player.projectileStage = 0;
for (specialAttack SA : specialAttack.values()) {
if (NpcHandler.npcs[player.npcIndex] == null && player.npcIndex > 0) {
return;
}
if (PlayerHandler.players[player.playerIndex] == null && player.playerIndex > 0) {
return;
}
if (equippedWeapon == SA.getWeapon()) {
if (SA.getWeapon() == 11235) {
player.usingBow = true;
player.dbowSpec = true;
player.rangeItemUsed = player.playerEquipment[player.playerArrows];
player.getItemAssistant().deleteArrow();
player.getItemAssistant().deleteArrow();
player.lastWeaponUsed = weapon;
player.hitDelay = 3;
player.startAnimation(426);
player.projectileStage = 1;
player.gfx100(RangeData.getRangeStartGFX(player));
player.hitDelay = player.getCombatAssistant().getHitDelay();
if (player.fightMode == 2) {
player.attackTimer--;
}
if (player.playerIndex > 0) {
player.getCombatAssistant().fireProjectilePlayer();
} else if (player.npcIndex > 0) {
player.getCombatAssistant().fireProjectileNpc();
}
player.specAccuracy = SA.getSpecAccuracy();
player.specDamage = SA.getSpecDamage();
} else if (SA.getWeapon() == 15241) {
player.usingBow = true;
player.rangeItemUsed = player.playerEquipment[player.playerArrows];
player.getItemAssistant().deleteArrow();
player.lastWeaponUsed = weapon;
player.startAnimation(12175);
player.specAccuracy = SA.getSpecAccuracy();
player.specDamage = SA.getSpecDamage();
player.hitDelay = 5;
player.attackTimer -= 7;
player.hitDelay = player.getCombatAssistant().getHitDelay();
if (player.fightMode == 2) {
if (player.playerIndex > 0) {
player.getCombatAssistant().fireProjectilePlayer();
} else if (player.npcIndex > 0) {
player.getCombatAssistant().fireProjectileNpc();
}
}
} else if (SA.getWeapon() == 13879 || SA.getWeapon() == 13883) {
player.usingRangeWeapon = true;
player.rangeItemUsed = player.playerEquipment[player.playerWeapon];
player.getItemAssistant().deleteArrow();
player.lastWeaponUsed = weapon;
player.startAnimation(SA.getAnim());
player.gfx0(SA.getGfx1());
player.specAccuracy = SA.getSpecAccuracy();
player.specDamage = SA.getSpecDamage();
player.projectileStage = 1;
player.hitDelay = player.getCombatAssistant().getHitDelay();
if (player.fightMode == 2) {
player.attackTimer--;
}
if (player.playerIndex > 0) {
player.getCombatAssistant().fireProjectilePlayer();
} else if (player.npcIndex > 0) {
player.getCombatAssistant().fireProjectileNpc();
}
} else if (SA.getWeapon() == 859 || SA.getWeapon() == 861) {
player.usingBow = true;
player.bowSpecShot = 1;
player.rangeItemUsed = player.playerEquipment[player.playerArrows];
player.getItemAssistant().deleteArrow();
player.lastWeaponUsed = weapon;
player.startAnimation(SA.getAnim());
player.projectileStage = 1;
player.hitDelay = player.getCombatAssistant().getHitDelay();
if (player.fightMode == 2) {
player.attackTimer--;
}
if (player.playerIndex > 0) {
player.getCombatAssistant().fireProjectilePlayer();
} else if (player.npcIndex > 0) {
player.getCombatAssistant().fireProjectileNpc();
}
} else if (SA.getGfx1() == -1) {
player.gfx100(SA.getGfx2());
player.startAnimation(SA.getAnim());
player.specDamage = SA.getSpecDamage();
player.specAccuracy = SA.getSpecAccuracy();
player.hitDelay = player.getCombatAssistant().getHitDelay();
player.doubleHit = SA.getDoubleHit();
} else {
if (other != null) {
other.gfx0(SA.getGfx1());
} else if (NpcHandler.npcs[player.npcIndex] != null) {
NpcHandler.npcs[i].gfx0(SA.getGfx1());
}
player.startAnimation(SA.getAnim());
player.specDamage = SA.getSpecDamage();
player.specAccuracy = SA.getSpecAccuracy();
player.hitDelay = player.getCombatAssistant().getHitDelay();
player.doubleHit = SA.getDoubleHit();
}
}
player.delayedDamage = Misc.random(player.getCombatAssistant().meleeMaxHit());
player.delayedDamage2 = Misc.random(player.getCombatAssistant().meleeMaxHit());
player.usingSpecial = false;
player.getItemAssistant().updateSpecialBar();
if (CombatConstants.COMBAT_SOUNDS) {
player.getPacketSender().sendSound(CombatSounds.specialSounds(player.playerEquipment[player.playerWeapon]), 100, 0);
}
}
}
public void handleGmaul() {
if (player.npcIndex > 0 && NpcHandler.npcs[player.npcIndex] != null) {
if (player.goodDistance(player.getX(), player.getY(), NpcHandler.npcs[player.npcIndex].getX(), NpcHandler.npcs[player.npcIndex].getY(), player.getCombatAssistant().getRequiredDistance())) {
if (player.getCombatAssistant().checkSpecAmount(4153)) {
boolean hit = Misc.random(player.getCombatAssistant().calcAtt()) > Misc.random(NpcHandler.npcs[player.npcIndex].defence);
int damage = 0;
if (hit) {
damage = Misc.random(player.getCombatAssistant().meleeMaxHit());
NpcHandler.npcs[player.npcIndex].HP -= damage;
NpcHandler.npcs[player.npcIndex].hitDiff2 = damage;
NpcHandler.npcs[player.npcIndex].hitUpdateRequired2 = true;
NpcHandler.npcs[player.npcIndex].updateRequired = true;
player.startAnimation(1667);
player.gfx100(340);
}
}
}
} else if (player.playerIndex > 0) {
final Client o = (Client) PlayerHandler.players[player.playerIndex];
if (player.goodDistance(player.getX(), player.getY(), o.getX(), o.getY(), player
.getCombatAssistant().getRequiredDistance())) {
if (player.getCombatAssistant().checkReqs()) {
if (player.getCombatAssistant().checkSpecAmount(4153)) {
boolean hit = Misc.random(player.getCombatAssistant().calcAtt()) > Misc.random(o.getCombatAssistant().calcDef());
int damage = 0;
if (hit) {
damage = Misc.random(player.getCombatAssistant().meleeMaxHit());
}
if (o.getPrayer().prayerActive[18] && System.currentTimeMillis() - o.protMeleeDelay > 1500) {
damage *= .6;
}
if (o.playerLevel[3] - damage <= 0) {
damage = o.playerLevel[3];
}
if (o.playerLevel[3] > 0) {
o.handleHitMask(damage);
player.startAnimation(1667);
o.gfx100(337);
o.dealDamage(damage);
}
}
}
}
}
}
public double specAmount() {
for (specialAttack SA : specialAttack.values()) {
if (player.playerEquipment[player.playerWeapon] == SA.getWeapon()) {
return SA.getSpecAmount();
}
}
return 0;
}
public static void specialClicking(Player player2, int actionButtonId) {
switch (actionButtonId) {
case 29188:
if (player2.playerEquipment[player2.playerWeapon] == 1434) {
player2.specBarId = 7636;
player2.usingSpecial = !player2.usingSpecial;
player2.getItemAssistant().updateSpecialBar();
}
break;
case 29163:
if (player2.playerEquipment[player2.playerWeapon] == 4587) {
player2.specBarId = 7611;
player2.usingSpecial = !player2.usingSpecial;
player2.getItemAssistant().updateSpecialBar();
}
break;
case 33033:
if (player2.playerEquipment[player2.playerWeapon] == 4153) {
player2.specBarId = 8505;
player2.usingSpecial = !player2.usingSpecial;
player2.getItemAssistant().updateSpecialBar();
}
break;
case 29038:
if (player2.playerEquipment[player2.playerWeapon] == 4153) {
player2.specBarId = 7486;
player2.getSpecials().handleGmaul();
player2.usingSpecial = !player2.usingSpecial;
player2.getItemAssistant().updateSpecialBar();
}
break;
case 29063:
if (player2.playerEquipment[player2.playerWeapon] == 1377) {
if (player2.specAmount >= 5) {
player2.gfx0(246);
player2.forcedChat("Raarrrrrgggggghhhhhhh!");
player2.startAnimation(1056);
player2.specAmount -= 5;
player2.playerLevel[2] = player2.getLevelForXP(player2.playerXP[2]) + player2.getLevelForXP(player2.playerXP[2]) * 15 / 100;
player2.getPlayerAssistant().refreshSkill(2);
player2.getItemAssistant().updateSpecialBar();
} else {
player2.getPacketSender().sendMessage("You don't have the required special energy to use this attack.");
}
}
break;
case 48023:
if (player2.playerEquipment[player2.playerWeapon] == 4151) {
player2.specBarId = 12335;
player2.usingSpecial = !player2.usingSpecial;
player2.getItemAssistant().updateSpecialBar();
}
break;
case 29138:
if (player2.playerEquipment[player2.playerWeapon] == 1215 || player2.playerEquipment[player2.playerWeapon] == 1231
|| player2.playerEquipment[player2.playerWeapon] == 5680 || player2.playerEquipment[player2.playerWeapon] == 5698
|| player2.playerEquipment[player2.playerWeapon] == 1305) {
player2.specBarId = 7586;
player2.usingSpecial = !player2.usingSpecial;
player2.getItemAssistant().updateSpecialBar();
}
break;
case 29113:
if (player2.playerEquipment[player2.playerWeapon] == 861 || player2.playerEquipment[player2.playerWeapon] == 859) {
player2.specBarId = 7561;
player2.usingSpecial = !player2.usingSpecial;
player2.getItemAssistant().updateSpecialBar();
}
break;
case 29238:
player2.specBarId = 7686;
player2.usingSpecial = !player2.usingSpecial;
player2.getItemAssistant().updateSpecialBar();
break;
}
}
}
@@ -0,0 +1,84 @@
package com.rs2.game.content.combat.magic;
import com.rs2.event.CycleEvent;
import com.rs2.event.CycleEventContainer;
import com.rs2.event.CycleEventHandler;
import com.rs2.game.players.Client;
import com.rs2.game.players.Player;
import com.rs2.game.players.PlayerHandler;
public class CastOnOther extends CastRequirements {
public static boolean castOnOtherSpells(int castingSpellId) {
int[] spells = { 12435, 12455, 12425, 30298, 30290, 30282, };
for (int spell : spells) {
if (castingSpellId == spell) {
return true;
}
}
return false;
}
public static void teleOtherDistance(Player c, int type, int i) {
Player castOn = (Client) PlayerHandler.players[i];
int[][] data = { { 74, SOUL, LAW, EARTH, 1, 1, 1 },
{ 82, SOUL, LAW, WATER, 1, 1, 1 },
{ 90, SOUL, LAW, -1, 2, 1, -1 }, };
if (!hasRequiredLevel(c, data[type][0])) {
c.getPacketSender().sendMessage(
"You need to have a magic level of " + data[type][0]
+ " to cast this spell.");
return;
}
if (!hasRunes(c, new int[] { data[type][1], data[type][2],
data[type][3] }, new int[] { data[type][4], data[type][5],
data[type][6] })) {
return;
}
deleteRunes(c,
new int[] { data[type][1], data[type][2], data[type][3] },
new int[] { data[type][4], data[type][5], data[type][6] });
String[] location = { "Lumbridge", "Falador", "Camelot", };
c.faceUpdate(i + 32768);
c.startAnimation(1818);
c.gfx0(343);
if (castOn != null) {
if (castOn.distanceToPoint(c.absX, c.absY) <= 15) {
if (c.heightLevel == castOn.heightLevel) {
castOn.getPacketSender().sendString(location[type], 12560);
castOn.getPacketSender().sendString(c.playerName, 12558);
castOn.getPacketSender().showInterface(12468);
castOn.teleotherType = type;
}
}
}
}
public static void teleOtherLocation(final Player player, final int i,
boolean decline) {
player.getPacketSender().closeAllWindows();
final int[][] coords = { { 3222, 3218 }, // LUMBRIDGE
{ 2967, 3378 }, // FALADOR
{ 2757, 3477 }, // CAMELOT
};
if (!decline) {
CycleEventHandler.getSingleton().addEvent(player, new CycleEvent() {
@Override
public void execute(CycleEventContainer container) {
player.startAnimation(715);
player.teleportToX = coords[player.teleotherType][0];
player.teleportToY = coords[player.teleotherType][1];
player.teleotherType = -1;
container.stop();
}
@Override
public void stop() {
// TODO Auto-generated method stub
}
}, 3);
player.startAnimation(1816);
player.gfx100(342);
}
}
}
@@ -0,0 +1,61 @@
package com.rs2.game.content.combat.magic;
import com.rs2.game.players.Player;
public class CastRequirements {
public static boolean hasRunes(Player c, int[] runes, int[] amount) {
for (int i = 0; i < runes.length; i++) {
if (c.getItemAssistant().playerHasItem(runes[i], amount[i]) || MagicRequirements.wearingStaff(c, runes[i])) {
return true;
}
}
c.getPacketSender().sendMessage(
"You don't have enough required runes to cast this spell!");
return false;
}
public static boolean hasRunes(Player player, int[][] runes) {
for (int[] rune : runes) {
// if player doesn't have the required amount of runes or a staff for that rune
if (!player.getItemAssistant().playerHasItem(rune[0], rune[1]) && !MagicRequirements.wearingStaff(player, rune[0])) {
return false;
}
}
return true;
}
public static void deleteRunes(Player player, int[][] runes) {
for (int[] rune : runes) {
if (!MagicRequirements.wearingStaff(player, rune[0])) {
player.getItemAssistant().deleteItem(rune[0], rune[1]);
}
}
}
public static void deleteRunes(Player c, int[] runes, int[] amount) {
for (int i = 0; i < runes.length; i++) {
c.getItemAssistant().deleteItem(runes[i],
c.getItemAssistant().getItemSlot(runes[i]), amount[i]);
}
}
public static boolean hasRequiredLevel(Player c, int i) {
return c.playerLevel[6] >= i;
}
public static final int FIRE = 554,
WATER = 555,
AIR = 556,
EARTH = 557,
MIND = 558,
BODY = 559,
DEATH = 560,
NATURE = 561,
CHAOS = 562,
LAW = 563,
COSMIC = 564,
BLOOD = 565,
SOUL = 566,
ASTRAL = 9075;
}
@@ -0,0 +1,228 @@
package com.rs2.game.content.combat.magic;
import java.util.HashMap;
import java.util.Map;
import com.rs2.game.players.Player;
public class Enchanting {
private final Player c;
public Enchanting(Player player) {
this.c = player;
}
public enum Enchant {
SAPPHIRERING(1637, 2550, 7, 18, 719, 114, 1), SAPPHIREAMULET(1694,
1727, 7, 18, 719, 114, 1), SAPPHIRENECKLACE(1656, 3853, 7, 18,
719, 114, 1),
EMERALDRING(1639, 2552, 27, 37, 719, 114, 2), EMERALDAMULET(1696, 1729,
27, 37, 719, 114, 2), EMERALDNECKLACE(1658, 5521, 27, 37, 719,
114, 2),
RUBYRING(1641, 2568, 47, 59, 720, 115, 3), RUBYAMULET(1698, 1725, 47,
59, 720, 115, 3),
// RUBYNECKLACE(1660, 11194, 47, 59, 720, 115, 3),
DIAMONDRING(1643, 2570, 57, 67, 720, 115, 4), DIAMONDAMULET(1700, 1731,
57, 67, 720, 115, 4),
// DIAMONDNECKLACE(1662, 11090, 57, 67, 720, 115, 4),
DRAGONSTONERING(1645, 2572, 68, 78, 721, 116, 5),
DRAGONSTONEAMULET(1702, 1704, 68, 78, 721, 116, 5),
// DRAGONSTONENECKLACE(1664, 11105, 68, 78, 721, 116, 5),
ONYXRING(6575, 6583, 87, 97, 721, 452, 6), ONYXAMULET(6581, 6585, 87,
97, 721, 452, 6);
// ONYXNECKLACE(6577, 11128, 87, 97, 721, 452, 6)
int unenchanted, enchanted, levelReq, xpGiven, anim, gfx,
reqEnchantmentLevel;
private Enchant(int unenchanted, int enchanted, int levelReq,
int xpGiven, int anim, int gfx, int reqEnchantmentLevel) {
this.unenchanted = unenchanted;
this.enchanted = enchanted;
this.levelReq = levelReq;
this.xpGiven = xpGiven;
this.anim = anim;
this.gfx = gfx;
this.reqEnchantmentLevel = reqEnchantmentLevel;
}
public int getUnenchanted() {
return unenchanted;
}
public int getEnchanted() {
return enchanted;
}
public int getLevelReq() {
return levelReq;
}
public int getXp() {
return xpGiven;
}
public int getAnim() {
return anim;
}
public int getGFX() {
return gfx;
}
public int getELevel() {
return reqEnchantmentLevel;
}
private static final Map<Integer, Enchant> enc = new HashMap<Integer, Enchant>();
public static Enchant forId(int itemID) {
return enc.get(itemID);
}
static {
for (Enchant en : Enchant.values()) {
enc.put(en.getUnenchanted(), en);
}
}
}
private enum EnchantSpell {
SAPPHIRE(1155, 555, 1, 564, 1, -1, 0), EMERALD(1165, 556, 3, 564, 1,
-1, 0), RUBY(1176, 554, 5, 564, 1, -1, 0), DIAMOND(1180, 557,
10, 564, 1, -1, 0), DRAGONSTONE(1187, 555, 15, 557, 15, 564, 1), ONYX(
6003, 557, 20, 554, 20, 564, 1);
int spell, reqRune1, reqAmtRune1, reqRune2, reqAmtRune2, reqRune3,
reqAmtRune3;
private EnchantSpell(int spell, int reqRune1, int reqAmtRune1,
int reqRune2, int reqAmtRune2, int reqRune3, int reqAmtRune3) {
this.spell = spell;
this.reqRune1 = reqRune1;
this.reqAmtRune1 = reqAmtRune1;
this.reqRune2 = reqRune2;
this.reqAmtRune2 = reqAmtRune2;
this.reqRune3 = reqRune3;
this.reqAmtRune3 = reqAmtRune3;
}
public int getSpell() {
return spell;
}
public int getReq1() {
return reqRune1;
}
public int getReqAmt1() {
return reqAmtRune1;
}
public int getReq2() {
return reqRune2;
}
public int getReqAmt2() {
return reqAmtRune2;
}
public int getReq3() {
return reqRune3;
}
public int getReqAmt3() {
return reqAmtRune3;
}
public static final Map<Integer, EnchantSpell> ens = new HashMap<Integer, EnchantSpell>();
public static EnchantSpell forId(int id) {
return ens.get(id);
}
static {
for (EnchantSpell en : EnchantSpell.values()) {
ens.put(en.getSpell(), en);
}
}
}
private int getEnchantmentLevel(int spellID) {
switch (spellID) {
case 1155: // Lvl-1 enchant sapphire
return 1;
case 1165: // Lvl-2 enchant emerald
return 2;
case 1176: // Lvl-3 enchant ruby
return 3;
case 1180: // Lvl-4 enchant diamond
return 4;
case 1187: // Lvl-5 enchant dragonstone
return 5;
case 6003: // Lvl-6 enchant onyx
return 6;
}
return 0;
}
private int[][] getRequiredRunes(EnchantSpell ens){
if (ens.getReq3() > 0) {
return new int[][] {
{ens.getReq1(),ens.getReqAmt1()},
{ens.getReq2(), ens.getReqAmt2()},
{ens.getReq3(), ens.getReqAmt3()}
};
} else {
return new int[][]{
{ens.getReq1(), ens.getReqAmt1()},
{ens.getReq2(), ens.getReqAmt2()}
};
}
}
public void enchantItem(int itemID, int spellID) {
Enchant enc = Enchant.forId(itemID);
EnchantSpell ens = EnchantSpell.forId(spellID);
if (enc == null || ens == null) {
return;
}
if (c.playerLevel[c.playerMagic] >= enc.getLevelReq()) {
if (c.getItemAssistant().playerHasItem(enc.getUnenchanted(), 1)) {
if(CastRequirements.hasRunes(c, getRequiredRunes(ens))){
if (getEnchantmentLevel(spellID) == enc.getELevel()) {
c.getItemAssistant().deleteItem(enc.getUnenchanted(), 1);
c.getItemAssistant().addItem(enc.getEnchanted(), 1);
c.getPlayerAssistant().addSkillXP(enc.getXp(),
c.playerMagic);
CastRequirements.deleteRunes(c, getRequiredRunes(ens));
c.startAnimation(enc.getAnim());
c.gfx100(enc.getGFX());
c.getPacketSender().sendFrame106(6);
} else {
c.getPacketSender().sendMessage(
"You can only enchant this jewelery using a level-"
+ enc.getELevel()
+ " enchantment spell!");
}
} else {
c.getPacketSender().sendMessage(
"You do not have enough runes to cast this spell.");
}
}
} else {
c.getPacketSender().sendMessage(
"You need a magic level of at least " + enc.getLevelReq()
+ " to cast this spell.");
}
}
}
@@ -0,0 +1,388 @@
package com.rs2.game.content.combat.magic;
import com.rs2.game.players.Player;
public class MagicData {
public static final int[][] MAGIC_SPELLS = {
// example {magicId, level req, animation, startGFX, projectile Id,
// endGFX, maxhit, exp gained, rune 1, rune 1 amount, rune 2, rune 2
// amount, rune 3, rune 3 amount, rune 4, rune 4 amount}
// Modern Spells
{ 1152, 1, 711, 90, 91, 92, 2, 5, 556, 1, 558, 1, 0, 0, 0, 0, 993 }, // wind
// strike
{ 1154, 5, 711, 93, 94, 95, 4, 7, 555, 1, 556, 1, 558, 1, 0, 0, 211 }, // water
// strike
{ 1156, 9, 711, 96, 97, 98, 6, 9, 557, 2, 556, 1, 558, 1, 0, 0, 0 },// earth
// strike
{ 1158, 13, 711, 99, 100, 101, 8, 11, 554, 3, 556, 2, 558, 1, 0, 0,
0 }, // fire
// strike
{ 1160, 17, 711, 117, 118, 119, 9, 13, 556, 2, 562, 1, 0, 0, 0, 0,
0 }, // wind
// bolt
{ 1163, 23, 711, 120, 121, 122, 10, 16, 556, 2, 555, 2, 562, 1, 0,
0, 0 }, // water
// bolt
{ 1166, 29, 711, 123, 124, 125, 11, 20, 556, 2, 557, 3, 562, 1, 0,
0, 0 }, // earth
// bolt
{ 1169, 35, 711, 126, 127, 128, 12, 22, 556, 3, 554, 4, 562, 1, 0,
0, 0 }, // fire
// bolt
{ 1172, 41, 711, 132, 133, 134, 13, 25, 556, 3, 560, 1, 0, 0, 0, 0,
0 }, // wind
// blast
{ 1175, 47, 711, 135, 136, 137, 14, 28, 556, 3, 555, 3, 560, 1, 0,
0, 0 }, // water
// blast
{ 1177, 53, 711, 138, 139, 140, 15, 31, 556, 3, 557, 4, 560, 1, 0,
0, 0 }, // earth
// blast
{ 1181, 59, 711, 129, 130, 131, 16, 35, 556, 4, 554, 5, 560, 1, 0,
0, 0 }, // fire
// blast
{ 1183, 62, 727, 158, 159, 160, 17, 36, 556, 5, 565, 1, 0, 0, 0, 0,
0 }, // wind
// wave
{ 1185, 65, 727, 161, 162, 163, 18, 37, 556, 5, 555, 7, 565, 1, 0,
0, 0 }, // water
// wave
{ 1188, 70, 727, 164, 165, 166, 19, 40, 556, 5, 557, 7, 565, 1, 0,
0, 0 }, // earth
// wave
{ 1189, 75, 727, 155, 156, 157, 20, 42, 556, 5, 554, 7, 565, 1, 0,
0, 0 }, // fire
// wave
{ 1153, 3, 716, 102, 103, 104, 0, 13, 555, 3, 557, 2, 559, 1, 0, 0,
0 }, // confuse
{ 1157, 11, 716, 105, 106, 107, 0, 20, 555, 3, 557, 2, 559, 1, 0,
0, 0 }, // weaken
{ 1161, 19, 716, 108, 109, 110, 0, 29, 555, 2, 557, 3, 559, 1, 0,
0, 0 }, // curse
{ 1542, 66, 729, 167, 168, 169, 0, 76, 557, 5, 555, 5, 566, 1, 0,
0, 0 }, // vulnerability
{ 1543, 73, 729, 170, 171, 172, 0, 83, 557, 8, 555, 8, 566, 1, 0,
0, 0 }, // enfeeble
{ 1562, 80, 729, 173, 174, 107, 0, 90, 557, 12, 555, 12, 556, 1, 0,
0, 0 }, // stun
{ 1572, 20, 710, 177, 178, 181, 0, 30, 557, 3, 555, 3, 561, 2, 0,
0, 0 }, // bind
{ 1582, 50, 710, 177, 178, 180, 2, 60, 557, 4, 555, 4, 561, 3, 0,
0, 0 }, // snare
{ 1592, 79, 710, 177, 178, 179, 4, 90, 557, 5, 555, 5, 561, 4, 0,
0, 0 }, // entangle
{ 1171, 39, 724, 145, 146, 147, 15, 25, 556, 2, 557, 2, 562, 1, 0, 0, 0 }, // crumble
{ 1539, 50, 708, 87, 88, 89, 25, 42, 554, 5, 560, 1, 0, 0, 0, 0, 0 }, // iban
// blast
{ 12037, 50, 1576, 327, 328, 329, 19, 30, 560, 1, 558, 4, 0, 0, 0,
0, 0 }, // magic
// dart
{ 1190, 60, 811, 0, 0, 76, 20, 60, 554, 2, 565, 2, 556, 4, 0, 0, 0 }, // sara
// strike
{ 1191, 60, 811, 0, 0, 77, 20, 60, 554, 1, 565, 2, 556, 4, 0, 0, 0 }, // cause
// of
// guthix
{ 1192, 60, 811, 0, 0, 78, 20, 60, 554, 4, 565, 2, 556, 1, 0, 0, 0 }, // flames
// of
// zammy
{ 12445, 85, 1819, 0, 344, 345, 0, 65, 563, 1, 562, 1, 560, 1, 0,
0, 0 }, // teleblock
// Ancient Spells
{ 12939, 50, 1978, 0, 384, 385, 13, 30, 560, 2, 562, 2, 554, 1,
556, 1, 0 }, // smoke
// rush
{ 12987, 52, 1978, 0, 378, 379, 14, 31, 560, 2, 562, 2, 566, 1,
556, 1, 0 }, // shadow
// rush
{ 12901, 56, 1978, 0, 0, 373, 15, 33, 560, 2, 562, 2, 565, 1, 0, 0,
0 }, // blood
// rush
{ 12861, 58, 1978, 0, 360, 361, 16, 34, 560, 2, 562, 2, 555, 2, 0,
0, 0 }, // ice
// rush
{ 12963, 62, 1979, 0, 0, 389, 19, 36, 560, 2, 562, 4, 556, 2, 554,
2, 0 }, // smoke
// burst
{ 13011, 64, 1979, 0, 0, 382, 20, 37, 560, 2, 562, 4, 556, 2, 566,
2, 0 }, // shadow
// burst
{ 12919, 68, 1979, 0, 0, 376, 21, 39, 560, 2, 562, 4, 565, 2, 0, 0,
0 }, // blood
// burst
{ 12881, 70, 1979, 0, 0, 363, 22, 40, 560, 2, 562, 4, 555, 4, 0, 0,
0 }, // ice
// burst
{ 12951, 74, 1978, 0, 386, 387, 23, 42, 560, 2, 554, 2, 565, 2,
556, 2, 0 }, // smoke
// blitz
{ 12999, 76, 1978, 0, 380, 381, 24, 43, 560, 2, 565, 2, 556, 2,
566, 2, 0 }, // shadow
// blitz
{ 12911, 80, 1978, 0, 374, 375, 25, 45, 560, 2, 565, 4, 0, 0, 0, 0,
0 }, // blood
// blitz
{ 12871, 82, 1978, 366, 0, 367, 26, 46, 560, 2, 565, 2, 555, 3, 0,
0, 0 }, // ice
// blitz
{ 12975, 86, 1979, 0, 0, 391, 27, 48, 560, 4, 565, 2, 556, 4, 554,
4, 0 }, // smoke
// barrage
{ 13023, 88, 1979, 0, 0, 383, 28, 49, 560, 4, 565, 2, 556, 4, 566,
3, 0 }, // shadow
// barrage
{ 12929, 92, 1979, 0, 0, 377, 29, 51, 560, 4, 565, 4, 566, 1, 0, 0,
0 }, // blood
// barrage
{ 12891, 94, 1979, 0, 0, 369, 30, 52, 560, 4, 565, 2, 555, 6, 0, 0,
0 }, // ice
// barrage
{ -1, 80, 811, 301, 0, 0, 0, 0, 554, 3, 565, 3, 556, 3, 0, 0, 0 }, // charge
{ -1, 21, 712, 112, 0, 0, 0, 10, 554, 3, 561, 1, 0, 0, 0, 0, 0 }, // low
// alch
{ -1, 55, 713, 113, 0, 0, 0, 20, 554, 5, 561, 1, 0, 0, 0, 0, 0 }, // high
// alch
{ -1, 33, 728, 142, 143, 144, 0, 35, 556, 1, 563, 1, 0, 0, 0, 0, 0 } // telegrab
};
public static String getSpellName(int id) {
switch (id) {
case 0:
return "Air Strike";
case 1:
return "Water Strike";
case 2:
return "Earth Strike";
case 3:
return "Fire Strike";
case 4:
return "Air Bolt";
case 5:
return "Water Bolt";
case 6:
return "Earth Bolt";
case 7:
return "Fire Bolt";
case 8:
return "Air Blast";
case 9:
return "Water Blast";
case 10:
return "Earth Blast";
case 11:
return "Fire Blast";
case 12:
return "Air Wave";
case 13:
return "Water Wave";
case 14:
return "Earth Wave";
case 15:
return "Fire Wave";
case 32:
return "Shadow Rush";
case 33:
return "Smoke Rush";
case 34:
return "Blood Rush";
case 35:
return "Ice Rush";
case 36:
return "Shadow Burst";
case 37:
return "Smoke Burst";
case 38:
return "Blood Burst";
case 39:
return "Ice Burst";
case 40:
return "Shadow Blitz";
case 41:
return "Smoke Blitz";
case 42:
return "Blood Blitz";
case 43:
return "Ice Blitz";
case 44:
return "Shadow Barrage";
case 45:
return "Smoke Barrage";
case 46:
return "Blood Barrage";
case 47:
return "Ice Barrage";
default:
return "Select Spell";
}
}
public static boolean multis(Player c) {
switch (MAGIC_SPELLS[c.oldSpellId][0]) {
case 12891:
case 12881:
case 13011:
case 13023:
case 12919: // blood spells
case 12929:
case 12963:
case 12975:
return true;
}
return false;
}
public static int getFreezeTime(Player c) {
switch (MAGIC_SPELLS[c.oldSpellId][0]) {
case 1572:
case 12861: // ice rush
return 10;
case 1582:
case 12881: // ice burst
return 17;
case 1592:
case 12871: // ice blitz
return 25;
case 12891: // ice barrage
return 33;
default:
return 0;
}
}
public static int getStartHeight(Player c) {
switch (MAGIC_SPELLS[c.spellId][0]) {
case 1562: // stun
return 25;
case 12939:// smoke rush
return 35;
case 12987: // shadow rush
return 38;
case 12861: // ice rush
return 15;
case 12951: // smoke blitz
return 38;
case 12999: // shadow blitz
return 25;
case 12911: // blood blitz
return 25;
default:
return 43;
}
}
public static int getEndHeight(Player c) {
switch (MAGIC_SPELLS[c.spellId][0]) {
case 1562: // stun
return 10;
case 12939: // smoke rush
return 20;
case 12987: // shadow rush
return 28;
case 12861: // ice rush
return 10;
case 12951: // smoke blitz
return 28;
case 12999: // shadow blitz
return 15;
case 12911: // blood blitz
return 10;
default:
return 31;
}
}
public static int getStartDelay(Player c) {
switch (MAGIC_SPELLS[c.spellId][0]) {
case 1539:
return 60;
default:
return 53;
}
}
public static boolean godSpells(Player c) {
switch (MAGIC_SPELLS[c.spellId][0]) {
case 1190:
return true;
case 1191:
return true;
case 1192:
return true;
default:
return false;
}
}
public static int getEndGfxHeight(Player c) {
switch (MAGIC_SPELLS[c.oldSpellId][0]) {
case 12987:
case 12901:
case 12861:
case 12445:
case 1192:
case 13011:
case 12919:
case 12881:
case 12999:
case 12911:
case 12871:
case 13023:
case 12929:
case 12891:
return 0;
default:
return 100;
}
}
public static int getStartGfxHeight(Player c) {
switch (MAGIC_SPELLS[c.spellId][0]) {
case 12871:
case 12891:
return 0;
default:
return 100;
}
}
public static boolean fullVoidMage(Player c) {
return c.playerEquipment[c.playerHat] == 11663
&& c.playerEquipment[c.playerLegs] == 8840
&& c.playerEquipment[c.playerChest] == 8839
&& c.playerEquipment[c.playerHands] == 8842;
}
}
@@ -0,0 +1,38 @@
package com.rs2.game.content.combat.magic;
import com.rs2.game.players.Player;
public class MagicMaxHit {
public static int mageAttackBonus(Player c) {
int magicBonus = c.playerLevel[6];
if (MagicData.fullVoidMage(c)) {
magicBonus += c.getLevelForXP(c.playerXP[6]) * 0.2;
}
if (c.getPrayer().prayerActive[4]) {
magicBonus *= 1.05;
} else if (c.getPrayer().prayerActive[12]) {
magicBonus *= 1.10;
} else if (c.getPrayer().prayerActive[20]) {
magicBonus *= 1.15;
}
return magicBonus + c.playerBonus[3] * 2;
}
public static int mageDefenceBonus(Player c) {
int defenceBonus = c.playerLevel[1] / 2 + c.playerLevel[6] / 2;
if (c.getPrayer().prayerActive[0]) {
defenceBonus += c.getLevelForXP(c.playerXP[c.playerDefence]) * 0.05;
} else if (c.getPrayer().prayerActive[3]) {
defenceBonus += c.getLevelForXP(c.playerXP[c.playerDefence]) * 0.1;
} else if (c.getPrayer().prayerActive[9]) {
defenceBonus += c.getLevelForXP(c.playerXP[c.playerDefence]) * 0.15;
} else if (c.getPrayer().prayerActive[18]) {
defenceBonus += c.getLevelForXP(c.playerXP[c.playerDefence]) * 0.2;
} else if (c.getPrayer().prayerActive[19]) {
defenceBonus += c.getLevelForXP(c.playerXP[c.playerDefence]) * 0.25;
}
return defenceBonus + c.playerBonus[8] + c.playerBonus[8] / 3;
}
}
@@ -0,0 +1,175 @@
package com.rs2.game.content.combat.magic;
import com.rs2.game.items.ItemAssistant;
import com.rs2.game.players.Player;
import com.rs2.game.players.PlayerHandler;
public class MagicRequirements {
public static boolean wearingStaff(Player player, int runeId) {
int wep = player.playerEquipment[player.playerWeapon];
switch (runeId) {
case 554:
if (wep == 1387 || wep == 1393 || wep == 3053) {
return true;
}
break;
case 555:
if (wep == 1383 || wep == 1395 || wep == 6562) {
return true;
}
break;
case 556:
if (wep == 1381 || wep == 1397) {
return true;
}
break;
case 557:
if (wep == 1385 || wep == 1399 || wep == 3053 || wep == 6562) {
return true;
}
break;
}
return false;
}
public static boolean checkMagicReqs(Player c, int spell) {
if (c.usingMagic && MagicTeleports.RUNES_REQUIRED) { // check for runes
if (!c.getItemAssistant().playerHasItem(
MagicData.MAGIC_SPELLS[spell][8],
MagicData.MAGIC_SPELLS[spell][9])
&& !wearingStaff(c, MagicData.MAGIC_SPELLS[spell][8])
|| !c.getItemAssistant().playerHasItem(
MagicData.MAGIC_SPELLS[spell][10],
MagicData.MAGIC_SPELLS[spell][11])
&& !wearingStaff(c, MagicData.MAGIC_SPELLS[spell][10])
|| !c.getItemAssistant().playerHasItem(
MagicData.MAGIC_SPELLS[spell][12],
MagicData.MAGIC_SPELLS[spell][13])
&& !wearingStaff(c, MagicData.MAGIC_SPELLS[spell][12])
|| !c.getItemAssistant().playerHasItem(
MagicData.MAGIC_SPELLS[spell][14],
MagicData.MAGIC_SPELLS[spell][15])
&& !wearingStaff(c, MagicData.MAGIC_SPELLS[spell][14])) {
c.getPacketSender()
.sendMessage(
"You don't have the required runes to cast this spell.");
return false;
}
}
if (c.usingMagic && c.playerIndex > 0) {
if (PlayerHandler.players[c.playerIndex] != null) {
for (int r = 0; r < c.REDUCE_SPELLS.length; r++) { // reducing
// spells,
// confuse
// etc
if (PlayerHandler.players[c.playerIndex].REDUCE_SPELLS[r] == MagicData.MAGIC_SPELLS[spell][0]) {
c.reduceSpellId = r;
if (System.currentTimeMillis()
- PlayerHandler.players[c.playerIndex].reduceSpellDelay[c.reduceSpellId] > PlayerHandler.players[c.playerIndex].REDUCE_SPELL_TIME[c.reduceSpellId]) {
PlayerHandler.players[c.playerIndex].canUseReducingSpell[c.reduceSpellId] = true;
} else {
PlayerHandler.players[c.playerIndex].canUseReducingSpell[c.reduceSpellId] = false;
}
break;
}
}
if (!PlayerHandler.players[c.playerIndex].canUseReducingSpell[c.reduceSpellId]) {
c.getPacketSender().sendMessage(
"That player is currently immune to this spell.");
c.usingMagic = false;
c.stopMovement();
c.getCombatAssistant().resetPlayerAttack();
return false;
}
}
}
int staffRequired = getStaffNeeded(c);
if (c.usingMagic && staffRequired > 0 && MagicTeleports.RUNES_REQUIRED) { // staff
// required
if (c.playerEquipment[c.playerWeapon] != staffRequired) {
c.getPacketSender()
.sendMessage(
"You need a "
+ ItemAssistant.getItemName(
staffRequired).toLowerCase()
+ " to cast this spell.");
return false;
}
}
if (c.usingMagic && MagicTeleports.MAGIC_LEVEL_REQUIRED) { // check magic level
if (c.playerLevel[6] < MagicData.MAGIC_SPELLS[spell][1]) {
c.getPacketSender().sendMessage(
"You need to have a magic level of "
+ MagicData.MAGIC_SPELLS[spell][1]
+ " to cast this spell.");
return false;
}
}
if (c.usingMagic && MagicTeleports.RUNES_REQUIRED) {
if (MagicData.MAGIC_SPELLS[spell][8] > 0) { // deleting runes
if (!wearingStaff(c, MagicData.MAGIC_SPELLS[spell][8])) {
c.getItemAssistant().deleteItem(
MagicData.MAGIC_SPELLS[spell][8],
c.getItemAssistant().getItemSlot(
MagicData.MAGIC_SPELLS[spell][8]),
MagicData.MAGIC_SPELLS[spell][9]);
}
}
if (MagicData.MAGIC_SPELLS[spell][10] > 0) {
if (!wearingStaff(c, MagicData.MAGIC_SPELLS[spell][10])) {
c.getItemAssistant().deleteItem(
MagicData.MAGIC_SPELLS[spell][10],
c.getItemAssistant().getItemSlot(
MagicData.MAGIC_SPELLS[spell][10]),
MagicData.MAGIC_SPELLS[spell][11]);
}
}
if (MagicData.MAGIC_SPELLS[spell][12] > 0) {
if (!wearingStaff(c, MagicData.MAGIC_SPELLS[spell][12])) {
c.getItemAssistant().deleteItem(
MagicData.MAGIC_SPELLS[spell][12],
c.getItemAssistant().getItemSlot(
MagicData.MAGIC_SPELLS[spell][12]),
MagicData.MAGIC_SPELLS[spell][13]);
}
}
if (MagicData.MAGIC_SPELLS[spell][14] > 0) {
if (!wearingStaff(c, MagicData.MAGIC_SPELLS[spell][14])) {
c.getItemAssistant().deleteItem(
MagicData.MAGIC_SPELLS[spell][14],
c.getItemAssistant().getItemSlot(
MagicData.MAGIC_SPELLS[spell][14]),
MagicData.MAGIC_SPELLS[spell][15]);
}
}
}
return true;
}
public static int getStaffNeeded(Player c) {
switch (MagicData.MAGIC_SPELLS[c.spellId][0]) {
case 1539:
return 1409;
case 12037:
return 4170;
case 1190:
return 2415;
case 1191:
return 2416;
case 1192:
return 2417;
default:
return 0;
}
}
}
@@ -0,0 +1,137 @@
package com.rs2.game.content.combat.magic;
import com.rs2.game.content.combat.CombatConstants;
import com.rs2.game.content.music.sound.SoundList;
import com.rs2.game.players.Client;
import com.rs2.game.players.Player;
import com.rs2.game.players.PlayerHandler;
import com.rs2.util.Misc;
import com.rs2.world.Boundary;
public class MagicSpells extends MagicData {
public static void appendMultiBarrage(Player c, int playerId, boolean splashed) {
if (PlayerHandler.players[playerId] != null) {
Player c2 = (Client) PlayerHandler.players[playerId];
if (c2.isDead || c2.respawnTimer > 0) {
return;
}
if (checkMultiBarrageReqs(c, playerId)) {
c.barrageCount++;
if (Misc.random(mageAtk(c)) > Misc.random(mageDef(c))
&& !c.magicFailed) {
if (getEndGfxHeight(c) == 100) { // end GFX
c2.gfx100(MagicData.MAGIC_SPELLS[c.oldSpellId][5]);
} else {
c2.gfx0(MagicData.MAGIC_SPELLS[c.oldSpellId][5]);
}
int damage = Misc
.random(MagicData.MAGIC_SPELLS[c.oldSpellId][6]);
if (c2.getPrayer().prayerActive[12]) {
damage *= (int) .60;
}
if (c2.playerLevel[3] - damage < 0) {
damage = c2.playerLevel[3];
}
c.getPlayerAssistant().addSkillXP(MagicData.MAGIC_SPELLS[c.oldSpellId][7] + damage * CombatConstants.MAGIC_EXP_RATE, 6);
c.getPlayerAssistant().addSkillXP(MagicData.MAGIC_SPELLS[c.oldSpellId][7] + damage / 3, 3);
// Server.playerHandler.players[playerId].setHitDiff(damage);
// Server.playerHandler.players[playerId].setHitUpdateRequired(true);
PlayerHandler.players[playerId].handleHitMask(damage);
// Server.playerHandler.players[playerId].playerLevel[3] -=
// damage;
PlayerHandler.players[playerId].dealDamage(damage);
PlayerHandler.players[playerId].damageTaken[c.playerId] += damage;
c2.getPlayerAssistant().refreshSkill(3);
c.totalPlayerDamageDealt += damage;
multiSpellEffect(c, playerId, damage);
} else {
c2.gfx100(85);
c.getPacketSender().sendSound(SoundList.MAGE_FAIL, 100,
0);
}
}
}
}
public static void multiSpellEffect(Player c, int playerId, int damage) {
switch (MagicData.MAGIC_SPELLS[c.oldSpellId][0]) {
case 13011:
case 13023:
if (System.currentTimeMillis()
- PlayerHandler.players[playerId].reduceStat > 35000) {
PlayerHandler.players[playerId].reduceStat = System
.currentTimeMillis();
PlayerHandler.players[playerId].playerLevel[0] -= PlayerHandler.players[playerId]
.getLevelForXP(PlayerHandler.players[playerId].playerXP[0]) * 10 / 100;
}
break;
case 12919: // blood spells
case 12929:
int heal = damage / 4;
if (c.playerLevel[3] + heal >= c.getPlayerAssistant()
.getLevelForXP(c.playerXP[3])) {
c.playerLevel[3] = c.getPlayerAssistant().getLevelForXP(
c.playerXP[3]);
} else {
c.playerLevel[3] += heal;
}
c.getPlayerAssistant().refreshSkill(3);
break;
case 12891:
case 12881:
if (PlayerHandler.players[playerId].freezeTimer < -4) {
PlayerHandler.players[playerId].freezeTimer = getFreezeTime(c);
PlayerHandler.players[playerId].stopMovement();
}
break;
}
}
public static boolean checkMultiBarrageReqs(Player c, int i) {
if (PlayerHandler.players[i] == null) {
return false;
}
if (i == c.playerId) {
return false;
}
if (c.inPits && PlayerHandler.players[i].inPits) {
return true;
}
if (!PlayerHandler.players[i].inWild()) {
return false;
}
if (CombatConstants.COMBAT_LEVEL_DIFFERENCE) {
int combatDif1 = c.getCombatAssistant().getCombatDifference(c.combatLevel,
PlayerHandler.players[i].combatLevel);
if (combatDif1 > c.wildLevel
|| combatDif1 > PlayerHandler.players[i].wildLevel) {
c.getPacketSender()
.sendMessage(
"Your combat level difference is too great to attack that player here.");
return false;
}
}
if (CombatConstants.SINGLE_AND_MULTI_ZONES) {
if (!Boundary.isIn(PlayerHandler.players[i], Boundary.MULTI)) { // single combat zones
if (PlayerHandler.players[i].underAttackBy != c.playerId && PlayerHandler.players[i].underAttackBy != 0) {
return false;
}
if (PlayerHandler.players[i].playerId != c.underAttackBy && c.underAttackBy != 0) {
c.getPacketSender().sendMessage("You are already in combat.");
return false;
}
}
}
return true;
}
public static int mageAtk(Player c) {
return MagicMaxHit.mageAttackBonus(c);
}
public static int mageDef(Player c) {
return MagicMaxHit.mageDefenceBonus(c);
}
}
@@ -0,0 +1,44 @@
package com.rs2.game.content.combat.magic;
import com.rs2.game.content.randomevents.RandomEventHandler;
import com.rs2.game.players.Player;
public class MagicTeleports {
public static void handleLoginText(Player player) {
player.getPacketSender().sendString("Level 25: Varrock Teleport", 1300);
player.getPacketSender().sendString("Level 31: Lumbridge Teleport", 1325);
player.getPacketSender().sendString("Level 37: Falador Teleport", 1350);
player.getPacketSender().sendString("Level 45: Camelot Teleport", 1382);
player.getPacketSender().sendString("Level 51: Ardougne Teleport", 1415);
player.getPacketSender().sendString("Level 54: Paddewwa Teleport", 13037);
player.getPacketSender().sendString("Level 60: Senntisten Teleport", 13047);
player.getPacketSender().sendString("Level 66: Kharyrll Teleport", 13055);
player.getPacketSender().sendString("Level 72: Lassar Teleport", 13063);
player.getPacketSender().sendString("Level 78: Dareeyak Teleport", 13071);
}
public static final boolean MAGIC_LEVEL_REQUIRED = true, RUNES_REQUIRED = true;
public static void handleSpellTeleport(Player player, SpellTeleport teleport) {
if (player.teleTimer > 0) {
return;
}
if (player.wildLevel > 20) {
player.getPacketSender().sendMessage("You can't teleport above level 20 wilderness.");
return;
}
if (player.playerLevel[player.playerMagic] < teleport.getRequiredLevel()) {
player.getPacketSender().sendMessage("You need a magic level of " + teleport.getRequiredLevel() + " to cast this spell.");
return;
}
if (!CastRequirements.hasRunes(player, teleport.getRequiredRunes())) {
player.getPacketSender().sendMessage("You don't have the required runes to cast this spell.");
return;
}
RandomEventHandler.addRandom(player);
CastRequirements.deleteRunes(player, teleport.getRequiredRunes());
player.getPlayerAssistant().startTeleport(teleport.getDestX(), teleport.getDestY(), teleport.getDestZ(), teleport.getType());
player.getPlayerAssistant().addSkillXP(teleport.getExperienceGained(), player.playerMagic);
}
}
@@ -0,0 +1,23 @@
package com.rs2.game.content.combat.magic;
import com.rs2.game.players.Client;
public class NonCombatSpells {
public static void teleportObelisk(Client c, int x, int y, int height) {
if (System.currentTimeMillis() - c.teleBlockDelay < c.teleBlockLength) {
c.getPacketSender().sendMessage(
"You are teleblocked and can't teleport.");
return;
}
if (!c.isDead && !c.isTeleporting) {
c.stopMovement();
c.getPacketSender().closeAllWindows();
c.npcIndex = 0;
c.playerIndex = 0;
c.faceNpc(0);
c.getPlayerAssistant().spellTeleport(x, y, height);
}
}
}
@@ -0,0 +1,82 @@
package com.rs2.game.content.combat.magic;
public enum SpellTeleport {
VARROCK(25, 4140, 35, 3213, 3422, 0, new int[][]{{563, 1}, {554, 1}, {556, 3}}, "modern"),
LUMBRIDGE(31,4143, 41, 3222, 3218, 0, new int[][]{{563, 1}, {557, 1}, {556, 3}}, "modern"),
FALADOR(37, 4146, 48, 2965, 3378, 0, new int[][]{{563, 1}, {555, 1}, {556, 3}}, "modern"),
CAMELOT(45, 4150, 55.5, 2757, 3479, 0, new int[][]{{563, 1}, {556, 5}}, "modern"),
ARDOUGNE(51, 6004, 61, 2662, 3304, 0, new int[][]{{563, 2}, {555, 2}}, "modern"),
WATCHTOWER(58, 6005, 68, 2547, 3112, 1, new int[][]{{563, 2}, {557, 2}}, "modern"),
TROLLHEIM(61, 29031, 68, 2893, 3679, 0, new int[][]{{563, 2}, {554, 2}}, "modern"),
APE_ATOLL(64, 72038, 74, 2798, 2798, 1, new int[][]{{563, 2}, {554, 2}, {555, 2}, {1963, 1}}, "modern"),
PADDEWWA(54, 50235, 64, 3098, 9884, 0, new int[][] {{563, 2}, {554, 1}, {556, 1}}, "ancient"),
SENNTISTEN(60, 50245, 70, 3321, 3335, 0, new int[][] {{566, 1}, {563, 2}}, "ancient"),
KHARYLL(66, 50253, 76, 3493, 3472, 0, new int[][] {{565, 1}, {563, 2}}, "ancient"),
LASSAR(72, 51005, 82, 3006, 3471, 0, new int[][] {{563, 2}, {555, 4}}, "ancient"),
DAREEYAK(78, 51013, 88, 3161, 3671, 0, new int[][] {{563, 2}, {554, 3}, {556, 2}}, "ancient"),
CARRALLANGAR(84, 51023, 94, 3157, 3669, 0, new int[][] {{566, 2}, {563, 2}}, "ancient"),
ANNAKARL(90, 51031, 100, 3286, 3884, 0, new int[][] {{565, 2}, {563, 2}}, "ancient"),
GHORROCK(96, 51039, 106, 2977, 3873, 0, new int[][] {{563, 2}, {555, 8}}, "ancient");
int requiredLevel, buttonId, destX, destY, destZ;
double experienceGained;
int[][] requiredRunes;
String type;
SpellTeleport(int requiredLevel, int buttonId, double experienceGained, int destX, int destY, int destZ, int[][] requiredRunes, String type) {
this.requiredLevel = requiredLevel;
this.buttonId = buttonId;
this.experienceGained = experienceGained;
this.destX = destX;
this.destY = destY;
this.destZ = destZ;
this.requiredRunes = requiredRunes;
this.type = type;
}
public int getRequiredLevel() {
return requiredLevel;
}
public int getButtonId() {
return buttonId;
}
public int getDestX() {
return destX;
}
public int getDestY() {
return destY;
}
public int getDestZ(){
return destZ;
}
public int[][] getRequiredRunes() {
return requiredRunes;
}
public double getExperienceGained() {
return experienceGained;
}
public String getType() {
return type;
}
public static SpellTeleport forButtonId(int id) {
for (SpellTeleport t : values()) {
if (t != null) {
if (t.getButtonId() == id) {
return t;
}
}
}
return null;
}
}
@@ -0,0 +1,470 @@
package com.rs2.game.content.combat.melee;
import com.rs2.game.content.combat.magic.MagicData;
import com.rs2.game.items.ItemAssistant;
import com.rs2.game.items.ItemConstants;
import com.rs2.game.items.impl.Greegree.MonkeyData;
import com.rs2.game.players.Player;
public class MeleeData {
public static boolean fullVoidMelee(Player c) {
return c.playerEquipment[c.playerHat] == 11665
&& c.playerEquipment[c.playerLegs] == 8840
&& c.playerEquipment[c.playerChest] == 8839
&& c.playerEquipment[c.playerHands] == 8842;
}
public static int calculateMeleeAttack(Player c) {
int attackLevel = c.playerLevel[0];
// 2, 5, 11, 18, 19
if (c.getPrayer().prayerActive[2]) {
attackLevel += c.getLevelForXP(c.playerXP[c.playerAttack]) * 0.05;
} else if (c.getPrayer().prayerActive[7]) {
attackLevel += c.getLevelForXP(c.playerXP[c.playerAttack]) * 0.1;
} else if (c.getPrayer().prayerActive[15]) {
attackLevel += c.getLevelForXP(c.playerXP[c.playerAttack]) * 0.15;
} else if (c.getPrayer().prayerActive[24]) {
attackLevel += c.getLevelForXP(c.playerXP[c.playerAttack]) * 0.15;
} else if (c.getPrayer().prayerActive[25]) {
attackLevel += c.getLevelForXP(c.playerXP[c.playerAttack]) * 0.2;
}
if (fullVoidMelee(c)) {
attackLevel += c.getLevelForXP(c.playerXP[c.playerAttack]) * 0.1;
}
attackLevel *= c.specAccuracy;
// c.sendMessage("Attack: " + (attackLevel +
// (c.playerBonus[bestMeleeAtk()] * 2)));
int i = c.playerBonus[bestMeleeAtk(c)];
i += c.bonusAttack;
if (c.playerEquipment[c.playerAmulet] == 11128
&& c.playerEquipment[c.playerWeapon] == 6528) {
i *= 1.30;
}
return (int) (attackLevel + attackLevel * 0.15 + (i + i * 0.05));
}
public static int bestMeleeAtk(Player c) {
if (c.playerBonus[0] > c.playerBonus[1]
&& c.playerBonus[0] > c.playerBonus[2]) {
return 0;
}
if (c.playerBonus[1] > c.playerBonus[0]
&& c.playerBonus[1] > c.playerBonus[2]) {
return 1;
}
return c.playerBonus[2] <= c.playerBonus[1]
|| c.playerBonus[2] <= c.playerBonus[0] ? 0 : 2;
}
public static int calculateMeleeDefence(Player c) {
int defenceLevel = c.playerLevel[1];
int i = c.playerBonus[bestMeleeDef(c)];
if (c.getPrayer().prayerActive[0]) {
defenceLevel += c.getLevelForXP(c.playerXP[c.playerDefence]) * 0.05;
} else if (c.getPrayer().prayerActive[5]) {
defenceLevel += c.getLevelForXP(c.playerXP[c.playerDefence]) * 0.1;
} else if (c.getPrayer().prayerActive[13]) {
defenceLevel += c.getLevelForXP(c.playerXP[c.playerDefence]) * 0.15;
} else if (c.getPrayer().prayerActive[24]) {
defenceLevel += c.getLevelForXP(c.playerXP[c.playerDefence]) * 0.2;
} else if (c.getPrayer().prayerActive[25]) {
defenceLevel += c.getLevelForXP(c.playerXP[c.playerDefence]) * 0.25;
}
return (int) (defenceLevel + defenceLevel * 0.15 + (i + i * 0.05));
}
public static int bestMeleeDef(Player c) {
if (c.playerBonus[5] > c.playerBonus[6]
&& c.playerBonus[5] > c.playerBonus[7]) {
return 5;
}
if (c.playerBonus[6] > c.playerBonus[5]
&& c.playerBonus[6] > c.playerBonus[7]) {
return 6;
}
return c.playerBonus[7] <= c.playerBonus[5]
|| c.playerBonus[7] <= c.playerBonus[6] ? 5 : 7;
}
/**
* Weapon and magic attack speed!
**/
public static int getAttackDelay(Player c) {
String s = ItemAssistant.getItemName(c.playerEquipment[ItemConstants.WEAPON]).toLowerCase();
if (c.usingMagic) {
switch (MagicData.MAGIC_SPELLS[c.spellId][0]) {
case 12871: // ice blitz
case 13023: // shadow barrage
case 12891: // ice barrage
return 5;
default:
return 5;
}
}
if (c.playerEquipment[c.playerWeapon] == -1) {
return 4;// unarmed
}
switch (c.playerEquipment[c.playerWeapon]) {
case 11235:
return 9;
case 11730:
return 4;
case 6528:
return 7;
}
if (s.endsWith("greataxe")) {
return 7;
} else if (s.equals("torags hammers")) {
return 5;
} else if (s.equals("guthans warspear")) {
return 5;
} else if (s.equals("veracs flail")) {
return 5;
} else if (s.equals("ahrims staff")) {
return 6;
} else if (s.contains("staff")) {
if (s.contains("zamarok") || s.contains("guthix")
|| s.contains("saradomian") || s.contains("slayer")
|| s.contains("ancient")) {
return 4;
} else {
return 5;
}
} else if (s.contains("bow")) {
if (s.contains("composite") || s.equals("seercull")) {
return 5;
} else if (s.contains("aril")) {
return 4;
} else if (s.contains("Ogre")) {
return 8;
} else if (s.contains("short") || s.contains("hunt")
|| s.contains("sword")) {
return 4;
} else if (s.contains("long") || s.contains("crystal")) {
return 6;
} else if (s.contains("'bow")) {
return 7;
}
return 5;
} else if (s.contains("dagger")) {
return 4;
} else if (s.contains("godsword") || s.contains("2h")) {
return 6;
} else if (s.contains("longsword")) {
return 5;
} else if (s.contains("sword")) {
return 4;
} else if (s.contains("scimitar")) {
return 4;
} else if (s.contains("mace")) {
return 5;
} else if (s.contains("battleaxe")) {
return 6;
} else if (s.contains("pickaxe")) {
return 5;
} else if (s.contains("thrownaxe")) {
return 5;
} else if (s.contains("axe")) {
return 5;
} else if (s.contains("warhammer")) {
return 6;
} else if (s.contains("2h")) {
return 7;
} else if (s.contains("spear")) {
return 5;
} else if (s.contains("claw")) {
return 4;
} else if (s.contains("halberd")) {
return 7;
} else if (s.equals("granite maul")) {
return 7;
} else if (s.equals("toktz-xil-ak")) {
return 4;
} else if (s.equals("tzhaar-ket-em")) {
return 5;
} else if (s.equals("tzhaar-ket-om")) {
return 7;
} else if (s.equals("toktz-xil-ek")) {
return 4;
} else if (s.equals("toktz-xil-ul")) {
return 4;
} else if (s.equals("toktz-mej-tal")) {
return 6;
} else if (s.contains("whip")) {
return 4;
} else if (s.contains("dart")) {
return 3;
} else if (s.contains("knife")) {
return 3;
} else if (s.contains("javelin")) {
return 6;
}
return 5;
}
/**
* Weapon stand, walk, run, etc emotes
**/
public static void getPlayerAnimIndex(Player c) {
String weaponName = ItemAssistant.getItemName(c.playerEquipment[ItemConstants.WEAPON]).toLowerCase();
c.playerStandIndex = 0x328;
c.playerTurnIndex = 0x337;
c.playerWalkIndex = 0x333;
c.playerTurn180Index = 0x334;
c.playerTurn90CWIndex = 0x335;
c.playerTurn90CCWIndex = 0x336;
c.playerRunIndex = 0x338;
if (weaponName.contains("halberd") || weaponName.contains("guthan")) {
c.playerStandIndex = 809;
c.playerWalkIndex = 1146;
c.playerRunIndex = 1210;
return;
}
if (weaponName.contains("dharok")) {
c.playerStandIndex = 0x811;
c.playerWalkIndex = 0x67F;
c.playerRunIndex = 0x680;
return;
}
if (weaponName.contains("ahrim")) {
c.playerStandIndex = 809;
c.playerWalkIndex = 1146;
c.playerRunIndex = 1210;
return;
}
if (weaponName.contains("verac")) {
c.playerStandIndex = 1832;
c.playerWalkIndex = 1830;
c.playerRunIndex = 1831;
return;
}
if (weaponName.contains("wand") || weaponName.contains("staff")) {
c.playerStandIndex = 809;
c.playerRunIndex = 1210;
c.playerWalkIndex = 1146;
return;
}
if (weaponName.contains("karil")) {
c.playerStandIndex = 2074;
c.playerWalkIndex = 2076;
c.playerRunIndex = 2077;
return;
}
if (weaponName.contains("2h sword")) {
c.playerStandIndex = 2561;
c.playerWalkIndex = 2562;
c.playerRunIndex = 2563;
return;
}
if (weaponName.contains("bow")) {
c.playerStandIndex = 808;
c.playerWalkIndex = 819;
c.playerRunIndex = 824;
return;
}
switch (c.playerEquipment[c.playerWeapon]) {
case 4151:
c.playerStandIndex = 1832;
c.playerWalkIndex = 1660;
c.playerRunIndex = 1661;
break;
case 6528:
c.playerStandIndex = 0x811;
c.playerWalkIndex = 2064;
c.playerRunIndex = 1664;
break;
case 4153:
c.playerStandIndex = 1662;
c.playerWalkIndex = 1663;
c.playerRunIndex = 1664;
break;
case 11694:
case 11696:
case 11730:
case 11698:
case 11700:
c.playerStandIndex = 4300;
c.playerWalkIndex = 4306;
c.playerRunIndex = 4305;
break;
case 1305:
c.playerStandIndex = 809;
break;
}
}
/**
* Weapon emotes
**/
public static int getWeaponAnimation(Player c) {
String weaponName = ItemAssistant.getItemName(c.playerEquipment[ItemConstants.WEAPON]).toLowerCase();
MonkeyData data = MonkeyData.forId(c.playerEquipment[ItemConstants.WEAPON]);
if (data != null)
return data.getAttackAnim();
if (c.playerEquipment[c.playerWeapon] <= 0) {
switch (c.fightMode) {
case 0:
return 422;
case 2:
return 423;
case 1:
return 422;
}
}
if (weaponName.contains("knife") || weaponName.contains("dart")
|| weaponName.contains("javelin")
|| weaponName.contains("thrownaxe")) {
return 806;
}
if (weaponName.contains("halberd")) {
return 440;
}
if (weaponName.contains("dragon dagger")) {
return 402;
}
if (weaponName.endsWith("dagger")) {
return 412;
}
if (weaponName.contains("2h sword") || weaponName.contains("godsword")
|| weaponName.contains("aradomin sword")) {
switch (c.fightMode) {
case 4:
return 406;
case 0:
case 2:
case 1:
return 407;
}
}
if (weaponName.contains("sword")) {
switch (c.fightMode) {
case 0:
case 1:
return 412;
case 2:
return 451;
}
}
if (weaponName.contains("karil")) {
return 2075;
}
if (weaponName.contains("bow") && !weaponName.contains("'bow")) {
return 426;
}
if (weaponName.contains("'bow")) {
return 4230;
}
switch (c.playerEquipment[c.playerWeapon]) { // if you don't want to
// use
// strings
case 6522:
return 2614;
case 4153: // granite maul
return 1665;
case 4726: // guthan
return 2080;
case 4747: // torag
return 0x814;
case 4718: // dharok
return 2067;
case 4710: // ahrim
return 406;
case 4755: // verac
return 2062;
case 4734: // karil
return 2075;
case 4151:
return 1658;
case 6528:
return 2661;
default:
return 451;
}
}
/**
* Block emotes
*/
public static int getBlockEmote(Player c) {
if (c.playerEquipment[c.playerShield] >= 8844
&& c.playerEquipment[c.playerShield] <= 8850) {
return 4177;
}
MonkeyData data = MonkeyData.forId(c.playerEquipment[ItemConstants.WEAPON]);
if (data != null)
return data.getBlockAnim();
switch (c.playerEquipment[c.playerWeapon]) {
case -1:
case 0:
return 424;
case 4755:
return 2063;
case 4153:
return 1666;
case 4151:
return 1659;
case 11694:
case 11698:
case 11700:
case 11696:
case 11730:
return -1;
default:
return 404;
}
}
/**
* How long it takes to hit your enemy
**/
public static int getHitDelay(Player c) {
String weaponName = ItemAssistant.getItemName(c.playerEquipment[ItemConstants.WEAPON]).toLowerCase();
if (c.usingMagic) {
switch (MagicData.MAGIC_SPELLS[c.spellId][0]) {
case 12891:
return 4;
case 12871:
return 6;
default:
return 4;
}
} else {
if (weaponName.contains("knife") || weaponName.contains("dart")
|| weaponName.contains("javelin")
|| weaponName.contains("thrownaxe")) {
return 3;
}
if (weaponName.contains("cross") || weaponName.contains("c'bow")) {
return 4;
}
if (weaponName.contains("bow") && !c.dbowSpec) {
return 4;
} else if (c.dbowSpec) {
return 4;
}
switch (c.playerEquipment[c.playerWeapon]) {
case 6522: // Toktz-xil-ul
return 3;
default:
return 2;
}
}
}
}
@@ -0,0 +1,52 @@
package com.rs2.game.content.combat.melee;
import com.rs2.game.players.Player;
public class MeleeMaxHit {
public static int calculateMeleeMaxHit(Player c) {
double maxHit = 0;
int strBonus = c.playerBonus[10];
int strength = c.playerLevel[2];
int lvlForXP = c.getLevelForXP(c.playerXP[2]);
if (c.getPrayer().prayerActive[1]) {
strength += (int) (lvlForXP * .05);
} else if (c.getPrayer().prayerActive[6]) {
strength += (int) (lvlForXP * .10);
} else if (c.getPrayer().prayerActive[14]) {
strength += (int) (lvlForXP * .15);
} else if (c.getPrayer().prayerActive[24]) {
strength += (int) (lvlForXP * .18);
} else if (c.getPrayer().prayerActive[25]) {
strength += (int) (lvlForXP * .23);
}
if (c.playerEquipment[c.playerHat] == 2526
&& c.playerEquipment[c.playerChest] == 2520
&& c.playerEquipment[c.playerLegs] == 2522) {
maxHit += maxHit * 10 / 100;
}
maxHit += 1.05D + strBonus * strength * 0.00175D;
maxHit += strength * 0.11D;
if (c.playerEquipment[c.playerWeapon] == 4718
&& c.playerEquipment[c.playerHat] == 4716
&& c.playerEquipment[c.playerChest] == 4720
&& c.playerEquipment[c.playerLegs] == 4722) {
maxHit += (c.getPlayerAssistant().getLevelForXP(c.playerXP[3]) - c.playerLevel[3]) / 2;
}
if (c.specDamage > 1) {
maxHit = (int) (maxHit * c.specDamage);
}
if (maxHit < 0) {
maxHit = 1;
}
if (MeleeData.fullVoidMelee(c)) {
maxHit = (int) (maxHit * 1.10);
}
if (c.playerEquipment[c.playerAmulet] == 11128
&& c.playerEquipment[c.playerWeapon] == 6528) {
maxHit *= 1.20;
}
return (int) Math.floor(maxHit);
}
}
@@ -0,0 +1,71 @@
package com.rs2.game.content.combat.melee;
import com.rs2.game.players.Client;
/**
* Handles adding and removing hosts to the players array list.
*/
public class PlayerKilling {
/**
* Adds the host of the killed player.
*
* @param client
* Player that saves the host.
* @param host
* Host address of the killed player.
* @return True if the host is added to the players array.
*/
public static boolean addHostToList(Client client, String host) {
if (client != null) {
return client.lastKilledPlayers.add(host);
}
return false;
}
/**
* Checks if the host is already on the players array.
*
* @param client
* Player that is adding the killed players host.
* @param host
* Host address of the killed player.
* @return True if the host is on the players array.
*/
public static boolean hostOnList(Client client, String host) {
if (client != null) {
if (client.lastKilledPlayers.lastIndexOf(host) >= KILL_WAIT_MAX) {
removeHostFromList(client, host);
return false;
}
return client.lastKilledPlayers.contains(host);
}
return false;
}
/**
* Removes the host from the players array.
*
* @param client
* Player that is removing the host.
* @param host
* Host that is being removed.
* @return True if host is successfully removed.
*/
public static boolean removeHostFromList(Client client, String host) {
if (client != null) {
return client.lastKilledPlayers.remove(host);
}
return false;
}
/*
* Amount of kills you have to wait before the host is deleted.
*/
public static final int KILL_WAIT_MAX = 3;
}
@@ -0,0 +1,35 @@
package com.rs2.game.content.combat.npcs;
import com.rs2.game.content.minigames.FightCaves;
import com.rs2.game.content.minigames.PestControl;
import com.rs2.game.npcs.NpcHandler;
public class NpcAggressive {
/**
* Aggressive monsters
*/
private static final int[] AGGRESSIVE_MONSTERS = {
1155, 1157, 1158, 1159, 1160, 141, 1459, 1456, 96, 97, 142,
2550, 2551, 2552, 2553, 2558, 2559, 2560, 2561, 2562, 2563,
2564, 2565, 2892, 2894, 2881, 2882, 2883, 1593, 144, 112, 84, 3068,
50, 1590, 1591, 1592, 53, 54, 55, 178, 49,
2450, 2451, 2452, 2453, 2454, 2455, 2456, //Animated armor
82, 752, 1608, 1609, 1610, 1827, 2783, 1926, 1931, 2457, 412, 1604, 1612,
1611, 83, 941, 49, 111, 125, 1154, 1342, 447, 917, 1267
};
public static boolean isAggressive(int i) {
try {
boolean aggressive = NpcHandler.npcs[i].inWild() || PestControl.npcIsPCMonster(NpcHandler.npcs[i].npcType) || FightCaves.isFightCaveNpc(i);
for (int element : AGGRESSIVE_MONSTERS) {
if (NpcHandler.npcs[i].npcType == element || aggressive) {
return true;
}
}
return false;
} catch (NullPointerException TODO_better_fix) {
return false;
}
}
}
@@ -0,0 +1,682 @@
package com.rs2.game.content.combat.npcs;
import com.rs2.GameConstants;
import com.rs2.game.content.combat.CombatConstants;
import com.rs2.game.content.combat.melee.MeleeData;
import com.rs2.game.content.minigames.FightCaves;
import com.rs2.game.content.minigames.PestControl;
import com.rs2.game.content.music.sound.CombatSounds;
import com.rs2.game.content.music.sound.SoundList;
import com.rs2.game.items.impl.Greegree.MonkeyData;
import com.rs2.game.npcs.NpcData;
import com.rs2.game.npcs.NpcHandler;
import com.rs2.game.players.Client;
import com.rs2.game.players.Player;
import com.rs2.game.players.PlayerHandler;
import com.rs2.util.Misc;
import com.rs2.world.Boundary;
public class NpcCombat {
public static void multiAttackDamage(int i) {
int max = NpcHandler.getMaxHit(i);
for (Player player : PlayerHandler.players) {
if (player != null) {
Client c = (Client) player;
if (c.isDead || c.heightLevel != NpcHandler.npcs[i].heightLevel) {
continue;
}
if (player.goodDistance(c.absX, c.absY,
NpcHandler.npcs[i].absX, NpcHandler.npcs[i].absY, 15)) {
if (NpcHandler.npcs[i].attackType == 2) {
if (!c.getPrayer().prayerActive[16]) {
if (Misc.random(500) + 200 > Misc.random(c.getCombatAssistant().mageDef())) {
int dam = Misc.random(max);
c.dealDamage(dam);
c.handleHitMask(dam);
} else {
c.dealDamage(0);
c.handleHitMask(0);
}
} else {
c.dealDamage(0);
c.handleHitMask(0);
}
} else if (NpcHandler.npcs[i].attackType == 1) {
if (!c.getPrayer().prayerActive[17]) {
int dam = Misc.random(max);
if (Misc.random(500) + 200 > Misc.random(c
.getCombatAssistant()
.calculateRangeDefence())) {
c.dealDamage(dam);
c.handleHitMask(dam);
} else {
c.dealDamage(0);
c.handleHitMask(0);
}
} else {
c.dealDamage(0);
c.handleHitMask(0);
}
}
if (NpcHandler.npcs[i].endGfx > 0) {
c.gfx0(NpcHandler.npcs[i].endGfx);
}
}
c.getPlayerAssistant().refreshSkill(3);
}
}
}
public static void multiAttackGfx(int i, int gfx) {
if (NpcHandler.npcs[i].projectileId < 0) {
return;
}
for (Player player : PlayerHandler.players) {
if (player != null) {
Client c = (Client) player;
if (c.heightLevel != NpcHandler.npcs[i].heightLevel) {
continue;
}
if (player.goodDistance(c.absX, c.absY,
NpcHandler.npcs[i].absX, NpcHandler.npcs[i].absY, 15)) {
int nX = NpcHandler.npcs[i].getX() + NpcHandler.offset(i);
int nY = NpcHandler.npcs[i].getY() + NpcHandler.offset(i);
int pX = c.getX();
int pY = c.getY();
int offX = (nY - pY) * -1;
int offY = (nX - pX) * -1;
c.getPlayerAssistant().createPlayersProjectile(nX, nY,
offX, offY, 50, NpcHandler.getProjectileSpeed(i),
NpcHandler.npcs[i].projectileId, 43, 31,
-c.getId() - 1, 65);
}
}
}
}
public static void attackPlayer(Player c, int i) {
if (NpcHandler.npcs[i] != null) {
if (NpcHandler.npcs[i].absY == 3228 && c.absY == 3227
|| NpcHandler.npcs[i].absY == 3224 && c.absY == 3225
|| NpcHandler.npcs[i].absY == 3226 && c.absY == 3227
|| Boundary.isIn(c, Boundary.DRAYNOR_BUILDING) && (NpcHandler.npcs[i].npcType == 172 || NpcHandler.npcs[i].npcType == 174)
|| NpcHandler.npcs[i].inLesserNpc()
|| !c.npcCanAttack
|| NpcHandler.npcs[i].isDead) {
return;
}
if (NpcHandler.npcs[i].npcType == 1532
|| NpcHandler.npcs[i].npcType == 1534
|| NpcHandler.npcs[i].npcType == 6145
|| NpcHandler.npcs[i].npcType == 6144
|| NpcHandler.npcs[i].npcType == 6143
|| NpcHandler.npcs[i].npcType == 6142
|| NpcHandler.npcs[i].npcType == 752) {
return;
}
if (Boundary.isIn(c, Boundary.APE_ATOLL) && MonkeyData.isWearingGreegree(c)) {
return;
}
if (NpcHandler.npcs[i].npcType == 1401 && Boundary.isIn(c, Boundary.TUTORIAL) || c.tutorialProgress < 36) {
return;
}
if (NpcHandler.npcs[i].npcType == 9 && c.absX == 3180 && c.absY > 3433 && c.absY < 3447) {
return;
}
if (NpcHandler.npcs[i].npcType == 374 && c.absY == 3372 && c.absX > 2522 && c.absX < 2532) {
return;
}
if (NpcHandler.npcs[i].npcType > 2462 && NpcHandler.npcs[i].npcType < 2468) {
if (Misc.random(5) == 0) {
NpcHandler.npcs[i].forceChat("Flee from me, " + c.playerName + "!");
} else if (Misc.random(5) == 1) {
NpcHandler.npcs[i].forceChat("Begone, " + c.playerName + "!");
} else if (Misc.random(5) == 2) {
NpcHandler.npcs[i].forceChat("Bwuk");
} else if (Misc.random(5) == 3) {
NpcHandler.npcs[i].forceChat("Bwuk bwuk bwuk");
} else if (Misc.random(5) == 4) {
NpcHandler.npcs[i].forceChat("MUAHAHAHAHAAA!");
} else if (Misc.random(5) == 5) {
NpcHandler.npcs[i].forceChat("Bwaaaaaaauk bwuk bwuk");
}
}
if (!NpcHandler.npcs[i].inMulti() && NpcHandler.npcs[i].underAttackBy > 0 && NpcHandler.npcs[i].underAttackBy != c.playerId) {
NpcHandler.npcs[i].killerId = 0;
return;
}
if (!NpcHandler.npcs[i].inMulti() && (c.underAttackBy > 0 || c.underAttackBy2 > 0 && c.underAttackBy2 != i)) {
NpcHandler.npcs[i].killerId = 0;
return;
}
if (NpcHandler.npcs[i].heightLevel != c.heightLevel) {
NpcHandler.npcs[i].killerId = 0;
return;
}
if (!NpcData.goodDistanceNpc(NpcHandler.npcs[i].npcId, c.getX(), c.getY(), NpcData.distanceRequired(NpcHandler.npcs[i].npcId)) || NpcData.inNpc(NpcHandler.npcs[i].npcId, c.getX(), c.getY())) {
return;
}
NpcHandler.npcs[i].facePlayer(c.playerId);
boolean special = false;//specialCase(c,i);
if (NpcData.checkClip(NpcHandler.npcs[i]) || special) {
if (c.respawnTimer <= 0) {
NpcHandler.npcs[i].facePlayer(c.playerId);
NpcHandler.npcs[i].attackTimer = NpcData.getNpcDelay(i);
NpcHandler.npcs[i].hitDelayTimer = NpcData.getHitDelay(i);
NpcHandler.npcs[i].attackType = 0;
if (CombatConstants.COMBAT_SOUNDS) {
if (PestControl.npcIsPCMonster(NpcHandler.npcs[i].npcType) || PestControl.isPCPortal(NpcHandler.npcs[i].npcType)) {
return;
}
c.getPacketSender().sendSound(CombatSounds.getNpcAttackSounds(NpcHandler.npcs[i].npcType), 100, 0);
}
if (special) {
loadSpell2(i);
} else {
loadSpell(c, i);
}
if (NpcHandler.npcs[i].attackType == 3) {
NpcHandler.npcs[i].hitDelayTimer += 2;
}
if (NpcHandler.multiAttacks(i)) {
multiAttackGfx(i, NpcHandler.npcs[i].projectileId);
NpcData.startAnimation(NpcEmotes.getAttackEmote(i), i);
if (CombatConstants.COMBAT_SOUNDS) {
if (PestControl.npcIsPCMonster(NpcHandler.npcs[i].npcType) || PestControl.isPCPortal(NpcHandler.npcs[i].npcType)) {
return;
}
c.getPacketSender().sendSound(CombatSounds.getNpcAttackSounds(NpcHandler.npcs[i].npcType), 100, 0);
}
NpcHandler.npcs[i].oldIndex = c.playerId;
return;
}
if (NpcHandler.npcs[i].projectileId > 0) {
int nX = NpcHandler.npcs[i].getX() + NpcHandler.offset(i);
int nY = NpcHandler.npcs[i].getY() + NpcHandler.offset(i);
int pX = c.getX();
int pY = c.getY();
int offX = (nY - pY) * -1;
int offY = (nX - pX) * -1;
c.getPlayerAssistant().createPlayersProjectile(nX, nY, offX, offY, 50, NpcHandler.getProjectileSpeed(i), NpcHandler.npcs[i].projectileId, 43, 31, -c.getId() - 1, 65);
}
int random = Misc.random(10);
if (NpcHandler.npcs[i].npcType == 222 && (NpcHandler.npcs[i].killerId > 0 && NpcHandler.npcs[i].underAttack) && !NpcHandler.npcs[i].isDead && (NpcHandler.npcs[i].HP < NpcHandler.npcs[i].MaxHP + 1)) {
if (random < 3) {
NpcHandler.npcs[i].HP += 2;
//NpcHandler.npcs[i].startAnimation(84);
NpcHandler.npcs[i].updateRequired = true;
}
}
c.underAttackBy2 = i;
c.singleCombatDelay2 = System.currentTimeMillis();
NpcHandler.npcs[i].oldIndex = c.playerId;
NpcData.startAnimation(NpcEmotes.getAttackEmote(i), i);
if (CombatConstants.COMBAT_SOUNDS) {
if (PestControl.npcIsPCMonster(NpcHandler.npcs[i].npcType) || PestControl.isPCPortal(NpcHandler.npcs[i].npcType)) {
return;
}
c.getPacketSender().sendSound(CombatSounds.getNpcAttackSounds(NpcHandler.npcs[i].npcType), 100, 0);
}
c.getPacketSender().closeAllWindows();
}
}
}
}
public static void loadSpell2(int i) {
NpcHandler.npcs[i].attackType = 3;
int random = Misc.random(3);
if (random == 0) {
NpcHandler.npcs[i].projectileId = 393; // red
NpcHandler.npcs[i].endGfx = 430;
} else if (random == 1) {
NpcHandler.npcs[i].projectileId = 394; // green
NpcHandler.npcs[i].endGfx = 429;
} else if (random == 2) {
NpcHandler.npcs[i].projectileId = 395; // white
NpcHandler.npcs[i].endGfx = 431;
} else if (random == 3) {
NpcHandler.npcs[i].projectileId = 396; // blue
NpcHandler.npcs[i].endGfx = 428;
}
}
public static void loadSpell(Player c, int i) {
if (NpcHandler.npcs[i].npcType > 2462 && NpcHandler.npcs[i].npcType < 2469 || NpcHandler.npcs[i].npcType > 3751 && NpcHandler.npcs[i].npcType < 3762) {
NpcHandler.npcs[i].attackType = 2;
}
if (NpcHandler.npcs[i].npcType > 3761 && NpcHandler.npcs[i].npcType < 3772) {
NpcHandler.npcs[i].attackType = 1;
}
switch (NpcHandler.npcs[i].npcType) {
case 1158://kq first form
int kqRandom = Misc.random(3);
if (kqRandom == 2) {
NpcHandler.npcs[i].projectileId = 280; //gfx
NpcHandler.npcs[i].attackType = 2;
NpcHandler.npcs[i].endGfx = 279;
} else {
NpcHandler.npcs[i].attackType = 0;
}
break;
case 1160://kq secondform
int kqRandom2 = Misc.random(3);
if (kqRandom2 == 2) {
NpcHandler.npcs[i].projectileId = 279; //gfx
NpcHandler.npcs[i].attackType = 1 + Misc.random(1);
NpcHandler.npcs[i].endGfx = 278;
} else {
NpcHandler.npcs[i].attackType = 0;
}
break;
case 2607:
NpcHandler.npcs[i].attackType = 1;
case 2591:
NpcHandler.npcs[i].attackType = 2;
break;
case 172:
case 174:
NpcHandler.npcs[i].gfx100(96); // Dark Wizards use earth strike
NpcHandler.npcs[i].projectileId = 97;
NpcHandler.npcs[i].endGfx = 98;
NpcHandler.npcs[i].attackType = 2;
break;
case 3068:
if(Misc.random(10) > 7) {
NpcHandler.npcs[i].projectileId = 393; //red
NpcHandler.npcs[i].endGfx = 430;
NpcHandler.npcs[i].attackType = 3;
NpcData.startAnimation(2989, i);
} else {
NpcData.startAnimation(2980, i);
NpcHandler.npcs[i].attackType = 0;
}
break;
case 2892:
NpcHandler.npcs[i].projectileId = 94;
NpcHandler.npcs[i].attackType = 2;
NpcHandler.npcs[i].endGfx = 95;
break;
case 2894:
NpcHandler.npcs[i].projectileId = 298;
NpcHandler.npcs[i].attackType = 1;
break;
/*
* Better Dragons
*/
case 5363: // Mithril-Dragon
case 53: // Red Dragon
case 54: // Black-Dragon
case 55: // Blue-Dragon
case 941: // Green-Dragon
case 4682:
case 5362:
case 1590:
case 1591:
case 1592:
int random1 = Misc.random(3);
switch (random1) {
case 1:
NpcHandler.npcs[i].projectileId = 393; // red
NpcHandler.npcs[i].endGfx = 430;
NpcHandler.npcs[i].attackType = 3;
break;
default:
NpcHandler.npcs[i].projectileId = -1; // melee
NpcHandler.npcs[i].endGfx = -1;
NpcHandler.npcs[i].attackType = 0;
break;
}
break;
case 134:
if (c.playerLevel[5] > 0) {
c.playerLevel[5]--;
c.getPlayerAssistant().refreshSkill(5);
c.getPlayerAssistant().appendPoison(5);
c.getCombatAssistant().resetPlayerAttack();
}
break;
case 3590:
case 50:
case 742:
int random = Misc.random(4);
switch (random) {
case 0:
NpcHandler.npcs[i].projectileId = 393; // red
NpcHandler.npcs[i].endGfx = 430;
NpcHandler.npcs[i].attackType = 3;
break;
case 1:
NpcHandler.npcs[i].projectileId = 394; // green
NpcHandler.npcs[i].endGfx = 429;
NpcHandler.npcs[i].attackType = 3;
break;
case 2:
NpcHandler.npcs[i].projectileId = 395; // white
NpcHandler.npcs[i].endGfx = 431;
NpcHandler.npcs[i].attackType = 3;
break;
case 3:
NpcHandler.npcs[i].projectileId = 396; // blue
NpcHandler.npcs[i].endGfx = 428;
NpcHandler.npcs[i].attackType = 3;
break;
case 4:
NpcHandler.npcs[i].projectileId = -1; // melee
NpcHandler.npcs[i].endGfx = -1;
NpcHandler.npcs[i].attackType = 0;
break;
}
break;
// arma npcs
case 2561:
NpcHandler.npcs[i].attackType = 0;
break;
case 2560:
NpcHandler.npcs[i].attackType = 1;
NpcHandler.npcs[i].projectileId = 1190;
break;
case 2559:
NpcHandler.npcs[i].attackType = 2;
NpcHandler.npcs[i].projectileId = 1203;
break;
case 2558:
random = Misc.random(1);
NpcHandler.npcs[i].attackType = 1 + random;
if (NpcHandler.npcs[i].attackType == 1) {
NpcHandler.npcs[i].projectileId = 1197;
} else {
NpcHandler.npcs[i].attackType = 2;
NpcHandler.npcs[i].projectileId = 1198;
}
break;
// sara npcs
case 2562: // sara
random = Misc.random(1);
if (random == 0) {
NpcHandler.npcs[i].attackType = 2;
NpcHandler.npcs[i].endGfx = 1224;
NpcHandler.npcs[i].projectileId = -1;
} else if (random == 1) {
NpcHandler.npcs[i].attackType = 0;
}
break;
case 2563: // star
NpcHandler.npcs[i].attackType = 0;
break;
case 2564: // growler
NpcHandler.npcs[i].attackType = 2;
NpcHandler.npcs[i].projectileId = 1203;
break;
case 2565: // bree
NpcHandler.npcs[i].attackType = 1;
NpcHandler.npcs[i].projectileId = 9;
break;
// bandos npcs
case 2550:
random = Misc.random(2);
if (random == 0 || random == 1) {
NpcHandler.npcs[i].attackType = 0;
} else {
NpcHandler.npcs[i].attackType = 1;
NpcHandler.npcs[i].endGfx = 1211;
NpcHandler.npcs[i].projectileId = 288;
}
break;
case 2551:
NpcHandler.npcs[i].attackType = 0;
break;
case 2552:
NpcHandler.npcs[i].attackType = 2;
NpcHandler.npcs[i].projectileId = 1203;
break;
case 2553:
NpcHandler.npcs[i].attackType = 1;
NpcHandler.npcs[i].projectileId = 1206;
break;
case 2025:
NpcHandler.npcs[i].attackType = 2;
int r = Misc.random(3);
if (r == 0) {
NpcHandler.npcs[i].gfx100(158);
NpcHandler.npcs[i].projectileId = 159;
NpcHandler.npcs[i].endGfx = 160;
}
if (r == 1) {
NpcHandler.npcs[i].gfx100(161);
NpcHandler.npcs[i].projectileId = 162;
NpcHandler.npcs[i].endGfx = 163;
}
if (r == 2) {
NpcHandler.npcs[i].gfx100(164);
NpcHandler.npcs[i].projectileId = 165;
NpcHandler.npcs[i].endGfx = 166;
}
if (r == 3) {
NpcHandler.npcs[i].gfx100(155);
NpcHandler.npcs[i].projectileId = 156;
}
break;
case 2881:// supreme
NpcHandler.npcs[i].attackType = 1;
NpcHandler.npcs[i].projectileId = 298;
break;
case 2882:// prime
NpcHandler.npcs[i].attackType = 2;
NpcHandler.npcs[i].projectileId = 162;
NpcHandler.npcs[i].endGfx = 477;
break;
case 2028:
NpcHandler.npcs[i].attackType = 1;
NpcHandler.npcs[i].projectileId = 27;
break;
case 3200:
int r2 = Misc.random(1);
if (r2 == 0) {
NpcHandler.npcs[i].attackType = 1;
NpcHandler.npcs[i].gfx100(550);
NpcHandler.npcs[i].projectileId = 551;
NpcHandler.npcs[i].endGfx = 552;
} else {
NpcHandler.npcs[i].attackType = 2;
NpcHandler.npcs[i].gfx100(553);
NpcHandler.npcs[i].projectileId = 554;
NpcHandler.npcs[i].endGfx = 555;
}
break;
case 2745:
int r3 = 0;
if (NpcHandler
.goodDistance(
NpcHandler.npcs[i].absX,
NpcHandler.npcs[i].absY,
PlayerHandler.players[NpcHandler.npcs[i].spawnedBy].absX,
PlayerHandler.players[NpcHandler.npcs[i].spawnedBy].absY,
1)) {
r3 = Misc.random(2);
} else {
r3 = Misc.random(1);
}
if (r3 == 0) {
NpcHandler.npcs[i].attackType = 2;
NpcHandler.npcs[i].endGfx = 157;
NpcHandler.npcs[i].projectileId = 448;
} else if (r3 == 1) {
NpcHandler.npcs[i].attackType = 1;
NpcHandler.npcs[i].endGfx = 451;
NpcHandler.npcs[i].projectileId = -1;
} else if (r3 == 2) {
NpcHandler.npcs[i].attackType = 0;
NpcHandler.npcs[i].projectileId = -1;
}
break;
case 2743:
NpcHandler.npcs[i].attackType = 2;
NpcHandler.npcs[i].projectileId = 445;
NpcHandler.npcs[i].endGfx = 446;
break;
case 2631:
NpcHandler.npcs[i].attackType = 1;
NpcHandler.npcs[i].projectileId = 443;
break;
}
}
public static void registerNpcHit(int i) {
if (NpcHandler.npcs[i] != null) {
if (PlayerHandler.players[NpcHandler.npcs[i].oldIndex] == null) {
return;
}
if (NpcHandler.npcs[i].isDead) {
return;
}
Client c = (Client) PlayerHandler.players[NpcHandler.npcs[i].oldIndex];
if (NpcHandler.multiAttacks(i)) {
NpcCombat.multiAttackDamage(i);
return;
}
if (c.playerIndex <= 0 && c.npcIndex <= 0) {
if (c.autoRet == 1 && NpcHandler.npcs[i].npcType != 411) {
c.npcIndex = i;
}
}
if (c.attackTimer <= 3 || c.attackTimer == 0 && c.npcIndex == 0 && c.oldNpcIndex == 0) {
c.startAnimation(c.getCombatAssistant().getBlockEmote());
}
if (c.respawnTimer <= 0) {
int damage = 0;
if (NpcHandler.npcs[i].attackType == 0) {
damage = Misc.random(NpcHandler.npcs[i].maxHit);
if (10 + Misc.random(c.getCombatAssistant().calcDef()) > Misc
.random(NpcHandler.npcs[i].attack)) {
damage = 0;
}
if (NpcData.cantKillYou(NpcHandler.npcs[i].npcType)) {
if (damage >= c.playerLevel[GameConstants.HITPOINTS]) {
damage = c.playerLevel[GameConstants.HITPOINTS] - 1;
}
}
if (c.getPrayer().prayerActive[18] && !(NpcHandler.npcs[i].npcType == 2030)) { // protect from melee
damage = 0;
} else if (c.getPrayer().prayerActive[18] && NpcHandler.npcs[i].npcType == 2030) {
if (NpcHandler.npcs[i].attackType == 0) {
damage = Misc.random(NpcHandler.npcs[i].maxHit);
}
if (10 + Misc.random(MeleeData.calculateMeleeDefence(c)) > Misc.random(NpcHandler.npcs[i].attack)) {
if (NpcHandler.npcs[i].npcType == 1158 || NpcHandler.npcs[i].npcType == 1160)
damage = (damage / 2);
else
damage = 0;
}
}
if (c.playerLevel[3] - damage < 0) {
damage = c.playerLevel[3];
}
}
if (NpcHandler.npcs[i].attackType == 1) { // range
damage = Misc.random(NpcHandler.npcs[i].maxHit);
if (10 + Misc.random(c.getCombatAssistant().calculateRangeDefence()) > Misc.random(NpcHandler.npcs[i].attack)) {
if (NpcHandler.npcs[i].npcType == 1158 || NpcHandler.npcs[i].npcType == 1160)
damage = (damage / 2);
else
damage = 0;
}
if (NpcData.cantKillYou(NpcHandler.npcs[i].npcType)) {
if (damage >= c.playerLevel[GameConstants.HITPOINTS]) {
damage = c.playerLevel[GameConstants.HITPOINTS] - 1;
}
}
if (c.getPrayer().prayerActive[17]) { // protect from range
damage = 0;
}
if (c.playerLevel[3] - damage < 0) {
damage = c.playerLevel[3];
}
}
if (NpcHandler.npcs[i].attackType == 2) { // magic
damage = Misc.random(NpcHandler.npcs[i].maxHit);
boolean magicFailed = false;
if (10 + Misc.random(c.getCombatAssistant().mageDef()) > Misc.random(NpcHandler.npcs[i].attack)) {
damage = 0;
magicFailed = true;
}
if (NpcData.cantKillYou(NpcHandler.npcs[i].npcType)) {
if (damage >= c.playerLevel[GameConstants.HITPOINTS]) {
damage = c.playerLevel[GameConstants.HITPOINTS] - 1;
}
}
if(c.getPrayer().prayerActive[16]) { // protect from magic
if (NpcHandler.npcs[i].npcType == 1158) {
damage = (damage / 2);
} else {
damage = 0;
}
magicFailed = true;
if (c.playerLevel[3] - damage < 0) {
damage = c.playerLevel[3];
}
if(NpcHandler.npcs[i].endGfx > 0 && (!magicFailed || FightCaves.isFightCaveNpc(i))) {
c.gfx100(NpcHandler.npcs[i].endGfx);
} else {
c.gfx100(85);
c.getPacketSender().sendSound(SoundList.MAGE_FAIL, 100, 0);
}
}
}
if (NpcHandler.npcs[i].attackType == 3) { // fire breath
int anti = c.getPlayerAssistant().antiFire();
switch (anti) {
case 0:// has no shield
damage = Misc.random(45) + 10;
c.getPacketSender().sendMessage("You are badly burnt by the dragon fire!");
break;
case 1:// has a shield
if (c.getItemAssistant().playerHasEquipped(5, 1540)) {
damage = Misc.random(4) + 1;
c.getPacketSender().sendMessage("Your shield protects you from the fire.");
}
break;
case 2:// melee
damage = Misc.random(5);
break;
}
}
if (damage > 0) {
c.getCombatAssistant().applyRecoilNPC(c, damage, i);
}
if (c.playerLevel[3] - damage < 0) {
damage = c.playerLevel[3];
}
int difference = c.playerLevel[3] - damage;
if (c.getPlayerAssistant().savePlayer()) {
c.getPlayerAssistant().handleROL();
} else if (difference <= c.getLevelForXP(c.playerXP[3]) / 10 && difference > 0) {
c.appendRedemption();
} else {
NpcHandler.handleSpecialEffects(c, i, damage);
c.logoutDelay = System.currentTimeMillis(); // logout delay
c.handleHitMask(damage);
c.playerLevel[3] -= damage;
c.getPlayerAssistant().refreshSkill(3);
FightCaves.tzKihEffect(c, i, damage);
if (damage > 0)
{
c.getPacketSender().sendSound(822 + Misc.random(2), 100, 0);
}
c.updateRequired = true;
}
}
}
}
}
@@ -0,0 +1,190 @@
package com.rs2.game.content.combat.npcs;
import com.rs2.GameEngine;
import com.rs2.game.npcs.NpcHandler;
import com.rs2.game.players.Player;
/**
* Npc Emotes
* @author Andrew (Mr Extremez)
*/
public enum NpcEmotes {
MAN(new int[] {1, 2, 3, 4, 5, 6}, 422, 1834, 836),
GUARD(new int[] {9, 10}, 412, 404, 836),
GARGOYLE(new int[] {1610, 1611}, 1517, 1519, 1518),
SKELETAL_WYVERN(new int[] {3068}, 2989, 2988, 2987),
BAT(new int[] {412, 78}, 30, 31, 36),
BEAR(new int[] {105, 106}, 41, 42, 44),
HOB_GOBLIN(new int[] {122, 123}, 164, 165, 167),
AHRIM(new int[] {2025}, 729, 404, 2304),
DHAROK(new int[] {2026}, 2067, 404, 2304),
GUTHAN(new int[] {2027}, 422, 404, 2304),
KARIL(new int[] {2028}, 2075, 404, 2304),
TORAG(new int[] {2029}, 0x814, 404, 2304),
VERAC(new int[] {2030}, 2062, 404, 2304),
BABY_DRAGON(new int[] {51, 52, 1589, 3376}, 25, 26, 28),
CHICKEN(new int[] {41}, 55, 56, 57),
KBD_METAL_DRAGON(new int [] {50, 1590, 1591, 1592}, 80, 89, 92),
DRAGON(new int[] {53, 54, 55, 941}, 91, 89, 92),
BASILISK(new int[] {1616, 1617, 4228}, 1546, 1547, 1548),
BLOOD_WORM(new int[] {2031}, 2070, 2072, 2073),
TREE_SPIRIT(new int[] {438, 439, 440, 441, 442, 443}, 94, 95, 97),
ZOMBIE(new int[] {73, 74, 75, 76, 751}, 299, 300, 302),
ROCK_GOLEM(new int[] {413, 414, 415, 416, 417, 418}, 153, 154, 156),
RIVER_TROLL(new int[] {391, 392, 393, 394, 395, 396}, 284, 285, 287),
GOBLIN(new int[] {100, 101, 102, 1769, 1770, 1771, 1772, 1773, 1774, 1775, 1776}, 309, 312, 313),
COW(new int[] {81, 397, 1766, 1767, 1768}, 59, 60, 62),
BLOODVELD(new int[] {1618, 1619}, 1552, 1550, 1553),
IMP(new int[] {708}, 169, 170, 172),
DARK_WIZARD(new int[] {172, 13}, 711, 1834, 836),
DUCK(new int[] {44, 45}, 7, 8, 9),
SPINOLYP(new int[] {2892, 2894}, 2868, 2864, 2865),
DWARF(new int[] {118, 119}, 99, 100, 102),
DEFILER(new int[] {3762, 3763, 3764, 3765, 3766, 3767, 3768, 3769, 3770, 3771}, 3920, 3921, 3922),
SPINNER(new int[] {3747, 3748, 3749, 3750, 3751}, 3908, 3909, 3910),
SHIFTER(new int[] {3732, 3733, 3734, 3735, 3736, 3737, 3738, 3739, 3740, 3741}, 3901, 3902, 3903),
RAVAGER(new int[] {3742, 3743, 3744, 3745, 3746}, 3915, 3916, 3917),
BRAWLER(new int[] {3772, 3773, 3774, 3775, 3776}, 3897, 3895, 3894),
SPLATTER(new int[] {3727, 3728, 3729, 3730, 3731}, 3891, 3890, 3888),
TORCHER(new int[] {3752, 3753, 3754, 3755, 3756, 3757, 3758, 3759, 3760, 3761}, 3882, 3880, 3881),
KALPHITE_WORKER(new int[] {1153, 1154, 1155, 1156, 1157, 1158, 1161}, 1184, 1186, 1187),
KALPHITE_QUEEN(new int[] {1159}, 1185, 1186, 1187),
KALPHITE_QUEEN_2(new int[] {1160}, 1177, 1179, 1182),
DEMON(new int[] {82, 83, 84, 1472}, 64, 65, 67),
DUST_DEVIL(new int[] {1624}, 1557, 1555, 1558),
CHAOS_ELEMENTAL(new int[] {3200}, 3146, 3148, 3147),
GIANT(new int[] {110, 111, 112, 113, 116, 117}, 128, 129, 131),
DAGGANOTH_PRIME(new int[] {2881}, 2855, 2852, 2856),
DAGGANOTH_SUPREME(new int[] {2882}, 2854, 2852, 2856),
DAGGANOTH_REX(new int[] {2883}, 2851, 2852, 2856),
WHITE_KNIGHT(new int[] {1092, 19}, 406, -1, 843),
KNIGHT_WARRIOR(new int[] {125, 178, 179}, 451, -1, 843),
PORTAL(new int[] {3777, 3778, 3779, 3780}, -1, -1, -1),
DARK_BEAST(new int[] {2783}, 2731, 2732, 2733),
TZHAAR_NPCS(new int[] {2604, 2598, 2591}, 2609, 2606, 2607),
TZHAAR_MEJ(new int[] {2591}, 2612, 2606, 2607),
TZHAAR_KET(new int[] {2610, 2615}, 2612, 2606, 2608),
TZHAAR_XIL(new int[] {2607}, 2611, 2610, 2607),
TZ_KIH(new int[] {2627}, 2621, 2622, 2620),
TZ_KEK(new int[] {2629, 2630, 2736, 2738}, 2625, 2626, 2627),
TOK_XIL(new int[] {2631, 2632}, 2628, 2629, 2630),
TZHAAR_YT(new int[] {2741, 2742, 2746}, 2637, 2635, 2638),
KET_ZEK(new int[] {2743, 2744}, 2644, 2645, 2646),
COCKATRICE(new int[] {1620, 1621}, 1562, 1560, 1563),
GNOME_CHILD(new int[] {160, 161}, 191, 194, 196),
GNOME_GUARD(new int[] {163, 164}, 192, 193, 196),
GNOME_WOMAN(new int[] {168, 169}, 190, 193, 196),
TUROTH(new int[] {1626, 1627, 1628, 1629, 1630, 1631, 1632}, 1595, 1596, 1597),
GHOST(new int[] {103, 104, 491}, 123, 124, 126),
ROCK_CRAB(new int[] {1265, 1267}, 1312, 1313, 1314),
DOG_WOLF(new int[] {96, 97, 99, 1593, 1594, 141, 142, 143}, 75, 76, 78),
SPIDER(new int[] {58, 59, 60, 62, 63, 64, 134, 1009, 2035}, 143, 144, 146),
UNICORN(new int[] {89, 133, 987}, 289, 290, 292),
OGRE(new int[] {114, 115, 374}, 359, 360, 361),
FIEND(new int[] {1633, 1634, 1635, 1636, 3406}, 1582, 1581, 1580),
BANSHEE(new int[] {1612}, 1523, 1525, 1524),
EXPERIMENT_25(new int[] {1677}, 1616, 1617, 1618),
EXPERIMENT_25_2(new int[] {1678}, 1612, 1613, 1614),
EXPERIMENT_51(new int[] {1676}, 1626, 1627, 1628),
ABYSSAL_DEMON(new int[] {1615}, 1537, 1539, 1538),
NECHRYAEL(new int[] {1613}, 1528, 1529, 1530),
SCORPION(new int[] {144, 107, 108}, 246, 247, 248),
SMALL_SPIDER(new int[] {61}, 280, 279, 273),
PIT_SCORPION(new int[] {109}, 270, 271, 273),
CRAWLING_HAND(new int[] {1648, 1649, 1650, 1651, 1652, 1653, 1654, 1655, 1656, 1657}, 1592, 1591, 1590),
ABBERANT_SPECTRE(new int[] {1604, 1605, 1606, 1607}, 1507, 1509, 1508),
INFERNAL_MAGE(new int[] {1643, 1644, 1645, 1646, 1647}, 429, 430, 2304),
MONKEY_GUARD(new int[] {1455, 1459, 1460}, 1402, 1403, 1404),
RAT(new int[] {86, 87, 88, 224, 446, 748, 950, 978, 2033}, 138, 139, 141),
SMALL_RAT(new int[] {47, 2032}, 2705, 2706, 2707),
DAGGANOTH(new int[] {1338, 1340, 1341, 1342, 2455, 2456}, 1341, 1340, 1342),
SKELETON(new int[] {90, 91, 92, 93}, 260, 261, 263);
int[] npcId;
int attackAnim, blockAnim, deadAnim;
private NpcEmotes(int[] npcId, int attackAnim, int blockAnim, int deadAnim) {
this.npcId = npcId;
this.attackAnim = attackAnim;
this.blockAnim = blockAnim;
this.deadAnim = deadAnim;
}
private int[] getNpcId() {
return npcId;
}
private int getAttack() {
return attackAnim;
}
private int getBlock() {
return blockAnim;
}
private int getDead() {
return deadAnim;
}
public static int getAttackEmote(int i) {
for (NpcEmotes e : NpcEmotes.values()) {
for (int f = 0; f < e.getNpcId().length; f++) {
if (NpcHandler.npcs[i].npcType == e.getNpcId()[f]) {
return e.getAttack();
} else {
switch (NpcHandler.npcs[i].npcType) {
case 2745:
if (NpcHandler.npcs[i].attackType == 2) {
return 2656;
} else if (NpcHandler.npcs[i].attackType == 1) {
return 2652;
} else if (NpcHandler.npcs[i].attackType == 0) {
return 2655;
}
}
}
}
}
return 0x326;
}
public static int getBlockEmote(int i) {
for (NpcEmotes e : NpcEmotes.values()) {
for (int f = 0; f < e.getNpcId().length; f++) {
if (NpcHandler.npcs[i].npcType == e.getNpcId()[f]) {
return e.getBlock();
} else {
switch (NpcHandler.npcs[i].npcType) {
case 2745:
return 2653;
}
}
}
}
return -1;
}
public static int getDeadEmote(Player player, int i) {
for (NpcEmotes e : NpcEmotes.values()) {
for (int f = 0; f < e.getNpcId().length; f++) {
if (NpcHandler.npcs[i].npcType == e.getNpcId()[f]) {
return e.getDead();
} else {
switch (NpcHandler.npcs[i].npcType) {
case 2745:
return 2654;
case 1158:
GameEngine.npcHandler.spawnSecondForm(player, i);
return 6242;
case 1160:
GameEngine.npcHandler.spawnFirstForm(player, i);
return 6233;
}
}
}
}
return 2304;
}
}
@@ -0,0 +1,294 @@
package com.rs2.game.content.combat.prayer;
import com.rs2.game.content.music.sound.SoundList;
import com.rs2.game.players.Player;
public class ActivatePrayers {
public static void activatePrayer(Player player, int i) {
if (player.duelRule[7]) {
for (int p = 0; p < player.getPrayer().PRAYER.length; p++) { // reset
// prayer
// glows
player.getPrayer().prayerActive[p] = false;
player.getPacketSender().sendConfig(player.getPrayer().PRAYER_GLOW[p],
0);
}
player.getPacketSender().sendMessage(
"Prayer has been disabled in this duel!");
return;
}
if (i == 24 && player.playerLevel[1] < 65) {
player.getPacketSender().sendConfig(player.getPrayer().PRAYER_GLOW[i], 0);
player.getPacketSender().sendMessage(
"You may not use this prayer yet.");
return;
}
if (i == 25 && player.playerLevel[1] < 70) {
player.getPacketSender().sendConfig(player.getPrayer().PRAYER_GLOW[i], 0);
player.getPacketSender().sendMessage(
"You may not use this prayer yet.");
return;
}
int[] defencePrayer = { 0, 5, 13, 24, 25 };
int[] strengthPrayer = { 1, 6, 14, 24, 25 };
int[] attackPrayer = { 2, 7, 15, 24, 25 };
int[] rangePrayer = { 3, 11, 19 };
int[] magePrayer = { 4, 12, 20 };
if (player.playerLevel[5] > 0) {
if (player.getPlayerAssistant().getLevelForXP(player.playerXP[5]) >= player
.getPrayer().PRAYER_LEVEL_REQUIRED[i]) {
boolean headIcon = false;
switch (i) {
case 0:
case 5:
case 13:
if (player.getPrayer().prayerActive[i] == false) {
for (int j = 0; j < defencePrayer.length; j++) {
if (defencePrayer[j] != i) {
player.getPrayer().prayerActive[defencePrayer[j]] = false;
player.getPacketSender().sendConfig(player.getPrayer().PRAYER_GLOW[defencePrayer[j]], 0);
}
}
}
break;
case 1:
case 6:
case 14:
if (player.getPrayer().prayerActive[i] == false) {
for (int j = 0; j < strengthPrayer.length; j++) {
if (strengthPrayer[j] != i) {
player.getPrayer().prayerActive[strengthPrayer[j]] = false;
player.getPacketSender().sendConfig(player.getPrayer().PRAYER_GLOW[strengthPrayer[j]], 0);
}
}
for (int j = 0; j < rangePrayer.length; j++) {
if (rangePrayer[j] != i) {
player.getPrayer().prayerActive[rangePrayer[j]] = false;
player.getPacketSender().sendConfig(player.getPrayer().PRAYER_GLOW[rangePrayer[j]],0);
}
}
for (int j = 0; j < magePrayer.length; j++) {
if (magePrayer[j] != i) {
player.getPrayer().prayerActive[magePrayer[j]] = false;
player.getPacketSender().sendConfig(player.getPrayer().PRAYER_GLOW[magePrayer[j]], 0);
}
}
}
break;
case 2:
case 7:
case 15:
if (player.getPrayer().prayerActive[i] == false) {
for (int j = 0; j < attackPrayer.length; j++) {
if (attackPrayer[j] != i) {
player.getPrayer().prayerActive[attackPrayer[j]] = false;
player.getPacketSender().sendConfig(player.getPrayer().PRAYER_GLOW[attackPrayer[j]], 0);
}
}
for (int j = 0; j < rangePrayer.length; j++) {
if (rangePrayer[j] != i) {
player.getPrayer().prayerActive[rangePrayer[j]] = false;
player.getPacketSender().sendConfig(player.getPrayer().PRAYER_GLOW[rangePrayer[j]], 0);
}
}
for (int j = 0; j < magePrayer.length; j++) {
if (magePrayer[j] != i) {
player.getPrayer().prayerActive[magePrayer[j]] = false;
player.getPacketSender().sendConfig(player.getPrayer().PRAYER_GLOW[magePrayer[j]], 0);
}
}
}
break;
case 3:// range prays
case 11:
case 19:
if (player.getPrayer().prayerActive[i] == false) {
for (int j = 0; j < attackPrayer.length; j++) {
if (attackPrayer[j] != i) {
player.getPrayer().prayerActive[attackPrayer[j]] = false;
player.getPacketSender().sendConfig(player.getPrayer().PRAYER_GLOW[attackPrayer[j]], 0);
}
}
for (int j = 0; j < strengthPrayer.length; j++) {
if (strengthPrayer[j] != i) {
player.getPrayer().prayerActive[strengthPrayer[j]] = false;
player.getPacketSender().sendConfig(player.getPrayer().PRAYER_GLOW[strengthPrayer[j]], 0);
}
}
for (int j = 0; j < rangePrayer.length; j++) {
if (rangePrayer[j] != i) {
player.getPrayer().prayerActive[rangePrayer[j]] = false;
player.getPacketSender().sendConfig(player.getPrayer().PRAYER_GLOW[rangePrayer[j]], 0);
}
}
for (int j = 0; j < magePrayer.length; j++) {
if (magePrayer[j] != i) {
player.getPrayer().prayerActive[magePrayer[j]] = false;
player.getPacketSender().sendConfig(player.getPrayer().PRAYER_GLOW[magePrayer[j]], 0);
}
}
}
break;
case 4:
case 12:
case 20:
if (player.getPrayer().prayerActive[i] == false) {
for (int j = 0; j < attackPrayer.length; j++) {
if (attackPrayer[j] != i) {
player.getPrayer().prayerActive[attackPrayer[j]] = false;
player.getPacketSender().sendConfig(player.getPrayer().PRAYER_GLOW[attackPrayer[j]], 0);
}
}
for (int j = 0; j < strengthPrayer.length; j++) {
if (strengthPrayer[j] != i) {
player.getPrayer().prayerActive[strengthPrayer[j]] = false;
player.getPacketSender().sendConfig(player.getPrayer().PRAYER_GLOW[strengthPrayer[j]], 0);
}
}
for (int j = 0; j < rangePrayer.length; j++) {
if (rangePrayer[j] != i) {
player.getPrayer().prayerActive[rangePrayer[j]] = false;
player.getPacketSender().sendConfig(player.getPrayer().PRAYER_GLOW[rangePrayer[j]], 0);
}
}
for (int j = 0; j < magePrayer.length; j++) {
if (magePrayer[j] != i) {
player.getPrayer().prayerActive[magePrayer[j]] = false;
player.getPacketSender().sendConfig(player.getPrayer().PRAYER_GLOW[magePrayer[j]], 0);
}
}
}
break;
case 10:
player.lastProtItem = System.currentTimeMillis();
break;
case 16:
case 17:
case 18:
if (System.currentTimeMillis()
- player.getPrayer().stopPrayerDelay < 5000) {
player.getPacketSender()
.sendMessage(
"You have been injured and can't use this prayer!");
player.getPacketSender().sendConfig(
player.getPrayer().PRAYER_GLOW[16], 0);
player.getPacketSender().sendConfig(
player.getPrayer().PRAYER_GLOW[17], 0);
player.getPacketSender().sendConfig(
player.getPrayer().PRAYER_GLOW[18], 0);
return;
}
if (i == 16) {
player.protMageDelay = System.currentTimeMillis();
} else if (i == 17) {
player.protRangeDelay = System.currentTimeMillis();
} else if (i == 18) {
player.protMeleeDelay = System.currentTimeMillis();
}
case 21:
case 22:
case 23:
headIcon = true;
for (int p = 16; p < 24; p++) {
if (i != p && p != 19 && p != 20) {
player.getPrayer().prayerActive[p] = false;
player.getPacketSender().sendConfig(
player.getPrayer().PRAYER_GLOW[p], 0);
}
}
break;
case 24:
case 25:
if (player.getPrayer().prayerActive[i] == false) {
for (int j = 0; j < attackPrayer.length; j++) {
if (attackPrayer[j] != i) {
player.getPrayer().prayerActive[attackPrayer[j]] = false;
player.getPacketSender().sendConfig(player.getPrayer().PRAYER_GLOW[attackPrayer[j]], 0);
}
}
for (int j = 0; j < strengthPrayer.length; j++) {
if (strengthPrayer[j] != i) {
player.getPrayer().prayerActive[strengthPrayer[j]] = false;
player.getPacketSender().sendConfig(player.getPrayer().PRAYER_GLOW[strengthPrayer[j]], 0);
}
}
for (int j = 0; j < rangePrayer.length; j++) {
if (rangePrayer[j] != i) {
player.getPrayer().prayerActive[rangePrayer[j]] = false;
player.getPacketSender().sendConfig(player.getPrayer().PRAYER_GLOW[rangePrayer[j]], 0);
}
}
for (int j = 0; j < magePrayer.length; j++) {
if (magePrayer[j] != i) {
player.getPrayer().prayerActive[magePrayer[j]] = false;
player.getPacketSender().sendConfig(player.getPrayer().PRAYER_GLOW[magePrayer[j]], 0);
}
}
for (int j = 0; j < defencePrayer.length; j++) {
if (defencePrayer[j] != i) {
player.getPrayer().prayerActive[defencePrayer[j]] = false;
player.getPacketSender().sendConfig(player.getPrayer().PRAYER_GLOW[defencePrayer[j]], 0);
}
}
}
break;
}
if (!headIcon) {
if (player.getPrayer().prayerActive[i] == false) {
player.getPrayer().prayerActive[i] = true;
player.getPacketSender().sendConfig(
player.getPrayer().PRAYER_GLOW[i], 1);
} else {
player.getPrayer().prayerActive[i] = false;
player.getPacketSender().sendConfig(
player.getPrayer().PRAYER_GLOW[i], 0);
}
} else {
if (player.getPrayer().prayerActive[i] == false) {
player.getPrayer().prayerActive[i] = true;
player.getPacketSender().sendConfig(
player.getPrayer().PRAYER_GLOW[i], 1);
player.headIcon = player.getPrayer().PRAYER_HEAD_ICONS[i];
if (i == 16)
player.getPacketSender().sendSound(SoundList.PROTECT_MAGIC, 100, 0);
else if (i == 17)
player.getPacketSender().sendSound(SoundList.PROTECT_RANGE, 100, 0);
else if (i == 18)
player.getPacketSender().sendSound(SoundList.PROTECT_MELEE, 100, 0);
player.getPlayerAssistant().requestUpdates();
} else {
player.getPrayer().prayerActive[i] = false;
player.getPacketSender().sendConfig(
player.getPrayer().PRAYER_GLOW[i], 0);
player.headIcon = -1;
player.getPacketSender().sendSound(SoundList.NO_PRAY, 100, 0);
player.getPlayerAssistant().requestUpdates();
}
}
} else {
player.getPacketSender().sendConfig(player.getPrayer().PRAYER_GLOW[i],
0);
player.getPacketSender().sendString(
"You need a @blu@Prayer level of "
+ player.getPrayer().PRAYER_LEVEL_REQUIRED[i]
+ " to use " + player.getPrayer().PRAYER_NAME[i]
+ ".", 357);
player.getPacketSender().sendString("Click here to continue", 358);
player.getPacketSender().sendChatInterface(356);
}
} else {
player.getPacketSender().sendConfig(player.getPrayer().PRAYER_GLOW[i], 0);
player.getPacketSender().sendMessage("You have run out of prayer points!");
player.getPacketSender().sendSound(SoundList.NO_PRAY, 100, 0);
}
}
}
@@ -0,0 +1,72 @@
package com.rs2.game.content.combat.prayer;
public class PrayerData {
public int prayerId = -1;
public static double prayerPoint = 1.0;
public long stopPrayerDelay, prayerDelay;
public boolean usingPrayer;
public final int[] PRAYER_DRAIN_RATE = { 500, 500, 500, 500, 500, 500, 500,
500, 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, 500,
500, 500, 500, 500, 500, 500 };
public final int[] PRAYER_LEVEL_REQUIRED = { 1, 4, 7, 8, 9, 10, 13, 16, 19,
22, 25, 26, 27, 28, 31, 34, 37, 40, 43, 44, 45, 46, 49, 52, 60, 70 };
public final int[] PRAYER = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13,
14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25 };
public final String[] PRAYER_NAME = { "Thick Skin", "Burst of Strength",
"Clarity of Thought", "Sharp Eye", "Mystic Will", "Rock Skin",
"Superhuman Strength", "Improved Reflexes", "Rapid Restore",
"Rapid Heal", "Protect Item", "Hawk Eye", "Mystic Lore",
"Steel Skin", "Ultimate Strength", "Incredible Reflexes",
"Protect from Magic", "Protect from Missiles",
"Protect from Melee", "Eagle Eye", "Mystic Might", "Retribution",
"Redemption", "Smite", "Chivalry", "Piety" };
public final int[] PRAYER_GLOW = { 83, 84, 85, 601, 602, 86, 87, 88, 89,
90, 91, 603, 604, 92, 93, 94, 95, 96, 97, 605, 606, 98, 99, 100,
607, 608 };
public final int[] PRAYER_HEAD_ICONS = { -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, 2, 1, 0, -1, -1, 3, 5, 4, -1, -1 };
public boolean[] prayerActive = { false, false, false, false, false, false,
false, false, false, false, false, false, false, false, false,
false, false, false, false, false, false, false, false, false,
false, false };
/**
* How fast the prayer is drained
*/
public static final double[] prayerData = { 1, // Thick Skin.
1, // Burst of Strength.
1, // Clarity of Thought.
1, // Sharp Eye.
1, // Mystic Will.
2, // Rock Skin.
2, // SuperHuman Strength.
2, // Improved Reflexes.
0.4, // Rapid restore.
0.6, // Rapid Heal.
0.6, // Protect Items.
1.5, // Hawk eye.
2, // Mystic Lore.
4, // Steel Skin.
4, // Ultimate Strength.
4, // Incredible Reflexes.
4, // Protect from Magic.
4, // Protect from Missiles.
4, // Protect from Melee.
4, // Eagle Eye.
4, // Mystic Might.
1, // Retribution.
2, // Redemption.
6, // Smite.
8, // Chivalry.
8, // Piety.
};
}
@@ -0,0 +1,49 @@
package com.rs2.game.content.combat.prayer;
import com.rs2.game.players.Player;
public class PrayerDrain {
public static void handlePrayerDrain(Player player) {
player.getPrayer().usingPrayer = false;
double toRemove = 0.0;
for (int j = 0; j < PrayerData.prayerData.length; j++) {
if (player.getPrayer().prayerActive[j]) {
toRemove += PrayerData.prayerData[j] / 20;
player.getPrayer().usingPrayer = true;
}
}
if (toRemove > 0) {
toRemove /= 1 + 0.035 * player.playerBonus[11];
}
PrayerData.prayerPoint -= toRemove;
if (PrayerData.prayerPoint <= 0) {
PrayerData.prayerPoint = 1.0 + PrayerData.prayerPoint;
reducePrayerLevel(player);
}
}
public static void reducePrayerLevel(Player c) {
if (c.playerLevel[5] - 1 > 0) {
c.playerLevel[5] -= 1;
} else {
c.getPacketSender().sendMessage(
"You have run out of prayer points!");
c.playerLevel[5] = 0;
resetPrayers(c);
c.getPrayer().prayerId = -1;
}
c.getPlayerAssistant().refreshSkill(5);
}
public static void resetPrayers(Player player) {
for (int i = 0; i < player.getPrayer().prayerActive.length; i++) {
player.getPrayer().prayerActive[i] = false;
player.getPacketSender().sendConfig(player.getPrayer().PRAYER_GLOW[i], 0);
}
player.headIcon = -1;
player.getPlayerAssistant().requestUpdates();
}
}
@@ -0,0 +1,560 @@
package com.rs2.game.content.combat.range;
import com.rs2.GameEngine;
import com.rs2.event.CycleEvent;
import com.rs2.event.CycleEventContainer;
import com.rs2.event.CycleEventHandler;
import com.rs2.game.content.combat.CombatConstants;
import com.rs2.game.npcs.Npc;
import com.rs2.game.npcs.NpcHandler;
import com.rs2.game.objects.Objects;
import com.rs2.game.players.Player;
import com.rs2.util.Misc;
import com.rs2.world.Boundary;
import com.rs2.world.clip.Region;
/**
* Cannon
* @author Andrew (Mr Extremez)
*/
public class DwarfCannon {
public DwarfCannon(Player player2) {
this.player = player2;
}
private Player player;
public final int[] ITEM_PARTS = {6, 8, 10, 12};
private final int[] OBJECT_PARTS = {7, 8, 9, 6};
private final int ballsID = 2;
public final int steelBarID = 2353;
public boolean settingUp = false;
private int setUpStage = 0;
private int maxBalls = 30;
public int myBalls = 0;
private boolean rotating = false;
private int rotation = 0;
private int maxHit = 30;
private final int maxDistance = 20;
private int totalRotations = 0;
private boolean justClicked = false;
public static void makeBall(Player player)
{
//An interface could be added instead of making all.
if (!player.getItemAssistant().playerHasItem(2353) || !player.getItemAssistant().playerHasItem(4))
{
player.getPacketSender().sendMessage("You need an ammo mould and steel bars to make cannonballs.");
return;
}
if (!player.isSmithing)
{
player.isSmithing = true;
CycleEventHandler.getSingleton().addEvent(player, new CycleEvent() {
@Override
public void execute(CycleEventContainer container) {
if (player.isWoodcutting || player.isCrafting || player.isFletching || player.isMoving || player.isMining || player.isBusy || player.isShopping || player.isFiremaking || player.isSpinning || player.isPotionMaking || player.playerIsFishing || player.isBanking || player.isSmelting || player.isTeleporting || player.isHarvesting || player.playerIsCooking || player.isPotCrafting ||!player.isSmithing || !player.getItemAssistant().playerHasItem(2353) || !player.getItemAssistant().playerHasItem(4))
{
container.stop();
return;
}
else
{
player.startAnimation(899);
player.getItemAssistant().deleteItem(2353, 1);
player.getItemAssistant().addItem(2, 4);
player.getPacketSender().sendMessage("You make some cannonballs.");
player.getPlayerAssistant().addSkillXP(26, player.playerSmithing);
player.getPacketSender().sendSound(352, 100, 0);
}
}
@Override
public void stop() {
player.isSmithing = false;
}
}, 3);
}
}
public void placeCannon() {
if (settingUp) {
return;
}
if (noSetUpArea()) {
player.getPacketSender().sendMessage("You are not allowed to set up a cannon here!");
return;
}
if (hasCannon()) {
player.getPacketSender().sendMessage("You already have a cannon placed!");
return;
}
if (nearCannon()) {
player.getPacketSender().sendMessage("You must be farther away from an existing cannon to set a new one up!");
return;
}
if (!canSetUp()) {
player.getPacketSender().sendMessage("You need all the parts of the cannon to set a cannon up.");
return;
}
for (int i = 0; i < 50; i++) {
if (GameEngine.cannonsX[i] == 0 && GameEngine.cannonsY[i] == 0) {
GameEngine.cannonsX[i] = player.absX;
GameEngine.cannonsY[i] = player.absY;
break;
}
}
CycleEventHandler.getSingleton().addEvent(player, new CycleEvent() {
@Override
public void execute(CycleEventContainer container) {
if (setUpStage >= 4) {
container.stop();
setUpStage = 0;
player.CannonSetupStage = setUpStage;
settingUp = false;
return;
}
if (!canSetUp()) {
player.getPacketSender().sendMessage("You need all the parts of the cannon to set a cannon up.");
container.stop();
return;
}
settingUp = true;
player.startAnimation(827);
player.turnPlayerTo(player.absX, player.absY);
player.cannonX = player.absX;
player.cannonY = player.absY;
placeObject(OBJECT_PARTS[setUpStage], player.absX, player.absY, true);
player.getItemAssistant().deleteItem(ITEM_PARTS[setUpStage], 1);
setUpStage ++;
player.CannonSetupStage = setUpStage;
}
@Override
public void stop() {
/**
* Balls
*/
int cballs = getBalls();
int amount = cballs - myBalls;
player.getItemAssistant().deleteItem(ballsID, player.getItemAssistant().getItemSlot(ballsID), amount);
myBalls = cballs;
}
}, 2);
}
public void loginCheck() {
if (player.lostCannon) {
player.getPacketSender().sendMessage("@red@You can collect your cannon from Nulodion.");
}
}
private boolean canSetUp() {
if (setUpStage == 0) {
if (player.getItemAssistant().playerHasItem(ITEM_PARTS[0]) && player.getItemAssistant().playerHasItem(ITEM_PARTS[1]) && player.getItemAssistant().playerHasItem(ITEM_PARTS[2]) && player.getItemAssistant().playerHasItem(ITEM_PARTS[3])) {
return true;
}
} else if (setUpStage == 1) {
if (player.getItemAssistant().playerHasItem(ITEM_PARTS[1]) && player.getItemAssistant().playerHasItem(ITEM_PARTS[2]) && player.getItemAssistant().playerHasItem(ITEM_PARTS[3])) {
return true;
}
} else if (setUpStage == 2) {
if (player.getItemAssistant().playerHasItem(ITEM_PARTS[2]) && player.getItemAssistant().playerHasItem(ITEM_PARTS[3])) {
return true;
}
} else if (setUpStage == 3) {
if (player.getItemAssistant().playerHasItem(ITEM_PARTS[3])) {
return true;
}
}
return false;
}
public boolean hasCannon() {
return (player.CannonSetupStage != 0 || (player.cannonX > 0 && player.cannonY > 0));
}
private boolean myCannon(int x, int y) {
return (player.cannonX == x) && (player.cannonY == y);
}
public int getBalls() {
int cannonBalls = player.getItemAssistant().getItemAmount(ballsID);
if (cannonBalls >= maxBalls) {
return maxBalls;
}
return cannonBalls;
}
public boolean nearCannon() {
for(int i = 0; i < GameEngine.cannonsX.length; i++) {
if ((player.absX >= GameEngine.cannonsX[i] - 1) && (player.absX <= GameEngine.cannonsX[i] + 1) && (player.absY >= GameEngine.cannonsY[i] - 2) && (player.absY <= GameEngine.cannonsY[i] + 1)) {
return true;
}
}
return false;
}
public void loadCannons() {
for(int i = 0; i < GameEngine.cannonsX.length; i++) {
if (GameEngine.cannonsX[i] != 0) {
player.getPacketSender().checkObjectSpawn(6, GameEngine.cannonsX[i], GameEngine.cannonsY[i], 0, 10);
}
}
}
public void loadCannon(int x, int y) {
int cballs = getBalls();
if (!myCannon(x, y)) {
player.getPacketSender().sendMessage("You can't load somebody else's cannon!");
return;
}
if (myBalls <= 29) {
int amount = cballs - myBalls;
player.getItemAssistant().deleteItem(ballsID, player.getItemAssistant().getItemSlot(ballsID), amount);
myBalls = cballs;
if (player.getItemAssistant().playerHasItem(ballsID)) {
player.getPacketSender().sendMessage(amount > 1 ? "You load the cannon with " + amount + " cannonballs." : "You load the cannon with 1 cannonball.");
} else {
player.getPacketSender().sendMessage("You have no cannonballs to load into the cannon.");
}
}
}
public void clickCannon(int x, int y) {
if (!myCannon(x, y)) {
player.getPacketSender().sendMessage("You can't fire somebody else's cannon!");
return;
}
if (myBalls == 0) {
player.getPacketSender().sendMessage("Your cannon has run out of cannonballs.");
return;
}
if (myBalls >= 1 && rotating == false) {
shoot();
} else if (myBalls >= 1 && rotating) {
player.getPacketSender().sendMessage("Your cannon is already shooting.");
}
}
public void handleDisconnect() {
removeObject(player.cannonX, player.cannonY);
for(int i = 0; i < GameEngine.cannonsX.length; i++) {
if (GameEngine.cannonsX[i] == player.cannonX && GameEngine.cannonsY[i] == player.cannonY) {
GameEngine.cannonsX[i] = 0;
GameEngine.cannonsY[i] = 0;
GameEngine.cannonsO[i] = null;
}
}
}
public void handleDeath() {
if (hasCannon()) {
player.lostCannon = true;
removeObject(player.cannonX, player.cannonY);
for(int i = 0; i < GameEngine.cannonsX.length; i++) {
if (GameEngine.cannonsX[i] == player.cannonX && GameEngine.cannonsY[i] == player.cannonY) {
GameEngine.cannonsX[i] = 0;
GameEngine.cannonsY[i] = 0;
GameEngine.cannonsO[i] = null;
}
}
player.cannonX = 0;
player.cannonY = 0;
}
}
public void shoot() {
if (justClicked) {
return;
}
rotating = true;
justClicked = true;
CycleEventHandler.getSingleton().addEvent(player, new CycleEvent() {
@Override
public void execute(CycleEventContainer e) {
totalRotations += 1;
if (totalRotations >= 2) {
justClicked = false;
}
if(rotating == false) {
e.stop();
}
if (myBalls < 1) {
rotating = false;
e.stop();
}
if (rotating) {
rotation += 1;
rotateCannon();
shootNpcs();
}
}
@Override
public void stop() {
}
}, 2);
}
private void rotateCannon() {
switch (rotation) {
case 1: //north
player.getPlayerAssistant().objectAnim(player.cannonX, player.cannonY, 516, 10, -1);
break;
case 2: //north-east
player.getPlayerAssistant().objectAnim(player.cannonX, player.cannonY, 517, 10, -1);
break;
case 3: //east
player.getPlayerAssistant().objectAnim(player.cannonX, player.cannonY, 518, 10, -1);
break;
case 4: //south-east
player.getPlayerAssistant().objectAnim(player.cannonX, player.cannonY, 519, 10, -1);
break;
case 5: //south
player.getPlayerAssistant().objectAnim(player.cannonX, player.cannonY, 520, 10, -1);
break;
case 6: //south-west
player.getPlayerAssistant().objectAnim(player.cannonX, player.cannonY, 521, 10, -1);
break;
case 7: //west
player.getPlayerAssistant().objectAnim(player.cannonX, player.cannonY, 514, 10, -1);
break;
case 8: //north-west
player.getPlayerAssistant().objectAnim(player.cannonX, player.cannonY, 515, 10, -1);
rotation = 0;
break;
}
}
public void removeCannon(int x, int y) {
for (int i = 0; i < GameEngine.cannonsX.length; i++) {
if (GameEngine.cannonsX[i] == x && GameEngine.cannonsY[i] == y) {
GameEngine.cannonsX[i] = 0;
GameEngine.cannonsY[i] = 0;
break;
}
}
}
public void pickup(int x, int y) {
if (!myCannon(x, y)) {
player.getPacketSender().sendMessage("You can't pick up somebody else's cannon!");
return;
}
if (rotating) {
rotating = false;
}
if (player.getItemAssistant().freeSlots() > 3) {
player.startAnimation(827);
player.getPacketSender().sendMessage("You pick up the cannon. It's really heavy.");
removeCannon(player.cannonX, player.cannonY);
player.getItemAssistant().addItem(ITEM_PARTS[0], 1);
player.getItemAssistant().addItem(ITEM_PARTS[1], 1);
player.getItemAssistant().addItem(ITEM_PARTS[2], 1);
player.getItemAssistant().addItem(ITEM_PARTS[3], 1);
} else {
player.getPacketSender().sendMessage("You don't have enough free inventory slots to do that.");
}
if (myBalls > 0) {
player.getItemAssistant().addItem(ballsID, myBalls);
myBalls = 0;
}
removeObject(player.cannonX, player.cannonY);
player.cannonX = 0;
player.cannonY = 0;
player.cannonX = 0;
player.cannonY = 0;
}
public void placeObject(int id, int x, int y, boolean add) {
GameEngine.objectHandler.placeObject(new Objects(id, x, y, 0, 516, 10, 0));
if (add)
Region.addObject(id, x, y, 0, 10, 516, true);
}
public void removeObject(int x, int y) {
placeObject(-1, x, y, false);
}
public boolean noSetUpArea() {
return Boundary.isIn(player, Boundary.BANK_AREA) || player.inFightCaves();
}
private int getHit() {
int hits = Misc.random(2);
switch (hits) {
case 0:
return Misc.random(maxHit);
case 1:
return 15+Misc.random(maxHit-15);
case 2:
return 10+Misc.random(maxHit-10);
}
return 0;
}
public void shootNpcs() {
int damage = getHit();
Npc target = targetNpc();
if (target != null) {
if (damage > target.HP) {
damage = target.HP;
}
if (!Boundary.isIn(player, Boundary.MULTI)) {
if (target.underAttackBy > 0 && target.underAttackBy != player.playerId) {
return;
}
if (player.underAttackBy2 > 0 && player.underAttackBy2 != target.npcId) {
return;
}
}
cannonProjectile(target);
target.hitDiff2 = damage;
target.HP -= damage;
player.globalDamageDealt += damage;
target.killerId = player.playerId;
target.killedBy = player.playerId;
target.facePlayer(player.playerId);
target.hitUpdateRequired2 = true;
target.updateRequired = true;
myBalls -= 1;
player.getPlayerAssistant().addSkillXP(damage * CombatConstants.RANGE_EXP_RATE, player.playerRanged);
}
}
private Npc targetNpc() {
for (int i = 0; i < NpcHandler.MAX_NPCS; i++) {
Npc npc = NpcHandler.npcs[i];
if (npc == null || npc.heightLevel != player.heightLevel || !canAttackSlayer(i)) {
continue;
}
int myX = player.cannonX;
int myY = player.cannonY;
int theirX = npc.absX;
int theirY = npc.absY;
if (!npc.isDead && !npc.isDead && npc.HP != 0 && npc.npcType != 1266 && npc.npcType != 1268 && inDistance(theirX, theirY)) {
switch (rotation) {
case 1:
if (theirY > myY && theirX >= myX - 1 && theirX <= myX + 1) {
return npc;
}
break;
case 2:
if (theirX >= myX + 1 && theirY >= myY + 1) {
return npc;
}
break;
case 3:
if (theirX > myX && theirY >= myY - 1 && theirY <= myY + 1) {
return npc;
}
break;
case 4:
if (theirY <= myY - 1 && theirX >= myX + 1) {
return npc;
}
break;
case 5:
if (theirY < myY && theirX >= myX - 1 && theirX <= myX + 1) {
return npc;
}
break;
case 6:
if (theirX <= myX - 1 && theirY <= myY - 1) {
return npc;
}
break;
case 7:
if (theirX < myX && theirY >= myY - 1 && theirY <= myY + 1) {
return npc;
}
break;
case 8:
if (theirX <= myX - 1 && theirY >= myY + 1) {
return npc;
}
break;
}
}
}
return null;
}
public boolean inDistance(int npcX, int npcY) {
return (npcX >= player.cannonX - maxDistance && npcX <= player.cannonX + maxDistance && npcY >= player.cannonY - maxDistance && npcY <= player.cannonY + maxDistance);
}
public boolean canAttackSlayer(int i){
return player.playerLevel[player.playerSlayer] >= player.getSlayer().getRequiredLevel(NpcHandler.npcs[i].npcType);
}
private void cannonProjectile(Npc n) {
int oX = player.cannonX+getShootXPos();
int oY = player.cannonY+getShootYPos();
int offX = ((oX - n.absX) * -1);
int offY = ((oY - n.absY) * -1);
player.getPlayerAssistant().createPlayersProjectile(oX, oY, offY, offX, 50, 60, 53, 20, 20, -player.oldNpcIndex + 1, 30);
}
public int getShootXPos() {
switch(rotation) {
case 1:
return 1;
case 2:
return 2;
case 3:
return 2;
case 4:
return 2;
case 5:
return 1;
case 6:
return 0;
case 7:
return 0;
case 8:
return 0;
}
return 0;
}
public int getShootYPos() {
switch(rotation) {
case 1:
return 2;
case 2:
return 2;
case 3:
return 1;
case 4:
return 0;
case 5:
return 0;
case 6:
return 0;
case 7:
return 1;
case 8:
return 2;
}
return 0;
}
}
@@ -0,0 +1,391 @@
package com.rs2.game.content.combat.range;
import com.rs2.game.players.Player;
public class RangeData {
public final static int[] BOWS = { 9185, 839, 845, 847, 851, 855, 859, 841,
843, 849, 853, 857, 861, 4212, 4214, 4215, 11235, 4216, 4217, 4218,
4219, 4220, 4221, 4222, 4223, 6724, 4734, 4934, 4935, 4936, 4937 };
public final static int[] ARROWS = { 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, 892, 893, 4740,
11212, 9140, 9141, 4142, 9143, 9144, 9240, 9241, 9242, 9243, 9244,
9245, 4150, 4160, 4172 };
public final static int[] NO_ARROW_DROP = { 4212, 4214, 4215, 4216, 4217,
4218, 4219, 4220, 4221, 4222, 4223, 4734, 4934, 4935, 4936, 4937 };
public final static int[] OTHER_RANGE_WEAPONS = { 863, 864, 865, 866, 867,
868, 869, 806, 807, 808, 809, 810, 811, 825, 826, 827, 828, 829,
830, 800, 801, 802, 803, 804, 805, 6522 };
public static boolean usingCrystalBow(Player c) {
return c.playerEquipment[c.playerWeapon] >= 4212
&& c.playerEquipment[c.playerWeapon] <= 4223;
}
public static boolean usingBolts(Player c) {
return c.playerEquipment[c.playerArrows] >= 9130
&& c.playerEquipment[c.playerArrows] <= 9145
|| c.playerEquipment[c.playerArrows] >= 9230
&& c.playerEquipment[c.playerArrows] <= 9245;
}
public static boolean properBolts(Player c) {
return c.playerEquipment[c.playerArrows] >= 9140
&& c.playerEquipment[c.playerArrows] <= 9144
|| c.playerEquipment[c.playerArrows] >= 9240
&& c.playerEquipment[c.playerArrows] <= 9244;
}
public static boolean usingHally(Player c) {
switch (c.playerEquipment[c.playerWeapon]) {
case 3190:
case 3192:
case 3194:
case 3196:
case 3198:
case 3200:
case 3202:
case 3204:
return true;
}
return false;
}
public static boolean usingDart(Player player) {
switch (player.playerEquipment[player.playerWeapon]) {
case 806:
case 807:
case 808:
case 809:
case 810:
case 811:
return true;
}
return false;
}
public static boolean usingLongbow(Player player) {
if (usingCrystalBow(player)) {
return true;
}
switch (player.playerEquipment[player.playerWeapon]) {
case 839:
case 845:
case 847:
case 851:
case 855:
case 859:
return true;
}
return false;
}
public static int correctBowAndArrows(Player c) {
if (usingBolts(c)) {
return -1;
}
switch (c.playerEquipment[c.playerWeapon]) {
case 839://longbow
case 841:
return 882;
case 843:
case 845://longbow
return 884;
case 847://longbow
case 849:
return 886;
case 851://longbow
case 853:
return 888;
case 855://longbow
case 857:
return 890;
case 859://longbow
case 861:
if (c.playerEquipment[c.playerArrows] == 892) {
return 892;
} else if (c.playerEquipment[c.playerArrows] == 4172) {
return 4172;
}
//karils
case 4734:
case 4935:
case 4936:
case 4937:
return 4740;
}
return -1;
}
public static int getRangeStartGFX(Player c) {
switch (c.rangeItemUsed) {
case 863:
return 220;
case 864:
return 219;
case 865:
return 221;
case 866: // knives
return 223;
case 867:
return 224;
case 868:
return 225;
case 869:
return 222;
case 806:
return 232;
case 807:
return 233;
case 808:
return 234;
case 809: // darts
return 235;
case 810:
return 236;
case 811:
return 237;
case 825:
return 206;
case 826:
return 207;
case 827: // javelin
return 208;
case 828:
return 209;
case 829:
return 210;
case 830:
return 211;
case 800:
return 42;
case 801:
return 43;
case 802:
return 44; // axes
case 803:
return 45;
case 804:
return 46;
case 805:
return 48;
case 882:
return 19;
case 884:
return 18;
case 886:
return 20;
case 888:
return 21;
case 890:
return 22;
case 892:
return 24;
case 11212:
return 26;
case 4212:
case 4214:
case 4215:
case 4216:
case 4217:
case 4218:
case 4219:
case 4220:
case 4221:
case 4222:
case 4223:
return 250;
}
return -1;
}
public static int getRangeProjectileGFX(Player c) {
if (c.dbowSpec) {
return 672;
}
if (c.bowSpecShot > 0) {
switch (c.rangeItemUsed) {
default:
return 249;
}
}
if (c.playerEquipment[c.playerWeapon] == 9185) {
return 27;
}
switch (c.rangeItemUsed) {
case 863:
return 213;
case 864:
return 212;
case 865:
return 214;
case 866: // knives
return 216;
case 867:
return 217;
case 868:
return 218;
case 869:
return 215;
case 806:
return 226;
case 807:
return 227;
case 808:
return 228;
case 809: // darts
return 229;
case 810:
return 230;
case 811:
return 231;
case 825:
return 200;
case 826:
return 201;
case 827: // javelin
return 202;
case 828:
return 203;
case 829:
return 204;
case 830:
return 205;
case 6522: // Toktz-xil-ul
return 442;
case 800:
return 36;
case 801:
return 35;
case 802:
return 37; // axes
case 803:
return 38;
case 804:
return 39;
case 805:
return 40;
case 882:
return 10;
case 884:
return 9;
case 886:
return 11;
case 888:
return 12;
case 890:
return 13;
case 892:
return 15;
case 11212:
return 17;
case 4740: // bolt rack
return 27;
case 4212:
case 4214:
case 4215:
case 4216:
case 4217:
case 4218:
case 4219:
case 4220:
case 4221:
case 4222:
case 4223:
return 249;
}
return -1;
}
public static int getProjectileSpeed(Player c) {
if (c.dbowSpec) {
return 100;
}
return 70;
}
public static int getProjectileShowDelay(Player c) {
switch (c.playerEquipment[c.playerWeapon]) {
case 863:
case 864:
case 865:
case 866: // knives
case 867:
case 868:
case 869:
case 806:
case 807:
case 808:
case 809: // darts
case 810:
case 811:
case 825:
case 826:
case 827: // javelin
case 828:
case 829:
case 830:
case 800:
case 801:
case 802:
case 803: // axes
case 804:
case 805:
case 4734:
case 9185:
case 4935:
case 4936:
case 4937:
return 15;
default:
return 5;
}
}
public static boolean fullVoidRange(Player c) {
return c.playerEquipment[c.playerHat] == 11664
&& c.playerEquipment[c.playerLegs] == 8840
&& c.playerEquipment[c.playerChest] == 8839
&& c.playerEquipment[c.playerHands] == 8842;
}
}
@@ -0,0 +1,101 @@
package com.rs2.game.content.combat.range;
import com.rs2.game.players.Player;
public class RangeMaxHit {
public static int calculateRangeDefence(Player c) {
int defenceLevel = c.playerLevel[1];
if (c.getPrayer().prayerActive[0]) {
defenceLevel += c.getLevelForXP(c.playerXP[c.playerDefence]) * 0.05;
} else if (c.getPrayer().prayerActive[5]) {
defenceLevel += c.getLevelForXP(c.playerXP[c.playerDefence]) * 0.1;
} else if (c.getPrayer().prayerActive[13]) {
defenceLevel += c.getLevelForXP(c.playerXP[c.playerDefence]) * 0.15;
} else if (c.getPrayer().prayerActive[24]) {
defenceLevel += c.getLevelForXP(c.playerXP[c.playerDefence]) * 0.2;
} else if (c.getPrayer().prayerActive[25]) {
defenceLevel += c.getLevelForXP(c.playerXP[c.playerDefence]) * 0.25;
}
return defenceLevel + c.playerBonus[9] + c.playerBonus[9] / 2;
}
public static int calculateRangeAttack(Player c) {
int rangeLevel = c.playerLevel[4];
rangeLevel *= c.specAccuracy;
if (RangeData.fullVoidRange(c)) {
rangeLevel += c.getLevelForXP(c.playerXP[c.playerRanged]) * 0.1;
}
if (c.getPrayer().prayerActive[3]) {
rangeLevel *= 1.05;
} else if (c.getPrayer().prayerActive[11]) {
rangeLevel *= 1.10;
} else if (c.getPrayer().prayerActive[19]) {
rangeLevel *= 1.15;
}
// dbow spec
if (RangeData.fullVoidRange(c) && c.specAccuracy > 1.15) {
rangeLevel *= 1.75;
}
return (int) (rangeLevel + c.playerBonus[4] * 1.95);
}
public static int rangeMaxHit(Player c) {
int rangeLevel = c.playerLevel[4];
int itemUsed = getRangeStr(c.usingBow ? c.lastArrowUsed : c.lastWeaponUsed);
double modifier = 1.00;
if (c.getPrayer().prayerActive[3]) {
modifier *= 1.05;
} else if (c.getPrayer().prayerActive[11]) {
modifier *= 1.10;
} else if (c.getPrayer().prayerActive[19]) {
modifier *= 1.15;
}
if (RangeData.fullVoidRange(c)) {
modifier *= 1.20;
}
double e = Math.floor(rangeLevel * modifier);
if (c.fightMode == 0) {
e = (e + 3.0);
}
double darkbow = 1.0;
if (c.usingSpecial) {
if (c.playerEquipment[3] == 11235) {
if (c.lastArrowUsed == 11212) {
darkbow = 1.5;
} else {
darkbow = 1.3;
}
}
}
double max = (1.3 + e / 10 + itemUsed / 80 + e * itemUsed / 640) * darkbow;
return (int) max;
}
public static int getRangeStr(int i) {
int str = 0;
int[][] data = { { 877, 10 }, { 9140, 46 }, { 9145, 36 }, { 9141, 64 },
{ 9142, 82 }, { 9143, 100 }, { 9144, 115 }, { 9236, 14 },
{ 9237, 30 }, { 9238, 48 }, { 9239, 66 }, { 9240, 83 },
{ 9241, 85 }, { 9242, 103 }, { 9243, 105 }, { 9244, 117 },
{ 9245, 120 }, { 882, 7 }, { 884, 10 }, { 886, 16 },
{ 888, 22 }, { 890, 31 }, { 892, 49 }, { 4740, 55 },
{ 11212, 60 }, { 806, 1 }, { 807, 3 }, { 808, 4 }, { 809, 7 },
{ 810, 10 }, { 811, 14 }, { 11230, 20 }, { 864, 3 },
{ 863, 4 }, { 865, 7 }, { 866, 10 }, { 867, 14 }, { 868, 24 },
{ 825, 6 }, { 826, 10 }, { 827, 12 }, { 828, 18 }, { 829, 28 },
{ 830, 42 }, { 800, 5 }, { 801, 7 }, { 802, 11 }, { 803, 16 },
{ 804, 23 }, { 805, 36 }, { 9976, 0 }, { 9977, 15 },
{ 4212, 70 }, { 4214, 70 }, { 4215, 70 }, { 4216, 70 },
{ 4217, 70 }, { 4218, 70 }, { 4219, 70 }, { 4220, 70 },
{ 4221, 70 }, { 4222, 70 }, { 4223, 70 }, { 6522, 49 },
{ 10034, 15 }, };
for (int[] element : data) {
if (i == element[0]) {
str = element[1];
}
}
return str;
}
}
@@ -0,0 +1,217 @@
package com.rs2.game.content.consumables;
import com.rs2.event.*;
import com.rs2.game.players.Player;
import com.rs2.util.Misc;
public class Beverages {
private static final int BEER_GLASS = 1919;
public static enum beverageData {
BEER(1917, BEER_GLASS, 829, true, false, false, false),
BEER1(7740, BEER_GLASS, 829, true, false, false, false),
GROG(1915, BEER_GLASS, 829, true, false, false, false),
BANDITS_BREW(4627, BEER_GLASS, 829, true, false, false, false),
DRAGON_BITTER(1911, BEER_GLASS, 829, true, false, false, false),
CIDER(7752,BEER_GLASS, 829, true, false, false, false),
MATURE_CIDER(5765, BEER_GLASS, 829, true, false, false, false),
MOONLIGHT_MEAD(7750, BEER_GLASS, 829, true, false, false, false),
DWARVEN_STOUT(1913, BEER_GLASS, 829, true, false, false, false),
GREENMANS_ALE(1909, BEER_GLASS, 829, true, false, false, false),
CHEFS_DELIGHT(7754, BEER_GLASS, 829, true, false, false, false),
ASGARNIAN_ALE(1905, BEER_GLASS, 829, true, false, false, false),
WIZARDS_MIND_BOMB(1907, BEER_GLASS, 829, true, false, false, false);
private int bevId, replacement, bevAnim;
private boolean effect1, effect2, effect3, effect4;
private beverageData(final int bevId, final int replacement,
final int bevAnim, final boolean effect1,
final boolean effect2, final boolean effect3,
final boolean effect4) {
this.bevId = bevId;
this.replacement = replacement;
this.bevAnim = bevAnim;
this.effect1 = effect1;
this.effect2 = effect2;
this.effect3 = effect3;
this.effect4 = effect4;
}
public int getBev() {
return bevId;
}
public int getRep() {
return replacement;
}
public int getAnim() {
return bevAnim;
}
public boolean getEffect1() {
return effect1;
}
public boolean getEffect2() {
return effect2;
}
public boolean getEffect3() {
return effect3;
}
public boolean getEffect4() {
return effect4;
}
private final String getName() {
return Misc.optimizeText(toString().toLowerCase().replaceAll("_", " "));
}
}
public static boolean isBeverage(Player c, int beverageId) {
boolean isBeverage = false;
for (final beverageData b : beverageData.values()) {
if (beverageId == b.getBev()) {
isBeverage = true;
}
}
return isBeverage;
}
private static int drunkTimer = 0;
private static void resetDrunk(Player c) {
c.playerStandIndex = 0x328;
c.updateRequired = true;
c.appearanceUpdateRequired = true;
drunkTimer = -1;
}
private static void getBevEffect(final Player c, int bevEffectId) {
switch (bevEffectId) {
case 1:
c.playerStandIndex = 3040;
c.getPacketSender().sendMessage("You start to feel dizzy.");
CycleEventHandler.getSingleton().addEvent(c, new CycleEvent() {
@Override
public void execute(CycleEventContainer container) {
if (c.disconnected) {
container.stop();
return;
}
if (drunkTimer > 0) {
drunkTimer--;
}
if (drunkTimer == 0) {
container.stop();
}
}
public void stop() {
resetDrunk(c);
}
}, 1);
break;
default:
break;
}
c.updateRequired = true;
c.appearanceUpdateRequired = true;
}
public static void foodEffect(Player c, int id) {
switch (id) {
case 1917:
case 7740://beer
double beerEffectStrength = c.getLevelForXP(c.playerXP[2]) * .04 + c.getLevelForXP(c.playerXP[2]);
double beerEffectAttack = c.getLevelForXP(c.playerXP[0]) * .07;
if (c.playerLevel[2] < beerEffectStrength) {
c.playerLevel[2] = (int) beerEffectStrength;
}
if (c.playerLevel[0] > 0) {
c.playerLevel[0] -= beerEffectAttack;
}
if (c.playerLevel[0] <= 0) {
c.playerLevel[0] = 1;
}
c.getPlayerAssistant().refreshSkill(0);
c.getPlayerAssistant().refreshSkill(2);
break;
case 1913: //dwarven stout
c.playerLevel[c.playerMining] = c.getPlayerAssistant().getLevelForXP(c.playerXP[c.playerMining]) + 1;
c.playerLevel[c.playerSmithing] = c.getPlayerAssistant().getLevelForXP(c.playerXP[c.playerSmithing]) + 1;
c.getPlayerAssistant().refreshSkill(c.playerMining);
c.getPlayerAssistant().refreshSkill(c.playerSmithing);
break;
case 1907://wizard's mind bomb
if (c.playerLevel[c.playerMagic] < 50) {
c.playerLevel[c.playerMagic] = c.getPlayerAssistant().getLevelForXP(c.playerXP[c.playerMagic]) + 2;
} else {
c.playerLevel[c.playerMagic] = c.getPlayerAssistant().getLevelForXP(c.playerXP[c.playerMagic]) + 3;
}
c.playerLevel[c.playerStrength] = c.getPlayerAssistant().getLevelForXP(c.playerXP[c.playerStrength]) - 3;
c.playerLevel[c.playerDefence] = c.getPlayerAssistant().getLevelForXP(c.playerXP[c.playerDefence]) - 3;
c.playerLevel[c.playerAttack] = c.getPlayerAssistant().getLevelForXP(c.playerXP[c.playerAttack]) - 4;
c.getPlayerAssistant().refreshSkill(c.playerDefence);
c.getPlayerAssistant().refreshSkill(c.playerMagic);
c.getPlayerAssistant().refreshSkill(c.playerAttack);
c.getPlayerAssistant().refreshSkill(c.playerStrength);
break;
case 1915://grog
c.playerLevel[2] = c.getPlayerAssistant().getLevelForXP(c.playerXP[2]) + 3;
if (c.playerLevel[0] > 0) {
c.playerLevel[0] = c.getPlayerAssistant().getLevelForXP(c.playerXP[0]) - 2;
}
if (c.playerLevel[0] <= 0) {
c.playerLevel[0] = 1;
}
c.getPlayerAssistant().refreshSkill(0);
c.getPlayerAssistant().refreshSkill(2);
break;
}
}
public static void drinkBeverage(final Player player, final int beverageId, int slotId) {
for (final beverageData b : beverageData.values()) {
if (beverageId == b.getBev()) {
if (System.currentTimeMillis() - player.potDelay >= 1500) {
if (player.getItemAssistant().playerHasItem(beverageId)) {
if (b.getEffect1()) {
drunkTimer = 30;
getBevEffect(player, 1);
}
if (b.getEffect2()) {
drunkTimer = 45;
getBevEffect(player, 2);
}
if (b.getEffect3()) {
drunkTimer = 60;
getBevEffect(player, 3);
}
if (b.getEffect4()) {
drunkTimer = 75;
getBevEffect(player, 4);
}
foodEffect(player, beverageId);
player.potDelay = System.currentTimeMillis();
player.foodDelay = player.potDelay;
player.getCombatAssistant().resetPlayerAttack();
player.attackTimer++;
player.startAnimation(b.getAnim());
player.getItemAssistant().resetItems(3214);
player.potDelay = System.currentTimeMillis();
player.getItemAssistant().deleteItem(beverageId, slotId, 1);
player.getItemAssistant().addItem(b.getRep(), 1);
player.forcedChat("Cheers mate!");
player.getPacketSender().sendMessage("You drink the " + b.getName() + ".");
}
}
}
}
}
}
@@ -0,0 +1,249 @@
package com.rs2.game.content.consumables;
import java.util.HashMap;
import com.rs2.game.content.music.sound.SoundList;
import com.rs2.game.items.impl.RareProtection;
import com.rs2.game.players.Player;
import com.rs2.util.Misc;
public class Food {
public static enum FoodToEat {
Easter_Egg(1961, 12, "Easter Egg", 0, "Food", false),
Pumpkin(1959, 14, "Pumpkin", 0, "Food", false),
Half_Jug_of_Wine(1989, 7, "Half Full Wine Jug", 1935, "Drink", false),
CUP_OF_TEA(1978, 2 + Misc.random(1), "Cup of Tea", 1980, "Drink", true),
CUP_OF_TEA2(712, 2 + Misc.random(1), "Cup of Tea", 1980, "Drink", true),
LEMON(2102, 2,"Lemon", 0, "Food", false), LIME(2120, 2, "Lime", 0, "Food", false),
PINEAPPLE(2114, 2, "Pineapple", 0, "Food", false),
CHOCOLATE_BAR(1973, 2, "Chocolate Bar", 0, "Food", false),
Wine(1993, 11, "Wine", 1935, "Drink", false),
MACKERAL(355, 6, "Mackeral", 0, "Food", false),
MANTA(391, 22, "Manta Ray", 0, "Food", false),
SHARK(385, 20, "Shark", 0, "Food", false),
LOBSTER(379, 12, "Lobster", 0, "Food", false),
KARAMBWAN(3144, 2 + Misc.random(4), "Karambwan", 0, "Food", false),
TROUT(333, 7, "Trout", 0, "Food", false),
SALMON(329, 9, "Salmon", 0, "Food", false),
SWORDFISH(373, 14, "Swordfish", 0, "Food", false),
TUNA(361, 10, "Tuna", 0, "Food", false),
MONKFISH(7946, 16, "Monkfish", 0, "Food", false),
SEA_TURTLE(397, 21, "Sea Turtle", 0, "Food", false),
CABBAGE(1965, 1, "Cabbage", 0, "Food", false),
CABBAGE_SOUTH_OF_FALADOR(1967, 1, "Cabbage", 0, "Food", false),
SPINACH(1969, 2, "Spinach Roll", 0, "Food", false),
CAKE(1891, 4, "Cake", 1893, "Food", false),
CAKE2(1893, 4, "2/3 Cake", 1895, "Food", false),
SLICE_OF_CAKE(1895, 4, "2/3 Cake", 0, "Food", false),
BASS(365, 13, "Bass", 0, "Food", false),
COD(339, 7, "Cod", 0, "Food", false),
POTATO(1942, 1, "Potato", 0, "Food", false),
BAKED_POTATO(6701, 4, "Baked Potato", 0, "Food", false),
POTATO_WITH_CHEESE(6705, 16, "Potato with Cheese", 0, "Food", false),
EGG_POTATO(7056, 16, "Egg Potato", 0, "Food", false),
CHILLI_POTATO(7054, 14, "Chilli Potato", 0, "Food", false),
MUSHROOM_POTATO(7058, 20, "Mushroom Potato", 0, "Food", false),
TUNA_POTATO(7060, 22, "Tuna Potato", 0, "Food", false),
SHRIMPS(315, 3, "Shrimps", 0, "Food", false),
HERRING(347, 5, "Herring", 0, "Food", false),
SARDINE(325, 4, "Sardine", 0, "Food", false),
CHOCOLATE_CAKE(1897, 5, "Chocolate Cake", 1899, "Food", false),
HALF_CHOCOLATE_CAKE(1899, 5, "2/3 Chocolate Cake", 1901, "Food", false),
CHOCOLATE_SLICE(1901, 5, "Chocolate Slice", 0, "Food", false),
ANCHOVIES(319, 2, "Anchovies", 0, "Food", false),
PLAIN_PIZZA(2289, 7, "Plain Pizza", 2291, "Food", false),
HALF_PLAIN_PIZZA(2291, 7, "1/2 Plain pizza", 0, "Food", false),
MEAT_PIZZA(2293, 8, "Meat Pizza", 2295, "Food", false),
CHICKEN(2140, 3, "Chicken", 0, "Food", false),
MEAT(2142, 2, "Meat", 0, "Food", false),
HALF_MEAT_PIZZA(2295, 8, "1/2 Meat Pizza", 0, "Food", false),
ANCHOVY_PIZZA(2297, 9, "Anchovy Pizza", 2299, "Food", false),
HALF_ANCHOVY_PIZZA(2299, 9, "1/2 Anchovy Pizza", 0, "Food", false),
PINEAPPLE_PIZZA(2301, 11, "Pineapple Pizza", 2303, "Food", false),
HALF_PINEAPPLE_PIZZA(2303, 11, "1/2 Pineapple Pizza", 0, "Food", false),
BREAD(2309, 5, "Bread", 0, "Food", false),
APPLE_PIE(2323, 7, "Apple Pie", 2335, "Food", false),
HALF_APPLE_PIE(2335, 7, "Half Apple Pie", 2313, "Food", false),
REDBERRY_PIE(2325, 5, "Redberry Pie", 2333, "Food", false),
HALF_REDBERRY_PIE(2333, 5, "Half Redberry Pie", 2313, "Food", false),
Ugthanki_kebab(1883, 2, "Ugthanki kebab", 0, "Food", false),
SEAWEED(403, 4, "Edible Seaweed", 0, "Food", false),
MEAT_PIE(2327, 6, "Meat Pie", 2331, "Food", false),
HALF_MEAT_PIE(2331, 6, "Half Meat Pie", 2313, "Food", false),
SUMMER_PIE(7218, 11, "Summer Pie", 7220, "Food", false),
HALF_SUMMER_PIE(7220, 11, "Half Summer Pie", 2313, "Food", false),
PIKE(351, 8, "Pike", 0, "Food", false),
POTATO_WITH_BUTTER(6703, 14, "Potato with Butter", 0, "Food", false),
SLICED_BANANA(3162, 2, "Sliced Banana", 0, "Food", false),
BANANA(1963, 2, "Banana", 0, "Food", false),
PEACH(6883, 8, "Peach", 0, "Food", false),
ORANGE(2108, 2, "Orange", 0, "Food", false),
PINEAPPLE_RINGS(2118, 2, "Pineapple Rings", 0, "Food", false),
PINEAPPLE_CHUNKS(2116, 2, "Pineapple Chunks", 0, "Food", false),
EASTER_EGG(7928, 1, "Easter Egg", 0, "Food", false),
EASTER_EGG2(7929, 1, "Easter Egg", 0, "Food", false),
EASTER_EGG3(7930, 1, "Easter Egg", 0, "Food", false),
EASTER_EGG4(7931, 1, "Easter Egg", 0, "Food", false),
EASTER_EGG5(7932, 1, "Easter Egg", 0, "Food", false),
EASTER_EGG6(7933, 1, "Easter Egg", 0, "Food", false),
PURPLE_SWEETS(10476, 9, "Purple Sweets", 0, "Food", false),
POT_OF_CREAM(2130, 1, "Pot of cream", 0, "Food", false),
FILED_RATION(7934, 9, "Field Ration", 0, "Food", false),
STEW(2003, 11, "Stew", 1923, "Food", false),
CURRY(2011, 19, "Curry", 1923, "Drink", false),
BANDAGES(4049, 3, "Bandages", 0, "Food", false),
TOMATO(1982, 2, "Tomato", 0, "Food", false),
CHEESE(1985, 2, "Cheese", 0, "Food", false);
private int id;
private int heal;
private String name;
private int replace;
private String type;
private boolean foodEffect;
private FoodToEat(int id, int heal, String name, int replaceWith,
String type, boolean foodEffect) {
this.id = id;
this.heal = heal;
this.name = name;
replace = replaceWith;
this.type = type;
this.foodEffect = foodEffect;
}
private boolean hasEffect() {
return foodEffect;
}
private int getId() {
return id;
}
private String getType() {
return type;
}
private int getHeal() {
return heal;
}
public String getName() {
return name;
}
public int replaceWith() {
return replace;
}
public static HashMap<Integer, FoodToEat> food = new HashMap<Integer, FoodToEat>();
static {
for (FoodToEat f : FoodToEat.values()) {
food.put(f.getId(), f);
}
}
}
public int random(int r) {
return Misc.random(r);
}
public static void eat(Player player, int id, int slot) {
if (player.isDead || player.playerLevel[3] <= 0) {
return;
}
if (player.duelRule[6]) {
player.getPacketSender().sendMessage("You may not eat in this duel.");
return;
}
if (!RareProtection.eatDupedItem(player, id)) {
return;
}
if (System.currentTimeMillis() - player.foodDelay >= 1800 && player.playerLevel[3] > 0) {
player.getCombatAssistant().resetPlayerAttack();
player.attackTimer += 2;
player.startAnimation(829);
player.getItemAssistant().deleteItem(id, slot, 1);
FoodToEat f = FoodToEat.food.get(id);
if (f.hasEffect()) {
foodEffect(player, id);
}
if (f.replaceWith() > 0) {
player.getItemAssistant().addItem(f.replaceWith(), 1);
}
if (f.getType().equalsIgnoreCase("Food")) {
if (id == 1965) {
player.getPacketSender().sendMessage("You eat the cabbage. Yuck!");
} else if (id == 1967){
player.getPacketSender().sendMessage("You eat the cabbage. It seems to taste nicer than normal.");
} else {
player.getPacketSender().sendMessage("You eat the " + f.getName() + ".");
}
} else if (f.getType().equalsIgnoreCase("Drink")) {
if (id == 2955) {
player.getPacketSender().sendMessage("It tastes like something just died in your mouth.");
} else {
player.getPacketSender().sendMessage("You drink the " + f.getName() + ".");
}
}
if (f.getType().equalsIgnoreCase("Food")) {
player.getPacketSender().sendSound(SoundList.FOOD_EAT, 100, 0);
} else if (f.getType().equalsIgnoreCase("Drink")) {
player.getPacketSender().sendSound(SoundList.DRINK, 100, 0);
}
player.foodDelay = System.currentTimeMillis();
if (player.playerLevel[3] < player.getLevelForXP(player.playerXP[3])) {
player.playerLevel[3] += f.getHeal();
player.getPacketSender().sendMessage("It heals some health.");
if (player.playerLevel[3] > player.getLevelForXP(player.playerXP[3])) {
player.playerLevel[3] = player.getLevelForXP(player.playerXP[3]);
}
}
player.getPlayerAssistant().refreshSkill(3);
}
}
public static void foodEffect(Player player, int id) {
switch (id) {
case 1978:
case 712:
player.forcedChat("Aaah, nothing like a nice cuppa tea!");
break;
case 1907:
if (player.playerLevel[6] < 50) {
player.playerLevel[6] = player.getPlayerAssistant().getLevelForXP(player.playerXP[6]) + 2;
} else {
player.playerLevel[6] = player.getPlayerAssistant().getLevelForXP(player.playerXP[6]) + 3;
}
if (player.playerLevel[2] < 4) {
player.playerLevel[2] = 1;
}
if (player.playerLevel[0] < 5) {
player.playerLevel[0] = 1;
} else {
player.playerLevel[0] = player.getPlayerAssistant().getLevelForXP(player.playerXP[0]) - 4;
}
if (player.playerLevel[1] < 4) {
player.playerLevel[1] = 1;
} else {
player.playerLevel[1] = player.getPlayerAssistant().getLevelForXP(player.playerXP[1]) - 3;
}
if (player.playerLevel[2] < 4) {
player.playerLevel[2] = 1;
} else {
player.playerLevel[2] = player.getPlayerAssistant().getLevelForXP(player.playerXP[2]) - 3;
}
player.getPlayerAssistant().refreshSkill(0);
player.getPlayerAssistant().refreshSkill(1);
player.getPlayerAssistant().refreshSkill(2);
player.getPlayerAssistant().refreshSkill(6);
break;
}
}
public static boolean isFood(int id) {
return FoodToEat.food.containsKey(id);
}
}
@@ -0,0 +1,136 @@
package com.rs2.game.content.consumables;
import com.rs2.game.players.Player;
import com.rs2.util.Misc;
/**
* @author darkside1222
*/
public class Kebabs {
public static int Kebab = 1971;
float chances = 0.0f;
/**
* Chances(Percents)
*/
public static float chances(String effect) {
float chances = 0.0f;// PERCENT
if (effect.equalsIgnoreCase("Effect1")) {// Nothing
chances = 8.7f;
} else if (effect.equalsIgnoreCase("Effect2")) {// normal heal
chances = 61.2f;
} else if (effect.equalsIgnoreCase("Effect3")) {// better heal
chances = 21.1f;
} else if (effect.equalsIgnoreCase("Effect4")) {// SUPER heal
chances = 3.6f;
} else if (effect.equalsIgnoreCase("Effect5")) {// Damages you.
chances = 6.3f - 0.9f;
;
} else {
chances = Float.parseFloat(effect);
}
return chances; // Equals 100%
}
/**
* Different effects(Healing,lowering,damaging)
*/
public static void effects(Player c) {
float eff1 = chances("effect1");
float eff2 = chances("effect2");
float eff3 = chances("effect3");
float eff4 = chances("effect4");
float eff5 = chances("effect5");
if (Misc.random(100.0f) <= eff1) { // 8.71%
c.getPacketSender().sendMessage(
"That kebab didn't seem to do a lot.");
} else if (Misc.random(100.0f) <= eff2) { // 61.24% heals 10% of HP
c.getPacketSender()
.sendMessage("It restores some life points.");
if (c.playerLevel[3] < c.getLevelForXP(c.playerXP[3])) {
c.playerLevel[3] += c.getLevelForXP(c.playerXP[3]) * 0.10;
if (c.playerLevel[3] > c.getLevelForXP(c.playerXP[3])) {
c.playerLevel[3] = c.getLevelForXP(c.playerXP[3]);
}
}
} else if (Misc.random(100.0f) <= eff3) { // 21.12% + 10-20 HP
c.getPacketSender().sendMessage(
"That was a good kebab. You feel a lot better. ");
if (c.playerLevel[3] < c.getLevelForXP(c.playerXP[3])) {
c.playerLevel[3] += Misc.random(20);
if (c.playerLevel[3] > c.getLevelForXP(c.playerXP[3])) {
c.playerLevel[3] = c.getLevelForXP(c.playerXP[3]);
}
}
} else if (Misc.random(100.0f) <= eff4) {// 3.65% + attk,str,def +
// 2-3 + heal 0-300
c.getPacketSender()
.sendMessage(
"Wow, that was an amazing kebab! You feel really invigorated.");
c.playerLevel[1] += 2 + Misc.random(1); // def
c.playerLevel[2] += 2 + Misc.random(1); // str
c.playerLevel[0] += 2 + Misc.random(1); // atk
c.getPlayerAssistant().refreshSkill(1);
c.getPlayerAssistant().refreshSkill(2);
c.getPlayerAssistant().refreshSkill(3);
if (c.playerLevel[3] < c.getLevelForXP(c.playerXP[3])) {
c.playerLevel[3] += Misc.random(30);
if (c.playerLevel[3] > c.getLevelForXP(c.playerXP[3])) {
c.playerLevel[3] = c.getLevelForXP(c.playerXP[3]);
}
}
} else if (Misc.random(100.0f) <= eff5) {// 6.3%. lower STAT
c.getPacketSender().sendMessage(
"That tasted very dodgy. You feel very ill.");
c.getPacketSender().sendMessage(
"Eating the kebab has done damage to some of your stats.");
for (int j = 0; j < 2; j++) {
c.playerLevel[j] -= 2; // Fix this l0l
c.getPlayerAssistant().refreshSkill(j);
}
}
}
/**
* Eatting the kebab
*/
public static void eat(Player player, int slot) {
if (System.currentTimeMillis() - player.foodDelay >= 1500
&& player.playerLevel[3] > 0) {
if (player.playerLevel[3] == player.getLevelForXP(player.playerXP[3])) { // If
// full
// health,
// does
// nothing
// but
// eat.
player.getCombatAssistant().resetPlayerAttack();
player.getPacketSender().sendMessage("You eat the kebab.");
player.attackTimer += 2;
player.startAnimation(829);
player.getItemAssistant().deleteItem(Kebab, slot, 1);
player.getPacketSender().sendSound(317, 100, 0);
player.foodDelay = System.currentTimeMillis();
player.getPlayerAssistant().refreshSkill(3);
return;
}
player.getCombatAssistant().resetPlayerAttack();
player.getPacketSender().sendMessage("You eat the kebab.");
effects(player);
player.attackTimer += 2;
player.startAnimation(829);
player.getItemAssistant().deleteItem(Kebab, slot, 1);
player.getPacketSender().sendSound(317, 100, 0);
player.foodDelay = System.currentTimeMillis();
player.getPlayerAssistant().refreshSkill(3);
}
}
}
@@ -0,0 +1,474 @@
package com.rs2.game.content.consumables;
import com.rs2.event.CycleEvent;
import com.rs2.event.CycleEventContainer;
import com.rs2.event.CycleEventHandler;
import com.rs2.game.items.ItemData;
import com.rs2.game.items.ItemAssistant;
import com.rs2.game.players.Player;
public class Potions {
private final Player c;
public Potions(Player player) {
this.c = player;
}
public void handlePotion(int itemId, int slot) {
if (c.duelRule[5]) {
c.getPacketSender().sendMessage(
"You may not drink potions in this duel.");
return;
}
if (c.isDead || c.playerLevel[3] <= 0) {
return;
}
if (System.currentTimeMillis() - c.potDelay >= 1200) {
c.potDelay = System.currentTimeMillis();
c.foodDelay = System.currentTimeMillis();
c.getCombatAssistant().resetPlayerAttack();
c.attackTimer++;
c.getPacketSender().sendMessage(
"You drink some of your " + ItemData.getItemName(itemId) + ".");
c.startAnimation(829);
final String item = ItemData.getItemName(itemId);
String m = "";
if (item.endsWith("(4)")) {
m = "You have 3 doses of potion left.";
} else if (item.endsWith("(3)")) {
m = "You have 2 doses of potion left.";
} else if (item.endsWith("(2)")) {
m = "You have 1 dose of potion left.";
} else if (item.endsWith("(1)")) {
m = "You have finished your potion.";
}
final String m1 = m;
CycleEventHandler.getSingleton().addEvent(c, new CycleEvent() {
@Override
public void execute(CycleEventContainer container) {
c.getPacketSender().sendSound(1210, 100, 0);
c.getPacketSender().sendMessage(m1);
container.stop();
}
@Override
public void stop() {
}
}, 1);
switch (itemId) {
case 3040:
drinkStatPotion(itemId, 3042, slot, 6, false);
break;
case 3042:
drinkStatPotion(itemId, 3044, slot, 6, false);
break;
case 3044:
drinkStatPotion(itemId, 3046, slot, 6, false);
break;
case 3046:
drinkStatPotion(itemId, 229, slot, 6, false);
break;
case 2450:
doTheBrewzam(itemId, 189, slot);
break;
case 189:
doTheBrewzam(itemId, 191, slot);
break;
case 191:
doTheBrewzam(itemId, 193, slot);
break;
case 193:
doTheBrewzam(itemId, 229, slot);
break;
case 6685: // brews
doTheBrew(itemId, 6687, slot);
break;
case 6687:
doTheBrew(itemId, 6689, slot);
break;
case 6689:
doTheBrew(itemId, 6691, slot);
break;
case 6691:
doTheBrew(itemId, 229, slot);
break;
case 2436:
drinkStatPotion(itemId, 145, slot, 0, true); // sup attack
break;
case 145:
drinkStatPotion(itemId, 147, slot, 0, true);
break;
case 147:
drinkStatPotion(itemId, 149, slot, 0, true);
break;
case 149:
drinkStatPotion(itemId, 229, slot, 0, true);
break;
case 2440:
drinkStatPotion(itemId, 157, slot, 2, true); // sup str
break;
case 157:
drinkStatPotion(itemId, 159, slot, 2, true);
break;
case 159:
drinkStatPotion(itemId, 161, slot, 2, true);
break;
case 161:
drinkStatPotion(itemId, 229, slot, 2, true);
break;
case 2444:
drinkStatPotion(itemId, 169, slot, 4, false); // range pot
break;
case 169:
drinkStatPotion(itemId, 171, slot, 4, false);
break;
case 171:
drinkStatPotion(itemId, 173, slot, 4, false);
break;
case 173:
drinkStatPotion(itemId, 229, slot, 4, false);
break;
case 2432:
drinkStatPotion(itemId, 133, slot, 1, false); // def pot
break;
case 133:
drinkStatPotion(itemId, 135, slot, 1, false);
break;
case 135:
drinkStatPotion(itemId, 137, slot, 1, false);
break;
case 137:
drinkStatPotion(itemId, 229, slot, 1, false);
break;
case 113:
drinkStatPotion(itemId, 115, slot, 2, false); // str pot
break;
case 115:
drinkStatPotion(itemId, 117, slot, 2, false);
break;
case 117:
drinkStatPotion(itemId, 119, slot, 2, false);
break;
case 119:
drinkStatPotion(itemId, 229, slot, 2, false);
break;
case 2428:
drinkStatPotion(itemId, 121, slot, 0, false); // attack
// pot
break;
case 121:
drinkStatPotion(itemId, 123, slot, 0, false);
break;
case 123:
drinkStatPotion(itemId, 125, slot, 0, false);
break;
case 125:
drinkStatPotion(itemId, 229, slot, 0, false);
break;
case 2442:
drinkStatPotion(itemId, 163, slot, 1, true); // super def
// pot
break;
case 163:
drinkStatPotion(itemId, 165, slot, 1, true);
break;
case 165:
drinkStatPotion(itemId, 167, slot, 1, true);
break;
case 167:
drinkStatPotion(itemId, 229, slot, 1, true);
break;
case 3024:
drinkPrayerPot(itemId, 3026, slot, true); // sup restore
break;
case 3026:
drinkPrayerPot(itemId, 3028, slot, true);
break;
case 3028:
drinkPrayerPot(itemId, 3030, slot, true);
break;
case 3030:
drinkPrayerPot(itemId, 229, slot, true);
break;
case 10925:
drinkPrayerPot(itemId, 10927, slot, true); // sanfew
// serums
curePoison(300000);
break;
case 10927:
drinkPrayerPot(itemId, 10929, slot, true);
curePoison(300000);
break;
case 10929:
drinkPrayerPot(itemId, 10931, slot, true);
curePoison(300000);
break;
case 10931:
drinkPrayerPot(itemId, 229, slot, true);
curePoison(300000);
break;
case 2434:
drinkPrayerPot(itemId, 139, slot, false); // pray pot
break;
case 139:
drinkPrayerPot(itemId, 141, slot, false);
break;
case 141:
drinkPrayerPot(itemId, 143, slot, false);
break;
case 143:
drinkPrayerPot(itemId, 229, slot, false);
break;
case 2446:
drinkAntiPoison(itemId, 175, slot, 30000); // anti poisons
break;
case 175:
drinkAntiPoison(itemId, 177, slot, 30000);
break;
case 177:
drinkAntiPoison(itemId, 179, slot, 30000);
break;
case 179:
drinkAntiPoison(itemId, 229, slot, 30000);
break;
case 2448:
drinkAntiPoison(itemId, 181, slot, 300000); // anti
// poisons
break;
case 181:
drinkAntiPoison(itemId, 183, slot, 300000);
break;
case 183:
drinkAntiPoison(itemId, 185, slot, 300000);
break;
case 185:
drinkAntiPoison(itemId, 229, slot, 300000);
break;
/** Energy Potions **/
case 3008:
energyPotion(itemId, 3010, slot);
break;
case 3010:
energyPotion(itemId, 3012, slot);
break;
case 3012:
energyPotion(itemId, 3014, slot);
break;
case 3014:
energyPotion(itemId, 229, slot);
break;
/** Super Energy Potions **/
case 3016:
energyPotion(itemId, 3018, slot);
break;
case 3018:
energyPotion(itemId, 3020, slot);
break;
case 3020:
energyPotion(itemId, 3022, slot);
break;
case 3022:
energyPotion(itemId, 229, slot);
break;
case 2452:
antifirePot(itemId, 2454, slot);
break;
case 2454:
antifirePot(itemId, 2456, slot);
break;
case 2456:
antifirePot(itemId, 2458, slot);
break;
case 2458:
antifirePot(itemId, 229, slot);
break;
}
}
}
private void energyPotion(int itemId, int replaceItem, int slot) {
c.playerItems[slot] = replaceItem + 1;
c.getItemAssistant().resetItems(3214);
if (itemId >= 3008 && itemId <= 3014) {
c.playerEnergy += 20;
} else {
c.playerEnergy += 40;
}
if (c.playerEnergy > 100) {
c.playerEnergy = 100;
}
c.getPacketSender().sendString((int) Math.ceil(c.playerEnergy) + "%", 149);
}
public void drinkAntiPoison(int itemId, int replaceItem, int slot,
long delay) {
// c.startAnimation(829);
c.playerItems[slot] = replaceItem + 1;
c.getItemAssistant().resetItems(3214);
curePoison(delay);
}
public void curePoison(long delay) {
c.poisonDamage = 0;
c.poisonImmune = delay;
c.lastPoisonSip = System.currentTimeMillis();
}
public void drinkStatPotion(int itemId, int replaceItem, int slot,
int stat, boolean sup) {
// c.startAnimation(829);
c.playerItems[slot] = replaceItem + 1;
c.getItemAssistant().resetItems(3214);
enchanceStat(stat, sup);
}
public void drinkPrayerPot(int itemId, int replaceItem, int slot,
boolean rest) {
// c.startAnimation(829);
c.playerItems[slot] = replaceItem + 1;
c.getItemAssistant().resetItems(3214);
c.playerLevel[5] += c.getLevelForXP(c.playerXP[5]) * .33;
if (rest) {
c.playerLevel[5] += 1;
}
if (c.playerLevel[5] > c.getLevelForXP(c.playerXP[5])) {
c.playerLevel[5] = c.getLevelForXP(c.playerXP[5]);
}
c.getPlayerAssistant().refreshSkill(5);
if (rest) {
restoreStats();
}
}
public void restoreStats() {
for (int j = 0; j <= 6; j++) {
if (j == 5 || j == 3) {
continue;
}
if (c.playerLevel[j] < c.getLevelForXP(c.playerXP[j])) {
c.playerLevel[j] += c.getLevelForXP(c.playerXP[j]) * .33;
if (c.playerLevel[j] > c.getLevelForXP(c.playerXP[j])) {
c.playerLevel[j] = c.getLevelForXP(c.playerXP[j]);
}
c.getPlayerAssistant().refreshSkill(j);
c.getPacketSender().setSkillLevel(j, c.playerLevel[j],
c.playerXP[j]);
}
}
}
public void doTheBrewzam(int itemId, int replaceItem, int slot) {
// c.startAnimation(829);
c.playerItems[slot] = replaceItem + 1;
c.getItemAssistant().resetItems(3214);
int[] toDecrease = { 1, 3 };
for (int tD : toDecrease) {
c.playerLevel[tD] -= getBrewStat(tD, .10);
if (c.playerLevel[tD] < 0) {
c.playerLevel[tD] = 1;
}
c.getPlayerAssistant().refreshSkill(tD);
c.getPacketSender().setSkillLevel(tD, c.playerLevel[tD],
c.playerXP[tD]);
}
c.playerLevel[0] += getBrewStat(0, .20);
if (c.playerLevel[0] > c.getLevelForXP(c.playerXP[0]) * 1.2 + 1) {
c.playerLevel[0] = (int) (c.getLevelForXP(c.playerXP[0]) * 1.2);
}
c.playerLevel[2] += getBrewStat(2, .12);
if (c.playerLevel[2] > c.getLevelForXP(c.playerXP[2]) * 1.2 + 1) {
c.playerLevel[2] = (int) (c.getLevelForXP(c.playerXP[2]) * 1.2);
}
c.playerLevel[5] += getBrewStat(5, .10);
if (c.playerLevel[5] > c.getLevelForXP(c.playerXP[5]) * 1.2 + 1) {
c.playerLevel[5] = (int) (c.getLevelForXP(c.playerXP[5]) * 1.2);
}
c.getPlayerAssistant().refreshSkill(0);
c.getPlayerAssistant().refreshSkill(2);
c.getPlayerAssistant().refreshSkill(5);
c.hitUpdateRequired = true;
c.hitDiff = 9;
}
public void doTheBrew(int itemId, int replaceItem, int slot) {
if (c.duelRule[6]) {
c.getPacketSender()
.sendMessage("You may not eat in this duel.");
return;
}
// c.startAnimation(829);
c.playerItems[slot] = replaceItem + 1;
c.getItemAssistant().resetItems(3214);
int[] toDecrease = { 0, 2, 4, 6 };
for (int tD : toDecrease) {
c.playerLevel[tD] -= getBrewStat(tD, .10);
if (c.playerLevel[tD] < 0) {
c.playerLevel[tD] = 1;
}
c.getPlayerAssistant().refreshSkill(tD);
c.getPacketSender().setSkillLevel(tD, c.playerLevel[tD],
c.playerXP[tD]);
}
c.playerLevel[1] += getBrewStat(1, .20);
if (c.playerLevel[1] > c.getLevelForXP(c.playerXP[1]) * 1.2 + 1) {
c.playerLevel[1] = (int) (c.getLevelForXP(c.playerXP[1]) * 1.2);
}
c.getPlayerAssistant().refreshSkill(1);
c.playerLevel[3] += getBrewStat(3, .15);
if (c.playerLevel[3] > c.getLevelForXP(c.playerXP[3]) * 1.17 + 1) {
c.playerLevel[3] = (int) (c.getLevelForXP(c.playerXP[3]) * 1.17);
}
c.getPlayerAssistant().refreshSkill(3);
}
public void enchanceStat(int skillID, boolean sup) {
c.playerLevel[skillID] += getBoostedStat(skillID, sup);
c.getPlayerAssistant().refreshSkill(skillID);
}
public void antifirePot(int itemId, int replaceItem, int slot) {
c.startAnimation(829);
c.playerItems[slot] = replaceItem + 1;
c.antiFirePot = true;
c.antiFirePotion();
c.getPacketSender().sendMessage(
"Your immunity against dragon fire has been increased.");
c.getItemAssistant().resetItems(3214);
}
public int getBrewStat(int skill, double amount) {
return (int) (c.getLevelForXP(c.playerXP[skill]) * amount);
}
public int getBoostedStat(int skill, boolean sup) {
int increaseBy;
if (sup) {
increaseBy = (int) (c.getLevelForXP(c.playerXP[skill]) * .20);
} else {
increaseBy = (int) (c.getLevelForXP(c.playerXP[skill]) * .13) + 1;
}
if (c.playerLevel[skill] + increaseBy > c
.getLevelForXP(c.playerXP[skill]) + increaseBy + 1) {
return c.getLevelForXP(c.playerXP[skill]) + increaseBy
- c.playerLevel[skill];
}
return increaseBy;
}
public boolean isPotion(int itemId) {
String name = ItemAssistant.getItemName(itemId);
return name.contains("(4)") || name.contains("(3)")
|| name.contains("(2)") || name.contains("(1)");
}
public boolean potionNames(int itemId) {
String name = ItemAssistant.getItemName(itemId);
return name.endsWith("potion(4)") || name.endsWith("potion(3)")
|| name.endsWith("potion(2)") || name.endsWith("potion(1)")
|| name.contains("saradomin brew")
|| name.contains("zamorak brew");
}
}
@@ -0,0 +1,186 @@
package com.rs2.game.content.guilds;
import com.rs2.GameConstants;
import com.rs2.game.content.quests.QuestAssistant;
import com.rs2.game.globalworldobjects.PassDoor;
import com.rs2.game.objects.impl.Climbing;
import com.rs2.game.objects.impl.UseOther;
import com.rs2.game.players.Player;
/**
* Guilds Class
* @author Andrew (I'm A Boss on Rune-Server, Mr Extremez on Moparscape & Runelocus)
*/
public class Guilds {
private static boolean hasCompletedLegends = false;
public static void attemptGuild(Player player, int objectId) {
if (!GameConstants.GUILDS) {
player.getPacketSender().sendMessage("Guilds are currently disabled.");
return;
}
if (checkRequirements(player, objectId)) {
player.getPacketSender().sendMessage("You pass through the guild.");
movePlayer(player, objectId);
}
}
public static void movePlayer(Player player, int objectId) {
switch (objectId) {
case 2514: // Range Guild
if (player.absX == 2659 && player.absY == 3438) {
PassDoor.passThroughDoor(player, objectId, 1, 2, 9, -1, 1, 0);
} else if (player.absX == 2658 && player.absY == 3437) {
PassDoor.passThroughDoor(player, objectId, 1, 2, 9, -1, 1, 0);
} else if (player.absX == 2658 && player.absY == 3439) {
PassDoor.passThroughDoor(player, objectId, 1, 2, 9, 1, -1, 0);
} else if (player.absX == 2657 && player.absY == 3438) {
PassDoor.passThroughDoor(player, objectId, 1, 2, 9, 1, -1, 0);
}
break;
case 1805: // Champions Guild
if (player.absY == 3362 && player.absX != 3192 && player.absX != 3190) {
player.getPlayerAssistant().movePlayer(player.absX, player.absY + 1, 0);
} else if (player.absY == 3363 && player.absX != 3192 && player.absX != 3190) {
player.getPlayerAssistant().movePlayer(player.absX, player.absY - 1, 0);
}
break;
case 2641: // Monastery
if (player.heightLevel == 0) {
Climbing.climbUp(player);
} else if (player.heightLevel == 1) {
Climbing.climbDown(player);
}
break;
case 2712: // Cooks Guild
if (player.absY == 3443) {
player.getPlayerAssistant().movePlayer(player.absX, player.absY + 1, 0);
} else if (player.absY == 3444) {
player.getPlayerAssistant().movePlayer(player.absX, player.absY - 1, 0);
}
break;
case 2647: // Crafting Guild
if (player.absY == 3289) {
player.getPlayerAssistant().movePlayer(player.absX, player.absY - 1, 0);
} else if (player.absY == 3288) {
player.getPlayerAssistant().movePlayer(player.absX, player.absY + 1, 0);
}
break;
case 2113: // Mining Guild
UseOther.useDown(player, objectId);
break;
case 1755: // Mining Guild
UseOther.useUp(player, objectId);
break;
case 2025: // Fishing Guild
if (player.absY == 3393) {
player.getPlayerAssistant().movePlayer(player.absX, player.absY + 1, 0);
} else if (player.absY == 3394) {
player.getPlayerAssistant().movePlayer(player.absX, player.absY - 1, 0);
}
break;
case 1600: // Wizards Guild
case 1601:
if (player.absX == 2597) {
player.getPlayerAssistant().movePlayer(player.absX - 1, player.absY, 0);
} else if (player.absX == 2596) {
player.getPlayerAssistant().movePlayer(player.absX + 1, player.absY, 0);
}
break;
case 2624: // Heroes Guild
case 2625:
if (player.absX == 2902) {
player.getPlayerAssistant().movePlayer(player.absX - 1, player.absY, 0);
} else if (player.absX == 2901) {
player.getPlayerAssistant().movePlayer(player.absX + 1, player.absY, 0);
}
break;
case 2392: // Legends Guild
case 2391:
if (player.absY == 3349) {
player.getPlayerAssistant().movePlayer(player.absX, player.absY + 1, 0);
} else if (player.absY == 3350) {
player.getPlayerAssistant().movePlayer(player.absX, player.absY - 1, 0);
}
break;
default:
player.getPacketSender().sendMessage(
"You can't access this guild from here.");
break;
}
}
public static boolean checkRequirements(Player player, int objectId) {
switch (objectId) {
case 1805: // Champions Guild
int requiredQP = Math.min(32, QuestAssistant.MAXIMUM_QUESTPOINTS);
if (player.questPoints < requiredQP) {
player.getDialogueHandler().sendStatement("You need " + requiredQP + " quest points to enter this guild!");
player.nextChat = 0;
return false;
}
break;
case 2392:
case 2391:
if (hasCompletedLegends == false && player.playerRights < 3) {
player.getDialogueHandler().sendStatement("You need to complete Legends Quest to enter this guild!");
player.nextChat = 0;
return false;
}
break;
case 2641: // Prayer Guild
if (player.getPlayerAssistant().getLevelForXP(player.playerXP[5]) < 31) {
player.getDialogueHandler().sendStatement("You need 31 prayer to enter this guild!");
player.nextChat = 0;
return false;
}
break;
case 2712: // Cooking Guild
if (player.playerLevel[player.playerCooking] < 32 || player.playerEquipment[player.playerHat] != 1949) {
player.getDialogueHandler().sendStatement("You need 32 cooking and a chefs hat to enter this guild!");
player.nextChat = 0;
return false;
}
break;
case 2647: // Crafting Guild
if (player.playerLevel[player.playerCrafting] < 40 || player.playerEquipment[player.playerChest] != 1757) {
player.getDialogueHandler().sendStatement("You need 40 Crafting and a Brown Apron to enter this guild!");
player.nextChat = 0;
return false;
}
break;
case 2113: // Mining Guild
if (player.playerLevel[player.playerMining] < 60) {
player.getDialogueHandler().sendStatement("You need 60 Mining to enter this guild!");
player.nextChat = 0;
return false;
}
break;
case 2025: // Fishing Guild
if (player.playerLevel[player.playerFishing] < 68) {
player.getDialogueHandler().sendStatement("You need 68 Fishing to enter this guild!");
player.nextChat = 0;
return false;
}
break;
case 1600:
case 1601: // Wizards Guild
if (player.playerLevel[player.playerMagic] < 66) {
player.getDialogueHandler().sendStatement("You need 66 Magic to enter this guild!");
player.nextChat = 0;
return false;
}
break;
case 2514:
if (player.playerLevel[player.playerRanged] < 40) { // Ranging Guild
player.getDialogueHandler().sendStatement("You need 40 Range to enter this guild!");
player.nextChat = 0;
return false;
}
break;
}
return true;
}
}
@@ -0,0 +1,361 @@
package com.rs2.game.content.guilds.impl;
import com.rs2.event.CycleEvent;
import com.rs2.event.CycleEventContainer;
import com.rs2.event.CycleEventHandler;
import com.rs2.game.content.combat.range.RangeData;
import com.rs2.game.players.Player;
import com.rs2.util.Misc;
/**
* Rangers Guild
* @author Aintaro
* @edit Haile N.
*/
public class RangersGuild {
public final int
ARROWS_REQ = 882,
HIT_CHANCE = 55,
RANGED_LV = 4;
public final String
MISSED = "Missed!",
BLACK = "Hit Black!",
YELLOW = "Hit Yellow!",
BLUE = "Hit Blue!",
RED = "Hit Red!",
BULLSEYE = "Bulls-Eye";
public int
arrowsLeft = 0,
playerScore = 0,
hitChance;
public boolean isFiringTarget;
private Player c;
public RangersGuild(Player player) {
this.c = player;
}
public void fireAtTarget() {
if(isFiringTarget) {
return;
}
hitChance = Misc.random(HIT_CHANCE)+Misc.random(c.playerLevel[RANGED_LV]);
if (arrowsLeft != 0) {
for (int bowId : RangeData.BOWS) {
if(c.playerEquipment[c.playerWeapon] == bowId) {
c.usingBow = true;
if (c.playerEquipment[c.playerArrows] == ARROWS_REQ && c.usingBow) {
if (isInTargetArea()) {
if (hitChance >= 10) {
c.getPacketSender().closeAllWindows();
c.startAnimation(426);
isFiringTarget = true;
//c.getPlayerAction().setAction(true);
//c.getPlayerAction().canWalk(false);
CycleEventHandler.getSingleton().addEvent(c, new CycleEvent() {
@Override
public void execute(CycleEventContainer container) {
if (hitChance >= 10 && hitChance <= 20) {
playerScore += 10;
sendConfiguration(80 + Misc.random(10), -60 + Misc.random(90));
c.getPacketSender().sendString(BLACK, 567);
c.getPlayerAssistant().addSkillXP(5, 4);
c.getItemAssistant().deleteArrow();
//c.getPlayerAction().setAction(false);
//c.getPlayerAction().canWalk(true);
} else if (hitChance >= 20 && hitChance < 30) {
playerScore += 20;
sendConfiguration(-70 + Misc.random(10),10 - Misc.random(40));
c.getPacketSender().sendString(BLUE,567);
c.getPlayerAssistant().addSkillXP(10, 4);
c.getItemAssistant().deleteArrow();
//c.getPlayerAction().setAction(false);
//c.getPlayerAction().canWalk(true);
} else if (hitChance >= 30 && hitChance < 50) {
playerScore += 30;
sendConfiguration(-30 - Misc.random(15),10 - Misc.random(25));
c.getPacketSender().sendString(RED, 567);
c.getPlayerAssistant().addSkillXP(15, 4);
c.getItemAssistant().deleteArrow();
//c.getPlayerAction().setAction(false);
//c.getPlayerAction().canWalk(true);
} else if (hitChance >= 50 && hitChance < 75) {
playerScore += 50;
sendConfiguration(5 - Misc.random(20),0 - Misc.random(20));
c.getPacketSender().sendString(YELLOW, 567);
c.getPlayerAssistant().addSkillXP(15, 4);
c.getItemAssistant().deleteArrow();
//c.getPlayerAction().setAction(false);
//c.getPlayerAction().canWalk(true);
} else if (hitChance >= 75) {
playerScore += 100;
sendConfiguration(0, 0);
c.getPacketSender().sendString(BULLSEYE, 567);
c.getPlayerAssistant().addSkillXP(50, 4);
c.getItemAssistant().deleteArrow();
//c.getPlayerAction().setAction(false);
//c.getPlayerAction().canWalk(true);
} else {
c.getPacketSender().sendString(MISSED, 567);
sendConfiguration(1200, 1200);
c.getItemAssistant().deleteArrow();
//c.getPlayerAction().setAction(false);
//c.getPlayerAction().canWalk(true);
}
container.stop();
}
@Override
public void stop() {
isFiringTarget = false;
}
}, 3);
}
} else {
c.getDialogueHandler().sendStatement("You can't shoot from here.");
}
} else {
c.getDialogueHandler().sendStatement("You need some bronze arrows and a bow to shoot the target.");
c.nextChat = 0;
}}}
} else {
c.getDialogueHandler().sendStatement("You should talk to the competition judge.");
c.nextChat = 0;
}
}
private void sendConfiguration(int xPos, int yPos) {
switch (arrowsLeft) {
case 1:
arrowsLeft--;
c.getPacketSender().sendFrame70(1200, 1200, 538);
c.getPacketSender().sendFrame70(1200, 1200, 557);
c.getPacketSender().sendFrame70(1200, 1200, 559);
c.getPacketSender().sendFrame70(1200, 1200, 560);
c.getPacketSender().sendFrame70(1200, 1200, 561);
c.getPacketSender().sendFrame70(1200, 1200, 562);
c.getPacketSender().sendFrame70(1200, 1200, 563);
c.getPacketSender().sendFrame70(1200, 1200, 564);
c.getPacketSender().sendFrame70(1200, 1200, 565);
c.getPacketSender().sendFrame70(1200, 1200, 566);
c.getPacketSender().sendString("" + playerScore, 551);
c.getPacketSender().sendFrame70(xPos, yPos, 536);
c.getPacketSender().showInterface(446);
break;
case 2:
arrowsLeft--;
c.getPacketSender().sendFrame70(0, 0, 538);
c.getPacketSender().sendFrame70(1200, 1200, 557);
c.getPacketSender().sendFrame70(1200, 1200, 559);
c.getPacketSender().sendFrame70(1200, 1200, 560);
c.getPacketSender().sendFrame70(1200, 1200, 561);
c.getPacketSender().sendFrame70(1200, 1200, 562);
c.getPacketSender().sendFrame70(1200, 1200, 563);
c.getPacketSender().sendFrame70(1200, 1200, 564);
c.getPacketSender().sendFrame70(1200, 1200, 565);
c.getPacketSender().sendFrame70(1200, 1200, 566);
c.getPacketSender().sendString("" + playerScore, 551);
c.getPacketSender().sendFrame70(xPos, yPos, 536);
c.getPacketSender().showInterface(446);
break;
case 3:
arrowsLeft--;
c.getPacketSender().sendFrame70(0, 0, 538);
c.getPacketSender().sendFrame70(0, 0, 557);
c.getPacketSender().sendFrame70(1200, 1200, 559);
c.getPacketSender().sendFrame70(1200, 1200, 560);
c.getPacketSender().sendFrame70(1200, 1200, 561);
c.getPacketSender().sendFrame70(1200, 1200, 562);
c.getPacketSender().sendFrame70(1200, 1200, 563);
c.getPacketSender().sendFrame70(1200, 1200, 564);
c.getPacketSender().sendFrame70(1200, 1200, 565);
c.getPacketSender().sendFrame70(1200, 1200, 566);
c.getPacketSender().sendString("" + playerScore, 551);
c.getPacketSender().sendFrame70(xPos, yPos, 536);
c.getPacketSender().showInterface(446);
break;
case 4:
arrowsLeft--;
c.getPacketSender().sendFrame70(0, 0, 538);
c.getPacketSender().sendFrame70(0, 0, 557);
c.getPacketSender().sendFrame70(0, 0, 559);
c.getPacketSender().sendFrame70(1200, 1200, 560);
c.getPacketSender().sendFrame70(1200, 1200, 561);
c.getPacketSender().sendFrame70(1200, 1200, 562);
c.getPacketSender().sendFrame70(1200, 1200, 563);
c.getPacketSender().sendFrame70(1200, 1200, 564);
c.getPacketSender().sendFrame70(1200, 1200, 565);
c.getPacketSender().sendFrame70(1200, 1200, 566);
c.getPacketSender().sendString("" + playerScore, 551);
c.getPacketSender().sendFrame70(xPos, yPos, 536);
c.getPacketSender().showInterface(446);
break;
case 5:
arrowsLeft--;
c.getPacketSender().sendFrame70(0, 0, 538);
c.getPacketSender().sendFrame70(0, 0, 557);
c.getPacketSender().sendFrame70(0, 0, 559);
c.getPacketSender().sendFrame70(0, 0, 560);
c.getPacketSender().sendFrame70(1200, 1200, 561);
c.getPacketSender().sendFrame70(1200, 1200, 562);
c.getPacketSender().sendFrame70(1200, 1200, 563);
c.getPacketSender().sendFrame70(1200, 1200, 564);
c.getPacketSender().sendFrame70(1200, 1200, 565);
c.getPacketSender().sendFrame70(1200, 1200, 566);
c.getPacketSender().sendString("" + playerScore, 551);
c.getPacketSender().sendFrame70(xPos, yPos, 536);
c.getPacketSender().showInterface(446);
break;
case 6:
arrowsLeft--;
c.getPacketSender().sendFrame70(0, 0, 538);
c.getPacketSender().sendFrame70(0, 0, 557);
c.getPacketSender().sendFrame70(0, 0, 559);
c.getPacketSender().sendFrame70(0, 0, 560);
c.getPacketSender().sendFrame70(0, 0, 561);
c.getPacketSender().sendFrame70(1200, 1200, 562);
c.getPacketSender().sendFrame70(1200, 1200, 563);
c.getPacketSender().sendFrame70(1200, 1200, 564);
c.getPacketSender().sendFrame70(1200, 1200, 565);
c.getPacketSender().sendFrame70(1200, 1200, 566);
c.getPacketSender().sendString("" + playerScore, 551);
c.getPacketSender().sendFrame70(xPos, yPos, 536);
c.getPacketSender().showInterface(446);
break;
case 7:
arrowsLeft--;
c.getPacketSender().sendFrame70(0, 0, 538);
c.getPacketSender().sendFrame70(0, 0, 557);
c.getPacketSender().sendFrame70(0, 0, 559);
c.getPacketSender().sendFrame70(0, 0, 560);
c.getPacketSender().sendFrame70(0, 0, 561);
c.getPacketSender().sendFrame70(0, 0, 562);
c.getPacketSender().sendFrame70(1200, 1200, 563);
c.getPacketSender().sendFrame70(1200, 1200, 564);
c.getPacketSender().sendFrame70(1200, 1200, 565);
c.getPacketSender().sendFrame70(1200, 1200, 566);
c.getPacketSender().sendString("" + playerScore, 551);
c.getPacketSender().sendFrame70(xPos, yPos, 536);
c.getPacketSender().showInterface(446);
break;
case 8:
arrowsLeft--;
c.getPacketSender().sendFrame70(0, 0, 538);
c.getPacketSender().sendFrame70(0, 0, 557);
c.getPacketSender().sendFrame70(0, 0, 559);
c.getPacketSender().sendFrame70(0, 0, 560);
c.getPacketSender().sendFrame70(0, 0, 561);
c.getPacketSender().sendFrame70(0, 0, 562);
c.getPacketSender().sendFrame70(0, 0, 563);
c.getPacketSender().sendFrame70(1200, 1200, 564);
c.getPacketSender().sendFrame70(1200, 1200, 565);
c.getPacketSender().sendFrame70(1200, 1200, 566);
c.getPacketSender().sendString("" + playerScore, 551);
c.getPacketSender().sendFrame70(xPos, yPos, 536);
c.getPacketSender().showInterface(446);
break;
case 9:
arrowsLeft--;
c.getPacketSender().sendFrame70(0, 0, 538);
c.getPacketSender().sendFrame70(0, 0, 557);
c.getPacketSender().sendFrame70(0, 0, 559);
c.getPacketSender().sendFrame70(0, 0, 560);
c.getPacketSender().sendFrame70(0, 0, 561);
c.getPacketSender().sendFrame70(0, 0, 562);
c.getPacketSender().sendFrame70(0, 0, 563);
c.getPacketSender().sendFrame70(0, 0, 564);
c.getPacketSender().sendFrame70(1200, 1200, 565);
c.getPacketSender().sendFrame70(1200, 1200, 566);
c.getPacketSender().sendString("" + playerScore, 551);
c.getPacketSender().sendFrame70(xPos, yPos, 536);
c.getPacketSender().showInterface(446);
break;
case 10:
arrowsLeft--;
c.getPacketSender().sendFrame70(0, 0, 538);
c.getPacketSender().sendFrame70(0, 0, 557);
c.getPacketSender().sendFrame70(0, 0, 559);
c.getPacketSender().sendFrame70(0, 0, 560);
c.getPacketSender().sendFrame70(0, 0, 561);
c.getPacketSender().sendFrame70(0, 0, 562);
c.getPacketSender().sendFrame70(0, 0, 563);
c.getPacketSender().sendFrame70(0, 0, 564);
c.getPacketSender().sendFrame70(0, 0, 565);
c.getPacketSender().sendString("" + playerScore, 551);
c.getPacketSender().sendFrame70(xPos, yPos, 536);
c.getPacketSender().showInterface(446);
break;
}
}
public boolean isInTargetArea() {
if (c.absX >= 2669 && c.absX <= 2674 && c.absY >= 3415 && c.absY <= 3421) {
return true;
}
return false;
}
public void exchangePoints() {
if (arrowsLeft == 0 && playerScore > 0) {
if(c.getItemAssistant().freeSlots() > 0) {
int ticketsAmt = playerScore / 10;
c.getItemAssistant().addItem(1464, ticketsAmt);
c.getDialogueHandler().sendNpcChat2("Well done. Your score is : " + playerScore + ".", "You have earned " + ticketsAmt + " Archery tickets.", c.talkingNpc, "Tutor");
playerScore = 0;
c.nextChat = 0;
} else {
c.getDialogueHandler().sendStatement("You need 1 free slot to exchange tickets.");
c.nextChat = 0;
}
} else {
c.getDialogueHandler().sendStatement("You still have " + arrowsLeft + " shots left.");
c.nextChat = 0;
}
}
public void howAmIDoing() {
if (playerScore == 0) {
c.getDialogueHandler().sendNpcChat2("You haven't started yet. Stand behind the hay bales and", "shoot those arrows at the targets.", c.talkingNpc, "Tutor");
c.nextChat = 0;
} else {
c.getDialogueHandler().sendNpcChat2("Your score is : " + playerScore, "Your doing very well!", c.talkingNpc, "Tutor");
c.nextChat = 0;
}
}
public void buyArrows() {
if (arrowsLeft == 0) {
if (c.getItemAssistant().playerHasItem(995, 200)) {
if (c.getItemAssistant().freeSlots() > 1) {
arrowsLeft = 10;
c.getItemAssistant().deleteItem(995, 200);
c.getItemAssistant().addItem(ARROWS_REQ, 10);
c.getItemAssistant().addItem(841, 1);
c.getDialogueHandler().sendStatement("The archer hands you 10 bronze arrows and a bow.");
c.nextChat = 0;
} else {
c.getDialogueHandler().sendStatement("You need 2 free slots to receive arrows and a bow.");
}
} else {
c.getDialogueHandler().sendStatement("You need at least 200 gp to buy 10 arrows and a bow.");
c.nextChat = 0;
}
} else {
c.getDialogueHandler().sendStatement("You still have " + arrowsLeft + " shots left.");
c.nextChat = 0;
}
}
}
@@ -0,0 +1,284 @@
package com.rs2.game.content.minigames;
import com.rs2.game.content.quests.QuestRewards;
import com.rs2.game.npcs.NpcHandler;
import com.rs2.game.players.Player;
import com.rs2.util.Misc;
import com.rs2.world.Boundary;
public class Barrows {
public Barrows(Player player) {
this.c = player;
}
private Player c;
/**
* Variables used for reward.
*/
public static int Barrows[] = {4708, 4710, 4712, 4714, 4716, 4718, 4720, 4722, 4724, 4726, 4728, 4730, 4732, 4734, 4736, 4738, 4745, 4747, 4749, 4751, 4753, 4755, 4757, 4759};
public static int Runes[] = {554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565};
public static int Pots[] = {121, 123, 125, 127, 119, 2428, 2430, 2434, 2432, 2444};
/**
* Getting random barrow pieces.
* @return
*/
public int randomBarrows() {
return Barrows[(int)(Math.random()*Barrows.length)];
}
/**
* Getting random runes.
* @return
*/
public int randomRunes() {
return Runes[(int) (Math.random()*Runes.length)];
}
/**
* Getting random pots.
* @return
*/
public int randomPots() {
return Pots[(int) (Math.random()*Pots.length)];
}
/**
* All of the barrow data.
*/
public static int[][] barrowData = {
/** ID Coffin X Y Stair X Y */
{2026, 6771, 3556, 9716, 6703, 3574, 3297}, /**Dharoks*/
{2030, 6823, 3575, 9706, 6707, 3557, 3297}, /**Veracs*/
{2025, 6821, 3557, 9700, 6702, 3565, 3288}, /**Ahrims*/
{2029, 6772, 3568, 9685, 6706, 3554, 3282}, /**Torags*/
{2027, 6773, 3537, 9703, 6704, 3577, 3282}, /**Guthans*/
{2028, 6822, 3549, 9682, 6705, 3566, 3275} /**Karils*/
};
/**
* All of the spade data
*/
public int[][] spadeData = {
/** X Y X1 Y1 toX toY */
{3553, 3301, 3561, 3294, 3578, 9706},
{3550, 3287, 3557, 3278, 3568, 9683},
{3561, 3292, 3568, 3285, 3557, 9703},
{3570, 3302, 3579, 3293, 3556, 9718},
{3571, 3285, 3582, 3278, 3534, 9704},
{3562, 3279, 3569, 3273, 3546, 9684},
};
/**
* Spade digging data
*/
public void spadeDigging() {
c.getPacketSender().sendSound(380, 100, 0);
c.startAnimation(830);
if(c.inArea(spadeData[0][0], spadeData[0][1], spadeData[0][2], spadeData[0][3])) {
c.getPlayerAssistant().movePlayer(spadeData[0][4], spadeData[0][5], 3);
} else if(c.inArea(spadeData[1][0], spadeData[1][1], spadeData[1][2], spadeData[1][3])) {
c.getPlayerAssistant().movePlayer(spadeData[1][4], spadeData[1][5], 3);
} else if(c.inArea(spadeData[2][0], spadeData[2][1], spadeData[2][2], spadeData[2][3])) {
c.getPlayerAssistant().movePlayer(spadeData[2][4], spadeData[2][5], 3);
} else if(c.inArea(spadeData[3][0], spadeData[3][1], spadeData[3][2], spadeData[3][3])) {
c.getPlayerAssistant().movePlayer(spadeData[3][4], spadeData[3][5], 3);
} else if(c.inArea(spadeData[4][0], spadeData[4][1], spadeData[4][2], spadeData[4][3])) {
c.getPlayerAssistant().movePlayer(spadeData[4][4], spadeData[4][5], 3);
} else if(c.inArea(spadeData[5][0], spadeData[5][1], spadeData[5][2], spadeData[5][3])) {
c.getPlayerAssistant().movePlayer(spadeData[5][4], spadeData[5][5], 3);
} else if (c.absX == 2999 && c.absY == 3375) {
c.getDialogueHandler().sendDialogues(1007, c.npcType);
} else if (c.absX == 2996 && c.absY == 3377) {
c.getDialogueHandler().sendDialogues(1007, c.npcType);
} else if (c.absX == 3005 && c.absY == 3376) {
c.getDialogueHandler().sendDialogues(1007, c.npcType);
} else if (c.absX == 2999 && c.absY == 3383 && c.pirateTreasure == 4) {
NpcHandler.spawnNpc(c, 1217, c.absX + Misc.random(1), c.absY + Misc.random(1), c.heightLevel, 0, 10, 2, 5, 5, true, true);
c.getDialogueHandler().sendNpcChat1("First moles, now this! Take this, vanda!", c.talkingNpc, "Gardener");
c.pirateTreasure = 5;
} else if (c.absX == 2999 && c.absY == 3383 && c.pirateTreasure == 5) {
QuestRewards.pirateFinish(c);
} else {
c.getPacketSender().sendMessage("You don't find anything...");
}
}
/**
* Stair data
*/
public void useStairs() {
if (Boundary.isIn(c, Boundary.BARROWS_UNDERGROUND)) {
switch(c.objectId) {
case 6703:
c.getPlayerAssistant().movePlayer(barrowData[0][5], barrowData[0][6], 0);
break;
case 6707:
c.getPlayerAssistant().movePlayer(barrowData[1][5], barrowData[1][6], 0);
break;
case 6702:
c.getPlayerAssistant().movePlayer(barrowData[2][5], barrowData[2][6], 0);
break;
case 6706:
c.getPlayerAssistant().movePlayer(barrowData[3][5], barrowData[3][6], 0);
break;
case 6704:
c.getPlayerAssistant().movePlayer(barrowData[4][5], barrowData[4][6], 0);
break;
case 6705:
c.getPlayerAssistant().movePlayer(barrowData[5][5], barrowData[5][6], 0);
break;
}
} else {
c.getPacketSender().sendMessage("You have to be in barrows to do this!");
}
}
public void checkCoffins() {
if (Boundary.isIn(c, Boundary.BARROWS_UNDERGROUND)) {
if (c.barrowsKillCount < 5) {
c.getPacketSender().sendMessage("You still have to kill the following brothers:");
if (c.barrowsNpcs[2][1] == 0) {
c.getPacketSender().sendMessage("- Karils");
}
if (c.barrowsNpcs[3][1] == 0) {
c.getPacketSender().sendMessage("- Guthans");
}
if (c.barrowsNpcs[1][1] == 0) {
c.getPacketSender().sendMessage("- Torags");
}
if (c.barrowsNpcs[5][1] == 0) {
c.getPacketSender().sendMessage("- Ahrims");
}
if (c.barrowsNpcs[0][1] == 0) {
c.getPacketSender().sendMessage("- Veracs");
}
c.getPacketSender().closeAllWindows();
} else if (c.barrowsKillCount == 5) {
NpcHandler.spawnNpc(c, 2026, c.getX(), c.getY()-1, 3, 0, 120, 25, 200, 200, true, true);
c.getPacketSender().closeAllWindows();
} else if (c.barrowsKillCount > 5) {
c.getPlayerAssistant().movePlayer(3551, 9694, 0);
c.getPacketSender().sendMessage("You teleport to the chest.");
c.getPacketSender().closeAllWindows();
}
} else {
c.getPacketSender().sendMessage("You have to be in barrows to do this!");
}
}
/**
* Grabs the reward based on random chance depending on what your killcount is.
*/
public void reward() {
if (Boundary.isIn(c, Boundary.BARROWS_UNDERGROUND)) {
c.getItemAssistant().addItem(randomRunes(), Misc.random(150) + 100);
c.getItemAssistant().addItem(randomRunes(), Misc.random(150) + 100);
c.getItemAssistant().addItem(randomPots(), 1);
if (c.barrowsKillCount >= 6 && c.barrowsKillCount <= 24) {
if (Misc.random(10) == 1)
c.getItemAssistant().addItem(randomBarrows(), 1);
} else if (c.barrowsKillCount >= 25 && c.barrowsKillCount <= 49) {
if (Misc.random(8) == 1)
c.getItemAssistant().addItem(randomBarrows(), 1);
} else if (c.barrowsKillCount >= 50 && c.barrowsKillCount <= 99) {
if (Misc.random(5) == 1)
c.getItemAssistant().addItem(randomBarrows(), 1);
} else if (c.barrowsKillCount >= 100 && c.barrowsKillCount <= 149) {
if (Misc.random(2) == 1)
c.getItemAssistant().addItem(randomBarrows(), 1);
} else if (c.barrowsKillCount >= 150) {
c.getItemAssistant().addItem(randomBarrows(), 1);
}
} else {
c.getPacketSender().sendMessage("You have to be in barrows to do this!");
}
}
/**
* Checking if you have killed all of the brothers.
* @return
*/
public boolean checkBarrows() {
if (c.barrowsNpcs[2][1] == 2 ||
c.barrowsNpcs[3][1] == 2 ||
c.barrowsNpcs[1][1] == 2 ||
c.barrowsNpcs[5][1] == 2 ||
c.barrowsNpcs[0][1] == 2 ||
c.barrowsNpcs[4][1] == 2) {
return true;
}
return false;
}
/**
* Using the chest.
*/
public void useChest() {
if (Boundary.isIn(c, Boundary.BARROWS_UNDERGROUND)) {
if (!checkBarrows()) {
c.getPacketSender().sendMessage("You haven't killed all the brothers!");
return;
}
if (c.barrowsKillCount == 5) {
if (c.barrowsNpcs[4][1] == 0) {
NpcHandler.spawnNpc(c, 2026, c.getX(), c.getY()-1, 0, 0, 120, 25, 200, 200, true, true);
}
c.barrowsNpcs[4][1] = 1;
}
if (c.barrowsKillCount > 5 && checkBarrows()) {
if (c.getItemAssistant().freeSlots() >= 4) {
reward();
resetBarrows();
} else {
c.getPacketSender().sendMessage("You need more inventory slots to open the chest.");
}
}
} else {
c.getPacketSender().sendMessage("You have to be in barrows to do this!");
}
}
public void fixAllBarrows() {
int totalCost = 0;
int cashAmount = c.getItemAssistant().getItemAmount(995);
for (int j = 0; j < c.playerItems.length; j++) {
boolean breakOut = false;
for (int i = 0; i < c.getItemAssistant().brokenBarrows.length; i++) {
if (c.playerItems[j] - 1 == c.getItemAssistant().brokenBarrows[i][1]) {
if (totalCost + 80000 > cashAmount) {
breakOut = true;
c.getPacketSender().sendMessage("You have run out of money.");
break;
} else {
totalCost += 80000;
}
c.playerItems[j] = c.getItemAssistant().brokenBarrows[i][0] + 1;
}
}
if (breakOut)
break;
}
if (totalCost > 0)
c.getItemAssistant().deleteItem(995, c.getItemAssistant().getItemSlot(995),
totalCost);
}
/**
* Resetting the minigame.
*/
public void resetBarrows() {
c.barrowsNpcs[0][1] = 0;
c.barrowsNpcs[1][1] = 0;
c.barrowsNpcs[2][1] = 0;
c.barrowsNpcs[3][1] = 0;
c.barrowsNpcs[4][1] = 0;
c.barrowsNpcs[5][1] = 0;
c.barrowsKillCount = 0;
c.getPlayerAssistant().movePlayer(3565, 3288, 0);
}
}
@@ -0,0 +1,848 @@
package com.rs2.game.content.minigames;
import java.util.concurrent.CopyOnWriteArrayList;
import com.rs2.GameConstants;
import com.rs2.GameEngine;
import com.rs2.game.content.combat.prayer.PrayerDrain;
import com.rs2.game.content.minigames.castlewars.CastleWars;
import com.rs2.game.items.GameItem;
import com.rs2.game.items.ItemData;
import com.rs2.game.items.ItemAssistant;
import com.rs2.game.items.ItemConstants;
import com.rs2.game.items.impl.RareProtection;
import com.rs2.game.players.Client;
import com.rs2.game.players.Player;
import com.rs2.game.players.PlayerHandler;
import com.rs2.game.players.PlayerSave;
import com.rs2.util.GameLogger;
import com.rs2.util.Misc;
public class Dueling {
private final Player player;
public Dueling(Player player2) {
player = player2;
}
public CopyOnWriteArrayList<GameItem> otherStakedItems = new CopyOnWriteArrayList<GameItem>();
public CopyOnWriteArrayList<GameItem> stakedItems = new CopyOnWriteArrayList<GameItem>();
public void requestDuel(int id) {
try {
if (id == player.playerId) {
return;
}
if (!CastleWars.deleteCastleWarsItems(player, id)) {
return;
}
if (player.inTrade || player.isShopping) {
player.getPacketSender().sendMessage("You can not stake currently.");
return;
}
if (!player.inDuelArena()) {
player.getPacketSender().sendMessage("You must be in the duel arena to do that.");
return;
}
resetDuel();
resetDuelItems();
player.duelingWith = id;
Client o = (Client) PlayerHandler.players[id];
if (o == null) {
return;
}
player.duelRequested = true;
if (player.duelStatus == 0 && o.duelStatus == 0
&& o.duelRequested && player.duelingWith == o.getId()
&& o.duelingWith == player.getId()) {
if (player.goodDistance(player.getX(), player.getY(), o.getX(), o.getY(), 2)) {
player.getDueling().openDuel();
o.getDueling().openDuel();
} else {
player.getPacketSender()
.sendMessage(
"You need to get closer to your opponent to start the duel.");
}
} else {
player.getPacketSender().sendMessage("Sending duel request...");
o.getPacketSender().sendMessage(player.playerName + ":duelreq:");
}
} catch (Exception e) {
Misc.println("Error requesting duel.");
}
}
public void openDuel() {
Client o = (Client) PlayerHandler.players[player.duelingWith];
if (o == null) {
return;
}
if (player.inTrade || player.isShopping) {
player.getPacketSender().sendMessage("You can not stake currently.");
return;
}
if (!player.inDuelArena()) {
player.getPacketSender().sendMessage("You must be in the duel arena to do that.");
return;
}
if (player.duelingArena()) {
player.getPacketSender().sendMessage("You can't do that in a duel!");
return;
}
player.duelStatus = 1;
refreshduelRules();
refreshDuelScreen();
player.openDuel = true;
o.openDuel = true;
for (int i = 0; i < player.playerEquipment.length; i++) {
sendDuelEquipment(player.playerEquipment[i], player.playerEquipmentN[i], i);
}
player.getPacketSender().sendString("Dueling with: " + o.playerName + " (level-" + o.combatLevel + ")", 6671);
player.getPacketSender().sendString("", 6684);
player.getPacketSender().sendFrame248(6575, 3321);
player.getItemAssistant().resetItems(3322);
}
public void sendDuelEquipment(int itemId, int amount, int slot) {
synchronized (player) {
if (itemId != 0) {
player.getOutStream().createFrameVarSizeWord(34);
player.getOutStream().writeWord(13824);
player.getOutStream().writeByte(slot);
player.getOutStream().writeWord(itemId + 1);
if (amount > 254) {
player.getOutStream().writeByte(255);
player.getOutStream().writeDWord(amount);
} else {
player.getOutStream().writeByte(amount);
}
player.getOutStream().endFrameVarSizeWord();
player.flushOutStream();
}
}
}
public void refreshduelRules() {
for (int i = 0; i < player.duelRule.length; i++) {
player.duelRule[i] = false;
}
player.getPacketSender().sendFrame87(286, 0);
player.duelOption = 0;
}
public void refreshDuelScreen() {
synchronized (player) {
Client o = (Client) PlayerHandler.players[player.duelingWith];
if (o == null) {
return;
}
player.getOutStream().createFrameVarSizeWord(53);
player.getOutStream().writeWord(6669);
player.getOutStream().writeWord(stakedItems.toArray().length);
int current = 0;
for (GameItem item : stakedItems) {
if (item.amount > 254) {
player.getOutStream().writeByte(255);
player.getOutStream().writeDWord_v2(item.amount);
} else {
player.getOutStream().writeByte(item.amount);
}
if (item.id > GameConstants.ITEM_LIMIT || item.id < 0) {
item.id = GameConstants.ITEM_LIMIT;
}
player.getOutStream().writeWordBigEndianA(item.id + 1);
current++;
}
if (current < 27) {
for (int i = current; i < 28; i++) {
player.getOutStream().writeByte(1);
player.getOutStream().writeWordBigEndianA(-1);
}
}
player.getOutStream().endFrameVarSizeWord();
player.flushOutStream();
player.getOutStream().createFrameVarSizeWord(53);
player.getOutStream().writeWord(6670);
player.getOutStream().writeWord(
o.getDueling().stakedItems.toArray().length);
current = 0;
for (GameItem item : o.getDueling().stakedItems) {
if (item.amount > 254) {
player.getOutStream().writeByte(255);
player.getOutStream().writeDWord_v2(item.amount);
} else {
player.getOutStream().writeByte(item.amount);
}
if (item.id > GameConstants.ITEM_LIMIT || item.id < 0) {
item.id = GameConstants.ITEM_LIMIT;
}
player.getOutStream().writeWordBigEndianA(item.id + 1);
current++;
}
if (current < 27) {
for (int i = current; i < 28; i++) {
player.getOutStream().writeByte(1);
player.getOutStream().writeWordBigEndianA(-1);
}
}
player.getOutStream().endFrameVarSizeWord();
player.flushOutStream();
}
}
public boolean stakeItem(int itemID, int fromSlot, int amount) {
for (int i : ItemConstants.ITEM_TRADEABLE) {
if (i == itemID || itemID >= 6864 && itemID <= 6882) {
player.getPacketSender().sendMessage("You can't stake that item.");
return false;
}
}
if (player.inTrade || player.isShopping) {
player.getPacketSender().sendMessage("You can not stake currently.");
return false;
}
if (!player.inDuelArena()) {
player.getPacketSender().sendMessage("You must be in the duel arena to do that.");
return false;
}
if (player.duelingArena()) {
player.getPacketSender().sendMessage("You can't do that in a duel!");
return false;
}
if (!RareProtection.removeItemOtherActions(player, itemID)) {
return false;
}
if (amount <= 0) {
return false;
}
Client o = (Client) PlayerHandler.players[player.duelingWith];
if(!player.openDuel && !o.openDuel) {
declineDuel();
return false;
}
if(!player.getItemAssistant().playerHasItem(itemID, amount))
return false;
if (amount <= 0)
return false;
if (o == null) {
declineDuel();
return false;
}
if (o.duelStatus <= 0 || player.duelStatus <= 0) {
declineDuel();
o.getDueling().declineDuel();
return false;
}
changeDuelStuff();
if (!ItemData.itemStackable[itemID]) {
for (int a = 0; a < amount; a++) {
if (player.getItemAssistant().playerHasItem(itemID, 1)) {
stakedItems.add(new GameItem(itemID, 1));
player.getItemAssistant().deleteItem(itemID,
player.getItemAssistant().getItemSlot(itemID), 1);
}
}
player.getItemAssistant().resetItems(3214);
player.getItemAssistant().resetItems(3322);
o.getItemAssistant().resetItems(3214);
o.getItemAssistant().resetItems(3322);
refreshDuelScreen();
o.getDueling().refreshDuelScreen();
player.getPacketSender().sendString("", 6684);
o.getPacketSender().sendString("", 6684);
}
if (ItemData.itemStackable[itemID] || ItemData.itemIsNote[itemID]) {
boolean found = false;
for (GameItem item : stakedItems) {
if (item.id == itemID) {
found = true;
item.amount += amount;
player.getItemAssistant().deleteItem(itemID, fromSlot, amount);
break;
}
}
if (!found) {
player.getItemAssistant().deleteItem(itemID, fromSlot, amount);
stakedItems.add(new GameItem(itemID, amount));
}
}
player.getItemAssistant().resetItems(3214);
player.getItemAssistant().resetItems(3322);
o.getItemAssistant().resetItems(3214);
o.getItemAssistant().resetItems(3322);
refreshDuelScreen();
o.getDueling().refreshDuelScreen();
player.getPacketSender().sendString("", 6684);
o.getPacketSender().sendString("", 6684);
return true;
}
public boolean fromDuel(int itemID, int fromSlot, int amount) {
Client o = (Client) PlayerHandler.players[player.duelingWith];
if (o == null) {
declineDuel();
return false;
}
if(!player.openDuel && !o.openDuel) {
declineDuel();
return false;
}
if (player.inTrade || player.isShopping) {
player.getPacketSender().sendMessage("You can not stake currently.");
return false;
}
if (!player.inDuelArena()) {
player.getPacketSender().sendMessage("You must be in the duel arena to do that.");
return false;
}
if (player.duelingArena()) {
player.getPacketSender().sendMessage("You can't do that in a duel!");
return false;
}
if (o.duelStatus <= 0 || player.duelStatus <= 0) {
declineDuel();
o.getDueling().declineDuel();
return false;
}
if (ItemData.itemStackable[itemID]) {
if (player.getItemAssistant().freeSlots() - 1 < player.duelSpaceReq) {
player.getPacketSender().sendMessage(
"You have too many rules set to remove that item.");
return false;
}
}
changeDuelStuff();
boolean goodSpace = true;
if (!ItemData.itemStackable[itemID]) {
for (int a = 0; a < amount; a++) {
for (GameItem item : stakedItems) {
if (item.id == itemID) {
if (!item.stackable) {
if (player.getItemAssistant().freeSlots() - 1 < player.duelSpaceReq) {
goodSpace = false;
break;
}
stakedItems.remove(item);
player.getItemAssistant().addItem(itemID, 1);
} else {
if (player.getItemAssistant().freeSlots() - 1 < player.duelSpaceReq) {
goodSpace = false;
break;
}
if (item.amount > amount) {
item.amount -= amount;
player.getItemAssistant().addItem(itemID, amount);
} else {
if (player.getItemAssistant().freeSlots() - 1 < player.duelSpaceReq) {
goodSpace = false;
break;
}
amount = item.amount;
stakedItems.remove(item);
player.getItemAssistant().addItem(itemID, amount);
}
}
break;
}
o.duelStatus = 1;
player.duelStatus = 1;
player.getItemAssistant().resetItems(3214);
player.getItemAssistant().resetItems(3322);
o.getItemAssistant().resetItems(3214);
o.getItemAssistant().resetItems(3322);
player.getDueling().refreshDuelScreen();
o.getDueling().refreshDuelScreen();
o.getPacketSender().sendString("", 6684);
}
}
}
for (GameItem item : stakedItems) {
if (item.id == itemID) {
if (!item.stackable) {
} else {
if (item.amount > amount) {
item.amount -= amount;
player.getItemAssistant().addItem(itemID, amount);
} else {
amount = item.amount;
stakedItems.remove(item);
player.getItemAssistant().addItem(itemID, amount);
}
}
break;
}
}
o.duelStatus = 1;
player.duelStatus = 1;
player.getItemAssistant().resetItems(3214);
player.getItemAssistant().resetItems(3322);
o.getItemAssistant().resetItems(3214);
o.getItemAssistant().resetItems(3322);
player.getDueling().refreshDuelScreen();
o.getDueling().refreshDuelScreen();
o.getPacketSender().sendString("", 6684);
if (!goodSpace) {
player.getPacketSender().sendMessage(
"You have too many rules set to remove that item.");
return true;
}
return true;
}
public void confirmDuel() {
Client o = (Client) PlayerHandler.players[player.duelingWith];
if (o == null || ((o.getDueling().stakedItems.size() + o.getDueling().otherStakedItems.size()) > player.getItemAssistant().freeSlots())) {
player.getPacketSender().sendMessage("Not enough inventory spaces.");
o.getPacketSender().sendMessage("Not enough inventory spaces.");
declineDuel();
return;
}
if (player.inTrade || player.isShopping) {
player.getPacketSender().sendMessage("You can not stake currently.");
return;
}
if (!player.inDuelArena()) {
player.getPacketSender().sendMessage("You must be in the duel arena to confirm a duel.");
return;
}
if (player.duelingArena()) {
player.getPacketSender().sendMessage("You can't do that in a duel!");
return;
}
String itemId = "";
for (GameItem item : stakedItems) {
if (ItemData.itemStackable[item.id] || ItemData.itemIsNote[item.id]) {
itemId += ItemAssistant.getItemName(item.id) + " x "
+ Misc.format(item.amount) + "\\n";
} else {
itemId += ItemAssistant.getItemName(item.id) + "\\n";
}
}
player.getPacketSender().sendString(itemId, 6516);
itemId = "";
for (GameItem item : o.getDueling().stakedItems) {
if (ItemData.itemStackable[item.id] || ItemData.itemIsNote[item.id]) {
itemId += ItemAssistant.getItemName(item.id) + " x "
+ Misc.format(item.amount) + "\\n";
} else {
itemId += ItemAssistant.getItemName(item.id) + "\\n";
}
}
player.getPacketSender().sendString(itemId, 6517);
player.getPacketSender().sendString("", 8242);
for (int i = 8238; i <= 8253; i++) {
player.getPacketSender().sendString("", i);
}
player.getPacketSender().sendString("Hitpoints will be restored.", 8250);
player.getPacketSender().sendString("Boosted stats will be restored.",
8238);
if (player.duelRule[8]) {
player.getPacketSender().sendString(
"There will be obstacles in the arena.", 8239);
}
player.getPacketSender().sendString("", 8240);
player.getPacketSender().sendString("", 8241);
String[] rulesOption = { "Players cannot forfeit!",
"Players cannot move.", "Players cannot use range.",
"Players cannot use melee.", "Players cannot use magic.",
"Players cannot drink pots.", "Players cannot eat food.",
"Players cannot use prayer." };
int lineNumber = 8242;
for (int i = 0; i < 8; i++) {
if (player.duelRule[i]) {
player.getPacketSender().sendString("" + rulesOption[i],
lineNumber);
lineNumber++;
}
}
player.getPacketSender().sendString("", 6571);
player.getPacketSender().sendFrame248(6412, 197);
// c.getPA().showInterface(6412);
}
public void startDuel() {
Client o = (Client) PlayerHandler.players[player.duelingWith];
if (!player.inDuelArena()) {
player.getPacketSender().sendMessage("You must be in the duel arena to start a duel.");
return;
}
if (player.inTrade || player.isShopping) {
player.getPacketSender().sendMessage("You can not stake currently.");
return;
}
if (player.duelingArena()) {
player.getPacketSender().sendMessage("You can't do that in a duel!");
return;
}
if (o == null || o.disconnected) {
duelVictory();
}
player.headIconHints = 2;
if (player.duelRule[7]) {
for (int p = 0; p < player.getPrayer().PRAYER.length; p++) { // reset
// prayer
// glows
player.getPrayer().prayerActive[p] = false;
player.getPacketSender().sendConfig(player.getPrayer().PRAYER_GLOW[p],
0);
}
player.headIcon = -1;
player.getPlayerAssistant().requestUpdates();
}
if (player.duelRule[11]) {
player.getItemAssistant().removeItem(player.playerEquipment[0], 0);
}
if (player.duelRule[12]) {
player.getItemAssistant().removeItem(player.playerEquipment[1], 1);
}
if (player.duelRule[13]) {
player.getItemAssistant().removeItem(player.playerEquipment[2], 2);
}
if (player.duelRule[14]) {
player.getItemAssistant().removeItem(player.playerEquipment[3], 3);
}
if (player.duelRule[15]) {
player.getItemAssistant().removeItem(player.playerEquipment[4], 4);
}
if (player.duelRule[16]) {
player.getItemAssistant().removeItem(player.playerEquipment[5], 5);
}
if (player.duelRule[17]) {
player.getItemAssistant().removeItem(player.playerEquipment[7], 7);
}
if (player.duelRule[18]) {
player.getItemAssistant().removeItem(player.playerEquipment[9], 9);
}
if (player.duelRule[19]) {
player.getItemAssistant().removeItem(player.playerEquipment[10], 10);
}
if (player.duelRule[20]) {
player.getItemAssistant().removeItem(player.playerEquipment[12], 12);
}
if (player.duelRule[21]) {
player.getItemAssistant().removeItem(player.playerEquipment[13], 13);
}
player.duelStatus = 5;
player.getPacketSender().closeAllWindows();
player.specAmount = 10;
player.getItemAssistant().addSpecialBar(player.playerEquipment[player.playerWeapon]);
if (player.duelRule[8]) {
if (player.duelRule[1]) {
player.getPlayerAssistant().movePlayer(player.duelTeleX, player.duelTeleY, 0);
} else {
player.getPlayerAssistant().movePlayer(3366 + Misc.random(12),
3246 + Misc.random(6), 0);
}
} else {
if (player.duelRule[1]) {
player.getPlayerAssistant().movePlayer(player.duelTeleX, player.duelTeleY, 0);
} else {
player.getPlayerAssistant().movePlayer(3335 + Misc.random(12),
3246 + Misc.random(6), 0);
}
}
player.getPacketSender().createPlayerHints(10, o.playerId);
player.getPacketSender().showOption(3, 0, "Attack", 1);
for (int i = 0; i < 20; i++) {
player.playerLevel[i] = player.getPlayerAssistant().getLevelForXP(
player.playerXP[i]);
player.getPlayerAssistant().refreshSkill(i);
}
for (GameItem item : o.getDueling().stakedItems) {
otherStakedItems.add(new GameItem(item.id, item.amount));
}
PlayerSave.saveGame(player);
player.getPlayerAssistant().requestUpdates();
}
public static void handleForfeit(Player player)
{
Client opponent = (Client) PlayerHandler.players[player.duelingWith];
opponent.getDueling().duelVictory();
player.getDueling().resetDuel();
player.getPlayerAssistant().movePlayer(GameConstants.DUELING_RESPAWN_X + Misc.random(5), GameConstants.DUELING_RESPAWN_Y + Misc.random(5), 0);
player.getPacketSender().sendMessage("You have lost the duel!");
}
public void duelVictory() {
Client opponent = (Client) PlayerHandler.players[player.duelingWith];
if (opponent != null) {
player.getPacketSender().sendString("" + opponent.combatLevel, 6839);
player.getPacketSender().sendString(opponent.playerName, 6840);
opponent.duelStatus = 0;
} else {
player.getPacketSender().sendString("", 6839);
player.getPacketSender().sendString("", 6840);
}
PrayerDrain.resetPrayers(player);
for (int i = 0; i < 20; i++) {
player.playerLevel[i] = player.getPlayerAssistant().getLevelForXP(
player.playerXP[i]);
player.getPlayerAssistant().refreshSkill(i);
}
//player.getPacketSender().sendSound(DUEL_WON, 100, 0); Not good sound
player.duelStatus = 6;
if (player.isSkulled) {
player.isSkulled = false;
player.skullTimer = 0;
player.headIconPk = -1;
player.getPlayerAssistant().requestUpdates();
}
player.getPlayerAssistant().refreshSkill(3);
duelRewardInterface();
player.getPacketSender().showInterface(6733);
player.getPacketSender().sendMessage("You have won the duel!");
if (player.getPlayerAssistant().isPlayer()) {
GameLogger.writeLog(player.playerName, "duelingkiller", player.playerName + " killed " + opponent.playerName + " in the duel arena.");
}
player.getPlayerAssistant().movePlayer(GameConstants.DUELING_RESPAWN_X + Misc.random(5), GameConstants.DUELING_RESPAWN_Y + Misc.random(5), 0);
player.getPlayerAssistant().requestUpdates();
player.getPacketSender().showOption(3, 0, "Challenge", 3);
player.getPacketSender().createPlayerHints(10, -1);
player.duelSpaceReq = 0;
player.openDuel = false;
opponent.openDuel = false;
player.duelingWith = 0;
player.getCombatAssistant().resetPlayerAttack();
player.duelRequested = false;
PlayerSave.saveGame(player);
PlayerSave.saveGame(opponent);
}
public void duelRewardInterface() {
synchronized (player) {
player.getOutStream().createFrameVarSizeWord(53);
player.getOutStream().writeWord(6822);
player.getOutStream().writeWord(otherStakedItems.toArray().length);
for (GameItem item : otherStakedItems) {
if (item.amount > 254) {
player.getOutStream().writeByte(255);
player.getOutStream().writeDWord_v2(item.amount);
} else {
player.getOutStream().writeByte(item.amount);
}
if (item.id > GameConstants.ITEM_LIMIT || item.id < 0) {
item.id = GameConstants.ITEM_LIMIT;
}
player.getOutStream().writeWordBigEndianA(item.id + 1);
}
player.getOutStream().endFrameVarSizeWord();
player.flushOutStream();
}
}
public void claimStakedItems() {
for (GameItem item : otherStakedItems) {
if (item.id > 0 && item.amount > 0) {
if (ItemData.itemStackable[item.id]) {
if (!player.getItemAssistant().addItem(item.id, item.amount)) {
GameEngine.itemHandler.createGroundItem(player, item.id,
player.getX(), player.getY(), item.amount, player.getId());
}
} else {
int amount = item.amount;
for (int a = 1; a <= amount; a++) {
if (!player.getItemAssistant().addItem(item.id, 1)) {
GameEngine.itemHandler.createGroundItem(player, item.id,
player.getX(), player.getY(), 1, player.getId());
}
}
}
}
}
for (GameItem item : stakedItems) {
if (item.id > 0 && item.amount > 0) {
if (ItemData.itemStackable[item.id]) {
if (!player.getItemAssistant().addItem(item.id, item.amount)) {
GameEngine.itemHandler.createGroundItem(player, item.id,
player.getX(), player.getY(), item.amount, player.getId());
}
} else {
int amount = item.amount;
for (int a = 1; a <= amount; a++) {
if (!player.getItemAssistant().addItem(item.id, 1)) {
GameEngine.itemHandler.createGroundItem(player, item.id,
player.getX(), player.getY(), 1, player.getId());
}
}
}
}
}
resetDuel();
resetDuelItems();
PlayerSave.saveGame(player);
}
public void declineDuel() {
Client o = (Client) PlayerHandler.players[player.duelingWith];
if (!player.inDuelArena()) {
player.getPacketSender().sendMessage("You must be in the duel arena to do that.");
return;
}
if (player.duelingArena()) {
player.getPacketSender().sendMessage("You can't do that in a duel!");
return;
}
player.getPacketSender().closeAllWindows();
player.duelStatus = 0;
o.duelStatus = 0;
player.openDuel = false;
o.openDuel = false;
player.duelingWith = 0;
player.duelSpaceReq = 0;
player.duelRequested = false;
for (GameItem item : stakedItems) {
if (item.amount < 1) {
continue;
}
if (ItemData.itemStackable[item.id] || ItemData.itemIsNote[item.id]) {
player.getItemAssistant().addItem(item.id, item.amount);
} else {
player.getItemAssistant().addItem(item.id, 1);
}
}
stakedItems.clear();
refreshduelRules();
}
public void checkDuelWalk() {
Client o = (Client) PlayerHandler.players[player.duelingWith];
if (player.duelStatus == 5 && o.duelStatus == 5 && o.duelingArena() && !player.duelingArena()) {
o.getDueling().duelVictory();
player.getDueling().resetDuel();
}
}
public void resetDuel() {
if (player.isDead) {
player.lostDuel = true;
}
player.getPacketSender().showOption(3, 0, "Challenge", 3);
player.headIconHints = 0;
refreshduelRules();
player.getPacketSender().createPlayerHints(10, -1);
player.duelStatus = 0;
player.duelSpaceReq = 0;
player.duelingWith = 0;
player.getPlayerAssistant().requestUpdates();
player.getCombatAssistant().resetPlayerAttack();
player.duelRequested = false;
}
public void resetDuelItems() {
stakedItems.clear();
otherStakedItems.clear();
}
public void changeDuelStuff() {
Client o = (Client) PlayerHandler.players[player.duelingWith];
if (o == null) {
return;
}
o.duelStatus = 1;
player.duelStatus = 1;
o.getPacketSender().sendString("", 6684);
player.getPacketSender().sendString("", 6684);
}
public void selectRule(int i) { // rules
Client o = (Client) PlayerHandler.players[player.duelingWith];
if (!player.inDuelArena()) {
player.getPacketSender().sendMessage("You must be in the duel arena to change your rules.");
return;
}
if (player.duelingArena()) {
player.getPacketSender().sendMessage("You can't do that in a duel!");
return;
}
if (o == null) {
return;
}
changeDuelStuff();
o.duelSlot = player.duelSlot;
if (i >= 11 && player.duelSlot > -1) {
if (player.playerEquipment[player.duelSlot] > 0) {
if (!player.duelRule[i]) {
player.duelSpaceReq++;
} else {
player.duelSpaceReq--;
}
}
if (o.playerEquipment[o.duelSlot] > 0) {
if (!o.duelRule[i]) {
o.duelSpaceReq++;
} else {
o.duelSpaceReq--;
}
}
}
if (i == 16 && (player.getItemAssistant().is2handed(ItemAssistant.getItemName(player.playerEquipment[player.playerWeapon]).toLowerCase(), player.playerEquipment[player.playerWeapon])
&& player.getItemAssistant().freeSlots() == 0) || (o.getItemAssistant().is2handed(ItemAssistant.getItemName(player.playerEquipment[player.playerWeapon]).toLowerCase(), player.playerEquipment[player.playerWeapon])
&& o.getItemAssistant().freeSlots() == 0)) {
player.getPacketSender().sendMessage("You or your opponent don't have the required space to set this rule.");
return;
}
if (i >= 11) {
if (player.getItemAssistant().freeSlots() < player.duelSpaceReq
|| o.getItemAssistant().freeSlots() < o.duelSpaceReq) {
player.getPacketSender()
.sendMessage(
"You or your opponent don't have the required space to set this rule.");
if (player.playerEquipment[player.duelSlot] > 0) {
player.duelSpaceReq--;
}
if (o.playerEquipment[o.duelSlot] > 0) {
o.duelSpaceReq--;
}
return;
}
}
if (!player.duelRule[i]) {
player.duelRule[i] = true;
player.duelOption += player.DUEL_RULE_ID[i];
} else {
player.duelRule[i] = false;
player.duelOption -= player.DUEL_RULE_ID[i];
}
player.getPacketSender().sendFrame87(286, player.duelOption);
o.duelOption = player.duelOption;
o.duelRule[i] = player.duelRule[i];
o.getPacketSender().sendFrame87(286, o.duelOption);
if (player.duelRule[8]) {
if (player.duelRule[1]) {
player.duelTeleX = 3366 + Misc.random(12);
o.duelTeleX = player.duelTeleX - 1;
player.duelTeleY = 3246 + Misc.random(6);
o.duelTeleY = player.duelTeleY;
}
} else {
if (player.duelRule[1]) {
player.duelTeleX = 3335 + Misc.random(12);
o.duelTeleX = player.duelTeleX - 1;
player.duelTeleY = 3246 + Misc.random(6);
o.duelTeleY = player.duelTeleY;
}
}
}
}
@@ -0,0 +1,411 @@
package com.rs2.game.content.minigames;
import com.rs2.GameEngine;
import com.rs2.event.CycleEvent;
import com.rs2.event.CycleEventContainer;
import com.rs2.event.CycleEventHandler;
import com.rs2.game.npcs.Npc;
import com.rs2.game.npcs.NpcHandler;
import com.rs2.game.players.Client;
import com.rs2.game.players.Player;
import com.rs2.game.players.PlayerHandler;
import com.rs2.util.Misc;
public class FightCaves {
public static final int TZ_KIH = 2627, TZ_KEK_SPAWN = 2738, TZ_KEK = 2630,
TOK_XIL = 2631, YT_MEJKOT = 2741, KET_ZEK = 2743, TZTOK_JAD = 2745, YT_HURKOT = 2746;
/**
* Holds the data for the 63 waves fight cave.
*/
private final int[][] WAVES = {
{ TZ_KIH },
{ TZ_KIH, TZ_KIH },
{ TZ_KEK },
{ TZ_KEK, TZ_KIH },
{ TZ_KEK, TZ_KIH, TZ_KIH },
{ TZ_KEK, TZ_KEK },
{ TOK_XIL },
{ TOK_XIL, TZ_KIH },
{ TOK_XIL, TZ_KIH, TZ_KIH },
{ TOK_XIL, TZ_KEK },
{ TOK_XIL, TZ_KEK, TZ_KIH },
{ TOK_XIL, TZ_KEK, TZ_KIH, TZ_KIH },
{ TOK_XIL, TZ_KEK, TZ_KEK },
{ TOK_XIL, TOK_XIL },
{ YT_MEJKOT },
{ YT_MEJKOT, TZ_KIH },
{ YT_MEJKOT, TZ_KIH, TZ_KIH },
{ YT_MEJKOT, TZ_KEK },
{ YT_MEJKOT, TZ_KEK, TZ_KIH },
{ YT_MEJKOT, TZ_KEK, TZ_KIH, TZ_KIH },
{ YT_MEJKOT, TZ_KEK, TZ_KEK },
{ YT_MEJKOT, TOK_XIL },
{ YT_MEJKOT, TOK_XIL, TZ_KIH },
{ YT_MEJKOT, TOK_XIL, TZ_KIH, TZ_KIH },
{ YT_MEJKOT, TOK_XIL, TZ_KEK },
{ YT_MEJKOT, TOK_XIL, TZ_KEK, TZ_KIH },
{ YT_MEJKOT, TOK_XIL, TZ_KEK, TZ_KIH, TZ_KIH },
{ YT_MEJKOT, TOK_XIL, TZ_KEK, TZ_KEK },
{ YT_MEJKOT, TOK_XIL, TOK_XIL },
{ YT_MEJKOT, YT_MEJKOT },
{ KET_ZEK },
{ KET_ZEK, TZ_KIH },
{ KET_ZEK, TZ_KIH, TZ_KIH },
{ KET_ZEK, TZ_KEK },
{ KET_ZEK, TZ_KEK, TZ_KIH },
{ KET_ZEK, TZ_KEK, TZ_KIH, TZ_KIH },
{ KET_ZEK, TZ_KEK, TZ_KEK },
{ KET_ZEK, TOK_XIL },
{ KET_ZEK, TOK_XIL, TZ_KIH },
{ KET_ZEK, TOK_XIL, TZ_KIH, TZ_KIH },
{ KET_ZEK, TOK_XIL, TZ_KEK },
{ KET_ZEK, TOK_XIL, TZ_KEK, TZ_KIH },
{ KET_ZEK, TOK_XIL, TZ_KEK, TZ_KIH, TZ_KIH },
{ KET_ZEK, TOK_XIL, TZ_KEK, TZ_KEK },
{ KET_ZEK, TOK_XIL, TOK_XIL },
{ KET_ZEK, YT_MEJKOT },
{ KET_ZEK, YT_MEJKOT, TZ_KIH },
{ KET_ZEK, YT_MEJKOT, TZ_KIH, TZ_KIH },
{ KET_ZEK, YT_MEJKOT, TZ_KEK },
{ KET_ZEK, YT_MEJKOT, TZ_KEK, TZ_KIH },
{ KET_ZEK, YT_MEJKOT, TZ_KEK, TZ_KIH, TZ_KIH },
{ KET_ZEK, YT_MEJKOT, TZ_KEK, TZ_KEK },
{ KET_ZEK, YT_MEJKOT, TOK_XIL },
{ KET_ZEK, YT_MEJKOT, TOK_XIL, TZ_KIH },
{ KET_ZEK, YT_MEJKOT, TOK_XIL, TZ_KIH, TZ_KIH },
{ KET_ZEK, YT_MEJKOT, TOK_XIL, TZ_KEK },
{ KET_ZEK, YT_MEJKOT, TOK_XIL, TZ_KEK, TZ_KIH },
{ KET_ZEK, YT_MEJKOT, TOK_XIL, TZ_KEK, TZ_KIH, TZ_KIH },
{ KET_ZEK, YT_MEJKOT, TOK_XIL, TZ_KEK, TZ_KEK },
{ KET_ZEK, YT_MEJKOT, TOK_XIL, TOK_XIL },
{ KET_ZEK, YT_MEJKOT, YT_MEJKOT },
{ KET_ZEK, KET_ZEK },
{ TZTOK_JAD }
};
private static final int[][] JAD_SPAWNS = {{2400, 5090},{2419, 5080}};
private static final int[][] HEALER_COORDS = {{2390, 5101}, {2391, 5077}, {2411, 5084}, {2398, 5091}};
private final static int[][] COORDINATES = {{2403, 5094}, {2390, 5096}, {2392, 5077}, {2408, 5080}, {2413, 5108}, {2381, 5106}, {2379, 5072}, {2420, 5082}};
/**
* Handles spawning the next fightcave wave.
*
* @param player
* The player.
*/
public void spawnNextWave(Client player) {
if (player != null) {
if (player.waveId >= WAVES.length) {
player.waveId = 0;
return;
}
if (player.waveId < 0) {
player.waveId = 0;
return;
}
int npcAmount = WAVES[player.waveId].length;
int wave = player.waveId +1;
if (player.waveId < 62 && player.waveId > -1) {
for (int j = 0; j < npcAmount; j++) {
int npc = WAVES[player.waveId][j];
int X = COORDINATES[j][0];
int Y = COORDINATES[j][1];
int H = player.heightLevel;
int hp = getHp(npc);
int max = getMax(npc);
int atk = getAtk(npc);
int def = getDef(npc);
NpcHandler.spawnNpc(player, npc, X, Y, H, 0, hp, max, atk, def, true, false);
}
player.getPacketSender().sendMessage("You are now on wave @red@" + wave + "@bla@.");
} else if (player.waveId == 62) {
player.getDialogueHandler().sendDialogues(102, 2617);
int a = Misc.random(1);
int npc = WAVES[62][0];
int X = JAD_SPAWNS[a][0];
int Y = JAD_SPAWNS[a][1];
int H = player.heightLevel;
int hp = getHp(npc);
int max = getMax(npc);
int atk = getAtk(npc);
int def = getDef(npc);
NpcHandler.spawnNpc(player, npc, X, Y, H, 0, hp, max, atk, def, true, false);
player.getPacketSender().sendMessage("You are now on wave @red@63@bla@.");
}
player.tzhaarToKill = npcAmount;
player.tzhaarKilled = 0;
}
}
public static void ytMejKotEffect(Client player, int i) {
if(NpcHandler.npcs[i].npcType == YT_MEJKOT) {
if (NpcHandler.npcs[i].hitsToHeal < 2) {
NpcHandler.npcs[i].hitsToHeal += 1;
if (NpcHandler.npcs[i].hitsToHeal == 2) {
NpcHandler.npcs[i].hitsToHeal = 0;
NpcHandler.npcs[i].gfx0(444);
NpcHandler.npcs[i].startAnimation(2639, i);
NpcHandler.npcs[i].HP += 1+Misc.random(7);
if (NpcHandler.npcs[i].HP > getHp(YT_MEJKOT))
NpcHandler.npcs[i].HP = getHp(YT_MEJKOT);
}
}
}
}
public static void spawnHealers(Player c, int i, int amount) {
if (c.spawnedHealers < 4) {
int hp = getHp(YT_HURKOT);
int max = getMax(YT_HURKOT);
int atk = getAtk(YT_HURKOT);
int def = getDef(YT_HURKOT);
for (int i1 = 0; i1 < amount; i1++) {
NpcHandler.spawnNpc(c, YT_HURKOT, HEALER_COORDS[i1][0], HEALER_COORDS[i1][1], c.heightLevel, 0, hp, max, atk, def, false, false);
}
c.tzhaarToKill += 4;
c.spawnedHealers = amount;
c.canHealersRespawn = false;
}
}
/**
* Handles the correct tz-kih effect; prayer is drained by the formula:
* drain = damage + 1
*
* @param player
* The player
* @param i
* The npcId
* @param damage
* What the npchit
*/
public static void tzKihEffect(Client player, int i, int damage) {
if (NpcHandler.npcs[i].npcType == TZ_KIH) {
if (player != null) {
if (player.playerLevel[5] > 0) {
player.playerLevel[5] -= 1 + damage;
player.getPlayerAssistant().refreshSkill(5);
}
}
}
}
public static void tzKekEffect(Client player, int i) {
if (NpcHandler.npcs[i].npcType == TZ_KEK) {
int x = NpcHandler.npcs[i].absX + 2;
int y = NpcHandler.npcs[i].absY + 2;
int x1 = NpcHandler.npcs[i].absX - 2;
int y1 = NpcHandler.npcs[i].absY - 2;
int hp = getHp(TZ_KEK_SPAWN);
int max = getMax(TZ_KEK_SPAWN);
int atk = getAtk(TZ_KEK_SPAWN);
int def = getDef(TZ_KEK_SPAWN);
if (player != null) {
if (player.tzKekTimer == 0) {
if (NpcHandler.npcs[i].isDead) {
NpcHandler.spawnNpc(player, TZ_KEK_SPAWN, x, y, player.heightLevel, 0, hp, max, atk, def, true, false);
NpcHandler.spawnNpc(player, TZ_KEK_SPAWN, x1, y1, player.heightLevel, 0, hp, max, atk, def, true, false);
player.tzhaarToKill += 2;
}
}
}
}
}
public static int getHp(int npc) {
switch (npc) {
case TZ_KIH:
case TZ_KEK_SPAWN:
return 10;
case TZ_KEK:
return 20;
case TOK_XIL:
return 40;
case YT_MEJKOT:
return 80;
case KET_ZEK:
return 150;
case YT_HURKOT:
return 80;
case TZTOK_JAD:
return 250;
}
return 100;
}
public static int getMax(int npc) {
switch (npc) {
case TZ_KIH:
case TZ_KEK_SPAWN:
return 4;
case TZ_KEK:
return 7;
case TOK_XIL:
return 13;
case YT_MEJKOT:
return 28;
case KET_ZEK:
return 54;
case TZTOK_JAD:
return 97;
case YT_HURKOT:
return 16;
}
return 5;
}
public static int getAtk(int npc) {
switch (npc) {
case TZ_KIH:
case TZ_KEK_SPAWN:
return 30;
case TZ_KEK:
return 50;
case TOK_XIL:
return 100;
case YT_MEJKOT:
return 150;
case KET_ZEK:
return 450;
case TZTOK_JAD:
return 650;
case YT_HURKOT:
return 120;
}
return 100;
}
public static int getDef(int npc) {
switch (npc) {
case TZ_KIH:
case TZ_KEK_SPAWN:
return 30;
case TZ_KEK:
return 50;
case TOK_XIL:
return 100;
case YT_MEJKOT:
return 150;
case KET_ZEK:
return 300;
case TZTOK_JAD:
return 500;
case YT_HURKOT:
return 125;
}
return 100;
}
private static void killedTzhaar(int i) {
final Client c2 = (Client) PlayerHandler.players[NpcHandler.npcs[i].spawnedBy];
c2.tzhaarKilled++;
if (c2.tzhaarKilled == c2.tzhaarToKill) {
c2.waveId++;
CycleEventHandler.getSingleton().addEvent(c2, new CycleEvent() {
@Override
public void execute(CycleEventContainer container) {
if (c2 != null) {
GameEngine.fightCaves.spawnNextWave(c2);
}
container.stop();
}
@Override
public void stop() {
}
}, 15);
}
}
public static void handleJadDeath(int i) {
Client c = (Client) PlayerHandler.players[NpcHandler.npcs[i].spawnedBy];
if (c.inFightCaves()) {
c.getItemAssistant().addItem(6570, 1);
c.getItemAssistant().addItem(6529, 8032);
c.getDialogueHandler().sendDialogues(103, 2617);
c.getPacketSender().sendMessage("You were victorious!");
c.getPlayerAssistant().resetTzhaar();
c.killedJad = true;
c.waveId = 300;
c.setSpecialTarget(null);
} else {
c.getPacketSender().sendMessage("You must be in the fight caves to do this.");
}
}
public static void healJad(Player c, int i) {
if (NpcHandler.npcs[i].npcType == YT_HURKOT && !NpcHandler.npcs[i].isDead) {
if (c.getSpecialTarget() != null) {
if (c.getSpecialTarget().npcType == TZTOK_JAD) {
Npc jad = c.getSpecialTarget();
NpcHandler.npcs[i].gfx0(444);
NpcHandler.npcs[i].startAnimation(2639, i);
jad.HP += 1+Misc.random(8);
if (jad.HP >= getHp(TZTOK_JAD)) {
jad.HP = getHp(TZTOK_JAD);
if (c.spawnedHealers < 4)
spawnHealers(c, i, 4-c.spawnedHealers);
}
}
}
}
}
/**
* Checks if a tzhaar npc has been killed, if so then it checks if it needs
* to do the tz-kek effect. If tzKek spawn has been killed twice or didn't
* need to be killed it calls killedTzhaar.
*
* @param i
* The npc.
*/
public static void tzhaarDeathHandler(int i) {
if (isFightCaveNpc(i) && NpcHandler.npcs[i].npcType != FightCaves.TZ_KEK && NpcHandler.npcs[i].npcType != FightCaves.YT_HURKOT) {
killedTzhaar(i);
}
if (NpcHandler.npcs[i].npcType == FightCaves.TZ_KEK_SPAWN) {
int p = NpcHandler.npcs[i].killerId;
if (PlayerHandler.players[p] != null) {
Client c = (Client) PlayerHandler.players[p];
c.tzKekSpawn += 1;
if (c.tzKekSpawn == 2) {
killedTzhaar(i);
c.tzKekSpawn = 0;
}
}
}
if (NpcHandler.npcs[i].npcType == FightCaves.TZ_KEK) {
int p = NpcHandler.npcs[i].killerId;
if (PlayerHandler.players[p] != null) {
Client c = (Client) PlayerHandler.players[p];
FightCaves.tzKekEffect(c, i);
}
}
}
/**
* Checks if something is a fight cave npc.
*
* @param i
* The npc.
* @return Whether or not it is a fight caves npc.
*/
public static boolean isFightCaveNpc(int i) {
switch (NpcHandler.npcs[i].npcType) {
case FightCaves.TZ_KIH:
case FightCaves.TZ_KEK:
case FightCaves.TZ_KEK_SPAWN:
case FightCaves.TOK_XIL:
case FightCaves.YT_MEJKOT:
case FightCaves.KET_ZEK:
case FightCaves.TZTOK_JAD:
case FightCaves.YT_HURKOT:
return true;
}
return false;
}
}
@@ -0,0 +1,231 @@
package com.rs2.game.content.minigames;
import java.util.Collections;
import java.util.HashMap;
import java.util.Map;
import com.rs2.game.players.Player;
import com.rs2.util.Misc;
/**
* @author ArrowzFtw
*/
public class FightPits {
/**
* @note States of minigames
*/
private static final String PLAYING = "PLAYING";
private static final String WAITING = "WAITING";
/**
* @note Current fight pits champion
*/
private static String pitsChampion = "None";
/**
* @note Countdown for game to start
*/
private static int gameStartTimer = 80;
/**
* @note Elapsed Game start time
*/
private static int elapsedGameTime = 0;
private static final int END_GAME_TIME = 400;
/*
* @note Game started or not?
*/
private static boolean gameStarted = false;
/**
* @note Stores player and State
*/
private static Map<Player, String> playerMap = Collections
.synchronizedMap(new HashMap<Player, String>());
/**
* @note Where to spawn when pits game starts
*/
private static final int MINIGAME_START_POINT_X = 2392;
private static final int MINIGAME_START_POINT_Y = 5139;
/**
* @note Exit game area
*/
private static final int EXIT_GAME_X = 2399;
private static final int EXIT_GAME_Y = 5169;
/**
* @note Exit waiting room
*/
public static final int EXIT_WAITING_X = 2399;
public static final int EXIT_WAITING_Y = 5177;
/**
* @note Waiting room coordinates
*/
private static final int WAITING_ROOM_X = 2399;
private static final int WAITING_ROOM_Y = 5175;
/**
* @return HashMap Value
*/
public static String getState(Player player) {
return playerMap.get(player);
}
private static final int TOKKUL_ID = 6529;
/**
* @note Adds player to waiting room.
*/
public static void addPlayer(Player c) {
playerMap.put(c, WAITING);
c.getPlayerAssistant().movePlayer(WAITING_ROOM_X, WAITING_ROOM_Y, 0);
}
/**
* @note Starts the game and moves players to arena
*/
private static void enterGame(Player c) {
playerMap.put(c, PLAYING);
int teleportToX = MINIGAME_START_POINT_X + Misc.random(12);
int teleportToY = MINIGAME_START_POINT_Y + Misc.random(12);
c.getPlayerAssistant().movePlayer(teleportToX, teleportToY, 0);
c.inPits = true;
// c.getPA().showOption(3, 0, "Attack", 1);
// c.getPA().showOption(3, 0, "Null", 1);
}
/**
* @note Removes player from pits if there in waiting or in game
*/
public static void removePlayer(Player player, boolean forceRemove) {
player.inPits = false;
if (forceRemove) {
player.getPlayerAssistant()
.movePlayer(EXIT_WAITING_X, EXIT_WAITING_Y, 0);
playerMap.remove(player);
return;
}
String state = playerMap.get(player);
if (state == null) {
player.getPlayerAssistant()
.movePlayer(EXIT_WAITING_X, EXIT_WAITING_Y, 0);
return;
}
if (state.equals(PLAYING)) {
if (getListCount(PLAYING) - 1 == 0 && !forceRemove) {
pitsChampion = player.playerName;
player.headIcon = 21;
player.updateRequired = true;
player.getItemAssistant()
.addItem(TOKKUL_ID, 1500 + Misc.random(500));
}
player.getPlayerAssistant().movePlayer(EXIT_GAME_X, EXIT_GAME_Y, 0);
} else if (state.equals(WAITING)) {
player.getPlayerAssistant()
.movePlayer(EXIT_WAITING_X, EXIT_WAITING_Y, 0);
player.getPacketSender().walkableInterface(-1);
}
playerMap.remove(player);
if (state.equals(PLAYING)) {
if (!forceRemove) {
playerMap.put(player, WAITING);
}
}
}
/**
* @return Players playing fight pits
*/
public static int getListCount(String state) {
int count = 0;
for (String s : playerMap.values()) {
if (state == s) {
count++;
}
}
return count;
}
/**
* @note Updates players
*/
private static void update() {
for (Player c : playerMap.keySet()) {
String status = playerMap.get(c);
@SuppressWarnings("unused")
boolean updated = status == WAITING ? updateWaitingRoom(c) : updateGame(c);
}
}
/**
* @note Updates waiting room interfaces etc.
*/
public static boolean updateWaitingRoom(Player c) {
c.getPacketSender().sendString("Next Game Begins In : " + gameStartTimer, 2805);
c.getPacketSender().sendString("Champion: JalYt-Ket-" + pitsChampion, 2806);
c.getPacketSender().sendConfig(560, 1);
c.getPacketSender().walkableInterface(2804);
return true;
}
/**
* @note Updates players in game interfaces etc.
*/
public static boolean updateGame(Player c) {
c.getPacketSender().sendString("Foes Remaining: " + getListCount(PLAYING), 2805);
c.getPacketSender().sendString("Champion: JalYt-Ket-" + pitsChampion, 2806);
c.getPacketSender().sendConfig(560, 1);
c.getPacketSender().walkableInterface(2804);
return true;
}
/**
* @note Handles death and respawn rubbish.
*/
public static void handleDeath(Player player) {
removePlayer(player, true);
}
/*
* @process 600ms Tick
*/
public static void process() {
update();
if (!gameStarted) {
if (gameStartTimer > 0) {
gameStartTimer--;
} else if (gameStartTimer == 0) {
if (getListCount(WAITING) > 4) {
beginGame();
}
gameStartTimer = 80;
}
}
if (gameStarted) {
elapsedGameTime++;
if (elapsedGameTime == END_GAME_TIME) {
endGame();
elapsedGameTime = 0;
gameStarted = false;
gameStartTimer = 80;
}
}
}
/**
* @note Starts game for the players in waiting room
*/
private static void beginGame() {
for (Player c : playerMap.keySet()) {
enterGame(c);
}
}
/**
* @note Ends game and returns player to their normal spot.
*/
private static void endGame() {
for (Player c : playerMap.keySet()) {
removePlayer(c, true);
}
}
}
@@ -0,0 +1,267 @@
/*
* To change this template, choose Tools | Templates and open the template in
* the editor.
*/
package com.rs2.game.content.minigames;
import com.rs2.game.items.ItemAssistant;
import com.rs2.game.players.Client;
/**
* @author D
*/
public class MageArena {
private final Client c;
public MageArena(Client c) {
this.c = c;
}
private final int telePoints = 0;
private final int enchantPoints = 0;
private final int gravePoints = 0;
private final int alchPoints = 0;
private final int[] shopItems = { 6908, 6910, 6912, 6914, 6916, 6918, 6920,
6922, 6924, 6889, 6926, 1391, 4695, 4696, 4698, 4697, 4694, 4699,
564, 561, 560, 563, 565, 6891 };
private final String[] interfaceText = { "Magic Training Arena Shop",
"Telekinetic Pizazz Points", "Enchantment Pizazz Points",
"Graveyard Pizazz Points", "Alchemist Pizazz Points" };
public void openShop() {
for (int i = 0; i < shopItems.length; i++) {
c.getPacketSender().sendFrame34(15948, shopItems[i], i, 100);
}
for (int i = 15950; i < interfaceText.length; i++) {
c.getPacketSender().sendString(interfaceText[i - 15950], i);
}
c.getPacketSender().sendString(Integer.toString(telePoints), 15955);
c.getPacketSender().sendString(Integer.toString(enchantPoints),
15956);
c.getPacketSender().sendString(Integer.toString(gravePoints), 15957);
c.getPacketSender().sendString(Integer.toString(alchPoints), 15958);
c.getPacketSender().showInterface(15944);
}
public int getTelVal(int itemId) {
switch (itemId) {
case 6922:
return 175;
case 6918:
return 350;
case 6916:
return 400;
case 6924:
return 450;
case 6920:
return 120;
case 1391:
return 1;
case 6908:
return 30;
case 6910:
return 60;
case 6912:
return 60;
case 6914:
return 150;
case 6889:
return 500;
case 6926:
return 200;
case 4695:
case 4694:
case 4696:
case 4697:
case 4698:
case 4699:
return 1;
case 564:
case 561:
return 0;
case 560:
case 563:
case 565:
return 2;
default:
return 1;
}
}
public int getAlchVal(int itemId) {
switch (itemId) {
case 6922:
return 225;
case 6918:
return 400;
case 6916:
return 450;
case 6924:
return 500;
case 6920:
return 120;
case 1391:
return 2;
case 6908:
return 30;
case 6910:
return 60;
case 6912:
return 200;
case 6914:
return 240;
case 6889:
return 550;
case 6926:
return 300;
case 4695:
case 4694:
case 4696:
case 4697:
case 4698:
case 4699:
return 1;
case 564:
case 561:
return 1;
case 560:
case 563:
case 565:
return 2;
default:
return 1;
}
}
public int getEnchVal(int itemId) {
switch (itemId) {
case 6922:
return 1300;
case 6918:
return 3000;
case 6916:
return 4000;
case 6924:
return 5000;
case 6920:
return 1200;
case 1391:
return 20;
case 6908:
return 300;
case 6910:
return 600;
case 6912:
return 1500;
case 6914:
return 2400;
case 6889:
return 6000;
case 6926:
return 2000;
case 4695:
case 4694:
case 4696:
case 4697:
case 4698:
case 4699:
return 15;
case 564:
case 561:
return 5;
case 560:
case 563:
case 565:
return 25;
default:
return 1;
}
}
public int getGraveValue(int itemId) {
switch (itemId) {
case 6922:
return 175;
case 6918:
return 350;
case 6916:
return 400;
case 6924:
return 450;
case 6920:
return 120;
case 1391:
return 2;
case 6908:
return 30;
case 6910:
return 60;
case 6912:
return 150;
case 6914:
return 240;
case 6889:
return 500;
case 6926:
return 200;
case 4695:
case 4694:
case 4696:
case 4697:
case 4698:
case 4699:
return 1;
case 564:
case 561:
return 1;
case 560:
case 563:
case 565:
return 2;
default:
return 1;
}
}
public void sendMessage(int itemId) {
c.getPacketSender().sendMessage(
ItemAssistant.getItemName(itemId) + " costs "
+ getGraveValue(itemId) + " Graveyard points, "
+ getAlchVal(itemId) + " Alchemy points,");
c.getPacketSender().sendMessage(
"" + getEnchVal(itemId) + " Enchantment points, and "
+ getTelVal(itemId) + " Telekinetic points.");
}
}
@@ -0,0 +1,410 @@
package com.rs2.game.content.minigames;
import java.util.HashMap;
import com.rs2.GameEngine;
import com.rs2.game.content.combat.prayer.PrayerDrain;
import com.rs2.game.npcs.Npc;
import com.rs2.game.npcs.NpcHandler;
import com.rs2.game.players.Player;
import com.rs2.util.Misc;
/**
* @author Harlan Credits to Sanity
*/
public class PestControl {
/**
* /** how long before were put into the game from lobby
*/
private static final int WAIT_TIMER = 60;
/**
* How many players we need to start a game
*/
private final static int PLAYERS_REQUIRED = 1;
/**
* Hashmap for the players in lobby
*/
public static HashMap<Player, Integer> waitingBoat = new HashMap<Player, Integer>();
private static HashMap<Player, Integer> gamePlayers = new HashMap<Player, Integer>();
private static int gameTimer = -1;
private static int waitTimer = 60;
public static boolean gameStarted = false;
private int properTimer = 0;
public static int KNIGHTS_HEALTH = -1;
/**
* Array used for storing the portals health
*/
public static int[] portalHealth = { 200, 200, 200, 200 };
public static int[] portals = { 3777, 3778, 3779, 3780 };
/**
* array used for storing the npcs used in the minigame
*
* @order npcId, xSpawn, ySpawn, health
*/
public int shifter = 3732 + Misc.random(9);
public int brawler = 3772 + Misc.random(4);
public int defiler = 3762 + Misc.random(9);
public int ravager = 3742 + Misc.random(4);
public int torcher = 3752 + Misc.random(7);
public int splater = 3727 + Misc.random(4);
private final int[][] pcNPCData = { { 3777, 2628, 2591 }, // portal
{ 3778, 2680, 2588 }, // portal
{ 3779, 2669, 2570 }, // portal
{ 3780, 2645, 2569 }, // portal
{ 3782, 2656, 2592 }, // knight
};
private final int[][] voidMonsterData = {
{ shifter, 2660 + Misc.random(4), 2592 + Misc.random(4) },
{ brawler, 2663 + Misc.random(4), 2575 + Misc.random(4) },
{ defiler, 2656 + Misc.random(4), 2572 + Misc.random(4) },
{ ravager, 2664 + Misc.random(4), 2574 + Misc.random(4) },
{ torcher, 2656 + Misc.random(4), 2595 + Misc.random(4) },
{ ravager, 2634 + Misc.random(4), 2596 + Misc.random(4) },
{ brawler, 2638 + Misc.random(4), 2588 + Misc.random(4) },
{ shifter, 2637 + Misc.random(4), 2598 + Misc.random(4) },
{ ravager, 2677 + Misc.random(4), 2579 + Misc.random(4) },
{ defiler, 2673 + Misc.random(4), 2584 + Misc.random(4) },
{ defiler, 2673 + Misc.random(4), 2584 + Misc.random(4) },
{ defiler, 2675 + Misc.random(4), 2591 + Misc.random(4) },
{ splater, 2644 + Misc.random(4), 2575 + Misc.random(4) },
{ splater, 2633 + Misc.random(4), 2595 + Misc.random(4) }};
public void process() {
try {
if (properTimer > 0) {
properTimer--;
return;
} else {
properTimer = 1;
}
waitBoat();
if (waitTimer > 0) {
waitTimer--;
} else if (waitTimer == 0) {
startGame();
}
if (KNIGHTS_HEALTH == 0) {
endGame(false);
}
if (gameStarted && playersInGame() < 1) {
endGame(false);
}
if (gameTimer > 0 && gameStarted) {
gameTimer--;
setGameInterface();
if (allPortalsDead() || allPortalsDead3()) {
endGame(true);
}
} else if (gameTimer <= 0 && gameStarted) {
endGame(false);
}
} catch (RuntimeException e) {
System.out.println("Failed to set process");
e.printStackTrace();
}
}
/**
* Method we use for removing a player from the pc game
*
* @param player
* The Player.
*/
public static void removePlayerGame(Player player) {
if (gamePlayers.containsKey(player)) {
player.getPlayerAssistant().movePlayer(2657, 2639, 0);
gamePlayers.remove(player);
}
}
private static void waitBoat() {
for (final Player c : waitingBoat.keySet()) {
if (c != null) {
if (gameStarted && isInPcBoat(c)) {
c.getPacketSender().sendMessage("Next Departure: " + (waitTimer + gameTimer) / 60 + " minutes");
} else {
c.getPacketSender().sendMessage("Next Departure: " + waitTimer + " seconds.");
}
}
}
}
public static void setGameInterface() {
for (final Player player : gamePlayers.keySet()) {
if (player != null) {
if (gameTimer > 60) {
player.getPacketSender().sendMessage("Time remaining: " + gameTimer / 60 + " minutes");
} else if (gameTimer < 60) {
player.getPacketSender().sendMessage("Time remaining: " + gameTimer + " seconds");
}
player.getPacketSender().sendMessage("The knights current health is " + KNIGHTS_HEALTH + ".");
player.getPacketSender().sendMessage("Your current pc damage is " + player.pcDamage + ".");
}
}
}
/***
* Moving players to arena if there's enough players
*/
private void startGame() {
if (playersInBoat() < PLAYERS_REQUIRED) {
waitTimer = WAIT_TIMER;
return;
}
for (int i = 0; i < portalHealth.length; i++) {
portalHealth[i] = 200;
}
gameStarted = true;
gameTimer = 400;
KNIGHTS_HEALTH = 250;
waitTimer = -1;
spawnNPC();
setGameInterface();
for (Player player : waitingBoat.keySet()) {
int team = waitingBoat.get(player);
if (player == null) {
continue;
}
player.getPlayerAssistant().movePlayer(2656 + Misc.random3(3), 2614 - Misc.random3(4), 0);
player.getDialogueHandler().sendDialogues(599, 3790);
player.getPacketSender().sendMessage("The Pest Control game has begun!");
player.npcCanAttack = true;
gamePlayers.put(player, team);
}
waitingBoat.clear();
}
/**
* Checks how many players are in the waiting lobby
*
* @return players waiting
*/
private static int playersInBoat() {
int players = 0;
for (Player player : waitingBoat.keySet()) {
if (player != null) {
players++;
}
if (player == null) {
players--;
}
}
return players;
}
/**
* Checks how many players are in the game
* @return players in the game
*/
private int playersInGame() {
int players = 0;
for (Player player : gamePlayers.keySet()) {
if (player != null) {
players++;
}
if (player == null) {
players--;
}
}
return players;
}
private void endGame(boolean won) {
for (Player player : gamePlayers.keySet()) {
if (player == null) {
continue;
}
player.getPlayerAssistant().movePlayer(2657, 2639, 0);
if (won && player.pcDamage > 50) {
player.getDialogueHandler().sendDialogues(598, 3790);
int POINT_REWARD = 4;
player.getPacketSender().sendMessage(
"You have won the pest control game and have been awarded "
+ POINT_REWARD + " Pest Control points.");
player.pcPoints += POINT_REWARD;
player.getItemAssistant().addItem(995, player.combatLevel * 10);
} else if (won) {
player.getDialogueHandler().sendDialogues(596, 3790);
int POINT_REWARD2 = 2;
player.pcPoints += POINT_REWARD2;
player.getPacketSender().sendMessage(
"The void knights notice your lack of zeal. You only gain "
+ POINT_REWARD2 + " points.");
} else {
player.getDialogueHandler().sendDialogues(597, 3790);
player.getPacketSender()
.sendMessage(
"You failed to kill all the portals in 3 minutes and have not been awarded points.");
}
}
cleanUpPlayer();
cleanUp();
}
/**
* Resets the game variables and map
*/
private void cleanUp() {
gameTimer = -1;
KNIGHTS_HEALTH = -1;
waitTimer = WAIT_TIMER;
gameStarted = false;
gamePlayers.clear();
/*
* Removes the npcs from the game if any left over for whatever reason
*/
for (int[] aPcNPCData : pcNPCData) {
for (int j = 0; j < NpcHandler.npcs.length; j++) {
if (NpcHandler.npcs[j] != null) {
if (NpcHandler.npcs[j].npcType == aPcNPCData[0]) {
NpcHandler.npcs[j] = null;
}
}
}
}
for (int[] aPcNPCData : voidMonsterData) {
for (int j = 0; j < NpcHandler.npcs.length; j++) {
if (NpcHandler.npcs[j] != null) {
if (NpcHandler.npcs[j].npcType == aPcNPCData[0]) {
NpcHandler.npcs[j] = null;
}
}
}
}
}
/**
* Cleans the player of any damage, loss they may of received
*/
private void cleanUpPlayer() {
for (Player player : gamePlayers.keySet()) {
player.poisonDamage = 0;
PrayerDrain.resetPrayers(player);
for (int i = 0; i < 24; i++) {
player.playerLevel[i] = player.getPlayerAssistant().getLevelForXP(player.playerXP[i]);
player.getPlayerAssistant().refreshSkill(i);
}
player.specAmount = 10;
player.pcDamage = 0;
player.getItemAssistant().addSpecialBar(player.playerEquipment[player.playerWeapon]);
}
}
/**
* Checks if the portals are dead
*
* @return players dead
*/
private static boolean allPortalsDead() {
int count = 0;
for (int aPortalHealth : portalHealth) {
if (aPortalHealth <= 0) {
count++;
// System.out.println("Portal Health++" + count);
}
}
return count >= 4;
}
public boolean allPortalsDead3() {
int count = 0;
for (Npc npc : NpcHandler.npcs) {
if (npc != null) {
if (npc.npcType > 3777 && npc.npcType < 3780) {
if (npc.needRespawn) {
count++;
}
}
}
}
return count >= 4;
}
/**
* Moves a player out of the waiting boat
*
* @param player
* Client c
*/
public static void leaveWaitingBoat(Player player) {
if (waitingBoat.containsKey(player)) {
waitingBoat.remove(player);
player.getPlayerAssistant().movePlayer(2657, 2639, 0);
}
}
/**
* Moves a player into the hash and into the lobby
*
* @param player
* The player
*/
public static void addToWaitRoom(Player player) {
if (player != null && player.combatLevel > 39) {
waitingBoat.put(player, 1);
player.getPacketSender().sendMessage(
"You have joined the Pest Control boat.");
player.getPacketSender().sendMessage(
"You currently have " + player.pcPoints
+ " Pest Control Points.");
player.getPacketSender().sendMessage(
"There are currently " + playersInBoat()
+ " players ready in the boat.");
player.getPacketSender().sendMessage(
"Players needed: " + PLAYERS_REQUIRED + " to 25 players.");
player.getPlayerAssistant().movePlayer(2661, 2639, 0);
waitBoat();
} else if (player.combatLevel < 40) {
player.getPacketSender().sendMessage("You need 40 combat to play pest control.");
}
}
/**
* Checks if a player is in the game
*
* @param player
* The player
* @return return
*/
public static boolean isInGame(Player player) {
return gamePlayers.containsKey(player);
}
/**
* Checks if a player is in the pc boat (lobby)
*
* @param player
* The player
* @return return
*/
public static boolean isInPcBoat(Player player) {
return waitingBoat.containsKey(player);
}
public static boolean npcIsPCMonster(int npcType) {
return (npcType >= 3727 && npcType <= 3776);
}
public static boolean isPCPortal(int npcType) {
return (npcType >= 3777 && npcType <= 3780);
}
private void spawnNPC() {
//npcid, npcx, npcy, heightlevel, walking type, hp, att, def
for (int[] aPcNPCData : pcNPCData) {
GameEngine.npcHandler.spawnNpc2(aPcNPCData[0], aPcNPCData[1], aPcNPCData[2], 0, 0, 200, 0, 0, playersInGame() * 200, false);
}
for (int[] voidMonsters : voidMonsterData) {
//GameEngine.npcHandler.spawnNpc2(voidMonsters[0], voidMonsters[1], voidMonsters[2], 0, 1, voidMonsters[NpcHandler.getNpcListHP(voidMonsters[0])], NpcHandler.getNpcListCombat(voidMonsters[0])/10, NpcHandler.getNpcListCombat(voidMonsters[0]), playersInGame() * 200);
GameEngine.npcHandler.spawnNpc2(voidMonsters[0], voidMonsters[1], voidMonsters[2], 0, 1, 50, 20, 75, 50, true);
}
}
}
@@ -0,0 +1,418 @@
package com.rs2.game.content.minigames;
import com.rs2.game.players.Player;
import com.rs2.util.Misc;
public class TreasureTrails {
public static int lowLevelReward[] = {
// Weapons
853, // Maple shortbow
851, // Maple longbow
1327, // Black scimitar
1233, // Black Dagger (p)
5682, // Black Dagger (p+)
5700, // Black Dagger (p++)
6611, // White scimitar
6591, // White dagger
6593, // White dagger(p)
6595, // White dagger(p+)
6597, // White dagger(p++)
6599, // White halberd
6603, // White magic staff
// Armor
6619, // White boots
6615, // White chainbody
6623, // White full helm
6629, // White gloves
6633, // White kiteshield
6617, // White platebody
6625, // White platelegs
6627, // White plateskirt
6631, // White sq shield
2587, // Black full helm (t)
2589, // Black kiteshield (t)
2583, // Black platebody (t)
2585, // Black platelegs (t)
3472, // Black plateskirt (t)
2595, // Black full helm (g)
2597, // Black kiteshield (g)
2591, // Black platebody (g)
2593, // Black platelegs (g)
3473, // Black plateskirt (g)
7388, // Blue skirt (t)
7396, // Blue wizard hat (t)
7392, // Blue wizard robe (t)
7386, // Blue skirt (g)
7394, // Blue wizard hat (g)
7390, // Blue wizard robe (g)
7364, // Studded body (t)
7368, // Studded chaps (t)
7362, // Studded body (g)
7366, // Studded chaps (g)
// Jewelery
1639, // Emerald ring
1641, // Ruby ring
1637, // Sapphire ring
// Misc
2524, // Black toy horsey
2520, // Brown toy horsey
2526, // Grey toy horsey
2522, // White toy horsey
6541, // Mouse toy
7771, // Toy cat
7767, // Toy mouse
7763, // Toy doll
3721, // Toy ship
7759, // Toy soldier
6856, // Bobble hat
2978, // Chompy bird hat
2979, // Chompy bird hat
2980, // Chompy bird hat
2981, // Chompy bird hat
2982, // Chompy bird hat
2983, // Chompy bird hat
2984, // Chompy bird hat
2985, // Chompy bird hat
2986, // Chompy bird hat
2987, // Chompy bird hat
2988, // Chompy bird hat
2989, // Chompy bird hat
2990, // Chompy bird hat
2991, // Chompy bird hat
2992, // Chompy bird hat
2993, // Chompy bird hat
2994, // Chompy bird hat
2995, // Chompy bird hat
6345, // Villager hat
6355, // Villager hat
6365, // Villager hat
6375, // Villager hat
6862, // Woolly hat
6860, // Tri-jester hat
6858, // Jester hat
6182, // Lederhosen hat
6547, // Doctors hat
6548, // Nurse hat
6665, // Mudskipper hat
};
public static int mediumLevelReward[] = {
// Weapons
1329, // Mithril scimitar
1331, // Adamant scimitar
1397, // Air battlestaff
1399, // Earth battlestaff
1393, // Fire battlestaff
3053, // Lava battlestaff
6562, // Mud battlestaff
1395, // Water battlestaff
857, // Yew shortbow
855, // Yew longbow
// Armor
2605, // Adamant full helm (t)
2603, // Adamant kiteshield (t)
2599, // Adamant platebody (t)
2601, // Adamant platelegs (t)
3474, // Adamant plateskirt (t)
2613, // Adamant full helm (g)
2611, // Adamant kiteshield (g)
2607, // Adamant platebody (g)
2609, // Adamant platelegs (g)
3475, // Adamant plateskirt (g)
7372, // Green d'hide body (t)
7380, // Green d'hide chaps (t)
7370, // Green d'hide body (g)
7378, // Green d'hide chaps (g)
// Jewelery
2568, // Ring of forging
2570, // Ring of life
2550, // Ring of recoil
1727, // Amulet of magic
1725, // Amulet of strength
// Misc
2581, // Robin hood hat
2577, // Ranger boots
2651, // Pirate's hat
2631, //Highwayman mask
};
public static int highLevelReward[] = {
// Weapons
1333, // Rune scimitar
1229, // Rune dagger(p)
5678, // Rune dagger(p+)
5696, // Rune dagger(p++)
1215, // Dragon dagger
1231, // Dragon dagger(p)
5680, // Dragon dagger(p+)
5698, // Dragon dagger(p++)
1249, // Dragon spear
3176, // Dragon spear(kp)
1263, // Dragon spear(p)
5716, // Dragon spear(p+)
5730, // Dragon spear(p++)
1359, // Rune axe
6739, // Dragon axe
3054, // Mystic lava staff
6563, // Mystic mud staff
1403, // Mystic water staff
1405, // Mystic air staff
1407, // Mystic earth staff
1401, // Mystic fire staff
861, // Magic shortbow
859, // Magic longbow
// Armor
3486, // Gilded full helm
3488, // Gilded kiteshield
3481, // Gilded platebody
3483, // Gilded platelegs
3485, // Gilded plateskirt
2627, // Rune full helm (t)
2629, // Rune kiteshield (t)
2623, // Rune platebody (t)
2625, // Rune platelegs (t)
3477, // Rune plateskirt (t)
2619, // Rune full helm (g)
2621, // Rune kiteshield (g)
2615, // Rune platebody (g)
2617, // Rune platelegs (g)
3476, // Rune plateskirt (g)
7400, // Enchanted hat
7398, // Enchanted robe
7399, // Enchanted top
6920, // Infinity boots
6924, // Infinity bottoms
6922, // Infinity gloves
6918, // Infinity hat
6916, // Infinity top
4097, // Mystic boots
4107, // Mystic boots (dark)
4117, // Mystic boots (light)
4095, // Mystic gloves
4105, // Mystic gloves (dark)
4115, // Mystic gloves (light)
4089, // Mystic hat
4099, // Mystic hat (dark)
4109, // Mystic hat (light)
4093, // Mystic robe bottom
4103, // Mystic robe bottom (dark)
4113, // Mystic robe bottom (light)
4091, // Mystic robe top
4101, // Mystic robe top (dark)
4111, // Mystic robe top (light)
7376, // Blue d'hide body (t)
7384, // Blue d'hide chaps (t)
7374, // Blue d'hide body (g)
7382, // Blue d'hide chaps (g)
2491, // Black d'hide vamb
2497, // Black d'hide chaps
2503, // Black d'hide body
2513, // Dragon chainbody
1149, // Dragon med helm
4087, // Dragon platelegs
4585, // Dragon plateskirt
1187, // Dragon sq shield
2414, // Zamorak cape
2657, // Zamorak full helm
2659, // Zamorak kiteshield
2653, // Zamorak platebody
2655, // Zamorak platelegs
3478, // Zamorak plateskirt
2413, // Guthix cape
2673, // Guthix full helm
2675, // Guthix kiteshield
2669, // Guthix platebody
2671, // Guthix platelegs
3480, // Guthix plateskirt
2412, // Saradomin cape
2665, // Saradomin full helm
2667, // Saradomin kiteshield
2661, // Saradomin platebody
2663, // Saradomin platelegs
3479, // Saradomin plateskirt
// Jewelery
1631, // Uncut dragonstone
1615, // Dragonstone
1702, // Dragonstone amulet
1645, // Dragonstone ring
2572, // Ring of wealth
2552, // Ring of dueling(8)
6733, // Archers ring
6737, // Berserker ring
6040, // Amulet of nature
1497, // Amulet of othanian
1731, // Amulet of power
6585, // Amulet of fury
// Misc
7927, // Easter ring
1050, // Santa hat
1042, // Blue partyhat
1044, // Green partyhat
1046, // Purple partyhat
1038, // Red partyhat
1048, // White partyhat
1040, // Yellow partyhat
};
public static int lowLevelStacks[] = {
995, // Coins
380, // Lobster
555, // Water rune
558, // Mind rune
556, // Air rune
559, // Body rune
557, // Earth rune
554, // Fire rune
884, // Iron arrow
885, // Iron arrow(p)
5617, // Iron arrow(p+)
5623, // Iron arrow(p++)
};
public static int mediumLevelStacks[] = {
995, // Coins
374, // Swordfish
890, // Adamant arrow
891, // Adamant arrow(p)
5620, // Adamant arrow(p+)
5626, // Adamant arrow(p++)
563, // Law rune
561, // Nature rune
562, // Chaos rune
564, // Cosmic rune
};
public static int highLevelStacks[] = {
995, // Coins
386, // Shark
892, // Rune arrow
893, // Rune arrow(p)
5621, // Rune arrow(p+)
5627, // Rune arrow(p++)
4697, // Smoke rune
566, // Soul rune
4694, // Steam rune
4699, // Lava rune
4695, // Mist rune
4698, // Mud rune
565, // Blood rune
560, // Death rune
4696, // Dust rune
535, // Babydragon bones
537, // Dragon bones
};
public static void addClueReward(Player player, int clueLevel) {
int chanceReward = Misc.random(2);
if (clueLevel == 0) {
switch (chanceReward) {
case 0:
displayReward(player,
Misc.randomArrayItem(lowLevelReward), 1,
Misc.randomArrayItem(lowLevelReward), 1,
Misc.randomArrayItem(lowLevelReward), 1,
Misc.randomArrayItem(lowLevelStacks), Misc.random(50, 150)
);
break;
case 1:
displayReward(player,
Misc.randomArrayItem(lowLevelReward), 1,
Misc.randomArrayItem(lowLevelReward), 1,
Misc.randomArrayItem(lowLevelStacks), Misc.random(50, 150)
);
break;
case 2:
displayReward(player,
Misc.randomArrayItem(lowLevelReward), 1,
Misc.randomArrayItem(lowLevelStacks), Misc.random(50, 150)
);
break;
}
} else if (clueLevel == 1) {
switch (chanceReward) {
case 0:
displayReward(player,
Misc.randomArrayItem(mediumLevelReward), 1,
Misc.randomArrayItem(mediumLevelReward), 1,
Misc.randomArrayItem(mediumLevelReward), 1,
Misc.randomArrayItem(mediumLevelStacks), Misc.random(50, 150)
);
break;
case 1:
displayReward(player,
Misc.randomArrayItem(mediumLevelReward), 1,
Misc.randomArrayItem(mediumLevelReward), 1,
Misc.randomArrayItem(mediumLevelStacks), Misc.random(50, 150)
);
break;
case 2:
displayReward(player,
Misc.randomArrayItem(mediumLevelReward), 1,
Misc.randomArrayItem(mediumLevelStacks), Misc.random(50, 150)
);
break;
}
} else if (clueLevel == 2) {
switch (chanceReward) {
case 0:
displayReward(player,
Misc.randomArrayItem(highLevelReward), 1,
Misc.randomArrayItem(highLevelReward), 1,
Misc.randomArrayItem(highLevelReward), 1,
Misc.randomArrayItem(highLevelStacks), Misc.random(50, 150)
);
break;
case 1:
displayReward(player,
Misc.randomArrayItem(highLevelReward), 1,
Misc.randomArrayItem(highLevelReward), 1,
Misc.randomArrayItem(highLevelStacks), Misc.random(50, 150)
);
break;
case 2:
displayReward(player,
Misc.randomArrayItem(highLevelReward), 1,
Misc.randomArrayItem(highLevelStacks), Misc.random(50, 150)
);
break;
}
}
}
public static void displayReward(Player c, int item, int amount) {
displayReward(c, item, amount, -1, 1);
}
public static void displayReward(Player c, int item, int amount, int item2, int amount2) {
displayReward(c, item, amount, item2, amount2, -1, 1);
}
public static void displayReward(Player c, int item, int amount, int item2, int amount2, int item3, int amount3) {
displayReward(c, item, amount, item2, amount2, item3, amount3, -1, 1);
}
public static void displayReward(Player c, int item, int amount, int item2, int amount2, int item3, int amount3, int item4, int amount4) {
int[] items = { item, item2, item3, item4 };
int[] amounts = { amount, amount2, amount3, amount4 };
c.outStream.createFrameVarSizeWord(53);
c.outStream.writeWord(6963);
c.outStream.writeWord(items.length);
for (int i = 0; i < items.length; i++) {
if (c.playerItemsN[i] > 254) {
c.outStream.writeByte(255);
c.outStream.writeDWord_v2(amounts[i]);
} else {
c.outStream.writeByte(amounts[i]);
}
if (items[i] > 0) {
c.outStream.writeWordBigEndianA(items[i] + 1);
} else {
c.outStream.writeWordBigEndianA(0);
}
}
c.outStream.endFrameVarSizeWord();
c.flushOutStream();
for (int i = 0; i < items.length; i++) {
if (items[i] > 0) c.getItemAssistant().addOrDropItem(items[i], amounts[i]);
}
c.getPacketSender().showInterface(6960);
}
}
@@ -0,0 +1,280 @@
package com.rs2.game.content.minigames.castlewars;
import com.rs2.game.players.Player;
public class CastleWarObjects {
public static void handleObject(Player player, int id, int x, int y) {
switch (id) {
case 4469:
if (CastleWars.getTeamNumber(player) == 2) {
player.getPacketSender().sendMessage(
"You are not allowed in the other teams spawn point.");
break;
}
if (x == 2426) {
if (player.getY() == 3080) {
player.getPlayerAssistant()
.movePlayer(2426, 3081, player.heightLevel);
} else if (player.getY() == 3081) {
player.getPlayerAssistant()
.movePlayer(2426, 3080, player.heightLevel);
}
} else if (x == 2422) {
if (player.getX() == 2422) {
player.getPlayerAssistant()
.movePlayer(2423, 3076, player.heightLevel);
} else if (player.getX() == 2423) {
player.getPlayerAssistant()
.movePlayer(2422, 3076, player.heightLevel);
}
}
break;
case 4470:
if (CastleWars.getTeamNumber(player) == 1) {
player.getPacketSender().sendMessage(
"You are not allowed in the other teams spawn point.");
break;
}
if (x == 2373 && y == 3126) {
if (player.getY() == 3126) {
player.getPlayerAssistant().movePlayer(2373, 3127, 1);
} else if (player.getY() == 3127) {
player.getPlayerAssistant().movePlayer(2373, 3126, 1);
}
} else if (x == 2377 && y == 3131) {
if (player.getX() == 2376) {
player.getPlayerAssistant().movePlayer(2377, 3131, 1);
} else if (player.getX() == 2377) {
player.getPlayerAssistant().movePlayer(2376, 3131, 1);
}
}
break;
case 4417:
if (x == 2428 && y == 3081 && player.heightLevel == 1) {
player.getPlayerAssistant().movePlayer(2430, 3080, 2);
}
if (x == 2425 && y == 3074 && player.heightLevel == 2) {
player.getPlayerAssistant().movePlayer(2426, 3074, 3);
}
if (x == 2419 && y == 3078 && player.heightLevel == 0) {
player.getPlayerAssistant().movePlayer(2420, 3080, 1);
}
break;
case 4415:
if (x == 2419 && y == 3080 && player.heightLevel == 1) {
player.getPlayerAssistant().movePlayer(2419, 3077, 0);
}
if (x == 2430 && y == 3081 && player.heightLevel == 2) {
player.getPlayerAssistant().movePlayer(2427, 3081, 1);
}
if (x == 2425 && y == 3074 && player.heightLevel == 3) {
player.getPlayerAssistant().movePlayer(2425, 3077, 2);
}
if (x == 2374 && y == 3133 && player.heightLevel == 3) {
player.getPlayerAssistant().movePlayer(2374, 3130, 2);
}
if (x == 2369 && y == 3126 && player.heightLevel == 2) {
player.getPlayerAssistant().movePlayer(2372, 3126, 1);
}
if (x == 2380 && y == 3127 && player.heightLevel == 1) {
player.getPlayerAssistant().movePlayer(2380, 3130, 0);
}
break;
case 4411: // castle wars jumping stones
if (x == player.getX() && y == player.getY()) {
player.getPacketSender().sendMessage("You are standing on the rock you clicked.");
} else if (x > player.getX() && y == player.getY()) {
player.getPlayerAssistant().walkTo(1, 0);
} else if (x < player.getX() && y == player.getY()) {
player.getPlayerAssistant().walkTo(-1, 0);
} else if (y > player.getY() && x == player.getX()) {
player.getPlayerAssistant().walkTo(0, 1);
} else if (y < player.getY() && x == player.getX()) {
player.getPlayerAssistant().walkTo(0, -1);
} else {
player.getPacketSender().sendMessage("Can't reach that.");
}
break;
case 4419:
if (x == 2417 && y == 3074 && player.heightLevel == 0) {
if (player.getX() == 2416) {
player.getPlayerAssistant().movePlayer(2417, 3077, 0);
} else {
player.getPlayerAssistant().movePlayer(2416, 3074, 0);
}
}
break;
case 4911:
if (x == 2421 && y == 3073 && player.heightLevel == 1) {
player.getPlayerAssistant().movePlayer(2421, 3074, 0);
}
if (x == 2378 && y == 3134 && player.heightLevel == 1) {
player.getPlayerAssistant().movePlayer(2378, 3133, 0);
}
break;
case 1747:
if (x == 2421 && y == 3073 && player.heightLevel == 0) {
player.getPlayerAssistant().movePlayer(2421, 3074, 1);
}
if (x == 2378 && y == 3134 && player.heightLevel == 0) {
player.getPlayerAssistant().movePlayer(2378, 3133, 1);
}
break;
case 4912:
if (x == 2430 && y == 3082 && player.heightLevel == 0) {
player.getPlayerAssistant().movePlayer(player.getX(), player.getY() + 6400, 0);
}
if (x == 2369 && y == 3125 && player.heightLevel == 0) {
player.getPlayerAssistant().movePlayer(player.getX(), player.getY() + 6400, 0);
}
break;
case 1757:
if (x == 2430 && y == 9482) {
player.getPlayerAssistant().movePlayer(2430, 3081, 0);
} else if (player.absX == 2533) {
player.getPlayerAssistant().movePlayer(2532, 3155, 0);
} else {
player.getPlayerAssistant().movePlayer(2369, 3126, 0);
}
break;
case 4418:
if (x == 2380 && y == 3127 && player.heightLevel == 0) {
player.getPlayerAssistant().movePlayer(2379, 3127, 1);
}
if (x == 2369 && y == 3126 && player.heightLevel == 1) {
player.getPlayerAssistant().movePlayer(2369, 3127, 2);
}
if (x == 2374 && y == 3131 && player.heightLevel == 2) {
player.getPlayerAssistant().movePlayer(2373, 3133, 3);
}
break;
case 4420:
if (x == 2382 && y == 3131 && player.heightLevel == 0) {
if (player.getX() >= 2383 && player.getX() <= 2385) {
player.getPlayerAssistant().movePlayer(2382, 3130, 0);
} else {
player.getPlayerAssistant().movePlayer(2383, 3133, 0);
}
}
break;
case 4437:
if (x == 2400 && y == 9512) {
player.getPlayerAssistant().movePlayer(2400, 9514, 0);
} else if (x == 2391 && y == 9501) {
player.getPlayerAssistant().movePlayer(2393, 9502, 0);
} else if (x == 2409 && y == 9503) {
player.getPlayerAssistant().movePlayer(2411, 9503, 0);
} else if (x == 2401 && y == 9494) {
player.getPlayerAssistant().movePlayer(2401, 9493, 0);
}
break;
case 1568:
if (x == 2399 && y == 3099) {
player.getPlayerAssistant().movePlayer(2399, 9500, 0);
} else {
player.getPlayerAssistant().movePlayer(2400, 9507, 0);
}
case 6281:
player.getPlayerAssistant().movePlayer(2370, 3132, 2);
break;
case 4472:
player.getPlayerAssistant().movePlayer(2370, 3132, 1);
break;
case 6280:
player.getPlayerAssistant().movePlayer(2429, 3075, 2);
break;
case 4471:
player.getPlayerAssistant().movePlayer(2429, 3075, 1);
break;
case 4406:
CastleWars.removePlayerFromCw(player);
break;
case 4407:
CastleWars.removePlayerFromCw(player);
break;
case 4458:
if (System.currentTimeMillis() - player.miscTimer > 1200) {
player.startAnimation(881);
player.getItemAssistant().addItem(4049, 1);
player.getPacketSender().sendMessage("You get some bandages");
player.miscTimer = System.currentTimeMillis();
}
break;
case 4902: // sara flag
case 4377:
switch (CastleWars.getTeamNumber(player)) {
case 1:
CastleWars.returnFlag(player, player.playerEquipment[player.playerWeapon]);
break;
case 2:
CastleWars.captureFlag(player);
break;
}
break;
case 4903: // zammy flag
case 4378:
switch (CastleWars.getTeamNumber(player)) {
case 1:
CastleWars.captureFlag(player);
break;
case 2:
CastleWars.returnFlag(player, player.playerEquipment[player.playerWeapon]);
break;
}
break;
case 4461: // barricades
if (System.currentTimeMillis() - player.miscTimer > 1200) {
player.getPacketSender().sendMessage("You get a barricade!");
player.getItemAssistant().addItem(4053, 1);
player.miscTimer = System.currentTimeMillis();
}
break;
case 4463: // explosive potion!
if (System.currentTimeMillis() - player.miscTimer > 1200) {
player.getPacketSender().sendMessage(
"You get an explosive potion!");
player.getItemAssistant().addItem(4045, 1);
player.miscTimer = System.currentTimeMillis();
}
break;
case 4464: // pickaxe table
if (System.currentTimeMillis() - player.miscTimer > 1200) {
player.getPacketSender().sendMessage(
"You get a bronzen pickaxe for mining.");
player.getItemAssistant().addItem(1265, 1);
player.miscTimer = System.currentTimeMillis();
}
break;
case 4459: // tinderbox table
if (System.currentTimeMillis() - player.miscTimer > 1200) {
player.getPacketSender().sendMessage("You take a tinderbox!");
player.getItemAssistant().addItem(590, 1);
player.miscTimer = System.currentTimeMillis();
}
break;
case 4462:
if (System.currentTimeMillis() - player.miscTimer > 1200) {
player.getPacketSender().sendMessage("You take some rope!");
player.getItemAssistant().addItem(954, 1);
player.miscTimer = System.currentTimeMillis();
}
break;
case 4460:
if (System.currentTimeMillis() - player.miscTimer > 1200) {
player.getPacketSender().sendMessage("You take a rock!");
player.getItemAssistant().addItem(4043, 1);
player.miscTimer = System.currentTimeMillis();
}
break;
case 4900:
case 4901:
CastleWars.pickupFlag(player);
default:
break;
}
}
}
@@ -0,0 +1,828 @@
package com.rs2.game.content.minigames.castlewars;
import java.util.HashMap;
import java.util.Iterator;
import com.rs2.game.items.ItemAssistant;
import com.rs2.game.players.Player;
import com.rs2.util.Misc;
/**
* @Author Sanity for base
* @Author Satan666
* @Author Andrew (Mr Extremez) fixing it up
*/
public class CastleWars {
/*
* Game timers.
*/
private static final int GAME_TIMER = 200; // 1500 * 600 = 900000ms = 15
// minutes
private static final int GAME_START_TIMER = 30;
/*
* Hashmap for the waitingroom players
*/
private static HashMap<Player, Integer> waitingRoom = new HashMap<Player, Integer>();
/*
* hashmap for the gameRoom players
*/
private static HashMap<Player, Integer> gameRoom = new HashMap<Player, Integer>();
/*
* The coordinates for the waitingRoom both sara/zammy
*/
private static final int[][] WAIT_ROOM = { { 2377, 9485 }, // sara
{ 2421, 9524 } // zammy
};
/*
* The coordinates for the gameRoom both sara/zammy
*/
private static final int[][] GAME_ROOM = { { 2426, 3076 }, // sara
{ 2372, 3131 } // zammy
};
private static final int[][] FLAG_STANDS = { { 2429, 3074 }, // sara
// {X-Coord,
// Y-Coord)
{ 2370, 3133 } // zammy
};
/*
* Scores for saradomin and zamorak!
*/
private static int[] scores = { 0, 0 };
/*
* Booleans to check if a team's flag is safe
*/
private static int zammyFlag = 0;
private static int saraFlag = 0;
/*
* Zamorak and saradomin banner/capes item ID's
*/
public static final int SARA_BANNER = 4037;
public static final int ZAMMY_BANNER = 4039;
public static final int SARA_CAPE = 4041;
public static final int ZAMMY_CAPE = 4042;
public static final int SARA_HOOD = 4513;
public static final int ZAMMY_HOOD = 4515;
public static boolean deleteCastleWarsItems(Player c, int itemId) {
int[] items = { 4049, 4045, 4053, 4042, 4041, 4037, 4039, 4043 };
for (int item : items) {
int amount = c.getItemAssistant().getItemAmount(item);
if (itemId == item && !isInCw(c)) {
c.getItemAssistant().deleteItem(item, amount);
c.getPacketSender().sendMessage("You shouldn't have " + ItemAssistant.getItemName(itemId) + " outside of castlewars!");
return false;
}
}
return true;
}
private static final int[][] COLLAPSE_ROCKS = { // collapsing rocks coords
{ 2399, 2402, 9511, 9514 }, // north X Y coords sara 0
{ 2390, 2393, 9500, 9503 }, // east X Y coords sara 1
{ 2400, 2403, 9493, 9496 }, // south X Y coords zammy 2
{ 2408, 2411, 9502, 9505 } // west X Y coords zammy 3
};
/*
*
*/
private static int properTimer = 0;
private static int timeRemaining = -1;
private static int gameStartTimer = GAME_START_TIMER;
private static boolean gameStarted = false;
public static void resetPlayer(Player player) {
player.getPlayerAssistant().movePlayer(2440 + Misc.random(3), 3089 - Misc.random(3), 0);
deleteGameItems(player);
player.getPacketSender().sendMessage("Cheating will not be tolerated.");
}
public static void collapseCave(int cave) {
Iterator<Player> iterator = gameRoom.keySet().iterator();
while (iterator.hasNext()) {
Player teamPlayer = iterator.next();
if (teamPlayer.absX > COLLAPSE_ROCKS[cave][0]
&& teamPlayer.absX < COLLAPSE_ROCKS[cave][1]
&& teamPlayer.absY > COLLAPSE_ROCKS[cave][2]
&& teamPlayer.absY < COLLAPSE_ROCKS[cave][3]) {
int dmg = teamPlayer.playerLevel[3];
teamPlayer.handleHitMask(dmg);
teamPlayer.dealDamage(99);// 99 damage?
}
}
}
/**
* Method we use to add someone to the waitinroom in a different method,
* this will filter out some error messages
*
* @param p
* the player that wants to join
* @param team
* the team!
*/
public static void addToWaitRoom(Player p, int team) {
if (p == null) {
return;
} else if (gameStarted) {
p.getPacketSender()
.sendMessage(
"There's already a Castle Wars going. Please wait a few minutes before trying again.");
return;
} else if (p.playerEquipment[p.playerHat] > 0 || p.playerEquipment[p.playerCape] > 0 || p.getItemAssistant().playerHasItem(p.playerCape) || p.getItemAssistant().playerHasItem(p.playerHat)) {
p.getPacketSender().sendMessage("You may not bring capes or helmets in castle wars.");
return;
}
toWaitingRoom(p, team);
}
/**
* Method we use to transfer to player from the outside to the waitingroom
* (:
*
* @param p
* the player that wants to join
* @param team
* team he wants to be in - team = 1 (saradomin), team = 2
* (zamorak), team = 3 (random)
*/
public static void toWaitingRoom(Player p, int team) {
int[] food = { 391, 385, 379, 333, 329, 373, 361, 7946, 397, 1891, 365,
339, 1942, 6701, 6705, 7056, 7054, 7058, 7060, 315, 347, 325,
1897, 2289, 2293, 2297, 2301, 2309, 2323, 2325, 2327, 351,
6703, 1963, 6883, 2108, 2118, 2116, 15272, 1961, 1959, 1989,
1935, 1915, 1978, 712, 1907, 2120, 2114, 1973, 1993, 355,
3144, 1917, 1909, 2955, 1969, 6701, 1893, 1895, 1965, 1899,
1901, 2291, 2295, 2297, 2299, 2301, 2303, 1883, 6883, 2108, 2118,
2116, 7928, 7929, 7930, 7931, 7932, 7933, 10476, 2130, 2003, 2011,
4049};
for (int element : food) {
if (p.getItemAssistant().playerHasItem(element)) {
p.getPacketSender().sendMessage("You may not bring your own consumables inside of Castle Wars.");
return;
}
}
if (team == 1) {
if (getSaraPlayers() > getZammyPlayers() && getSaraPlayers() > 0) {
p.getPacketSender().sendMessage(
"The saradomin team is full, try again later!");
return;
}
if (getZammyPlayers() >= getSaraPlayers() || getSaraPlayers() == 0) {
p.getPacketSender().sendMessage(
"You have been added to the Saradomin team.");
p.getPacketSender().sendMessage(
"Next Game Begins In: "
+ (gameStartTimer * 3 + timeRemaining * 3)
+ " seconds.");
addCapes(p, SARA_CAPE);
waitingRoom.put(p, team);
p.getPlayerAssistant().movePlayer(
WAIT_ROOM[team - 1][0] + Misc.random(5),
WAIT_ROOM[team - 1][1] + Misc.random(5), 0);
}
} else if (team == 2) {
if (getZammyPlayers() > getSaraPlayers() && getZammyPlayers() > 0) {
p.getPacketSender().sendMessage(
"The zamorak team is full, try again later!");
return;
}
if (getZammyPlayers() <= getSaraPlayers() || getZammyPlayers() == 0) {
p.getPacketSender()
.sendMessage(
"Random team: You have been added to the Zamorak team.");
p.getPacketSender().sendMessage(
"Next Game Begins In: "
+ (gameStartTimer * 3 + timeRemaining * 3)
+ " seconds.");
addCapes(p, ZAMMY_CAPE);
waitingRoom.put(p, team);
p.getPlayerAssistant().movePlayer(
WAIT_ROOM[team - 1][0] + Misc.random(5),
WAIT_ROOM[team - 1][1] + Misc.random(5), 0);
}
} else if (team == 3) {
toWaitingRoom(p, getZammyPlayers() > getSaraPlayers() ? 1 : 2);
return;
}
}
/**
* Method to add score to scoring team
*
* @param player
* the player who scored
* @param banner
* banner id!
*/
public static void returnFlag(Player player, int wearItem) {
if (player == null) {
return;
}
if (wearItem != SARA_BANNER && wearItem != ZAMMY_BANNER) {
return;
}
int team = gameRoom.get(player);
int objectId = -1;
int objectTeam = -1;
switch (team) {
case 1:
if (wearItem == SARA_BANNER) {
setSaraFlag(0);
objectId = 4902;
objectTeam = 0;
player.getPacketSender().sendMessage(
"Returned the sara flag!");
} else {
objectId = 4903;
objectTeam = 1;
setZammyFlag(0);
scores[0]++; // upping the score of a team; team 0 = sara,
// team 1 = zammy
player.getPacketSender().sendMessage(
"The team of Saradomin scores 1 point!");
}
break;
case 2:
if (wearItem == ZAMMY_BANNER) {
setZammyFlag(0);
objectId = 4903;
objectTeam = 1;
player.getPacketSender().sendMessage(
"Returned the zammy flag!");
} else {
objectId = 4902;
objectTeam = 0;
setSaraFlag(0);
scores[1]++; // upping the score of a team; team 0 = sara,
// team 1 = zammy
player.getPacketSender().sendMessage(
"The team of Zamorak scores 1 point!");
zammyFlag = 0;
}
break;
}
changeFlagObject(objectId, objectTeam);
player.getPacketSender().createPlayerHints(10, -1);
player.playerEquipment[player.playerWeapon] = -1;
player.playerEquipmentN[player.playerWeapon] = 0;
player.getItemAssistant().updateSlot(3);
player.appearanceUpdateRequired = true;
player.updateRequired = true;
player.getItemAssistant().resetItems(3214);
}
/**
* Method that will capture a flag when being taken by the enemy team!
*
* @param player
* the player who returned the flag
* @param team
*/
public static void captureFlag(Player player) {
if (player.playerEquipment[player.playerWeapon] > 0) {
player.getPacketSender()
.sendMessage(
"Please remove your weapon before attempting to get the flag again!");
return;
}
int team = gameRoom.get(player);
if (team == 2 && saraFlag == 0) { // sara flag
setSaraFlag(1);
addFlag(player, SARA_BANNER);
createHintIcon(player, 1);
changeFlagObject(4377, 0);
}
if (team == 1 && zammyFlag == 0) {
setZammyFlag(1);
addFlag(player, ZAMMY_BANNER);
createHintIcon(player, 2);
changeFlagObject(4378, 1);
}
}
/**
* Method that will add the flag to a player's weapon slot
*
* @param player
* the player who's getting the flag
* @param flagId
* the banner id.
*/
public static void addFlag(Player player, int flagId) {
player.playerEquipment[player.playerWeapon] = flagId;
player.playerEquipmentN[player.playerWeapon] = 1;
player.getItemAssistant().updateSlot(player.playerWeapon);
player.appearanceUpdateRequired = true;
player.updateRequired = true;
}
/**
* Method we use to handle the flag dropping
*
* @param player
* the player who dropped the flag/died
* @param flagId
* the flag item ID
*/
public static void dropFlag(Player player, int flagId) {
int object = -1;
switch (flagId) {
case SARA_BANNER: // sara
setSaraFlag(2);
object = 4900;
createFlagHintIcon(player.getX(), player.getY());
break;
case ZAMMY_BANNER: // zammy
setZammyFlag(2);
object = 4901;
createFlagHintIcon(player.getX(), player.getY());
break;
}
player.playerEquipment[player.playerWeapon] = -1;
player.playerEquipmentN[player.playerWeapon] = 0;
player.getItemAssistant().updateSlot(player.playerWeapon);
player.appearanceUpdateRequired = true;
player.updateRequired = true;
for (Player teamPlayer : gameRoom.keySet()) {
teamPlayer.getPacketSender().object(object, player.getX(), player.getY(), 0, 10);
}
}
/**
* Method we use to pickup the flag when it was dropped/lost
*
* @param Player
* the player who's picking it up
* @param objectId
* the flag object id.
*/
public static void pickupFlag(Player player) {
switch (player.objectId) {
case 4900: // sara
if (player.playerEquipment[player.playerWeapon] > 0) {
player.getPacketSender().sendMessage("Please remove your weapon before attempting to get the flag again!");
return;
}
if (saraFlag != 2) {
return;
}
setSaraFlag(1);
addFlag(player, 4037);
break;
case 4901: // zammy
if (player.playerEquipment[player.playerWeapon] > 0) {
player.getPacketSender().sendMessage("Please remove your weapon before attempting to get the flag again!");
return;
}
if (zammyFlag != 2) {
return;
}
setZammyFlag(1);
addFlag(player, 4039);
break;
}
createHintIcon(player, gameRoom.get(player) == 1 ? 2 : 1);
Iterator<Player> iterator = gameRoom.keySet().iterator();
while (iterator.hasNext()) {
Player teamPlayer = iterator.next();
teamPlayer.getPacketSender().createObjectHints(player.objectX, player.objectY, 170, -1);
teamPlayer.getPacketSender().object(-1, player.objectX, player.objectY, 0, 10);
}
return;
}
/**
* Hint icons appear to your team when a enemy steals flag
*
* @param player
* the player who took the flag
* @param t
* team of the opponent team. (:
*/
public static void createHintIcon(Player player, int t) {
Iterator<Player> iterator = gameRoom.keySet().iterator();
while (iterator.hasNext()) {
Player teamPlayer = iterator.next();
teamPlayer.getPacketSender().createPlayerHints(10, -1);
if (gameRoom.get(teamPlayer) == t) {
teamPlayer.getPacketSender().createPlayerHints(10, player.playerId);
teamPlayer.getPlayerAssistant().requestUpdates();
}
}
}
/**
* Hint icons appear to your team when a enemy steals flag
*
* @param player
* the player who took the flag
* @param t
* team of the opponent team. (:
*/
public static void createFlagHintIcon(int x, int y) {
Iterator<Player> iterator = gameRoom.keySet().iterator();
while (iterator.hasNext()) {
Player teamPlayer = iterator.next();
teamPlayer.getPacketSender().createObjectHints(x, y, 170, 2);
}
}
/**
* This method is used to get the teamNumber of a certain player
*
* @param player
* @return
*/
public static int getTeamNumber(Player player) {
if (player == null) {
return -1;
}
if (gameRoom.containsKey(player)) {
return gameRoom.get(player);
}
return -1;
}
/**
* The leaving method will be used on click object or log out
*
* @param player
* player who wants to leave
*/
public static void leaveWaitingRoom(Player player) {
if (player == null) {
System.out.println("player is null");
return;
}
if (waitingRoom.containsKey(player)) {
waitingRoom.remove(player);
player.getPacketSender().createPlayerHints(10, -1);
player.getPacketSender().sendMessage("You left your team!");
deleteGameItems(player);
player.getPlayerAssistant().movePlayer(2439 + Misc.random(4),
3085 + Misc.random(5), 0);
return;
}
player.getPlayerAssistant().movePlayer(2439 + Misc.random(4),
3085 + Misc.random(5), 0);
// System.out.println("Waiting room map does not contain " +
// player.playerName);
}
public static void process() {
if (properTimer > 0) {
properTimer--;
return;
} else {
properTimer = 4;
}
if (gameStartTimer > 0) {
gameStartTimer--;
updatePlayers();
} else if (gameStartTimer == 0) {
startGame();
}
if (timeRemaining > 0) {
timeRemaining--;
updateInGamePlayers();
} else if (timeRemaining == 0) {
endGame();
}
}
/**
* Method we use to update the player's interface in the waiting room
*/
public static void updatePlayers() {
Iterator<Player> iterator = waitingRoom.keySet().iterator();
while (iterator.hasNext()) {
Player player = iterator.next();
if (player != null) {
player.getPacketSender().sendString("Next Game Begins In: " + (gameStartTimer * 3 + timeRemaining * 3) + " seconds.", 6570);
player.getPacketSender().sendString("Zamorak Players: " + getZammyPlayers() + ".", 6572);
player.getPacketSender().sendString("Saradomin Players: " + getSaraPlayers() + ".", 6664);
player.getPacketSender().walkableInterface(6673);
}
}
}
/**
* Method we use the update the player's interface in the game room
*/
public static void updateInGamePlayers() {
if (getSaraPlayers() > 0 && getZammyPlayers() > 0) {
Iterator<Player> iterator = gameRoom.keySet().iterator();
while (iterator.hasNext()) {
Player player = iterator.next();
int config;
if (player == null) {
continue;
}
player.getPacketSender().walkableInterface(11146);
player.getPacketSender().sendString(
"Zamorak = " + scores[1], 11147);
player.getPacketSender().sendString(
scores[0] + " = Saradomin", 11148);
player.getPacketSender().sendString(
timeRemaining * 3 + " secs", 11155);
config = 2097152 * saraFlag;
player.getPacketSender().sendFrame87(378, config);
config = 2097152 * zammyFlag; // flags 0 = safe 1 = taken 2
// = dropped
player.getPacketSender().sendFrame87(377, config);
}
}
}
/*
* Method that will start the game when there's enough players.
*/
public static void startGame() {
if (getSaraPlayers() < 1 || getZammyPlayers() < 1) {
gameStartTimer = GAME_START_TIMER;
return;
}
gameStartTimer = -1;
System.out.println("Starting Castle Wars game.");
gameStarted = true;
timeRemaining = GAME_TIMER / 2;
Iterator<Player> iterator = waitingRoom.keySet().iterator();
while (iterator.hasNext()) {
Player player = iterator.next();
int team = waitingRoom.get(player);
if (player == null) {
continue;
}
player.getPacketSender().walkableInterface(-1);
player.getPlayerAssistant().movePlayer(GAME_ROOM[team - 1][0] + Misc.random(3), GAME_ROOM[team - 1][1] - Misc.random(3), 1);
player.getPlayerAssistant().movePlayer(GAME_ROOM[team - 1][0] + Misc.random(3), GAME_ROOM[team - 1][1] - Misc.random(3), 1);
gameRoom.put(player, team);
}
waitingRoom.clear();
}
/*
* Method we use to end an ongoing cw game.
*/
public static void endGame() {
Iterator<Player> iterator = gameRoom.keySet().iterator();
while (iterator.hasNext()) {
Player player = iterator.next();
int team = gameRoom.get(player);
if (player == null) {
continue;
}
player.cwGames++;
player.getPlayerAssistant().movePlayer(2440 + Misc.random(3), 3089 - Misc.random(3), 0);
player.getPacketSender().sendMessage("Castle Wars: The Castle Wars game has ended!");
player.getPacketSender().sendMessage("Castle Wars: Kills: " + player.cwKills + " Deaths: " + player.cwDeaths + " Games Played: " + player.cwGames + ".");
player.getPacketSender().createPlayerHints(10, -1);
deleteGameItems(player);
player.isDead = false;
for (int i = 0; i < 25; i++) {
player.playerLevel[i] = player
.getLevelForXP(player.playerXP[i]);
player.getPlayerAssistant().refreshSkill(i);
}
if (scores[0] == scores[1]) {
player.getItemAssistant().addItem(4067, 1);
player.getPacketSender().sendMessage(
"Tie game! You earn 1 ticket!");
} else if (team == 1) {
if (scores[0] > scores[1]) {
player.getItemAssistant().addItem(4067, 2);
player.getPacketSender()
.sendMessage(
"You won the game. You received 2 Castle Wars Tickets!");
} else if (scores[0] < scores[1]) {
player.getItemAssistant().addItem(4067, 0);
player.getPacketSender().sendMessage(
"You lost the game. You received no tickets!");
}
} else if (team == 2) {
if (scores[1] > scores[0]) {
player.getItemAssistant().addItem(4067, 2);
player.getPacketSender()
.sendMessage(
"You won the game. You received 2 Castle Wars Tickets!");
} else if (scores[1] < scores[0]) {
player.getItemAssistant().addItem(4067, 0);
player.getPacketSender().sendMessage(
"You lost the game. You received no tickets!");
;
}
}
}
resetGame();
}
/**
* reset the game variables
*/
public static void resetGame() {
changeFlagObject(4902, 0);
changeFlagObject(4903, 1);
setSaraFlag(0);
setZammyFlag(0);
timeRemaining = -1;
System.out.println("Ending Castle Wars game.");
gameStartTimer = GAME_START_TIMER;
gameStarted = false;
gameRoom.clear();
}
/**
* Method we use to remove a player from the game
*
* @param player
* the player we want to be removed
*/
public static void removePlayerFromCw(Player player) {
if (player == null) {
System.out.println("Error removing player from castle wars [REASON = null].");
return;
}
if (gameRoom.containsKey(player)) {
/*
* Logging/leaving with flag
*/
if (player.getItemAssistant().playerHasEquipped(SARA_BANNER)) {
player.getItemAssistant().removeItem(player.playerEquipment[3],
3);
setSaraFlag(0); // safe flag
} else if (player.getItemAssistant()
.playerHasEquipped(ZAMMY_BANNER)) {
player.getItemAssistant().removeItem(player.playerEquipment[3],
3);
setZammyFlag(0); // safe flag
}
deleteGameItems(player);
player.getPlayerAssistant().movePlayer(2440, 3089, 0);
player.getPacketSender().sendMessage(
"The Casle Wars game has ended for you!");
player.getPacketSender().sendMessage(
"Kills: " + player.cwKills + " Deaths: " + player.cwDeaths
+ ".");
player.getPacketSender().createPlayerHints(10, -1);
gameRoom.remove(player);
}
if (getZammyPlayers() <= 0 || getSaraPlayers() <= 0) {
endGame();
}
}
/**
* Will add a cape to a player's equip
*
* @param p
* the player
* @param capeId
* the capeId
*/
public static void addCapes(Player p, int capeId) {
p.playerEquipment[p.playerCape] = capeId;
p.playerEquipmentN[p.playerCape] = 1;
p.getItemAssistant().updateSlot(p.playerCape);
p.appearanceUpdateRequired = true;
p.updateRequired = true;
}
/**
* This method will delete all items received in game. Easy to add items to
* the array. (:
*
* @param player
* the player who want the game items deleted from.
*/
public static void deleteGameItems(Player player) {
switch (player.playerEquipment[3]) {
case 4037:
case 4039:
player.playerEquipment[3] = -1;
player.playerEquipmentN[3] = 0;
player.getItemAssistant().updateSlot(player.playerWeapon);
player.appearanceUpdateRequired = true;
player.updateRequired = true;
System.out.println(player.playerName + " removed weapon:"
+ player.playerEquipment[3]);
break;
}
switch (player.playerEquipment[1]) {
case 4042:
case 4041:
player.playerEquipment[1] = -1;
player.playerEquipmentN[1] = 0;
player.getItemAssistant().updateSlot(player.playerCape);
player.appearanceUpdateRequired = true;
player.updateRequired = true;
System.out.println(player.playerName + " removed cape: "
+ player.playerEquipment[1]);
break;
}
int[] items = { 4049, 1265, 4045, 4053, 4042, 4041, 4037, 4039, 4043 };
//4049, 4045, 4053, 4042, 4041, 4037, 4039
for (int item : items) {
if (player.getItemAssistant().playerHasItem(item)) {
player.getItemAssistant().deleteItem(item,
player.getItemAssistant().getItemAmount(item));
}
}
}
/**
* Methode we use to get the zamorak players
*
* @return the amount of players in the zamorakian team!
*/
public static int getZammyPlayers() {
int players = 0;
Iterator<Integer> iterator = !waitingRoom.isEmpty() ? waitingRoom
.values().iterator() : gameRoom.values().iterator();
while (iterator.hasNext()) {
if (iterator.next() == 2) {
players++;
}
}
return players;
}
/**
* Method we use to get the saradomin players!
*
* @return the amount of players in the saradomin team!
*/
public static int getSaraPlayers() {
int players = 0;
Iterator<Integer> iterator = !waitingRoom.isEmpty() ? waitingRoom
.values().iterator() : gameRoom.values().iterator();
while (iterator.hasNext()) {
if (iterator.next() == 1) {
players++;
}
}
return players;
}
/**
* Method we use for checking if the player is in the gameRoom
*
* @param player
* player who will be checking
* @return
*/
public static boolean isInCw(Player player) {
return gameRoom.containsKey(player);
}
/**
* Method we use for checking if the player is in the waitingRoom
*
* @param player
* player who will be checking
* @return
*/
public static boolean isInCwWait(Player player) {
return waitingRoom.containsKey(player);
}
/**
* Method to make sara flag change status 0 = safe, 1 = taken, 2 = dropped
*
* @param status
*/
public static void setSaraFlag(int status) {
saraFlag = status;
}
/**
* Method to make zammy flag change status 0 = safe, 1 = taken, 2 = dropped
*
* @param status
*/
public static void setZammyFlag(int status) {
zammyFlag = status;
}
/**
* Method we use for the changing the object of the flag stands when
* capturing/returning flag
*
* @param objectId
* the object
* @param team
* the team of the player
*/
public static void changeFlagObject(int objectId, int team) {
Iterator<Player> iterator = gameRoom.keySet().iterator();
while (iterator.hasNext()) {
Player teamPlayer = iterator.next();
teamPlayer.getPacketSender().object(objectId,
FLAG_STANDS[team][0], FLAG_STANDS[team][1], 0, 10);
}
}
}
@@ -0,0 +1,9 @@
package com.rs2.game.content.minigames.trawler;
public abstract class GroupMinigame {
public abstract WaitingRoom getWaitingRoom();
public abstract String getWaitingRoomMessage();
}
@@ -0,0 +1,873 @@
package com.rs2.game.content.minigames.trawler;
import java.util.ArrayList;
import java.util.Random;
import com.rs2.GameEngine;
import com.rs2.event.CycleEvent;
import com.rs2.event.CycleEventContainer;
import com.rs2.event.CycleEventHandler;
import com.rs2.game.items.GameItem;
import com.rs2.game.players.Player;
public class Trawler extends GroupMinigame {
/*
*
*/
/*
* The waiting room for the minigame
*/
public WaitingRoom waiting_room = new TrawlerWaitingRoom(this);
/*
* The arraylist containing all of the players
*/
public ArrayList<Player> players = new ArrayList<Player>();
/*
* The arraylist containing all of the players that need to removed Created
* so that an instance wouldn't have to be created every time the updating
* is called simply just call the clear method
*/
public ArrayList<Player> players_to_remove = new ArrayList<Player>();
/*
* A unique id, which the cycle event handler may use to stop the trawlers
* event
*/
public static final int CYCLE_ID = 222;
/*
* Random object
*/
private final Random random_gen = new Random();
/*
* All of the animations needed for the minigame
*/
final int climb_up = 828;
final int climb_down = 827;
final int swimming_walk = 772;
final int swimming_stand = 773;
final int net_interaction = 832;
final int SWIM_MOVEMENT_ANIMATION = 772;
final int SWIM_STILL_ANIMATION = 773;
/*
* All of the items needed for the minigame
*/
final int bailing_bucket_full = 585;
final int bailing_bucket_empty = 583;
final int rope = 954;
final int swamp_paste = 1941;
/*
* All of the objects needed for the minigame
*/
final int perfect_wall = 2177;
final int patched_wall = 2168;
final int leaking_wall = 2167;
/*
* Variables that will be changing as the minigame progresses
*/
private int water_level = 0;
private boolean net_ripped = false;
public int fish_caught = 0;
private boolean[] wall_status = new boolean[16];
private boolean isSunk = false;
private int game_time = 10;
private boolean started = false;
boolean in_progress = false;
/*
* Contains the coordinates for each wall, since all of the objects of the
* same id's and the methods needed to get them
*/
public enum Wall {
North_One_Normal(0, 1885, 4826), North_Two_Normal(1, 1886, 4826), North_Three_Normal(
2, 1887, 4826), North_Four_Normal(3, 1888, 4826), North_Five_Normal(
4, 1889, 4826), North_Six_Normal(5, 1890, 4826), North_Seven_Normal(
6, 1891, 4826), North_Eight_Normal(7, 1892, 4826), South_One_Normal(
8, 1885, 4823), South_Two_Normal(9, 1886, 4823), South_Three_Normal(
10, 1887, 4823), South_Four_Normal(11, 1888, 4823), South_Five_Normal(
12, 1889, 4823), South_Six_Normal(13, 1890, 4823), South_Seven_Normal(
14, 1891, 4823), South_Eight_Normal(15, 1892, 4823), North_One_Sinking(
0, 2013, 4826), North_Two_Sinking(1, 2014, 4826), North_Three_Sinking(
2, 2015, 4826), North_Four_Sinking(3, 2016, 4826), North_Five_Sinking(
4, 2017, 4826), North_Six_Sinking(5, 2018, 4826), North_Seven_Sinking(
6, 2019, 4826), North_Eight_Sinking(7, 2020, 4826), South_One_Sinking(
8, 2013, 4823), South_Two_Sinking(9, 2014, 4823), South_Three_Sinking(
10, 2015, 4823), South_Four_Sinking(11, 2016, 4823), South_Five_Sinking(
12, 2017, 4823), South_Six_Sinking(13, 2018, 4823), South_Seven_Sinking(
14, 2019, 4823), South_Eight_Sinking(15, 2020, 4823);
int index, x, y;
Wall(int index, int x, int y) {
this.index = index;
this.y = y;
this.x = x;
}
public static int getIndex(int x, int y) {
for (Wall s : Wall.values()) {
if (s != null) {
if (s.x == x && s.y == y) {
return s.index;
}
}
}
return -1;
}
public static Wall getWallByIndex(int index, boolean sinking) {
for (Wall w : Wall.values()) {
if (w.index == index) {
if (sinking && w.x < 2000) {
continue;
} else {
return w;
}
}
}
return null;
}
}
/*
* Gets the amount of walls that are not broken
*/
public int getAvaliableWallSize() {
int toReturn = 0;
for (int j = 0; j < wall_status.length; j++) {
if (wall_status[j] == false) {
toReturn++;
}
}
return toReturn;
}
/*
* Generates the indexes of the walls that are not broken
*/
public int[] getAvaliableWalls() {
int[] toReturn = new int[getAvaliableWallSize()];
int index = 0;
for (int j = 0; j < wall_status.length; j++) {
if (wall_status[j] == false) {
toReturn[index] = j;
index++;
}
}
return toReturn;
}
/*
* Sets a random wall as broken & updates it
*/
public void breakRandomWall() {
try {
final int[] walls = getAvaliableWalls();
int random = walls[random_gen.nextInt(walls.length)];
wall_status[random] = true;
updateWall(random);
} catch (Exception e) {// Exception should never occur
}
}
/*
* Removes every wall and resets them back to default
*/
public void resetWalls() {
for(Wall w : Wall.values()) {
if(w != null) {
GameEngine.objectHandler.removeObject(GameEngine.objectHandler.getObjectByPosition(w.x, w.y));
GameEngine.objectHandler.createAnObject(perfect_wall, w.x,w.y, w.y == 4826 ? 1 : 3);
}
}
}
/*
* Updates a wall based on index
*/
public void updateWall(int index) {
Wall w = Wall.getWallByIndex(index, isSunk);
if (w == null) {
System.out.println("null");
return;
}
GameEngine.objectHandler.removeObject(GameEngine.objectHandler.getObjectByPosition(w.x, w.y));
GameEngine.objectHandler.removeObject(GameEngine.objectHandler.getObjectByPosition(w.x + (isSunk ? -128 : 128), w.y));
if (wall_status[index]) {
GameEngine.objectHandler.createAnObject(leaking_wall, w.x, w.y,
w.y == 4826 ? 1 : 3);
if (isSunk)
GameEngine.objectHandler.createAnObject(leaking_wall, w.x - 128,
w.y, w.y == 4826 ? 1 : 3);
else
GameEngine.objectHandler.createAnObject(leaking_wall, w.x + 128,
w.y, w.y == 4826 ? 1 : 3);
} else {
GameEngine.objectHandler.createAnObject(patched_wall, w.x, w.y,
w.y == 4826 ? 1 : 3);
if (isSunk)
GameEngine.objectHandler.createAnObject(patched_wall, w.x - 128,
w.y, w.y == 4826 ? 1 : 3);
else
GameEngine.objectHandler.createAnObject(patched_wall, w.x + 128,
w.y, w.y == 4826 ? 1 : 3);
}
}
/*
* Updates every play in the game's interface, if the player is null they
* are removed from the game
*/
public void playerUpdates() {
for (Player p : players) {
if (p != null) {
p.asClient().getPacketSender().sendString(net_ripped ? "@red@Ripped" : "@gre@Okay", 11935);
p.getPacketSender().sendString("" + fish_caught, 11937);
p.getPacketSender().sendString(game_time + " mins", 11938);
p.getPacketSender().sendFrame20(391, water_level);
} else {
players_to_remove.add(p);
}
}
if (players_to_remove.size() > 0) {
for (Player p : players_to_remove) {
players.remove(p);
}
players_to_remove.clear();
}
}
/*
* Does everything needed when the game starts
*/
public void onStart() {
resetWalls();
waiting_room.setActive(false);
water_level = 0;
fish_caught = 0;
net_ripped = false;
isSunk = false;
started = false;
game_time = 10;
in_progress = true;
for (int j = 0; j < wall_status.length; j++) {
wall_status[j] = false;
}
playerUpdates();
for (Player p : players) {
if (p != null) {
p.getPlayerAssistant().removeAllSidebars();
p.getPacketSender().sendMapState(2);
p.getPacketSender().showInterface(3281);
p.getPacketSender().sendFrame20(75, 11);
p.getPlayerAssistant().movePlayer(1885, 4825, 1);
p.getPacketSender().sendString("", 11936);
}
}
CycleEventHandler.getSingleton().addEvent(this, new CycleEvent() {
@Override
public void execute(CycleEventContainer container) {
container.stop();
}
@Override
public void stop() {
for (Player p : players) {
if (p != null) {
p.getPlayerAssistant().sendSidebars();
p.getPacketSender().showInterface(5596);
p.getPacketSender().sendMapState(0);
}
}
started = true;
startGameTimer();
}
}, 25);
}
/*
* Does everything needed when the game ends
*/
public void onEndLose() {
for (Player p : players) {
if (p != null) {
p.getPlayerAssistant().movePlayer(1885, 4825, 1);
}
}
}
/*
* Essentially starts the game
*/
public void start() {
CycleEventHandler.getSingleton().stopEvents(CYCLE_ID);// Stops any other
// events using
// the trawler's
// id
onStart();
CycleEventHandler.getSingleton().addEvent(this, new CycleEvent() {
@Override
public void execute(CycleEventContainer container) {
if (started) {
tick();
if (end() > 0) {
if (end() == 1) {
setSwimmingAnimations();// Loss
movePlayersLoss();
players.clear();
container.stop();
} else if (end() == 2) {
for (Player p : players) {
if (p != null) {
p.fishingTrawlerReward = playerReward(p);
}
}
movePlayerWin(players);
container.stop();
}
container.stop();
}
}
}
@Override
public void stop() {
waiting_room.reset();
waiting_room.setActive(true);
in_progress = false;
game_time = 0;
players.clear();
//System.out.println("should start again now");
waiting_room.startWaiting();
}
}, 10);
}
/*
* Everything that should be done on one tick of the minigame
*/
public void tick() {
int random;
random = random_gen.nextInt(2) + 1;
for (int j = 0; j < random; j++) {
breakRandomWall();
}
ripNet();
increaseWaterLevel();
switchBoats();
if (!net_ripped)
increaseFish();
playerUpdates();
}
/*
* Randomly breaks the net
*/
public void ripNet() {
if (!net_ripped) {
if (random_gen.nextInt(10) > 7) {
net_ripped = true;
}
}
}
/*
* Adds water depending on the amount of leaks in the ship
*/
public void increaseWaterLevel() {
int leaks = 16 - getAvaliableWalls().length;
water_level += (leaks / 2) + random_gen.nextInt(leaks * random_gen.nextInt(2) + 1);
}
/*
* Fixes the holes in the ship
*/
public void fixHole(Player player, int x, int y) {
if (doAction(player)) {
if (player.getItemAssistant().playerHasItem(swamp_paste)) {
int index = Wall.getIndex(x, y);
if (index >= 0) {
player.getItemAssistant().deleteItem(swamp_paste, 1);
player.startAnimation(832);
wall_status[index] = false;
updateWall(index);
player.turnPlayerTo(x, y + (y == 4826 ? 1 : -1));
}
} else {
player.getPacketSender().sendMessage("You don't have any swamp paste.");
}
}
}
/*
* Moves the player to the top of the boat
*/
public void upLadder(Player player, int obX, int obY) {
if (doAction(player)) {
if (!isSunk) {
player.startAnimation(climb_up);
player.getPlayerAssistant()
.movePlayer(obX == 1884 ? 1885 : 1892, obY, 1);
} else {
player.startAnimation(climb_up);
player.getPlayerAssistant().movePlayer(obX == 2021 ? 2020 : 2013, obY, 1);
}
}
}
/*
* Moves the player to the top of the boat
*/
public void downLadder(Player player, int obX, int obY) {
if (doAction(player)) {
if (!isSunk) {
player.startAnimation(climb_down);
player.getPlayerAssistant()
.movePlayer(obX == 1884 ? 1885 : 1892, obY, 0);
} else {
player.startAnimation(climb_down);
player.getPlayerAssistant().movePlayer(obX == 2021 ? 2020 : 2013, obY, 0);
}
}
}
/*
* Fixes the net on the ship
*/
public void fixNet(Player p) {
if (doAction(p)) {
if (!net_ripped) {
p.getPacketSender().sendMessage("The net is not ripped.");
return;
}
if (!p.getItemAssistant().playerHasItem(rope)) {
p.getPacketSender().sendMessage(
"You need a rope before attempting to fix the net!");
return;
}
p.startAnimation(net_interaction);
if (skillCheck(p.playerLevel[p.playerCrafting], 1, 0)) {
p.getItemAssistant().deleteItem(rope, 1);
net_ripped = false;
playerUpdates();
p.getPacketSender().sendMessage("You successfully fix the net!");
} else {
p.getItemAssistant().deleteItem(rope, 1);
p.getPacketSender().sendMessage("You failed to repair the net!");
}
}
}
/*
* Returns true if the player can complete the interaction
*/
public boolean doAction(Player p) {
if (!players.contains(p)) {
return false;
}
if (System.currentTimeMillis() - p.lastFishingTrawlerInteraction >= 1600) {
p.lastFishingTrawlerInteraction = System.currentTimeMillis();
return true;
} else {
return false;
}
}
/*
* Bails water out of the boat
*/
public void bail(Player p) {
if (doAction(p)) {
if (p.getItemAssistant().playerHasItem(bailing_bucket_empty)) {
p.startAnimation(827);
p.getItemAssistant()
.replaceItem(bailing_bucket_empty, bailing_bucket_full);
water_level -= random_gen.nextInt(3) + 1;
}
}
}
/*
* Bails water out of the boat
*/
public void emptyBucket(Player p) {
if (doAction(p)) {
if (p.getItemAssistant().playerHasItem(bailing_bucket_full)) {
p.startAnimation(832);
p.getItemAssistant()
.replaceItem(bailing_bucket_full, bailing_bucket_empty);
}
}
}
/*
* Adds a random amount of fish to the total fish reaward, based off of the
* amount of players in the game
*/
public void increaseFish() {
fish_caught += random_gen.nextInt(players.size() + 2);
}
/*
* If it returns true, the minigame will end
*/
public int end() {
if (players.size() == 0) {
return 1;
}
if (water_level >= 100) {
return 1;
}
if (game_time == 0) {
return 2;
}
return 0;
}
/*
* Sets the swimming animations
*/
public void setSwimmingAnimations() {
for(Player p : players) {
if (p != null) {
p.prevplayerWalkIndex = p.playerWalkIndex;
p.prevPlayerStandIndex = p.playerStandIndex;
p.prevPrevPlayerRunIndex = p.playerRunIndex;
p.prevPlayerTurnIndex = p.playerTurnIndex;
p.prevPlayerTurn180Index = p.playerTurn180Index;
p.prevPlayerTurn90CCWIndex = p.playerTurn90CCWIndex;
p.prevPlayerTurn90CWIndex = p.playerTurn90CWIndex;
p.prevRunning2 = p.isRunning2;
p.isRunning2 = false;
p.playerRunIndex = SWIM_MOVEMENT_ANIMATION;
p.playerStandIndex = SWIM_STILL_ANIMATION;
p.playerWalkIndex = SWIM_MOVEMENT_ANIMATION;
p.playerTurnIndex = SWIM_STILL_ANIMATION;
p.playerTurn90CWIndex = SWIM_STILL_ANIMATION;
p.playerTurn90CCWIndex = SWIM_STILL_ANIMATION;
p.playerTurn180Index = SWIM_STILL_ANIMATION;
p.getPlayerAssistant().requestUpdates();
p.getPacketSender().closeAllWindows();
}
}
}
/*
* Switches boats based on the water level
*/
public void switchBoats() {
if (water_level > 25 && !isSunk) {
isSunk = true;
for (int j = 0; j < players.size(); j++) {
if (players.get(j) != null) {
players.get(j).stopMovement();
players.get(j).getPlayerAssistant()
.movePlayer(players.get(j).absX + 128,
players.get(j).absY,
players.get(j).heightLevel);
}
}
}
if (water_level <= 25 && isSunk) {
isSunk = false;
for (int j = 0; j < players.size(); j++) {
if (players.get(j) != null) {
players.get(j).stopMovement();
players.get(j).getPlayerAssistant().
movePlayer(players.get(j).absX - 128,
players.get(j).absY,
players.get(j).heightLevel);
}
}
}
}
/*
* Starts the timer for the game
*/
public void startGameTimer() {
CycleEventHandler.getSingleton().addEvent(this, new CycleEvent() {
@Override
public void execute(CycleEventContainer container) {
if (game_time == 0) {
container.stop();
} else {
game_time--;
waiting_room.messageWaiting("The trawler will return in "+game_time+ (game_time == 1 ? " minute" : " minutes")+"!");
}
}
@Override
public void stop() {
waiting_room.reset();
waiting_room.setActive(true);
in_progress = false;
players.clear();
waiting_room.startWaiting();
}
}, 80);
}
/*
* Slightly increases chance of higher level fish with levels
*/
public int chanceByLevel(Player p, int fish) {
switch (fish) {
case 381:
if (p.playerLevel[p.playerFishing] >= 81
&& p.playerLevel[p.playerFishing] < 90) {
return 5;
} else if (p.playerLevel[p.playerFishing] >= 90
&& p.playerLevel[p.playerFishing] < 99) {
return 9;
} else if (p.playerLevel[p.playerFishing] == 99) {
return 13;
}
return 0;
case 395:
if (p.playerLevel[p.playerFishing] >= 79
&& p.playerLevel[p.playerFishing] < 85) {
return 8;
} else if (p.playerLevel[p.playerFishing] >= 85
&& p.playerLevel[p.playerFishing] < 95) {
return 13;
} else if (p.playerLevel[p.playerFishing] >= 95) {
return 17;
}
return 0;
}
return 0;
}
/*
* Loss teleporting
*/
public void movePlayersLoss() {
for (Player p : players) {
if (p != null) {
p.getPlayerAssistant().movePlayer(1952, 4826, 0);
}
}
in_progress = false;
game_time = 0;
players.clear();
waiting_room.startWaiting();
}
/*
* Win teleporting
*/
public void movePlayerWin(final ArrayList<Player> pl) {
for (Player p : pl) {
if (p != null) {
p.getPlayerAssistant().removeAllSidebars();
p.getPacketSender().sendMapState(2);
p.getPacketSender().showInterface(3281);
p.getPacketSender().sendFrame20(75, 12);
p.getPlayerAssistant().movePlayer(2666, 3161, 0);
//p.getPlayerAssistant().movePlayer(2804, 3421, 0);
}
}
CycleEventHandler.getSingleton().addEvent(this, new CycleEvent() {
@Override
public void execute(CycleEventContainer container) {
container.stop();
}
@Override
public void stop() {
for (Player p : pl) {
if (p != null) {
p.getPlayerAssistant().sendSidebars();
p.getPacketSender().sendMapState(0);
p.getPacketSender().closeAllWindows();
}
}
in_progress = false;
game_time = 0;
players.clear();
waiting_room.startWaiting();
}
}, 25);
}
/*
* Adds the rewards to each player
*/
public ArrayList<GameItem> playerReward(Player p) {
ArrayList<GameItem> toReturn = new ArrayList<GameItem>();
boolean turtles = true;
boolean mantas = true;
boolean lobsters = true;
boolean swordfish = true;
int turt = 0;
int manta = 0;
int lobs = 0;
int swordFish = 0;
int junk = 0;
int done = 0;
while (done != fish_caught) {
done++;
int random = random_gen.nextInt(100);
if (random >= 85 - chanceByLevel(p, 381)) {
if (mantas) {
manta++;
}
} else if (random >= 70 - chanceByLevel(p, 381)) {
if (turtles) {
turt++;
}
} else if (random >= 40) {
if (swordfish) {
swordFish++;
}
} else if (random >= 5) {
if (lobsters) {
lobs++;
}
} else {
junk++;
}
}
int xpToAdd = 0;
if (manta > 0) {
toReturn.add(new GameItem(389, manta));
if (p.playerLevel[p.playerFishing] >= 81) {
xpToAdd += (manta * 46);
}
}
if (turt > 0) {
toReturn.add(new GameItem(395, turt));
if (p.playerLevel[p.playerFishing] >= 79) {
xpToAdd += (manta * 38);
}
}
if (lobs > 0) {
toReturn.add(new GameItem(377, lobs));
if (p.playerLevel[p.playerFishing] >= 40) {
xpToAdd += (manta * 90);
}
}
if (swordFish > 0) {
toReturn.add(new GameItem(371, swordFish));
if (p.playerLevel[p.playerFishing] >= 50) {
xpToAdd += (manta * 100);
}
}
if (junk > 0)
toReturn.add(new GameItem(685, junk));
p.getPlayerAssistant().addSkillXP(xpToAdd, p.playerFishing);
return toReturn;
}
/*
* Randomly returns true, players craft level increases chance of returning
* true
*/
public boolean skillCheck(int level, int levelRequired, int itemBonus) {
double chance = 0.0;
double baseChance = Math.pow(10d - levelRequired / 10d, 2d) / 2d;
chance = baseChance + ((level - levelRequired) / 2d)
+ (itemBonus / 10d);
return chance >= (new Random().nextDouble() * 100.0);
}
@Override
public WaitingRoom getWaitingRoom() {
return waiting_room;
}
@Override
public String getWaitingRoomMessage() {
return null;
}
public boolean inProgress() {
return in_progress;
}
public int getGameTime() {
return game_time;
}
public void resetRewardsInterface(Player player) {
for(int j = 0; j < 45; j++) {
player.getPacketSender().sendFrame34(-1, j, 4640, -1);
}
}
public void showReward(Player player) {
resetRewardsInterface(player);
player.inFishingTrawlerRewardsInterface = true;
player.getPacketSender().showInterface(4564);
for(int j = 0; j < player.fishingTrawlerReward.size(); j++) {
player.getPacketSender().sendFrame34(player.fishingTrawlerReward.get(j).id, j, 4640, player.fishingTrawlerReward.get(j).amount);
}
}
public void updateRewardSlot(Player player, int slot) {
player.inFishingTrawlerRewardsInterface = true;
player.getPacketSender().sendFrame34(player.fishingTrawlerReward.get(slot).id, slot, 4640, player.fishingTrawlerReward.get(slot).amount);
if(slot != 4 && player.fishingTrawlerReward.size() == 5) {
player.getPacketSender().sendFrame34(player.fishingTrawlerReward.get(4).id, 4, 4640, player.fishingTrawlerReward.get(4).amount);
}
}
public int getRewardSlot(int j) {
if(j < 4) {
return j;
} else {
return j+1;
}
}
}
@@ -0,0 +1,82 @@
package com.rs2.game.content.minigames.trawler;
import com.rs2.game.players.Player;
import com.rs2.world.Boundary;
public class TrawlerWaitingRoom extends WaitingRoom {
private Trawler trawler;
private Boundary boat = new Boundary(2668,2674,3165,3185);
//private Location boat = new Location(2808, 2811,3415,3425);
public TrawlerWaitingRoom(Trawler trawler) {
super(2, 1);
this.trawler = trawler;
}
@Override
public boolean startGame() {
if(trawler.inProgress()) {
return false;
}
if(waiting.size() < minimumPlayers) {
return false;
}
return true;
}
@Override
public void onStart() {
trawler.players.clear();
for(Player p : waiting) {
trawler.players.add(p);
}
trawler.start();
waiting.clear();
}
@Override
public void onLeave(Player p) {
p.asClient().getPlayerAssistant().movePlayer(2676, 3170, 0);
}
@Override
public void onJoin(Player p) {
p.getPlayerAssistant().movePlayer(2672, 3170, 1);
if(!isActive()) {
p.getPacketSender().sendMessage(trawler.getGameTime() == 0 ? "The trawler will be returning in less than a minute!" : "The trawler will return in "+trawler.getGameTime() + (trawler.getGameTime() == 1 ? " minute" : " minutes")+"!");
} else {
p.getPacketSender().sendMessage(getTimeRemaining() == 0 ? "The trawler will be leaving in less than a minute!" : "The trawler will leave in "+ getTimeRemaining() + (getTimeRemaining() == 1 ? " minute" : " minutes")+"!");
}
}
public Boundary getLocation() {
return boat;
}
@Override
public void onTimeChange() {
for(Player p : waiting) {
if(!isActive()) {
p.getPacketSender().sendMessage(trawler.getGameTime() == 0 ? "The trawler will be returning in less than a minute!" : "The trawler will return in "+trawler.getGameTime() + (trawler.getGameTime() == 1 ? " minute" : " minutes")+"!");
} else {
p.getPacketSender().sendMessage(getTimeRemaining() == 0 ? "The trawler will be leaving in less than a minute!" : "The trawler will leave in "+ getTimeRemaining() + (getTimeRemaining() == 1 ? " minute" : " minutes")+"!");
}
}
}
@Override
public boolean canStart() {
if(trawler.inProgress()) {
return false;
}
if(waiting.size() < minimumPlayers) {
return false;
}
return true;
}
}
@@ -0,0 +1,112 @@
package com.rs2.game.content.minigames.trawler;
import java.util.ArrayList;
import com.rs2.event.CycleEvent;
import com.rs2.event.CycleEventContainer;
import com.rs2.event.CycleEventHandler;
import com.rs2.game.players.Player;
import com.rs2.world.Boundary;
public abstract class WaitingRoom {
public int minimumPlayers;
public ArrayList<Player> waiting = new ArrayList<Player>();
private int wait_time;
private int minutes_remaining;
private boolean active;
public abstract Boundary getLocation();
public abstract boolean startGame();
public abstract void onStart();
public abstract void onLeave(Player player);
public abstract void onJoin(Player p);
public abstract void onTimeChange();
public abstract boolean canStart();
public WaitingRoom(int minutes, int minimum) {
this.wait_time = minutes;
this.minimumPlayers = minimum;
this.minutes_remaining = wait_time;
if(!firstStarted){
startWaiting();
} else {
return;
}
}
public void join(Player player) {
if(!waiting.contains(player)) {
onJoin(player);
waiting.add(player);
}
}
public void leave(Player player) {
if(waiting.contains(player)) {
onLeave(player);
waiting.remove(player);
}
}
public void reset() {
minutes_remaining = wait_time;
//startWaiting();
}
public static boolean firstStarted = false;
public void startWaiting() {
if(isActive()) {
return;
}
setActive(true);
CycleEventHandler.getSingleton().addEvent(100, this, new CycleEvent() {
@Override
public void execute(CycleEventContainer container) {
firstStarted = true;
if(minutes_remaining != 0) {
minutes_remaining--;
onTimeChange();
} else {
if(startGame()) {
onStart();
reset();
setActive(false);
container.stop();
} else {
messageWaiting("A minimum of "+minimumPlayers+" players are needed to start this minigame!");
reset();
startWaiting();
}
}
}
@Override
public void stop() {
}
}, 80);
}
public void messageWaiting(String message) {
for(Player p : waiting) {
if(p != null) {
p.getPacketSender().sendMessage(message);
}
}
}
public boolean isActive() {
return active;
}
public void setActive(boolean active) {
this.active = active;
}
public int getTimeRemaining() {
return minutes_remaining;
}
}
@@ -0,0 +1,209 @@
package com.rs2.game.content.music;
import com.rs2.game.players.Player;
import com.rs2.util.Misc;
/**
* http://runescape.wikia.com/wiki/Music Good resource song id = 2 absx/64 = 1
* absy/64 = 0
*/
public class Music {
public static int[][] MUSIC_DATA = { // all the songs added
{ 50, 51, 2 },
{ 49, 51, 2 }, // Flour mill place
{ 48, 50, 3 },
{ 46, 56, 8 },
// {51, 60, 9},
{ 46, 50, 12 },
{ 31, 74, 16 },// mime event
// {46, 50, 49},
{ 52, 57, 14 }, { 47, 52, 15 }, { 45, 53, 18 }, { 45, 54, 18 },
{ 47, 50, 35 },
{ 50, 150, 139 },// harmony 2
{ 46, 54, 23 },// goblin village
// {47, 50, 36},
{ 51, 50, 36 }, { 47, 51, 49 }, { 51, 49, 50 }, { 44, 75, 52 },
{ 46, 53, 54 }, { 49, 54, 111 }, { 51, 60, 255 }, // scape sad
{ 45, 75, 57 }, { 47, 47, 62 },// Newbie Melody, Tutorial Island
// corrupted
{ 47, 48, 62 },// Newbie Melody, Tutorial Island
{ 48, 47, 62 },// Newbie Melody, Tutorial Island
{ 48, 48, 62 },// Newbie Melody, Tutorial Island
{ 48, 148, 144 },// underground, underground
{ 49, 48, 62 },// Newbie Melody, Tutorial Island
{ 50, 49, 64 }, { 49, 49, 64 }, { 46, 57, 355 }, // troubled
{ 43, 75, 52 },// Miracle Dance, Mind Altar
// {51, 48, 69}, // this song is currently corrupt! Do not play!
// {46, 52, 107}, // falador different
{ 46, 52, 72 }, // falador
{ 50, 50, 76 }, { 48, 49, 358 }, // Vision - wizard's tower
{ 46, 49, 92 },// karamja
{ 45, 49, 92 },// karamja diff region
{ 51, 54, 93 }, // Edgeville
{ 46, 55, 96 }, // this song is currently corrupt! Do not play!
// -seems
// fine
// {45, 49, 55},
{ 46, 60, 52 }, { 48, 54, 98 }, { 47, 49, 105 }, // tommorrow
{ 50, 52, 106 }, { 51, 51, 123 }, { 50, 53, 125 }, // Varrock But
// Laggyyyy
// {50, 53, 157}, //Varrock
{ 46, 51, 127 }, { 48, 53, 141 }, { 41, 75, 52 },// Down to Earth,
// Earth Altar
{ 42, 75, 52 },// Zealot, Water Altar
{ 48, 51, 151 }, { 51, 52, 157 }, { 51, 53, 157 }, { 52, 50, 47 },// duel
// arena
{ 52, 51, 122 }, // Duel Arena Hospital - Shine
{ 41, 40, 588 }, // Pest Control - In-game
{ 41, 41, 587 }, // Pest Control - Lobby
{ 40, 75, 52 },// Quest, Fire Altar
{ 55, 51, 380 },// Barrows
{ 50, 55, 169 }, { 49, 154, 144 }, // varrock sewers repeated
{ 50, 154, 144 }, // Varrock Sewers
{ 48, 154, 144 }, // EdgeVille dungeon
{ 48, 153, 144 }, // EdgeVilledungeon
{ 48, 150, 144 },// draynor sewers
{ 48, 151, 144 },// draynor sewers
{ 43, 43, 206 }, // monkey madness
{ 48, 55, 169 }, // Wilderness North of Edge
{ 38, 80, 469 }, // Tzhaar cave
{ 49, 57, 43 }, // wilderness 3 carrallanger
{ 42, 53, 184 }, { 49, 53, 175 }, { 50, 54, 177 }, { 42, 43, 9 },// anywhere
{ 43, 44, 9 },// anywhere again
{ 45, 42, 190 },// marooneed - crash island
{ 43, 42, 160 },// island life - works
{ 44, 49, 172 },// jungle island
{ 43, 50, 6 },// jolly r
{ 43, 49, 174 },// landlubber
{ 43, 50, 327 },// trawler
{ 42, 50, 115 },// jungly2
// {46, 49, 180},
// {45, 52, 186}, ARRIVAL CORRUPTED
{ 42, 54, 7 },// overture
{ 54, 54, 357 }, // village canfis center 3496 3489
// {0, 0, 282}, //Stillness myreque hideout
{ 53, 54, 48 }, // morytania path to Paterdomus
{ 54, 53, 347 }, // waterlogged south of canfis 3506, 3435
{ 45, 52, 72 }, { 40, 51, 191 },// knightly
{ 41, 51, 32 },// baroque
{ 40, 52, 152 }, // ballad of enchantment ardounge
{ 47, 54, 152 }, // ballad of enchantment edgeville prayer 3051 3490
{ 39, 75, 52 },// Heart and Mind, Body Altar
{ 47, 153, 325 },// Cave Background, Dwarven Mines
{ 46, 153, 325 },// Cave Background, Dwarven Mines
{ 47, 152, 325 },// Cave Background, Dwarven Mines
{ 49, 50, 327 }, { 39, 47, 83 },// big chords
{ 40, 48, 187 },// magic dance
{ 39, 48, 187 },// magic dance watchtower not sure if correct song
{ 45, 57, 185 }, // mad eadgar - doesn't play
// {40, 48, 153},//in the manor
{ 47, 53, 49 }, // Wander
{ 48, 52, 333 }, { 50, 56, 337 },
// {40, 74, 419},
{ 47, 56, 121 }, { 39, 49, 148 }, // emotion 2524, 3168
{ 39, 50, 17 }, // attack1 2515, 3230
{ 39, 54, 32 }, // voyage 2528, 3497
{ 39, 54, 82 }, // waterfall 2511, 3463
{ 40, 54, 319 }, // theme coal trucks
{ 38, 48, 80 }, // Soundscape, Castle Wars
{ 37, 148, 28 }, // Attack 5 - Castle Wars, Sara Portal
{ 43, 54, 60 }, // Lightwalk - Camelot
{ 44, 53, 119 }, // fishing catherby
{ 39, 54, 33 }, // gnome village coords = 2478, 3437
{ 38, 53, 329 }, // tree spirits
{ 38, 54, 126 }, // Gnome King
{ 37, 54, 130 }, // Gnome Ball plays a little bit out of region
// 2402,
// 3488
{ 40, 53, 328 }, // March
// {29, 81, 537},//Dogs of War - Stronghold of Security - Vault of
// War
// {31, 81, 558},//Food for Thought - Stronghold of Security -
// Catacomb
// of Famine
// {33, 82, 559},//Malady - Stronghold of Security - Pit of
// Pestilence
// {36, 81, 560},//Dance of Death - Stronghold of Security -
// Sepulchre
// of Death
{ 41, 58, 141 }, // Relleka Rock Crabs
{ 41, 53, 60 }, // Lasting - Range guild
{ 41, 54, 140 } // Talking forest
};
/**
* Checks how many areas we have loaded.
*
* @param c
* Client.
*/
public static void checkMusic(Player c) {
for (int[] aMUSIC_DATA : MUSIC_DATA) {
if (c.getX() / 64 == aMUSIC_DATA[0]
&& c.getY() / 64 == aMUSIC_DATA[1]/*
* && player . getPlayList (
* ) . auto
*/) {
if (c.getTemporary("CURRENT_SONG") == null
|| (Integer) c.getTemporary("CURRENT_SONG") != aMUSIC_DATA[2]) {
c.getPacketSender().sendMessage(
"@gre@Play Music Has Music:@bla@ " + aMUSIC_DATA[0]
+ " : " + aMUSIC_DATA[1]);
}
}
}
c.getPacketSender().sendMessage(
"@red@Play Music No Music:@bla@ " + c.getX() / 64 + " : "
+ c.getY() / 64);
}
/**
* Checks which song is played in which region.
*
* @param c
* the player.
*/
public static void playMusic(Player c) {
for (int[] aMUSIC_DATA : MUSIC_DATA) {
if (c.getX() / 64 == aMUSIC_DATA[0]
&& c.getY() / 64 == aMUSIC_DATA[1]/*
* && player .
* getPlayList ( ) .
* auto
*/) {
if (c.getTemporary("CURRENT_SONG") == null
|| (Integer) c.getTemporary("CURRENT_SONG") != aMUSIC_DATA[2]) {
c.getPlayList();
if (c.getPlayList().auto) {
c.addTemporary("CURRENT_SONG", aMUSIC_DATA[2]);
c.getPacketSender().sendSong(aMUSIC_DATA[2]);
}
int[] edgeVilleSongs = { 98, 111, 127, 157, 106 };
int toPlay = Misc.random(4);
if (aMUSIC_DATA[0] == 48 && aMUSIC_DATA[1] == 54) {
aMUSIC_DATA[2] = edgeVilleSongs[toPlay];
}
int[] karamjaSongs = { 327, 6 };
int songPlaying = Misc.random(1);
if (aMUSIC_DATA[0] == 43 && aMUSIC_DATA[1] == 50) {
aMUSIC_DATA[2] = karamjaSongs[songPlaying];
}
int[] waterfall = { 82, 32 };
int songToPlay = Misc.random(1);
if (aMUSIC_DATA[0] == 39 && aMUSIC_DATA[1] == 54) {
aMUSIC_DATA[2] = waterfall[songToPlay];
}
/*
* int[] battlefield = {148, 17}; int randomSong =
* Misc.random(1); if (aMUSIC_DATA[0] == 39 &&
* aMUSIC_DATA[1] == 50) { aMUSIC_DATA[2] =
* battlefield[randomSong]; }
*/
c.getPlayList().playSong(aMUSIC_DATA[2]);
}
}
}
}
}
@@ -0,0 +1,225 @@
package com.rs2.game.content.music;
import java.util.HashMap;
import java.util.Map;
import com.rs2.game.players.Player;
public class PlayList {
private final Player player;
@SuppressWarnings("unused")
private final int[] songs = { 2, 3, 12, 14, 9, 157, 76, 57, 419, 15, 18,
327, 125, 106, 123, 177, 169, 98, 141, 36, 50, 72, 186, 151, 35,
180, 105, 127, 62, 175, 54, 96, 8, 34, 1, 69, 537, 558, 559, 560,
93, 143, 337, 64, 85, 65, 158, 190, 325 };
@SuppressWarnings("unused")
private final int[] buttons = { 41, 155, 99, 167, 296, 105, 81, 123, 2,
170, 83, 59, 73, 63, 29, 24, 53, 71, 251, 28, 25, 66, 33, 171, 130,
40, 187, 113, 112, 135, 183, 86, 248, 168, 84, 61, 435, 436, 437,
434, 116, 253, 263, 47, 159, 108, 117, 199, 49 };
@SuppressWarnings("unused")
private final int[] configs = { 20, 21, 22, 23, 24, 25, 298, 311, 346, 414,
464, 598, 662, 721, 906, 1009 };
@SuppressWarnings("unused")
private final int[] values = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0 };
public boolean[] unlocked = { false, false, false, false, false, false,
false, false, false, false, false, false, false, false, false,
false, false, false, false, false, false, false, false, false,
false, false, false, false, true, false, false, false, false,
false, false, false, false, false, false, false, false, false,
false, false, false, false, false, false, false, false };
private final String[] names = { "Autumn Voyage", "Unknown Land",
"Long Way Home", "Witching", "Kingdom", "Medieval", "Harmony",
"Rune Essence", "Pheasant Peasant", "Workshop", "Horizon", "Dream",
"Garden", "Expanse", "Arabian 2", "Adventure", "Crystal Sword",
"Forever", "Barbarianism", "Arabian", "Al Kharid", "Fanfare",
"Arrival", "Start", "Sea Shanty 2", "Attention", "Tomorrow",
"Nightfall", "Newbie Melody", "Spirit", "Scape Soft",
"Inspiration", "Wildwood", "Wonder", "Iban", "Egypt",
"Dogs of War", "Food for Thought", "Malady", "Dance of Death",
"Parade", "Down To Earth", "Faithless", "Book Of Spells", "Vision",
"Miracle Dance", "Quest", "Heart and Mind", "Cave Background",
"Talking Forest" };
private boolean loop = false;
public boolean auto = true;
public PlayList(Player player2) {
player = player2;
}
private static enum Songs {
// action id, songid, ?, song number
AUTUMN_VOYAGE(16208, 2, 4304, 0), UNKNOWN_LAND(17066, 3, 4418, 1), LONG_WAY_HOME(
17010, 12, 4362, 2), WITCHING(17078, 14, 4430, 3), KINGDOM(
32243, 9, 8435, 4), MEDIEVAL(17016, 157, 4368, 5), HARMONY(
16248, 76, 4344, 6), RUNE_ESSENCE(17034, 57, 4386, 7), PHEASANT_PEASANT(
55108, 419, 14188, 8), WORKSHOP(17081, 15, 4433, 9), HORIZON(
16250, 18, 4346, 10), DREAM(35014, 327, 8974, 11), GARDEN(
16240, 125, 4336, 12), EXPANSE(16230, 106, 4326, 13), ARABIAN_2(
16196, 123, 4292, 14), ADVENTURE(16191, 177, 4287, 15), CRYSTAL_SWORD(
16220, 169, 4316, 16), FOREVER(16238, 98, 4334, 17), BARBARIANISM(
19000, 141, 4864, 18), ARABIAN(16195, 36, 4291, 19), AL_KHARID(
16192, 50, 4288, 20), FANFARE(16233, 72, 4329, 21), ARRIVAL(
16200, 186, 4296, 22),
// START(151, 23, 2097152, 23),
SEA_SHANTY_2(17041, 35, 4393, 24), ATTENTION(16207, 180, 4303, 25), TOMORROW(
24153, 105, 6297, 26), NIGHTFALL(17024, 127, 4376, 27), NEWBIE_MELODY(
17023, 62, 4375, 28), SPIRIT(17046, 175, 4398, 29), SCAPE_SOFT(
23100, 54, 5988, 30), INSPIRATION(16253, 96, 4349, 31), WILDWOOD(
27071, 278, 6983, 32), WONDER(17079, 34, 4431, 33), IBAN(16251,
1, 4347, 34), EGYPT(16228, 69, 4324, 35), PARADE(17027, 93,
4379, 40), DOWN_TO_EARTH(19015, 143, 4879, 41), FAITHLESS(
39145, 337, 346, 42), BOOK_OF_SPELLS(16214, 64, 4310, 43), VISION(
17070, 85, 4422, 44), MIRACLE_DANCE(17019, 65, 4371, 45), QUEST(
17028, 158, 4380, 46), HEART_AND_MIND(27033, 52, 6945, 47), // was
// 190
// changed
// to
// 52
CAVE_BACKGROUND(35012, 325, 8972, 48), TALKING_FOREST(17083, 140, 4435,
49);
private int songId;
private int buttonId;
private int childId;
private int arraySlot;
public int songId() {
return songId;
}
@SuppressWarnings("unused")
public int configId() {
return songId;
}
@SuppressWarnings("unused")
public int configNumber() {
return songId;
}
@SuppressWarnings("unused")
public int arraySlot() {
return arraySlot;
}
Songs(int buttonId, int songId, int childId, int arraySlot) {
this.buttonId = buttonId;
this.songId = songId;
this.childId = childId;
this.arraySlot = arraySlot;
}
private static Map<Integer, Songs> songs = new HashMap<Integer, Songs>();
static {
for (Songs songId : Songs.values()) {
songs.put(songId.songId(), songId);
}
}
public static Songs get(int id) {
return songs.get(id);
}
}
public void fixAllColors() {
for (int i = 0; i < 385; i++) {
if (Songs.get(i) != null) {
player.getPacketSender().sendColor(Songs.get(i).childId,
255 << 10 | 0 << 5 | 0);
if (unlocked[Songs.get(i).arraySlot]) {
updateList(Songs.get(i).childId);
}
}
}
}
public void playSong(int songID) {
// System.out.println("songId = "+songID);
try {
if (Songs.get(songID) == null) {
// player.sendMessage("This song has not yet been added to the playlist. - Song ID = "+songID);
if (auto) {
player.getPacketSender().sendString("Song Unavailable!",
4439);
updateList(4439);
}
return;
}
if (!unlocked[Songs.get(songID).arraySlot]) {
player.getPacketSender().sendMessage(
"You have unlocked the song "
+ names[Songs.get(songID).arraySlot] + ".");
// System.out.println("You have unlocked the song " +
// names[Songs.get(songID).arraySlot]);
unlocked[Songs.get(songID).arraySlot] = true;
updateList(Songs.get(songID).childId);
player.getPacketSender().sendString(
names[Songs.get(songID).arraySlot], 4439);
updateList(4439);
} else {
if (auto) {
player.getPacketSender().sendString(
names[Songs.get(songID).arraySlot], 4439);
updateList(4439);
}
}
} catch (Exception e) {
System.out.println("Exception: " + e);
}
}
public void updateList(int id) {
player.getPacketSender().sendColor(id, 0 << 10 | 255 << 5 | 0);
}
public void handleButton(int button) {
if (button == 17023) {
return;
}
if (button == 9925) {
loop = !loop;
} else if (button == 6269) {
auto = true;
player.getPacketSender().sendConfig(18, 1);
} else if (button == 6270) {
auto = false;
player.getPacketSender().sendConfig(18, 0);
} else {
// System.out.println("button="+button);
int songId = -1;
for (int i = 0; i < 385; i++) {
if (Songs.get(i) != null) {
if (Songs.get(i).buttonId == button) {
songId = Songs.get(i).songId;
}
}
}
if (songId == -1) {
// player.getPacketDispatcher().sendMessage("That song is unavailable at this time.");
} else if (!unlocked[Songs.get(songId).arraySlot]) {
player.getPacketSender().sendMessage(
"You have to unlock that song first!");
} else {
auto = false;
player.getPacketSender().sendConfig(18, 0);
playSong(songId);
// System.out.println("sending music to ActionSender packet - song id = "+songId);
player.getPacketSender().sendSong(songId);
player.getPacketSender().sendString(
names[Songs.get(songId).arraySlot], 4439);
updateList(4439);
}
}
}
}
@@ -0,0 +1,445 @@
package com.rs2.game.content.music.sound;
import com.rs2.GameEngine;
import com.rs2.game.content.combat.magic.MagicData;
import com.rs2.game.npcs.NpcHandler;
import com.rs2.game.players.Player;
import com.rs2.util.Misc;
/**
* CombatSounds
* @author Andrew (Mr Extremez)
*/
public class CombatSounds {
public static int getNpcAttackSounds(int NPCID) {
String npc = GetNpcName(NPCID).toLowerCase();
if (npc.contains("bat")) {
return 1;
}
if (npc.contains("cow")) {
return 4;
}
if (npc.contains("chicken")){
return 26;
}
if (npc.contains("imp")) {
return 11;
}
if (npc.contains("rat")) {
return 17;
}
if (npc.contains("duck")) {
return 26;
}
if (npc.contains("wolf") || npc.contains("bear")) {
return 28;
}
if (npc.contains("dragon")) {
return 47;
}
if (npc.contains("ghost")) {
return 57;
}
if (npc.contains("goblin")) {
return 88;
}
if (npc.contains("skeleton") || npc.contains("demon")
|| npc.contains("ogre") || npc.contains("giant")
|| npc.contains("tz-") || npc.contains("jad")) {
return 48;
}
if (npc.contains("zombie")) {
return 1155;
}
if (npc.contains("man") || npc.contains("woman")
|| npc.contains("monk") || npc.contains("thief")) {
return 417;
}
if (npc.contains("wizard"))
{
return 1002;
}
if (npc.contains("guard") || npc.contains("farmer"))
return 403;
return Misc.random(6) > 3 ? 398 : 394;
}
public static int getNpcBlockSound(int NPCID) {
String npc = GetNpcName(NPCID).toLowerCase();
if (npc.contains("bat")) {
return 7;
}
if (npc.contains("cow")) {
return 5;
}
if (npc.contains("chicken")){
return 24;
}
if (npc.contains("imp")) {
return 11;
}
if (npc.contains("rat")) {
return 16;
}
if (npc.contains("duck")) {
return 24;
}
if (npc.contains("wolf") || npc.contains("bear")) {
return 34;
}
if (npc.contains("dragon")) {
return 45;
}
if (npc.contains("ghost")) {
return 53;
}
if (npc.contains("goblin")) {
return 87;
}
if (npc.contains("skeleton") || npc.contains("demon")
|| npc.contains("ogre") || npc.contains("giant")
|| npc.contains("tz-") || npc.contains("jad")) {
return 1154;
}
if (npc.contains("zombie")) {
return 1151;
}
if (npc.contains("man") && !npc.contains("woman")) {
return 816;
}
if (npc.contains("monk") || npc.contains("guard") || npc.contains("farmer") || npc.contains("thief") || npc.contains("druid") || npc.contains("wizard")){
return 816;
}
if (!npc.contains("man") && npc.contains("woman")) {
return 818;
}
return 791;
}
public static int getNpcDeathSounds(int NPCID) {
String npc = GetNpcName(NPCID).toLowerCase();
if (npc.contains("bat")) {
return 7;
}
if (npc.contains("cow")) {
return 3;
}
if (npc.contains("chicken")){
return 25;
}
if (npc.contains("imp")) {
return 9;
}
if (npc.contains("rat")) {
return 15;
}
if (npc.contains("duck")) {
return 25;
}
if (npc.contains("wolf") || npc.contains("bear")) {
return 35;
}
if (npc.contains("dragon")) {
return 44;
}
if (npc.contains("ghost")) {
return 60;
}
if (npc.contains("goblin")) {
return 125;
}
if (npc.contains("skeleton") || npc.contains("demon")
|| npc.contains("ogre") || npc.contains("giant")
|| npc.contains("tz-") || npc.contains("jad")) {
return 70;
}
if (npc.contains("zombie")) {
return 1140;
}
return 70;
}
public static String GetNpcName(int NpcID) {
return NpcHandler.NpcList[NpcID].npcName;
}
public static String getItemName(int ItemID) {
return GameEngine.itemHandler.itemList[ItemID].itemName;
}
public static int getMagicSound(Player c, int spellId) {
return MagicData.MAGIC_SPELLS[spellId][16];
}
public static int getPlayerBlockSounds(Player c) {
int blockSound = 511;
if (c.playerEquipment[c.playerChest] == 2499
|| c.playerEquipment[c.playerChest] == 2501
|| c.playerEquipment[c.playerChest] == 2503
|| c.playerEquipment[c.playerChest] == 4746
|| c.playerEquipment[c.playerChest] == 4757
|| c.playerEquipment[c.playerChest] == 10330) {// Dragonhide
// sound
blockSound = 24;
} else if (c.playerEquipment[c.playerChest] == 10551 || // Torso
c.playerEquipment[c.playerChest] == 10438) {// 3rd age
blockSound = 32;// Weird sound
} else if (c.playerEquipment[c.playerChest] == 10338 || // 3rd age
c.playerEquipment[c.playerChest] == 7399 || // Enchanted
c.playerEquipment[c.playerChest] == 6107 || // Ghostly
c.playerEquipment[c.playerChest] == 4091 || // Mystic
c.playerEquipment[c.playerChest] == 4101 || // Mystic
c.playerEquipment[c.playerChest] == 4111 || // Mystic
c.playerEquipment[c.playerChest] == 1035 || // Zamorak
c.playerEquipment[c.playerChest] == 12971) {// Combat
blockSound = 14;// Robe sound
} else if (c.playerEquipment[c.playerShield] == 4224) {// Crystal Shield
blockSound = 30;// Crystal sound
} else if (c.playerEquipment[c.playerChest] == 1101
|| // Chains
c.playerEquipment[c.playerChest] == 1103
|| c.playerEquipment[c.playerChest] == 1105
|| c.playerEquipment[c.playerChest] == 1107
|| c.playerEquipment[c.playerChest] == 1109
|| c.playerEquipment[c.playerChest] == 1111
|| c.playerEquipment[c.playerChest] == 1113
|| c.playerEquipment[c.playerChest] == 1115
|| // Plates
c.playerEquipment[c.playerChest] == 1117
|| c.playerEquipment[c.playerChest] == 1119
|| c.playerEquipment[c.playerChest] == 1121
|| c.playerEquipment[c.playerChest] == 1123
|| c.playerEquipment[c.playerChest] == 1125
|| c.playerEquipment[c.playerChest] == 1127
|| c.playerEquipment[c.playerChest] == 4720
|| // Barrows armour
c.playerEquipment[c.playerChest] == 4728
|| c.playerEquipment[c.playerChest] == 4749
|| c.playerEquipment[c.playerChest] == 4712
|| c.playerEquipment[c.playerChest] == 11720
|| // Godwars armour
c.playerEquipment[c.playerChest] == 11724
|| c.playerEquipment[c.playerChest] == 3140
|| // Dragon
c.playerEquipment[c.playerChest] == 2615
|| // Fancy
c.playerEquipment[c.playerChest] == 2653
|| c.playerEquipment[c.playerChest] == 2661
|| c.playerEquipment[c.playerChest] == 2669
|| c.playerEquipment[c.playerChest] == 2623
|| c.playerEquipment[c.playerChest] == 3841
|| c.playerEquipment[c.playerChest] == 1127) {// Metal armour
// sound
blockSound = 15;
} else {
blockSound = 511;
}
return blockSound;
}
public static int getWeaponSounds(Player c) {
if (c.playerEquipment[c.playerWeapon] <= 0) {
return 417;
}
if (c.playerEquipment[c.playerWeapon] >= 1) {
String wep = getItemName(c.playerEquipment[c.playerWeapon])
.toLowerCase();
if (c.playerEquipment[c.playerWeapon] == 4718) {// Dharok's
// Greataxe
return 1320;
}
if (c.playerEquipment[c.playerWeapon] == 4734) {// Karil's Crossbow
return 1081;
}
if (c.playerEquipment[c.playerWeapon] == 4747) {// Torag's Hammers
return 1330;
}
if (c.playerEquipment[c.playerWeapon] == 4710) {// Ahrim's Staff
return 2555;
}
if (c.playerEquipment[c.playerWeapon] == 4755) {// Verac's Flail
return 1323;
}
if (c.playerEquipment[c.playerWeapon] == 4726) {// Guthan's
// Warspear
return 2562;
}
if (c.playerEquipment[c.playerWeapon] == 772
|| c.playerEquipment[c.playerWeapon] == 1379
|| c.playerEquipment[c.playerWeapon] == 1381
|| c.playerEquipment[c.playerWeapon] == 1383
|| c.playerEquipment[c.playerWeapon] == 1385
|| c.playerEquipment[c.playerWeapon] == 1387
|| c.playerEquipment[c.playerWeapon] == 1389
|| c.playerEquipment[c.playerWeapon] == 1391
|| c.playerEquipment[c.playerWeapon] == 1393
|| c.playerEquipment[c.playerWeapon] == 1395
|| c.playerEquipment[c.playerWeapon] == 1397
|| c.playerEquipment[c.playerWeapon] == 1399
|| c.playerEquipment[c.playerWeapon] == 1401
|| c.playerEquipment[c.playerWeapon] == 1403
|| c.playerEquipment[c.playerWeapon] == 1405
|| c.playerEquipment[c.playerWeapon] == 1407
|| c.playerEquipment[c.playerWeapon] == 1409
|| c.playerEquipment[c.playerWeapon] == 9100) { // Staff
// wack
return 394;
}
if (c.playerEquipment[c.playerWeapon] == 839
|| c.playerEquipment[c.playerWeapon] == 841
|| c.playerEquipment[c.playerWeapon] == 843
|| c.playerEquipment[c.playerWeapon] == 845
|| c.playerEquipment[c.playerWeapon] == 847
|| c.playerEquipment[c.playerWeapon] == 849
|| c.playerEquipment[c.playerWeapon] == 851
|| c.playerEquipment[c.playerWeapon] == 853
|| c.playerEquipment[c.playerWeapon] == 855
|| c.playerEquipment[c.playerWeapon] == 857
|| c.playerEquipment[c.playerWeapon] == 859
|| c.playerEquipment[c.playerWeapon] == 861
|| c.playerEquipment[c.playerWeapon] == 4734
|| c.playerEquipment[c.playerWeapon] == 2023 // RuneC'Bow
|| c.playerEquipment[c.playerWeapon] == 4212
|| c.playerEquipment[c.playerWeapon] == 4214
|| c.playerEquipment[c.playerWeapon] == 4934
|| c.playerEquipment[c.playerWeapon] == 9104
|| c.playerEquipment[c.playerWeapon] == 9107) { // Bows/Crossbows
return 370;
}
if (c.playerEquipment[c.playerWeapon] == 1363
|| c.playerEquipment[c.playerWeapon] == 1365
|| c.playerEquipment[c.playerWeapon] == 1367
|| c.playerEquipment[c.playerWeapon] == 1369
|| c.playerEquipment[c.playerWeapon] == 1371
|| c.playerEquipment[c.playerWeapon] == 1373
|| c.playerEquipment[c.playerWeapon] == 1375
|| c.playerEquipment[c.playerWeapon] == 1377
|| c.playerEquipment[c.playerWeapon] == 1349
|| c.playerEquipment[c.playerWeapon] == 1351
|| c.playerEquipment[c.playerWeapon] == 1353
|| c.playerEquipment[c.playerWeapon] == 1355
|| c.playerEquipment[c.playerWeapon] == 1357
|| c.playerEquipment[c.playerWeapon] == 1359
|| c.playerEquipment[c.playerWeapon] == 1361
|| c.playerEquipment[c.playerWeapon] == 9109) { // BattleAxes/Axes
return 399;
}
if (c.playerEquipment[c.playerWeapon] == 4718
|| c.playerEquipment[c.playerWeapon] == 7808) { // Dharok
// GreatAxe
return 400;
}
if (c.playerEquipment[c.playerWeapon] == 6609
|| c.playerEquipment[c.playerWeapon] == 1307
|| c.playerEquipment[c.playerWeapon] == 1309
|| c.playerEquipment[c.playerWeapon] == 1311
|| c.playerEquipment[c.playerWeapon] == 1313
|| c.playerEquipment[c.playerWeapon] == 1315
|| c.playerEquipment[c.playerWeapon] == 1317
|| c.playerEquipment[c.playerWeapon] == 1319) { // 2h
return 425;
}
if (wep.contains("scimitar") || wep.contains("longsword")) {
return 396;
}
if (wep.contains("halberd")) {
return 420;
}
if (wep.contains("long")) {
return 396;
}
if (wep.contains("knife")) {
return 368;
}
if (wep.contains("javelin")) {
return 364;
}
if (c.playerEquipment[c.playerWeapon] == 1205 //Daggers
|| c.playerEquipment[c.playerWeapon] == 1203
|| c.playerEquipment[c.playerWeapon] == 1207
|| c.playerEquipment[c.playerWeapon] == 1209
|| c.playerEquipment[c.playerWeapon] == 1211
|| c.playerEquipment[c.playerWeapon] == 1213) {
if (c.fightMode == 0)
return 403;
else
return 396;
}
if (c.playerEquipment[c.playerWeapon] == 1215) //Dragon Dagger
return 403;
if (c.playerEquipment[c.playerWeapon] == 1277 //Swords
|| c.playerEquipment[c.playerWeapon] == 1279
|| c.playerEquipment[c.playerWeapon] == 1281
|| c.playerEquipment[c.playerWeapon] == 1283
|| c.playerEquipment[c.playerWeapon] == 1285
|| c.playerEquipment[c.playerWeapon] == 1287
|| c.playerEquipment[c.playerWeapon] == 1289) {
if (c.fightMode == 0)
return 403;
else
return 396;
}
if (c.playerEquipment[c.playerWeapon] == 9110) {
return 401;
}
if (c.playerEquipment[c.playerWeapon] == 4755) {
return 1059;
}
if (c.playerEquipment[c.playerWeapon] == 4153) {
return 1079;
}
if (c.playerEquipment[c.playerWeapon] == 9103) {
return 385;
}
if (c.playerEquipment[c.playerWeapon] == -1) { // fists
return 417;
}
if (c.playerEquipment[c.playerWeapon] == 2745
|| c.playerEquipment[c.playerWeapon] == 2746
|| c.playerEquipment[c.playerWeapon] == 2747
|| c.playerEquipment[c.playerWeapon] == 2748) { // Godswords
return 390;
}
if (c.playerEquipment[c.playerWeapon] == 4151) {
return 1080;
}
}
return 398;
}
public static int specialSounds(int id) {
if (id == 4151) {// whip
return 1081;
} else if (id == 5698 || id == 1231 || id == 1215 || id == 5680) {// dds
return 385;
} else if (id == 1434) {// Mace
return 387;
} else if (id == 3204) {// halberd
return 420;
} else if (id == 4153) { // gmaul
return 1082;
} else if (id == 7158) { // d2h
return 426;
} else if (id == 4587) { // dscim
return 1305;
} else if (id == 1305) { // D Long
return 390;
} else if (id == 861 || id == 11235 || id == 859) { // MSB, Darkbow
return 386;
} else if (id == 1377) { // DBAxe
return 389;
}
return -1;
}
}
@@ -0,0 +1,159 @@
package com.rs2.game.content.music.sound;
import com.rs2.game.players.Player;
/**
* Sounds
* @author Andrew
*/
public class SoundList {
Player c;
public SoundList(Player player) {
this.c = player;
}
/**
* Skilling
*/
public static final int COOK_ITEM = 357;
public static final int MINING_ORE = 1331;
public static final int ANVIL = 468;
public static final int BONE_BURY = 380;
public static final int FIRE_LIGHT = 375, FIRE_SUCCESSFUL = 608, FIRST_ATTEMPT = 2584;
public static final int TREE_CUT_BEGIN = 471, TREE_CUTTING = 472, TREE_EMPTY = 473;
public static final int FISHING = 289;// Cast out Net/Cage/Harpoon
public static final int START_FLY_FISHING = 377, FLY_FISHING = 378;
public static final int RUNECRAFTING = 481;
public static final int RAKE_WEEDS = 1323;// farming
public static final int SMELTING_ORE = 469;// smelting ore in furnace
public static final int SMITHING_ANVIL = 468;
public static final int STUNNED = 458;// stunned from thieving
public static final int PESTLE_MOTAR = 373;
public static final int PROSPECTING = 431;
public static final int CUT_GEM = 464;
/**
* Skill Level Up Sounds
*/
//Each are different lengths, so a songDelay in the sendQuickSong method would have to be changed per skill sound
//Some of these are level up sounds from 50-99, while some are only heard when unlocking certain items/armour
//Some might not be level up sounds
public static final int LEVEL_UP_RUNECRAFTING_UNKNOWN = 66;//?
public static final int LEVEL_UP_UNKNOWN = 67; //?
public static final int LEVEL_UP_COOKING = 68;
public static final int LEVEL_UP_UNKNOWN2 = 69;//?
public static final int LEVEL_UP_FIREMAKING = 71;
public static final int LEVEL_UP_RUNECRAFTING = 72;
public static final int LEVEL_UP_THIEVING = 73;
public static final int LEVEL_UP_RANGED = 74;
public static final int LEVEL_UP_FLETCHING = 77;
public static final int LEVEL_UP_SMITHING = 78; //? I can't hear this?
public static final int LEVEL_UP_PRAYER2 = 79;
public static final int LEVEL_UP_UNKNOWN5 = 80; //?
public static final int LEVEL_UP_UNKNOWN6 = 82; //?
public static final int LEVEL_UP_PRAYER = 83;
public static final int LEVEL_UP_ATTACK_UNKNOWN = 84; //?
public static final int LEVEL_UP_FISHING = 85;
public static final int LEVEL_UP_MAGIC_UNKNOWN = 86; //?
public static final int LEVEL_UP_MAGIC = 87;
public static final int LEVEL_UP_DEFENCE = 88;
public static final int LEVEL_UP_HERBLORE = 90;
public static final int LEVEL_UP_ATTACK = 91;
public static final int LEVEL_UP_WOODCUTTING = 92;
public static final int LEVEL_UP_UNKNOWN7 = 94; //?
public static final int LEVEL_UP_UNKNOWN8 = 95; //?
public static final int LEVEL_UP_FLETCHING_UNKNOWN = 96; //?
public static final int LEVEL_UP_FISHING_UNKNOWN = 98; //?
public static final int LEVEL_UP_MINING = 99;
public static final int LEVEL_UP_CRAFTING = 100;
public static final int LEVEL_UP_UNKNOWN9 = 101; //?
public static final int LEVEL_UP_MAGIC2 = 102;
public static final int LEVEL_UP_UNKNOWN10 = 103;//?
public static final int LEVEL_UP_UNKNOWN11 = 104;//?
public static final int LEVEL_UP_UNKNOWN12 = 105;//?
public static final int LEVEL_UP_STRENGTH = 107;
public static final int LEVEL_UP_UNKNOWN13 = 108;//?
public static final int LEVEL_UP_UNKNOWN14 = 109;//?
/**
* Death Sound
*/
public static final int PLAYER_DEATH_SOUND = 75;
/**
* Prayer
*/
// public static final int RECHARGE_PRAYER = 442;
// public static final int PROTECT_PRAYER = 444;
public static final int PROTECT_MELEE = 433;
public static final int PROTECT_MAGIC = 438;
public static final int PROTECT_RANGE = 444;
public static final int PROT_MAGE = 438;
public static final int NO_PRAY = 435;
public static final int PRAYER_TO_LOW = 447;
/**
* Magic
*/
public static final int MAGE_SPLASH = 193, MAGE_FAIL = 941;
public static final int TELEBLOCK_CAST = 1185, TELEBLOCK_HIT = 1183;
public static final int LOW_ALCHEMY = 224, HIGH_ALCHEMY = 223;
public static final int ICE_BLITZ = 1110;
public static final int TELEPORT = 202;
public static final int BLOOD_RUSH = 984, BLOOD_BITZ = 985;
public static final int ANCIENT_BLOOD = 986;
public static final int BLOOD_RUSH_SPLASH = 991;
public static final int WIND_STRIKE = 992;
public static final int SUPERHEAT = 217, SUPERHEAT_FAIL = 218;
public static final int BONES_TO_BANNAS = 227;
/**
* Combat
*/
public static final int SHOOT_ARROW = 370;
/**
* Click item
*/
public static final int FOOD_EAT = 317, DRINK = 334;
public static final int ITEM_PICKUP = 356, ITEM_DROP = 376;
/**
* Random Event
*/
public static final int EXPLODING_ROCK = 429, EXPLODING_ROCK_2 = 432;
public static final int KISS_FROG = 652;
/**
* Minigame
*/
public static final int DUEL_WON = 77, DUEL_LOST = 76;
/**
* Objects
*/
public static final int DITCH = 2462;
public static final int JUMPING_STONES = 455;
public static final int PICKABLE = 358;
public static final int SLASH_WEB = 237;
public static final int OPEN_DOOR = 326;
public static final int OPEN_GATE = 1328;
/**
* Items
*/
public static final int EMPTY = 334;
}
@@ -0,0 +1,345 @@
package com.rs2.game.content.quests;
import com.rs2.game.content.quests.impl.BlackKnightsFortress;
import com.rs2.game.content.quests.impl.CooksAssistant;
import com.rs2.game.content.quests.impl.DoricsQuest;
import com.rs2.game.content.quests.impl.GertrudesCat;
import com.rs2.game.content.quests.impl.ImpCatcher;
import com.rs2.game.content.quests.impl.KnightsSword;
import com.rs2.game.content.quests.impl.PiratesTreasure;
import com.rs2.game.content.quests.impl.RestlessGhost;
import com.rs2.game.content.quests.impl.RomeoJuliet;
import com.rs2.game.content.quests.impl.RuneMysteries;
import com.rs2.game.content.quests.impl.SheepShearer;
import com.rs2.game.content.quests.impl.ShieldArrav;
import com.rs2.game.content.quests.impl.VampyreSlayer;
import com.rs2.game.content.quests.impl.WitchsPotion;
import com.rs2.game.content.quests.impl.LostCity;
import com.rs2.game.players.Player;
/**
* Quest Assistant
* @author Andrew (Mr Extremez)
*/
public class QuestAssistant {
public static final int MAXIMUM_QUESTPOINTS = 26;
public static void sendStages(Player player) {
player.getPacketSender().sendString("QP: " + player.questPoints + " ", 3985);
for (Quests quests : Quests.values()) {
if (!quests.questStatus() && quests.getStringId() > 0) {
player.getPacketSender().sendString("", quests.getStringId());
}
}
if (player.pirateTreasure == 0) {
player.getPacketSender().sendString("Pirate's Treasure", 7341);
} else if (player.pirateTreasure == 6) {
player.getPacketSender().sendString("@gre@Pirate's Treasure", 7341);
} else {
player.getPacketSender().sendString("@yel@Pirate's Treasure", 7341);
}
if (player.witchspot == 0) {
player.getPacketSender().sendString("Witch's Potion", 7348);
} else if (player.witchspot == 3) {
player.getPacketSender().sendString("@gre@Witch's Potion", 7348);
} else {
player.getPacketSender().sendString("@yel@Witch's Potion", 7348);
}
if (player.romeojuliet == 0) {
player.getPacketSender().sendString("Romeo and Juliet", 7343);
} else if (player.romeojuliet < 9) {
player.getPacketSender().sendString("@yel@Romeo and Juliet",
7343);
} else if (player.romeojuliet >= 9) {
player.getPacketSender().sendString("@gre@Romeo and Juliet",
7343);
}
if (player.vampSlayer == 0) {
player.getPacketSender().sendString("Vampyre Slayer", 7347);
} else if (player.vampSlayer == 5) {
player.getPacketSender().sendString("@gre@Vampyre Slayer", 7347);
} else {
player.getPacketSender().sendString("@yel@Vampyre Slayer", 7347);
}
if (player.doricQuest == 0) {
player.getPacketSender().sendString("Doric's Quest", 7336);
} else if (player.doricQuest == 3) {
player.getPacketSender().sendString("@gre@Doric's Quest", 7336);
} else {
player.getPacketSender().sendString("@yel@Doric's Quest", 7336);
}
if (player.restGhost == 0) {
player.getPacketSender().sendString("Restless Ghost", 7337);
} else if (player.restGhost == 5) {
player.getPacketSender().sendString("@gre@Restless Ghost", 7337);
} else {
player.getPacketSender().sendString("@yel@Restless Ghost", 7337);
}
if (player.impsC == 0) {
player.getPacketSender().sendString("Imp Catcher", 7340);
} else if (player.impsC == 1) {
player.getPacketSender().sendString("@yel@Imp Catcher", 7340);
} else if (player.impsC == 2) {
player.getPacketSender().sendString("@gre@Imp Catcher", 7340);
}
if (player.gertCat == 0) {
player.getPacketSender().sendString("Gertrudes Cat", 7360);
} else if (player.gertCat == 7) {
player.getPacketSender().sendString("@gre@Gertrudes Cat", 7360);
} else {
player.getPacketSender().sendString("@yel@Gertrudes Cat", 7360);
}
if (player.sheepShear == 0) {
player.getPacketSender().sendString("Sheep Shearer", 7344);
} else if (player.sheepShear == 2) {
player.getPacketSender().sendString("@gre@Sheep Shearer", 7344);
} else {
player.getPacketSender().sendString("@yel@Sheep Shearer", 7344);
}
if (player.runeMist == 0) {
player.getPacketSender().sendString("Rune Mysteries", 7335);
} else if (player.runeMist == 4) {
player.getPacketSender().sendString("@gre@Rune Mysteries", 7335);
} else {
player.getPacketSender().sendString("@yel@Rune Mysteries", 7335);
}
if (player.knightS == 0) {
player.getPacketSender().sendString("The Knight's Sword", 7346);
} else if (player.knightS < 9) {
player.getPacketSender().sendString("@yel@The Knight's Sword", 7346);
} else if (player.knightS == 9) {
player.getPacketSender().sendString("@gre@The Knight's Sword", 7346);
}
if (player.cookAss == 0) {
player.getPacketSender().sendString("Cook's Assistant", 7333);
} else if (player.cookAss == 3) {
player.getPacketSender().sendString("@gre@Cook's Assistant", 7333);
} else if (player.cookAss > 0 && player.cookAss < 3) {
player.getPacketSender().sendString("@yel@Cook's Assistant", 7333);
}
if (player.blackKnight == 0) {
player.getPacketSender().sendString("Black Knights' Fortress", 7332);
} else if (player.blackKnight == 3) {
player.getPacketSender().sendString("@gre@Black Knights' Fortress", 7332);
} else {
player.getPacketSender().sendString("@yel@Black Knights' Fortress", 7332);
}
if (player.shieldArrav == 0) {
player.getPacketSender().sendString("Shield of Arrav", 7345);
} else if (player.shieldArrav == 8) {
player.getPacketSender().sendString("@gre@Shield of Arrav", 7345);
} else {
player.getPacketSender().sendString("@yel@Shield of Arrav", 7345);
}
if (player.lostCity == 0) {
player.getPacketSender().sendString("Lost City", 7367);
} else if (player.lostCity == 3) {
player.getPacketSender().sendString("@gre@Lost City", 7367);
} else {
player.getPacketSender().sendString("@yel@Lost City", 7367);
}
}
public enum Quests {
BLACK_KNIGHT(28164, 7332, "Black Knights' Fortress", true),
COOKS_ASSISTANT(28165, 7333, "Cook's Assistant", true),
DEMON_SLAYER(28166, 7334, "Demon Slayer", false),
DORICS_QUEST(28168, 7336, "Doric's Quest", true),
DRAGON_SLAYER(28215, 7383, "Dragon Slayer", false),
ERNEST(28171, 7339, "Ernest the Chicken", false),
GOBLIN(28170, 7338, "Goblin Diplomacy", false),
IMP_CATCHER(28172, 7340, "Imp Catcher", true),
KNIGHTS_SWORD(28178, 7346, "The Knight's Sword", true),
PIRATES_TREASURE(28173, 7341, "Pirates Treasure", true),
PRINCE_RESCUE(28174, 7342, "Prince Ali Rescue", false),
RESTLESS_GHOST(28169, 7337, "Restless Ghost", true),
ROMEO_JULIET(28175, 7343, "Romeo Juliet", false),
RUNE_MYSTERIES(28167, 7335, "Rune Mysteries", true),
SHEEP_SHEARER(28176, 7344, "Sheep Shearer", true),
SHIELD_OF_ARRAV(28177, 7345, "Shield of Arrav", true),
VAMPYRE_SLAYER(28179, 7347, "Vampyre Slayer", true),
WITCHS_POTION(28180, 7348, "Witchs Potion", true),
BETWEEN_A_ROCK(49228, 12772, "Between A Rock", false),
CHOMPY(2161, 673, "Big Chompy Bird Hunting", false),
BIOHAZARD(28124, 7352, "Biohazard", false),
CABIN(68102, 17510, "Cabin Fever", false),
CLOCK(28185, 7353, "Clock Tower", false),
DEATH(32246, 8438, "Death Plateau", false),
CREATURE(47097, 12129, "Creature of Fenkenstrain", false),
DESERT_TREASURE(50052, 12852, "Desert Treasure", false),
DRUDIC_RITUAL(28187, 7355, "Drudic Ritual", false),
DWARF_CANNON(28188, 7356, "Dwarf Cannon", false),
EADGARS_RUSE(33231, 8679, "Eadgars Ruse", false),
DEVIOUS(61225, 15841, "Devious Minds", false),
DIGSITE(28186, 7354, "Digsite Quest", false),
ELEMENTAL(29035, 7459, "Elemental Workshop", false),
ENAKHRA(63021, 16149, "Enakhra's Lamet", false),
FAIRY1(27075, 6987, "A Fairy Tale Pt. 1", false),
FAMILYCREST(28189, 7357, "Family Crest", false),
FEUD(50036, 12836, "The Feud", false),
FIGHT_ARENA(28190, 7358, "Fight Arena", false),
FISHING_CONTEST(28191, 7359, "Fishing Contest", false),
FORGETTABLE_TABLE(50089, 14169, "Forgettable Tale...", false),
FREMMY_TRIALS(39131, 10115, "The Fremennik Trials", false),
GARDEN(57012, 14604, "Garden of Tranquillity", false),
GERTRUDES_CAT(28192, 7360, "Gertrude's Cat", true),
GHOSTS(47250, 12282, "Ghosts Ahoy", false),
GIANT_DWARF(53009, 13577, "The Giant Dwarf", false),
GOLEM(50039, 12839, "The Golem", false),
GRAND_TREE(28193, 7361, "The Grand Tree", false),
HAND_IN_THE_SAND(63000, 16128, "The Hand in the Sand", false),
HAUNTED_MINE(46081, 11857, "Haunted Mine", false),
HAZEEL(28194, 7362, "Hazeel Cult", false),
HEROES(28195, 7363, "Heroes Quest", false),
HOLY(28196, 7364, "Holy Grail", false),
HORROR(39151, 10135, "Horror from the Deep", false),
ITCHLARIN(17156, 4508, "Itchlarin's Little Helper", false),
AID_OF_MYREQUE(72085, 18517, "In Aid of the Myreque", false),
SEARCH_OF_MYREQUE(46131, 11907, "In Search of the Myreque", false),
JUNGLE_POTION(28197, 7365, "Jungle Potion", false),
LEGENDS_QUEST(28198, 7366, "Legends Quest", false),
LOST_CITY(28199, 7367, "Lost City", true),
LOST_TRIBE(52077, 13389, "The Lost Tribe", false),
MAKING_HISTORY(60127, 15487, "Making History", false),
MONKEY_MADNESS(43124, 11132, "Monkey Madness", false),
MERLINS_CRYSTAL(28200, 7368, "Merlins Crystal", false),
MONKS_FRIEND(28201, 7369, "Monks Friend", false),
MOUNTAIN_DAUGHTER(48101, 12389, "Mountain Daughter", false),
MOURNINGS_END_1(54150, 13974, "Mourning's Ends Part 1", false),
MOURNINGS_END_2(23139, 6027, "Mourning's Ends Part 2", false),
MURDER_MYSTERY(28202, 7370, "Murder Mystery", false),
NATURE_SPIRIT(31201, 8137, "Nature Spirit", false),
OBSERVATORY(28203, 7371, "Observatory Quest", false),
ONE_SMALL_FAVOUR(48057, 12345, "One Small Favour", false),
PLAGUE_CITY(28204, 7372, "Plague City", false),
PRIEST_IN_PERIL(31179, 8115, "Priest in Peril", false),
RAG_AND_BONE_MAN(72252, 18684, "Rag and Bone Man", false),
RAT_CATCHERS(60139, 15499, "Rat Catchers", false),
RECIPE(71130, 18306, "Recipe for Disaster", false),
RECRUITMENT_DRIVE(2156, 668, "Recruitment Drive", false),
REGICIDE(33128, 8576, "Regicide", false),
ROVING_ELVES(47017, 12139, "Roving Elves", false),
RUM_DEAL(58064, 14912, "Rum Deal", false),
SCORPION_CATCHER(28205, 7373, "Scorpion Catcher", false),
SEA_SLUG(28206, 7374, "Sea Slug Quest", false),
SHADES_OF_MORTON(35009, 8969, "Shades of Mort'ton", false),
SHADOW_OF_THE_STORM(59248, 15352, "Shadow of the Storm", false),
SHEEP_HERDER(28207, 7375, "Sheep Herder", false),
SHILO_VILLAGE(28208, 7376, "Shilo Village", false),
SOULS_BANE(28250, 15098, "A Soul's Bane", false),
SPIRITS_OF_THE_ELID(60232, 15592, "Spirits of The Elid", false),
SWAN_SONG(249, 249, "Swan Song", false),
TAI_BWO(6204, 1740, "Tai Bwo Wannai Trio", false),
TWO_CATS(59131, 15235, "A Tail of Two Cats", false),
TEARS_OF_GUTHIX(12206, 3278, "Tears of Guthix", false),
TEMPLE_OF_IKOV(28210, 7378, "Temple of Ikov", false),
THRONE_OF_MISCELLANIA(25118, 6518, "Throne of Miscellania", false),
TOURIST_TRAP(28211, 7379, "The Tourist Trap", false),
TREE_GNOME_VILLAGE(28212, 7380, "Tree Gnome Village", false),
TRIBAL_TOTEM(28213, 7381, "Tribal Totem", false),
TROLL_ROMANCE(46082, 11858, "Troll Romance", false),
TROLL_STRONGHOLD(191, 191, "Troll Stronghold", false),
UNDERGROUND_PASS(38199, 9927, "Underground Pass", false),
WANTED(23136, 6024, "Wanted", false),
WATCHTOWER(28181, 7349, "Watch Tower", false),
WATERFALL(28182, 7350, "Waterfall Quest", false),
WITCH(28183, 7351, "Witch's House", false),
ZOGRE(52044, 13356, "Zogre Flesh Eaters", false);
private final int button, string;
private final String name;
private final boolean questStatus;
private Quests(final int button, final int string, final String name, final boolean questStatus) {
this.button = button;
this.name = name;
this.string = string;
this.questStatus = questStatus;
}
public int getStringId() {
return string;
}
public boolean questStatus() {
return questStatus;
}
public int getButton() {
return button;
}
public String getName() {
return name;
}
public static Quests forButton(int button) {
for (Quests q : Quests.values()) {
if (q.getButton() == button) {
return q;
}
}
return null;
}
}
public static void questButtons(Player player, int buttonId) {
switch (buttonId) {
case 28165:
CooksAssistant.showInformation(player);
break;
case 28167:
RuneMysteries.showInformation(player);
break;
case 28168:
DoricsQuest.showInformation(player);
break;
case 28169:
RestlessGhost.showInformation(player);
break;
case 28172:
ImpCatcher.showInformation(player);
break;
case 28173:
PiratesTreasure.showInformation(player);
break;
case 28175:
RomeoJuliet.showInformation(player);
break;
case 28176:
SheepShearer.showInformation(player);
break;
case 28177:
ShieldArrav.showInformation(player);
break;
case 28178:
KnightsSword.showInformation(player);
break;
case 28179:
VampyreSlayer.showInformation(player);
break;
case 28180:
WitchsPotion.showInformation(player);
break;
case 28192:
GertrudesCat.showInformation(player);
break;
case 28164:
BlackKnightsFortress.showInformation(player);
break;
case 28199:
LostCity.showInformation(player);
break;
default:
if (Quests.forButton(buttonId) != null) {
player.getPacketSender().sendMessage("The quest " + Quests.forButton(buttonId).getName() + " is currently disabled.");
}
break;
}
}
}
@@ -0,0 +1,171 @@
package com.rs2.game.content.quests;
import com.rs2.game.players.Player;
/**
* Quest Rewards
* @author Andrew (Mr Extremez)
*/
public class QuestRewards {
public static String QUEST_NAME;
public static void questReward(Player player, String questName, String Line1, String Line2, String Line3, String Line4, String Line5, String Line6, int itemID) {
player.getPacketSender().sendString("You have completed " + questName + "!", 12144);
player.getPacketSender().sendString("" + player.questPoints, 12147);
player.getPacketSender().sendString(Line1, 12150);
player.getPacketSender().sendString(Line2, 12151);
player.getPacketSender().sendString(Line3, 12152);
player.getPacketSender().sendString(Line4, 12153);
player.getPacketSender().sendString(Line5, 12154);
player.getPacketSender().sendString(Line6, 12155);
if (itemID > 0) {
player.getPacketSender().sendFrame246(12145, 250, itemID);
}
player.getPacketSender().showInterface(12140);
player.getPacketSender().sendMessage("You completed " + questName + "!");
QuestAssistant.sendStages(player);
player.getPacketSender().sendQuickSong(93, 0);
}
public static void knightsReward(Player player) {
questReward(player, "Knight's Sword Quest", "1 Quest Point", "12,725 Smithing XP", "", "", "", "", 0);
QUEST_NAME = "The Knight's Sword";
player.getPacketSender().sendString("@gre@" + QUEST_NAME + "", 7346);
player.getPlayerAssistant().addSkillXP(12725, player.playerSmithing);
player.questPoints ++;
player.knightS = 9;
}
public static void gertFinish(Player player) {
questReward(player, "Gertrude's Cat", "1 Quest Point", "1,525 Cooking XP", "A kitten!", "Ability to raise cats", "A chocolate cake", "A bowl of stew", 1897);
QUEST_NAME = "Gertrude's Cat";
player.getPacketSender().sendString("@gre@" + QUEST_NAME + "", 7360);
player.getItemAssistant().addOrDropItem(1897, 1);
player.getItemAssistant().addOrDropItem(2003, 1);
player.getItemAssistant().addOrDropItem(1560, 1);
player.getPlayerAssistant().addSkillXP(1525, player.playerCooking);
player.questPoints++;
player.gertCat = 7;
}
public static void pirateFinish(Player c) {
questReward(c, "Pirate's Treasure", "2 Quest Points", "One-Eyed Hector's Treasure", "", "", "", "", 2714);
QUEST_NAME = "Pirate's Treasure";
c.getPacketSender().sendString("@gre@" + QUEST_NAME + "", 7341);
c.getItemAssistant().addOrDropItem(2714, 1);
c.questPoints += 2;
c.pirateTreasure = 6;
}
public static void witchFinish(Player client) {
questReward(client, "Witch's Potion", "1 Quest Point", "325 Magic XP", "", "", "", "", 325);
QUEST_NAME = "Witch's Potion";
client.getPacketSender().sendString("@gre@" + QUEST_NAME + "", 7348);
client.getPlayerAssistant().addSkillXP(325, client.playerMagic);
client.questPoints++;
client.witchspot = 3;
}
public static void julietFinish(Player player) {
questReward(player, "Romeo and Juliet", "5 Quest Points", "", "", "", "", "", 0);
QUEST_NAME = "Romeo and Juliet";
player.getPacketSender().sendString("@gre@" + QUEST_NAME + "", 7343);
player.questPoints += 5;
player.romeojuliet = 9;
}
public static void restFinish(Player client) {
questReward(client, "Restless Ghost", "1 Quest Point", "125 Prayer XP", "", "", "", "", 0);
QUEST_NAME = "Restless Ghost";
client.getPacketSender().sendString("@gre@" + QUEST_NAME + "", 7337);
client.getPlayerAssistant().addSkillXP(125, client.playerPrayer);
client.questPoints++;
client.restGhost = 5;
}
public static void vampFinish(Player player) {
questReward(player, "Vampyre Slayer", "3 Quest Points", "4,825 Attack XP", "", "", "", "", 0);
QUEST_NAME = "Vampyre Slayer";
player.getPacketSender().sendString("@gre@" + QUEST_NAME + "", 7347);
player.getPlayerAssistant().addSkillXP(4825, player.playerAttack);
player.questPoints += 3;
player.vampSlayer = 5;
}
public static void runeFinish(Player player) {
questReward(player, "Rune Mysteries", "1 Quest Point", "Air Talisman", "", "", "", "", 1438);
QUEST_NAME = "Rune Mysteries";
player.getPacketSender().sendString("@gre@" + QUEST_NAME + "", 7335);
player.getItemAssistant().addOrDropItem(1438, 1);
player.questPoints++;
player.runeMist = 4;
}
public static void sheepFinish(Player player) {
questReward(player, "Sheep Shearer", "1 Quest Point", "150 Crafting Exp", "60 Coins", "", "", "", 995);
QUEST_NAME = "Sheep Shearer";
player.getPacketSender().sendString("@gre@" + QUEST_NAME + "", 7344);
player.getItemAssistant().addOrDropItem(995, 60);
player.getPlayerAssistant().addSkillXP(150, player.playerCrafting);
player.questPoints++;
player.sheepShear = 2;
}
public static void doricFinish(Player player) {
questReward(player, "Doric's Quest", "1 Quest Point", "1,300 Mining XP", "180 Coins", "", "", "", 995);
QUEST_NAME = "Doric's Quest";
player.getPacketSender().sendString("@gre@" + QUEST_NAME + "", 7336);
player.getItemAssistant().addOrDropItem(995, 180);
player.getPlayerAssistant().addSkillXP(1300, player.playerMining);
player.questPoints++;
player.doricQuest = 3;
}
public static void impFinish(Player player) {
questReward(player, "Imp Catcher", "1 Quest Point", "875 Magic XP", "Amulet of Accuracy", "", "", "", 1478);
QUEST_NAME = "Imp Catcher";
player.getPacketSender().sendString("@gre@" + QUEST_NAME + "", 7340);
player.getItemAssistant().addOrDropItem(1478, 1);
player.getPlayerAssistant().addSkillXP(875, player.playerMagic);
player.questPoints++;
player.impsC = 2;
}
public static void cookReward(Player player) {
questReward(player, "Cook's Assistant", "1 Quest Point", "500 Coins", "300 Cooking XP", "", "", "", 326);
QUEST_NAME = "Cook's Assistant";
player.getPacketSender().sendString("@gre@" + QUEST_NAME + "", 7333);
player.getItemAssistant().addOrDropItem(995, 500);
player.getPlayerAssistant().addSkillXP(300, player.playerCooking);
player.questPoints++;
player.cookAss = 3;
}
public static void blackKnightReward(Player player) {
questReward(player, "Black Knights' Fortress", "3 Quest Points", "2,500 Coins", "", "", "", "", 0);
QUEST_NAME = "Black Knights' Fortress";
player.getPacketSender().sendString("@gre@" + QUEST_NAME + "", 7332);
player.getItemAssistant().addOrDropItem(995, 2500);
player.questPoints += 3;
player.blackKnight = 3;
}
public static void shieldArravReward(Player player) {
questReward(player, "Shield of Arrav", "1 Quest Point", "1,200 Coins", "", "", "", "", 767);
QUEST_NAME = "Shield of Arrav";
player.getPacketSender().sendString("@gre@" + QUEST_NAME + "", 7345);
player.getItemAssistant().addOrDropItem(995, 1200);
player.questPoints++;
player.shieldArrav = 8;
}
public static void lostCityReward(Player player) {
questReward(player, "Lost City", "3 Quest Points", "Access to Zanaris", "", "", "", "", 0);
QUEST_NAME = "Lost City";
player.getPacketSender().sendString("@gre@" + QUEST_NAME + "", 7367);
player.questPoints += 3;
player.lostCity = 3;
}
}
@@ -0,0 +1,44 @@
package com.rs2.game.content.quests.impl;
import com.rs2.game.players.Player;
public class BlackKnightsFortress {
public static void showInformation(Player client) {
for (int i = 8144; i < 8195; i++) {
client.getPacketSender().sendString("", i);
}
client.getPacketSender().sendString("Black Knights' Fortress", 8144);
if (client.blackKnight == 0) {
client.getPacketSender().sendString("I can start this quest by speaking to Sir Amik Varze in", 8147);
client.getPacketSender().sendString("Falador Castle.", 8148);
client.getPacketSender().sendString("", 8149);
client.getPacketSender().sendString("Quest Requirements:", 8150);
client.getPacketSender().sendString("12 Quest Points", 8151);
} else if (client.blackKnight == 1) {
client.getPacketSender().sendString("@str@I've talked with Sir Amik Varze", 8147);
client.getPacketSender().sendString("He wants me to kill 30 Black Knights and", 8148);
client.getPacketSender().sendString("collect their notes.", 8149);
client.getPacketSender().sendString("", 8150);
client.getPacketSender().sendString("@red@30 Black Knight notes", 8151);
} else if (client.blackKnight == 2) {
client.getPacketSender().sendString("@str@I talked to Sir Amik Varze.", 8147);
client.getPacketSender().sendString("@str@I've killed 30 Black Knights", 8148);
client.getPacketSender().sendString("@str@and given Sir Amik Varze his items.", 8149);
client.getPacketSender().sendString("I should go speak to Sir Amik Varze.", 8150);
} else if (client.blackKnight == 3) {
client.getPacketSender().sendString("@str@I talked to Sir Amik Varze.", 8147);
client.getPacketSender().sendString("@str@I've killed 30 Black Knights", 8148);
client.getPacketSender().sendString("@str@and given Sir Amik Varze his items.", 8149);
client.getPacketSender().sendString("", 8150);
client.getPacketSender().sendString("@red@QUEST COMPLETE", 8151);
client.getPacketSender().sendString("", 8152);
client.getPacketSender().sendString("REWARDS:", 8153);
client.getPacketSender().sendString("2,500 coins", 8154);
client.getPacketSender().sendString("3 Quest Points", 8155);
}
client.getPacketSender().showInterface(8134);
}
}
@@ -0,0 +1,62 @@
package com.rs2.game.content.quests.impl;
import com.rs2.game.players.Player;
/**
* @author Andrew (Mr Extremez)
* Cooks Assistant
*/
public class CooksAssistant {
private static final int EGG = 1944;
private static final int MILK = 1927;
private static final int FLOUR = 1933;
public static void showInformation(Player client) {
for (int i = 8144; i < 8195; i++) {
client.getPacketSender().sendString("", i);
}
client.getPacketSender().sendString("@dre@Cook's Assistant", 8144);
client.getPacketSender().sendString("", 8145);
if (client.cookAss == 0) {
client.getPacketSender().sendString("Cook's Assistant", 8144);
client.getPacketSender().sendString("I can start this quest by speaking to the Cook in the", 8147);
client.getPacketSender().sendString("Lumbridge Castle kitchen.", 8148);
client.getPacketSender().sendString("", 8149);
client.getPacketSender().sendString("There are no minimum requirements.", 8150);
} else if (client.cookAss == 1) {
client.getPacketSender().sendString("Cook's Assistant", 8144);
client.getPacketSender().sendString("@str@I've talked to the cook.", 8147);
client.getPacketSender().sendString("He wants me to gather the following materials:", 8148);
if (client.getItemAssistant().playerHasItem(EGG, 1)) {
client.getPacketSender().sendString("@str@1 egg", 8149);
} else {
client.getPacketSender().sendString("@red@1 egg", 8149);
}
if (client.getItemAssistant().playerHasItem(MILK, 1)) {
client.getPacketSender().sendString("@str@1 bucket of milk", 8150);
} else {
client.getPacketSender().sendString("@red@1 bucket of milk", 8150);
}
if (client.getItemAssistant().playerHasItem(FLOUR, 1)) {
client.getPacketSender().sendString("@str@1 heap of flour", 8151);
} else {
client.getPacketSender().sendString("@red@1 pot of flour", 8151);
}
} else if (client.cookAss == 2) {
client.getPacketSender().sendString("Cook's Assistant", 8144);
client.getPacketSender().sendString("@str@I talked to the cook.", 8147);
client.getPacketSender().sendString("@str@I gave the cook his items.", 8148);
client.getPacketSender().sendString("I should go speak to the cook.", 8149);
} else if (client.cookAss == 3) {
client.getPacketSender().sendString("Cook's Assistant", 8144);
client.getPacketSender().sendString("@str@I talked to the cook.", 8147);
client.getPacketSender().sendString("@str@I gave him his items.", 8148);
client.getPacketSender().sendString("@red@ QUEST COMPLETE", 8150);
client.getPacketSender().sendString("As a reward, I gained 150 Cooking Experience.", 8151);
}
client.getPacketSender().showInterface(8134);
}
}
@@ -0,0 +1,72 @@
package com.rs2.game.content.quests.impl;
import com.rs2.game.players.Player;
/**
* Doric's Quest
* @author Andrew (Mr Extremez)
*/
public class DoricsQuest {
public static void showInformation(Player client) {
for (int i = 8144; i < 8195; i++) {
client.getPacketSender().sendString("", i);
}
client.getPacketSender().sendString("@dre@Dorics Quest", 8144);
client.getPacketSender().sendString("", 8145);
if (client.doricQuest == 0) {
client.getPacketSender().sendString("Dorics Quest", 8144);
client.getPacketSender().sendString(
"I can start this quest by speaking to doric", 8147);
client.getPacketSender().sendString("Northwest of falador.",
8148);
client.getPacketSender().sendString("", 8149);
client.getPacketSender().sendString(
"Recommended Levels: 15 Mining", 8150);
} else if (client.doricQuest == 1) {
client.getPacketSender().sendString("Dorics Quest", 8144);
client.getPacketSender().sendString(
"@str@I've talked to the doric.", 8147);
client.getPacketSender().sendString(
"He wants me to gather the following materials:", 8148);
if (client.getItemAssistant().playerHasItem(434, 6)) {
client.getPacketSender().sendString("@str@6 Clay", 8149);
} else {
client.getPacketSender().sendString("@red@6 Clay", 8149);
}
if (client.getItemAssistant().playerHasItem(436, 4)) {
client.getPacketSender().sendString("@str@4 Copper", 8150);
} else {
client.getPacketSender().sendString("@red@4 Copper", 8150);
}
if (client.getItemAssistant().playerHasItem(440, 2)) {
client.getPacketSender().sendString("@str@2 Iron ore", 8151);
} else {
client.getPacketSender().sendString("@red@2 Iron ore", 8151);
}
} else if (client.doricQuest == 2) {
client.getPacketSender().sendString("Dorics Quest", 8144);
client.getPacketSender().sendString(
"@str@I talked to the doric.", 8147);
client.getPacketSender().sendString(
"@str@I gave the doric his items.", 8148);
client.getPacketSender().sendString(
"I should go speak to the doric.", 8149);
} else if (client.doricQuest == 3) {
client.getPacketSender().sendString("Dorics Quest", 8144);
client.getPacketSender().sendString(
"@str@I talked to the doric.", 8147);
client.getPacketSender().sendString(
"@str@I gave him his items.", 8148);
client.getPacketSender().sendString("@red@ QUEST COMPLETE",
8150);
client.getPacketSender().sendString(
"As a reward, I gained 26000 Mining Exp", 8151);
client.getPacketSender().sendString("180 Coins", 8152);
client.getPacketSender().sendString("And 1 Quest Point.", 8152);
}
client.getPacketSender().showInterface(8134);
}
}
@@ -0,0 +1,92 @@
package com.rs2.game.content.quests.impl;
import com.rs2.game.players.Player;
/**
* Gertrudes Cat
* @author Andrew (Mr Extremez)
*/
public class GertrudesCat {
public static void showInformation(Player client) {
for (int i = 8144; i < 8195; i++) {
client.getPacketSender().sendString("", i);
}
client.getPacketSender().sendString("@dre@Gertrudes Cat", 8144);
client.getPacketSender().sendString("", 8145);
if (client.gertCat == 0) {
client.getPacketSender().sendString("Gertrudes Cat", 8144);
client.getPacketSender().sendString(
"I can start this quest by speaking to Gertrude in", 8147);
client.getPacketSender().sendString("Varrock.", 8148);
client.getPacketSender().sendString("Minimum Requirments:", 8149);
client.getPacketSender().sendString("5 Fishing.", 8150);
} else if (client.gertCat == 1) {
client.getPacketSender().sendString("Gertrudes Cat", 8144);
client.getPacketSender().sendString(
"@str@I've talked to Gertrude", 8147);
client.getPacketSender().sendString(
"I should speak to Wilough and Shilop.", 8148);
client.getPacketSender().sendString("They are in the varrock square.", 8149);
} else if (client.gertCat == 2) {
client.getPacketSender().sendString("Gertrudes Cat", 8144);
client.getPacketSender().sendString(
"@str@I've talked to Wilough and Shilop", 8147);
client.getPacketSender().sendString("@str@I gave them 100 coins",
8148);
client.getPacketSender().sendString(
"I should try to find Gertrudes Cat.", 8149);
} else if (client.gertCat == 3) {
client.getPacketSender().sendString("Gertrudes Cat", 8144);
client.getPacketSender().sendString(
"@str@I've talked to the Gertrudes Cat", 8147);
client.getPacketSender().sendString(
"@str@She seemed mad so I gave her", 8148);
client.getPacketSender().sendString("@str@a bucket of milk",
8149);
client.getPacketSender().sendString("The cat still seems mad you should give her some,", 8150);
client.getPacketSender().sendString("seasoned salmon.", 8151);
} else if (client.gertCat == 4) {
client.getPacketSender().sendString("Gertrudes Cat", 8144);
client.getPacketSender().sendString("@str@The cat is still mad",
8147);
client.getPacketSender().sendString("@str@So i gave her some",
8148);
client.getPacketSender().sendString("@str@seasoned samon.", 8149);
client.getPacketSender().sendString("I should talk to Gertrudes cat to see how she feels.", 8150);
} else if (client.gertCat == 5) {
client.getPacketSender().sendString("Gertrudes Cat", 8144);
client.getPacketSender().sendString(
"@str@The cat seems to be mad", 8147);
client.getPacketSender().sendString(
"@str@because she can't find her kittens.", 8148);
client.getPacketSender().sendString("I should go in the lumberyard and", 8149);
client.getPacketSender().sendString("check it out.", 8150);
} else if (client.gertCat == 6) {
client.getPacketSender().sendString("Gertrudes Cat", 8144);
client.getPacketSender().sendString("@str@I gave gertrudes cat",
8147);
client.getPacketSender().sendString("@str@her kittens", 8148);
client.getPacketSender().sendString(
"@str@and she now seems happy.", 8149);
client.getPacketSender().sendString("I should head back to Gertrude.", 8150);
} else if (client.gertCat == 7) {
client.getPacketSender().sendString("Gertrudes Cat", 8144);
client.getPacketSender().sendString(
"@str@I helped gertrude with her", 8147);
client.getPacketSender().sendString(
"@str@Cat so she awarded me.", 8148);
client.getPacketSender().sendString("@red@ QUEST COMPLETE",
8149);
client.getPacketSender().sendString(
"As a reward, I gained 1525 Cooking exp.", 8150);
client.getPacketSender().sendString(
"A kitten! And the ability to raise cats.", 8150);
client.getPacketSender().sendString("And 1 Quest Point", 8151);
client.getPacketSender().sendString("", 8152);
}
client.getPacketSender().showInterface(8134);
}
}
@@ -0,0 +1,46 @@
package com.rs2.game.content.quests.impl;
import com.rs2.game.players.Player;
/**
* Imp Catcher
* @author Andrew (Mr Extremez)
*/
public class ImpCatcher {
public static void showInformation(Player client) {
for (int i = 8144; i < 8295; i++) {
client.getPacketSender().sendString("", i);
}
client.getPacketSender().sendString("@dre@Imp Catcher", 8144);
client.getPacketSender().sendString("", 8145);
if (client.impsC == 0) {
client.getPacketSender().sendString( "I can start this quest by speaking to Wizard Mizgog who is", 8147);
client.getPacketSender().sendString("in the Wizard's Tower.", 8148);
} else if (client.impsC == 1) {
client.getPacketSender().sendString("@str@I can start this quest by speaking to Wizard Mizgog who is", 8147);
client.getPacketSender().sendString("@str@in the Wizard's Tower.", 8148);
client.getPacketSender().sendString("", 8149);
client.getPacketSender().sendString("Wizard Mizgog have asked you to get the following items:", 8150);
client.getPacketSender().sendString("Red bead", 8151);
client.getPacketSender().sendString("Yellow bead", 8152);
client.getPacketSender().sendString("Black bead", 8153);
client.getPacketSender().sendString("White bead", 8154);
} else if (client.impsC == 2) {
client.getPacketSender().sendString("@str@I can start this quest by speaking to Wizard Mizgog who is", 8147);
client.getPacketSender().sendString("@str@in the Wizard's Tower.", 8148);
client.getPacketSender().sendString("", 8149);
client.getPacketSender().sendString("@str@Wizard Mizgog have asked you to get the following items:", 8150);
client.getPacketSender().sendString("@str@Red bead", 8151);
client.getPacketSender().sendString("@str@Yellow bead", 8152);
client.getPacketSender().sendString("@str@Black bead", 8153);
client.getPacketSender().sendString("@str@White bead", 8154);
client.getPacketSender().sendString("", 8155);
client.getPacketSender().sendString("You have completed this quest!", 8156);
}
client.getPacketSender().showInterface(8134);
}
}
@@ -0,0 +1,193 @@
package com.rs2.game.content.quests.impl;
import com.rs2.game.players.Player;
public class KnightsSword {
public static void showInformation(Player player) {
for(int i = 8144; i < 8195; i++) {
player.getPacketSender().sendString("", i);
}
player.getPacketSender().sendString("@dre@The Knight's Sword", 8144);
player.getPacketSender().sendString("", 8145);
if(player.knightS == 0) {
player.getPacketSender().sendString("I can start this quest by speaking to the squire", 8147);
player.getPacketSender().sendString("who is in the courtyard of the White Knight's castle", 8148);
player.getPacketSender().sendString("", 8149);
player.getPacketSender().sendString("I will need at least 10 mining to complete this quest", 8150);
} else if(player.knightS == 1) {
player.getPacketSender().sendString("The squire has lost Sir Vyvin's sword and asked me", 8147);
player.getPacketSender().sendString("to find a replacement. He suggested that I start", 8148);
player.getPacketSender().sendString("by speaking to Reldo, the librarian in the Varrock Castle", 8149);
} else if (player.knightS == 2) {
player.getPacketSender().sendString("@str@The squire has lost Sir Vyvin's sword and asked me", 8147);
player.getPacketSender().sendString("@str@to find a replacement. He suggested that I start", 8148);
player.getPacketSender().sendString("@str@by speaking to Reldo, the librarian in the Varrock Castle", 8149);
player.getPacketSender().sendString("", 8150);
player.getPacketSender().sendString("Reldo told me there may be an Imcando dwarf living near the", 8151);
player.getPacketSender().sendString("Asgarnian peninsula. He said I should bring him some", 8152);
player.getPacketSender().sendString("Red Berry Pie to get him to be willing to talk to me", 8153);
} else if(player.knightS == 3) {
player.getPacketSender().sendString("@str@The squire has lost Sir Vyvin's sword and asked me", 8147);
player.getPacketSender().sendString("@str@to find a replacement. He suggested that I start", 8148);
player.getPacketSender().sendString("@str@by speaking to Reldo, the librarian in the Varrock Castle", 8149);
player.getPacketSender().sendString("", 8150);
player.getPacketSender().sendString("@str@Reldo told me there may be an Imcando dwarf living near the", 8151);
player.getPacketSender().sendString("@str@Asgarnian peninsula. He said I should bring him some", 8152);
player.getPacketSender().sendString("@str@Red Berry Pie to get him to be willing to talk to me", 8153);
player.getPacketSender().sendString("", 8154);
player.getPacketSender().sendString("I found the Imcando dwarf named Thurgo and gave him some", 8155);
player.getPacketSender().sendString("Red berry pie. Now that he likes me I should talk to him", 8156);
player.getPacketSender().sendString("and find out if he'll make the sword for me.", 8157);
} else if(player.knightS == 4) {
player.getPacketSender().sendString("@str@The squire has lost Sir Vyvin's sword and asked me", 8147);
player.getPacketSender().sendString("@str@to find a replacement. He suggested that I start", 8148);
player.getPacketSender().sendString("@str@by speaking to Reldo, the librarian in the Varrock Castle", 8149);
player.getPacketSender().sendString("", 8150);
player.getPacketSender().sendString("@str@Reldo told me there may be an Imcando dwarf living near the", 8151);
player.getPacketSender().sendString("@str@Asgarnian peninsula. He said I should bring him some", 8152);
player.getPacketSender().sendString("@str@Red Berry Pie to get him to be willing to talk to me", 8153);
player.getPacketSender().sendString("", 8154);
player.getPacketSender().sendString("@str@I found the Imcando dwarf named Thurgo and gave him some", 8155);
player.getPacketSender().sendString("@str@Red berry pie. Now that he likes me I should talk to him", 8156);
player.getPacketSender().sendString("@str@and find out if he'll make the sword for me.", 8157);
player.getPacketSender().sendString("", 8158);
player.getPacketSender().sendString("Thurgo says he needs a picture of the sword.", 8159);
player.getPacketSender().sendString("Maybe the squire will have one?", 8160);
player.getPacketSender().sendString("", 8161);
} else if(player.knightS == 5) {
player.getPacketSender().sendString("@str@The squire has lost Sir Vyvin's sword and asked me", 8147);
player.getPacketSender().sendString("@str@to find a replacement. He suggested that I start", 8148);
player.getPacketSender().sendString("@str@by speaking to Reldo, the librarian in the Varrock Castle", 8149);
player.getPacketSender().sendString("", 8150);
player.getPacketSender().sendString("@str@Reldo told me there may be an Imcando dwarf living near the", 8151);
player.getPacketSender().sendString("@str@Asgarnian peninsula. He said I should bring him some", 8152);
player.getPacketSender().sendString("@str@Red Berry Pie to get him to be willing to talk to me.", 8153);
player.getPacketSender().sendString("", 8154);
player.getPacketSender().sendString("@str@I found the Imcando dwarf named Thurgo and gave him some", 8155);
player.getPacketSender().sendString("@str@Red berry pie. Now that he likes me I should talk to him", 8156);
player.getPacketSender().sendString("@str@and find out if he'll make the sword for me.", 8157);
player.getPacketSender().sendString("", 8158);
player.getPacketSender().sendString("Thurgo says he needs a picture of the sword.", 8159);
player.getPacketSender().sendString("@str@Maybe the squire will have one?", 8160);
player.getPacketSender().sendString("", 8161);
player.getPacketSender().sendString("The squire thinks Sir Vyvin keeps a picture of the sword in", 8162);
player.getPacketSender().sendString("a cupboard in his room, but I must be very careful not to", 8163);
player.getPacketSender().sendString("get caught.", 8164);
player.getPacketSender().sendString("", 8165);
player.getPacketSender().sendString("", 8166);
player.getPacketSender().sendString("", 8167);
player.getPacketSender().sendString("", 8168);
player.getPacketSender().sendString("", 8169);
} else if(player.knightS == 6) {
player.getPacketSender().sendString("@str@The squire has lost Sir Vyvin's sword and asked me", 8147);
player.getPacketSender().sendString("@str@to find a replacement. He suggested that I start", 8148);
player.getPacketSender().sendString("@str@by speaking to Reldo, the librarian in the Varrock Castle", 8149);
player.getPacketSender().sendString("", 8150);
player.getPacketSender().sendString("@str@Reldo told me there may be an Imcando dwarf living near the", 8151);
player.getPacketSender().sendString("@str@Asgarnian peninsula. He said I should bring him some", 8152);
player.getPacketSender().sendString("@str@Red Berry Pie to get him to be willing to talk to me.", 8153);
player.getPacketSender().sendString("", 8154);
player.getPacketSender().sendString("@str@I found the Imcando dwarf named Thurgo and gave him some", 8155);
player.getPacketSender().sendString("@str@Red berry pie. Now that he likes me I should talk to him", 8156);
player.getPacketSender().sendString("@str@and find out if he'll make the sword for me.", 8157);
player.getPacketSender().sendString("", 8158);
player.getPacketSender().sendString("Thurgo says he needs a picture of the sword.", 8159);
player.getPacketSender().sendString("@str@Maybe the squire will have one?", 8160);
player.getPacketSender().sendString("", 8161);
player.getPacketSender().sendString("@str@The squire thinks Sir Vyvin keeps a picture of the sword in", 8162);
player.getPacketSender().sendString("@str@a cupboard in his room, but I must be very careful not to", 8163);
player.getPacketSender().sendString("@str@get caught.", 8164);
player.getPacketSender().sendString("I should bring the picture to Thurgo", 8165);
player.getPacketSender().sendString("", 8166);
player.getPacketSender().sendString("", 8167);
player.getPacketSender().sendString("", 8168);
player.getPacketSender().sendString("", 8169);
} else if(player.knightS == 7) {
player.getPacketSender().sendString("The squire has lost Sir Vyvin's sword and asked me", 8147);
player.getPacketSender().sendString("to find a replacement.@str@ He suggested that I start", 8148);
player.getPacketSender().sendString("@str@by speaking to Reldo, the librarian in the Varrock Castle", 8149);
player.getPacketSender().sendString("", 8150);
player.getPacketSender().sendString("@str@Reldo told me there may be an Imcando dwarf living near the", 8151);
player.getPacketSender().sendString("@str@Asgarnian peninsula. He said I should bring him some", 8152);
player.getPacketSender().sendString("@str@Red Berry Pie to get him to be willing to talk to me.", 8153);
player.getPacketSender().sendString("", 8154);
player.getPacketSender().sendString("@str@I found the Imcando dwarf named Thurgo and gave him some", 8155);
player.getPacketSender().sendString("@str@Red berry Pie. Now that he likes me I should talk to him", 8156);
player.getPacketSender().sendString("@str@and find out if he'll make the sword for me.", 8157);
player.getPacketSender().sendString("", 8158);
player.getPacketSender().sendString("@str@Thurgo says he needs a picture of the sword.", 8159);
player.getPacketSender().sendString("@str@Maybe the squire will have one?", 8160);
player.getPacketSender().sendString("", 8161);
player.getPacketSender().sendString("@str@The squire thinks Sir Vyvin keeps a picture of the sword in", 8162);
player.getPacketSender().sendString("@str@cupboard in his room, but I must be very careful not to", 8163);
player.getPacketSender().sendString("@str@get caught.", 8164);
player.getPacketSender().sendString("@str@I should bring the picture to Thurgo", 8165);
player.getPacketSender().sendString("", 8166);
player.getPacketSender().sendString("Thurgo has asked me to bring him 2 iron bars and 1 blurite", 8167);
player.getPacketSender().sendString("ore for him to make the sword with. He says blurite can be", 8168);
player.getPacketSender().sendString("mined in the cave by his home, but it is guarded by", 8169);
player.getPacketSender().sendString("dangerous monsters. So I should be very careful.", 8170);
} else if(player.knightS == 8) {
player.getPacketSender().sendString("The squire has lost Sir Vyvin's sword and asked me", 8147);
player.getPacketSender().sendString("to find a replacement.@str@ He suggested that I start", 8148);
player.getPacketSender().sendString("@str@by speaking to Reldo, the librarian in the Varrock Castle", 8149);
player.getPacketSender().sendString("", 8150);
player.getPacketSender().sendString("@str@Reldo told me there may be an Imcando dwarf living near the", 8151);
player.getPacketSender().sendString("@str@Asgarnian peninsula. He said I should bring him some", 8152);
player.getPacketSender().sendString("@str@Red Berry Pie to get him to be willing to talk to me.", 8153);
player.getPacketSender().sendString("", 8154);
player.getPacketSender().sendString("@str@I found the Imcando dwarf named Thurgo and gave him some", 8155);
player.getPacketSender().sendString("@str@Red berry pie. Now that he likes me I should talk to him", 8156);
player.getPacketSender().sendString("@str@and find out if he'll make the sword for me.", 8157);
player.getPacketSender().sendString("", 8158);
player.getPacketSender().sendString("@str@Thurgo says he needs a picture of the sword.", 8159);
player.getPacketSender().sendString("@str@Maybe the squire will have one?", 8160);
player.getPacketSender().sendString("", 8161);
player.getPacketSender().sendString("@str@The squire thinks Sir Vyvin keeps a picture of the sword in", 8162);
player.getPacketSender().sendString("@str@cupboard in his room, but I must be very careful not to", 8163);
player.getPacketSender().sendString("@str@get caught.", 8164);
player.getPacketSender().sendString("@str@I should bring the picture to Thurgo", 8165);
player.getPacketSender().sendString("", 8166);
player.getPacketSender().sendString("@str@Thurgo has asked me to bring him 2 iron bars and 1 blurite", 8167);
player.getPacketSender().sendString("@str@ore for him to make the sword with. He says blurite can be", 8168);
player.getPacketSender().sendString("@str@mined in the cave by his home, but it is guarded by", 8169);
player.getPacketSender().sendString("@str@dangerous monsters. So I should be very careful.", 8170);
player.getPacketSender().sendString("", 8171);
player.getPacketSender().sendString("Thurgo made me the sword, I should bring it back to the", 8172);
player.getPacketSender().sendString("knight to get my reward!", 8173);
player.getPacketSender().sendString("", 8174);
} else if(player.knightS == 9) {
player.getPacketSender().sendString("@str@The squire has lost Sir Vyvin's sword and asked me", 8147);
player.getPacketSender().sendString("@str@to find a replacement. He suggested that I start", 8148);
player.getPacketSender().sendString("@str@by speaking to Reldo, the librarian in the Varrock Castle", 8149);
player.getPacketSender().sendString("", 8150);
player.getPacketSender().sendString("@str@Reldo told me there may be an Imcando dwarf living near the", 8151);
player.getPacketSender().sendString("@str@Asgarnian peninsula. He said I should bring him some", 8152);
player.getPacketSender().sendString("@str@Red Berry Pie to get him to be willing to talk to me.", 8153);
player.getPacketSender().sendString("", 8154);
player.getPacketSender().sendString("@str@I found the Imcando dwarf named Thurgo and gave him some", 8155);
player.getPacketSender().sendString("@str@Red berry pie. Now that he likes me I should talk to him", 8156);
player.getPacketSender().sendString("@str@and find out if he'll make the sword for me.", 8157);
player.getPacketSender().sendString("", 8158);
player.getPacketSender().sendString("@str@Thurgo says he needs a picture of the sword.", 8159);
player.getPacketSender().sendString("@str@Maybe the squire will have one?", 8160);
player.getPacketSender().sendString("", 8161);
player.getPacketSender().sendString("@str@The squire thinks Sir Vyvin keeps a picture of the sword in", 8162);
player.getPacketSender().sendString("@str@a cupboard in his room, but I must be very careful not to", 8163);
player.getPacketSender().sendString("@str@get caught.", 8164);
player.getPacketSender().sendString("@str@I should bring the picture to Thurgo", 8165);
player.getPacketSender().sendString("", 8166);
player.getPacketSender().sendString("@str@Thurgo has asked me to bring him 2 iron bars and 1 blurite", 8167);
player.getPacketSender().sendString("@str@ore for him to make the sword with. He says blurite can be", 8168);
player.getPacketSender().sendString("@str@mined in the cave by his home, but it is guarded by", 8169);
player.getPacketSender().sendString("@str@dangerous monsters. So I should be very careful.", 8170);
player.getPacketSender().sendString("@str@Thurgo made me the sword, I should bring it back to the", 8172);
player.getPacketSender().sendString("@str@knight to get my reward!", 8173);
player.getPacketSender().sendString("", 8173);
player.getPacketSender().sendString("@red@Quest Complete!", 8174);
}
player.getPacketSender().showInterface(8134);
}
}
@@ -0,0 +1,64 @@
package com.rs2.game.content.quests.impl;
import com.rs2.game.players.Player;
/**
* Lost City
* @author Olivier (JohnsonPhillips / JohnsonMichaels123)
*/
public class LostCity {
public static void showInformation(Player client) {
for (int i = 8144; i < 8195; i++) {
client.getPacketSender().sendString("", i);
}
client.getPacketSender().sendString("@dre@Lost City", 8144);
client.getPacketSender().sendString("", 8145);
if (client.lostCity == 0) {
client.getPacketSender().sendString("Lost City", 8144);
client.getPacketSender().sendString(
"I can start this quest by speaking to the four adventurers ", 8147);
client.getPacketSender().sendString(
"west of Lumbridge swamp.",
8148);
client.getPacketSender().sendString("Minimum Requirements", 8150);
client.getPacketSender().sendString(
"31 Crafting", 8151);
client.getPacketSender().sendString(
"36 Woodcutting", 8151);
client.getPacketSender().sendString(
"I must be able to defeat a high-level tree spirit", 8153);
client.getPacketSender().sendString(
"without the use of weapons or armour.", 8154);
} else if (client.lostCity == 1) {
client.getPacketSender().sendString("Lost City", 8144);
client.getPacketSender().sendString(
"@str@I've talked to the adventurers who told me", 8147);
client.getPacketSender().sendString(
"that there is a leprechaun hiding in the trees nearby", 8148);
client.getPacketSender().sendString(
"who knows how to locate the lost city.", 8149);
} else if (client.lostCity == 2) {
client.getPacketSender().sendString("Lost City", 8144);
client.getPacketSender().sendString(
"@str@I talked to the leprechaun who told me that", 8147);
client.getPacketSender().sendString(
"Zanaris can be accessed through the shed in lumbridge", 8148);
client.getPacketSender().sendString(
"Swamp through the use of a Dramen staff, which I can craft", 8149);
client.getPacketSender().sendString(
"by obtaining logs from a Spirit Tree.", 8149);
} else if (client.lostCity == 3) {
client.getPacketSender().sendString("Lost City", 8144);
client.getPacketSender().sendString(
"@str@I defeated the Spirit Tree", 8147);
client.getPacketSender().sendString("@str@I crafted a dramen staff.",
8148);
client.getPacketSender().sendString(
"I went through the Lumbridge shed and discovered Zanaris!", 8149);
}
client.getPacketSender().showInterface(8134);
}
}
@@ -0,0 +1,100 @@
package com.rs2.game.content.quests.impl;
import com.rs2.game.players.Player;
/**
* Pirates Treasure
* @author Andrew (Mr Extremez)
*/
public class PiratesTreasure {
public static void showInformation(Player client) {
for (int i = 8144; i < 8195; i++) {
client.getPacketSender().sendString("", i);
}
client.getPacketSender().sendString("@dre@Pirate's Treasure", 8144);
client.getPacketSender().sendString("", 8145);
if (client.pirateTreasure == 0) {
client.getPacketSender().sendString("Pirate's Treasure", 8144);
client.getPacketSender().sendString(
"I can start this quest by speaking to Redbeard Frank in",
8147);
client.getPacketSender().sendString("Port Sarim", 8148);
client.getPacketSender().sendString("", 8149);
client.getPacketSender().sendString(
"There are no minimum requirements.", 8150);
} else if (client.pirateTreasure == 1) {
client.getPacketSender().sendString("Pirate's Treasure", 8144);
client.getPacketSender().sendString(
"@str@I've talked to Redbeard.", 8147);
client.getPacketSender().sendString(
"He wants me to get him some rum", 8148);
} else if (client.pirateTreasure == 2) {
client.getPacketSender().sendString("Pirate's Treasure", 8144);
client.getPacketSender().sendString(
"@str@I talked to Redbeard.", 8147);
client.getPacketSender().sendString(
"@str@I found a way to get the rum", 8148);
client.getPacketSender().sendString(
"I should get the rum and return to Redbeard.", 8149);
} else if (client.pirateTreasure == 3) {
client.getPacketSender().sendString("Pirate's Treasure", 8144);
client.getPacketSender().sendString(
"@str@I talked to Redbeard.", 8147);
client.getPacketSender().sendString(
"@str@I found a way to get the rum", 8148);
client.getPacketSender().sendString("@str@I gave him the rum",
8149);
client.getPacketSender().sendString(
"He told me I need to look at the chest in", 8149);
client.getPacketSender().sendString("The blue moon inn", 8150);
} else if (client.pirateTreasure == 4) {
client.getPacketSender().sendString("Pirate's Treasure", 8144);
client.getPacketSender().sendString(
"@str@I talked to Redbeard.", 8147);
client.getPacketSender().sendString(
"@str@I found a way to get the rum", 8148);
client.getPacketSender().sendString("@str@I gave him the rum",
8149);
client.getPacketSender().sendString(
"@str@I looked in the chest", 8149);
client.getPacketSender().sendString(
"I need to go to falador and kill the gardener", 8150);
} else if (client.pirateTreasure == 5) {
client.getPacketSender().sendString(
"@str@I talked to Redbeard.", 8147);
client.getPacketSender().sendString(
"@str@I found a way to get the rum", 8148);
client.getPacketSender().sendString("@str@I gave him the rum",
8149);
client.getPacketSender().sendString(
"@str@I looked in the chest", 8149);
client.getPacketSender().sendString(
"@str@I went to falador and killed the gardener", 8150);
client.getPacketSender().sendString(
"I should find the casket now", 8151);
} else if (client.pirateTreasure == 6) {
client.getPacketSender().sendString(
"@str@I talked to Redbeard.", 8147);
client.getPacketSender().sendString(
"@str@I found a way to get the rum", 8148);
client.getPacketSender().sendString("@str@I gave him the rum",
8149);
client.getPacketSender().sendString(
"@str@I looked in the chest", 8149);
client.getPacketSender().sendString(
"@str@I went to falador and killed the gardener", 8150);
client.getPacketSender().sendString("@str@I found the casket ",
8181);
client.getPacketSender().sendString("@red@QUEST COMPLETE",
8152);
client.getPacketSender().sendString(
"As a reward, I gained a casket.", 8153);
client.getPacketSender().sendString("2 Quest Points.", 8153);
}
client.getPacketSender().showInterface(8134);
}
}
@@ -0,0 +1,70 @@
package com.rs2.game.content.quests.impl;
import com.rs2.game.players.Player;
/**
* Restless Ghost
* @author Andrew (Mr Extremez)
*/
public class RestlessGhost {
public static void showInformation(Player client) {
for (int i = 8144; i < 8195; i++) {
client.getPacketSender().sendString("", i);
}
client.getPacketSender().sendString("@dre@Restless Ghost", 8144);
client.getPacketSender().sendString("", 8145);
if (client.restGhost == 0) {
client.getPacketSender().sendString("Restless Ghost", 8144);
client.getPacketSender().sendString("I can start this quest by speaking to Father Aereck in", 8147);
client.getPacketSender().sendString("Lumbridge", 8148);
client.getPacketSender().sendString("Minimum Requirements:", 8149);
client.getPacketSender().sendString("None.", 8150);
} else if (client.restGhost == 1) {
client.getPacketSender().sendString("Restless Ghost", 8144);
client.getPacketSender().sendString(
"@str@I've talked to Father Aereck", 8147);
client.getPacketSender().sendString(
"I should speak to Father Urhey", 8148);
} else if (client.restGhost == 2) {
client.getPacketSender().sendString("Restless Ghost", 8144);
client.getPacketSender().sendString(
"@str@I've talked Father Urhey", 8147);
client.getPacketSender().sendString("@str@He gave me an amulet",
8148);
client.getPacketSender().sendString(
"I should speak to the ghost", 8149);
} else if (client.restGhost == 3) {
client.getPacketSender().sendString("Restless Ghost", 8144);
client.getPacketSender().sendString(
"@str@I've talked to the Ghost", 8147);
client.getPacketSender().sendString("I should travel to the wizards tower and kill the skeleton", 8148);
client.getPacketSender().sendString(
"I should find the ghosts skull", 8149);
} else if (client.restGhost == 4) {
client.getPacketSender().sendString("Restless Ghost", 8144);
client.getPacketSender().sendString("@str@I've found the skull",
8147);
client.getPacketSender().sendString(
"@str@I killed the skeleton", 8148);
client.getPacketSender().sendString(
"I should travel back to the ghost", 8149);
} else if (client.restGhost == 5) {
client.getPacketSender().sendString("Restless Ghost", 8144);
client.getPacketSender().sendString(
"@str@I've set the skull in the coffin", 8147);
client.getPacketSender().sendString(
"@str@I've freed the ghost.", 8148);
client.getPacketSender().sendString("@red@ QUEST COMPLETE",
8150);
client.getPacketSender().sendString(
"As a reward, I gained 125 Prayer Exp.", 8151);
client.getPacketSender().sendString("And 1 Quest Point", 8152);
client.getPacketSender().sendString("", 8152);
}
client.getPacketSender().showInterface(8134);
}
}
@@ -0,0 +1,355 @@
package com.rs2.game.content.quests.impl;
import com.rs2.game.players.Player;
/**
* Romeo and Juliet
* @author Andrew (Mr Extremez)
*/
public class RomeoJuliet {
public static void showInformation(Player client) {
for (int i = 8144; i < 8195; i++) {
client.getPacketSender().sendString("", i);
}
client.getPacketSender().sendString("@dre@Romeo & Juliet", 8144);
client.getPacketSender().sendString("", 8145);
if (client.romeojuliet == 0) {
client.getPacketSender().sendString(
"To start the quest, you should talk with Romeo", 8147);
client.getPacketSender().sendString("found in Varrock Square.",
8148);
} else if (client.romeojuliet == 1) {
client.getPacketSender()
.sendString(
"@str@To start the quest, you should talk with Romeo",
8147);
client.getPacketSender().sendString(
"@str@found in Varrock Square.", 8148);
client.getPacketSender().sendString("", 8149);
client.getPacketSender().sendString(
"Romeo has asked you to speak to Juliet for him", 8150);
client.getPacketSender().sendString(
"and return to him, as she hasn't been responding to any",
8151);
client.getPacketSender().sendString("his letters lately.", 8152);
} else if (client.romeojuliet == 2) {
client.getPacketSender()
.sendString(
"@str@To start the quest, you should talk with Romeo",
8147);
client.getPacketSender().sendString(
"@str@found in Varrock Square.", 8148);
client.getPacketSender().sendString("", 8149);
client.getPacketSender()
.sendString(
"@str@Romeo has asked you to speak to Juliet for him",
8150);
client.getPacketSender()
.sendString(
"@str@and return to him, as she hasn't been responding to any",
8151);
client.getPacketSender().sendString("@str@his letters lately.",
8152);
client.getPacketSender().sendString("", 8153);
client.getPacketSender()
.sendString(
"You have spoken to Juliet who's been acting strange",
8154);
client.getPacketSender().sendString(
"she gave you a message and asked you to leave", 8155);
client.getPacketSender().sendString("Could this be for Romeo?",
8156);
} else if (client.romeojuliet == 4) {
client.getPacketSender()
.sendString(
"@str@To start the quest, you should talk with Romeo",
8147);
client.getPacketSender().sendString(
"@str@found in Varrock Square.", 8148);
client.getPacketSender().sendString("", 8149);
client.getPacketSender()
.sendString(
"@str@Romeo has asked you to speak to Juliet for him",
8150);
client.getPacketSender()
.sendString(
"@str@and return to him, as she hasn't been responding to any",
8151);
client.getPacketSender().sendString("@str@his letters lately.",
8152);
client.getPacketSender().sendString("", 8153);
client.getPacketSender().sendString(
"@str@You have spoken to Juliet who's been acting strange",
8154);
client.getPacketSender().sendString(
"@str@she gave you a message and asked you to leave", 8155);
client.getPacketSender().sendString(
"@str@could this be for Romeo?", 8156);
client.getPacketSender().sendString("", 8157);
client.getPacketSender().sendString(
"You have spoken to Romeo and given him the message", 8158);
client.getPacketSender().sendString(
"You should try to talk to him again", 8159);
} else if (client.romeojuliet == 5) {
client.getPacketSender()
.sendString(
"@str@To start the quest, you should talk with Romeo",
8147);
client.getPacketSender().sendString(
"@str@found in Varrock Square.", 8148);
client.getPacketSender().sendString("", 8149);
client.getPacketSender()
.sendString(
"@str@Romeo has asked you to speak to Juliet for him",
8150);
client.getPacketSender()
.sendString(
"@str@and return to him, as she hasn't been responding to any",
8151);
client.getPacketSender().sendString("@str@his letters lately.",
8152);
client.getPacketSender().sendString("", 8153);
client.getPacketSender().sendString(
"@str@You have spoken to Juliet who's been acting strange",
8154);
client.getPacketSender().sendString(
"@str@she gave you a message and asked you to leave", 8155);
client.getPacketSender().sendString(
"@str@could this be for Romeo?", 8156);
client.getPacketSender().sendString(
"@str@You have spoken to Juliet who's been acting strange",
8154);
client.getPacketSender().sendString(
"@str@she gave you a message and asked you to leave", 8155);
client.getPacketSender().sendString(
"@str@could this be for Romeo?", 8156);
client.getPacketSender().sendString("", 8157);
client.getPacketSender().sendString(
"@str@You have spoken to Romeo and given him the message",
8158);
client.getPacketSender().sendString(
"@str@You should try to talk to him again", 8159);
client.getPacketSender().sendString(
"Romeo says you should see a witch called Winelda", 8160);
} else if (client.romeojuliet == 6) {
client.getPacketSender()
.sendString(
"@str@To start the quest, you should talk with Romeo",
8147);
client.getPacketSender().sendString(
"@str@found in Varrock Square.", 8148);
client.getPacketSender().sendString("", 8149);
client.getPacketSender()
.sendString(
"@str@Romeo has asked you to speak to Juliet for him",
8150);
client.getPacketSender()
.sendString(
"@str@and return to him, as she hasn't been responding to any",
8151);
client.getPacketSender().sendString("@str@his letters lately.",
8152);
client.getPacketSender().sendString("", 8153);
client.getPacketSender().sendString(
"@str@You have spoken to Juliet who's been acting strange",
8154);
client.getPacketSender().sendString(
"@str@she gave you a message and asked you to leave", 8155);
client.getPacketSender().sendString(
"@str@could this be for Romeo?", 8156);
client.getPacketSender().sendString(
"@str@You have spoken to Juliet who's been acting strange",
8154);
client.getPacketSender().sendString(
"@str@she gave you a message and asked you to leave", 8155);
client.getPacketSender().sendString(
"@str@could this be for Romeo?", 8156);
client.getPacketSender().sendString("", 8157);
client.getPacketSender().sendString(
"@str@You have spoken to Romeo and given him the message",
8158);
client.getPacketSender().sendString(
"@str@You should try to talk to him again", 8159);
client.getPacketSender().sendString(
"@str@Romeo says you should see a witch called Winelda",
8160);
client.getPacketSender().sendString("", 8161);
client.getPacketSender().sendString(
"Winelda needs me to bring her 1 rats tail, 1 bone, and 1",
8162);
client.getPacketSender().sendString("vial of water", 8163);
} else if (client.romeojuliet == 7) {
client.getPacketSender()
.sendString(
"@str@To start the quest, you should talk with Romeo",
8147);
client.getPacketSender().sendString(
"@str@found in Varrock Square.", 8148);
client.getPacketSender().sendString("", 8149);
client.getPacketSender()
.sendString(
"@str@Romeo has asked you to speak to Juliet for him",
8150);
client.getPacketSender()
.sendString(
"@str@and return to him, as she hasn't been responding to any",
8151);
client.getPacketSender().sendString("@str@his letters lately.",
8152);
client.getPacketSender().sendString("", 8153);
client.getPacketSender().sendString(
"@str@You have spoken to Juliet who's been acting strange",
8154);
client.getPacketSender().sendString(
"@str@she gave you a message and asked you to leave", 8155);
client.getPacketSender().sendString(
"@str@could this be for Romeo?", 8156);
client.getPacketSender().sendString(
"@str@You have spoken to Juliet who's been acting strange",
8154);
client.getPacketSender().sendString(
"@str@she gave you a message and asked you to leave", 8155);
client.getPacketSender().sendString(
"@str@could this be for Romeo?", 8156);
client.getPacketSender().sendString("", 8157);
client.getPacketSender().sendString(
"@str@You have spoken to Romeo and given him the message",
8158);
client.getPacketSender().sendString(
"@str@You should try to talk to him again", 8159);
client.getPacketSender().sendString(
"@str@Romeo says you should see a witch called Winelda",
8160);
client.getPacketSender().sendString("", 8161);
client.getPacketSender().sendString(
"@str@Winelda needs me to bring her 1 rats tail, 1 bone",
8162);
client.getPacketSender().sendString("@str@and 1 vial of water",
8163);
client.getPacketSender().sendString("", 8164);
client.getPacketSender()
.sendString(
"I brought Winelda 1 rats tail, 1 bone, and 1 vail of water",
8162);
client.getPacketSender().sendString(
"I should go speak to Juliet", 8163);
} else if (client.romeojuliet == 8) {
client.getPacketSender()
.sendString(
"@str@To start the quest, you should talk with Romeo",
8147);
client.getPacketSender().sendString(
"@str@found in Varrock Square.", 8148);
client.getPacketSender().sendString("", 8149);
client.getPacketSender()
.sendString(
"@str@Romeo has asked you to speak to Juliet for him",
8150);
client.getPacketSender()
.sendString(
"@str@and return to him, as she hasn't been responding to any",
8151);
client.getPacketSender().sendString("@str@his letters lately.",
8152);
client.getPacketSender().sendString("", 8153);
client.getPacketSender().sendString(
"@str@You have spoken to Juliet who's been acting strange",
8154);
client.getPacketSender().sendString(
"@str@she gave you a message and asked you to leave", 8155);
client.getPacketSender().sendString(
"@str@could this be for Romeo?", 8156);
client.getPacketSender().sendString(
"@str@You have spoken to Juliet who's been acting strange",
8154);
client.getPacketSender().sendString(
"@str@she gave you a message and asked you to leave", 8155);
client.getPacketSender().sendString(
"@str@could this be for Romeo?", 8156);
client.getPacketSender().sendString("", 8157);
client.getPacketSender().sendString(
"@str@You have spoken to Romeo and given him the message",
8158);
client.getPacketSender().sendString(
"@str@You should try to talk to him again", 8159);
client.getPacketSender().sendString(
"@str@Romeo says you should see a witch called Winelda",
8160);
client.getPacketSender().sendString("", 8161);
client.getPacketSender().sendString(
"@str@Winelda needs me to bring her 1 rats tail, 1 bone",
8162);
client.getPacketSender().sendString("@str@and 1 vial of water",
8163);
client.getPacketSender().sendString("", 8164);
client.getPacketSender()
.sendString(
"@str@I brought Winelda 1 rats tail, 1 bone, and 1 vail of water",
8165);
client.getPacketSender().sendString(
"@str@I should go speak to Juliet and give her the potion",
8166);
client.getPacketSender().sendString("", 8167);
client.getPacketSender().sendString(
"I should speak to juliet and give her the potion", 8168);
client.getPacketSender().sendString(
"I should go speak to Romeo", 8169);
} else if (client.romeojuliet == 9) {
client.getPacketSender()
.sendString(
"@str@To start the quest, you should talk with Romeo",
8147);
client.getPacketSender().sendString(
"@str@found in Varrock Square.", 8148);
client.getPacketSender().sendString("", 8149);
client.getPacketSender()
.sendString(
"@str@Romeo has asked you to speak to Juliet for him",
8150);
client.getPacketSender()
.sendString(
"@str@and return to him, as she hasn't been responding to any",
8151);
client.getPacketSender().sendString("@str@his letters lately.",
8152);
client.getPacketSender().sendString("", 8153);
client.getPacketSender().sendString(
"@str@You have spoken to Juliet who's been acting strange",
8154);
client.getPacketSender().sendString(
"@str@she gave you a message and asked you to leave", 8155);
client.getPacketSender().sendString(
"@str@could this be for Romeo?", 8156);
client.getPacketSender().sendString(
"@str@You have spoken to Juliet who's been acting strange",
8154);
client.getPacketSender().sendString(
"@str@she gave you a message and asked you to leave", 8155);
client.getPacketSender().sendString(
"@str@could this be for Romeo?", 8156);
client.getPacketSender().sendString("", 8157);
client.getPacketSender().sendString(
"@str@You have spoken to Romeo and given him the message",
8158);
client.getPacketSender().sendString("@str@You should try to talk to him again", 8159);
client.getPacketSender().sendString("@str@Romeo says you should see a witch called Winelda", 8160);
client.getPacketSender().sendString("", 8161);
client.getPacketSender().sendString("@str@Winelda needs me to bring her 1 rats tail, 1 bone", 8162);
client.getPacketSender().sendString("@str@and 1 vial of water",8163);
client.getPacketSender().sendString("", 8164);
client.getPacketSender().sendString("@str@I brought Winelda 1 rats tail, 1 bone, and 1 vail of water",8165);
client.getPacketSender().sendString("@str@I should go speak to Juliet and give her the potion", 8166);
client.getPacketSender().sendString("", 8167);
client.getPacketSender().sendString("@str@I have spoken to Juliet, she drank the potion", 8168);
client.getPacketSender().sendString("@str@I should go speak to Romeo", 8169);
client.getPacketSender().sendString("", 8168);
client.getPacketSender().sendString("I have spoken to Romeo, he's thankful for all of our help", 8169);
client.getPacketSender().sendString("@red@ QUEST COMPLETE", 8170);
client.getPacketSender().sendString("As a reward, I gained 5 quest points.", 8171);
}
client.getPacketSender().showInterface(8134);
}
}
@@ -0,0 +1,65 @@
package com.rs2.game.content.quests.impl;
import com.rs2.game.players.Player;
/**
* Rune Mysteries
* @author Andrew (Mr Extremez)
*/
public class RuneMysteries {
public static void showInformation(Player client) {
for (int i = 8144; i < 8195; i++) {
client.getPacketSender().sendString("", i);
}
client.getPacketSender().sendString("@dre@Rune Mysteries", 8144);
client.getPacketSender().sendString("", 8145);
if (client.runeMist == 0) {
client.getPacketSender().sendString("Rune Mysteries", 8144);
client.getPacketSender().sendString(
"I can start this quest by speaking to Duke Horiaco", 8147);
client.getPacketSender().sendString(
"who is located on the 2nd floor of the Lumbridge Castle.",
8148);
client.getPacketSender().sendString("", 8149);
client.getPacketSender().sendString(
"There are no minimum requirments.", 8150);
} else if (client.runeMist == 1) {
client.getPacketSender().sendString("Rune Mysteries", 8144);
client.getPacketSender().sendString(
"@str@I've talked to the duke", 8147);
client.getPacketSender().sendString(
"I should take the talisman to the Head Wizard.", 8148);
} else if (client.runeMist == 2) {
client.getPacketSender().sendString("Rune Mysteries", 8144);
client.getPacketSender().sendString(
"@str@I've talked to Sedridor", 8147);
client.getPacketSender().sendString(
"@str@I gave him the talisman", 8148);
client.getPacketSender().sendString(
"I should bring the notes to Aubury.", 8149);
} else if (client.runeMist == 3) {
client.getPacketSender().sendString("Rune Mysteries", 8144);
client.getPacketSender().sendString(
"@str@I've talked to Aubury.", 8147);
client.getPacketSender().sendString("@str@I gave him the notes",
8148);
client.getPacketSender().sendString(
"I should go back to the wizard tower", 8149);
} else if (client.runeMist == 4) {
client.getPacketSender().sendString("Rune Mysteries", 8144);
client.getPacketSender().sendString("@str@I talked to Sedridor",
8147);
client.getPacketSender().sendString(
"@str@I gave him his items.", 8148);
client.getPacketSender().sendString("@red@ QUEST COMPLETE",
8150);
client.getPacketSender().sendString(
"As a reward, I gained 1 Quest point", 8151);
client.getPacketSender().sendString("And an air talisman.", 8152);
}
client.getPacketSender().showInterface(8134);
}
}
@@ -0,0 +1,54 @@
package com.rs2.game.content.quests.impl;
import com.rs2.game.players.Player;
/**
* Sheep Shearer
* @author Andrew (Mr Extremez)
*/
public class SheepShearer {
public static void showInformation(Player client) {
for (int i = 8144; i < 8195; i++) {
client.getPacketSender().sendString("", i);
}
client.getPacketSender().sendString("@dre@Sheep Shearer", 8144);
client.getPacketSender().sendString("", 8145);
if (client.sheepShear == 0) {
client.getPacketSender().sendString("Sheep Shearer", 8144);
client.getPacketSender().sendString(
"I can start this quest by speaking to Fred in", 8147);
client.getPacketSender().sendString("Lumbridge.", 8148);
client.getPacketSender().sendString("Minimum Requirments:", 8149);
client.getPacketSender().sendString("None.", 8150);
} else if (client.sheepShear == 1) {
client.getPacketSender().sendString("Sheep Shearer", 8144);
client.getPacketSender().sendString("@str@I've talked to fred",
8147);
client.getPacketSender().sendString(
"I've agreed to get him some wool.", 8148);
if (client.getItemAssistant().playerHasItem(1759, 20)) {
client.getPacketSender().sendString("@str@Ball of Wool", 8149);
} else {
client.getPacketSender().sendString("@red@Ball of Wool",
8149);
}
} else if (client.sheepShear == 2) {
client.getPacketSender().sendString("Sheep Shearer", 8144);
client.getPacketSender().sendString("@str@I gave fred his wool",
8147);
client.getPacketSender().sendString("@str@So he awarded me.",
8148);
client.getPacketSender().sendString("@red@ QUEST COMPLETE",
8149);
client.getPacketSender().sendString("As a reward, 60 coins.",
8150);
client.getPacketSender().sendString("150 crating exp", 8150);
client.getPacketSender().sendString("And 1 Quest Point", 8151);
client.getPacketSender().sendString("", 8152);
}
client.getPacketSender().showInterface(8134);
}
}
@@ -0,0 +1,114 @@
package com.rs2.game.content.quests.impl;
import com.rs2.game.players.Client;
import com.rs2.game.players.Player;
/**
* Shield of Arrav
* @author RedSparr0w
*/
public class ShieldArrav {
Client client;
private static String[] lines = new String[]{};
public ShieldArrav(Client client) {
this.client = client;
}
public static void showInformation(Player player) {
// Clear all lines
for (int i = 8144; i < 8195; i++) player.getPacketSender().sendString("", i);
// Set the title
player.getPacketSender().sendString("Shield of Arrav", 8144);
// Add content
if (player.shieldArrav == 0) {
lines = new String[]{
"I can start this quest by speaking to @red@Reldo @bla@in @red@Varrock's",
"@red@Palace Library@bla@, or by speaking to @red@Charlie the Tramp @bla@near",
"the @red@Blue Moon Inn @bla@in @red@Varrock.",
"I will need a friend to help me and some combat experience",
"may be an advantage.",
};
} else if (player.shieldArrav == 1) {
lines = new String[]{
"I need to find @red@'The Shield of Arrav' @bla@book",
"in @red@Varrock's Palace Library",
};
} else if (player.shieldArrav == 2) {
lines = new String[]{
"@str@I found 'The Shield of Arrav' book",
"I should speak to @red@Reldo",
};
} else if (player.shieldArrav == 3) {
lines = new String[]{
"@str@I found 'The Shield of Arrav' book",
"@str@I've spoken with Raldo",
"Lets go speak with @red@Baraek",
};
} else if (player.shieldArrav == 4) {
lines = new String[]{
"@str@I found 'The Shield of Arrav' book",
"@str@I've spoken with Raldo",
"@str@I've spoken with Baraek",
"He told me where I can find the Phoenix Gang hideout,",
"He said it was located in the South Eastern side of Varrock,",
"I should check it out.",
};
} else if (player.shieldArrav == 5) {
lines = new String[]{
"@str@I found 'The Shield of Arrav' book",
"@str@I've spoken with Raldo",
"@str@I've spoken with Baraek",
"@str@I found the hideout",
"I need to goto the @red@Blue Moon Inn",
"and obtain the intelligence report.",
};
} else if (player.shieldArrav == 6) {
lines = new String[]{
"@str@I found 'The Shield of Arrav' book",
"@str@I've spoken with Raldo",
"@str@I've spoken with Baraek",
"@str@I found the hideout",
"@str@I obtained the intelligence report",
"I need to find the Shield",
"and take it to @red@Curator Haig Halen",
"he should be at @red@Varrock Museum"
};
} else if (player.shieldArrav == 7) {
lines = new String[]{
"@str@I found 'The Shield of Arrav' book",
"@str@I've spoken with Raldo",
"@str@I've spoken with Baraek",
"@str@I found the hideout",
"@str@I obtained the intelligence report",
"@str@I turned in the shield",
"I need to take this certificate",
"to @red@King Roald @bla@for my reward",
};
} else if (player.shieldArrav == 8) {
lines = new String[]{
"@str@I found 'The Shield of Arrav' book",
"@str@I've spoken with Raldo",
"@str@I've spoken with Baraek",
"@str@I found the hideout",
"@str@I obtained the intelligence report",
"@str@I turned in the shield",
"@str@I got a certificate and",
"@str@turned it in for my reward",
"",
"@red@QUEST COMPLETE",
"",
"REWARDS:",
"1,200 coins",
"1 Quest Point",
};
}
// Send the lines to the client
int lineNumber = 8147;
for (String line : lines) player.getPacketSender().sendString(line, lineNumber++);
player.getPacketSender().showInterface(8134);
}
}
@@ -0,0 +1,70 @@
package com.rs2.game.content.quests.impl;
import com.rs2.game.players.Player;
/**
* Vampyre Slayer
* @author Andrew (Mr Extremez)
*/
public class VampyreSlayer {
private static String[] lines = new String[]{};
public static void showInformation(Player client) {
// Clear all lines
for (int i = 8144; i < 8195; i++) client.getPacketSender().sendString("", i);
// Set the title
client.getPacketSender().sendString("Vampyre Slayer", 8144);
// Add content
if (client.vampSlayer == 0) {
lines = new String[]{
"I can start this quest by speaking to Morgan in",
"Draynor Village.",
"Minimum Requirements:",
"Be able to kill a level 37 monster.",
};
} else if (client.vampSlayer == 1) {
lines = new String[]{
"@str@I've talked to Morgan",
"I should speak to Doctor Harlow",
};
} else if (client.vampSlayer == 2) {
lines = new String[]{
"@str@I've talked to Doctor Harlow",
"I need to bring him a beer.",
"I should speak to the bartender",
};
} else if (client.vampSlayer == 3) {
lines = new String[]{
"@str@I've talked to the bartender",
"@str@I gave Doctor Harlow the beer",
"@str@Doctor Harlow talked to me and",
"@str@Gave me a stake and hammer.",
"Get everything you need and go to Draynor Village.",
"Begin your battle.",
};
} else if (client.vampSlayer == 4) {
lines = new String[]{
"@str@I've killed the Vampire",
"I need to talk to Morgan to complete the quest.",
};
} else if (client.vampSlayer == 5) {
lines = new String[]{
"@str@I've killed the Vampire",
"@str@I've Talked to Morgan",
"",
"@red@QUEST COMPLETE",
"",
"REWARDS:",
"4,825 Attack Exp.",
"1 Quest Point",
};
}
// Send the lines to the client
int lineNumber = 8147;
for (String line : lines) client.getPacketSender().sendString(line, lineNumber++);
client.getPacketSender().showInterface(8134);
}
}
@@ -0,0 +1,54 @@
package com.rs2.game.content.quests.impl;
import com.rs2.game.players.Player;
/**
* Witchs Potion
* @author Andrew (Mr Extremez)
*/
public class WitchsPotion {
public static void showInformation(Player client) {
for (int i = 8144; i < 8195; i++) {
client.getPacketSender().sendString("", i);
}
client.getPacketSender().sendString("@dre@Witch's Potion", 8144);
client.getPacketSender().sendString("", 8145);
if (client.witchspot == 0) {
client.getPacketSender().sendString("Witch's Potion", 8144);
client.getPacketSender().sendString(
"I can start this quest by speaking to Hetty", 8147);
client.getPacketSender().sendString("Rimmington.", 8148);
client.getPacketSender().sendString("Minimum Requirments:", 8149);
client.getPacketSender().sendString("None.", 8150);
} else if (client.witchspot == 1) {
client.getPacketSender().sendString("Witch's Potion", 8144);
client.getPacketSender().sendString(
"@str@I've talked to the Hetty", 8147);
client.getPacketSender().sendString(
"I've agreed to get her the ingredients", 8148);
} else if (client.witchspot == 2) {
client.getPacketSender().sendString("Witch's Potion", 8144);
client.getPacketSender().sendString(
"@str@I have all the ingredients", 8147);
client.getPacketSender().sendString("I should talk to hetty.",
8148);
client.getPacketSender().sendString("", 8149);
} else if (client.witchspot == 3) {
client.getPacketSender().sendString("Witch's Potion", 8144);
client.getPacketSender().sendString("@str@I've Talked to Hetty",
8147);
client.getPacketSender().sendString(
"@str@I drank from the Cauldron", 8148);
client.getPacketSender().sendString("@red@ QUEST COMPLETE",
8150);
client.getPacketSender().sendString(
"As a reward, I gained 325 Magic Exp.", 8151);
client.getPacketSender().sendString("And 1 Quest Point", 8152);
client.getPacketSender().sendString("", 8152);
}
client.getPacketSender().showInterface(8134);
}
}
@@ -0,0 +1,53 @@
package com.rs2.game.content.random;
import java.awt.Point;
import java.util.Random;
import com.rs2.GameEngine;
import com.rs2.game.objects.Objects;
import com.rs2.game.players.Player;
public class Balloons extends Objects {
static Random r = new Random();
public static int item, amount;
public static int x, y;
@SuppressWarnings("static-access")
public Balloons(int id, int x, int y, int height, int face, int type,
int ticks, int item, int amount) {
super(id, x, y, height, face, type, ticks);
this.x = x;
this.y = y;
this.item = item;
this.amount = amount;
}
public static void popBalloon(Player player, int x, int y) {
PartyRoom.coords.remove(getCoords());
Balloons empty = remove(x, y);
GameEngine.itemHandler.createGroundItem(player, item, x, y, amount, player.playerId);
item = 0;
amount = 0;
GameEngine.objectHandler.addObject(empty);
GameEngine.objectHandler.placeObject(empty);
player.startAnimation(794);
}
public static Point getCoords() {
return new Point(x, y);
}
public static Balloons getBalloon(int item, int amount) {
return new Balloons(115 + r.nextInt(5), 2730 + r.nextInt(13),
3462 + r.nextInt(13), 0, 0, 10, 0, item, amount);
}
public static Balloons getEmpty() {
return new Balloons(115 + r.nextInt(5), 2730 + r.nextInt(13),
3462 + r.nextInt(13), 0, 0, 10, 0, 0, 0);
}
public static Balloons remove(int x, int y) {
return new Balloons(-1, x, y, 0, 0, 10, 0, 0, 0);
}
}
@@ -0,0 +1,58 @@
package com.rs2.game.content.random;
import com.rs2.GameConstants;
import com.rs2.game.players.PlayerHandler;
/**
* Holiday Drops
* @author Andrew (Mr Extremez)
*/
public enum HolidayDrops {
EASTER(1961, "Easter", false), HALLOWEEN(1053, "Halloween", false), CHRISTMAS(962, "Christmas", false);
private final int item;// holiday item
private final String name;// holiday name
private final boolean whichHoliday;// if true, this holiday will be dropped
public final int DROP_DISTANCE = 40;// distance of drops
public int count = 0;// count starts at 0 and ends at 400 can be changed
public final int drops = 7;// this is just for random number of the drops
public static int DROP_AMOUNT = PlayerHandler.playerCount * 5;// players
// online *
// 5 = drop
// amount
public static int dropAmount() {
int amount = DROP_AMOUNT;
if (GameConstants.SERVER_DEBUG) {
return amount * 60;
}
return amount;
}
private HolidayDrops(int item, String name, boolean whichHoliday) {
this.item = item;
this.name = name;
this.whichHoliday = whichHoliday;
}
public int getItem() {
return item;
}
public String getName() {
return name;
}
public boolean getHoliday() {
return whichHoliday;
}
public final int[][] COORDS = { { 3214, 3424 }, // Varrock
{ 3222, 3218 }, // Lumbridge
{ 2964, 3378 }, // Falador
{ 3082, 3419 }, // Barb
{ 3082, 3249 }, // Draynor
{ 3293, 3180 }, // Al Kharid
{ 3034, 3246 }, // Rimmington
};
}
@@ -0,0 +1,90 @@
package com.rs2.game.content.random;
import com.rs2.GameEngine;
import com.rs2.event.CycleEvent;
import com.rs2.event.CycleEventContainer;
import com.rs2.event.CycleEventHandler;
import com.rs2.game.players.Client;
import com.rs2.game.players.Player;
import com.rs2.game.players.PlayerHandler;
import com.rs2.util.Misc;
/**
* Holiday Drops
* @author Andrew (I'm A Boss on Rune-Server, Mr Extremez on Moparscape & Runelocus)
*/
public class Holidays {
public static void startDropping(Client c) {
for (final HolidayDrops holiday : HolidayDrops.values()) {
for (Player player : PlayerHandler.players) {
if (player != null) {
Client p1 = (Client) player;
if (holiday.getHoliday()) {
if (p1.playerRights > 2) {
p1.getPacketSender().sendMessage("Currently dropping " + HolidayDrops.dropAmount() + " items.");
}
p1.getPacketSender().sendMessage("The " + holiday.getName() + " event has started, goodluck!");
dropItems(c);
}
}
}
}
}
public static void dropItems(Client client) {
CycleEventHandler.getSingleton().addEvent(client, new CycleEvent() {
@Override
public void execute(CycleEventContainer container) {
for (int j = 0; j < PlayerHandler.players.length; j++) {
if (PlayerHandler.players[j] != null) {
Client p1 = (Client) PlayerHandler.players[j];
for (HolidayDrops holiday : HolidayDrops.values()) {
if (holiday.count >= HolidayDrops.dropAmount() && holiday.getHoliday()) {
stop();
p1.getPacketSender().sendMessage("The " + holiday.getName() + " event has ended, good luck finding the rest of the items!");
} else if (holiday.count < HolidayDrops.dropAmount() && holiday.getHoliday()) {
switch (Misc.random(holiday.drops)) {
case 0:// Varrock
GameEngine.itemHandler.createGroundItem(p1, holiday.getItem(), 3214 + Misc.random(holiday.DROP_DISTANCE), 3424 - Misc.random(holiday.DROP_DISTANCE), 1, j);
holiday.count++;
break;
case 1:// Lumbridge
GameEngine.itemHandler.createGroundItem(p1, holiday.getItem(), 3222 + Misc.random(holiday.DROP_DISTANCE), 3218 - Misc.random(holiday.DROP_DISTANCE), 1, j);
holiday.count++;
break;
case 2:// Falador
GameEngine.itemHandler.createGroundItem(p1, holiday.getItem(), 2964 + Misc.random(holiday.DROP_DISTANCE), 3378 - Misc.random(holiday.DROP_DISTANCE), 1, j);
holiday.count++;
break;
case 3:// Barb Village
GameEngine.itemHandler.createGroundItem(p1, holiday.getItem(), 3082 + Misc.random(holiday.DROP_DISTANCE), 3419 - Misc.random(holiday.DROP_DISTANCE), 1, j);
holiday.count++;
break;
case 4:// Draynor
GameEngine.itemHandler.createGroundItem(p1, holiday.getItem(), 3082 + Misc.random(holiday.DROP_DISTANCE), 3249 - Misc.random(holiday.DROP_DISTANCE), 1, j);
holiday.count++;
break;
case 5:// Al Kharid
GameEngine.itemHandler.createGroundItem(p1, holiday.getItem(), 3293 + Misc.random(holiday.DROP_DISTANCE), 3180 - Misc.random(holiday.DROP_DISTANCE), 1, j);
holiday.count++;
break;
case 6:// Rimmington
GameEngine.itemHandler.createGroundItem(p1, holiday.getItem(), 3034 + Misc.random(holiday.DROP_DISTANCE), 3246 - Misc.random(holiday.DROP_DISTANCE), 1, j);
holiday.count++;
break;
}
}
}
}
}
}
@Override
public void stop() {
// TODO Auto-generated method stub
}
}, 2);
}
}
@@ -0,0 +1,232 @@
package com.rs2.game.content.random;
import java.awt.Point;
import java.util.ArrayList;
import java.util.Random;
import com.rs2.GameConstants;
import com.rs2.GameEngine;
import com.rs2.game.items.ItemConstants;
import com.rs2.game.items.ItemData;
import com.rs2.game.objects.Objects;
import com.rs2.game.players.Player;
public class PartyRoom {
static Random r = new Random();
static int[] roomItems = new int[50];
static int[] roomItemsN = new int[50];
static long lastAnnouncment;
static int announcmentFrequency = 1; // announcment frequency in mins
static ArrayList<Point> coords = new ArrayList<Point>();
public static int getAmount() {
int amount = 0;
for (int roomItem : roomItems) {
if (roomItem > 0) {
amount++;
}
}
return amount;
}
public static void startTimer(Player c) {
if (System.currentTimeMillis() - lastAnnouncment > 1000 * 60 * announcmentFrequency) {
dropAll();
lastAnnouncment = System.currentTimeMillis();
}
}
public static void dropAll() {
int trys = 0;
int amount = getAmount();
if (amount < 1) {
return;
}
for (int x = 0; x < roomItems.length; x++) {
if (roomItemsN[x] > 0) {
Balloons b = null;
do {
b = Balloons.getBalloon(roomItems[x], roomItemsN[x]);
trys++;
} while (coords.contains(Balloons.getCoords()) && trys < 100);
GameEngine.objectHandler.addObject(b);
GameEngine.objectHandler.placeObject(b);
}
if (trys > 100) {
break;
}
roomItems[x] = 0;
roomItemsN[x] = 0;
}
trys = 0;
for (int x = 0; x < amount * 2; x++) {
Objects o;
do {
o = Balloons.getEmpty();
} while (coords.contains(new Point(o.objectX, o.objectY))
&& trys < 100);
if (trys > 100) {
break;
}
GameEngine.objectHandler.addObject(o);
GameEngine.objectHandler.placeObject(o);
}
coords.clear();
}
public static int arraySlot(int[] array, int target) {
int spare = -1;
for (int x = 0; x < array.length; x++) {
if (array[x] == target) {
return x;
} else if (spare == -1 && array[x] <= 0) {
spare = x;
}
}
return spare;
}
public static void open(Player player) {
if (!GameConstants.PARTY_ROOM_DISABLED) {
updateGlobal(player);
updateDeposit(player);
player.getItemAssistant().resetItems(5064);
player.getPacketSender().sendFrame248(2156, 5063);
} else {
player.getPacketSender().sendMessage("The partyroom has been disabled.");
}
}
public static void accept(Player c) {
for (int x = 0; x < c.party.length; x++) {
if (c.partyN[x] > 0) {
if (ItemData.itemStackable[c.party[x]]) {
int slot = arraySlot(roomItems, c.party[x]);
if (slot < 0) {
c.getPacketSender().sendMessage(
"Theres not enough space left in the chest.");
break;
}
if (roomItems[slot] != c.party[x]) {
roomItems[slot] = c.party[x];
roomItemsN[slot] = c.partyN[x];
} else {
roomItemsN[slot] += c.partyN[x];
}
c.party[x] = -1;
c.partyN[x] = 0;
} else {
int left = c.partyN[x];
for (int y = 0; y < left; y++) {
int slot = arraySlot(roomItems, -2);
if (slot < 0) {
c.getPacketSender()
.sendMessage(
"Theres not enough space left in the chest.");
break;
}
roomItems[slot] = c.party[x];
roomItemsN[slot] = 1;
c.partyN[x]--;
}
if (c.partyN[x] <= 0) {
c.party[x] = -1;
}
}
}
}
updateDeposit(c);
updateGlobal(c);
}
// public static void updateAll() {
// for (int x = 0; x < PlayerHandler.getPlayers().length; x++) {
// updateGlobal((Client) PlayerHandler.getPlayers()[x]);
// }
// }
public static void fix(Player c) {
for (int x = 0; x < 8; x++) {
if (c.party[x] < 0) {
c.partyN[x] = 0;
} else if (c.partyN[x] <= 0) {
c.party[x] = 0;
}
}
}
public static void depositItem(Player player, int id, int amount) {
int slot = arraySlot(player.party, id);
for (int i : ItemConstants.ITEM_TRADEABLE) {
if (i == id) {
player.getPacketSender().sendMessage("You can't deposit this item.");
return;
}
if (id == 995) {
player.getPacketSender().sendMessage("You can't deposit coins!");
return;
}
}
if (player.getItemAssistant().getItemAmount(id) < amount) {
amount = player.getItemAssistant().getItemAmount(id);
}
if (!player.getItemAssistant().playerHasItem(id, amount)) {
player.getPacketSender().sendMessage("You don't have that many items!");
return;
}
if (slot == -1) {
player.getPacketSender().sendMessage("You cant deposit more than 8 items at once.");
return;
}
player.getItemAssistant().deleteItem(id, amount);
if (player.party[slot] != id) {
player.party[slot] = id;
player.partyN[slot] = amount;
} else {
player.party[slot] = id;
player.partyN[slot] += amount;
}
updateDeposit(player);
}
public static void withdrawItem(Player c, int slot) {
if (c.party[slot] >= 0 && c.getItemAssistant().freeSlots() > 0) {
c.getItemAssistant().addItem(c.party[slot], c.partyN[slot]);
c.party[slot] = 0;
c.partyN[slot] = 0;
}
updateDeposit(c);
updateGlobal(c);
}
public static void updateDeposit(Player player) {
player.getItemAssistant().resetItems(5064);
for (int x = 0; x < 8; x++) {
if (player.partyN[x] <= 0) {
itemOnInterface(player, 2274, x, -1, 0);
} else {
itemOnInterface(player, 2274, x, player.party[x], player.partyN[x]);
}
}
}
public static void updateGlobal(Player player) {
for (int x = 0; x < roomItems.length; x++) {
if (roomItemsN[x] <= 0) {
itemOnInterface(player, 2273, x, -1, 0);
} else {
itemOnInterface(player, 2273, x, roomItems[x], roomItemsN[x]);
}
}
}
public static void itemOnInterface(Player player, int frame, int slot, int id, int amount) {
player.outStream.createFrameVarSizeWord(34);
player.outStream.writeWord(frame);
player.outStream.writeByte(slot);
player.outStream.writeWord(id + 1);
player.outStream.writeByte(255);
player.outStream.writeDWord(amount);
player.outStream.endFrameVarSizeWord();
}
}
@@ -0,0 +1,27 @@
package com.rs2.game.content.randomevents;
import com.rs2.game.npcs.NpcHandler;
import com.rs2.game.players.Player;
import com.rs2.util.Misc;
public class EvilChicken {
// min cmb, maxcmb, npcid, maxhit, attack, defence
private static int[][] chicken = { { 3, 10, 2463, 19, 1, 10, 10 },
{ 11, 20, 2464, 40, 1, 30, 30 }, { 21, 40, 2465, 60, 2, 60, 60 },
{ 41, 60, 2466, 80, 3, 80, 80 },
{ 61, 90, 2467, 105, 4, 100, 100 },
{ 91, 138, 2468, 120, 5, 120, 120 }, };
public static void spawnChicken(Player c) {
for (int[] aChicken : chicken) {
if (c.chickenSpawned == false) {
if (c.combatLevel >= aChicken[0] && c.combatLevel <= aChicken[1]) {
NpcHandler.spawnNpc(c, aChicken[2], c.absX + Misc.random(1), c.absY + Misc.random(1), c.heightLevel, 0, aChicken[3], aChicken[4], aChicken[5], aChicken[6], true, false);
c.chickenSpawned = true;
c.randomActions = 0;
}
}
}
}
}
@@ -0,0 +1,71 @@
package com.rs2.game.content.randomevents;
import com.rs2.game.players.Player;
import com.rs2.util.Misc;
public class FreakyForester {
public static void teleportToLocation(Player c) {
c.lastX = c.absX;
c.lastY = c.absY;
c.lastH = c.heightLevel;
c.teleportToX = 2602;
c.teleportToY = 4775;
c.heightLevel = 0;
c.getPacketSender().sendMessage("Talk to the freaky forester to get out.");
}
private static String[] pheasant = { "one", "two", "three", "four", };
public static String getPheasant(Player client) {
if (client.getPheasent < 0) {
client.getPheasent = Misc.random(3);
}
return pheasant[client.getPheasent] + " tailed";
}
public static void leaveArea(Player client) {
if (client.killedPheasant[client.getPheasent]) {
client.getPlayerAssistant().movePlayer(client.lastX, client.lastY, client.lastH);
client.canLeaveArea = true;
client.getPacketSender().sendMessage("Congratulations, you've completed the freaky forester event!");
if (client.recievedReward == false) {
client.getItemAssistant().addItem(6180, 1);
client.getItemAssistant().addItem(6181, 1);
client.getItemAssistant().addItem(6182, 1);
client.recievedReward = true;
} else {
client.getItemAssistant().addItem(995, 500);
client.getPacketSender().sendMessage("You have already beat the freaky forester event so you get 500 coins.");
}
int delete = client.getItemAssistant().getItemAmount(6178);
client.getItemAssistant().deleteItem(6178, delete);
client.randomActions = 0;
} else {
RandomEventHandler.failEvent(client);
}
for (int i = 0; i < 4; i++) {
client.killedPheasant[i] = false;
}
client.getPheasent = -1;
client.canLeaveArea = false;
}
public static void killedPheasant(Player c, int p) {
for (int i = 0; i < 4; i++) {
c.killedPheasant[i] = false;
}
c.killedPheasant[p] = true;
}
public static boolean hasKilledPheasant(Player client) {
for (int i = 0; i < 4; i++) {
if (client.killedPheasant[i]) {
client.canLeaveArea = true;
return true;
}
}
client.canLeaveArea = false;
return false;
}
}
@@ -0,0 +1,50 @@
package com.rs2.game.content.randomevents;
import com.rs2.game.npcs.NpcHandler;
import com.rs2.game.players.Client;
import com.rs2.util.Misc;
/**
* Frog Event
* @author Andrew (I'm A Boss on Rune-Server, Mr Extremez on Moparscape & Runelocus)
*/
public final class Frog {
private static final int[][] FROG_DATA = { { 2469, 2470, 2471, 2472, 2473 } };
public static void startEvent(Client client) {
spawnFrogs(client);
spawnBasedOnGender(client);
client.ignoreFrog = false;
}
public static void finishEvent(Client client) {// breaks
if (client.ignoreFrog) {
client.getPlayerAssistant().movePlayer(client.lastX, client.lastY, client.lastH);
}
giveReward(client);
}
public static void spawnBasedOnGender(Client client) {// ternary
NpcHandler.spawnNpc(client, client.playerAppearance[0] == 1 ? 2474 : 2475, client.absX + Misc.random(1), client.absY + Misc.random(1), 0, 0, 0, 0, 0, 0, false, false);
}
public static void ignoreFrogs(Client client) {
String type = client.playerMagicBook == 0 ? "modern" : "ancient";
client.getPlayerAssistant().startTeleport(6861, 5834, 0, type);
spawnFrogs(client);
spawnBasedOnGender(client);
client.ignoreFrog = true;
}
public static void giveReward(Client client) {
client.getItemAssistant().addItem(6183, 1);
}
public static void spawnFrogs(Client client) {
for (int[] element : FROG_DATA) {
NpcHandler.spawnNpc(client, element[0], client.absX + Misc.random(1), client.absY + Misc.random(1), 0, 0, 0, 0, 0, 0, false, false);
}
}
}
@@ -0,0 +1,105 @@
package com.rs2.game.content.randomevents;
import com.rs2.game.npcs.NpcHandler;
import com.rs2.game.players.Client;
import com.rs2.util.Misc;
/**
* @author Aintaro
*/
public class GenieLamp {
private static final int GENIE_LAMP1 = 7498;// , GENIE_LAMP2 = 6543;
private static int expAmount;
public static boolean spawnGenieNpc(Client c) {
if (Misc.random(100) == 1 && !c.inWild()) {
NpcHandler.spawnNpc(c, 409, c.absX, c.absY + 1, 0, 0, 0, 0, 0, 0,
false, false);
return true;
}
return false;
}
public static void removeGenieNpc(Client c) {
NpcHandler.npcs[c.lastNpcClickIndex].absX = 0;
NpcHandler.npcs[c.lastNpcClickIndex].absY = 0;
}
public static void rubGenieLamp(Client c, int itemId) {
if (itemId == GENIE_LAMP1) {// || itemId == GENIE_LAMP2) {
c.getPacketSender().sendMessage("You rub the lamp...");
c.getPacketSender().showInterface(2808);
}
}
private static int[][] genieData = { { 10252, 0 }, { 11000, 1 },
{ 10253, 2 }, { 11001, 3 }, { 10254, 4 }, { 11002, 5 },
{ 10255, 6 }, { 11011, 7 }, { 11013, 8 }, { 11014, 9 },
{ 11010, 10 }, { 11012, 11 }, { 11006, 12 }, { 11009, 13 },
{ 11008, 14 }, { 11004, 15 }, { 11003, 16 }, { 11005, 17 },
{ 47002, 18 }, { 54090, 19 }, { 11007, 20 }, };
public String statName[] = { "attack", "defence", "strength", "hitpoints",
"range", "prayer", "magic", "cooking", "woodcutting", "fletching",
"fishing", "firemaking", "crafting", "smithing", "mining",
"herblore", "agility", "thieving", "slayer", "farming",
"runecrafting" };
private static void whatSkillAreWeLookingFor(Client c, int actionButtonId) {
for (int[] genie : genieData) {
if (genie[0] == actionButtonId) {
if (c.getItemAssistant().playerHasItem(GENIE_LAMP1, 1)) {
c.getItemAssistant().deleteItem(GENIE_LAMP1, 1);
expAmount = 10 * c.playerLevel[genie[1]];
c.getPlayerAssistant().addSkillXP(expAmount, genie[1]);
// c.getDH().sendStatement(
// "You gained " + expAmount * Config.SERVER_EXP_BONUS
// + " experience.");
c.nextChat = 0;
break;
/*
* } else if
* (c.getItemAssistant().playerHasItem(GENIE_LAMP2, 1)) {
* c.getItemAssistant().deleteItem(GENIE_LAMP2, 1);
* expAmount = 10 * c.playerLevel[genie[1]];
* c.getPlayerAssistant().addSkillXP(expAmount, genie[1]);
* //c.getDH().sendStatement( //"You gained " + expAmount *
* Config.SERVER_EXP_BONUS // + " experience."); c.nextChat
* = 0; break;
*/
}
}
}
}
public static boolean genieInterfaceButtons(Client c, int actionButtonId) {
switch (actionButtonId) {
case 10252:
case 10253:
case 10254:
case 10255:
case 11000:
case 11001:
case 11002:
case 11003:
case 11004:
case 11005:
case 11006:
case 11007:
case 47002:
case 54090:
case 11008:
case 11009:
case 11010:
case 11011:
case 11012:
case 11013:
case 11014:
whatSkillAreWeLookingFor(c, actionButtonId);
return true;
}
return false;
}
}
@@ -0,0 +1,78 @@
package com.rs2.game.content.randomevents;
import com.rs2.game.players.Player;
import com.rs2.util.Misc;
/**
* Eventhandler class
* @author Andrew (Mr Extremez)
*/
public class RandomEventHandler {
public static int CALL_RANDOM = 350 + Misc.random(100);
public static void resetEvent(Player c) {
c.randomActions = 0;
}
private static int[][] FAIL_COORDS = { { 3333, 3333 }, { 3196, 3193 },
{ 3084, 3549 }, { 2974, 3346 }, { 2781, 3506 }, { 2810, 3508 }, };
public static void failEvent(Player client) {
int loc = Misc.random(FAIL_COORDS.length - 1);
client.teleportToX = FAIL_COORDS[loc][0];
client.teleportToY = FAIL_COORDS[loc][1];
client.heightLevel = 0;
client.getPacketSender().sendMessage("You wake up in a strange location...");
resetEvent(client);
client.getPacketSender().closeAllWindows();
}
public static void callRandom(Player c) { // add all random events here
if (c.inFightCaves() || c.playerEquipment[c.playerWeapon] == 4024 || c.tutorialProgress < 36) {
return;
}
int randomEvent = Misc.random(3);
switch (randomEvent) {
case 0:
SandwhichLady.openSandwhichLady(c);
resetEvent(c);
break;
case 1:
if (c.chickenSpawned == false) {
EvilChicken.spawnChicken(c);
resetEvent(c);
}
break;
case 2:
FreakyForester.teleportToLocation(c);
resetEvent(c);
break;
case 3:
Swarm.spawnSwarm(c);
resetEvent(c);
break;
default:
System.out.println("Error no random event called for " + c.playerName + ".");
break;
}
}
public static void addRandom(Player c) {
if (c.randomEventsEnabled) {
if (c.randomActions >= CALL_RANDOM) {
callRandom(c);
if (c.playerIsBusy() && !c.hasSandwhichLady) {
c.getPacketSender().closeAllWindows();
}
} else {
int nextRandom = CALL_RANDOM - c.randomActions;
if (c.playerRights == 3) {
c.getPacketSender().sendMessage("Next random will be in " + nextRandom + " more random actions.");
}
c.randomActions += 1;
}
}
}
}
@@ -0,0 +1,28 @@
package com.rs2.game.content.randomevents;
import com.rs2.game.npcs.NpcHandler;
import com.rs2.game.players.Player;
import com.rs2.util.Misc;
public class RiverTroll {
public static boolean hasRiverTroll = false;
private static int[][] riverTroll = { { 3, 10, 391, 19, 1 },
{ 11, 20, 392, 40, 1 }, { 21, 40, 393, 80, 3 },
{ 61, 90, 394, 105, 4 }, { 91, 110, 395, 120, 5 },
{ 111, 138, 396, 150, 7 }, };
public static void spawnRiverTroll(Player client) {
for (int[] element : riverTroll) {
if (hasRiverTroll == false) {
if (client.combatLevel >= element[0] && client.combatLevel <= element[1] && hasRiverTroll == false) {
NpcHandler.spawnNpc(client, element[2], client.absX + Misc.random(1), client.absY + Misc.random(1), client.heightLevel, 0, element[3], element[4], client.playerLevel[client.playerAttack] * 2, client.playerLevel[client.playerDefence] * 2, true, false);
client.randomActions = 0;
hasRiverTroll = true;
NpcHandler.npcs[element[2]].forceChat("Fishies be mine! Leave dem fishies!");
}
}
}
}
}
@@ -0,0 +1,30 @@
package com.rs2.game.content.randomevents;
import com.rs2.game.npcs.NpcHandler;
import com.rs2.game.players.Client;
import com.rs2.util.Misc;
public class RockGolem {
public static int[][] rockGolem = {
{3, 10, 413, 19, 1},
{11, 20, 414, 40, 1},
{21, 40, 415, 80, 3},
{61, 90, 416, 105, 4},
{91, 110, 417, 120, 5},
{111, 138, 418, 150, 7},
};
public static void spawnRockGolem(Client c) {
for (int[] aRockGolem : rockGolem) {
if(!c.golemSpawned) {
if (c.combatLevel >= aRockGolem[0] && c.combatLevel <= aRockGolem[1]) {
NpcHandler.spawnNpc(c, aRockGolem[2], c.getX() + Misc.random(1), c.getY() + Misc.random(1), c.heightLevel, 0, aRockGolem[3], aRockGolem[4], aRockGolem[4] * 10, aRockGolem[4] * 10, true, false);
c.golemSpawned = true;
NpcHandler.npcs[aRockGolem[2]].forceChat("Raarrrgghh! Flee human!");
}
}
}
}
}
@@ -0,0 +1,160 @@
package com.rs2.game.content.randomevents;
import com.rs2.game.players.Player;
import com.rs2.util.Misc;
public class SandwhichLady {
private static int itemType;
public static void handleOptions(Player player, int actionbuttonId) {
if (player.hasSandwhichLady) {
switch (actionbuttonId) {
case 63013:
if (itemType == 0) {
player.getPacketSender().closeAllWindows();
player.getItemAssistant().addItem(2323, 1);
player.getPacketSender()
.sendMessage(
"Congratulations, you have completed the random event!");
} else {
player.getPacketSender().sendMessage(
"You have chosen the wrong item!");
RandomEventHandler.failEvent(player);
}
player.hasSandwhichLady = false;
break;
case 63014:
if (itemType == 1) {
player.getPacketSender().closeAllWindows();
player.getItemAssistant().addItem(1971, 1);
player.getPacketSender()
.sendMessage(
"Congratulations, you have completed the random event!");
} else {
player.getPacketSender().sendMessage(
"You have chosen the wrong item!");
RandomEventHandler.failEvent(player);
}
player.hasSandwhichLady = false;
break;
case 63015:
if (itemType == 2) {
player.getPacketSender().closeAllWindows();
player.getItemAssistant().addItem(1973, 1);
player.getPacketSender()
.sendMessage(
"Congratulations, you have completed the random event!");
} else {
player.getPacketSender().sendMessage(
"You have chosen the wrong item!");
RandomEventHandler.failEvent(player);
}
player.hasSandwhichLady = false;
break;
case 63009:
if (itemType == 3) {
player.getPacketSender().closeAllWindows();
player.getItemAssistant().addItem(6961, 10);
player.getPacketSender()
.sendMessage(
"Congratulations, you have completed the random event!");
} else {
player.getPacketSender().sendMessage(
"You have chosen the wrong item!");
RandomEventHandler.failEvent(player);
}
player.hasSandwhichLady = false;
break;
case 63010:
if (itemType == 4) {
player.getPacketSender().closeAllWindows();
player.getItemAssistant().addItem(6962, 1);
player.getPacketSender()
.sendMessage(
"Congratulations, you have completed the random event!");
} else {
player.getPacketSender().sendMessage(
"You have chosen the wrong item!");
RandomEventHandler.failEvent(player);
}
player.hasSandwhichLady = false;
break;
case 63011:
if (itemType == 5) {
player.getPacketSender().closeAllWindows();
player.getItemAssistant().addItem(6965, 1);
player.getPacketSender().sendMessage("Congratulations, you have completed the random event!");
} else {
player.getPacketSender().sendMessage("You have chosen the wrong item!");
RandomEventHandler.failEvent(player);
}
player.hasSandwhichLady = false;
break;
case 63012:
if (itemType == 6) {
player.getPacketSender().closeAllWindows();
player.getItemAssistant().addItem(2309, 1);
player.getPacketSender().sendMessage("Congratulations, you have completed the random event!");
} else {
player.getPacketSender().sendMessage("You have chosen the wrong item!");
RandomEventHandler.failEvent(player);
}
player.hasSandwhichLady = false;
break;
}
} else if (player.hasSandwhichLady == false && actionbuttonId > 63008 && actionbuttonId < 63116) {
player.getPacketSender().sendMessage("You have improperly opened the sandwhich lady interface.");
}
}
public static void openSandwhichLady(Player c) {
c.hasSandwhichLady = true;
c.getPacketSender().sendString(" ", 16131);
c.getPacketSender().showInterface(16135);
int randomMessage = Misc.random(6);
switch (randomMessage) {
case 0:
c.getPacketSender().sendString("Please select the pie.",
16145);
itemType = 0;
break;
case 1:
c.getPacketSender().sendString("Please select the kebab.",
16145);
itemType = 1;
break;
case 2:
c.getPacketSender().sendString(
"Please select the chocolate.", 16145);
itemType = 2;
break;
case 3:
c.getPacketSender().sendString("Please select the bagel.",
16145);
itemType = 3;
break;
case 4:
c.getPacketSender().sendString(
"Please select the triangle sandwich.", 16145);
itemType = 4;
break;
case 5:
c.getPacketSender().sendString(
"Please select the square sandwich.", 16145);
itemType = 5;
break;
case 6:
c.getPacketSender().sendString("Please select the bread.",
16145);
itemType = 6;
break;
}
}
}
@@ -0,0 +1,35 @@
package com.rs2.game.content.randomevents;
import com.rs2.game.npcs.NpcHandler;
import com.rs2.game.players.Player;
import com.rs2.util.Misc;
public class Shade {
private static int[][] shade = { { 3, 10, 425, 19, 1 },
{ 11, 20, 426, 40, 3 }, { 21, 40, 427, 60, 5 },
{ 41, 60, 428, 80, 8 }, { 61, 90, 429, 105, 11 },
{ 91, 138, 430, 120, 13 }, };
public static void spawnShade(Player c) {
for (int[] element : shade) {
if (c.shadeSpawned == false) {
if (c.combatLevel >= element[0]
&& c.combatLevel <= element[1]) {
NpcHandler
.spawnNpc(c, element[2],
c.absX + Misc.random(1), c.absY
+ Misc.random(1), c.heightLevel,
0,
element[3], // HP
element[4], // maxhit
(int) (NpcHandler.getNpcListCombat(element[3]) * 1.5), // defence
(int) (NpcHandler.getNpcListCombat(element[3]) * 1.5),
true, false); // attack
c.randomActions = 0;
c.shadeSpawned = true;
}
}
}
}
}
@@ -0,0 +1,65 @@
package com.rs2.game.content.randomevents;
import com.rs2.game.npcs.NpcHandler;
import com.rs2.game.players.Client;
import com.rs2.game.players.Player;
import com.rs2.util.Misc;
/**
* Swarm Event
* @author Andrew (I'm A Boss on Rune-Server, Mr Extremez on Moparscape & Runelocus)
*/
public class Swarm {
private static int checkStats(Player c, boolean bot) {
if (bot) {
return c.getPlayerAssistant().getLevelForXP(c.playerXP[c.playerHitpoints]) * 3;
} else {
return c.getPlayerAssistant().getLevelForXP(c.playerXP[c.playerHitpoints]) * 2;
}
}
/**
* Spawns the swarm.
*
* @param c
*/
public static void spawnSwarm(Player c) {
NpcHandler.spawnNpc(c, // param
411, // npctype
c.absX + Misc.random(1), // posX
c.absY + Misc.random(1), // posY
c.heightLevel, // height
0, // walkingtype
1, // HP
2, // maxhit
checkStats(c, false),
3 * c.combatLevel, // defence
true, // attackplayer
false); // headicon
c.autoRet = 0;
}
/**
* Spawns the swarm. If suspect a botter ... this one is stronger, botter
* has to react faster to survive.
*
* @param c
*/
public static void checkBot(Client client) {
NpcHandler.spawnNpc(client, // param
411, // npctype
client.absX + Misc.random(1), // posX
client.absY + Misc.random(1), // posY
client.heightLevel, // height
0, // walkingtype
1, // HP
6, // maxhit
checkStats(client, true), // attack
4 * client.combatLevel, // defence
true, // attackplayer
false); // headicon
client.autoRet = 0;
}
}
@@ -0,0 +1,35 @@
package com.rs2.game.content.randomevents;
import com.rs2.game.npcs.NpcHandler;
import com.rs2.game.players.Player;
import com.rs2.util.Misc;
public class TreeSpirit {
private static int[][] treeSpirit = {
// combat, combat 2, npcid, hitpoints, levels
{ 3, 10, 438, 28, 1 }, { 11, 20, 439, 36, 1 },
{ 21, 40, 440, 57, 3 }, { 61, 90, 441, 90, 4 },
{ 91, 110, 442, 130, 5 }, { 111, 138, 443, 160, 7 }, };
private static int checkStats(Player p) {
return p.getPlayerAssistant().getLevelForXP(p.playerXP[p.playerHitpoints]) * 2;
}
public static void spawnTreeSpirit(Player p) {
for (int[] element : treeSpirit) {
if (p.treeSpiritSpawned == false) {
if (p.combatLevel >= element[0] && p.combatLevel <= element[1]) {
NpcHandler.spawnNpc(p, element[2], p.absX + Misc.random(1),
p.absY + Misc.random(1), p.heightLevel, 0, element[3],
element[4], checkStats(p), p.playerLevel[p.playerDefence] * 2, true,
false);
NpcHandler.npcs[element[2]]
.forceChat("Leave these woods and never return!");
p.treeSpiritSpawned = true;
p.randomActions = 0;
}
}
}
}
}
@@ -0,0 +1,28 @@
package com.rs2.game.content.randomevents;
import com.rs2.game.npcs.NpcHandler;
import com.rs2.game.players.Player;
import com.rs2.util.Misc;
public class Zombie {
private static int[][] zombie = { { 3, 10, 419, 28, 2, 10, 10 },
{ 11, 20, 420, 36, 4, 20, 20 }, { 21, 40, 421, 57, 6, 30, 30 },
{ 61, 90, 422, 90, 8, 40, 40 }, { 91, 110, 423, 130, 10, 50, 50 },
{ 111, 138, 424, 160, 12, 60, 60 } };
public static void spawnZombie(Player c) {
for (int[] element : zombie) {
if (c.zombieSpawned == false) {
if (c.combatLevel >= element[0] && c.combatLevel <= element[1]) {
NpcHandler.spawnNpc(c, element[2], c.absX + Misc.random(1),
c.absY + Misc.random(1), c.heightLevel, 0, element[3],
element[4], element[5], element[6], true, false);
c.randomActions = 0;
c.zombieSpawned = true;
NpcHandler.npcs[element[2]].forceChat("Braaaainssss!");
}
}
}
}
}
@@ -0,0 +1,39 @@
package com.rs2.game.content.skills;
import com.rs2.game.players.Client;
/**
* Created by IntelliJ IDEA. User: vayken Date: 21/12/11 Time: 13:55 To change
* this template use File | Settings | File Templates.
*/
public class Menus {
public static void sendSkillMenu(Client player, String type) {
if (type == "silverCrafting") {
display4Item(player, 1716, 1724, 2961, 5525, "Unblessed symbol", "Unholy symbol", "Silver sickle", "Tiara");
}
player.setStatedInterface(type);
}
public static void display4Item(Client player, int i1, int i2, int i3, int i4, String s1, String s2, String s3, String s4) {
player.getPacketSender().sendItemOnInterface(8902, 250, i1);
player.getPacketSender().sendItemOnInterface(8903, 150, i2);
player.getPacketSender().sendItemOnInterface(8904, 200, i3);
player.getPacketSender().sendItemOnInterface(8905, 250, i4);
player.getPacketSender().sendString(s1, 8909);
player.getPacketSender().sendString(s2, 8913);
player.getPacketSender().sendString(s3, 8917);
player.getPacketSender().sendString(s4, 8921);
player.getPacketSender().sendChatInterface(8899);
}
public static String determineAorAn(String nextWord) {
String[] c = {"a", "e", "i", "o", "u", "y"};
for (String firstLetter : c) {
if (nextWord.toLowerCase().startsWith(firstLetter)) {
return "an";
}
}
return "a";
}
}
@@ -0,0 +1,33 @@
package com.rs2.game.content.skills;
/**
* SkillConstants.java
* @author Andrew (Mr Extremez)
*/
public enum SkillConstants {
ATTACK(true), DEFENCE(true), STRENGTH(true), HITPOINTS(true), RANGE(true),
PRAYER(true), MAGIC(true), COOKING(true), WOODCUTTING(true), FLETCHING(true),
FISHING(true), FIREMAKING(true), CRAFTING(true), SMITHING(true), MINING(true),
HERBLORE(true), AGILITY(true), THIEVING(true), SLAYER(true), FARMING(true), RUNECRAFTING(true);
private SkillConstants(boolean skillEnabled) {
this.skillEnabled = skillEnabled;
}
private boolean skillEnabled;
public static boolean getEnabled(int id) {
for (final SkillConstants skillConstants : SkillConstants.values()) {
if (skillConstants.ordinal() == id && skillConstants.skillEnabled == true) {
return true;
}
}
return false;
}
public static String getName(SkillConstants skillConstants) {
return "The " + skillConstants.name().toLowerCase() + " skill is currently disabled";
}
}
@@ -0,0 +1,136 @@
package com.rs2.game.content.skills;
import java.util.Arrays;
import java.util.Optional;
/**
* @author Syndicate
*/
public enum SkillData {
ATTACK(0, 6247, 6248, 6249, 4004, 4005, 4044, 4045),
DEFENCE(1, 6253, 6254, 6255, 4008, 4009, 4056, 4057),
STRENGTH(2, 6206, 6207, 6208, 4006, 4007, 4050, 4051),
HITPOINTS(3, 6216, 6217, 6218, 4016, 4017, 4080, 4081),
RANGED(4, 4443, 5453, 6114, 4010, 4011, 4062, 4063),
PRAYER(5, 6242, 6243, 6244, 4012, 4013, 4068, 4069),
MAGIC(6, 6211, 6212, 6213, 4014, 4015, 4074, 4075),
COOKING(7, 6226, 6227, 6228, 4034, 4035, 4134, 4135),
WOODCUTTING(8, 4272, 4273, 4274, 4038, 4039, 4146, 4147),
FLETCHING(9, 6231, 6232, 6233, 4026, 4027, 4110, 4111),
FISHING(10, 6258, 6259, 6260, 4032, 4033, 4128, 4129),
FIREMAKING(11, 4282, 4283, 4284, 4036, 4037, 4140, 4141),
CRAFTING(12, 6263, 6264, 6265, 4024, 4025, 4104, 4105),
SMITHING(13, 6221, 6222, 6223, 4030, 4031, 4122, 4123),
MINING(14, 4416, 4417, 4438, 4028, 4029, 4116, 4117),
HERBLORE(15, 6237, 6238, 6239, 4020, 4021, 4092, 4093),
AGILITY(16, 4277, 4278, 4279, 4018, 4019, 4086, 4087),
THIEVING(17, 4261, 4263, 4264, 4022, 4023, 4098, 4099),
SLAYER(18, 12122, 12123, 12124, 12166, 12167, 12171, 12172),
FARMING(19, 12122, 12123, 12124, 13926, 13927, 13921, 13922),
RUNECRAFTING(20, 4267, 4268, 4269, 4152, 4153, 4157, 4159);
/**
* The identifier for this skill.
*/
private final int skill;
/**
* The first frame id for this skill.
*/
private final int frame;
/**
* The second frame id for this skill.
*/
private final int frame2;
/**
* The third frame id for this skill.
*/
private final int frame3;
/**
* The fourth frame id for this skill.
*/
private final int frame4;
/**
* The fifth frame id for this skill.
*/
private final int frame5;
/**
* The sixth frame id for this skill.
*/
private final int frame6;
/**
* The seventh frame id for this skill.
*/
private final int frame7;
/**
* Constructs a new {@link SkillData}.
*
* @param skill
* @param frame
* @param frame2
* @param frame3
* @param frame4
* @param frame5
* @param frame6
* @param frame7
*/
SkillData(int skill, int frame, int frame2,
int frame3, int frame4, int frame5, int frame6, int frame7) {
this.skill = skill;
this.frame = frame;
this.frame2 = frame2;
this.frame3 = frame3;
this.frame4 = frame4;
this.frame5 = frame5;
this.frame6 = frame6;
this.frame7 = frame7;
}
public final int getId() {
return skill;
}
public final int getFrame1() {
return frame;
}
public final int getFrame2() {
return frame2;
}
public final int getFrame3() {
return frame3;
}
public final int getFrame4() {
return frame4;
}
public final int getFrame5() {
return frame5;
}
public final int getFrame6() {
return frame6;
}
public final int getFrame7() {
return frame7;
}
public String toString() {
return name().charAt(0) + name().substring(1).toLowerCase();
}
public static Optional<SkillData> getSkill(int identifier) {
return Arrays.stream(values()).filter(s -> s.skill == identifier).findFirst();
}
}

Some files were not shown because too many files have changed in this diff Show More