root/trunk/AE-go_GameServer/src/com/aionemu/gameserver/services/TradeService.java

845993
27
import com.aionemu.gameserver.dataholders.TradeListData;
27
import com.aionemu.gameserver.dataholders.TradeListData;
28
import com.aionemu.gameserver.model.gameobjects.Item;
28
import com.aionemu.gameserver.model.gameobjects.Item;
29
import com.aionemu.gameserver.model.gameobjects.Npc;
29
import com.aionemu.gameserver.model.gameobjects.Npc;
30
import com.aionemu.gameserver.model.gameobjects.player.Inventory;
30
import com.aionemu.gameserver.model.gameobjects.player.Storage;
31
import com.aionemu.gameserver.model.gameobjects.player.Player;
31
import com.aionemu.gameserver.model.gameobjects.player.Player;
32
import com.aionemu.gameserver.model.templates.TradeListTemplate;
32
import com.aionemu.gameserver.model.templates.TradeListTemplate;
33
import com.aionemu.gameserver.model.templates.TradeListTemplate.TradeTab;
33
import com.aionemu.gameserver.model.templates.TradeListTemplate.TradeTab;
...
...
48
public class TradeService
48
public class TradeService
49
{
49
{
50
	private static final Logger log = Logger.getLogger(TradeService.class);
50
	private static final Logger log = Logger.getLogger(TradeService.class);
51
	
51
52
	@Inject
52
	@Inject
53
	private ItemService itemService;
53
	private ItemService itemService;
54
	@Inject
54
	@Inject
...
...
66
	 */
66
	 */
67
	public boolean performBuyFromShop(Player player, TradeList tradeList)
67
	public boolean performBuyFromShop(Player player, TradeList tradeList)
68
	{
68
	{
69
		
69
70
		if(!validateBuyItems(tradeList))
70
		if(!validateBuyItems(tradeList))
71
		{
71
		{
72
			PacketSendUtility.sendMessage(player, "Some items are not allowed to be selled from this npc");
72
			PacketSendUtility.sendMessage(player, "Some items are not allowed to be selled from this npc");
73
			return false;
73
			return false;
74
		}
74
		}
75
		
75
76
		Inventory inventory  = player.getInventory();
76
		Storage inventory  = player.getInventory();
77
		Item kinahItem = inventory.getKinahItem();
77
		Item kinahItem = inventory.getKinahItem();
78
78
79
		int freeSlots = inventory.getLimit() - inventory.getUnquippedItems().size() + 1;
79
		int freeSlots = inventory.getLimit() - inventory.getUnquippedItems().size() + 1;
...
...
123
				allowedItems.addAll(goodsList.getItemIdList());
123
				allowedItems.addAll(goodsList.getItemIdList());
124
			}				
124
			}				
125
		}
125
		}
126
		
126
127
		for(TradeItem tradeItem : tradeList.getTradeItems())
127
		for(TradeItem tradeItem : tradeList.getTradeItems())
128
		{
128
		{
129
			if(!allowedItems.contains(tradeItem.getItemId()))
129
			if(!allowedItems.contains(tradeItem.getItemId()))
...
...
140
	 */
140
	 */
141
	public boolean performSellToShop(Player player, TradeList tradeList)
141
	public boolean performSellToShop(Player player, TradeList tradeList)
142
	{
142
	{
143
		Inventory inventory = player.getInventory();
143
		Storage inventory = player.getInventory();
144
144
145
		int kinahReward = 0;		
145
		int kinahReward = 0;		
146
		for(TradeItem tradeItem : tradeList.getTradeItems())
146
		for(TradeItem tradeItem : tradeList.getTradeItems())
...
...
152
152
153
			if(item.getItemCount() - tradeItem.getCount() == 0)
153
			if(item.getItemCount() - tradeItem.getCount() == 0)
154
			{
154
			{
155
				inventory.removeFromBag(item);    // need to be here to avoid exploit by sending packet with many items with same unique ids
155
				inventory.removeFromBag(item, true);    // need to be here to avoid exploit by sending packet with many items with same unique ids
156
				kinahReward += item.getItemTemplate().getPrice() * item.getItemCount();
156
				kinahReward += item.getItemTemplate().getPrice() * item.getItemCount();
157
				//TODO check retail packet here
157
				//TODO check retail packet here
158
				PacketSendUtility.sendPacket(player, new SM_DELETE_ITEM(item.getObjectId()));
158
				PacketSendUtility.sendPacket(player, new SM_DELETE_ITEM(item.getObjectId()));