123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191 |
- /*
- * 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.l2jserver.gameserver.instancemanager;
- import java.util.Calendar;
- import java.util.logging.Logger;
- import com.l2jserver.Config;
- import com.l2jserver.gameserver.ThreadPoolManager;
- import com.l2jserver.gameserver.model.quest.Quest;
- public class GraciaSeedsManager
- {
- protected static final Logger _log = Logger.getLogger(GraciaSeedsManager.class.getName());
- public static String qn = "EnergySeeds";
-
- private static final byte SOITYPE = 2;
- private static final byte SOATYPE = 3;
-
- // Seed of Destruction
- private static final byte SODTYPE = 1;
- private int _SoDTiatKilled = 0;
- private int _SoDState = 1;
- private Calendar _SoDLastStateChangeDate;
- protected GraciaSeedsManager()
- {
- _SoDLastStateChangeDate = Calendar.getInstance();
- loadData();
- handleSodStages();
- }
- public void saveData(byte seedType)
- {
- switch(seedType)
- {
- case SODTYPE:
- // Seed of Destruction
- GlobalVariablesManager.getInstance().storeVariable("SoDState", String.valueOf(_SoDState));
- GlobalVariablesManager.getInstance().storeVariable("SoDTiatKilled", String.valueOf(_SoDTiatKilled));
- GlobalVariablesManager.getInstance().storeVariable("SoDLSCDate", String.valueOf(_SoDLastStateChangeDate.getTimeInMillis()));
- break;
- case SOITYPE:
- // Seed of Infinity
- break;
- case SOATYPE:
- // Seed of Annihilation
- break;
- default:
- _log.warning("GraciaSeedManager: Unknown SeedType in SaveData: " + seedType);
- break;
- }
- }
-
- public void loadData()
- {
- // Seed of Destruction variables
- if (GlobalVariablesManager.getInstance().isVariableStored("SoDState"))
- {
- _SoDState = Integer.parseInt(GlobalVariablesManager.getInstance().getStoredVariable("SoDState"));
- _SoDTiatKilled = Integer.parseInt(GlobalVariablesManager.getInstance().getStoredVariable("SoDTiatKilled"));
- _SoDLastStateChangeDate.setTimeInMillis(Long.parseLong(GlobalVariablesManager.getInstance().getStoredVariable("SoDLSCDate")));
- }
- else
- {
- // save Initial values
- saveData(SODTYPE);
- }
- }
- private void handleSodStages()
- {
- switch(_SoDState)
- {
- case 1:
- // do nothing, players should kill Tiat a few times
- break;
- case 2:
- // Conquest Complete state, if too much time is passed than change to defense state
- long timePast = System.currentTimeMillis() - _SoDLastStateChangeDate.getTimeInMillis();
- if (timePast >= Config.SOD_STAGE_2_LENGTH)
- // change to Attack state because Defend statet is not implemented
- setSoDState(1, true);
- else
- ThreadPoolManager.getInstance().scheduleEffect(new Runnable(){
- @Override
- public void run()
- {
- setSoDState(1, true);
- Quest esQuest = QuestManager.getInstance().getQuest(qn);
- if (esQuest == null)
- _log.warning("GraciaSeedManager: missing EnergySeeds Quest!");
- else
- esQuest.notifyEvent("StopSoDAi", null, null);
- }}, Config.SOD_STAGE_2_LENGTH - timePast);
- break;
- case 3:
- // not implemented
- setSoDState(1, true);
- break;
- default:
- _log.warning("GraciaSeedManager: Unknown Seed of Destruction state(" + _SoDState + ")! ");
- }
- }
- public void increaseSoDTiatKilled()
- {
- if (_SoDState == 1)
- {
- _SoDTiatKilled++;
- if (_SoDTiatKilled >= Config.SOD_TIAT_KILL_COUNT)
- setSoDState(2, false);
- saveData(SODTYPE);
- Quest esQuest = QuestManager.getInstance().getQuest(qn);
- if (esQuest == null)
- _log.warning("GraciaSeedManager: missing EnergySeeds Quest!");
- else
- esQuest.notifyEvent("StartSoDAi", null, null);
- }
- }
-
- public int getSoDTiatKilled()
- {
- return _SoDTiatKilled;
- }
-
- public void setSoDState(int value, boolean doSave)
- {
- _log.info("GraciaSeedManager: New Seed of Destruction state -> " + value + ".");
- _SoDLastStateChangeDate.setTimeInMillis(System.currentTimeMillis());
- _SoDState = value;
- // reset number of Tiat kills
- if (_SoDState == 1)
- _SoDTiatKilled = 0;
-
- handleSodStages();
-
- if (doSave)
- saveData(SODTYPE);
- }
-
- public long getSoDTimeForNextStateChange()
- {
- switch(_SoDState)
- {
- case 1:
- return -1;
- case 2:
- return (_SoDLastStateChangeDate.getTimeInMillis() + Config.SOD_STAGE_2_LENGTH - System.currentTimeMillis());
- case 3:
- // not implemented yet
- return -1;
- default:
- // this should not happen!
- return -1;
- }
- }
-
- public Calendar getSoDLastStateChangeDate()
- {
- return _SoDLastStateChangeDate;
- }
-
- public int getSoDState()
- {
- return _SoDState;
- }
-
- public static final GraciaSeedsManager getInstance()
- {
- return SingletonHolder._instance;
- }
- private static class SingletonHolder
- {
- protected static final GraciaSeedsManager _instance = new GraciaSeedsManager();
- }
- }
|