GraciaSeedsManager.java 5.7 KB

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