OK now some changes made by myself for l2jfrozen pack. first for announces in Shutdown.java add this code on place:
_seconds = _secondsShut;
_minutes = _seconds / 60;
_hours = _seconds / 3600;
// 30 min, 20 min, 10 min, 5 min, 2 min, 1 min announces
+ if (_seconds == 1800 || _seconds == 1200 || _seconds == 600 || _seconds == 300 || _seconds == 120 || _seconds == 60)
+ {
+ _an.announceToAll("Server is " + MODE_TEXT[_shutdownMode] + " after " + _minutes + " minute(s)!");
+ }
// announce only every minute after 10 minutes left and every second after 20 seconds
After that modified code to save before autorestarting:
public void autoRestart(int time)
{
_secondsShut = time;
_instance._shutdownMode = GM_RESTART;
countdown();
LOGGER.warn("Auto Restart countdown is over. " + MODE_TEXT[_shutdownMode] + " NOW!");
saveData();
Runtime.getRuntime().halt(2);
}
Now will show restarting, not SIGTERM. After that - modified Restart.java
/*
* 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 com.l2jfrozen.gameserver;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.InetAddress;
import java.net.UnknownHostException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.logging.LogManager;
import org.apache.log4j.Logger;
import org.apache.log4j.PropertyConfigurator;
import com.l2jfrozen.Config;
import com.l2jfrozen.gameserver.thread.ThreadPoolManager;
/*
import java.util.Calendar;
import java.util.logging.Logger;
*/
/**
* This Config for Auto Restart GameServer
* Initialize class getInstance()
* Set Time in Config File
* Thank You L2JServer | L2JRussia
*
* @author L2JRussia
*
*/
public class Restart
{
//Variaveis globais
private static Restart _instance = null;
protected static final Logger _log = Logger.getLogger(Restart.class.getName());
private Calendar NextRestart;
private SimpleDateFormat format = new SimpleDateFormat("HH:mm");
//Singleton
public static Restart getInstance()
{
if(_instance == null)
_instance = new Restart();
return _instance;
}
public String getRestartNextTime()
{
if(NextRestart.getTime() != null)
return format.format(NextRestart.getTime());
else
return "Erro";
}
//Connstrutor
private Restart()
{
//:D
}
public void StartCalculationOfNextRestartTime()
{
_log.info("########################################");
_log.info("#[Restart System]: System activated... #");
_log.info("########################################");
try
{
Calendar currentTime = Calendar.getInstance();
Calendar testStartTime = null;
long flush2 = 0,timeL = 0;
int count = 0;
for (String timeOfDay : Config.RESTART_INTERVAL_BY_TIME_OF_DAY)
{
testStartTime = Calendar.getInstance();
testStartTime.setLenient(true);
String[] splitTimeOfDay = timeOfDay.split(":");
testStartTime.set(Calendar.HOUR_OF_DAY, Integer.parseInt(splitTimeOfDay[0]));
testStartTime.set(Calendar.MINUTE, Integer.parseInt(splitTimeOfDay[1]));
testStartTime.set(Calendar.SECOND, 00);
//Verifica a validade to tempo
if (testStartTime.getTimeInMillis() < currentTime.getTimeInMillis())
{
testStartTime.add(Calendar.DAY_OF_MONTH, 1);
}
//TimeL Recebe o quanto falta de milisegundos para o restart
timeL = testStartTime.getTimeInMillis() - currentTime.getTimeInMillis();
//Verifica qual horario sera o proximo restart
if(count == 0){
flush2 = timeL;
NextRestart = testStartTime;
}
if(timeL < flush2){
flush2 = timeL;
NextRestart = testStartTime;
}
count ++;
}
_log.info("[AutoRestart]: Next Restart Time: " + NextRestart.getTime().toString());
ThreadPoolManager.getInstance().scheduleGeneral(new StartRestartTask(), flush2);
}
catch (Exception e)
{
System.out.println("[AutoRestart]: The restart automated server presented error in load restarts period config !");
}
}
class StartRestartTask implements Runnable
{
public void run()
{
_log.info("Start automated restart GameServer.");
Shutdown.getInstance().autoRestart(Config.RESTART_SECONDS);
}
}
}
After that modified GameServer.java code:
Util.printSection("Restart Manager");
if(Config.RESTART_BY_TIME_OF_DAY)
Restart.getInstance().StartCalculationOfNextRestartTime();
else
LOGGER.info("# Auto Restart System is Disabled #");
System.gc();
Aaand at last to work config code must be put into l2jfrozen.properties config file in config/functions folder. All other codes are working perfectly. This is just small fix and Iam writing these codes with little changes.