Changeset 2343

User picture

Author: Sarynth

(2010/06/21 08:41) Over 1 year ago

[trunk] Support for global prices and taxes including config/main/prices.properties

Affected files

Added trunk/AE-go_GameServer/config/main/prices.properties

Show contents

Updated trunk/AE-go_GameServer/src/com/aionemu/gameserver/configs/Config.java Download diff

23422343
32
import com.aionemu.gameserver.configs.main.LegionConfig;
32
import com.aionemu.gameserver.configs.main.LegionConfig;
33
import com.aionemu.gameserver.configs.main.NpcMovementConfig;
33
import com.aionemu.gameserver.configs.main.NpcMovementConfig;
34
import com.aionemu.gameserver.configs.main.PeriodicSaveConfig;
34
import com.aionemu.gameserver.configs.main.PeriodicSaveConfig;
35
import com.aionemu.gameserver.configs.main.PricesConfig;
35
import com.aionemu.gameserver.configs.main.RateConfig;
36
import com.aionemu.gameserver.configs.main.RateConfig;
36
import com.aionemu.gameserver.configs.main.ShutdownConfig;
37
import com.aionemu.gameserver.configs.main.ShutdownConfig;
37
import com.aionemu.gameserver.configs.main.TaskManagerConfig;
38
import com.aionemu.gameserver.configs.main.TaskManagerConfig;
...
...
111
			ConfigurableProcessor.process(PeriodicSaveConfig.class, mainProps);
112
			ConfigurableProcessor.process(PeriodicSaveConfig.class, mainProps);
112
			log.info("Loading: " + main + "/periodicsave.properties");
113
			log.info("Loading: " + main + "/periodicsave.properties");
113
			
114
			
115
			ConfigurableProcessor.process(PricesConfig.class, mainProps);
116
			log.info("Loading: " + main + "/prices.properties");
117
			
114
			ConfigurableProcessor.process(ThreadConfig.class, mainProps);
118
			ConfigurableProcessor.process(ThreadConfig.class, mainProps);
115
			log.info("Loading: " + main + "/thread.properties");
119
			log.info("Loading: " + main + "/thread.properties");
116
120

Added trunk/AE-go_GameServer/src/com/aionemu/gameserver/configs/main/PricesConfig.java

Show contents

Updated trunk/AE-go_GameServer/src/com/aionemu/gameserver/controllers/NpcController.java Download diff

23422343
201
		switch(dialogId)
201
		switch(dialogId)
202
		{
202
		{
203
			case 2:
203
			case 2:
204
				PacketSendUtility.sendPacket(player, new SM_TRADELIST(npc, TradeService.getTradeListData()
204
				PacketSendUtility.sendPacket(player, new SM_TRADELIST(npc,
205
					.getTradeListTemplate(npc.getNpcId())));
205
					TradeService.getTradeListData().getTradeListTemplate(npc.getNpcId()),
206
					player.getPrices().getVendorBuyModifier()));
206
				break;
207
				break;
207
			case 3:
208
			case 3:
208
				// Currently fixed at 20% of buy price
209
				PacketSendUtility.sendPacket(player, new SM_SELL_ITEM(targetObjectId, player.getPrices().getVendorSellModifier()));
209
				PacketSendUtility.sendPacket(player, new SM_SELL_ITEM(targetObjectId, 20));
210
				break;
210
				break;
211
			case 4:
211
			case 4:
212
				// stigma
212
				// stigma

Updated trunk/AE-go_GameServer/src/com/aionemu/gameserver/model/gameobjects/player/Player.java Download diff

23422343
104
	private int					flightDistance;
104
	private int					flightDistance;
105
	private Summon				summon;
105
	private Summon				summon;
106
	private Kisk				kisk;
106
	private Kisk				kisk;
107
	private Prices 				prices;
107
	
108
	
109
108
	private Map<Integer, ItemCooldown>	itemCoolDowns;
110
	private Map<Integer, ItemCooldown>	itemCoolDowns;
109
	
111
	
110
	/**
112
	/**
...
...
125
		this.playerCommonData = plCommonData;
127
		this.playerCommonData = plCommonData;
126
		this.playerAppearance = appereance;
128
		this.playerAppearance = appereance;
127
129
130
		this.prices = new Prices();
128
		this.requester = new ResponseRequester(this);
131
		this.requester = new ResponseRequester(this);
129
		this.questStateList = new QuestStateList();
132
		this.questStateList = new QuestStateList();
130
		this.titleList = new TitleList();
133
		this.titleList = new TitleList();
131
		controller.setOwner(this);
134
		controller.setOwner(this);
132
133
	}
135
	}
134
136
135
	public PlayerCommonData getCommonData()
137
	public PlayerCommonData getCommonData()
...
...
1195
			return;
1197
			return;
1196
		itemCoolDowns.remove(itemMask);
1198
		itemCoolDowns.remove(itemMask);
1197
	}
1199
	}
1200
1201
	/**
1202
	 * @return prices
1203
	 */
1204
	public Prices getPrices()
1205
	{
1206
		return this.prices;
1207
	}
1198
}
1208
}

Added trunk/AE-go_GameServer/src/com/aionemu/gameserver/model/gameobjects/player/Prices.java

Show contents

Updated trunk/AE-go_GameServer/src/com/aionemu/gameserver/model/trade/TradeList.java Download diff

23422343
84
	{
84
	{
85
		long availableKinah = player.getInventory().getKinahItem().getItemCount();
85
		long availableKinah = player.getInventory().getKinahItem().getItemCount();
86
		requiredKinah = 0;
86
		requiredKinah = 0;
87
		
88
		
87
		for(TradeItem tradeItem : tradeItems)
89
		for(TradeItem tradeItem : tradeItems)
88
		{
90
		{
89
			requiredKinah += tradeItem.getItemTemplate().getPrice() * tradeItem.getCount();
91
			requiredKinah += player.getPrices().getKinahForBuy(tradeItem.getItemTemplate().getPrice()) * tradeItem.getCount();
90
		}
92
		}
91
		// TODO: Multiply requiredKinah by 1.00 + playerRaceTaxRate
93
		
92
		return availableKinah >= requiredKinah;
94
		return availableKinah >= requiredKinah;
93
	}
95
	}
94
	
96
	

Updated trunk/AE-go_GameServer/src/com/aionemu/gameserver/network/aion/clientpackets/CM_ENTER_WORLD.java Download diff

23422343
192
			sendPacket(new SM_PLAYER_SPAWN(player));
192
			sendPacket(new SM_PLAYER_SPAWN(player));
193
			sendPacket(new SM_EMOTION_LIST());
193
			sendPacket(new SM_EMOTION_LIST());
194
			sendPacket(new SM_INFLUENCE_RATIO());
194
			sendPacket(new SM_INFLUENCE_RATIO());
195
			sendPacket(new SM_PRICES());
195
			sendPacket(new SM_PRICES(player.getPrices()));
196
			sendPacket(new SM_PLAYER_ID(player));
196
			sendPacket(new SM_PLAYER_ID(player));
197
			sendPacket(new SM_ABYSS_RANK(player.getAbyssRank()));
197
			sendPacket(new SM_ABYSS_RANK(player.getAbyssRank()));
198
198

Updated trunk/AE-go_GameServer/src/com/aionemu/gameserver/network/aion/clientpackets/CM_MANASTONE_REMOVE.java Download diff

23422343
19
import com.aionemu.gameserver.model.gameobjects.AionObject;
19
import com.aionemu.gameserver.model.gameobjects.AionObject;
20
import com.aionemu.gameserver.model.gameobjects.player.Player;
20
import com.aionemu.gameserver.model.gameobjects.player.Player;
21
import com.aionemu.gameserver.network.aion.AionClientPacket;
21
import com.aionemu.gameserver.network.aion.AionClientPacket;
22
import com.aionemu.gameserver.network.aion.serverpackets.SM_SYSTEM_MESSAGE;
22
import com.aionemu.gameserver.services.ItemService;
23
import com.aionemu.gameserver.services.ItemService;
24
import com.aionemu.gameserver.utils.PacketSendUtility;
23
import com.aionemu.gameserver.world.World;
25
import com.aionemu.gameserver.world.World;
24
26
25
/**
27
/**
...
...
53
		AionObject npc = World.getInstance().findAionObject(npcObjId);
55
		AionObject npc = World.getInstance().findAionObject(npcObjId);
54
		Player player = getConnection().getActivePlayer();
56
		Player player = getConnection().getActivePlayer();
55
		
57
		
58
		int price = player.getPrices().getPriceForService(500);
59
		
60
		if (player.getInventory().getKinahItem().getItemCount() < price)
61
		{
62
			PacketSendUtility.sendPacket(player, SM_SYSTEM_MESSAGE.NOT_ENOUGH_KINAH(price));
63
			return;
64
		}
65
		
56
		if(npc != null)
66
		if(npc != null)
57
		{
67
		{
68
			player.getInventory().decreaseKinah(price);
58
			ItemService.removeManastone(player, itemObjId, slotNum);
69
			ItemService.removeManastone(player, itemObjId, slotNum);
59
		}
70
		}
60
	}
71
	}
61
62
}
72
}

Updated trunk/AE-go_GameServer/src/com/aionemu/gameserver/network/aion/serverpackets/SM_PRICES.java Download diff

23422343
18
18
19
import java.nio.ByteBuffer;
19
import java.nio.ByteBuffer;
20
20
21
import com.aionemu.gameserver.model.gameobjects.player.Prices;
21
import com.aionemu.gameserver.network.aion.AionConnection;
22
import com.aionemu.gameserver.network.aion.AionConnection;
22
import com.aionemu.gameserver.network.aion.AionServerPacket;
23
import com.aionemu.gameserver.network.aion.AionServerPacket;
23
24
24
/**
25
/**
25
 * @author xavier
26
 * @author xavier, Sarynth
26
 * Price/tax in Influence ration dialog
27
 * Price/tax in Influence ration dialog
27
 */
28
 */
28
public class SM_PRICES extends AionServerPacket
29
public class SM_PRICES extends AionServerPacket
29
{
30
{
30
31
	private Prices prices;
32
	
31
	/**
33
	/**
34
	 * @param prices
35
	 */
36
	public SM_PRICES(Prices prices)
37
	{
38
		this.prices = prices;
39
	}
40
	
41
	/**
32
	 * {@inheritDoc}
42
	 * {@inheritDoc}
33
	 */
43
	 */
34
	@Override
44
	@Override
35
	protected void writeImpl(AionConnection con, ByteBuffer buf)
45
	protected void writeImpl(AionConnection con, ByteBuffer buf)
36
	{
46
	{
37
		writeC(buf, 100); // Display Buying Price %
47
		writeC(buf, prices.getGlobalPrices());		// Display Buying Price %
38
        writeC(buf, 50);  // Buying Modified Price %
48
        writeC(buf, prices.getGlobalPricesModifier());	// Buying Modified Price %
39
        writeC(buf, 100); // Tax = -100 + C %
49
        writeC(buf, prices.getTaxes());				// Tax = -100 + C %
40
	}
50
	}
41
}
51
}

Updated trunk/AE-go_GameServer/src/com/aionemu/gameserver/network/aion/serverpackets/SM_TRADELIST.java Download diff

23422343
27
/**
27
/**
28
 * 
28
 * 
29
 * @author alexa026
29
 * @author alexa026
30
 * modified by ATracer
30
 * modified by ATracer, Sarynth
31
 */
31
 */
32
public class SM_TRADELIST extends AionServerPacket
32
public class SM_TRADELIST extends AionServerPacket
33
{
33
{
34
	
34
	
35
	private int	targetObjectId;
35
	private int	targetObjectId;
36
	private TradeListTemplate tlist;
36
	private TradeListTemplate tlist;
37
37
	private int buyPriceModifier;
38
	public SM_TRADELIST(Npc npc, TradeListTemplate tlist)
38
	
39
	public SM_TRADELIST(Npc npc, TradeListTemplate tlist, int buyPriceModifier)
39
	{
40
	{
40
		this.targetObjectId = npc.getObjectId();
41
		this.targetObjectId = npc.getObjectId();
41
		this.tlist = tlist;
42
		this.tlist = tlist;
43
		this.buyPriceModifier = buyPriceModifier;
42
	}
44
	}
43
45
44
	@Override
46
	@Override
...
...
48
		{
50
		{
49
			writeD(buf, targetObjectId);
51
			writeD(buf, targetObjectId);
50
			writeC(buf, tlist.isAbyss() ? 2 : 1); //abyss or normal
52
			writeC(buf, tlist.isAbyss() ? 2 : 1); //abyss or normal
51
            writeC(buf, 200);
53
            writeD(buf, buyPriceModifier); // Vendor Buy Price Modifier
52
			writeH(buf, 0);//unk
54
			writeH(buf, tlist.getCount());
53
			writeC(buf, 0); // unknown
54
			writeH(buf, tlist.getCount()); // unknown
55
			for(TradeTab tradeTabl : tlist.getTradeTablist())
55
			for(TradeTab tradeTabl : tlist.getTradeTablist())
56
			{
56
			{
57
				writeD(buf, tradeTabl.getId());
57
				writeD(buf, tradeTabl.getId());

Updated trunk/AE-go_GameServer/src/com/aionemu/gameserver/services/ItemRemodelService.java Download diff

23422343
44
		Item keepItem = inventory.getItemByObjId(keepItemObjId);
44
		Item keepItem = inventory.getItemByObjId(keepItemObjId);
45
		Item extractItem = inventory.getItemByObjId(extractItemObjId);
45
		Item extractItem = inventory.getItemByObjId(extractItemObjId);
46
		
46
		
47
		int remodelCost = 500;
47
		int remodelCost = player.getPrices().getPriceForService(1000);
48
		
48
		
49
		if(keepItem == null || extractItem == null)
49
		if(keepItem == null || extractItem == null)
50
		{ // NPE check.
50
		{ // NPE check.

Updated trunk/AE-go_GameServer/src/com/aionemu/gameserver/services/ItemService.java Download diff

23422343
660
	public static void socketGodstone(Player player, int weaponId, int stoneId)
660
	public static void socketGodstone(Player player, int weaponId, int stoneId)
661
	{
661
	{
662
		// TODO: Modify the price based on global price variable
662
		// TODO: Modify the price based on global price variable
663
		int socketPrice = 50000;
663
		int socketPrice = player.getPrices().getPriceForService(100000);
664
		Item kinahItem = player.getInventory().getKinahItem();
664
		Item kinahItem = player.getInventory().getKinahItem();
665
		if(kinahItem.getItemCount() < socketPrice)
665
		if(kinahItem.getItemCount() < socketPrice)
666
			return;
666
			return;

Updated trunk/AE-go_GameServer/src/com/aionemu/gameserver/services/TeleportService.java Download diff

23422343
176
		Storage inventory = player.getInventory();
176
		Storage inventory = player.getInventory();
177
		
177
		
178
		// TODO: make this a global factor and link with SM_PRICES
178
		// TODO: make this a global factor and link with SM_PRICES
179
		int transportationPrice = location.getPrice() / 2;
179
		int transportationPrice = player.getPrices().getPriceForService(location.getPrice());
180
		
180
		
181
		if(!inventory.decreaseKinah(transportationPrice))
181
		if(!inventory.decreaseKinah(transportationPrice))
182
		{
182
		{

Updated trunk/AE-go_GameServer/src/com/aionemu/gameserver/services/TradeService.java Download diff

23422343
67
67
68
		if(!validateBuyItems(tradeList))
68
		if(!validateBuyItems(tradeList))
69
		{
69
		{
70
			PacketSendUtility.sendMessage(player, "Some items are not allowed to be selled from this npc");
70
			PacketSendUtility.sendMessage(player, "Some items are not allowed to be sold by this npc.");
71
			return false;
71
			return false;
72
		}
72
		}
73
73
...
...
207
				inventory.removeFromBag(item, true); // need to be here to avoid exploit by sending packet with many
207
				inventory.removeFromBag(item, true); // need to be here to avoid exploit by sending packet with many
208
														// items with same unique ids
208
														// items with same unique ids
209
				kinahReward += item.getItemTemplate().getPrice() * item.getItemCount();
209
				kinahReward += item.getItemTemplate().getPrice() * item.getItemCount();
210
				
210
				// TODO check retail packet here
211
				// TODO check retail packet here
211
				PacketSendUtility.sendPacket(player, new SM_DELETE_ITEM(item.getObjectId()));
212
				PacketSendUtility.sendPacket(player, new SM_DELETE_ITEM(item.getObjectId()));
212
			}
213
			}
...
...
226
		}
227
		}
227
228
228
		Item kinahItem = inventory.getKinahItem();
229
		Item kinahItem = inventory.getKinahItem();
229
		inventory.increaseKinah(kinahReward / 5);
230
		kinahReward = player.getPrices().getKinahForSell(kinahReward);
231
		inventory.increaseKinah(kinahReward);
230
		PacketSendUtility.sendPacket(player, new SM_UPDATE_ITEM(kinahItem));
232
		PacketSendUtility.sendPacket(player, new SM_UPDATE_ITEM(kinahItem));
231
233
232
		return true;
234
		return true;