Advertisement
Kimeraweb

GameServer //happyHour

Nov 11th, 2012
184
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 17.16 KB | None | 0 0
  1. Index: java/com/l2jserver/gameserver/ThreadPoolManager.java
  2. ===================================================================
  3. --- java/com/l2jserver/gameserver/ThreadPoolManager.java    (revision 5685)
  4. +++ java/com/l2jserver/gameserver/ThreadPoolManager.java    (working copy)
  5. @@ -190,6 +190,7 @@
  6.         }
  7.         catch (RejectedExecutionException e)
  8.         {
  9. +           _log.info("Ignorado: " + initial + " " + delay);
  10.             return null; /* shutdown, ignore */
  11.         }
  12.     }
  13. Index: java/com/l2jserver/gameserver/taskmanager/TaskTypes.java
  14. ===================================================================
  15. --- java/com/l2jserver/gameserver/taskmanager/TaskTypes.java    (revision 5685)
  16. +++ java/com/l2jserver/gameserver/taskmanager/TaskTypes.java    (working copy)
  17. @@ -25,5 +25,6 @@
  18.     TYPE_FIXED_SHEDULED,
  19.     TYPE_GLOBAL_TASK,
  20.     TYPE_STARTUP,
  21. -   TYPE_SPECIAL
  22. +   TYPE_SPECIAL,
  23. +   TYPE_SCHEDULED_PER_DAY  // Por Kimeraweb
  24.  }
  25. Index: java/com/l2jserver/gameserver/taskmanager/TaskManager.java
  26. ===================================================================
  27. --- java/com/l2jserver/gameserver/taskmanager/TaskManager.java  (revision 5685)
  28. +++ java/com/l2jserver/gameserver/taskmanager/TaskManager.java  (working copy)
  29. @@ -38,6 +38,8 @@
  30.  import com.l2jserver.gameserver.taskmanager.tasks.TaskCleanUp;
  31.  import com.l2jserver.gameserver.taskmanager.tasks.TaskDailySkillReuseClean;
  32.  import com.l2jserver.gameserver.taskmanager.tasks.TaskGlobalVariablesSave;
  33. +import com.l2jserver.gameserver.taskmanager.tasks.TaskHappyHourEnd;
  34. +import com.l2jserver.gameserver.taskmanager.tasks.TaskHappyHourStart;
  35.  import com.l2jserver.gameserver.taskmanager.tasks.TaskJython;
  36.  import com.l2jserver.gameserver.taskmanager.tasks.TaskOlympiadSave;
  37.  import com.l2jserver.gameserver.taskmanager.tasks.TaskRaidPointsReset;
  38. @@ -195,6 +197,8 @@
  39.         registerTask(new TaskScript());
  40.         registerTask(new TaskSevenSignsUpdate());
  41.         registerTask(new TaskShutdown());
  42. +       registerTask(new TaskHappyHourStart()); // por Kimeraweb
  43. +       registerTask(new TaskHappyHourEnd());   // por Kimeraweb
  44.     }
  45.    
  46.     public void registerTask(Task task)
  47. @@ -315,8 +319,42 @@
  48.                 }
  49.                 task.scheduled = scheduler.scheduleGeneralAtFixedRate(task, delay, interval);
  50.                 return true;
  51. +          
  52. +          
  53. +           // Por Kimeraweb
  54. +           case TYPE_SCHEDULED_PER_DAY:
  55. +               String[] hour_spd = task.getParams()[1].split(":");
  56. +               if (hour_spd.length != 3)
  57. +               {
  58. +                   _log.warning("Task " + task.getId() + " no esta correctamente formateado.");
  59. +                   return false;
  60. +               }
  61. +              
  62. +               // Convierto la hora programada a un objeto Calendar
  63. +               Calendar scheduledTime = Calendar.getInstance();
  64. +               scheduledTime.set(Calendar.HOUR_OF_DAY, Integer.parseInt(hour_spd[0]));
  65. +               scheduledTime.set(Calendar.MINUTE, Integer.parseInt(hour_spd[1]));
  66. +               scheduledTime.set(Calendar.SECOND, Integer.parseInt(hour_spd[2]));
  67. +              
  68. +               long timeLeft = scheduledTime.getTimeInMillis() - System.currentTimeMillis();      
  69. +              
  70. +               _log.info("Evento programado " + scheduledTime.get(Calendar.HOUR_OF_DAY) + ":" + scheduledTime.get(Calendar.MINUTE));
  71. +               if (timeLeft>0) {
  72. +                   task.scheduled = scheduler.scheduleGeneralAtFixedRate(task, timeLeft, 86400000L); // Ejecutado 1 vez al dia
  73. +                   _log.info("Quedan " + (timeLeft/1000) + " segundos.");
  74. +               }
  75. +               else {
  76. +                   // Si el evento termina el dia siguiente
  77. +                   _log.info("Evento pasado al siguiente dia, ID: " + task.getId());
  78. +                   task.scheduled = scheduler.scheduleGeneralAtFixedRate(task, timeLeft + 86400000L, 86400000L);
  79. +                   _log.info("Quedan " + (timeLeft + 86400000L/3600000) + " horas.");
  80. +               }
  81. +               return true;
  82. +
  83. +          
  84.             default:
  85.                 return false;
  86. +          
  87.         }
  88.         return false;
  89.     }
  90. Index: java/com/l2jserver/gameserver/taskmanager/tasks/TaskHappyHourEnd.java
  91. ===================================================================
  92. --- java/com/l2jserver/gameserver/taskmanager/tasks/TaskHappyHourEnd.java   (revision 0)
  93. +++ java/com/l2jserver/gameserver/taskmanager/tasks/TaskHappyHourEnd.java   (revision 0)
  94. @@ -0,0 +1,86 @@
  95. +/*
  96. + * This program is free software: you can redistribute it and/or modify it under
  97. + * the terms of the GNU General Public License as published by the Free Software
  98. + * Foundation, either version 3 of the License, or (at your option) any later
  99. + * version.
  100. + *
  101. + * This program is distributed in the hope that it will be useful, but WITHOUT
  102. + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
  103. + * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
  104. + * details.
  105. + *
  106. + * You should have received a copy of the GNU General Public License along with
  107. + * this program. If not, see <http://www.gnu.org/licenses/>.
  108. + */
  109. +package com.l2jserver.gameserver.taskmanager.tasks;
  110. +
  111. +import com.l2jserver.Config;
  112. +import com.l2jserver.gameserver.model.L2World;
  113. +import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
  114. +import com.l2jserver.gameserver.network.serverpackets.ExShowScreenMessage;
  115. +import com.l2jserver.gameserver.taskmanager.Task;
  116. +import com.l2jserver.gameserver.taskmanager.TaskManager.ExecutedTask;
  117. +
  118. +/**
  119. + * @author Kimera
  120. + */
  121. +public class TaskHappyHourEnd extends Task
  122. +{
  123. +
  124. +   private static final String NAME = "happy_hour_end";
  125. +  
  126. +   @Override
  127. +   public String getName() { return NAME; }
  128. +
  129. +   @Override
  130. +   public void onTimeElapsed(ExecutedTask task)
  131. +   {
  132. +       _log.info("HappyHour finalizada.");
  133. +              
  134. +       _log.info("Cargando y aplicando configuracion por defecto.");
  135. +       Config.RATE_XP = OldConfig.RATE_XP.getFloatRate();
  136. +       Config.RATE_SP = OldConfig.RATE_SP.getFloatRate();
  137. +       Config.RATE_PARTY_XP = OldConfig.RATE_PARTY_XP.getFloatRate();
  138. +       Config.RATE_PARTY_SP = OldConfig.RATE_PARTY_SP.getFloatRate();
  139. +       Config.RATE_DROP_ITEMS = OldConfig. RATE_DROP_ITEMS.getFloatRate();
  140. +       Config.RATE_DROP_ITEMS_BY_RAID = OldConfig.RATE_DROP_ITEMS_BY_RAID.getFloatRate();
  141. +       Config.RATE_DROP_SPOIL = OldConfig.RATE_DROP_SPOIL.getFloatRate();
  142. +       Config.RATE_DROP_MANOR = OldConfig.RATE_DROP_MANOR.getIntegerRate();
  143. +       Config.RATE_QUEST_DROP = OldConfig.RATE_QUEST_DROP.getFloatRate();
  144. +       Config.RATE_QUEST_REWARD_XP = OldConfig.RATE_QUEST_REWARD_XP.getFloatRate();
  145. +       Config.RATE_QUEST_REWARD_SP = OldConfig.RATE_QUEST_REWARD_SP.getFloatRate();
  146. +       Config.RATE_QUEST_REWARD_POTION = OldConfig.RATE_QUEST_REWARD_POTION.getFloatRate();
  147. +       Config.RATE_QUEST_REWARD_SCROLL = OldConfig.RATE_QUEST_REWARD_SCROLL.getFloatRate();
  148. +       Config.RATE_QUEST_REWARD_RECIPE = OldConfig.RATE_QUEST_REWARD_RECIPE.getFloatRate();
  149. +       Config.RATE_QUEST_REWARD_MATERIAL = OldConfig.RATE_QUEST_REWARD_MATERIAL.getFloatRate();
  150. +       Config.ENCHANT_CHANCE = OldConfig.ENCHANT_CHANCE.getDoubleRate();
  151. +      
  152. +       // Y de esta ingeniosa forma se actualiza la informacion del Community
  153. +       _log.info(" RATE_XP: " + Config.RATE_XP); _log.info(" RATE_SP: " + Config.RATE_SP);
  154. +       _log.info(" RATE_PARTY_XP: " + Config.RATE_PARTY_XP); _log.info(" RATE_PARTY_SP: " + Config.RATE_PARTY_SP);
  155. +       _log.info(" RATE_DROP_ITEMS: " + Config.RATE_DROP_ITEMS); _log.info(" RATE_DROP_ITEMS_BY_RAID: " + Config.RATE_DROP_ITEMS_BY_RAID);
  156. +       _log.info(" RATE_DROP_SPOIL: " + Config.RATE_DROP_SPOIL); _log.info(" RATE_DROP_MANOR: " + Config.RATE_DROP_MANOR);
  157. +       _log.info(" RATE_QUEST_DROP: " + Config.RATE_QUEST_DROP); _log.info(" RATE_QUEST_REWARD_XP: " + Config.RATE_QUEST_REWARD_XP);
  158. +       _log.info(" RATE_QUEST_REWARD_SP: " + Config.RATE_QUEST_REWARD_SP); _log.info(" RATE_QUEST_REWARD_POTION: " + Config.RATE_QUEST_REWARD_POTION);
  159. +       _log.info(" RATE_QUEST_REWARD_SCROLL: " + Config.RATE_QUEST_REWARD_SCROLL); _log.info(" RATE_QUEST_REWARD_RECIPE: " + Config.RATE_QUEST_REWARD_RECIPE);
  160. +       _log.info(" RATE_QUEST_REWARD_RECIPE: " + Config.RATE_QUEST_REWARD_RECIPE); _log.info(" RATE_QUEST_REWARD_MATERIAL: " + Config.RATE_QUEST_REWARD_MATERIAL);
  161. +       _log.info(" ENCHANT_CHANCE: " + Config.ENCHANT_CHANCE);
  162. +      
  163. +       // Share por fissban
  164. +       // http://www.adminsprol2.com/t38423-share-l2jserver-mensajes-por-pantalla
  165. +       ExShowScreenMessage ess = new ExShowScreenMessage("Evento Happyhour finalizado!",1000);
  166. +       L2PcInstance[] PjsOnline = L2World.getInstance().getAllPlayersArray();
  167. +       for (L2PcInstance pj : PjsOnline)
  168. +           pj.sendPacket(ess);
  169. +              
  170. +   }
  171. +  
  172. +   @Override
  173. +   public void initializate()
  174. +   {
  175. +       super.initializate();
  176. +       _log.info("*** Happyhour (End time) *** Inicializada");
  177. +   }
  178. +  
  179. +  
  180. +}
  181. Index: java/com/l2jserver/gameserver/taskmanager/tasks/TaskHappyHourStart.java
  182. ===================================================================
  183. --- java/com/l2jserver/gameserver/taskmanager/tasks/TaskHappyHourStart.java (revision 0)
  184. +++ java/com/l2jserver/gameserver/taskmanager/tasks/TaskHappyHourStart.java (revision 0)
  185. @@ -0,0 +1,212 @@
  186. +/*
  187. + * This program is free software: you can redistribute it and/or modify it under
  188. + * the terms of the GNU General Public License as published by the Free Software
  189. + * Foundation, either version 3 of the License, or (at your option) any later
  190. + * version.
  191. + *
  192. + * This program is distributed in the hope that it will be useful, but WITHOUT
  193. + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
  194. + * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
  195. + * details.
  196. + *
  197. + * You should have received a copy of the GNU General Public License along with
  198. + * this program. If not, see <http://www.gnu.org/licenses/>.
  199. + */
  200. +package com.l2jserver.gameserver.taskmanager.tasks;
  201. +
  202. +import java.io.BufferedReader;
  203. +import java.io.File;
  204. +import java.io.FileReader;
  205. +import java.io.IOException;
  206. +import java.sql.Connection;
  207. +import java.sql.ResultSet;
  208. +import java.sql.Statement;
  209. +import java.util.Calendar;
  210. +import java.util.Date;
  211. +import com.l2jserver.Config;
  212. +import com.l2jserver.L2DatabaseFactory;
  213. +import com.l2jserver.gameserver.model.L2World;
  214. +import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
  215. +import com.l2jserver.gameserver.network.serverpackets.ExShowScreenMessage;
  216. +import com.l2jserver.gameserver.taskmanager.Task;
  217. +import com.l2jserver.gameserver.taskmanager.TaskManager;
  218. +import com.l2jserver.gameserver.taskmanager.TaskTypes;
  219. +import com.l2jserver.gameserver.taskmanager.TaskManager.ExecutedTask;
  220. +
  221. +/**
  222. + * @author Kimera
  223. + *
  224. + */
  225. +public class TaskHappyHourStart extends Task
  226. +{
  227. +   String param1, param2, param3;
  228. +  
  229. +   private static final String NAME = "happy_hour_start";
  230. +  
  231. +   @Override
  232. +   public String getName() { return NAME; }
  233. +
  234. +   @Override
  235. +   public void onTimeElapsed(ExecutedTask task)
  236. +   {
  237. +       OldConfig.values();
  238. +       Date d = new Date();
  239. +       Calendar c = Calendar.getInstance();
  240. +       c.setTime(d);
  241. +      
  242. +       final int day = c.get(Calendar.DAY_OF_WEEK);
  243. +       String todayIs = "";                        // Dia de hoy
  244. +       String [] params = null;                    // Parámetros del evento
  245. +      
  246. +       //File
  247. +       String lineRead = "";
  248. +      
  249. +       switch (day) {
  250. +           case 1:
  251. +               todayIs = "D";
  252. +               break;
  253. +           case 2:
  254. +               todayIs = "L";
  255. +               break;
  256. +           case 3:
  257. +               todayIs = "M";
  258. +               break;
  259. +           case 4:
  260. +               todayIs = "W";
  261. +               break;
  262. +           case 5:
  263. +               todayIs = "J";
  264. +               break;
  265. +           case 6:
  266. +               todayIs = "V";
  267. +           case 7:
  268. +               todayIs = "S";
  269. +               break;
  270. +           default: // Nunca deberia ocurir
  271. +               {
  272. +                   todayIs = "S";
  273. +                   _log.info("Algo raro ha ocurrido con las fechas en TaskHappyHourStart: " + day);
  274. +               }
  275. +       }
  276. +      
  277. +       if (Config.DEBUG) _log.info("Hoy es " + todayIs);
  278. +       params = task.getParams();
  279. +       if (Config.DEBUG) _log.info("Parametros: " + params[0] + " " + params[1] + " " + params[2]);
  280. +      
  281. +       if (todayIs.equals(params[2].split(" ")[0]))
  282. +       {
  283. +           _log.info("Evento happyHour iniciado.");
  284. +           File f = new File("./config/happyHour.properties");
  285. +           try (FileReader fr = new FileReader(f); BufferedReader br = new BufferedReader(fr);
  286. +               )
  287. +           {
  288. +               while ((lineRead = br.readLine())!=null)
  289. +               {
  290. +                   if (lineRead.split(" ")[0].contains("NAME"))
  291. +                   {
  292. +                       if (lineRead.split(" ")[1].equals(params[2].split(" ")[1]))
  293. +                       {                          
  294. +                           _log.info("Cargando y aplicando configuracion evento HappyHour.");
  295. +                           Config.RATE_XP = Float.valueOf((br.readLine()).split(" ")[1]);
  296. +                           Config.RATE_SP = Float.valueOf((br.readLine()).split(" ")[1]);
  297. +                           Config.RATE_PARTY_XP = Float.valueOf((br.readLine()).split(" ")[1]);
  298. +                           Config.RATE_PARTY_SP = Float.valueOf((br.readLine()).split(" ")[1]);
  299. +                           Config.RATE_DROP_ITEMS = Float.valueOf((br.readLine()).split(" ")[1]);
  300. +                           Config.RATE_DROP_ITEMS_BY_RAID = Float.valueOf((br.readLine()).split(" ")[1]);
  301. +                           Config.RATE_DROP_SPOIL = Float.valueOf((br.readLine()).split(" ")[1]);
  302. +                           Config.RATE_DROP_MANOR = Integer.valueOf((br.readLine()).split(" ")[1]);
  303. +                           Config.RATE_QUEST_DROP = Float.valueOf((br.readLine()).split(" ")[1]);
  304. +                           Config.RATE_QUEST_REWARD_XP = Float.valueOf((br.readLine()).split(" ")[1]);
  305. +                           Config.RATE_QUEST_REWARD_SP = Float.valueOf((br.readLine()).split(" ")[1]);
  306. +                           Config.RATE_QUEST_REWARD_POTION = Float.valueOf((br.readLine()).split(" ")[1]);
  307. +                           Config.RATE_QUEST_REWARD_SCROLL = Float.valueOf((br.readLine()).split(" ")[1]);
  308. +                           Config.RATE_QUEST_REWARD_RECIPE = Float.valueOf((br.readLine()).split(" ")[1]);
  309. +                           Config.RATE_QUEST_REWARD_MATERIAL = Float.valueOf((br.readLine()).split(" ")[1]);
  310. +                           Config.ENCHANT_CHANCE = Double.valueOf((br.readLine()).split(" ")[1]);
  311. +                          
  312. +                           // Y de esta ingeniosa forma se actualiza la informacion del Community
  313. +                           _log.info(" RATE_XP: " + Config.RATE_XP); _log.info(" RATE_SP: " + Config.RATE_SP);
  314. +                           _log.info(" RATE_PARTY_XP: " + Config.RATE_PARTY_XP); _log.info(" RATE_PARTY_SP: " + Config.RATE_PARTY_SP);
  315. +                           _log.info(" RATE_DROP_ITEMS: " + Config.RATE_DROP_ITEMS); _log.info(" RATE_DROP_ITEMS_BY_RAID: " + Config.RATE_DROP_ITEMS_BY_RAID);
  316. +                           _log.info(" RATE_DROP_SPOIL: " + Config.RATE_DROP_SPOIL); _log.info(" RATE_DROP_MANOR: " + Config.RATE_DROP_MANOR);
  317. +                           _log.info(" RATE_QUEST_DROP: " + Config.RATE_QUEST_DROP); _log.info(" RATE_QUEST_REWARD_XP: " + Config.RATE_QUEST_REWARD_XP);
  318. +                           _log.info(" RATE_QUEST_REWARD_SP: " + Config.RATE_QUEST_REWARD_SP); _log.info(" RATE_QUEST_REWARD_POTION: " + Config.RATE_QUEST_REWARD_POTION);
  319. +                           _log.info(" RATE_QUEST_REWARD_SCROLL: " + Config.RATE_QUEST_REWARD_SCROLL); _log.info(" RATE_QUEST_REWARD_RECIPE: " + Config.RATE_QUEST_REWARD_RECIPE);
  320. +                           _log.info(" RATE_QUEST_REWARD_RECIPE: " + Config.RATE_QUEST_REWARD_RECIPE); _log.info(" RATE_QUEST_REWARD_MATERIAL: " + Config.RATE_QUEST_REWARD_MATERIAL);
  321. +                           _log.info(" ENCHANT_CHANCE: " + Config.ENCHANT_CHANCE);
  322. +                          
  323. +                           // Share por fissban
  324. +                           // http://www.adminsprol2.com/t38423-share-l2jserver-mensajes-por-pantalla
  325. +                           ExShowScreenMessage ess = new ExShowScreenMessage("Evento Happyhour iniciado!",1000);
  326. +                           L2PcInstance[] PjsOnline = L2World.getInstance().getAllPlayersArray();
  327. +                           for (L2PcInstance pj : PjsOnline)
  328. +                               pj.sendPacket(ess);
  329. +
  330. +                           break;
  331. +                       }
  332. +                   }
  333. +               }
  334. +           }
  335. +           catch (IOException e) { e.printStackTrace(); }
  336. +       }
  337. +   }
  338. +  
  339. +   @Override
  340. +   public void initializate()
  341. +   {
  342. +       super.initializate();
  343. +       _log.info("*** Happyhour (Start time) *** Inicializada");
  344. +       try ( Connection con = L2DatabaseFactory.getInstance().getConnection(); )
  345. +           {
  346. +               Statement st = con.createStatement();
  347. +               String query = "Select param1,param2,param3 from global_tasks where task=\"happy_hour_start\"";
  348. +               ResultSet executeQuery = st.executeQuery(query);
  349. +               while (executeQuery.next())
  350. +               {
  351. +                   param1 = executeQuery.getString("param1");
  352. +                   param2 = executeQuery.getString("param2");
  353. +                   param3 = executeQuery.getString("param3");  // Donde reside el dia de la programacion semanal
  354. +               }
  355. +               con.close(); st.close();
  356. +           }
  357. +       catch (Exception e) { e.printStackTrace(); }
  358. +
  359. +       if (param1!=null && param2!=null)
  360. +           TaskManager.addUniqueTask(NAME, TaskTypes.TYPE_GLOBAL_TASK, param1, param2, param3, 0L);
  361. +      
  362. +       _log.info("Se ha anadido: " + NAME + " " + param1 + " " + param2 + " " + param3);
  363. +   }
  364. +  
  365. +   // TODO: Deberia crearse una clase enumeracion en su propio fichero para reutilizar codigo.
  366. +}
  367. +
  368. +enum OldConfig
  369. +{
  370. +   RATE_XP(Config.RATE_XP),RATE_SP(Config.RATE_SP),RATE_PARTY_XP(Config.RATE_PARTY_XP), RATE_PARTY_SP(Config.RATE_PARTY_SP),
  371. +   RATE_DROP_ITEMS(Config.RATE_DROP_ITEMS), RATE_DROP_ITEMS_BY_RAID(Config.RATE_DROP_ITEMS_BY_RAID), RATE_DROP_SPOIL(Config.RATE_DROP_SPOIL),
  372. +   RATE_DROP_MANOR(Config.RATE_DROP_MANOR), RATE_QUEST_DROP(Config.RATE_QUEST_DROP), RATE_QUEST_REWARD_XP(Config.RATE_QUEST_REWARD_XP),
  373. +   RATE_QUEST_REWARD_SP(Config.RATE_QUEST_REWARD_SP), RATE_QUEST_REWARD_ADENA(Config.RATE_QUEST_REWARD_SP),
  374. +   RATE_QUEST_REWARD_POTION(Config.RATE_QUEST_REWARD_POTION), RATE_QUEST_REWARD_SCROLL(Config.RATE_QUEST_REWARD_SCROLL),
  375. +   RATE_QUEST_REWARD_RECIPE(Config.RATE_QUEST_REWARD_RECIPE), RATE_QUEST_REWARD_MATERIAL(Config.RATE_QUEST_REWARD_MATERIAL),
  376. +   ENCHANT_CHANCE(Config.ENCHANT_CHANCE);
  377. +  
  378. +   float rateFloat;
  379. +   int rateInt;
  380. +   double rateDouble;
  381. +  
  382. +   OldConfig(float f) {
  383. +       this.rateFloat = f;
  384. +   }
  385. +  
  386. +   OldConfig(int i) {
  387. +       this.rateInt = i;
  388. +   }
  389. +  
  390. +   OldConfig(double d) {
  391. +       this.rateDouble = d;
  392. +   }
  393. +  
  394. +   float getFloatRate() { return rateFloat; }
  395. +   int getIntegerRate() { return rateInt; }        // Drop manor usa tipo int
  396. +   double getDoubleRate() { return rateDouble; }   // Enchant rate usa double
  397. +}
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement