package org.reunionemu.jreunion.game.npc; import java.util.Iterator; import java.util.List; import java.util.Vector; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.reunionemu.jreunion.game.ExchangeItem; import org.reunionemu.jreunion.game.Item; import org.reunionemu.jreunion.game.NpcType; import org.reunionemu.jreunion.game.Player; import org.reunionemu.jreunion.game.items.equipment.Armor; import org.reunionemu.jreunion.server.Client; import org.reunionemu.jreunion.server.DatabaseUtils; import org.reunionemu.jreunion.server.ItemManager; import org.reunionemu.jreunion.server.PacketFactory.Type; /** * @author Aidamina * @license http://reunion.googlecode.com/svn/trunk/license.txt */ public class Trader extends NpcType { public Trader(int id) { super(id); //loadFromReference(id); } /****** Exchange 5 "grade n" gems for 1 "grade n-1" gem ******/ /****** or Gem Gambler ******/ public void chipExchange(Player player, int gemTraderType, int chipType, int playerBet) { Client client = player.getClient(); if (client == null) { return; } ItemManager itemManager = client.getWorld().getItemManager(); int serverBetResult = (int) (Math.random() * 6); Iterator<ExchangeItem> exchangeIter = player.getExchange().itemListIterator(); while (exchangeIter.hasNext()) { ExchangeItem exchangeItem = exchangeIter.next(); Item<?> item = exchangeItem.getItem(); DatabaseUtils.getDinamicInstance().deleteItem(item.getItemId()); player.getPosition().getLocalMap().removeEntity(item); } player.getExchange().clearExchange(); if (gemTraderType == 0) { int newChipType = getNewChipTypeUp(chipType); Item<?> item = itemManager.create(newChipType); if(item.getEntityId() == -1) player.getPosition().getLocalMap().createEntityId(item); ExchangeItem exchangeItem = new ExchangeItem(item, 0, 0); player.getExchange().addItem(exchangeItem); client.sendPacket(Type.CHIP_EXCHANGE, gemTraderType, "", item, ""); } else { if (playerBet == serverBetResult) { int newChipType = getNewChipTypeUp(chipType); Item<?> item = itemManager.create(newChipType); if(item.getEntityId() == -1) player.getPosition().getLocalMap().createEntityId(item); ExchangeItem exchangeItem = new ExchangeItem(item, 0, 0); player.getExchange().addItem(exchangeItem); client.sendPacket(Type.CHIP_EXCHANGE, gemTraderType, "win ", item, (Integer.toString(serverBetResult))+" "); } else { int newChipType = getNewChipTypeDown(chipType); Item<?> item = null; if (newChipType != -1) { item = itemManager.create(newChipType); if(item.getEntityId() == -1) player.getPosition().getLocalMap().createEntityId(item); ExchangeItem exchangeItem = new ExchangeItem(item, 0, 0); player.getExchange().addItem(exchangeItem); } client.sendPacket(Type.CHIP_EXCHANGE, gemTraderType, "lose ", item, (Integer.toString(serverBetResult))+" "); } } } /****** * Exchange a certain race armor part for another race armor part of the * same level ******/ public void exchangeArmor(Player player, int armorType) { Client client = player.getClient(); if (client == null) { return; } ItemManager itemManager = client.getWorld().getItemManager(); if (armorType == 0) { client.sendPacket(Type.ICHANGE, null, null); } else { Iterator<ExchangeItem> exchangeIter = player.getExchange().itemListIterator(); ExchangeItem oldExchangeItem = exchangeIter.next(); Item<?> newItem = itemManager.create(armorType); if(newItem.getEntityId() == -1) player.getPosition().getLocalMap().createEntityId(newItem); Item<?> oldItem = oldExchangeItem.getItem(); if ((newItem.is(Armor.class) == false) || ((Armor)newItem.getType()).getLevel() != ((Armor)oldItem.getType()).getLevel()) { LoggerFactory.getLogger(Trader.class).warn("Player "+player+" tried to exchange item " +oldItem+" for item "+newItem); return; } ExchangeItem newExchangeItem = new ExchangeItem(newItem, 0, 0); player.getExchange().clearExchange(); player.getExchange().addItem(newExchangeItem); int cost = (int) (newItem.getType().getPrice() * 0.33328); synchronized(player){ player.setLime(player.getLime()-cost); } client.sendPacket(Type.ICHANGE, oldItem, newItem); DatabaseUtils.getDinamicInstance().deleteItem(oldItem.getItemId()); player.getPosition().getLocalMap().removeEntity(oldItem); } } public int getNewChipTypeDown(int chipType) { int newChipType = 0; switch (chipType) { case 521: { newChipType = 528; break; } case 522: { newChipType = 529; break; } case 523: { newChipType = 530; break; } case 524: { newChipType = 531; break; } case 525: { newChipType = 532; break; } case 526: { newChipType = 533; break; } case 527: { newChipType = 534; break; } case 528: { newChipType = 535; break; } case 529: { newChipType = 536; break; } case 530: { newChipType = 537; break; } case 531: { newChipType = 538; break; } case 532: { newChipType = 539; break; } case 533: { newChipType = 540; break; } case 534: { newChipType = 541; break; } default: newChipType = -1; } return newChipType; } public int getNewChipTypeUp(int chipType) { int newChipType = 0; switch (chipType) { case 521: { newChipType = 222; break; } case 522: { newChipType = 223; break; } case 523: { newChipType = 224; break; } case 524: { newChipType = 225; break; } case 525: { newChipType = 226; break; } case 526: { newChipType = 227; break; } case 527: { newChipType = 228; break; } case 528: { newChipType = 521; break; } case 529: { newChipType = 522; break; } case 530: { newChipType = 523; break; } case 531: { newChipType = 524; break; } case 532: { newChipType = 525; break; } case 533: { newChipType = 526; break; } case 534: { newChipType = 527; break; } case 535: { newChipType = 528; break; } case 536: { newChipType = 529; break; } case 537: { newChipType = 530; break; } case 538: { newChipType = 531; break; } case 539: { newChipType = 532; break; } case 540: { newChipType = 533; break; } case 541: { newChipType = 534; break; } default: newChipType = -1; } return newChipType; } }