Code:
package com.foxtrot.game.minigames.events;
import java.util.LinkedList;
import com.foxtrot.game.player.Player;
import com.foxtrot.game.item.Item;
import com.foxtrot.game.item.floor.FloorItemManager;
import com.foxtrot.game.minigames.events.Hunger;
import com.foxtrot.utils.Logger;
import com.foxtrot.utils.Utils;
import com.foxtrot.game.World;
import com.foxtrot.game.WorldTile;
public final class Hunger {
private static final LinkedList<Player> lobbyevent = new LinkedList<Player>();
private static final LinkedList<Player> eventplayers = new LinkedList<Player>();
private static long eventTimer;
private static long startTime;
public static final WorldTile LOBBY = new WorldTile(2738, 5081, 0); // needs to be changed (WAS DONE FOR TESTING)
private static int PLAYERS_NEEDED = 1;
/**
* MAIN FOCUS OF THE GAME,
* EVENT PLAYERS MUST SURVIVE THE HUNGER GAMES.
*
* WAYS OF SURVIVING?
* - COLLECT RESOURCES (FOOD, TOOLS)
* - MAYBE INVINCIBILITY FOR 10 SECONDS (HARD AND RARE TO OBTAIN)
* - PANIC TABS (CAN BE MADE VIA COLLECTING A BUNCH OF RESOURCES)
* INSTA TELEPORTS FROM TARGETS TO A SAFE AREA.
*
* HOW TO COLLECT RESOURCES?
* - RANDOM SPAWNS EVERY (X) AMOUNT OF TIME
* - ITEMS SUCH AS KNIVES, CHISELS AND OTHERS NEEDED FOR SKILLING WILL RANDOMLY SPAWN
* USE THESE ITEMS ^ ^ ^ TO GENERATE YOUR OWN FOOD, WATER ETC..
*
* GOAL?
* BE THE LAST GAMER STANDING. KILL YOUR ENEMIES CU.
*
* BOUNDRIES?
* ENTERING THE MAIN AREA (DANGEROUS) WILL HIT THE PLAYER UNTIL HE HIDES IN THE "SAFE SPOT"
* - "SAFE" SPOT IS GUARDED WITH CUSTOM NPCS
* - "SAFE" SPOT IS WHERE THE BIG RESOURCE PACKAGES WILL BE
* - NPC GUARDING THE "SAFE" SPOT WILL HAVE UNLIMITED HP SO THE NPC IS ALWAYS GUARDING.
* - NPC WILL HAVE CUSTOM FIGHTING SCRIPTS MAYBE? : NPC WILL HIT HARD.
*
* MISC
* - MINIMAP DOTS ARE OFF SO CONTESTANTS CAN'T SEE EACH OTHER FROM A DISTANCE THROUGH THE MINIMAP
* - TRADE, REQUEST ASSIST, STATS, ETC ARE ALL TOGGLED (OFF)
* - ORB OF PROTECTION IS NEEDED FOR PROTECTION FROM HYDRATION, ELSE CAUSES POISON.
* - MAKING ITEMS WILL BE SAME AS I.E FLETCHING LOGS > BOW > STRING : FLETCHING LOGS > HEADLESS ARROWS > TIP.
* - RESOURCE SPAWNS (PILE OF CERTAIN RESOURCES)
*
* STABILITY
* - NO OVERPOWERED WEAPONS WHAT SO EVER K.
* - AS THE MAIN FOCUS IS SURVIVING NOT ALOT OF FOOD SPAWNS WILL BE ADDED IN-EVENT.
* - 1-2 PILES OF FOOD MAX. "@" 5 MINUTES AND "@" 10 MINUTES AFTER GAME IS STARTED. OTHER FOODS ARE GENERATED VIA FISHING.
* - FOR THE FIRST 2-4 MINUTES IT IS A PVP FREE ZONE. GAMERS CAN RUN AROUND AND EXLPORE THE LOCATION.
*
* FUTURE PLANS (AFTER LIVE RELEASE)
* - MULTIPLE PLAYING GROUNDS. (AUTOMATICALLY CHOOSES A RANDOM MAP)
* - TEAM A vs TEAM B
* - TRAPS
* - GROUP INVENTORY ONLY WHEN IT IS TEAM A vs TEAM B
*
*
*/
/** SPAWNING STATIONS
*
*/
public static final WorldTile[] TELEPORTS = { new WorldTile(0, 0, 0),
new WorldTile(0, 0, 0), new WorldTile(0, 0, 0),
new WorldTile(0, 0, 0), new WorldTile(0, 0, 0),
new WorldTile(0, 0, 0), new WorldTile(0, 0, 0),
new WorldTile(0, 0, 0)};
/**
* EVENT START AND END
*/
public static void startEvent() {
setEventStarted(true);
Logger.log("HungerGames", "Game started");
World.sendWorldMessage("<col=ff0000>The Hunger Games event has just started!");
for (Player eventplayers : geteventplayers()) {
eventTimer = Utils.currentTimeMillis();
eventplayers.setForceMultiArea(true);
eventplayers.setCanPvp(true);
/**
* DISABLE RIGHT CLICK FEATURES ON PLAYERS (TODO)
*/
}
}
public static void endGame() {
for(Player contribute: geteventplayers()) {
if(contribute == null)
continue;
Player winner = (Player) getEventPlayers().poll();
if(winner == null)
continue;
contribute.setNextWorldTile(LOBBY);
winner.setNextWorldTile(LOBBY);
World.sendWorldMessage("The Hunger Games has finished, winner was "+winner.getDisplayName()+"");
winner.sm("Congratulations! You've won the Event!");
winner.getInventory().addItem(995, 500000);
contribute.sm("<col=f0470a>Thanks for contributing!</col>");
contribute.getInventory().addItem(995, 500);
setEventStarted(false);
contribute.setCanPvp(false);
contribute.setForceMultiArea(false);
winner.setCanPvp(false);
winner.setForceMultiArea(false);
}
}
/**
* EVENT START AND END - END
*/
/**
* ALL SPAWNS WITHIN THE GAME
*
*/
public static final int[] FOOD = {1
};
public static final int[] POTS = {1
};
public static final int [] WP1 = {//WEAPON PIECES 1st half
};
public static final int [] WP2 = {//WEAPON PIECES 2nd half
};
public static final int [] NPC_SPAWNS = {
};
public static final int [] FISHING_SPOTS = {
};
public static final int [] TOOL_SPAWNS = {//knife, chisel etc..
};
/**
* ALL SPAWNS WITHIN THE GAME - END
*/
/*
* IMPORTANT INTS AND BOOLEANS
*
*/
/**
* USED COORDS
*/
public static final int maxx = 2755;
public static final int minx = 2732;
public static final int maxy = 5101;
public static final int miny = 5071;
/**
* USED COORDS - END
*/
static int fspawn = 0; // in use ( food spawn count )
static int fpspawn = 0; //in use ( food and potions spawn count )
static int Fsm = 0; // in use (food spawn message count)
static int FPsm = 0; // in use (food and pot spawn message count)
private static boolean fspawn1 = false; // in use
private static boolean fspawn2 = false; //in use
private static boolean wmess = false; //in use
private static boolean npcSpawn = false; // in use
private static boolean eventStarted = false; // in use DONT REMOVE
/*
* END IMPORTANT INTS AND BOOLEANS
*/
/**
* TOOL SPAWNS
*/
public static void processtoolSpawns() {
}
public static void processresourceSpawns() {
}
/**
* EVENT PROCESSING FOOD
*
*/
public static void processFoodSpawns(final Player player, int item) {
for (Player gamers : Hunger.geteventplayers()) {
//SPAWN TIMES NEED CHANGING
if(getEventTimer() + 10000 < Utils.currentTimeMillis() && Hunger.isEventStarted() && !fspawn1) {
FloorItemManager.addGroundItem(new Item(FOOD[Utils.random(FOOD.length)], Utils.random(3, 6)),
new WorldTile(Utils.random(minx, maxx), Utils.random(miny, maxy), 0), player, true, 180, true);
fspawn ++;
}
if (getEventTimer() + 10000 < Utils.currentTimeMillis() && fspawn == 5 && Hunger.isEventStarted() && Fsm == 0) {
gamers.sm("Food has spawned within the game.");
Fsm++;
fspawn1 = true;
}
if (getEventTimer() + 20000 < Utils.currentTimeMillis() && Hunger.isEventStarted() && !fspawn2 ) {
FloorItemManager.addGroundItem(new Item(FOOD[Utils.random(FOOD.length)], Utils.random(2, 4)),
new WorldTile(Utils.random(minx, maxx), Utils.random(miny, maxy), 0), player, true, 180, true);
FloorItemManager.addGroundItem(new Item(POTS[Utils.random(POTS.length)], Utils.random(2, 4)),
new WorldTile(Utils.random(minx, maxx), Utils.random(miny, maxy), 0), player, true, 180, true);
fpspawn ++;
}
if (getEventTimer() + 20000 < Utils.currentTimeMillis() && fpspawn == 4 && Hunger.isEventStarted() && FPsm == 0) {
gamers.sm("Potions and food have spawned within the game.");
FPsm++;
fspawn2 = true;
}
}
}
/**
* EVENT PROCESSING NPC SPAWNS
*
*/
public static void processNpcSpawns() {
//NEED TO MAKE A CUSTOM NPC WEARING ARMOUR SUITABLE FOR THE MINIGAME.
//SPAWN TIMES NEED CHANGING
if (getEventTimer() + 10000 < Utils.currentTimeMillis() && Hunger.isEventStarted() && !npcSpawn) {
World.spawnNPC(1, new WorldTile(2731, 5082, 0), -1, true, true);
npcSpawn = true;
}
}
/**
* EVENT PROCESSING NPC SPAWNS - END
*
*/
/**
* EVENT PROCESSING FOOD - END
*
*/
/**
* EVENT PROCESSING MESSAGES
*
*/
public static void processWorldMessage(){
if (Hunger.isEventStarted() && !wmess) {
for (Player gamers : Hunger.geteventplayers()) {
gamers.sm("<col=ff0000>[</col>HUNGER GAMES<col=ff0000>]</col> Survive within the first 30 seconds before consumables are input.");
World.sendWorldMessage("<col=ff0000>[</col>HUNGER GAMES<col=ff0000>]</col> Challengers have entered the Hunger Games!");
wmess = true;
}
}
}
/**
* EVENT PROCESSING MESSAGES - END
*
*/
/**
* EVENT PROCESSING EVENT
*
*/
public static void processEvent() {
//left out for testing purposes
/*if (Hunger.isEventStarted()) {
if(geteventplayers().size() == 1) {
endGame();
}*/
if (EventPlayers().size() >= 5 && getEventTimer() + 3.6e+6 < Utils.currentTimeMillis()) { //greater than 5 players, game is 1 hour
for (Player gamers : Hunger.geteventplayers()) {
gamers.sm("Sorry! Time has ran out!");
World.sendWorldMessage("The Hunger Games have ended, with no winner!");
endGame();
}
}
if (EventPlayers().size() < 5 && getEventTimer() + 1.8e+6 < Utils.currentTimeMillis()) { //less than 5 players, game is 30 mins
for (Player gamers : Hunger.geteventplayers()) {
gamers.sm("Sorry! Time has ran out!");
World.sendWorldMessage("The Hunger Games have ended, with no winner!");
endGame();
}
}
if(getlobbyEvent().size() < PLAYERS_NEEDED && !isEventStarted() && + 300000 < Utils.currentTimeMillis()) {
if(getStartTime() + 300000 < Utils.currentTimeMillis()) {
for(Player players: getlobbyEvent()) {
players.sm("Players ready for the Hunger Games: (<col=ff000>"+Hunger.getlobbyEvent().size()+"</col>)");
players.sm("There wasn't enough players in-time. Event Canelled.");
World.sendWorldMessage("Hunger Games, cancelle!");
Logger.log("EVENT 1","Event CANCELLED");
players.getControlerManager().removeControlerWithoutCheck();
setStartTime(Utils.currentTimeMillis());
}
}
}
else if (getlobbyEvent().size() >= PLAYERS_NEEDED && !isEventStarted() && + 300000 < Utils.currentTimeMillis()) {
if(getStartTime() + 10000 < Utils.currentTimeMillis()) {
getEventPlayers().addAll(lobbyevent);
getlobbyEvent().removeAll(lobbyevent);
startEvent();
}
}
}
/**
* EVENT PROCESSING EVENT - END
*
*/
/**
*
* OTHER SHIT
*/
public static void addEventPlayer(Player player) {
if(!geteventplayers().contains(player))
geteventplayers().add(player);
}
public static void addLobbyPlayer(Player player) {//neccessary to use because it checks for
//the lobby already containing the player.
if(!getlobbyEvent().contains(player))
getlobbyEvent().add(player);
}
public static void removeLobbyPlayer(Player player) {
getlobbyEvent().remove(player);
}
public static void removeEventPlayer(Player player) {
getEventPlayers().remove(player);
}
public static LinkedList<Player> getlobbyEvent() {
return lobbyevent;
}
public static long getStartTime() {
return startTime;
}
public static boolean isEventStarted() {
return eventStarted;
}
public static LinkedList<Player> getEventPlayers() {
return eventplayers;
}
public static LinkedList<Player> EventPlayers() {
return eventplayers;
}
public static void setEventStarted(boolean gameStarted) {
Hunger.eventStarted = gameStarted;
}
public static void setStartTime(long startTime) {
Hunger.startTime = startTime;
}
public static long getEventTimer() {
return eventTimer;
}
public static LinkedList<Player> geteventplayers() {
return eventplayers;
}
/**
* OTHER SHIT END
*/
}