123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217 |
- /*
- * Copyright (C) 2004-2015 L2J Server
- *
- * This file is part of L2J Server.
- *
- * L2J Server 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.
- *
- * L2J Server 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.instancemanager.tasks.UpdateSoDStateTask;
- import com.l2jserver.gameserver.model.quest.Quest;
- public final class GraciaSeedsManager
- {
- private static final Logger _log = Logger.getLogger(GraciaSeedsManager.class.getName());
-
- public static String ENERGY_SEEDS = "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 final Calendar _SoDLastStateChangeDate;
-
- protected GraciaSeedsManager()
- {
- _SoDLastStateChangeDate = Calendar.getInstance();
- loadData();
- handleSodStages();
- }
-
- public void saveData(byte seedType)
- {
- switch (seedType)
- {
- case SODTYPE:
- // Seed of Destruction
- GlobalVariablesManager.getInstance().set("SoDState", _SoDState);
- GlobalVariablesManager.getInstance().set("SoDTiatKilled", _SoDTiatKilled);
- GlobalVariablesManager.getInstance().set("SoDLSCDate", _SoDLastStateChangeDate.getTimeInMillis());
- break;
- case SOITYPE:
- // Seed of Infinity
- break;
- case SOATYPE:
- // Seed of Annihilation
- break;
- default:
- _log.warning(getClass().getSimpleName() + ": Unknown SeedType in SaveData: " + seedType);
- break;
- }
- }
-
- public void loadData()
- {
- // Seed of Destruction variables
- if (GlobalVariablesManager.getInstance().hasVariable("SoDState"))
- {
- _SoDState = GlobalVariablesManager.getInstance().getInt("SoDState");
- _SoDTiatKilled = GlobalVariablesManager.getInstance().getInt("SoDTiatKilled");
- _SoDLastStateChangeDate.setTimeInMillis(GlobalVariablesManager.getInstance().getLong("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 UpdateSoDStateTask(), Config.SOD_STAGE_2_LENGTH - timePast);
- }
- break;
- case 3:
- // not implemented
- setSoDState(1, true);
- break;
- default:
- _log.warning(getClass().getSimpleName() + ": Unknown Seed of Destruction state(" + _SoDState + ")! ");
- }
- }
-
- public void updateSodState()
- {
- final Quest quest = QuestManager.getInstance().getQuest(ENERGY_SEEDS);
- if (quest == null)
- {
- _log.warning(getClass().getSimpleName() + ": missing EnergySeeds Quest!");
- }
- else
- {
- quest.notifyEvent("StopSoDAi", null, null);
- }
- }
-
- public void increaseSoDTiatKilled()
- {
- if (_SoDState == 1)
- {
- _SoDTiatKilled++;
- if (_SoDTiatKilled >= Config.SOD_TIAT_KILL_COUNT)
- {
- setSoDState(2, false);
- }
- saveData(SODTYPE);
- Quest esQuest = QuestManager.getInstance().getQuest(ENERGY_SEEDS);
- if (esQuest == null)
- {
- _log.warning(getClass().getSimpleName() + ": missing EnergySeeds Quest!");
- }
- else
- {
- esQuest.notifyEvent("StartSoDAi", null, null);
- }
- }
- }
-
- public int getSoDTiatKilled()
- {
- return _SoDTiatKilled;
- }
-
- public void setSoDState(int value, boolean doSave)
- {
- _log.info(getClass().getSimpleName() + ": 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;
- }
-
- /**
- * Gets the single instance of {@code GraciaSeedsManager}.
- * @return single instance of {@code GraciaSeedsManager}
- */
- public static final GraciaSeedsManager getInstance()
- {
- return SingletonHolder._instance;
- }
-
- private static class SingletonHolder
- {
- protected static final GraciaSeedsManager _instance = new GraciaSeedsManager();
- }
- }
|