[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.SkillcapePerks;
import org.crandor.game.content.global.tutorial.TutorialSession; import org.crandor.game.content.global.tutorial.TutorialSession;
import org.crandor.game.content.holiday.HolidayEvent; 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.Entity;
import org.crandor.game.node.entity.combat.ImpactHandler; import org.crandor.game.node.entity.combat.ImpactHandler;
import org.crandor.game.node.entity.npc.NPC; import org.crandor.game.node.entity.npc.NPC;
@ -28,7 +28,7 @@ public final class Skills {
/** /**
* Represents the constant modifier of experience. * Represents the constant modifier of experience.
*/ */
public static final double EXPERIENCE_MULTIPLIER = 25; public static final double EXPERIENCE_MULTIPLIER = 20;
/** /**
* The maximum experience multiplier. * The maximum experience multiplier.
@ -258,7 +258,7 @@ public final class Skills {
if (!(entity instanceof Player)) { if (!(entity instanceof Player)) {
return 1.0; 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; Player p = (Player) entity;
if (p.getIronmanManager().getMode() == IronmanMode.ULTIMATE) { if (p.getIronmanManager().getMode() == IronmanMode.ULTIMATE) {
mod /= 4; 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.SkillPulse;
import org.crandor.game.content.skill.Skills; import org.crandor.game.content.skill.Skills;
import org.crandor.game.content.skill.member.summoning.familiar.Forager; 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.npc.NPC;
import org.crandor.game.node.entity.player.Player; import org.crandor.game.node.entity.player.Player;
import org.crandor.game.node.entity.player.info.portal.Perks; 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); player.getSkillTasks().decreaseTask(player, SkillTasks.FTUNA2);
} }
if (GlobalEventManager.get().isActive("Plenty of fish")) if (GlobalEvent.PLENTY_OF_FISH.isActive())
player.getInventory().add(fish.getItem()); player.getInventory().add(fish.getItem());
SkillingPets.checkPetDrop(player, SkillingPets.HERON); SkillingPets.checkPetDrop(player, SkillingPets.HERON);
final Item item = fish.getItem(); 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.SkillPulse;
import org.crandor.game.content.skill.Skills; import org.crandor.game.content.skill.Skills;
import org.crandor.game.content.skill.member.farming.wrapper.PatchWrapper; 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.impl.Projectile;
import org.crandor.game.node.entity.player.Player; import org.crandor.game.node.entity.player.Player;
import org.crandor.game.node.entity.player.info.portal.Perks; 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) { private int calculateRewardAmount(int reward) {
int amount = 1; int amount = 1;
// Event doubles resources // Event doubles resources
if (GlobalEventManager.get().isActive("Harvesting doubles")) { if (GlobalEvent.HARVESTING_DOUBLES.isActive()) {
amount *= 2; amount *= 2;
} }
@ -358,7 +358,7 @@ public final class GatheringSkillPulse extends SkillPulse<GameObject> {
amount += 1; amount += 1;
player.sendMessage("Through the power of the varrock armour you receive an extra ore."); 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) { else if (isMining && !isMiningEssence && SkillcapePerks.hasSkillcapePerk(player, SkillcapePerks.MINING) && RandomFunction.getRandom(100) <= 10) {
amount += 1; amount += 1;
player.sendNotificationMessage("Your " + player.getEquipment().get(EquipmentContainer.SLOT_CAPE).getName() + " allows you to obtain two ores from this rock!"); 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.container.impl.EquipmentContainer;
import org.crandor.game.content.skill.SkillPulse; import org.crandor.game.content.skill.SkillPulse;
import org.crandor.game.content.skill.Skills; 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.impl.Animator.Priority;
import org.crandor.game.node.entity.player.Player; import org.crandor.game.node.entity.player.Player;
import org.crandor.game.node.entity.player.info.portal.Perks; import org.crandor.game.node.entity.player.info.portal.Perks;
@ -309,7 +309,7 @@ public final class RuneCraftPulse extends SkillPulse<Item> {
i *= 2; i *= 2;
} }
if(GlobalEventManager.get().isActive("Golden essence")) { if(GlobalEvent.GOLDEN_ESSENCE.isActive()) {
i *= 3; i *= 3;
} }
return i != 0 ? i : 1; 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.ClueLevel;
import org.crandor.game.content.global.ttrail.ClueScrollPlugin; 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.NPC;
import org.crandor.game.node.entity.npc.drop.DropFrequency; import org.crandor.game.node.entity.npc.drop.DropFrequency;
import org.crandor.game.node.entity.player.Player; import org.crandor.game.node.entity.player.Player;
@ -175,7 +175,7 @@ public enum Pickpocket {
// Calculate any bonus multipliers // Calculate any bonus multipliers
int bonusMultiplier = 1; int bonusMultiplier = 1;
if (loot[0] == 995) { if (loot[0] == 995) {
if(GlobalEventManager.get().isActive("Thieves jackpot")) { if(GlobalEvent.THIEVES_JACKPOT.isActive()) {
bonusMultiplier *= 3; bonusMultiplier *= 3;
} }
} }

View file

@ -1,30 +1,83 @@
package org.crandor.game.events; 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; GlobalEvent(final String eventDescription) {
private long remainingTicks; this.eventName = Util.enumToString(this.name());;
this.eventDescription = eventDescription;
this.remainingTicks = 0L;
}
public String getEventName() { public String getName() {
return this.eventName; return this.eventName;
} }
public long getRemainingTicks() { public String getDescription() {
return this.eventDescription;
}
public Long getRemainingTicks() {
return this.remainingTicks; return this.remainingTicks;
} }
public GlobalEvent(String eventName, long ticks) { public GlobalEvent setRemainingTicks(Long ticks) {
this.eventName = eventName;
this.remainingTicks = ticks; this.remainingTicks = ticks;
}
public GlobalEvent process() {
remainingTicks--;
return this; return this;
} }
public Boolean isActive() {
return this.remainingTicks > 0;
}
public GlobalEvent tick() {
remainingTicks--;
return this;
}
// Start/Extend the event
public GlobalEvent extend() { 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; return this;
} }

View file

@ -20,25 +20,12 @@ import java.util.Map.Entry;
*/ */
public class GlobalEventManager implements CallBack { public class GlobalEventManager implements CallBack {
private static Map<String, Long> EVENTS = new HashMap<String, Long>();
private long tick = 0; private long tick = 0;
private String lastEvent; private GlobalEvent lastEvent;
private String currentEvent; private GlobalEvent currentEvent;
public final GlobalEventManager init() { 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; return this;
} }
@ -48,23 +35,17 @@ public class GlobalEventManager implements CallBack {
@Override @Override
public boolean pulse() { public boolean pulse() {
tick++; tick++;
for(GlobalEvent event : GlobalEvent.values()){
Iterator<Entry<String, Long>> iterator = EVENTS.entrySet().iterator(); Long ticksRemaining = event.getRemainingTicks();
if (ticksRemaining > 0) {
while(iterator.hasNext()) { event.tick();
Map.Entry<String, Long> entry = iterator.next(); --ticksRemaining;
Long ticksRemaining = entry.getValue(); if (ticksRemaining % 3000 == 0)
if (entry.getValue() > 0) { message("You have " + Math.round(ticksRemaining / 100) + " minutes before the " + event.getName() + " event ends.");
entry.setValue(--ticksRemaining);
if (ticksRemaining == 3000)
message("You have 30 minutes before the " + entry.getKey() + " event ends.");
if (ticksRemaining <= 0) { if (ticksRemaining <= 0)
message("The " + entry.getKey() + " event has now ended."); message("The " + event.getName() + " event has now ended.");
}
} }
} }
@ -80,23 +61,12 @@ public class GlobalEventManager implements CallBack {
} }
public void reActivate(String name, long time) { public void reActivate(GlobalEvent event, long time) {
Iterator<Entry<String, Long>> iterator = EVENTS.entrySet().iterator(); event.setRemainingTicks(time);
while(iterator.hasNext()) {
Map.Entry<String, Long> entry = iterator.next();
if (entry.getKey().equalsIgnoreCase(name)) {
entry.setValue(time);
}
}
} }
public GlobalEventManager save() { public GlobalEventManager save() {
Iterator<Entry<String, Long>> iterator = EVENTS.entrySet().iterator(); for(GlobalEvent event : GlobalEvent.values()){
while(iterator.hasNext()) {
Map.Entry<String, Long> entry = iterator.next();
StringBuilder query = new StringBuilder(); StringBuilder query = new StringBuilder();
@ -104,14 +74,14 @@ public class GlobalEventManager implements CallBack {
query.append("(`eventName`,`eventTime`,`worldId`)"); query.append("(`eventName`,`eventTime`,`worldId`)");
query.append(" VALUES("); query.append(" VALUES(");
query.append("'" + entry.getKey() + "'").append(","); query.append("'" + event.getName() + "'").append(",");
query.append("'" + entry.getValue() + "'").append(","); query.append("'" + event.getRemainingTicks() + "'").append(",");
query.append("'" + GameWorld.getSettings().getWorldId() + "'"); query.append("'" + GameWorld.getSettings().getWorldId() + "'");
query.append(")"); query.append(")");
query.append(" ON DUPLICATE KEY UPDATE "); query.append(" ON DUPLICATE KEY UPDATE ");
query.append("eventTime='" + entry.getValue() + "'"); query.append("eventTime='" + event.getRemainingTicks() + "'");
GameWorld.getDatabaseManager().update("server", query.toString()); GameWorld.getDatabaseManager().update("server", query.toString());
@ -121,17 +91,15 @@ public class GlobalEventManager implements CallBack {
public GlobalEventManager load() { public GlobalEventManager load() {
try { try {
Results result = null; Results result = new Results(GameWorld.getDatabaseManager().query("server", "SELECT * FROM `global_events` WHERE worldid='" + GameWorld.getSettings().getWorldId() + "'"));
result = new Results(GameWorld.getDatabaseManager().query("server", "SELECT * FROM `global_events` WHERE worldid='" + GameWorld.getSettings().getWorldId() + "'"));
while (!result.empty()) { while (!result.empty()) {
String eventName = result.string("eventName"); String eventName = result.string("eventName");
String eventTime = result.string("eventTime"); String eventTime = result.string("eventTime");
reActivate(eventName, Long.valueOf(eventTime)); GlobalEvent event = getEvent(eventName);
reActivate(event, Long.valueOf(eventTime));
} }
} catch(Exception e) { } catch(Exception e) {
e.printStackTrace(); e.printStackTrace();
} }
@ -147,11 +115,11 @@ public class GlobalEventManager implements CallBack {
} }
public GlobalEventManager notify(String message) { public GlobalEventManager notify(String message) {
return message(message, true, "<col=c0392b>"); return message(message, true, "<col=3498db>");
} }
public GlobalEventManager notify(String message, boolean tag) { 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) { 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); player.getPacketDispatch().sendMessage(color + (tag ? "[Event Manager] " : "") + message);
} }
return this; return this;
} }
public GlobalEventManager deactivate(String eventName) { public GlobalEventManager deactivate(GlobalEvent event) {
return deactivate(eventName, false);
}
public GlobalEventManager deactivate(String eventName, boolean forceMessage) {
// Only deactivate event if already active // Only deactivate event if already active
if (!isActive(eventName) && !forceMessage) { if (!event.isActive()) {
return this; return this;
} }
Iterator<Entry<String, Long>> iterator = EVENTS.entrySet().iterator(); // Event will end in 2 ticks
event.setRemainingTicks(2L);
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);
}
}
return this; return this;
} }
public GlobalEventManager activate(String eventName) { public GlobalEventManager activate(GlobalEvent event) {
return activate(eventName, null, 6000); return activate(event, null, 6000);
} }
public GlobalEventManager activate(String eventName, String name) { public GlobalEventManager activate(GlobalEvent event, String name) {
return activate(eventName, name, 6000); 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; if (timeToAdd <= 0) timeToAdd = 6000;
event.start(timeToAdd);
Player player = Repository.getPlayerByDisplay(name); Player player = Repository.getPlayerByDisplay(name);
Boolean eventStarted = false;
StringBuilder message = new StringBuilder();
Iterator<Entry<String, Long>> iterator = EVENTS.entrySet().iterator(); message.append("The " + event.getName() + " event has been ");
message.append(event.isActive() ? "extended by" : "activated for");
while(iterator.hasNext()) { message.append(" " + Math.round(timeToAdd / 100) + " minutes");
Map.Entry<String, Long> entry = (Map.Entry<String, Long>) iterator.next(); if (player != null) {
if (entry.getKey().equalsIgnoreCase(eventName)) { message.append(" by " + player.getUsername());
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;
}
} }
if (!eventStarted) { message.append(".");
player.sendMessage("Failed to activate event " + eventName + ".");
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; return this;
} }
public GlobalEventManager activateHourly(String eventName) { public boolean isActive(GlobalEvent event) {
return event.isActive();
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 GlobalEventManager alert(Player player) { public GlobalEventManager alert(Player player) {
boolean active = false; boolean active = false;
Iterator<Entry<String, Long>> i = EVENTS.entrySet().iterator();
for(GlobalEvent event : GlobalEvent.values()){
while(i.hasNext()) { if (event.isActive()) {
Map.Entry<String, Long> entry = (Map.Entry<String, Long>) i.next(); active = true;
if (entry.getValue() > 0) {
active = true;
} }
} }
if (!active) { if (!active) {
player.sendMessage("<col=3498db>No events are currently active."); player.sendMessage("<col=3498db>No events are currently active.");
return this; return this;
} }
player.sendMessage("<col=3498db>The following events are active:");
Iterator<Entry<String, Long>> iterator = EVENTS.entrySet().iterator();
while(iterator.hasNext()) { player.sendMessage("<col=3498db>The following events are active:");
Map.Entry<String, Long> entry = (Map.Entry<String, Long>) iterator.next();
if (entry.getValue() > 0) { for(GlobalEvent event : GlobalEvent.values()){
player.sendMessage("<col=3498db> [-] " + entry.getKey() + "."); if (event.isActive()) {
player.sendMessage("<col=3498db> [-] " + event.getName() + ".");
} }
} }
return this; return this;
} }
@ -319,24 +219,28 @@ public class GlobalEventManager implements CallBack {
return true; return true;
} }
public static Map<String, Long> getEvents() { public static GlobalEvent getEvent(String name) {
return EVENTS; for(GlobalEvent event : GlobalEvent.values()){
if (event.getName().equalsIgnoreCase(name))
return event;
}
return null;
} }
public String getLastEvent() { public GlobalEvent getLastEvent() {
return lastEvent; return lastEvent;
} }
public void setLastEvent(String lastEvent) { public void setLastEvent(GlobalEvent event) {
this.lastEvent = lastEvent; this.lastEvent = event;
} }
public String getCurrentEvent() { public GlobalEvent getCurrentEvent() {
return currentEvent; return currentEvent;
} }
public void setCurrentEvent(String currentEvent) { public void setCurrentEvent(GlobalEvent event) {
this.currentEvent = currentEvent; 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.eco.ge.GrandExchangeDatabase;
import org.crandor.game.content.global.Bones; import org.crandor.game.content.global.Bones;
import org.crandor.game.content.skill.Skills; 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.Entity;
import org.crandor.game.node.entity.npc.NPC; import org.crandor.game.node.entity.npc.NPC;
import org.crandor.game.node.entity.player.Player; import org.crandor.game.node.entity.player.Player;
@ -93,11 +93,11 @@ public final class NPCDropTables {
Player p = looter instanceof Player ? (Player) looter : null; Player p = looter instanceof Player ? (Player) looter : null;
for (ChanceItem item : defaultTable) { for (ChanceItem item : defaultTable) {
int amount = RandomFunction.random(item.getMinimumAmount(), item.getMaximumAmount() + 1); 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; 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; 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; amount *= 2;
if (npc.getName().startsWith("Revenant") && item.getName().equalsIgnoreCase("coins")) { if (npc.getName().startsWith("Revenant") && item.getName().equalsIgnoreCase("coins")) {
break; break;
@ -181,7 +181,7 @@ public final class NPCDropTables {
if (handleBoneCrusher(player, item)) { if (handleBoneCrusher(player, item)) {
return; 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))); item = new Item(995, (int) (item.getAmount() + (item.getAmount() * 0.25)));
player.getBank().add(item); player.getBank().add(item);
player.sendMessage("<col=3498db> " + item.getAmount() + " coins were sent to your bank."); player.sendMessage("<col=3498db> " + item.getAmount() + " coins were sent to your bank.");

View file

@ -154,7 +154,7 @@ public final class LoginConfiguration {
return; return;
} }
player.getPacketDispatch().sendMessage("Welcome to " + GameWorld.getName() + "."); 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()) { if (player.getDetails().isMuted()) {
player.getPacketDispatch().sendMessage("You are muted."); player.getPacketDispatch().sendMessage("You are muted.");
player.getPacketDispatch().sendMessage("To prevent further mutes please read the rules."); 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.Cache;
import org.crandor.cache.ServerStore; import org.crandor.cache.ServerStore;
import org.crandor.game.content.eco.ge.GrandExchangeDatabase; import org.crandor.game.content.eco.ge.GrandExchangeDatabase;
import org.crandor.game.events.GlobalEvent;
import org.crandor.game.events.GlobalEventManager; import org.crandor.game.events.GlobalEventManager;
import org.crandor.game.node.entity.npc.NPC; import org.crandor.game.node.entity.npc.NPC;
import org.crandor.game.node.entity.player.Player; import org.crandor.game.node.entity.player.Player;
@ -105,7 +106,18 @@ public final class GameWorld {
getEvents().put("Thieves jackpot", 0L); getEvents().put("Thieves jackpot", 0L);
getEvents().put("Golden essence", 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. * Pulses all current pulses.
@ -139,8 +151,9 @@ public final class GameWorld {
switch(cfTicks) { switch(cfTicks) {
case 100: case 100:
if (checkDay()) { if (checkDay()) {
GlobalEventManager.get().activate("Clone Fest", null, 2000); // Activate clone fest for 15 minutes
if (GlobalEventManager.get().isActive("Clone Fest")) { GlobalEventManager.get().activate(GlobalEvent.CLONE_FEST, null, 1500);
if (GlobalEvent.CLONE_FEST.isActive()) {
int size = 20; int size = 20;
if (PVPAIPActions.pvp_players == null) { if (PVPAIPActions.pvp_players == null) {
PVPAIPActions.pvp_players = new ArrayList<>(); PVPAIPActions.pvp_players = new ArrayList<>();
@ -169,8 +182,8 @@ public final class GameWorld {
switch (eventTicks) { switch (eventTicks) {
// 2 minute gap between events // 2 minute gap between events
case 200: case 200:
int randomEventId = new Random().nextInt(hourlyEvent.length); int randomEventId = new Random().nextInt(hourlyEvents.length);
String event = hourlyEvent[randomEventId]; GlobalEvent event = hourlyEvents[randomEventId];
GlobalEventManager.get().setLastEvent(event); GlobalEventManager.get().setLastEvent(event);
GlobalEventManager.get().setCurrentEvent(event); GlobalEventManager.get().setCurrentEvent(event);

View file

@ -1,16 +1,13 @@
package plugin.command; package plugin.command;
import com.sun.xml.internal.ws.util.StringUtils;
import org.crandor.ServerConstants; import org.crandor.ServerConstants;
import org.crandor.cache.Cache; import org.crandor.cache.Cache;
import org.crandor.cache.def.impl.ItemDefinition; import org.crandor.cache.def.impl.ItemDefinition;
import org.crandor.cache.def.impl.NPCDefinition; import org.crandor.cache.def.impl.NPCDefinition;
import org.crandor.game.component.Component;
import org.crandor.game.container.Container; import org.crandor.game.container.Container;
import org.crandor.game.container.impl.EquipmentContainer; import org.crandor.game.container.impl.EquipmentContainer;
import org.crandor.game.content.eco.EconomyManagement; import org.crandor.game.content.eco.EconomyManagement;
import org.crandor.game.content.global.shop.Shop; 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.global.tutorial.TutorialSession;
import org.crandor.game.content.holiday.HolidayItem; import org.crandor.game.content.holiday.HolidayItem;
import org.crandor.game.content.holiday.ItemLimitation; 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.free.smithing.smelting.Bar;
import org.crandor.game.content.skill.member.construction.HouseLocation; import org.crandor.game.content.skill.member.construction.HouseLocation;
import org.crandor.game.content.skill.member.summoning.pet.Pets; 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.events.GlobalEventManager;
import org.crandor.game.node.entity.combat.ImpactHandler.HitsplatType; import org.crandor.game.node.entity.combat.ImpactHandler.HitsplatType;
import org.crandor.game.node.entity.npc.NPC; 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.repository.Repository;
import org.crandor.game.world.update.flag.context.Animation; import org.crandor.game.world.update.flag.context.Animation;
import org.crandor.game.world.update.flag.context.Graphics; 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.InitializablePlugin;
import org.crandor.plugin.Plugin; import org.crandor.plugin.Plugin;
import org.crandor.plugin.PluginManager; 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) { public boolean parse(final Player player, String name, String[] args) {
String[] eventNameArr; String[] eventNameArr;
String eventName; String eventName;
GlobalEvent event;
switch (name) { switch (name) {
case "find": case "find":
try { try {
@ -188,8 +184,11 @@ public final class DeveloperCommandPlugin extends CommandPlugin {
case "beginevent": case "beginevent":
eventNameArr = Arrays.copyOfRange(args, 1, args.length); eventNameArr = Arrays.copyOfRange(args, 1, args.length);
eventName = String.join(" ", eventNameArr); eventName = String.join(" ", eventNameArr);
event = GlobalEventManager.getEvent(eventName);
if (event == null)
break;
GlobalEventManager.get().activate(event);
player.sendMessage("You have activated the " + eventName + " event!"); player.sendMessage("You have activated the " + eventName + " event!");
GlobalEventManager.get().activate(eventName, null);
break; break;
case "eventdeactivate": case "eventdeactivate":
@ -200,8 +199,11 @@ public final class DeveloperCommandPlugin extends CommandPlugin {
case "finishevent": case "finishevent":
eventNameArr = Arrays.copyOfRange(args, 1, args.length); eventNameArr = Arrays.copyOfRange(args, 1, args.length);
eventName = String.join(" ", eventNameArr); eventName = String.join(" ", eventNameArr);
event = GlobalEventManager.getEvent(eventName);
if (event == null)
break;
GlobalEventManager.get().deactivate(event);
player.sendMessage("You have deactivated the " + eventName + " event!"); player.sendMessage("You have deactivated the " + eventName + " event!");
GlobalEventManager.get().activate(eventName, null);
break; break;
case "poison": case "poison":
@ -211,11 +213,8 @@ public final class DeveloperCommandPlugin extends CommandPlugin {
break; break;
case "activatecf": case "activatecf":
String target = ""; GlobalEventManager.get().activate(GlobalEvent.CLONE_FEST);
for (int i = 1; i < args.length; i++) if (GlobalEvent.CLONE_FEST.isActive()) {
target += args[i] + ((i == args.length - 1) ? "" : " ");
GlobalEventManager.get().activate("Clone Fest", null);
if (GlobalEventManager.get().isActive("Clone Fest")) {
int size = 20; int size = 20;
if (PVPAIPActions.pvp_players == null) { if (PVPAIPActions.pvp_players == null) {
player.setAttribute("aip_legion", PVPAIPActions.pvp_players = new ArrayList<>()); 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.getAudioManager().send(SOUND);
player.getInventory().remove(lamp); player.getInventory().remove(lamp);
player.getInterfaceManager().close(); player.getInterfaceManager().close();
int x = player.getSkills().getStaticLevel(skillType.skill); int skillLevel = player.getSkills().getStaticLevel(skillType.skill);
int modifier = 10; int modifier = 10;
double experience = x * modifier; double experience = skillLevel * modifier;
if (type != null && type != Lamps.GENIE_LAMP) { 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." }); 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; experience = type.getExp() / Skills.EXPERIENCE_MULTIPLIER;
@ -99,7 +99,29 @@ public final class ExperienceLampInterface extends ComponentPlugin {
* @author 'Vexia * @author 'Vexia
*/ */
public enum SkillInterface { 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}. * Constructs a new {@code ExperienceLampInterface} {@code Object}.