Advertisement
fabianomiguez

Untitled

May 27th, 2019
122
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 10.00 KB | None | 0 0
  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.network.clientpackets;
  16.  
  17. import net.sf.l2j.Config;
  18. //import net.sf.l2j.gameserver.GameTimeController;
  19. import net.sf.l2j.gameserver.ThreadPoolManager;
  20. import net.sf.l2j.gameserver.event.EventManager;
  21. import net.sf.l2j.gameserver.handler.IItemHandler;
  22. import net.sf.l2j.gameserver.handler.ItemHandler;
  23. import net.sf.l2j.gameserver.model.L2Skill;
  24. import net.sf.l2j.gameserver.model.actor.instance.L2PcInstance;
  25. import net.sf.l2j.gameserver.model.actor.instance.L2PetInstance;
  26. import net.sf.l2j.gameserver.model.holder.SkillHolder;
  27. import net.sf.l2j.gameserver.model.item.instance.ItemInstance;
  28. import net.sf.l2j.gameserver.model.item.kind.Item;
  29. import net.sf.l2j.gameserver.model.item.kind.Weapon;
  30. import net.sf.l2j.gameserver.model.item.type.ActionType;
  31. import net.sf.l2j.gameserver.model.item.type.EtcItemType;
  32. import net.sf.l2j.gameserver.model.item.type.WeaponType;
  33. import net.sf.l2j.gameserver.model.itemcontainer.Inventory;
  34. import net.sf.l2j.gameserver.model.quest.Quest;
  35. import net.sf.l2j.gameserver.model.quest.QuestState;
  36. //import net.sf.l2j.gameserver.model.zone.ZoneId;
  37. //import net.sf.l2j.gameserver.model.zone.type.L2MultiFunctionZone;
  38. import net.sf.l2j.gameserver.network.SystemMessageId;
  39. import net.sf.l2j.gameserver.network.serverpackets.ActionFailed;
  40. import net.sf.l2j.gameserver.network.serverpackets.ItemList;
  41. import net.sf.l2j.gameserver.network.serverpackets.PetItemList;
  42. import net.sf.l2j.gameserver.templates.skills.L2SkillType;
  43.  
  44. public final class UseItem extends L2GameClientPacket
  45. {
  46. private int _objectId;
  47. private boolean _ctrlPressed;
  48.  
  49.  
  50.  
  51. @Override
  52. protected void readImpl()
  53. {
  54. _objectId = readD();
  55. _ctrlPressed = readD() != 0;
  56. }
  57.  
  58. @Override
  59. protected void runImpl()
  60. {
  61. final L2PcInstance activeChar = getClient().getActiveChar();
  62. if (activeChar == null)
  63. return;
  64.  
  65. if (activeChar.isInStoreMode())
  66. {
  67. activeChar.sendPacket(SystemMessageId.ITEMS_UNAVAILABLE_FOR_STORE_MANUFACTURE);
  68. return;
  69. }
  70.  
  71. if (activeChar.getActiveTradeList() != null)
  72. {
  73. activeChar.sendPacket(SystemMessageId.CANNOT_PICKUP_OR_USE_ITEM_WHILE_TRADING);
  74. return;
  75. }
  76.  
  77. final ItemInstance item = activeChar.getInventory().getItemByObjectId(_objectId);
  78. if (item == null)
  79. return;
  80.  
  81. //if (getClient().getActiveChar().isInsideZone(ZoneId.MULTI_FUNCTION) && !L2MultiFunctionZone.checkItem(item)) fabiano tirei da checagem zonemulti
  82. //{
  83. // getClient().getActiveChar().sendMessage("You cannot use " +item.getName()+ " inside this zone.");
  84. // return;
  85. //}
  86.  
  87. if (item.getItem().getType2() == Item.TYPE2_QUEST)
  88. {
  89. activeChar.sendPacket(SystemMessageId.CANNOT_USE_QUEST_ITEMS);
  90. return;
  91. }
  92.  
  93. if (activeChar.isAlikeDead() || activeChar.isStunned() || activeChar.isSleeping() || activeChar.isParalyzed() || activeChar.isAfraid())
  94. return;
  95.  
  96. if (!Config.KARMA_PLAYER_CAN_TELEPORT && activeChar.getKarma() > 0)
  97. {
  98. final SkillHolder[] sHolders = item.getItem().getSkills();
  99. if (sHolders != null)
  100. {
  101. for (SkillHolder sHolder : sHolders)
  102. {
  103. final L2Skill skill = sHolder.getSkill();
  104. if (skill != null && (skill.getSkillType() == L2SkillType.TELEPORT || skill.getSkillType() == L2SkillType.RECALL))
  105. return;
  106. }
  107. }
  108. }
  109.  
  110. if (EventManager.getInstance().isRunning() && EventManager.getInstance().isRegistered(activeChar))
  111. {
  112. if (!EventManager.getInstance().getCurrentEvent().onUseItem(activeChar,item))
  113. return;
  114. }
  115.  
  116. if (activeChar.isFishing() && item.getItem().getDefaultAction() != ActionType.fishingshot)
  117. {
  118. activeChar.sendPacket(SystemMessageId.CANNOT_DO_WHILE_FISHING_3);
  119. return;
  120. }
  121.  
  122. /*
  123. * The player can't use pet items if no pet is currently summoned. If a pet is summoned and player uses the item directly, it will be used by the pet.
  124. */
  125. if (item.isPetItem())
  126. {
  127. // If no pet, cancels the use
  128. if (!activeChar.hasPet())
  129. {
  130. activeChar.sendPacket(SystemMessageId.CANNOT_EQUIP_PET_ITEM);
  131. return;
  132. }
  133.  
  134. final L2PetInstance pet = ((L2PetInstance) activeChar.getPet());
  135.  
  136. if (!pet.canWear(item.getItem()))
  137. {
  138. activeChar.sendPacket(SystemMessageId.PET_CANNOT_USE_ITEM);
  139. return;
  140. }
  141.  
  142. if (pet.isDead())
  143. {
  144. activeChar.sendPacket(SystemMessageId.CANNOT_GIVE_ITEMS_TO_DEAD_PET);
  145. return;
  146. }
  147.  
  148. if (!pet.getInventory().validateCapacity(item))
  149. {
  150. activeChar.sendPacket(SystemMessageId.YOUR_PET_CANNOT_CARRY_ANY_MORE_ITEMS);
  151. return;
  152. }
  153.  
  154. if (!pet.getInventory().validateWeight(item, 1))
  155. {
  156. activeChar.sendPacket(SystemMessageId.UNABLE_TO_PLACE_ITEM_YOUR_PET_IS_TOO_ENCUMBERED);
  157. return;
  158. }
  159.  
  160. activeChar.transferItem("Transfer", _objectId, 1, pet.getInventory(), pet);
  161.  
  162. // Equip it, removing first the previous item.
  163. if (item.isEquipped())
  164. pet.getInventory().unEquipItemInSlot(item.getLocationSlot());
  165. else
  166. pet.getInventory().equipPetItem(item);
  167.  
  168. activeChar.sendPacket(new PetItemList(pet));
  169. pet.updateAndBroadcastStatus(1);
  170. return;
  171. }
  172.  
  173. if (!activeChar.getInventory().canManipulateWithItemId(item.getItemId()))
  174. return;
  175.  
  176. if (Config.DEBUG)
  177. _log.finest(activeChar.getName() + ": use item " + _objectId);
  178.  
  179. if (!item.isEquipped())
  180. {
  181. if (!item.getItem().checkCondition(activeChar, activeChar, true))
  182. return;
  183. }
  184.  
  185.  
  186. if (Config.ALLOW_OLY_GRADE_RESTR)
  187. {
  188. if ( (activeChar.getActingPlayer().isInOlympiadMode())) //fabiano restricao enchant olym
  189. {
  190. if (item.getEnchantLevel() > Config.MAX_ENCHANT_RESTR)
  191. {
  192. activeChar.sendMessage("Your weapon or armor enchant level is not the appropriate, YOU MUST USE enchant MAX+6 items");
  193. return;
  194. }
  195.  
  196.  
  197. }
  198. }
  199.  
  200.  
  201.  
  202.  
  203. if (item.isEquipable())
  204. {
  205. if (activeChar.isCastingNow() || activeChar.isCastingSimultaneouslyNow())
  206. {
  207. activeChar.sendPacket(SystemMessageId.CANNOT_USE_ITEM_WHILE_USING_MAGIC);
  208. return;
  209. }
  210.  
  211. switch (item.getItem().getBodyPart())
  212. {
  213. case Item.SLOT_LR_HAND:
  214. case Item.SLOT_L_HAND:
  215. case Item.SLOT_R_HAND:
  216. {
  217. if (activeChar.isMounted())
  218. {
  219. activeChar.sendPacket(SystemMessageId.CANNOT_EQUIP_ITEM_DUE_TO_BAD_CONDITION);
  220. return;
  221. }
  222.  
  223. WeaponType tip = null;
  224. if (Config.Enable_Check_Weapons)
  225. {
  226. if (item.getItem() instanceof Weapon)
  227. {
  228. switch(Config.Weapon_Type)
  229. {
  230. case 1:
  231. tip = WeaponType.BIGBLUNT;
  232. break;
  233. case 2:
  234. tip = WeaponType.BIGSWORD;
  235. break;
  236. case 3:
  237. tip = WeaponType.BLUNT;
  238. break;
  239. case 4:
  240. tip = WeaponType.BOW;
  241. break;
  242. case 5:
  243. tip = WeaponType.DAGGER;
  244. break;
  245. case 6:
  246. tip = WeaponType.DUAL;
  247. break;
  248. case 7:
  249. tip = WeaponType.DUALFIST;
  250. break;
  251. case 8:
  252. tip = WeaponType.ETC;
  253. break;
  254. case 9:
  255. tip = WeaponType.FISHINGROD;
  256. break;
  257. case 10:
  258. tip = WeaponType.FIST;
  259. break;
  260. case 11:
  261. tip = WeaponType.NONE;
  262. break;
  263. case 12:
  264. tip = WeaponType.PET;
  265. break;
  266. case 13:
  267. tip = WeaponType.POLE;
  268. break;
  269. case 14:
  270. tip = WeaponType.SWORD;
  271. break;
  272. }
  273. if ( ((Weapon)item.getItem()).getItemType() == tip)
  274. {
  275. if (Config.Disable_Classes.contains(activeChar.getClassId().getId()))
  276. {
  277. activeChar.sendMessage("This item can not be equipped by your class");
  278. activeChar.sendPacket(ActionFailed.STATIC_PACKET);
  279. return;
  280. }
  281. }
  282. }
  283. }
  284.  
  285. // Don't allow weapon/shield equipment if a cursed weapon is equipped
  286. if (activeChar.isCursedWeaponEquipped())
  287. return;
  288.  
  289. break;
  290. }
  291. }
  292.  
  293. if (activeChar.isCursedWeaponEquipped() && item.getItemId() == 6408) // Don't allow to put formal wear
  294. return;
  295.  
  296.  
  297.  
  298. // Equip or unEquip
  299. if (activeChar.isAttackingNow())
  300. ThreadPoolManager.getInstance().scheduleGeneral(() -> {
  301. final ItemInstance itemToTest = activeChar.getInventory().getItemByObjectId(_objectId);
  302. if(itemToTest == null)
  303. return;
  304.  
  305. activeChar.useEquippableItem(itemToTest, false);
  306. }, activeChar.getAttackEndTime() - System.currentTimeMillis());
  307. else
  308. activeChar.useEquippableItem(item, true);
  309. }
  310. else
  311. {
  312. if (activeChar.isCastingNow() && !(item.isPotion() || item.isElixir()))
  313. return;
  314.  
  315. if (activeChar.getAttackType() == WeaponType.FISHINGROD && item.getItem().getItemType() == EtcItemType.LURE)
  316. {
  317. activeChar.getInventory().setPaperdollItem(Inventory.PAPERDOLL_LHAND, item);
  318. activeChar.broadcastUserInfo();
  319.  
  320. sendPacket(new ItemList(activeChar, false));
  321. return;
  322. }
  323.  
  324. final IItemHandler handler = ItemHandler.getInstance().getItemHandler(item.getEtcItem());
  325. if (handler != null)
  326. handler.useItem(activeChar, item, _ctrlPressed);
  327.  
  328. for (Quest quest : item.getQuestEvents())
  329. {
  330. QuestState state = activeChar.getQuestState(quest.getName());
  331. if (state == null || !state.isStarted())
  332. continue;
  333.  
  334. quest.notifyItemUse(item, activeChar, activeChar.getTarget());
  335. }
  336. }
  337. }
  338. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement