⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 pricemanager.cpp

📁 天之炼狱1服务器端源文件游戏服务端不完整
💻 CPP
字号:
//////////////////////////////////////////////////////////////////////////////// Filename    : PriceManager.cpp// Written By  : 辫己刮// Description :// 酒捞袍阑 惑痢俊辑 荤绊 迫 锭, 弊 概概啊拜阑 搬沥窍绰 努贰胶捞促.// 郴何利栏肺绰 ItemInfoManager狼 盔贰 啊拜阑 捞侩秦 拌魂阑 茄促.//////////////////////////////////////////////////////////////////////////////#include "PriceManager.h"#include "ItemInfoManager.h"#include "OptionInfo.h"#include "Item.h"#include "ItemUtil.h"#include "Creature.h"#include "Slayer.h"#include "Vampire.h"#include "Ousters.h"#include "VariableManager.h"#include "GamePlayer.h"#include "item/Skull.h"#include "item/SlayerPortalItem.h"#include "item/VampirePortalItem.h"#include "item/OustersSummonItem.h"// global variable definitionPriceManager* g_pPriceManager = NULL;// constantsconst uint PORTAL_ITEM_CHARGE_PRICE = 5000;const uint SUMMON_ITEM_CHARGE_PRICE = 1000;//////////////////////////////////////////////////////////////////////////////// getPrice()// 酒捞袍 沥焊甫 曼炼秦 角力 拱扒蔼阑 沥茄促.// nDiscount 函荐(归盒啦)甫 捞侩秦 拱扒蔼阑 牧飘费且 荐 乐促.//////////////////////////////////////////////////////////////////////////////Price_t PriceManager::getPrice(Item* pItem, MarketCond_t nDiscount, ShopRackType_t shopType, Creature* pCreature) const{	// 梅俊 傍楼肺 霖 酒捞袍篮 迫酒档 1盔观俊 给 掘绰促. 2003. 1. 15. Sequoia	if (pItem->getCreateType() == Item::CREATE_TYPE_GAME ) return (Price_t)1;	// 涅胶飘 酒捞袍篮 坷叼锅~~~ 2003. 4. 14. Sequoia	if ( pItem->isTimeLimitItem() ) return (Price_t)50;	// 酒捞袍狼 盔贰 啊拜阑 掘绢辰促.	ItemInfo* pItemInfo = g_pItemInfoManager->getItemInfo(pItem->getItemClass(), pItem->getItemType());	double originalPrice = pItemInfo->getPrice();	double finalPrice    = 0;	if ( pItem->getGrade() != -1 )	{		double gradePercent = 80 + ( 5 * pItem->getGrade() );//		originalPrice = getPercentValue( originalPrice, gradePercent );		originalPrice *= (gradePercent/100.0);	}	// 浇饭捞绢 器呕 鞍篮 版快俊绰 盔贰 啊拜俊促 泅犁 瞒瘤 荐父怒狼 啊拜阑 歹秦具 茄促.	if (pItem->getItemClass() == Item::ITEM_CLASS_SLAYER_PORTAL_ITEM)	{		SlayerPortalItem* pSlayerPortalItem = dynamic_cast<SlayerPortalItem*>(pItem);		originalPrice += (pSlayerPortalItem->getCharge() * PORTAL_ITEM_CHARGE_PRICE);	}	else if (pItem->getItemClass() == Item::ITEM_CLASS_VAMPIRE_PORTAL_ITEM)	{		VampirePortalItem* pVampirePortalItem = dynamic_cast<VampirePortalItem*>(pItem);		originalPrice += (pVampirePortalItem->getCharge() * PORTAL_ITEM_CHARGE_PRICE);	}	else if (pItem->getItemClass() == Item::ITEM_CLASS_OUSTERS_SUMMON_ITEM)	{		OustersSummonItem* pOustersSummonItem = dynamic_cast<OustersSummonItem*>(pItem);		originalPrice += (pOustersSummonItem->getCharge() * SUMMON_ITEM_CHARGE_PRICE);	}	// 可记捞 乐促搁 可记父怒狼 啊拜阑 蚌秦具 茄促.	const list<OptionType_t>& optionTypes = pItem->getOptionTypeList();	if (!optionTypes.empty())	{		finalPrice = 0;		// 啊拜 = (盔贰 啊拜 * 可记狼 PriceMultiplier / 100) + ..		double priceMultiplier = 0;		list<OptionType_t>::const_iterator itr;		for (itr=optionTypes.begin(); itr!=optionTypes.end(); itr++)		{			OptionInfo* pOptionInfo = g_pOptionInfoManager->getOptionInfo( *itr );			Assert(pOptionInfo != NULL);			priceMultiplier = (double)(pOptionInfo->getPriceMultiplier());			finalPrice += (originalPrice* priceMultiplier / 100);		}		originalPrice = finalPrice;	}	// 酒捞袍捞 颊惑登菌促搁 颊惑等 父怒狼 啊拜阑 憋酒具 茄促.	double maxDurability = (double)computeMaxDurability(pItem);	double curDurability = (double)(pItem->getDurability());	// 酒捞袍 吝俊 郴备档啊 绝绰 巴甸捞 粮犁窍扁 锭巩俊 贸府秦霖促.	if (maxDurability > 1) finalPrice = originalPrice* curDurability / maxDurability;	else                   finalPrice = originalPrice;	// 惑痢 矫技俊 蝶扼 啊拜阑 促矫 炼沥秦霖促.	finalPrice = finalPrice* nDiscount / 100;	// 惑痢狼 辆幅俊 蝶扼 啊拜阑 促矫 炼沥秦霖促.	if (shopType == SHOP_RACK_MYSTERIOUS)	{		finalPrice *= 10;	}	// 农府媚狼 函拳 夸家俊 蝶扼 啊拜阑 促矫 炼沥秦霖促.	if (pCreature != NULL)	{		if (pCreature->isSlayer())		{			Slayer* pSlayer = dynamic_cast<Slayer*>(pCreature);			Attr_t CSTR = pSlayer->getSTR(ATTR_CURRENT);			Attr_t CDEX = pSlayer->getDEX(ATTR_CURRENT);			Attr_t CINT = pSlayer->getINT(ATTR_CURRENT);			if ((CSTR + CDEX + CINT <= 40) &&				(pItem->getItemClass() == Item::ITEM_CLASS_POTION) && 				(pItem->getItemType() == 0 || pItem->getItemType() == 5))			{				finalPrice = getPercentValue((int)finalPrice, 70);			}		}		else if (pCreature->isVampire())		{			// 轨颇捞绢啊 秦榜阑 迫 版快俊绰 秦榜狼 啊拜阑 馆栏肺 临咯霖促. 			if (pItem->getItemClass() == Item::ITEM_CLASS_SKULL)			{				finalPrice = finalPrice / 2.0;			}		}		else if (pCreature->isOusters())		{			// 酒快胶磐令啊 秦榜阑 迫 版快俊绰 秦榜狼 啊拜狼 75%.			if (pItem->getItemClass() == Item::ITEM_CLASS_SKULL)			{				finalPrice *= 0.75;			}		}	}	// 蜡丰 荤侩磊捞绊 蜡丰粮 捞搁	if ( g_pVariableManager->getVariable( PREMIUM_HALF_EVENT ) )	{		if (			pItem->getItemClass() == Item::ITEM_CLASS_POTION || pItem->getItemClass() == Item::ITEM_CLASS_SERUM ||			pItem->getItemClass() == Item::ITEM_CLASS_LARVA || pItem->getItemClass() == Item::ITEM_CLASS_PUPA ||			pItem->getItemClass() == Item::ITEM_CLASS_COMPOS_MEI		)		{			if ( pCreature->isPC() )			{				PlayerCreature* pPC = dynamic_cast<PlayerCreature*>(pCreature);				GamePlayer* pGamePlayer = dynamic_cast<GamePlayer*>(pPC->getPlayer());				if ( pGamePlayer->isPayPlaying() )				{					// 馆 蔼.					finalPrice = finalPrice / 2;				}			}		}	}	// Blood Bible 焊呈胶 利侩	if (pItem->getItemClass() == Item::ITEM_CLASS_POTION || pItem->getItemClass() == Item::ITEM_CLASS_SERUM )	{		if ( pCreature->isPC() )		{			PlayerCreature* pPC = dynamic_cast<PlayerCreature*>(pCreature);			int ratio = pPC->getPotionPriceRatio();			if ( ratio != 0 )			{				// ratio 蔼捞 付捞呈胶 蔼捞促.				finalPrice += getPercentValue( (int)finalPrice, ratio );			}		}	}	return max(1, (int)finalPrice);}//////////////////////////////////////////////////////////////////////////////// getRepairPrice()// 酒捞袍阑 荐府且 锭 靛绰 厚侩阑 府畔茄促.// 酒捞袍 荐府厚绰 肯傈洒 冠混抄 酒捞袍老 版快 // 盔贰 酒捞袍 啊拜狼 10盒狼 1捞促.//////////////////////////////////////////////////////////////////////////////Price_t PriceManager::getRepairPrice(Item* pItem, Creature* pCreature) const{	// 酒捞袍狼 盔贰 啊拜阑 掘绢辰促.	ItemInfo* pItemInfo = g_pItemInfoManager->getItemInfo(pItem->getItemClass(), pItem->getItemType());	double originalPrice = pItemInfo->getPrice();	double finalPrice    = 0;	if ( pItem->getGrade() != -1 )	{		double gradePercent = 80 + ( 5 * pItem->getGrade() );//		originalPrice = getPercentValue( originalPrice, gradePercent );		originalPrice *= (gradePercent/100.0);	}	// 浇饭捞绢 器呕 鞍篮 版快俊绰 荐府甫 且 荐绰 绝瘤父, 瞒瘤甫 疵副 荐啊 乐促.	if (pItem->getItemClass() == Item::ITEM_CLASS_SLAYER_PORTAL_ITEM)	{		SlayerPortalItem* pSlayerPortalItem = dynamic_cast<SlayerPortalItem*>(pItem);		int MaxCharge = pSlayerPortalItem->getMaxCharge();		int CurCharge = pSlayerPortalItem->getCharge();		return (MaxCharge - CurCharge) * PORTAL_ITEM_CHARGE_PRICE;	}	if (pItem->getItemClass() == Item::ITEM_CLASS_OUSTERS_SUMMON_ITEM)	{		OustersSummonItem* pOustersSummonItem = dynamic_cast<OustersSummonItem*>(pItem);		int MaxCharge = pOustersSummonItem->getMaxCharge();		int CurCharge = pOustersSummonItem->getCharge();		return (MaxCharge - CurCharge) * SUMMON_ITEM_CHARGE_PRICE;	}	// 可记捞 乐促搁 可记父怒狼 啊拜阑 蚌秦具 茄促.	const list<OptionType_t>& optionTypes = pItem->getOptionTypeList();	if (!optionTypes.empty())	{		finalPrice = 0;		// 啊拜 = (盔贰 啊拜 * 可记狼 PriceMultiplier狼 醚钦 / 100) * 可记狼 俺荐		double priceMultiplier = 0;		list<OptionType_t>::const_iterator itr;		for (itr=optionTypes.begin(); itr!=optionTypes.end(); itr++)		{			OptionInfo* pOptionInfo = g_pOptionInfoManager->getOptionInfo( *itr );			Assert(pOptionInfo != NULL);			priceMultiplier = (double)(pOptionInfo->getPriceMultiplier());			finalPrice += (originalPrice* priceMultiplier / 100);		}		originalPrice = finalPrice;	}	/*	if (pItem->getOptionType() != 0)	{		OptionInfo* pOptionInfo = g_pOptionInfoManager->getOptionInfo(pItem->getOptionType());		Assert(pOptionInfo != NULL);		double priceMultiplier = (double)(pOptionInfo->getPriceMultiplier());		originalPrice = originalPrice * priceMultiplier / 100;	}	*/	// 酒捞袍捞 颊惑登菌促搁 颊惑等 父怒狼 啊拜阑 憋酒具 茄促.	double maxDurability = (double)computeMaxDurability(pItem);	double curDurability = (double)(pItem->getDurability());	// 酒捞袍 吝俊 郴备档啊 绝绰 巴甸捞 粮犁窍扁 锭巩俊 贸府秦霖促.	if (maxDurability != 0)	{		// 酒捞袍狼 泅犁 郴备档啊 钙胶扼搁 府畔茄促.		if (curDurability == maxDurability)		{			return 0;		}		// 泅犁 郴备档甫 弥郴 郴备档肺 唱穿搁 弊 酒捞袍狼 颊惑等 沥档啊 唱柯促.		// 捞甫 盔贰 啊拜俊促 蚌窍搁, 郴备档啊 憋牢 父怒 酒捞袍狼 蔼捞 冻绢瘤霸 等促.		finalPrice = originalPrice * curDurability / maxDurability;	}	else	{		// 郴备档啊 绝绰 酒捞袍篮 颊惑登瘤啊 臼栏骨肺, 		// 郴备档甫 绊妨茄 啊拜篮 盔贰狼 蔼苞 度鞍促.		finalPrice = originalPrice;	}	// 荐府 厚侩篮 盔贰 蔼狼 10盒狼 1捞促.	finalPrice = (originalPrice - finalPrice) / 10.0;	if (finalPrice < 1.0)	{		return 1;	}	return max(0, (int)finalPrice);}//////////////////////////////////////////////////////////////////////////////// getSilverCoatingPrice()// 酒捞袍阑 篮 档陛且 锭狼 啊拜捞促.//////////////////////////////////////////////////////////////////////////////Price_t PriceManager::getSilverCoatingPrice(Item* pItem, Creature* pCreature) const{	if (pItem == NULL) return 0;	switch (pItem->getItemClass())	{		case Item::ITEM_CLASS_BLADE:		case Item::ITEM_CLASS_SWORD:		case Item::ITEM_CLASS_CROSS:		case Item::ITEM_CLASS_MACE:			break;		default:			return 0;	}	ItemInfo* pItemInfo  = g_pItemInfoManager->getItemInfo(pItem->getItemClass(), pItem->getItemType());	double    maxSilver  = pItemInfo->getMaxSilver();	double    finalPrice = 0;	// 东户栏肺 笼绢持篮 篮狼 啊拜捞促.	finalPrice = maxSilver; 	return max(0, (int)finalPrice);}//////////////////////////////////////////////////////////////////////////////// getStashPrice()// 焊包窃 啊拜阑 府畔茄促. // 弊犯霸 磊林 函悼瞪 啊拜捞 酒聪扁 锭巩俊 内靛俊促 笼绢持绢 初疽促.//////////////////////////////////////////////////////////////////////////////Price_t PriceManager::getStashPrice(BYTE index, Creature* pCreature) const{	Price_t price = 0;	switch (index)	{		case 1: price = 100000; break;		case 2: price = 1000000; break;		case 3: price = 10000000; break;		default: 			cerr << "PriceManager::getStashPrice() : Unknown Stash Index" << endl;			Assert(false);	}	if (pCreature != NULL)	{		if (pCreature->isSlayer())		{		}		else if (pCreature->isVampire())		{		}		else if (pCreature->isOusters())		{		}	}	return price;}//////////////////////////////////////////////////////////////////////////////// 捞亥飘侩 啊拜 窃荐// 2001斥 农府胶付胶 捞亥飘锭 荤侩窍看带 喊 酒捞袍俊 措茄 沥焊捞促.// 2002斥 绢赴捞朝俊档 鞍篮 捞亥飘甫 荤侩窍扁肺 窍看扁 锭巩俊 林籍阑 秦瘤//// 喊 捞亥飘啊 菊栏肺 老绢朝 荐 乐绰 包拌肺,// 捞抚阑 STAR_EVENT_CODE肺 函版窍绰 巴阑 绊妨秦具 窍摆促.//////////////////////////////////////////////////////////////////////////////int PriceManager::getStarPrice(Item* pItem, XMAS_STAR& star) const{	Assert(pItem != NULL);	ItemType_t   IType = pItem->getItemType();	OptionType_t OType = pItem->getFirstOptionType();	Assert(OType != 0);	OptionInfo* pOptionInfo = g_pOptionInfoManager->getOptionInfo(OType);	Assert(pOptionInfo!=NULL);	OptionClass OClass = pOptionInfo->getClass();	switch (OClass)	{		case OPTION_DAMAGE:       star.color = STAR_COLOR_BLACK; break;		case OPTION_STR:          star.color = STAR_COLOR_RED;   break;		case OPTION_INT:          star.color = STAR_COLOR_BLUE;  break;		case OPTION_DEX:          star.color = STAR_COLOR_GREEN; break;		case OPTION_ATTACK_SPEED: star.color = STAR_COLOR_CYAN;  break;		default: Assert(false); break;	}	star.amount = (IType - 1) * 20;	return 0;}int PriceManager::getBallPrice(int price, XMAS_STAR& star) const{	star.amount = price;	star.color = STAR_COLOR_PINK;	return 0;}// Mysterious Item 啊拜// itemClass客 pCreature狼 瓷仿摹俊 蝶扼辑 啊拜捞 崔扼柳促.Price_t PriceManager::getMysteriousPrice(Item::ItemClass itemClass, Creature* pCreature) const{	int multiplier = 1;	if (pCreature->isSlayer())	{		Slayer* pSlayer = dynamic_cast<Slayer*>(pCreature);		Attr_t CSTR = pSlayer->getSTR(ATTR_BASIC);		Attr_t CDEX = pSlayer->getDEX(ATTR_BASIC);		Attr_t CINT = pSlayer->getINT(ATTR_BASIC);		Attr_t CSUM = CSTR + CDEX + CINT;		// 0~20 荤捞		multiplier = CSUM / 15;	}	else if (pCreature->isVampire())	{		Vampire* pVampire = dynamic_cast<Vampire*>(pCreature);		Level_t CLevel = pVampire->getLevel();		// 0~20 荤捞		multiplier = CLevel / 5;	}	else if (pCreature->isOusters())	{		Ousters* pOusters = dynamic_cast<Ousters*>(pCreature);		Level_t CLevel = pOusters->getLevel();		// 0~20 荤捞		multiplier = CLevel / 5;	}	// 1~20荤捞	multiplier = max(1, multiplier);	// 啊拜 乞闭阑 舅酒柯促.	InfoClassManager* pInfoClass = g_pItemInfoManager->getInfoManager( itemClass );	Assert(pInfoClass!=NULL);	// 啊拜 乞闭 * 瓷仿摹 厚啦?	int finalPrice = (int)pInfoClass->getAveragePrice() * multiplier;	// Blood Bible 焊呈胶 利侩	if ( pCreature->isPC() )	{		PlayerCreature* pPC = dynamic_cast<PlayerCreature*>(pCreature);		int ratio = pPC->getGamblePriceRatio();		if ( ratio != 0 )		{			// ratio 蔼篮 付捞呈胶 蔼捞促.			finalPrice += getPercentValue( finalPrice, ratio );		}	}	return finalPrice;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -