📄 pricemanager.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 + -