/** * This file is part of aion-unique <aion-unique.org>. * * aion-unique is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * aion-unique is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with aion-unique. If not, see <http://www.gnu.org/licenses/>. */ package com.aionemu.gameserver.services; import java.util.List; import org.apache.log4j.Logger; import com.aionemu.gameserver.dataholders.WarehouseExpandData; import com.aionemu.gameserver.model.gameobjects.Creature; import com.aionemu.gameserver.model.gameobjects.Item; import com.aionemu.gameserver.model.gameobjects.Npc; import com.aionemu.gameserver.model.gameobjects.player.Player; import com.aionemu.gameserver.model.gameobjects.player.RequestResponseHandler; import com.aionemu.gameserver.model.gameobjects.player.StorageType; import com.aionemu.gameserver.model.templates.WarehouseExpandTemplate; import com.aionemu.gameserver.network.aion.serverpackets.SM_QUESTION_WINDOW; import com.aionemu.gameserver.network.aion.serverpackets.SM_SYSTEM_MESSAGE; import com.aionemu.gameserver.network.aion.serverpackets.SM_WAREHOUSE_INFO; import com.aionemu.gameserver.utils.PacketSendUtility; import com.google.inject.Inject; /** * @author Simple */ public class WarehouseService { private static final Logger log = Logger.getLogger(WarehouseService.class); @Inject WarehouseExpandData warehouseExpandData; private static final int MIN_EXPAND = 0; private static final int MAX_EXPAND = 10; /** * Shows Question window and expands on positive response * * @param player * @param npc */ public void expandWarehouse(final Player player, Npc npc) { final WarehouseExpandTemplate expandTemplate = warehouseExpandData.getWarehouseExpandListTemplate(npc .getNpcId()); if(expandTemplate == null) { log.error("Warehouse Expand Template could not be found for Npc ID: " + npc.getObjectId()); return; } if(npcCanExpandLevel(expandTemplate, player.getWarehouseSize() + 1) && validateNewSize(player.getWarehouseSize() + 1)) if(validateNewSize(player.getWarehouseSize() + 1)) { /** * Check if our player can pay the warehouse expand price */ final int price = getPriceByLevel(expandTemplate, player.getWarehouseSize() + 1); if(player.getInventory().getKinahItem().getItemCount() < price) { PacketSendUtility.sendPacket(player, new SM_SYSTEM_MESSAGE(1300831)); return; } RequestResponseHandler responseHandler = new RequestResponseHandler(npc){ @Override public void acceptRequest(Creature requester, Player responder) { expand(responder); player.getInventory().decreaseKinah(price); } @Override public void denyRequest(Creature requester, Player responder) { // nothing to do } }; boolean result = player.getResponseRequester().putRequest(900686, responseHandler); if(result) { PacketSendUtility.sendPacket(player, new SM_QUESTION_WINDOW(900686, 0, String.valueOf(price))); } } else PacketSendUtility.sendPacket(player, new SM_SYSTEM_MESSAGE(1300430)); } /** * * @param player */ private void expand(Player player) { PacketSendUtility.sendPacket(player, new SM_SYSTEM_MESSAGE(1300433, "8")); // 8 Slots added player.setWarehouseSize(player.getWarehouseSize() + 1); sendWarehouseInfo(player, false); } /** * Checks if new player cube is not max * * @param level * @return true or false */ private boolean validateNewSize(int level) { // check min and max level if(level < MIN_EXPAND || level > MAX_EXPAND) return false; return true; } /** * Checks if npc can expand level * * @param clist * @param level * @return true or false */ private boolean npcCanExpandLevel(WarehouseExpandTemplate clist, int level) { // check if level exists in template if(!clist.contains(level)) return false; return true; } /** * The guy who created cube template should blame himself :) One day I will rewrite them * * @param template * @param level * @return */ private int getPriceByLevel(WarehouseExpandTemplate clist, int level) { return clist.get(level).getPrice(); } /** * Sends correctly warehouse packets * * @param player */ public void sendWarehouseInfo(Player player, boolean sendAccountWh) { List<Item> items = player.getStorage(StorageType.REGULAR_WAREHOUSE.getId()).getStorageItems(); int whSize = player.getWarehouseSize(); int itemsSize = items.size(); /** * Regular warehouse */ boolean firstPacket = true; if(itemsSize != 0) { int index = 0; while(index + 10 < itemsSize) { PacketSendUtility.sendPacket(player, new SM_WAREHOUSE_INFO(items.subList(index, index + 10), StorageType.REGULAR_WAREHOUSE.getId(), whSize, firstPacket)); index += 10; firstPacket = false; } PacketSendUtility.sendPacket(player, new SM_WAREHOUSE_INFO(items.subList(index, itemsSize), StorageType.REGULAR_WAREHOUSE.getId(), whSize, firstPacket)); } PacketSendUtility.sendPacket(player, new SM_WAREHOUSE_INFO(null, StorageType.REGULAR_WAREHOUSE .getId(), whSize, false)); if(sendAccountWh) { /** * Account warehouse */ PacketSendUtility .sendPacket(player, new SM_WAREHOUSE_INFO(player.getStorage( StorageType.ACCOUNT_WAREHOUSE.getId()).getAllItems(), StorageType.ACCOUNT_WAREHOUSE.getId(), 0, true)); } PacketSendUtility.sendPacket(player, new SM_WAREHOUSE_INFO(null, StorageType.ACCOUNT_WAREHOUSE .getId(), 0, false)); } }