/*
* 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 org.apache.log4j.Logger;
import com.aionemu.gameserver.dataholders.CubeExpandData;
import com.aionemu.gameserver.model.gameobjects.Creature;
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.templates.CubeExpandTemplate;
import com.aionemu.gameserver.network.aion.serverpackets.SM_CUBE_UPDATE;
import com.aionemu.gameserver.network.aion.serverpackets.SM_QUESTION_WINDOW;
import com.aionemu.gameserver.network.aion.serverpackets.SM_SYSTEM_MESSAGE;
import com.aionemu.gameserver.utils.PacketSendUtility;
import com.google.inject.Inject;
/**
* @author ATracer
* @author Simple
*/
public class CubeExpandService
{
private static final Logger log = Logger.getLogger(CubeExpandService.class);
@Inject
CubeExpandData cubicExpandData;
private static final int MIN_EXPAND = 0;
private static final int MAX_EXPAND = 9;
/**
* Shows Question window and expands on positive response
*
* @param player
* @param npc
*/
public void expandCube(final Player player, Npc npc)
{
final CubeExpandTemplate expandTemplate = cubicExpandData.getCubeExpandListTemplate(npc.getNpcId());
if(expandTemplate == null)
{
log.error("Cube Expand Template could not be found for Npc ID: " + npc.getObjectId());
return;
}
if(npcCanExpandLevel(expandTemplate, player.getCubeSize() + 1)
&& validateNewSize(player.getCubeSize() + 1))
{
/**
* Check if our player can pay the cubic expand price
*/
final int price = getPriceByLevel(expandTemplate, player.getCubeSize() + 1);
if(price > player.getInventory().getKinahItem().getItemCount())
{
PacketSendUtility.sendPacket(player, SM_SYSTEM_MESSAGE.CUBEEXPAND_NOT_ENOUGH_KINAH);
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(SM_QUESTION_WINDOW.STR_WAREHOUSE_EXPAND_WARNING,
responseHandler);
if(result)
{
PacketSendUtility.sendPacket(player, new SM_QUESTION_WINDOW(
SM_QUESTION_WINDOW.STR_WAREHOUSE_EXPAND_WARNING, 0, String.valueOf(price)));
}
}
else
PacketSendUtility.sendPacket(player, new SM_SYSTEM_MESSAGE(1300430));
}
/**
* Expands the cubes
* @param player
*/
private void expand(Player player)
{
PacketSendUtility.sendPacket(player, new SM_SYSTEM_MESSAGE(1300431, "9")); // 9 Slots added
player.setCubesize(player.getCubeSize() + 1);
PacketSendUtility.sendPacket(player, new SM_CUBE_UPDATE(player, 0));
}
/**
* 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(CubeExpandTemplate 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 clist
* @param level
* @return
*/
private int getPriceByLevel(CubeExpandTemplate clist, int level)
{
return clist.get(level).getPrice();
}
}