📄 itemutil.cpp
字号:
case Item::ITEM_CLASS_BOMB_MATERIAL: case Item::ITEM_CLASS_ETC: case Item::ITEM_CLASS_KEY: case Item::ITEM_CLASS_BOMB: case Item::ITEM_CLASS_MINE: case Item::ITEM_CLASS_LEARNINGITEM: case Item::ITEM_CLASS_CORPSE: case Item::ITEM_CLASS_SKULL: case Item::ITEM_CLASS_SERUM: case Item::ITEM_CLASS_VAMPIRE_ETC: case Item::ITEM_CLASS_VAMPIRE_PORTAL_ITEM: case Item::ITEM_CLASS_EVENT_GIFT_BOX: case Item::ITEM_CLASS_EVENT_STAR: case Item::ITEM_CLASS_MONEY: case Item::ITEM_CLASS_VAMPIRE_AMULET: case Item::ITEM_CLASS_QUEST_ITEM: case Item::ITEM_CLASS_RELIC: case Item::ITEM_CLASS_BLOOD_BIBLE: case Item::ITEM_CLASS_CASTLE_SYMBOL: case Item::ITEM_CLASS_COUPLE_RING: case Item::ITEM_CLASS_VAMPIRE_COUPLE_RING: case Item::ITEM_CLASS_EVENT_ITEM: case Item::ITEM_CLASS_MOON_CARD: case Item::ITEM_CLASS_SWEEPER:// case Item::ITEM_CLASS_PET_ITEM: case Item::ITEM_CLASS_LUCKY_BAG: return false; default: return true; } return true;}//////////////////////////////////////////////////////////////////////////////// 酒捞袍阑 荐府茄促.//////////////////////////////////////////////////////////////////////////////void repairItem(Item* pItem){ if (pItem != NULL && !pItem->isUnique()) { Item::ItemClass IClass = pItem->getItemClass(); if (IClass == Item::ITEM_CLASS_SLAYER_PORTAL_ITEM) { SlayerPortalItem* pSlayerPortalItem = dynamic_cast<SlayerPortalItem*>(pItem); pSlayerPortalItem->setCharge(pSlayerPortalItem->getMaxCharge()); } else if ( IClass == Item::ITEM_CLASS_OUSTERS_SUMMON_ITEM ) { OustersSummonItem* pOustersSummonItem = dynamic_cast<OustersSummonItem*>(pItem); pOustersSummonItem->setCharge(pOustersSummonItem->getMaxCharge()); } else { // 弥郴 郴备摹甫 掘绢郴辑 Durability_t maxDurability = computeMaxDurability(pItem); // 荐府茄促. pItem->setDurability(maxDurability); } }}//////////////////////////////////////////////////////////////////////////////// 酒捞袍狼 弥措 郴备档甫 掘绢辰促.//////////////////////////////////////////////////////////////////////////////Durability_t computeMaxDurability(Item* pItem){ if (pItem == NULL) return 0;// ItemInfo* pItemInfo = g_pItemInfoManager->getItemInfo(pItem->getItemClass(), pItem->getItemType());// unsigned long maxDurability = pItemInfo->getDurability(); unsigned long maxDurability = pItem->getMaxDurability(); // 100%俊辑 矫累 unsigned long plusPoint = 100; const list<OptionType_t>& optionTypes = pItem->getOptionTypeList(); //OptionType_t OptionType = pItem->getOptionType(); list<OptionType_t>::const_iterator itr; for (itr=optionTypes.begin(); itr!=optionTypes.end(); itr++) { OptionType_t OptionType = *itr; if (OptionType != 0) { OptionInfo* pOptionInfo = g_pOptionInfoManager->getOptionInfo(OptionType); if (pOptionInfo->getClass() == OPTION_DURABILITY) { plusPoint += (pOptionInfo->getPlusPoint()-100); } } } maxDurability = (maxDurability * plusPoint / 100); // 65000 逞绢啊搁 秽荤府抄促 -_-;;; maxDurability = min( (unsigned long)65000, maxDurability ); return (Durability_t)maxDurability;}//////////////////////////////////////////////////////////////////////////////// 藕芒阑 哎酒尝况霖促. //////////////////////////////////////////////////////////////////////////////Bullet_t reloadArmsItem(Item* pGun, Item* pMagazine){ Assert(pGun != NULL); Assert(pMagazine != NULL); // vivid magazine 眉农绰 咯扁 甸绢坷扁 傈俊 茄促. 捞 窃荐绰 公炼扒 reload秦霖促. if (isSuitableMagazine(pGun, pMagazine, true) == false) return false; Item::ItemClass IClass = pGun->getItemClass(); ItemType_t MagazineType = pMagazine->getItemType(); ItemInfo* pItemInfo = g_pItemInfoManager->getItemInfo(Item::ITEM_CLASS_MAGAZINE, MagazineType); MagazineInfo* pMagazineInfo = dynamic_cast<MagazineInfo*>(pItemInfo); Bullet_t BulletCount = pMagazineInfo->getMaxBullets(); Silver_t Silver = pMagazineInfo->getMaxSilver(); if (IClass == Item::ITEM_CLASS_AR) { AR* pAR = dynamic_cast<AR*>(pGun); pAR->setBulletCount(BulletCount); pAR->setSilver(Silver); return pAR->getBulletCount(); } else if (IClass == Item::ITEM_CLASS_SR) { SR* pSR = dynamic_cast<SR*>(pGun); pSR->setBulletCount(BulletCount); pSR->setSilver(Silver); return pSR->getBulletCount(); } else if (IClass == Item::ITEM_CLASS_SG) { SG* pSG = dynamic_cast<SG*>(pGun); pSG->setBulletCount(BulletCount); pSG->setSilver(Silver); return pSG->getBulletCount(); } else if (IClass == Item::ITEM_CLASS_SMG) { SMG* pSMG = dynamic_cast<SMG*>(pGun); pSMG->setBulletCount(BulletCount); pSMG->setSilver(Silver); return pSMG->getBulletCount(); } return 0;}//////////////////////////////////////////////////////////////////////////////// 醚舅阑 哗霖促.//////////////////////////////////////////////////////////////////////////////Bullet_t decreaseBullet(Item* pWeapon) throw(){ __BEGIN_TRY if (pWeapon == NULL) { ofstream file("bulletBug.txt", ios::out | ios::app); file << "decreaseBullet() : pWeapon is NULL" << endl; return 0; } Item::ItemClass IClass = pWeapon->getItemClass(); Bullet_t bullet = 0; Silver_t silver = 0; // Gun class甫 眠啊沁促. by sigi. 2002.5.8 /* if (IClass == Item::ITEM_CLASS_AR || IClass == Item::ITEM_CLASS_SMG || IClass == Item::ITEM_CLASS_SR || IClass == Item::ITEM_CLASS_SG) { Gun* pGun = dynamic_cast<Gun*>(pWeapon); bullet = max(0, (int)(pGun->getBulletCount() - 1)); pGun->setBulletCount(bullet); silver = max(0, (int)(pGun->getSilver() - 1)); pGun->setSilver(silver); } else { filelog("bulletBug.log", "decreaseBullet() : Invalid item class : %s\n", ItemClass2String[IClass].c_str()); throw ("decreaseBullet() : Invalid item class"); } */ ///* if (IClass == Item::ITEM_CLASS_AR) { AR* pAR = dynamic_cast<AR*>(pWeapon); bullet = max(0, (int)(pAR->getBulletCount() - 1)); pAR->setBulletCount(bullet); silver = max(0, (int)(pAR->getSilver() - 1)); pAR->setSilver(silver); } else if (IClass == Item::ITEM_CLASS_SR) { SR* pSR = dynamic_cast<SR*>(pWeapon); bullet = max(0, (int)(pSR->getBulletCount() - 1)); pSR->setBulletCount(bullet); silver = max(0, (int)(pSR->getSilver() - 1)); pSR->setSilver(silver); } else if (IClass == Item::ITEM_CLASS_SG) { SG* pSG = dynamic_cast<SG*>(pWeapon); bullet = max(0, (int)(pSG->getBulletCount() - 1)); pSG->setBulletCount(bullet); silver = max(0, (int)(pSG->getSilver() - 1)); pSG->setSilver(silver); } else if (IClass == Item::ITEM_CLASS_SMG) { SMG* pSMG = dynamic_cast<SMG*>(pWeapon); bullet = max(0, (int)(pSMG->getBulletCount() - 1)); pSMG->setBulletCount(bullet); silver = max(0, (int)(pSMG->getSilver() - 1)); pSMG->setSilver(silver); } else { filelog("bulletBug.log", "decreaseBullet() : Invalid item class : %s\n", ItemClass2String[IClass].c_str()); throw ("decreaseBullet() : Invalid item class"); } //*/ return bullet; __END_CATCH}//////////////////////////////////////////////////////////////////////////////// 巢篮 醚舅狼 肮荐甫 府畔//////////////////////////////////////////////////////////////////////////////Bullet_t getRemainBullet(Item* pWeapon) throw(){ __BEGIN_TRY if (pWeapon == NULL) { return 0; } Item::ItemClass IClass = pWeapon->getItemClass(); // by sigi. 2002.5.16 /* if (pWeapon->isGun()) { Gun* pGun = dynamic_cast<Gun*>(pGun); return pGun->getBulletCount(); } */ if (IClass == Item::ITEM_CLASS_AR) { AR* pAR = dynamic_cast<AR*>(pWeapon); return pAR->getBulletCount(); } else if (IClass == Item::ITEM_CLASS_SR) { SR* pSR = dynamic_cast<SR*>(pWeapon); return pSR->getBulletCount(); } else if (IClass == Item::ITEM_CLASS_SG) { SG* pSG = dynamic_cast<SG*>(pWeapon); return pSG->getBulletCount(); } else if (IClass == Item::ITEM_CLASS_SMG) { SMG* pSMG = dynamic_cast<SMG*>(pWeapon); return pSMG->getBulletCount(); } else { filelog("bullet.log", "getRemainBullet() : Invalid item class : %s\n", ItemClass2String[IClass].c_str()); throw ("getRemainBullet() : Invalid item class"); } return 0; __END_CATCH}//////////////////////////////////////////////////////////////////////////////// 林阑 荐 乐绰 酒捞袍牢啊? //////////////////////////////////////////////////////////////////////////////bool isPortableItem(Item* pItem){ Assert(pItem != NULL);// if ( pItem->isTimeLimitItem() ) return false; switch (pItem->getItemClass()) { case Item::ITEM_CLASS_CORPSE: case Item::ITEM_CLASS_MOTORCYCLE: case Item::ITEM_CLASS_COUPLE_RING: case Item::ITEM_CLASS_VAMPIRE_COUPLE_RING: return false; default: return true; } return false;}//////////////////////////////////////////////////////////////////////////////// 荤侩且 荐 乐绰 酒捞袍牢啊?// 咯扁辑狼 荤侩捞鄂, 荤侩秦辑 荤扼瘤绰 家葛己 酒捞袍阑 富茄促.//////////////////////////////////////////////////////////////////////////////bool isUsableItem(Item* pItem, Creature* pUser){ Assert(pItem != NULL); Assert(pUser != NULL); // 唱吝俊 鞍篮 努贰胶瘤父, 绢恫 巴篮 荤侩且 荐 乐绊, // 绢恫 巴篮 荤侩且 荐 绝绰 巴捞 唱坷瘤 臼阑鳖? //ItemType_t IType = pItem->getItemType(); switch (pItem->getItemClass()) { case Item::ITEM_CLASS_POTION: if (pUser->isSlayer()) return true; break; case Item::ITEM_CLASS_MAGAZINE: if (pUser->isSlayer()) return true; break; case Item::ITEM_CLASS_KEY: if (g_pVariableManager->isSummonMotorcycle() && pUser->isSlayer()) return true; break; case Item::ITEM_CLASS_ETC: if (pUser->isSlayer() && pItem->getItemType() == 1) return true; break; case Item::ITEM_CLASS_SERUM: if (pUser->isVampire()) return true; break; case Item::ITEM_CLASS_VAMPIRE_ETC: if (pUser->isVampire()) return true; break; case Item::ITEM_CLASS_SLAYER_PORTAL_ITEM: if (pUser->isSlayer()) return true; break; case Item::ITEM_CLASS_EVENT_TREE: if ( pItem->getItemType() == 12 || ( pItem->getItemType() >= 26 && pItem->getItemType() <=28 ) ) return true; // 肯己等 飘府 break; case Item::ITEM_CLASS_EVENT_ETC: return true; break; case Item::ITEM_CLASS_COUPLE_RING: if ( pUser->isSlayer() ) return true; break; case Item::ITEM_CLASS_VAMPIRE_COUPLE_RING: if ( pUser->isVampire() ) return true; break; case Item::ITEM_CLASS_DYE_POTION: return true; case Item::ITEM_CLASS_RESURRECT_ITEM: if ( pUser->isFlag(Effect::EFFECT_CLASS_COMA) ) return true; break; case Item::ITEM_CLASS_PUPA: if (pUser->isOusters()) return true; break; case Item::ITEM_CLASS_COMPOS_MEI: if (pUser->isOusters()) return true; break; case Item::ITEM_CLASS_OUSTERS_SUMMON_ITEM: if (pUser->isOusters()) return true; break; case Item::ITEM_CLASS_EFFECT_ITEM: case Item::ITEM_CLASS_PET_ITEM: case Item::ITEM_CLASS_PET_FOOD: case Item::ITEM_CLASS_PET_ENCHANT_ITEM: return true; break; case Item::ITEM_CLASS_EVENT_GIFT_BOX: if ( pItem->getItemType() >= 6 && pItem->getItemType() <= 15 ) return true; if ( pItem->getItemType() >= 19 && pItem->getItemType() <= 21 ) return true; break; default : return false; } return false;}//////////////////////////////////////////////////////////////////////////////// 酒捞袍狼 箭磊甫 临牢促.//////////////////////////////////////////////////////////////////////////////ItemNum_t decreaseItemNum(Item* pItem, Inventory* pInventory, const string& OwnerID, Storage storage, StorageID_t storageID, BYTE x, BYTE y){ Assert(pItem != NULL); Assert(pInventory != NULL); Assert(OwnerID != ""); Assert(isStackable(pItem)); if (pItem->getNum() > 1) { pItem->setNum(pItem->getNum() - 1); // 酒捞袍狼 肮荐甫 窍唱 临牢促. pInventory->decreaseItemNum(); // 牢亥配府 醚 肮荐甫 临牢促. pInventory->decreaseWeight(pItem->getWeight()); // 牢亥配府 醚 公霸甫 临牢促. //pItem->save(OwnerID, storage, storageID, x, y); // 酒捞袍 沥焊甫 历厘茄促. // 酒捞袍 历厘 弥利拳. 2002.7.25 by sigi char pField[80]; sprintf(pField, "Num=%d", pItem->getNum()); pItem->tinysave(pField); return pItem->getNum(); } else // 酒捞袍捞 1俺楼府看栏聪, 昏力茄促. { pInventory->deleteItem(x, y); pItem->destroy(); SAFE_DELETE(pItem); return 0; } return 0;}////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////void processItemBug(Creature* pCreature, Item* pItem){ PlayerCreature* pPC = dynamic_cast<PlayerCreature*>(pCreature); Assert(pPC != NULL); Assert(pItem != NULL); pPC->addItemToGarbage(pItem);}void processItemBugEx(Creature* pCreature, Item* pItem){ PlayerCreature* pPC = dynamic_cast<PlayerCreature*>(pCreature); Assert(pPC != NULL); Assert(pItem != NULL); pPC->addItemToGarbage(pItem); pItem->save(pCreature->getName(), STORAGE_GARBAGE, 0, 0, 0);}bool hasOptionType(const list<OptionType_t>& optionTypes, OptionType_t optionType){ if (optionTypes.empty()) return false; list<OptionType_t>::const_iterator itr; for (itr=optionTypes.begin(); itr!=optionTypes.end(); itr++) { if (*itr==optionType) return true; } return false;}bool hasOptionClass(const list<OptionType_t>& optionTypes, OptionType_t optionType){
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -