`Rοmeο Posted January 9, 2010 Share Posted January 9, 2010 Hello, I have decided to make an new voiced command. With this command the players from your server can vote for the server restart. If there are 25 (config) votes the server will restart by him self. And here is the code: Index: D:/Games/Server/WorkSpace/GameServer/java/config/Mods.properties =================================================================== --- D:/Games/Server/WorkSpace/GameServer/java/config/Mods.properties (revision 194) +++ D:/Games/Server/WorkSpace/GameServer/java/config/Mods.properties (working copy) @@ -227,3 +227,12 @@ # Announce Level Settings MinLevelToAnnounce = 1 MaxLevelToAnnounce = 80 + +# ========================== # +# Server Restart Voting # +# ========================== # +# Enable Server Restart Command +AllowServerRestartCommand = False + +# Votes For Restart +VotesNeededForRestart = 20 Index: D:/Games/Server/WorkSpace/GameServer/java/net/sf/l2j/Config.java =================================================================== --- D:/Games/Server/WorkSpace/GameServer/java/net/sf/l2j/Config.java (revision 194) +++ D:/Games/Server/WorkSpace/GameServer/java/net/sf/l2j/Config.java (working copy) @@ -960,6 +960,10 @@ public static int NPC_ANNOUNCER_MIN_LVL_TO_ANNOUNCE; public static int NPC_ANNOUNCER_MAX_LVL_TO_ANNOUNCE; public static boolean NPC_ANNOUNCER_DONATOR_ONLY; + + /** Server Restart */ + public static boolean ALLOW_SERVER_RESTART_COMMAND; + public static int VOTES_NEEDED_FOR_RESTART; /** Event Automation */ public static int TIME_BETWEEN_EVENTS; @@ -2091,6 +2095,9 @@ NPC_ANNOUNCER_MAX_ANNOUNCES_PER_DAY = Integer.parseInt(Mods.getProperty("AnnouncesPerDay", "20")); NPC_ANNOUNCER_MIN_LVL_TO_ANNOUNCE = Integer.parseInt(Mods.getProperty("MinLevelToAnnounce", "0")); NPC_ANNOUNCER_MAX_LVL_TO_ANNOUNCE = Integer.parseInt(Mods.getProperty("MaxLevelToAnnounce", "80")); + + ALLOW_SERVER_RESTART_COMMAND = Boolean.parseBoolean(Mods.getProperty("AllowServerRestartCommand", "False")); + VOTES_NEEDED_FOR_RESTART = Integer.parseInt(Mods.getProperty("VotesNeededForRestart", "20")); } catch (Exception e) { Index: D:/Games/Server/WorkSpace/GameServer/java/net/sf/l2j/gameserver/model/actor/instance/L2PcInstance.java =================================================================== --- D:/Games/Server/WorkSpace/GameServer/java/net/sf/l2j/gameserver/model/actor/instance/L2PcInstance.java (revision 196) +++ D:/Games/Server/WorkSpace/GameServer/java/net/sf/l2j/gameserver/model/actor/instance/L2PcInstance.java (working copy) @@ -617,6 +617,9 @@ public boolean _inEventVIP = false; public boolean _isNotVIP = false, _isTheVIP = false; public int _originalNameColourVIP, _originalKarmaVIP; + + /** Server Restart Vote Parameters */ + public boolean _voteRestart = false; /** new loto ticket **/ private int _loto[] = new int[5]; Index: D:/Games/Server/WorkSpace/GameServer/java/net/sf/l2j/gameserver/GameServer.java =================================================================== --- D:/Games/Server/WorkSpace/GameServer/java/net/sf/l2j/gameserver/GameServer.java (revision 189) +++ D:/Games/Server/WorkSpace/GameServer/java/net/sf/l2j/gameserver/GameServer.java (working copy) @@ -204,6 +204,7 @@ import net.sf.l2j.gameserver.handler.voicedcommandhandlers.JoinVIP; import net.sf.l2j.gameserver.handler.voicedcommandhandlers.OnlinePlayers; import net.sf.l2j.gameserver.handler.voicedcommandhandlers.PmOff; +import net.sf.l2j.gameserver.handler.voicedcommandhandlers.ServerRestartVote; import net.sf.l2j.gameserver.handler.voicedcommandhandlers.TradeOff; import net.sf.l2j.gameserver.handler.voicedcommandhandlers.VoiceInfo; import net.sf.l2j.gameserver.handler.voicedcommandhandlers.Wedding; @@ -620,6 +621,9 @@ _voicedCommandHandler.registerVoicedCommandHandler(new BuyRec()); _voicedCommandHandler.registerVoicedCommandHandler(new JoinVIP()); + + if(Config.ALLOW_SERVER_RESTART_COMMAND) + _voicedCommandHandler.registerVoicedCommandHandler(new ServerRestartVote()); _log.config("VoicedCommandHandler: Loaded " + _voicedCommandHandler.size() + " handlers."); Now create new file named ServerRestartVote.java in net.sf.l2j.gameserver.commandhandler.voicedcommands and place this: /* * 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 net.sf.l2j.gameserver.handler.voicedcommandhandlers; import net.sf.l2j.gameserver.Announcements; import net.sf.l2j.gameserver.handler.IVoicedCommandHandler; import net.sf.l2j.gameserver.model.actor.instance.L2PcInstance; import net.sf.l2j.gameserver.model.entity.RestartVoteVariable; /** * @author SkyLanceR */ public class ServerRestartVote implements IVoicedCommandHandler { private static final String[] VOICED_COMMANDS = {"vote_restart"}; /** * * @see net.sf.l2j.gameserver.handler.IVoicedCommandHandler#useVoicedCommand(java.lang.String, net.sf.l2j.gameserver.model.actor.instance.L2PcInstance, java.lang.String) */ public boolean useVoicedCommand(String command, L2PcInstance activeChar, String target) { RestartVoteVariable e = new RestartVoteVariable(); if(command.startsWith("vote_restart")) { if (activeChar._voteRestart == false) { e.increaseVoteCount("restart"); activeChar._voteRestart = true; activeChar.sendMessage("You succesfully voted for the server restart. Votes For The Moment: " + e.getVoteCount("tvt") + "."); Announcements.getInstance().announceToAll("Player: "+activeChar.getName()+" has voted for server restart. If you whant to support him type .vote_restart !"); } else { activeChar.sendMessage("You have already voted for an server restart."); } } return false; } public String[] getVoicedCommandList() { return VOICED_COMMANDS; } } Create new file named VoteVariable.java in net.sf.l2j.gameserver.model.actor.entity and place this: /* * 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 net.sf.l2j.gameserver.model.entity; /** *@author SkyLanceR */ public class RestartVoteVariable { public int _voteCountRestart = 0; private int _voteCount = 0; public int getVoteCount(String name) { if (name == "restart") { _voteCount = _voteCountRestart; } return _voteCount; } public void increaseVoteCount(String name) { if (name == "restart") { _voteCountRestart = _voteCountRestart+1; } } } Create new file named RestartTheServer.java in net.sf.l2j.gameserver.model.actor.entity and place this: /* * 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 net.sf.l2j.gameserver.model.entity; import net.sf.l2j.Config; import net.sf.l2j.gameserver.Shutdown; import net.sf.l2j.gameserver.model.actor.instance.L2PcInstance; /** * @author SkyLanceR */ public class RestartTheServer { public static void playerRestart(L2PcInstance activeChar, boolean restart) { RestartVoteVariable e = new RestartVoteVariable(); if (e.getVoteCount("restart") > Config.VOTES_NEEDED_FOR_RESTART) { Shutdown.getInstance().startShutdown(activeChar, 60, restart); } } } Tested in L2J Interlude & Working Thats all. Hope its useful and helpful. Credits: Mine Quote Link to comment Share on other sites More sharing options...
B1ggBoss Posted January 9, 2010 Share Posted January 9, 2010 1) You better create a diff 2) You can handle all this engine within one class, avoiding creating new objects (1 objects is not problem, but avoid it its better than create) 3) Ppl cry when L2PcInstance is modified (cause update conflicts). Just make a list where all players who voted get inside. On cmd use, if (list.contains(player)) return false; for everything else, nice idea, really usefull Quote Link to comment Share on other sites More sharing options...
`Rοmeο Posted January 9, 2010 Author Share Posted January 9, 2010 I thing you mean that one player can vote twice ? If that is what you mean please read the code and you will see that player can vote onlie once untill the server restart ! Quote Link to comment Share on other sites More sharing options...
B1ggBoss Posted January 9, 2010 Share Posted January 9, 2010 re-read what i posted or learn engliz Quote Link to comment Share on other sites More sharing options...
Alexi Posted January 9, 2010 Share Posted January 9, 2010 Very usefull it can helps if the is laggy and there is no GM or admin online... +1 Karma by me Quote Link to comment Share on other sites More sharing options...
SySt3MGaM3RFr3aKs Posted January 9, 2010 Share Posted January 9, 2010 Really Coool, i like it. Keep Sharing SkyLancer. +1 Karma. For this Share, because i believe that is totally your work. Very usefull it can helps if the is laggy and there is no GM or admin online... +1 Karma by me pff i gave him too. Quote Link to comment Share on other sites More sharing options...
`Rοmeο Posted January 9, 2010 Author Share Posted January 9, 2010 thanks for the karma system :) Im proud that some one like mine share :P Quote Link to comment Share on other sites More sharing options...
psycho425 Posted January 9, 2010 Share Posted January 9, 2010 omg, awesome.... thanx.. i ll test it on gracia epilogue....and edit back to tell you if it works correctly.... Quote Link to comment Share on other sites More sharing options...
Alexi Posted January 9, 2010 Share Posted January 9, 2010 omg, awesome.... thanx.. i ll test it on gracia epilogue....and edit back to tell you if it works correctly.... Ehm it works on Interlude you must change some imports to make it work properly on gracia Quote Link to comment Share on other sites More sharing options...
rodox Posted January 9, 2010 Share Posted January 9, 2010 Can you make it for gracia epilogue? Quote Link to comment Share on other sites More sharing options...
Neo1993k Posted January 9, 2010 Share Posted January 9, 2010 Very nice and usefull code, Thanks for share!! Quote Link to comment Share on other sites More sharing options...
Belzebul Posted January 9, 2010 Share Posted January 9, 2010 Very usefull it can helps if the is laggy and there is no GM or admin online... +1 Karma by me Really Coool, i like it. Keep Sharing SkyLancer. +1 Karma. For this Share, because i believe that is totally your work. pff i gave him too. Use your rofleyes-.- Someone dekarma him once. Quote Link to comment Share on other sites More sharing options...
takhs7 Posted January 9, 2010 Share Posted January 9, 2010 yeah not a bad idea but.. for example i can open 20 windows and vote every time.. server will be restarting all day if i want to :/ .. i mean its not a good idea for players to have such control over the server.. i would just add auto-restart :/ Quote Link to comment Share on other sites More sharing options...
B1ggBoss Posted January 9, 2010 Share Posted January 9, 2010 use a list which contains the players InetAddres, and will fix the 95% Quote Link to comment Share on other sites More sharing options...
takhs7 Posted January 9, 2010 Share Posted January 9, 2010 use a list which contains the players InetAddres, and will fix the 95% yea thats true.. i guess Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.