GraciaSeedsManager.java 5.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191
  1. /*
  2. * This program is free software: you can redistribute it and/or modify it under
  3. * the terms of the GNU General Public License as published by the Free Software
  4. * Foundation, either version 3 of the License, or (at your option) any later
  5. * version.
  6. *
  7. * This program is distributed in the hope that it will be useful, but WITHOUT
  8. * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
  9. * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
  10. * details.
  11. *
  12. * You should have received a copy of the GNU General Public License along with
  13. * this program. If not, see <http://www.gnu.org/licenses/>.
  14. */
  15. package com.l2jserver.gameserver.instancemanager;
  16. import java.util.Calendar;
  17. import java.util.logging.Logger;
  18. import com.l2jserver.Config;
  19. import com.l2jserver.gameserver.ThreadPoolManager;
  20. import com.l2jserver.gameserver.model.quest.Quest;
  21. public class GraciaSeedsManager
  22. {
  23. protected static final Logger _log = Logger.getLogger(GraciaSeedsManager.class.getName());
  24. public static String qn = "EnergySeeds";
  25. private static final byte SOITYPE = 2;
  26. private static final byte SOATYPE = 3;
  27. // Seed of Destruction
  28. private static final byte SODTYPE = 1;
  29. private int _SoDTiatKilled = 0;
  30. private int _SoDState = 1;
  31. private Calendar _SoDLastStateChangeDate;
  32. protected GraciaSeedsManager()
  33. {
  34. _SoDLastStateChangeDate = Calendar.getInstance();
  35. loadData();
  36. handleSodStages();
  37. }
  38. public void saveData(byte seedType)
  39. {
  40. switch(seedType)
  41. {
  42. case SODTYPE:
  43. // Seed of Destruction
  44. GlobalVariablesManager.getInstance().storeVariable("SoDState", String.valueOf(_SoDState));
  45. GlobalVariablesManager.getInstance().storeVariable("SoDTiatKilled", String.valueOf(_SoDTiatKilled));
  46. GlobalVariablesManager.getInstance().storeVariable("SoDLSCDate", String.valueOf(_SoDLastStateChangeDate.getTimeInMillis()));
  47. break;
  48. case SOITYPE:
  49. // Seed of Infinity
  50. break;
  51. case SOATYPE:
  52. // Seed of Annihilation
  53. break;
  54. default:
  55. _log.warning("GraciaSeedManager: Unknown SeedType in SaveData: " + seedType);
  56. break;
  57. }
  58. }
  59. public void loadData()
  60. {
  61. // Seed of Destruction variables
  62. if (GlobalVariablesManager.getInstance().isVariableStored("SoDState"))
  63. {
  64. _SoDState = Integer.parseInt(GlobalVariablesManager.getInstance().getStoredVariable("SoDState"));
  65. _SoDTiatKilled = Integer.parseInt(GlobalVariablesManager.getInstance().getStoredVariable("SoDTiatKilled"));
  66. _SoDLastStateChangeDate.setTimeInMillis(Long.parseLong(GlobalVariablesManager.getInstance().getStoredVariable("SoDLSCDate")));
  67. }
  68. else
  69. {
  70. // save Initial values
  71. saveData(SODTYPE);
  72. }
  73. }
  74. private void handleSodStages()
  75. {
  76. switch(_SoDState)
  77. {
  78. case 1:
  79. // do nothing, players should kill Tiat a few times
  80. break;
  81. case 2:
  82. // Conquest Complete state, if too much time is passed than change to defense state
  83. long timePast = System.currentTimeMillis() - _SoDLastStateChangeDate.getTimeInMillis();
  84. if (timePast >= Config.SOD_STAGE_2_LENGTH)
  85. // change to Attack state because Defend statet is not implemented
  86. setSoDState(1, true);
  87. else
  88. ThreadPoolManager.getInstance().scheduleEffect(new Runnable(){
  89. @Override
  90. public void run()
  91. {
  92. setSoDState(1, true);
  93. Quest esQuest = QuestManager.getInstance().getQuest(qn);
  94. if (esQuest == null)
  95. _log.warning("GraciaSeedManager: missing EnergySeeds Quest!");
  96. else
  97. esQuest.notifyEvent("StopSoDAi", null, null);
  98. }}, Config.SOD_STAGE_2_LENGTH - timePast);
  99. break;
  100. case 3:
  101. // not implemented
  102. setSoDState(1, true);
  103. break;
  104. default:
  105. _log.warning("GraciaSeedManager: Unknown Seed of Destruction state(" + _SoDState + ")! ");
  106. }
  107. }
  108. public void increaseSoDTiatKilled()
  109. {
  110. if (_SoDState == 1)
  111. {
  112. _SoDTiatKilled++;
  113. if (_SoDTiatKilled >= Config.SOD_TIAT_KILL_COUNT)
  114. setSoDState(2, false);
  115. saveData(SODTYPE);
  116. Quest esQuest = QuestManager.getInstance().getQuest(qn);
  117. if (esQuest == null)
  118. _log.warning("GraciaSeedManager: missing EnergySeeds Quest!");
  119. else
  120. esQuest.notifyEvent("StartSoDAi", null, null);
  121. }
  122. }
  123. public int getSoDTiatKilled()
  124. {
  125. return _SoDTiatKilled;
  126. }
  127. public void setSoDState(int value, boolean doSave)
  128. {
  129. _log.info("GraciaSeedManager: New Seed of Destruction state -> " + value + ".");
  130. _SoDLastStateChangeDate.setTimeInMillis(System.currentTimeMillis());
  131. _SoDState = value;
  132. // reset number of Tiat kills
  133. if (_SoDState == 1)
  134. _SoDTiatKilled = 0;
  135. handleSodStages();
  136. if (doSave)
  137. saveData(SODTYPE);
  138. }
  139. public long getSoDTimeForNextStateChange()
  140. {
  141. switch(_SoDState)
  142. {
  143. case 1:
  144. return -1;
  145. case 2:
  146. return (_SoDLastStateChangeDate.getTimeInMillis() + Config.SOD_STAGE_2_LENGTH - System.currentTimeMillis());
  147. case 3:
  148. // not implemented yet
  149. return -1;
  150. default:
  151. // this should not happen!
  152. return -1;
  153. }
  154. }
  155. public Calendar getSoDLastStateChangeDate()
  156. {
  157. return _SoDLastStateChangeDate;
  158. }
  159. public int getSoDState()
  160. {
  161. return _SoDState;
  162. }
  163. public static final GraciaSeedsManager getInstance()
  164. {
  165. return SingletonHolder._instance;
  166. }
  167. private static class SingletonHolder
  168. {
  169. protected static final GraciaSeedsManager _instance = new GraciaSeedsManager();
  170. }
  171. }