Advertisement
tedlol

Last Update

Sep 18th, 2012
75
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 13.18 KB | None | 0 0
  1. Index: java/com/l2jserver/gameserver/network/clientpackets/RequestPetUseItem.java
  2. ===================================================================
  3. --- java/com/l2jserver/gameserver/network/clientpackets/RequestPetUseItem.java (revision 65)
  4. +++ java/com/l2jserver/gameserver/network/clientpackets/RequestPetUseItem.java (working copy)
  5. @@ -73,48 +73,41 @@
  6. return;
  7. }
  8.  
  9. - if (Config.DEBUG)
  10. + // If the item has reuse time and it has not passed.
  11. + // Message from reuse delay must come from item.
  12. + final int reuseDelay = item.getReuseDelay();
  13. + if (reuseDelay > 0)
  14. {
  15. - _log.finest(activeChar.getObjectId() + ": pet use item " + _objectId);
  16. - }
  17. -
  18. - if (!item.isEquipped())
  19. - {
  20. - if (!item.getItem().checkCondition(pet, pet, true))
  21. + final long reuse = pet.getItemRemainingReuseTime(item.getObjectId());
  22. + if (reuse > 0)
  23. {
  24. return;
  25. }
  26. }
  27.  
  28. - // check if the item matches the pet
  29. - if (item.isEquipable())
  30. + if (Config.DEBUG)
  31. {
  32. - // all pet items have condition
  33. - if (!item.getItem().isConditionAttached())
  34. - {
  35. - activeChar.sendPacket(SystemMessageId.PET_CANNOT_USE_ITEM);
  36. - return;
  37. - }
  38. - useItem(pet, item, activeChar);
  39. - return;
  40. + _log.finest(activeChar.getObjectId() + ": pet use item " + _objectId);
  41. }
  42.  
  43. - final IItemHandler handler = ItemHandler.getInstance().getHandler(item.getEtcItem());
  44. - if (handler != null)
  45. + if (!item.isEquipped() && !item.getItem().checkCondition(pet, pet, true))
  46. {
  47. - useItem(pet, item, activeChar);
  48. + return;
  49. }
  50. - else
  51. - {
  52. - activeChar.sendPacket(SystemMessageId.PET_CANNOT_USE_ITEM);
  53. - }
  54. - return;
  55. +
  56. + useItem(pet, item, activeChar);
  57. }
  58.  
  59. private void useItem(L2PetInstance pet, L2ItemInstance item, L2PcInstance activeChar)
  60. {
  61. if (item.isEquipable())
  62. {
  63. + if (!item.getItem().isConditionAttached())
  64. + {
  65. + activeChar.sendPacket(SystemMessageId.PET_CANNOT_USE_ITEM);
  66. + return;
  67. + }
  68. +
  69. if (item.isEquipped())
  70. {
  71. pet.getInventory().unEquipItemInSlot(item.getLocationSlot());
  72. @@ -132,11 +125,19 @@
  73. final IItemHandler handler = ItemHandler.getInstance().getHandler(item.getEtcItem());
  74. if (handler != null)
  75. {
  76. - handler.useItem(pet, item, false);
  77. - pet.updateAndBroadcastStatus(1);
  78. + if (handler.useItem(pet, item, false))
  79. + {
  80. + final int reuseDelay = item.getReuseDelay();
  81. + if (reuseDelay > 0)
  82. + {
  83. + activeChar.addTimeStampItem(item, reuseDelay);
  84. + }
  85. + pet.updateAndBroadcastStatus(1);
  86. + }
  87. }
  88. else
  89. {
  90. + activeChar.sendPacket(SystemMessageId.PET_CANNOT_USE_ITEM);
  91. _log.warning("No item handler registered for itemId: " + item.getItemId());
  92. }
  93. }
  94. Index: java/com/l2jserver/gameserver/model/actor/instance/L2PcInstance.java
  95. ===================================================================
  96. --- java/com/l2jserver/gameserver/model/actor/instance/L2PcInstance.java (revision 65)
  97. +++ java/com/l2jserver/gameserver/model/actor/instance/L2PcInstance.java (working copy)
  98. @@ -14386,8 +14386,9 @@
  99. }
  100. }
  101.  
  102. - private final FastMap<Integer, TimeStamp> _reuseTimeStampsItems = new FastMap<>();
  103. + private final Map<Integer, TimeStamp> _reuseTimeStampsItems = new FastMap<>();
  104.  
  105. + @Override
  106. public void addTimeStampItem(L2ItemInstance item, long reuse)
  107. {
  108. _reuseTimeStampsItems.put(item.getObjectId(), new TimeStamp(item, reuse));
  109. @@ -14422,9 +14423,9 @@
  110. return 0;
  111. }
  112.  
  113. - private final FastMap<Integer, TimeStamp> _reuseTimeStampsSkills = new FastMap<>();
  114. + private final Map<Integer, TimeStamp> _reuseTimeStampsSkills = new FastMap<>();
  115.  
  116. - public FastMap<Integer, TimeStamp> getSkillReuseTimeStamps()
  117. + public Map<Integer, TimeStamp> getSkillReuseTimeStamps()
  118. {
  119. return _reuseTimeStampsSkills;
  120. }
  121. Index: java/com/l2jserver/gameserver/network/clientpackets/UseItem.java
  122. ===================================================================
  123. --- java/com/l2jserver/gameserver/network/clientpackets/UseItem.java (revision 65)
  124. +++ java/com/l2jserver/gameserver/network/clientpackets/UseItem.java (working copy)
  125. @@ -231,7 +231,8 @@
  126. {
  127. return; // no message
  128. }
  129. - else if (activeChar.isCombatFlagEquipped())
  130. +
  131. + if (activeChar.isCombatFlagEquipped())
  132. {
  133. return;
  134. }
  135. Index: java/com/l2jserver/gameserver/model/actor/instance/L2PetInstance.java
  136. ===================================================================
  137. --- java/com/l2jserver/gameserver/model/actor/instance/L2PetInstance.java (revision 65)
  138. +++ java/com/l2jserver/gameserver/model/actor/instance/L2PetInstance.java (working copy)
  139. @@ -18,11 +18,13 @@
  140. import java.sql.PreparedStatement;
  141. import java.sql.ResultSet;
  142. import java.util.List;
  143. +import java.util.Map;
  144. import java.util.concurrent.Future;
  145. import java.util.logging.Level;
  146. import java.util.logging.Logger;
  147.  
  148. import javolution.util.FastList;
  149. +import javolution.util.FastMap;
  150.  
  151. import com.l2jserver.Config;
  152. import com.l2jserver.L2DatabaseFactory;
  153. @@ -44,6 +46,7 @@
  154. import com.l2jserver.gameserver.model.L2PetData;
  155. import com.l2jserver.gameserver.model.L2PetLevelData;
  156. import com.l2jserver.gameserver.model.L2World;
  157. +import com.l2jserver.gameserver.model.TimeStamp;
  158. import com.l2jserver.gameserver.model.actor.L2Character;
  159. import com.l2jserver.gameserver.model.actor.L2Summon;
  160. import com.l2jserver.gameserver.model.actor.stat.PetStat;
  161. @@ -83,6 +86,9 @@
  162. private static final String RESTORE_SKILL_SAVE = "SELECT petObjItemId,skill_id,skill_level,effect_count,effect_cur_time,buff_index FROM character_pet_skills_save WHERE petObjItemId=? ORDER BY buff_index ASC";
  163. private static final String DELETE_SKILL_SAVE = "DELETE FROM character_pet_skills_save WHERE petObjItemId=?";
  164.  
  165. + private final Map<Integer, TimeStamp> _reuseTimeStampsSkills = new FastMap<>();
  166. + private final Map<Integer, TimeStamp> _reuseTimeStampsItems = new FastMap<>();
  167. +
  168. private int _curFed;
  169. private final PetInventory _inventory;
  170. private final int _controlObjectId;
  171. @@ -1470,7 +1476,44 @@
  172. return _data.getFood().contains(itemId);
  173. }
  174.  
  175. + public Map<Integer, TimeStamp> getSkillReuseTimeStamps()
  176. + {
  177. + return _reuseTimeStampsSkills;
  178. + }
  179. +
  180. @Override
  181. + public void addTimeStamp(L2Skill skill, long reuse)
  182. + {
  183. + _reuseTimeStampsSkills.put(skill.getReuseHashCode(), new TimeStamp(skill, reuse));
  184. + }
  185. +
  186. + @Override
  187. + public long getSkillRemainingReuseTime(int skillReuseHashId)
  188. + {
  189. + if (_reuseTimeStampsSkills.isEmpty() || !_reuseTimeStampsSkills.containsKey(skillReuseHashId))
  190. + {
  191. + return -1;
  192. + }
  193. + return _reuseTimeStampsSkills.get(skillReuseHashId).getRemaining();
  194. + }
  195. +
  196. + @Override
  197. + public void addTimeStampItem(L2ItemInstance item, long reuse)
  198. + {
  199. + _reuseTimeStampsItems.put(item.getObjectId(), new TimeStamp(item, reuse));
  200. + }
  201. +
  202. + @Override
  203. + public long getItemRemainingReuseTime(int itemObjId)
  204. + {
  205. + if (_reuseTimeStampsItems.isEmpty() || !_reuseTimeStampsItems.containsKey(itemObjId))
  206. + {
  207. + return -1;
  208. + }
  209. + return _reuseTimeStampsItems.get(itemObjId).getRemaining();
  210. + }
  211. +
  212. + @Override
  213. public boolean isPet()
  214. {
  215. return true;
  216. Index: java/com/l2jserver/gameserver/model/actor/L2Character.java
  217. ===================================================================
  218. --- java/com/l2jserver/gameserver/model/actor/L2Character.java (revision 65)
  219. +++ java/com/l2jserver/gameserver/model/actor/L2Character.java (working copy)
  220. @@ -2304,15 +2304,42 @@
  221. }
  222.  
  223. /**
  224. - * Index according to skill id the current timestamp of use.
  225. + * @param item
  226. + * @param reuse
  227. + */
  228. + public void addTimeStampItem(L2ItemInstance item, long reuse)
  229. + {
  230. + // Dummy
  231. + }
  232. +
  233. + /**
  234. + * @param itemObjId the item object Id
  235. + * @return the reuse time stamp
  236. + */
  237. + public long getItemRemainingReuseTime(int itemObjId)
  238. + {
  239. + return -1;
  240. + }
  241. +
  242. + /**
  243. + * Index according to skill id the current time stamp of use.
  244. * @param skill id
  245. * @param reuse delay
  246. */
  247. public void addTimeStamp(L2Skill skill, long reuse)
  248. {
  249. - /***/
  250. + // Dummy
  251. }
  252. -
  253. +
  254. + /**
  255. + * @param skillReuseHashId
  256. + * @return -1
  257. + */
  258. + public long getSkillRemainingReuseTime(int skillReuseHashId)
  259. + {
  260. + return -1;
  261. + }
  262. +
  263. public void startFusionSkill(L2Character target, L2Skill skill)
  264. {
  265. if (skill.getSkillType() != L2SkillType.FUSION)
  266. Index: dist/game/data/scripts/handlers/itemhandlers/ItemSkillsTemplate.java
  267. ===================================================================
  268. --- dist/game/data/scripts/handlers/itemhandlers/ItemSkillsTemplate.java (revision 415)
  269. +++ dist/game/data/scripts/handlers/itemhandlers/ItemSkillsTemplate.java (working copy)
  270. @@ -189,7 +189,7 @@
  271.  
  272. if (itemSkill.getReuseDelay() > 0)
  273. {
  274. - activeChar.addTimeStamp(itemSkill, itemSkill.getReuseDelay());
  275. + playable.addTimeStamp(itemSkill, itemSkill.getReuseDelay());
  276. }
  277. }
  278. }
  279. @@ -202,66 +202,69 @@
  280. * @param item the item being used
  281. * @return {@code true} if the the item or skill to check is available, {@code false} otherwise
  282. */
  283. - private boolean checkReuse(L2PcInstance player, L2Skill skill, L2ItemInstance item)
  284. + private boolean checkReuse(L2Playable playable, L2Skill skill, L2ItemInstance item)
  285. {
  286. SystemMessage sm = null;
  287. - final long remainingTime = (skill != null) ? player.getSkillRemainingReuseTime(skill.getReuseHashCode()) : player.getItemRemainingReuseTime(item.getObjectId());
  288. + final long remainingTime = (skill != null) ? playable.getSkillRemainingReuseTime(skill.getReuseHashCode()) : playable.getItemRemainingReuseTime(item.getObjectId());
  289. final boolean isAvailable = remainingTime <= 0;
  290. - if (!isAvailable)
  291. + if (playable.isPlayer())
  292. {
  293. - final int hours = (int) (remainingTime / 3600000L);
  294. - final int minutes = (int) (remainingTime % 3600000L) / 60000;
  295. - final int seconds = (int) ((remainingTime / 1000) % 60);
  296. - if (hours > 0)
  297. + if (!isAvailable)
  298. {
  299. - sm = SystemMessage.getSystemMessage(SystemMessageId.S2_HOURS_S3_MINUTES_S4_SECONDS_REMAINING_FOR_REUSE_S1);
  300. - if ((skill == null) || skill.isStatic())
  301. + final int hours = (int) (remainingTime / 3600000L);
  302. + final int minutes = (int) (remainingTime % 3600000L) / 60000;
  303. + final int seconds = (int) ((remainingTime / 1000) % 60);
  304. + if (hours > 0)
  305. {
  306. - sm.addItemName(item);
  307. + sm = SystemMessage.getSystemMessage(SystemMessageId.S2_HOURS_S3_MINUTES_S4_SECONDS_REMAINING_FOR_REUSE_S1);
  308. + if ((skill == null) || skill.isStatic())
  309. + {
  310. + sm.addItemName(item);
  311. + }
  312. + else
  313. + {
  314. + sm.addSkillName(skill);
  315. + }
  316. + sm.addNumber(hours);
  317. + sm.addNumber(minutes);
  318. }
  319. - else
  320. + else if (minutes > 0)
  321. {
  322. - sm.addSkillName(skill);
  323. + sm = SystemMessage.getSystemMessage(SystemMessageId.S2_MINUTES_S3_SECONDS_REMAINING_FOR_REUSE_S1);
  324. + if ((skill == null) || skill.isStatic())
  325. + {
  326. + sm.addItemName(item);
  327. + }
  328. + else
  329. + {
  330. + sm.addSkillName(skill);
  331. + }
  332. + sm.addNumber(minutes);
  333. }
  334. - sm.addNumber(hours);
  335. - sm.addNumber(minutes);
  336. - }
  337. - else if (minutes > 0)
  338. - {
  339. - sm = SystemMessage.getSystemMessage(SystemMessageId.S2_MINUTES_S3_SECONDS_REMAINING_FOR_REUSE_S1);
  340. - if ((skill == null) || skill.isStatic())
  341. - {
  342. - sm.addItemName(item);
  343. - }
  344. else
  345. {
  346. - sm.addSkillName(skill);
  347. + sm = SystemMessage.getSystemMessage(SystemMessageId.S2_SECONDS_REMAINING_FOR_REUSE_S1);
  348. + if ((skill == null) || skill.isStatic())
  349. + {
  350. + sm.addItemName(item);
  351. + }
  352. + else
  353. + {
  354. + sm.addSkillName(skill);
  355. + }
  356. }
  357. - sm.addNumber(minutes);
  358. + sm.addNumber(seconds);
  359. }
  360. - else
  361. + else if (skill == null)
  362. {
  363. - sm = SystemMessage.getSystemMessage(SystemMessageId.S2_SECONDS_REMAINING_FOR_REUSE_S1);
  364. - if ((skill == null) || skill.isStatic())
  365. - {
  366. - sm.addItemName(item);
  367. - }
  368. - else
  369. - {
  370. - sm.addSkillName(skill);
  371. - }
  372. + sm = SystemMessage.getSystemMessage(SystemMessageId.S1_PREPARED_FOR_REUSE);
  373. + sm.addItemName(item);
  374. }
  375. - sm.addNumber(seconds);
  376. + if (sm != null)
  377. + {
  378. + playable.sendPacket(sm);
  379. + }
  380. }
  381. - else if (skill == null)
  382. - {
  383. - sm = SystemMessage.getSystemMessage(SystemMessageId.S1_PREPARED_FOR_REUSE);
  384. - sm.addItemName(item);
  385. - }
  386. - if (sm != null)
  387. - {
  388. - player.sendPacket(sm);
  389. - }
  390. return isAvailable;
  391. }
  392. }
  393. \ No newline at end of file
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement