mirror of
https://github.com/2006-Scape/2006Scape.git
synced 2026-07-03 08:39:04 +00:00
Rename & Repackage
This commit is contained in:
@@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
+61
@@ -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;
|
||||
}
|
||||
|
||||
}
|
||||
+175
@@ -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;
|
||||
}
|
||||
}
|
||||
File diff suppressed because it is too large
Load Diff
+294
@@ -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);
|
||||
}
|
||||
|
||||
}
|
||||
+280
@@ -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;
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
+828
@@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
+9
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
+82
@@ -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;
|
||||
}
|
||||
|
||||
}
|
||||
+112
@@ -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;
|
||||
}
|
||||
}
|
||||
+44
@@ -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;
|
||||
}
|
||||
}
|
||||
+78
@@ -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
Reference in New Issue
Block a user