Browse Source

Refactor WOO change timer mechanics to use the same system as the mine claims. Moved both resets to the hourly job.

master
MagicBot 2 years ago
parent
commit
6a1b461735
  1. 7
      src/engine/db/handlers/dbGuildHandler.java
  2. 18
      src/engine/net/client/handlers/MineWindowChangeHandler.java
  3. 2294
      src/engine/objects/Guild.java
  4. 2
      src/engine/server/MBServerStatics.java
  5. 190
      src/engine/workthreads/HourlyJobThread.java

7
src/engine/db/handlers/dbGuildHandler.java

@ -115,13 +115,6 @@ public class dbGuildHandler extends dbHandlerBase {
return outputStr; return outputStr;
} }
public boolean SET_LAST_WOO_UPDATE(Guild guild, LocalDateTime lastEditTime) {
prepareCallable("UPDATE `obj_guild` SET `lastWooEditTime`=? WHERE `UID`=?");
setLocalDateTime(1, lastEditTime);
setLong(2, (long) guild.getObjectUUID());
return (executeUpdate() > 0);
}
public ArrayList<Guild> GET_GUILD_ALLIES(final int id) { public ArrayList<Guild> GET_GUILD_ALLIES(final int id) {
prepareCallable("SELECT g.* FROM `obj_guild` g, `dyn_guild_allianceenemylist` l " prepareCallable("SELECT g.* FROM `obj_guild` g, `dyn_guild_allianceenemylist` l "
+ "WHERE l.isAlliance = 1 && l.OtherGuildID = g.UID && l.GuildID=?"); + "WHERE l.isAlliance = 1 && l.OtherGuildID = g.UID && l.GuildID=?");

18
src/engine/net/client/handlers/MineWindowChangeHandler.java

@ -81,10 +81,10 @@ public class MineWindowChangeHandler extends AbstractClientMsgHandler {
if (newMineTime == 24) if (newMineTime == 24)
newMineTime = 0; newMineTime = 0;
// Enforce 15hr restriction between WOO edits // Enforce time restriction between WOO edits
if (LocalDateTime.now().isBefore(mineGuild.lastWooEditTime.plusHours(14))) { if (mineGuild.wooWasModified) {
ErrorPopupMsg.sendErrorMsg(playerCharacter, "You must wait 15 hours between WOO changes."); ErrorPopupMsg.sendErrorMsg(playerCharacter, "You can only modify your WOO once per day.");
return true; return true;
} }
@ -110,19 +110,11 @@ public class MineWindowChangeHandler extends AbstractClientMsgHandler {
} }
mineGuild.setMineTime(newMineTime); mineGuild.setMineTime(newMineTime);
mineGuild.lastWooEditTime = LocalDateTime.now(); mineGuild.wooWasModified = true;
// Update guild WOO timer for reboot persistence
if (!DbManager.GuildQueries.SET_LAST_WOO_UPDATE(mineGuild, mineGuild.lastWooEditTime)) {
Logger.error("MineWindowChange", "Failed to update woo timer for guild " + mineGuild.getObjectUUID());
ChatManager.chatGuildError(playerCharacter, "A Serious error has for to occurred.");
return true;
}
ChatManager.chatGuildInfo(playerCharacter, "Mine time updated."); ChatManager.chatGuildInfo(playerCharacter, "Mine time updated.");
return true; return true;
} }
} }

2294
src/engine/objects/Guild.java

File diff suppressed because it is too large Load Diff

2
src/engine/server/MBServerStatics.java

@ -793,7 +793,7 @@ public class MBServerStatics {
public static final int MAX_PLAYER_LOAD_SIZE = 1000; public static final int MAX_PLAYER_LOAD_SIZE = 1000;
// Mine related // Mine related
public static final int MINE_EARLY_WINDOW = 16; // 3pm public static final int MINE_EARLY_WINDOW = 16; // 4pm
public static final int MINE_LATE_WINDOW = 0; // Midnight public static final int MINE_LATE_WINDOW = 0; // Midnight
// Race // Race

190
src/engine/workthreads/HourlyJobThread.java

@ -22,127 +22,147 @@ import java.time.LocalDateTime;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ConcurrentHashMap;
import static engine.server.MBServerStatics.MINE_LATE_WINDOW;
public class HourlyJobThread implements Runnable { public class HourlyJobThread implements Runnable {
private static int hotzoneCount = 0; private static final int hotzoneCount = 0;
public HourlyJobThread() {
}
public void run() {
// *** REFACTOR: TRY TRY TRY TRY {{{{{{{{{{{ OMG
Logger.info("Hourly job is now running.");
try {
public HourlyJobThread() { ZoneManager.generateAndSetRandomHotzone();
Zone hotzone = ZoneManager.getHotZone();
} if (hotzone == null) {
Logger.error("Null hotzone returned from mapmanager");
} else {
Logger.info("new hotzone: " + hotzone.getName());
WorldServer.setLastHZChange(System.currentTimeMillis());
}
public void run() { } catch (Exception e) {
Logger.error(e.toString());
}
// *** REFACTOR: TRY TRY TRY TRY {{{{{{{{{{{ OMG // Open or Close mines for the current mine window.
Logger.info("Hourly job is now running."); processMineWindow();
try { // Deposit mine resources to Guilds
ZoneManager.generateAndSetRandomHotzone(); for (Mine mine : Mine.getMines()) {
Zone hotzone = ZoneManager.getHotZone();
if (hotzone == null) { try {
Logger.error( "Null hotzone returned from mapmanager"); mine.depositMineResources();
} else { } catch (Exception e) {
Logger.info( "new hotzone: " + hotzone.getName()); Logger.info(e.getMessage() + " for Mine " + mine.getObjectUUID());
WorldServer.setLastHZChange(System.currentTimeMillis()); }
} }
} catch (Exception e) { // Reset time-gated access to WOO slider.
Logger.error( e.toString()); // *** Do this after the mines open/close!
}
// Open or Close mines for the current mine window. if (LocalDateTime.now().getHour() == MINE_LATE_WINDOW) {
Guild guild;
processMineWindow(); for (AbstractGameObject dbObject : DbManager.getList(Enum.GameObjectType.Guild)) {
guild = (Guild) dbObject;
for (Mine mine : Mine.getMines()) { if (guild != null)
guild.wooWasModified = false;
}
}
try {
mine.depositMineResources();
} catch (Exception e) {
Logger.info(e.getMessage() + " for Mine " + mine.getObjectUUID());
}
}
// Mines can only be claimed once per cycle.
// This will reset at 1am after the last mine
// window closes.
// Update city population values if (LocalDateTime.now().getHour() == MINE_LATE_WINDOW + 1) {
ConcurrentHashMap<Integer, AbstractGameObject> map = DbManager.getMap(Enum.GameObjectType.City); for (Mine mine : Mine.getMines()) {
if (map != null) { if (mine.wasClaimed == true)
mine.wasClaimed = false;
}
}
for (AbstractGameObject ago : map.values()){ // Update city population values
City city = (City)ago; ConcurrentHashMap<Integer, AbstractGameObject> map = DbManager.getMap(Enum.GameObjectType.City);
if (city != null) if (map != null) {
if (city.getGuild() != null) {
ArrayList<PlayerCharacter> guildList = Guild.GuildRoster(city.getGuild());
city.setPopulation(guildList.size());
}
}
City.lastCityUpdate = System.currentTimeMillis();
} else {
Logger.error("missing city map");
}
// Log metrics to console for (AbstractGameObject ago : map.values()) {
Logger.info( WorldServer.getUptimeString());
Logger.info( SimulationManager.getPopulationString());
Logger.info( MessageDispatcher.getNetstatString());
Logger.info(PurgeOprhans.recordsDeleted.toString() + "orphaned items deleted");
}
public static void processMineWindow() { City city = (City) ago;
try { if (city != null)
if (city.getGuild() != null) {
ArrayList<PlayerCharacter> guildList = Guild.GuildRoster(city.getGuild());
city.setPopulation(guildList.size());
}
}
City.lastCityUpdate = System.currentTimeMillis();
} else {
Logger.error("missing city map");
}
ArrayList<Mine> mines = Mine.getMines(); // Log metrics to console
Logger.info(WorldServer.getUptimeString());
Logger.info(SimulationManager.getPopulationString());
Logger.info(MessageDispatcher.getNetstatString());
Logger.info(PurgeOprhans.recordsDeleted.toString() + "orphaned items deleted");
}
for (Mine mine : mines) { public static void processMineWindow() {
try {
// Mines can only be claimed once a cycle. try {
// The cycle resets at 01:00hrs after the
// Last mine window closes.
if (mine.wasClaimed == true) { ArrayList<Mine> mines = Mine.getMines();
if (LocalDateTime.now().getHour() == 01) for (Mine mine : mines) {
mine.wasClaimed = false;
continue; try {
}
// Open Errant Mines // Open Errant Mines
if (mine.getOwningGuild().isErrant()) { if (mine.getOwningGuild().isErrant()) {
mine.handleStartMineWindow(); mine.handleStartMineWindow();
Mine.setLastChange(System.currentTimeMillis()); Mine.setLastChange(System.currentTimeMillis());
continue; continue;
} }
// Open Mines with a current guild hour // Open Mines with a current guild hour
if (mine.getOwningGuild().getNation().getMineTime() == if (mine.getOwningGuild().getNation().getMineTime() ==
LocalDateTime.now().getHour()) { LocalDateTime.now().getHour()) {
mine.handleStartMineWindow(); mine.handleStartMineWindow();
Mine.setLastChange(System.currentTimeMillis()); Mine.setLastChange(System.currentTimeMillis());
continue; continue;
} }
// Close all remaining mines // Close all remaining mines
if (mine.handleEndMineWindow()) if (mine.handleEndMineWindow())
Mine.setLastChange(System.currentTimeMillis()); Mine.setLastChange(System.currentTimeMillis());
} catch (Exception e) { } catch (Exception e) {
Logger.error ("mineID: " + mine.getObjectUUID(), e.toString()); Logger.error("mineID: " + mine.getObjectUUID(), e.toString());
} }
} }
} catch (Exception e) { } catch (Exception e) {
Logger.error( e.toString()); Logger.error(e.toString());
} }
} }
} }

Loading…
Cancel
Save