테스트

aion-server 4.8

Gitteol
최고관리자 · 1 · 💬 0 클론/새로받기
 4.8 61f661d · 1 commits 새로받기(Pull)
game-server/src/com/aionemu/gameserver/services/trade/PricesService.java
package com.aionemu.gameserver.services.trade;

import com.aionemu.gameserver.configs.main.PricesConfig;
import com.aionemu.gameserver.model.Race;
import com.aionemu.gameserver.model.siege.Influence;

/**
 * Used to get effective prices for the player.<br/>
 * Packets: SM_PRICES, SM_TRADELIST, SM_SELL_ITEM<br/>
 * Services: Teleporter and similar fees
 * 
 * @author Sarynth, wakizashi
 */
public class PricesService {

	/**
	 * Used in SM_PRICES
	 * 
	 * @return buyingPrice
	 */
	public static int getGlobalPrices(Race playerRace) {
		int defaultPrices = PricesConfig.DEFAULT_PRICES;
		float influenceValue = getPriceInfluenceRate(playerRace);
		if (influenceValue == 0.5f) {
			return defaultPrices;
		} else if (influenceValue > 0.5f) {
			float diff = influenceValue - 0.5f;
			return Math.round(defaultPrices - ((diff / 2) * 100));
		} else {
			float diff = 0.5f - influenceValue;
			return Math.round(defaultPrices + ((diff / 2) * 100));
		}
	}

	/**
	 * Used in SM_PRICES
	 */
	public static int getGlobalPricesModifier() {
		return PricesConfig.DEFAULT_MODIFIER;
	}

	/**
	 * Used in SM_PRICES
	 */
	public static int getTaxes(Race playerRace) {
		int defaultTax = PricesConfig.DEFAULT_TAXES;
		float influenceValue = getPriceInfluenceRate(playerRace);
		if (influenceValue >= 0.5f) {
			return defaultTax;
		}
		float diff = 0.5f - influenceValue;
		return Math.round(defaultTax + ((diff / 4) * 100));
	}

	private static float getPriceInfluenceRate(Race playerRace) {
		switch (playerRace) {
			case ASMODIANS:
				return Influence.getInstance().getAsmodianInfluenceRate();
			case ELYOS:
				return Influence.getInstance().getElyosInfluenceRate();
		}
		throw new IllegalArgumentException(playerRace + " is no valid player race.");
	}

	/**
	 * Used in SM_TRADELIST.
	 * 
	 * @return buyPriceModifier
	 */
	public static int getVendorBuyModifier() {
		return PricesConfig.VENDOR_BUY_MODIFIER;
	}

	/**
	 * Used in SM_SELL_ITEM
	 * 
	 * @return The default sellModifier, but some npcs and merchant pets use their own values.
	 */
	public static int getVendorSellModifier() {
		return PricesConfig.VENDOR_SELL_MODIFIER;
	}

	/**
	 * @return The calculated price after taxes and global modifiers.
	 */
	public static long getPriceForService(long basePrice, Race playerRace) {
		// Tricky. Requires multiplication by Prices, Modifier, Taxes
		// In order, and round down each time to match client calculation.
		return (long) ((long) ((long) (basePrice * getGlobalPrices(playerRace) / 100D) * getGlobalPricesModifier() / 100D) * getTaxes(playerRace) / 100D);
	}

	/**
	 * @return The calculated price after taxes, vendor and global modifiers.
	 */
	public static long getBuyPrice(long requiredKinah, Race playerRace) {
		// Requires double precision for 2mil+ kinah items
		return (long) ((long) ((long) ((long) (requiredKinah * getVendorBuyModifier() / 100D) * getGlobalPrices(playerRace) / 100D)
			* getGlobalPricesModifier() / 100D) * getTaxes(playerRace) / 100D);
	}

	/**
	 * @return The calculated Kinah reward after applying sellModifier (default would be 20 = 20% of the original value, see {@link #getVendorSellModifier()}).
	 */
	public static long getSellReward(long kinahValue, int sellModifier) {
		return (long) (kinahValue * sellModifier / 100D);
	}
}

📎 첨부파일

댓글 작성 권한이 없습니다.
🏆 포인트 랭킹 TOP 10
순위 닉네임 포인트
1 no_profile 타키야겐지쪽지보내기 자기소개 아이디로 검색 전체게시물 102,949
2 no_profile 동가리쪽지보내기 자기소개 아이디로 검색 전체게시물 63,733
3 no_profile 라프텔쪽지보내기 자기소개 아이디로 검색 전체게시물 51,771
4 no_profile 불멸의행복쪽지보내기 자기소개 아이디로 검색 전체게시물 36,923
5 서번트쪽지보내기 자기소개 아이디로 검색 전체게시물 35,011
6 no_profile 닥터스쪽지보내기 자기소개 아이디로 검색 전체게시물 29,470
7 no_profile 검은고양이쪽지보내기 자기소개 아이디로 검색 전체게시물 29,077
8 no_profile Revolution쪽지보내기 자기소개 아이디로 검색 전체게시물 28,199
9 no_profile 보거스쪽지보내기 자기소개 아이디로 검색 전체게시물 26,731
10 no_profile 호롤롤로쪽지보내기 자기소개 아이디로 검색 전체게시물 17,020
알림 0