RequestPetUseItem.java 8.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278
  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 net.sf.l2j.gameserver.clientpackets;
  16. import java.util.logging.Logger;
  17. import net.sf.l2j.Config;
  18. import net.sf.l2j.gameserver.handler.IItemHandler;
  19. import net.sf.l2j.gameserver.handler.ItemHandler;
  20. import net.sf.l2j.gameserver.model.L2ItemInstance;
  21. import net.sf.l2j.gameserver.model.L2PetDataTable;
  22. import net.sf.l2j.gameserver.model.actor.instance.L2PcInstance;
  23. import net.sf.l2j.gameserver.model.actor.instance.L2PetInstance;
  24. import net.sf.l2j.gameserver.network.SystemMessageId;
  25. import net.sf.l2j.gameserver.serverpackets.PetInfo;
  26. import net.sf.l2j.gameserver.serverpackets.PetItemList;
  27. import net.sf.l2j.gameserver.serverpackets.SystemMessage;
  28. public final class RequestPetUseItem extends L2GameClientPacket
  29. {
  30. private static Logger _log = Logger.getLogger(RequestPetUseItem.class.getName());
  31. private static final String _C__8A_REQUESTPETUSEITEM = "[C] 8a RequestPetUseItem";
  32. private int _objectId;
  33. @Override
  34. protected void readImpl()
  35. {
  36. _objectId = readD();
  37. }
  38. @Override
  39. protected void runImpl()
  40. {
  41. L2PcInstance activeChar = getClient().getActiveChar();
  42. if (activeChar == null)
  43. return;
  44. L2PetInstance pet = (L2PetInstance)activeChar.getPet();
  45. if (pet == null)
  46. return;
  47. L2ItemInstance item = pet.getInventory().getItemByObjectId(_objectId);
  48. if (item == null)
  49. return;
  50. if (item.isWear())
  51. return;
  52. int itemId = item.getItemId();
  53. if (activeChar.isAlikeDead() || pet.isDead())
  54. {
  55. SystemMessage sm = new SystemMessage(SystemMessageId.S1_CANNOT_BE_USED);
  56. sm.addItemName(item);
  57. activeChar.sendPacket(sm);
  58. sm = null;
  59. return;
  60. }
  61. if (Config.DEBUG)
  62. _log.finest(activeChar.getObjectId()+": pet use item " + _objectId);
  63. //check if the item matches the pet
  64. if (item.isEquipable())
  65. {
  66. if (L2PetDataTable.isWolf(pet.getNpcId()) && // wolf
  67. item.getItem().isForWolf())
  68. {
  69. useItem(pet, item, activeChar);
  70. return;
  71. }
  72. else if (L2PetDataTable.isGreatWolf(pet.getNpcId()) && // Greatwolf
  73. item.getItem().isForGreatWolf())
  74. {
  75. useItem(pet, item, activeChar);
  76. return;
  77. }
  78. else if (L2PetDataTable.isWGreatWolf(pet.getNpcId()) && // White Greatwolf
  79. item.getItem().isForGreatWolf())
  80. {
  81. useItem(pet, item, activeChar);
  82. return;
  83. }
  84. else if (L2PetDataTable.isBlackWolf(pet.getNpcId()) && // Blackwolf
  85. item.getItem().isForGreatWolf())
  86. {
  87. useItem(pet, item, activeChar);
  88. return;
  89. }
  90. else if (L2PetDataTable.isFenrirWolf(pet.getNpcId()) && // Fenrir
  91. item.getItem().isForGreatWolf())
  92. {
  93. useItem(pet, item, activeChar);
  94. return;
  95. }
  96. else if (L2PetDataTable.isWFenrirWolf(pet.getNpcId()) && // white fenrir
  97. item.getItem().isForGreatWolf())
  98. {
  99. useItem(pet, item, activeChar);
  100. return;
  101. }
  102. else if (L2PetDataTable.isHatchling(pet.getNpcId()) && // hatchlings
  103. item.getItem().isForHatchling())
  104. {
  105. useItem(pet, item, activeChar);
  106. return;
  107. }
  108. else if (L2PetDataTable.isStrider(pet.getNpcId()) && // striders
  109. item.getItem().isForStrider())
  110. {
  111. useItem(pet, item, activeChar);
  112. return;
  113. }
  114. else if (L2PetDataTable.isBaby(pet.getNpcId()) && // baby pets (buffalo, cougar, kookaboora)
  115. item.getItem().isForBabyPet())
  116. {
  117. useItem(pet, item, activeChar);
  118. return;
  119. }
  120. else if (L2PetDataTable.isImprovedBaby(pet.getNpcId()) && // Improved baby pets (buffalo, cougar, kookaboora)
  121. item.getItem().isForBabyPet())
  122. {
  123. useItem(pet, item, activeChar);
  124. return;
  125. }
  126. else
  127. {
  128. activeChar.sendPacket(new SystemMessage(SystemMessageId.ITEM_NOT_FOR_PETS));
  129. return;
  130. }
  131. }
  132. else if (L2PetDataTable.isPetFood(itemId))
  133. {
  134. if (L2PetDataTable.isWolf(pet.getNpcId()) && L2PetDataTable.isWolfFood(itemId))
  135. {
  136. feed(activeChar, pet, item);
  137. return;
  138. }
  139. if (L2PetDataTable.isGreatWolf(pet.getNpcId()) && L2PetDataTable.isGreatWolfFood(itemId))
  140. {
  141. feed(activeChar, pet, item);
  142. return;
  143. }
  144. if (L2PetDataTable.isWGreatWolf(pet.getNpcId()) && L2PetDataTable.isWGreatWolfFood(itemId))
  145. {
  146. feed(activeChar, pet, item);
  147. return;
  148. }
  149. if (L2PetDataTable.isBlackWolf(pet.getNpcId()) && L2PetDataTable.isBlackWolfFood(itemId))
  150. {
  151. feed(activeChar, pet, item);
  152. return;
  153. }
  154. if (L2PetDataTable.isFenrirWolf(pet.getNpcId()) && L2PetDataTable.isFenrirWolfFood(itemId))
  155. {
  156. feed(activeChar, pet, item);
  157. return;
  158. }
  159. if (L2PetDataTable.isWFenrirWolf(pet.getNpcId()) && L2PetDataTable.isWFenrirWolfFood(itemId))
  160. {
  161. feed(activeChar, pet, item);
  162. return;
  163. }
  164. if (L2PetDataTable.isSinEater(pet.getNpcId()) && L2PetDataTable.isSinEaterFood(itemId))
  165. {
  166. feed(activeChar, pet, item);
  167. return;
  168. }
  169. else if (L2PetDataTable.isHatchling(pet.getNpcId()) && L2PetDataTable.isHatchlingFood(itemId))
  170. {
  171. feed(activeChar, pet, item);
  172. return;
  173. }
  174. else if (L2PetDataTable.isStrider(pet.getNpcId()) && L2PetDataTable.isStriderFood(itemId))
  175. {
  176. feed(activeChar, pet, item);
  177. return;
  178. }
  179. else if (L2PetDataTable.isWyvern(pet.getNpcId()) && L2PetDataTable.isWyvernFood(itemId))
  180. {
  181. feed(activeChar, pet, item);
  182. return;
  183. }
  184. else if (L2PetDataTable.isBaby(pet.getNpcId()) && L2PetDataTable.isBabyFood(itemId))
  185. {
  186. feed(activeChar, pet, item);
  187. return;
  188. }
  189. else if (L2PetDataTable.isImprovedBaby(pet.getNpcId()) && L2PetDataTable.isImprovedBabyFood(itemId))
  190. {
  191. feed(activeChar, pet, item);
  192. return;
  193. }
  194. }
  195. IItemHandler handler = ItemHandler.getInstance().getItemHandler(item.getItemId());
  196. if (handler != null)
  197. {
  198. useItem(pet, item, activeChar);
  199. }
  200. else
  201. {
  202. SystemMessage sm = new SystemMessage(SystemMessageId.ITEM_NOT_FOR_PETS);
  203. activeChar.sendPacket(sm);
  204. }
  205. return;
  206. }
  207. private synchronized void useItem(L2PetInstance pet, L2ItemInstance item, L2PcInstance activeChar)
  208. {
  209. if (item.isEquipable())
  210. {
  211. if (item.isEquipped())
  212. pet.getInventory().unEquipItemInSlot(item.getLocationSlot());
  213. else
  214. pet.getInventory().equipItem(item);
  215. PetItemList pil = new PetItemList(pet);
  216. activeChar.sendPacket(pil);
  217. PetInfo pi = new PetInfo(pet);
  218. activeChar.sendPacket(pi);
  219. // The PetInfo packet wipes the PartySpelled (list of active spells' icons). Re-add them
  220. pet.updateEffectIcons(true);
  221. }
  222. else
  223. {
  224. //_log.finest("item not equipable id:"+ item.getItemId());
  225. IItemHandler handler = ItemHandler.getInstance().getItemHandler(item.getItemId());
  226. if (handler == null)
  227. _log.warning("no itemhandler registered for itemId:" + item.getItemId());
  228. else
  229. handler.useItem(pet, item);
  230. }
  231. }
  232. /**
  233. * When fed by owner double click on food from pet inventory. <BR><BR>
  234. *
  235. * <FONT COLOR=#FF0000><B> <U>Caution</U> : 1 food = 100 points of currentFed</B></FONT><BR><BR>
  236. */
  237. private void feed(L2PcInstance player, L2PetInstance pet, L2ItemInstance item)
  238. {
  239. // if pet has food in inventory
  240. if (pet.destroyItem("Feed", item.getObjectId(), 1, pet, false))
  241. pet.setCurrentFed(pet.getCurrentFed() + 100);
  242. pet.broadcastStatusUpdate();
  243. }
  244. /* (non-Javadoc)
  245. * @see net.sf.l2j.gameserver.clientpackets.ClientBasePacket#getType()
  246. */
  247. @Override
  248. public String getType()
  249. {
  250. return _C__8A_REQUESTPETUSEITEM;
  251. }
  252. }