/*
* This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the
* Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that
* it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If
* not, see <http://www.gnu.org/licenses/>.
*/
package silentium.scripts.handlers.admin;
import javolution.text.TextBuilder;
import javolution.util.FastList;
import silentium.gameserver.configs.ClansConfig;
import silentium.gameserver.handler.IAdminCommandHandler;
import silentium.gameserver.instancemanager.CastleManager;
import silentium.gameserver.instancemanager.CastleManorManager;
import silentium.gameserver.instancemanager.CastleManorManager.CropProcure;
import silentium.gameserver.instancemanager.CastleManorManager.SeedProduction;
import silentium.gameserver.model.actor.instance.L2PcInstance;
import silentium.gameserver.model.entity.Castle;
import silentium.gameserver.network.clientpackets.Say2;
import silentium.gameserver.network.serverpackets.NpcHtmlMessage;
import java.util.StringTokenizer;
/**
* Admin comand handler for Manor System This class handles following admin commands: - manor_info = shows info about current manor state -
* manor_approve = approves settings for the next manor period - manor_setnext = changes manor settings to the next day's - manor_reset castle =
* resets all manor data for specified castle (or all) - manor_setmaintenance = sets manor system under maintenance mode - manor_save = saves all
* manor data into database - manor_disable = disables manor system
*
* @author l3x
*/
public class AdminManor implements IAdminCommandHandler {
private static final String[] _adminCommands = { "admin_manor", "admin_manor_approve", "admin_manor_setnext", "admin_manor_reset", "admin_manor_setmaintenance", "admin_manor_save", "admin_manor_disable" };
@Override
public boolean useAdminCommand(String command, final L2PcInstance activeChar) {
final StringTokenizer st = new StringTokenizer(command);
command = st.nextToken();
switch (command) {
case "admin_manor":
showMainPage(activeChar);
break;
case "admin_manor_setnext":
CastleManorManager.getInstance().setNextPeriod();
CastleManorManager.getInstance().setNewManorRefresh();
CastleManorManager.getInstance().updateManorRefresh();
activeChar.sendChatMessage(0, Say2.ALL, "SYS", "Manor System: set to next period");
showMainPage(activeChar);
break;
case "admin_manor_approve":
CastleManorManager.getInstance().approveNextPeriod();
CastleManorManager.getInstance().setNewPeriodApprove();
CastleManorManager.getInstance().updatePeriodApprove();
activeChar.sendChatMessage(0, Say2.ALL, "SYS", "Manor System: next period approved");
showMainPage(activeChar);
break;
case "admin_manor_reset":
int castleId = 0;
try {
castleId = Integer.parseInt(st.nextToken());
} catch (Exception e) {
}
if (castleId > 0) {
final Castle castle = CastleManager.getInstance().getCastleById(castleId);
castle.setCropProcure(new FastList<CropProcure>(), CastleManorManager.PERIOD_CURRENT);
castle.setCropProcure(new FastList<CropProcure>(), CastleManorManager.PERIOD_NEXT);
castle.setSeedProduction(new FastList<SeedProduction>(), CastleManorManager.PERIOD_CURRENT);
castle.setSeedProduction(new FastList<SeedProduction>(), CastleManorManager.PERIOD_NEXT);
if (ClansConfig.ALT_MANOR_SAVE_ALL_ACTIONS) {
castle.saveCropData();
castle.saveSeedData();
}
activeChar.sendChatMessage(0, Say2.ALL, "SYS", "Manor data for " + castle.getName() + " was nulled");
} else {
for (final Castle castle : CastleManager.getInstance().getCastles()) {
castle.setCropProcure(new FastList<CropProcure>(), CastleManorManager.PERIOD_CURRENT);
castle.setCropProcure(new FastList<CropProcure>(), CastleManorManager.PERIOD_NEXT);
castle.setSeedProduction(new FastList<SeedProduction>(), CastleManorManager.PERIOD_CURRENT);
castle.setSeedProduction(new FastList<SeedProduction>(), CastleManorManager.PERIOD_NEXT);
if (ClansConfig.ALT_MANOR_SAVE_ALL_ACTIONS) {
castle.saveCropData();
castle.saveSeedData();
}
}
activeChar.sendChatMessage(0, Say2.ALL, "SYS", "Manor data was nulled");
}
showMainPage(activeChar);
break;
case "admin_manor_setmaintenance": {
final boolean mode = CastleManorManager.getInstance().isUnderMaintenance();
CastleManorManager.getInstance().setUnderMaintenance(!mode);
if (mode)
activeChar.sendChatMessage(0, Say2.ALL, "SYS", "Manor System: not under maintenance");
else
activeChar.sendChatMessage(0, Say2.ALL, "SYS", "Manor System: under maintenance");
showMainPage(activeChar);
break;
}
case "admin_manor_save":
CastleManorManager.getInstance().save();
activeChar.sendChatMessage(0, Say2.ALL, "SYS", "Manor System: all data saved");
showMainPage(activeChar);
break;
case "admin_manor_disable":
final boolean mode = CastleManorManager.getInstance().isDisabled();
CastleManorManager.getInstance().setDisabled(!mode);
if (mode)
activeChar.sendChatMessage(0, Say2.ALL, "SYS", "Manor System: enabled");
else
activeChar.sendChatMessage(0, Say2.ALL, "SYS", "Manor System: disabled");
showMainPage(activeChar);
break;
}
return true;
}
@Override
public String[] getAdminCommandList() {
return _adminCommands;
}
private static String formatTime(final long millis) {
String s = "";
int secs = (int) millis / 1000;
int mins = secs / 60;
secs -= mins * 60;
final int hours = mins / 60;
mins -= hours * 60;
if (hours > 0)
s += hours + ":";
s += mins + ":";
s += secs;
return s;
}
private static void showMainPage(final L2PcInstance activeChar) {
final NpcHtmlMessage adminReply = new NpcHtmlMessage(5);
final TextBuilder replyMSG = new TextBuilder("<html><body>");
replyMSG.append("<center><font color=\"LEVEL\"> [Manor System] </font></center><br>");
replyMSG.append("<table width=\"100%\"><tr><td>");
replyMSG.append("Disabled: ").append(CastleManorManager.getInstance().isDisabled() ? "yes" : "no").append("</td><td>");
replyMSG.append("Under Maintenance: ").append(CastleManorManager.getInstance().isUnderMaintenance() ? "yes" : "no").append("</td></tr><tr><td>");
replyMSG.append("Time to refresh: ").append(formatTime(CastleManorManager.getInstance().getMillisToManorRefresh())).append("</td><td>");
replyMSG.append("Time to approve: ").append(formatTime(CastleManorManager.getInstance().getMillisToNextPeriodApprove())).append("</td></tr>");
replyMSG.append("</table>");
replyMSG.append("<center><table><tr><td>");
replyMSG.append("<button value=\"Set Next\" action=\"bypass -h admin_manor_setnext\" width=110 height=15 back=\"sek.cbui94\" fore=\"sek.cbui92\"></td><td>");
replyMSG.append("<button value=\"Approve Next\" action=\"bypass -h admin_manor_approve\" width=110 height=15 back=\"sek.cbui94\" fore=\"sek.cbui92\"></td></tr><tr><td>");
replyMSG.append("<button value=\"").append(CastleManorManager.getInstance().isUnderMaintenance() ? "Set normal" : "Set mainteance").append("\" action=\"bypass -h admin_manor_setmaintenance\" width=110 height=15 back=\"sek.cbui94\" fore=\"sek.cbui92\"></td><td>");
replyMSG.append("<button value=\"").append(CastleManorManager.getInstance().isDisabled() ? "Enable" : "Disable").append("\" action=\"bypass -h admin_manor_disable\" width=110 height=15 back=\"sek.cbui94\" fore=\"sek.cbui92\"></td></tr><tr><td>");
replyMSG.append("<button value=\"Refresh\" action=\"bypass -h admin_manor\" width=110 height=15 back=\"sek.cbui94\" fore=\"sek.cbui92\"></td><td>");
replyMSG.append("<button value=\"Back\" action=\"bypass -h admin_admin\" width=110 height=15 back=\"sek.cbui94\" fore=\"sek.cbui92\"></td></tr>");
replyMSG.append("</table></center>");
replyMSG.append("<br><center>Castle Information:<table width=\"100%\">");
replyMSG.append("<tr><td></td><td>Current Period</td><td>Next Period</td></tr>");
for (final Castle c : CastleManager.getInstance().getCastles()) {
replyMSG.append("<tr><td>").append(c.getName()).append("</td>").append("<td>").append(c.getManorCost(CastleManorManager.PERIOD_CURRENT)).append("a</td>").append("<td>").append(c.getManorCost(CastleManorManager.PERIOD_NEXT)).append("a</td>").append("</tr>");
}
replyMSG.append("</table><br>");
replyMSG.append("</body></html>");
adminReply.setHtml(replyMSG.toString());
activeChar.sendPacket(adminReply);
}
}