[events] Convert to enum

This commit is contained in:
RedSparr0w 2019-09-23 00:12:43 +12:00
parent f828ef699c
commit 78673774c2
13 changed files with 247 additions and 226 deletions

View file

@ -0,0 +1,30 @@
package org.crandor;
public class Util {
/**
* Capitalize the first letter of the string
* @return Capitalized string
*/
public static String capitalize(String name) {
if (name != null && name.length() != 0) {
char[] chars = name.toCharArray();
chars[0] = Character.toUpperCase(chars[0]);
return new String(chars);
} else {
return name;
}
}
public static String strToEnum(String name) {
name = name.toUpperCase();
name = name.replaceAll(" ", "_");
return capitalize(name);
}
public static String enumToString(String name) {
name = name.toLowerCase();
name = name.replaceAll("_", " ");
return capitalize(name);
}
}

View file

@ -3,7 +3,7 @@ package org.crandor.game.content.skill;
import org.crandor.game.content.global.SkillcapePerks;
import org.crandor.game.content.global.tutorial.TutorialSession;
import org.crandor.game.content.holiday.HolidayEvent;
import org.crandor.game.events.GlobalEventManager;
import org.crandor.game.events.GlobalEvent;
import org.crandor.game.node.entity.Entity;
import org.crandor.game.node.entity.combat.ImpactHandler;
import org.crandor.game.node.entity.npc.NPC;
@ -28,7 +28,7 @@ public final class Skills {
/**
* Represents the constant modifier of experience.
*/
public static final double EXPERIENCE_MULTIPLIER = 25;
public static final double EXPERIENCE_MULTIPLIER = 20;
/**
* The maximum experience multiplier.
@ -258,7 +258,7 @@ public final class Skills {
if (!(entity instanceof Player)) {
return 1.0;
}
double mod = multiplyer ? (GlobalEventManager.get().isActive("XP Fever") ? EXPERIENCE_MULTIPLIER * 2 : EXPERIENCE_MULTIPLIER) : 1;
double mod = multiplyer ? (GlobalEvent.XP_FEVER.isActive() ? EXPERIENCE_MULTIPLIER * 2 : EXPERIENCE_MULTIPLIER) : 1;
Player p = (Player) entity;
if (p.getIronmanManager().getMode() == IronmanMode.ULTIMATE) {
mod /= 4;

View file

@ -6,7 +6,7 @@ import org.crandor.game.content.global.tutorial.TutorialStage;
import org.crandor.game.content.skill.SkillPulse;
import org.crandor.game.content.skill.Skills;
import org.crandor.game.content.skill.member.summoning.familiar.Forager;
import org.crandor.game.events.GlobalEventManager;
import org.crandor.game.events.GlobalEvent;
import org.crandor.game.node.entity.npc.NPC;
import org.crandor.game.node.entity.player.Player;
import org.crandor.game.node.entity.player.info.portal.Perks;
@ -181,7 +181,7 @@ public final class FishingPulse extends SkillPulse<NPC> {
player.getSkillTasks().decreaseTask(player, SkillTasks.FTUNA2);
}
if (GlobalEventManager.get().isActive("Plenty of fish"))
if (GlobalEvent.PLENTY_OF_FISH.isActive())
player.getInventory().add(fish.getItem());
SkillingPets.checkPetDrop(player, SkillingPets.HERON);
final Item item = fish.getItem();

View file

@ -11,7 +11,7 @@ import org.crandor.game.content.global.tutorial.TutorialStage;
import org.crandor.game.content.skill.SkillPulse;
import org.crandor.game.content.skill.Skills;
import org.crandor.game.content.skill.member.farming.wrapper.PatchWrapper;
import org.crandor.game.events.GlobalEventManager;
import org.crandor.game.events.GlobalEvent;
import org.crandor.game.node.entity.impl.Projectile;
import org.crandor.game.node.entity.player.Player;
import org.crandor.game.node.entity.player.info.portal.Perks;
@ -344,7 +344,7 @@ public final class GatheringSkillPulse extends SkillPulse<GameObject> {
private int calculateRewardAmount(int reward) {
int amount = 1;
// Event doubles resources
if (GlobalEventManager.get().isActive("Harvesting doubles")) {
if (GlobalEvent.HARVESTING_DOUBLES.isActive()) {
amount *= 2;
}
@ -358,7 +358,7 @@ public final class GatheringSkillPulse extends SkillPulse<GameObject> {
amount += 1;
player.sendMessage("Through the power of the varrock armour you receive an extra ore.");
}
// If the player has a skillcape, 10% chance of finding an extra item
// If the player has a skill cape, 10% chance of finding an extra item
else if (isMining && !isMiningEssence && SkillcapePerks.hasSkillcapePerk(player, SkillcapePerks.MINING) && RandomFunction.getRandom(100) <= 10) {
amount += 1;
player.sendNotificationMessage("Your " + player.getEquipment().get(EquipmentContainer.SLOT_CAPE).getName() + " allows you to obtain two ores from this rock!");

View file

@ -3,7 +3,7 @@ package org.crandor.game.content.skill.free.runecrafting;
import org.crandor.game.container.impl.EquipmentContainer;
import org.crandor.game.content.skill.SkillPulse;
import org.crandor.game.content.skill.Skills;
import org.crandor.game.events.GlobalEventManager;
import org.crandor.game.events.GlobalEvent;
import org.crandor.game.node.entity.impl.Animator.Priority;
import org.crandor.game.node.entity.player.Player;
import org.crandor.game.node.entity.player.info.portal.Perks;
@ -309,7 +309,7 @@ public final class RuneCraftPulse extends SkillPulse<Item> {
i *= 2;
}
if(GlobalEventManager.get().isActive("Golden essence")) {
if(GlobalEvent.GOLDEN_ESSENCE.isActive()) {
i *= 3;
}
return i != 0 ? i : 1;

View file

@ -2,7 +2,7 @@ package org.crandor.game.content.skill.member.thieving;
import org.crandor.game.content.global.ttrail.ClueLevel;
import org.crandor.game.content.global.ttrail.ClueScrollPlugin;
import org.crandor.game.events.GlobalEventManager;
import org.crandor.game.events.GlobalEvent;
import org.crandor.game.node.entity.npc.NPC;
import org.crandor.game.node.entity.npc.drop.DropFrequency;
import org.crandor.game.node.entity.player.Player;
@ -175,7 +175,7 @@ public enum Pickpocket {
// Calculate any bonus multipliers
int bonusMultiplier = 1;
if (loot[0] == 995) {
if(GlobalEventManager.get().isActive("Thieves jackpot")) {
if(GlobalEvent.THIEVES_JACKPOT.isActive()) {
bonusMultiplier *= 3;
}
}

View file

@ -1,30 +1,83 @@
package org.crandor.game.events;
public class GlobalEvent {
import org.crandor.Util;
public enum GlobalEvent {
ALCHEMY_HELLENISTIC("Receive 2 x coins when using high alchemy"), // Not implemented
GOLDEN_RETRIEVER("All gold dropped by monsters will be automatically banked for you"), // Not implemented
THIEVES_JACKPOT("Receive 3 x more coins when thieving"),
GOLDEN_ESSENCE("Receive 3 x more runes when runecrafting"),
CLONE_FEST("20 x PVP clones have been spawned in the wilderness near the mage bank."), // Not implemented
TRY_YOUR_LUCK("Mobs will drop 40% more items when killed"),
CRAZY_SEEDS("Mobs will drop 2 x more seeds when killed"),
CHARMED("Mobs will drop 2 x more charms when killed"),
XP_FEVER("Receive 2 x XP for all skills"),
PLENTY_OF_FISH("Receive 2 x rewards when fishing"),
HARVESTING_DOUBLES("Receive 2 x items harvested with woodcutting or mining");
/**
* Represents the object of the altar.
*/
private final String eventName;
/**
* Represents the object of the altar.
*/
private final String eventDescription;
/**
* Represents the object of the altar.
*/
private Long remainingTicks;
private String eventName;
private long remainingTicks;
GlobalEvent(final String eventDescription) {
this.eventName = Util.enumToString(this.name());;
this.eventDescription = eventDescription;
this.remainingTicks = 0L;
}
public String getEventName() {
public String getName() {
return this.eventName;
}
public long getRemainingTicks() {
public String getDescription() {
return this.eventDescription;
}
public Long getRemainingTicks() {
return this.remainingTicks;
}
public GlobalEvent(String eventName, long ticks) {
this.eventName = eventName;
public GlobalEvent setRemainingTicks(Long ticks) {
this.remainingTicks = ticks;
}
public GlobalEvent process() {
remainingTicks--;
return this;
}
public Boolean isActive() {
return this.remainingTicks > 0;
}
public GlobalEvent tick() {
remainingTicks--;
return this;
}
// Start/Extend the event
public GlobalEvent extend() {
remainingTicks += 6000;
return extend(6000);
}
public GlobalEvent extend(int ticks) {
remainingTicks += ticks;
return this;
}
public GlobalEvent start() {
return extend(6000);
}
public GlobalEvent start(int ticks) {
extend(ticks);
return this;
}

View file

@ -20,25 +20,12 @@ import java.util.Map.Entry;
*/
public class GlobalEventManager implements CallBack {
private static Map<String, Long> EVENTS = new HashMap<String, Long>();
private long tick = 0;
private String lastEvent;
private String currentEvent;
private GlobalEvent lastEvent;
private GlobalEvent currentEvent;
public final GlobalEventManager init() {
try {
getEvents().put("Alchemy hellenistic", 0L);
getEvents().put("Golden retriever", 0L);
getEvents().put("Harvesting doubles", 0L);
getEvents().put("Thieves jackpot", 0L);
getEvents().put("Golden essence", 0L);
getEvents().put("Clone Fest", 0L);
getEvents().put("XP Fever", 0L);
} catch (Exception e) {
e.printStackTrace();
}
return this;
}
@ -48,23 +35,17 @@ public class GlobalEventManager implements CallBack {
@Override
public boolean pulse() {
tick++;
Iterator<Entry<String, Long>> iterator = EVENTS.entrySet().iterator();
while(iterator.hasNext()) {
Map.Entry<String, Long> entry = iterator.next();
Long ticksRemaining = entry.getValue();
if (entry.getValue() > 0) {
entry.setValue(--ticksRemaining);
if (ticksRemaining == 3000)
message("You have 30 minutes before the " + entry.getKey() + " event ends.");
for(GlobalEvent event : GlobalEvent.values()){
Long ticksRemaining = event.getRemainingTicks();
if (ticksRemaining > 0) {
event.tick();
--ticksRemaining;
if (ticksRemaining % 3000 == 0)
message("You have " + Math.round(ticksRemaining / 100) + " minutes before the " + event.getName() + " event ends.");
if (ticksRemaining <= 0) {
message("The " + entry.getKey() + " event has now ended.");
}
if (ticksRemaining <= 0)
message("The " + event.getName() + " event has now ended.");
}
}
@ -80,23 +61,12 @@ public class GlobalEventManager implements CallBack {
}
public void reActivate(String name, long time) {
Iterator<Entry<String, Long>> iterator = EVENTS.entrySet().iterator();
while(iterator.hasNext()) {
Map.Entry<String, Long> entry = iterator.next();
if (entry.getKey().equalsIgnoreCase(name)) {
entry.setValue(time);
}
}
public void reActivate(GlobalEvent event, long time) {
event.setRemainingTicks(time);
}
public GlobalEventManager save() {
Iterator<Entry<String, Long>> iterator = EVENTS.entrySet().iterator();
while(iterator.hasNext()) {
Map.Entry<String, Long> entry = iterator.next();
for(GlobalEvent event : GlobalEvent.values()){
StringBuilder query = new StringBuilder();
@ -104,14 +74,14 @@ public class GlobalEventManager implements CallBack {
query.append("(`eventName`,`eventTime`,`worldId`)");
query.append(" VALUES(");
query.append("'" + entry.getKey() + "'").append(",");
query.append("'" + entry.getValue() + "'").append(",");
query.append("'" + event.getName() + "'").append(",");
query.append("'" + event.getRemainingTicks() + "'").append(",");
query.append("'" + GameWorld.getSettings().getWorldId() + "'");
query.append(")");
query.append(" ON DUPLICATE KEY UPDATE ");
query.append("eventTime='" + entry.getValue() + "'");
query.append("eventTime='" + event.getRemainingTicks() + "'");
GameWorld.getDatabaseManager().update("server", query.toString());
@ -121,17 +91,15 @@ public class GlobalEventManager implements CallBack {
public GlobalEventManager load() {
try {
Results result = null;
result = new Results(GameWorld.getDatabaseManager().query("server", "SELECT * FROM `global_events` WHERE worldid='" + GameWorld.getSettings().getWorldId() + "'"));
Results result = new Results(GameWorld.getDatabaseManager().query("server", "SELECT * FROM `global_events` WHERE worldid='" + GameWorld.getSettings().getWorldId() + "'"));
while (!result.empty()) {
String eventName = result.string("eventName");
String eventTime = result.string("eventTime");
reActivate(eventName, Long.valueOf(eventTime));
GlobalEvent event = getEvent(eventName);
reActivate(event, Long.valueOf(eventTime));
}
} catch(Exception e) {
e.printStackTrace();
}
@ -147,11 +115,11 @@ public class GlobalEventManager implements CallBack {
}
public GlobalEventManager notify(String message) {
return message(message, true, "<col=c0392b>");
return message(message, true, "<col=3498db>");
}
public GlobalEventManager notify(String message, boolean tag) {
return message(message, tag, "<col=c0392b>");
return message(message, tag, "<col=3498db>");
}
public GlobalEventManager message(String message, boolean tag, String color) {
@ -159,151 +127,83 @@ public class GlobalEventManager implements CallBack {
player.getPacketDispatch().sendMessage(color + (tag ? "[Event Manager] " : "") + message);
}
return this;
}
public GlobalEventManager deactivate(String eventName) {
return deactivate(eventName, false);
}
public GlobalEventManager deactivate(String eventName, boolean forceMessage) {
public GlobalEventManager deactivate(GlobalEvent event) {
// Only deactivate event if already active
if (!isActive(eventName) && !forceMessage) {
if (!event.isActive()) {
return this;
}
Iterator<Entry<String, Long>> iterator = EVENTS.entrySet().iterator();
while(iterator.hasNext()) {
Map.Entry<String, Long> entry = (Map.Entry<String, Long>) iterator.next();
if (entry.getKey().equalsIgnoreCase(eventName)) {
message(eventName + " event has ended.");
entry.setValue(0L);
}
}
// Event will end in 2 ticks
event.setRemainingTicks(2L);
return this;
}
public GlobalEventManager activate(String eventName) {
return activate(eventName, null, 6000);
public GlobalEventManager activate(GlobalEvent event) {
return activate(event, null, 6000);
}
public GlobalEventManager activate(String eventName, String name) {
return activate(eventName, name, 6000);
public GlobalEventManager activate(GlobalEvent event, String name) {
return activate(event, name, 6000);
}
public GlobalEventManager activate(String eventName, String name, int timeToAdd) {
public GlobalEventManager activate(GlobalEvent event, String name, int timeToAdd) {
if (timeToAdd <= 0) timeToAdd = 6000;
event.start(timeToAdd);
Player player = Repository.getPlayerByDisplay(name);
Boolean eventStarted = false;
Iterator<Entry<String, Long>> iterator = EVENTS.entrySet().iterator();
while(iterator.hasNext()) {
Map.Entry<String, Long> entry = (Map.Entry<String, Long>) iterator.next();
if (entry.getKey().equalsIgnoreCase(eventName)) {
if (eventName.equalsIgnoreCase("clone fest")) {
notify("The " + eventName + " event is live, clones are located near the mage arena.");
} else {
if (entry.getValue() == 0) {
message("The " + eventName + " event has been activated for " + Math.round(timeToAdd / 100) + " minutes" + (player == null ? "" : " by " + player.getUsername()) + ".");
} else {
message("The " + eventName + " event has been extended by " + Math.round(timeToAdd / 100) + " minutes" + (player == null ? "" : " by " + player.getUsername()) + ".");
}
}
entry.setValue(entry.getValue() + timeToAdd);
eventStarted = true;
}
StringBuilder message = new StringBuilder();
message.append("The " + event.getName() + " event has been ");
message.append(event.isActive() ? "extended by" : "activated for");
message.append(" " + Math.round(timeToAdd / 100) + " minutes");
if (player != null) {
message.append(" by " + player.getUsername());
}
if (!eventStarted) {
player.sendMessage("Failed to activate event " + eventName + ".");
message.append(".");
message(message.toString());
player.getPacketDispatch().sendMessage(event.getDescription());
return this;
}
public GlobalEventManager activateHourly(GlobalEvent event) {
event.start(6000);
message(event.getName() + " is now active, and will run for an hour!");
for (Player player : Repository.getPlayers()) {
player.getPacketDispatch().sendMessage(event.getDescription());
}
return this;
}
public GlobalEventManager activateHourly(String eventName) {
if (getEvents().get(eventName) == null) {
System.out.println("Failed to activate event " + eventName + ".");
return this;
}
Iterator<Entry<String, Long>> iterator = EVENTS.entrySet().iterator();
while(iterator.hasNext()) {
Map.Entry<String, Long> entry = iterator.next();
if (entry.getKey().equalsIgnoreCase(eventName)) {
message(eventName + " is now active, and will run for an hour!");
for (Player player : Repository.getPlayers()) {
switch(getCurrentEvent()) {
case "Alchemy hellenistic":
player.getPacketDispatch().sendMessage("This event means you'll receive x2 coins when using high alchemy.");
break;
case "Golden retriever":
player.getPacketDispatch().sendMessage("This event means you'll have all gold dropped by monsters banked for you.");
break;
case "Harvesting doubles":
player.getPacketDispatch().sendMessages("This event means you'll receive x2 items when harvesting with woodcutting, mining", "or fishing.");
break;
case "Thieves jackpot":
player.getPacketDispatch().sendMessages("This event means you'll receive 3x more coins when thieving.");
break;
case "Golden essence":
player.getPacketDispatch().sendMessages("This event means you'll receive x3 more runes than normal when runecrafting.");
break;
case "Clone Fest":
player.getPacketDispatch().sendMessages("This event means 20 clones have been spawned in the wilderness", "near the mage bank.");
break;
case "XP Fever":
player.getPacketDispatch().sendMessages("This event means you'll receive x2 XP");
break;
}
}
entry.setValue(entry.getValue() + 6000);
}
}
return this;
}
public boolean isActive(String eventName) {
Iterator<Entry<String, Long>> iterator = EVENTS.entrySet().iterator();
while(iterator.hasNext()) {
Map.Entry<String, Long> entry = (Map.Entry<String, Long>) iterator.next();
if (entry.getKey().equalsIgnoreCase(eventName)) {
if (entry.getValue() > 0)
return true;
}
}
return false;
public boolean isActive(GlobalEvent event) {
return event.isActive();
}
public GlobalEventManager alert(Player player) {
boolean active = false;
Iterator<Entry<String, Long>> i = EVENTS.entrySet().iterator();
while(i.hasNext()) {
Map.Entry<String, Long> entry = (Map.Entry<String, Long>) i.next();
if (entry.getValue() > 0) {
active = true;
for(GlobalEvent event : GlobalEvent.values()){
if (event.isActive()) {
active = true;
}
}
if (!active) {
player.sendMessage("<col=3498db>No events are currently active.");
return this;
}
player.sendMessage("<col=3498db>The following events are active:");
Iterator<Entry<String, Long>> iterator = EVENTS.entrySet().iterator();
while(iterator.hasNext()) {
Map.Entry<String, Long> entry = (Map.Entry<String, Long>) iterator.next();
if (entry.getValue() > 0) {
player.sendMessage("<col=3498db> [-] " + entry.getKey() + ".");
player.sendMessage("<col=3498db>The following events are active:");
for(GlobalEvent event : GlobalEvent.values()){
if (event.isActive()) {
player.sendMessage("<col=3498db> [-] " + event.getName() + ".");
}
}
return this;
}
@ -319,24 +219,28 @@ public class GlobalEventManager implements CallBack {
return true;
}
public static Map<String, Long> getEvents() {
return EVENTS;
public static GlobalEvent getEvent(String name) {
for(GlobalEvent event : GlobalEvent.values()){
if (event.getName().equalsIgnoreCase(name))
return event;
}
return null;
}
public String getLastEvent() {
public GlobalEvent getLastEvent() {
return lastEvent;
}
public void setLastEvent(String lastEvent) {
this.lastEvent = lastEvent;
public void setLastEvent(GlobalEvent event) {
this.lastEvent = event;
}
public String getCurrentEvent() {
public GlobalEvent getCurrentEvent() {
return currentEvent;
}
public void setCurrentEvent(String currentEvent) {
this.currentEvent = currentEvent;
public void setCurrentEvent(GlobalEvent event) {
this.currentEvent = event;
}

View file

@ -8,7 +8,7 @@ import org.crandor.game.content.eco.EconomyManagement;
import org.crandor.game.content.eco.ge.GrandExchangeDatabase;
import org.crandor.game.content.global.Bones;
import org.crandor.game.content.skill.Skills;
import org.crandor.game.events.GlobalEventManager;
import org.crandor.game.events.GlobalEvent;
import org.crandor.game.node.entity.Entity;
import org.crandor.game.node.entity.npc.NPC;
import org.crandor.game.node.entity.player.Player;
@ -93,11 +93,11 @@ public final class NPCDropTables {
Player p = looter instanceof Player ? (Player) looter : null;
for (ChanceItem item : defaultTable) {
int amount = RandomFunction.random(item.getMinimumAmount(), item.getMaximumAmount() + 1);
if (GlobalEventManager.get().isActive("Try your luck"))
if (GlobalEvent.TRY_YOUR_LUCK.isActive())
amount *= 1.4;
if (GlobalEventManager.get().isActive("Crazy Seeds") && ItemDefinition.forId(item.getId()).getName().toLowerCase().contains("seed"))
if (GlobalEvent.CRAZY_SEEDS.isActive() && ItemDefinition.forId(item.getId()).getName().toLowerCase().contains("seed"))
amount *= 2;
if (GlobalEventManager.get().isActive("Charmed") && ItemDefinition.forId(item.getId()).getName().toLowerCase().contains("charm"))
if (GlobalEvent.CHARMED.isActive() && ItemDefinition.forId(item.getId()).getName().toLowerCase().contains("charm"))
amount *= 2;
if (npc.getName().startsWith("Revenant") && item.getName().equalsIgnoreCase("coins")) {
break;
@ -181,7 +181,7 @@ public final class NPCDropTables {
if (handleBoneCrusher(player, item)) {
return;
}
if (item.getId() == 995 && player.getBank().hasSpaceFor(item) && ( player.getGlobalData().isEnableCoinMachine() || GlobalEventManager.get().isActive("Golden retriever") )) {
if (item.getId() == 995 && player.getBank().hasSpaceFor(item) && ( player.getGlobalData().isEnableCoinMachine() || GlobalEvent.GOLDEN_RETRIEVER.isActive() )) {
item = new Item(995, (int) (item.getAmount() + (item.getAmount() * 0.25)));
player.getBank().add(item);
player.sendMessage("<col=3498db> " + item.getAmount() + " coins were sent to your bank.");

View file

@ -154,7 +154,7 @@ public final class LoginConfiguration {
return;
}
player.getPacketDispatch().sendMessage("Welcome to " + GameWorld.getName() + ".");
player.getPacketDispatch().sendMessage("You are currently playing in beta version 1.2");
//player.getPacketDispatch().sendMessage("You are currently playing in beta version 1.2");
if (player.getDetails().isMuted()) {
player.getPacketDispatch().sendMessage("You are muted.");
player.getPacketDispatch().sendMessage("To prevent further mutes please read the rules.");

View file

@ -4,6 +4,7 @@ import org.crandor.ServerConstants;
import org.crandor.cache.Cache;
import org.crandor.cache.ServerStore;
import org.crandor.game.content.eco.ge.GrandExchangeDatabase;
import org.crandor.game.events.GlobalEvent;
import org.crandor.game.events.GlobalEventManager;
import org.crandor.game.node.entity.npc.NPC;
import org.crandor.game.node.entity.player.Player;
@ -105,7 +106,18 @@ public final class GameWorld {
getEvents().put("Thieves jackpot", 0L);
getEvents().put("Golden essence", 0L);
*/
public static String[] hourlyEvent = {"Alchemy hellenistic", "Golden retriever", "Harvesting doubles", "Thieves jackpot", "Golden essence"};
public static GlobalEvent[] hourlyEvents = {
GlobalEvent.ALCHEMY_HELLENISTIC,
GlobalEvent.GOLDEN_RETRIEVER,
GlobalEvent.THIEVES_JACKPOT,
GlobalEvent.GOLDEN_ESSENCE,
GlobalEvent.TRY_YOUR_LUCK,
GlobalEvent.CRAZY_SEEDS,
GlobalEvent.CHARMED,
GlobalEvent.XP_FEVER,
GlobalEvent.PLENTY_OF_FISH,
GlobalEvent.HARVESTING_DOUBLES,
};
/**
* Pulses all current pulses.
@ -139,8 +151,9 @@ public final class GameWorld {
switch(cfTicks) {
case 100:
if (checkDay()) {
GlobalEventManager.get().activate("Clone Fest", null, 2000);
if (GlobalEventManager.get().isActive("Clone Fest")) {
// Activate clone fest for 15 minutes
GlobalEventManager.get().activate(GlobalEvent.CLONE_FEST, null, 1500);
if (GlobalEvent.CLONE_FEST.isActive()) {
int size = 20;
if (PVPAIPActions.pvp_players == null) {
PVPAIPActions.pvp_players = new ArrayList<>();
@ -169,8 +182,8 @@ public final class GameWorld {
switch (eventTicks) {
// 2 minute gap between events
case 200:
int randomEventId = new Random().nextInt(hourlyEvent.length);
String event = hourlyEvent[randomEventId];
int randomEventId = new Random().nextInt(hourlyEvents.length);
GlobalEvent event = hourlyEvents[randomEventId];
GlobalEventManager.get().setLastEvent(event);
GlobalEventManager.get().setCurrentEvent(event);

View file

@ -1,16 +1,13 @@
package plugin.command;
import com.sun.xml.internal.ws.util.StringUtils;
import org.crandor.ServerConstants;
import org.crandor.cache.Cache;
import org.crandor.cache.def.impl.ItemDefinition;
import org.crandor.cache.def.impl.NPCDefinition;
import org.crandor.game.component.Component;
import org.crandor.game.container.Container;
import org.crandor.game.container.impl.EquipmentContainer;
import org.crandor.game.content.eco.EconomyManagement;
import org.crandor.game.content.global.shop.Shop;
import org.crandor.game.content.global.shop.ShopViewer;
import org.crandor.game.content.global.tutorial.TutorialSession;
import org.crandor.game.content.holiday.HolidayItem;
import org.crandor.game.content.holiday.ItemLimitation;
@ -18,6 +15,7 @@ import org.crandor.game.content.skill.Skills;
import org.crandor.game.content.skill.free.smithing.smelting.Bar;
import org.crandor.game.content.skill.member.construction.HouseLocation;
import org.crandor.game.content.skill.member.summoning.pet.Pets;
import org.crandor.game.events.GlobalEvent;
import org.crandor.game.events.GlobalEventManager;
import org.crandor.game.node.entity.combat.ImpactHandler.HitsplatType;
import org.crandor.game.node.entity.npc.NPC;
@ -50,9 +48,6 @@ import org.crandor.game.world.map.zone.RegionZone;
import org.crandor.game.world.repository.Repository;
import org.crandor.game.world.update.flag.context.Animation;
import org.crandor.game.world.update.flag.context.Graphics;
import org.crandor.net.packet.PacketRepository;
import org.crandor.net.packet.context.ContainerContext;
import org.crandor.net.packet.out.ContainerPacket;
import org.crandor.plugin.InitializablePlugin;
import org.crandor.plugin.Plugin;
import org.crandor.plugin.PluginManager;
@ -106,6 +101,7 @@ public final class DeveloperCommandPlugin extends CommandPlugin {
public boolean parse(final Player player, String name, String[] args) {
String[] eventNameArr;
String eventName;
GlobalEvent event;
switch (name) {
case "find":
try {
@ -188,8 +184,11 @@ public final class DeveloperCommandPlugin extends CommandPlugin {
case "beginevent":
eventNameArr = Arrays.copyOfRange(args, 1, args.length);
eventName = String.join(" ", eventNameArr);
event = GlobalEventManager.getEvent(eventName);
if (event == null)
break;
GlobalEventManager.get().activate(event);
player.sendMessage("You have activated the " + eventName + " event!");
GlobalEventManager.get().activate(eventName, null);
break;
case "eventdeactivate":
@ -200,8 +199,11 @@ public final class DeveloperCommandPlugin extends CommandPlugin {
case "finishevent":
eventNameArr = Arrays.copyOfRange(args, 1, args.length);
eventName = String.join(" ", eventNameArr);
event = GlobalEventManager.getEvent(eventName);
if (event == null)
break;
GlobalEventManager.get().deactivate(event);
player.sendMessage("You have deactivated the " + eventName + " event!");
GlobalEventManager.get().activate(eventName, null);
break;
case "poison":
@ -211,11 +213,8 @@ public final class DeveloperCommandPlugin extends CommandPlugin {
break;
case "activatecf":
String target = "";
for (int i = 1; i < args.length; i++)
target += args[i] + ((i == args.length - 1) ? "" : " ");
GlobalEventManager.get().activate("Clone Fest", null);
if (GlobalEventManager.get().isActive("Clone Fest")) {
GlobalEventManager.get().activate(GlobalEvent.CLONE_FEST);
if (GlobalEvent.CLONE_FEST.isActive()) {
int size = 20;
if (PVPAIPActions.pvp_players == null) {
player.setAttribute("aip_legion", PVPAIPActions.pvp_players = new ArrayList<>());

View file

@ -76,9 +76,9 @@ public final class ExperienceLampInterface extends ComponentPlugin {
player.getAudioManager().send(SOUND);
player.getInventory().remove(lamp);
player.getInterfaceManager().close();
int x = player.getSkills().getStaticLevel(skillType.skill);
int skillLevel = player.getSkills().getStaticLevel(skillType.skill);
int modifier = 10;
double experience = x * modifier;
double experience = skillLevel * modifier;
if (type != null && type != Lamps.GENIE_LAMP) {
player.getDialogueInterpreter().open(70099, new Object[] { "The lamp gives you " + (int) type.getExp() + " " + Skills.SKILL_NAME[skillType.skill] + " experience." });
experience = type.getExp() / Skills.EXPERIENCE_MULTIPLIER;
@ -99,7 +99,29 @@ public final class ExperienceLampInterface extends ComponentPlugin {
* @author 'Vexia
*/
public enum SkillInterface {
ATTACK(29, Skills.ATTACK), STRENGTH(30, Skills.STRENGTH), RANGE(32, Skills.RANGE), MAGIC(35, Skills.MAGIC), DEFENCE(31, Skills.DEFENCE), CRAFTING(39, Skills.CRAFTING), HITPOINTS(34, Skills.HITPOINTS), PRAYER(33, Skills.PRAYER), AGILITY(36, Skills.AGILITY), HERBLORE(37, Skills.HERBLORE), THIEVING(38, Skills.THIEVING), FISHING(43, Skills.FISHING), RUNECRAFTING(47, Skills.RUNECRAFTING), SLAYER(48, Skills.SLAYER), FARMING(50, Skills.FARMING), MINING(41, Skills.MINING), SMITHING(42, Skills.SMITHING), HUNTER(49, Skills.HUNTER), SUMMONING(52, Skills.SUMMONING), COOKING(45, Skills.COOKING), FIREMAKING(44, Skills.FIREMAKING), WOODCUTTING(46, Skills.WOODCUTTING), FLETCHING(40, Skills.FLETCHING);
ATTACK(29, Skills.ATTACK),
STRENGTH(30, Skills.STRENGTH),
RANGE(32, Skills.RANGE),
MAGIC(35, Skills.MAGIC),
DEFENCE(31, Skills.DEFENCE),
CRAFTING(39, Skills.CRAFTING),
HITPOINTS(34, Skills.HITPOINTS),
PRAYER(33, Skills.PRAYER),
AGILITY(36, Skills.AGILITY),
HERBLORE(37, Skills.HERBLORE),
THIEVING(38, Skills.THIEVING),
FISHING(43, Skills.FISHING),
RUNECRAFTING(47, Skills.RUNECRAFTING),
SLAYER(48, Skills.SLAYER),
FARMING(50, Skills.FARMING),
MINING(41, Skills.MINING),
SMITHING(42, Skills.SMITHING),
HUNTER(49, Skills.HUNTER),
SUMMONING(52, Skills.SUMMONING),
COOKING(45, Skills.COOKING),
FIREMAKING(44, Skills.FIREMAKING),
WOODCUTTING(46, Skills.WOODCUTTING),
FLETCHING(40, Skills.FLETCHING);
/**
* Constructs a new {@code ExperienceLampInterface} {@code Object}.