📄 itemutil.cpp
字号:
__BEGIN_TRY Assert( pPC != NULL ); TPOINT pt; pt.x = -1; pt.y = -1; Inventory* pInventory = pPC->getInventory(); Item* pCurItem = pInventory->getItem( iX, iY ); if ( pCurItem == NULL ) return pt; ItemType_t itemType = pCurItem->getItemType(); itemType = itemType - start; CoordInven_t startX = iX - itemType % 3; CoordInven_t startY = iY - itemType / 3; if ( pInventory->getWidth() - 3 < startX ) return pt; if ( pInventory->getHeight() - 4 < startY ) return pt; CoordInven_t curIX = 0, curIY = 0; ItemType_t compType = start; for ( curIY = startY; curIY < startY + 4; curIY++ ) { for ( curIX = startX; curIX < startX + 3; curIX++ ) { pCurItem = pInventory->getItem( curIX, curIY ); if ( pCurItem == NULL ) return pt; if ( pCurItem->getItemClass() != Item::ITEM_CLASS_EVENT_TREE || pCurItem->getItemType() != compType ) return pt; compType++; } } pt.x = startX; pt.y = startY; return pt; __END_CATCH}// 牢亥配府狼 (X0, Y0) - (X1, y1) 裹困狼 酒捞袍阑 瘤款促.void deleteInventoryItem( Inventory* pInventory, CoordInven_t invenX0, CoordInven_t invenY0, CoordInven_t invenX1, CoordInven_t invenY1 ){ __BEGIN_TRY CoordInven_t curIX = 0, curIY = 0; Item* pCurItem = 0; // 嘎苗柳 飘府 炼阿阑 瘤款促. for ( curIY = invenY0; curIY <= invenY1; curIY++ ) { for ( curIX = invenX0; curIX <= invenX1; curIX++ ) { pCurItem = pInventory->getItem( curIX, curIY ); if ( pCurItem != NULL ) { // 牢亥配府俊辑 瘤款促. pInventory->deleteItem( pCurItem->getObjectID() ); // DB 俊辑 朝赴促. pCurItem->destroy(); SAFE_DELETE( pCurItem ); } } } __END_CATCH}typedef struct { Item::ItemClass itemClass; ItemType_t itemType; CoordInven_t x; CoordInven_t y; ItemNum_t num;} NewbieItem;const int maxNewbieItemNum = 8;const NewbieItem NewbieItems[maxNewbieItemNum] ={ { Item::ITEM_CLASS_SWORD, 0, 4, 3, 1 }, { Item::ITEM_CLASS_BLADE, 0, 2, 3, 1 }, { Item::ITEM_CLASS_CROSS, 0, 0, 3, 1 }, { Item::ITEM_CLASS_MACE, 0, 0, 0, 1 }, { Item::ITEM_CLASS_AR, 0, 2, 0, 1 }, { Item::ITEM_CLASS_MAGAZINE,2, 4, 0, 20 }, { Item::ITEM_CLASS_POTION, 0, 9, 4, 9 }, { Item::ITEM_CLASS_POTION, 5, 9, 5, 9 },};// 牢亥配府俊 檬焊磊侩 酒捞袍阑 持绢霖促.bool addNewbieItemToInventory( Slayer* pSlayer, bool sendPacket ) throw(Error){ __BEGIN_TRY if( sendPacket ) { filelog("NewbieItemError.log", "Someone request packet to addNewbieItemToInventory() function!"); return false; } Zone* pZone = pSlayer->getZone(); Inventory* pInventory = pSlayer->getInventory(); ObjectRegistry& objectRegister = pZone->getObjectRegistry(); if( pInventory == NULL ) return false; if( pZone == NULL ) return false; if( pInventory->getItemNum() != 0 ) return false; list<OptionType_t> olist; GCCreateItem gcCreateItem; Item::ItemClass bestWeapon = getBestNewbieWeaponClass( pSlayer ); for( int i=0; i<maxNewbieItemNum; i++ ) { Item* pItem = g_pItemFactoryManager->createItem( NewbieItems[i].itemClass, NewbieItems[i].itemType, olist ); pItem->setCreateType( Item::CREATE_TYPE_GAME ); objectRegister.registerObject( pItem ); pItem->setNum( NewbieItems[i].num ); bool weared = false; if( pItem->getItemClass() == bestWeapon ) { if( !pSlayer->isWear( Slayer::WEAR_RIGHTHAND ) ) { pSlayer->wearItem( Slayer::WEAR_RIGHTHAND , pItem ); pItem->create( pSlayer->getName(), STORAGE_GEAR, 0, Slayer::WEAR_RIGHTHAND, 0, pItem->getItemID() ); weared = true; } } if( !weared ) if( pInventory->addItem( NewbieItems[i].x, NewbieItems[i].y, pItem ) ) { pItem->create( pSlayer->getName(), STORAGE_INVENTORY, 0, NewbieItems[i].x, NewbieItems[i].y, pItem->getItemID() ); if( sendPacket ) { /*gcCreateItem.setObjectID( pItem->getObjectID() ); gcCreateItem.setItemClass( pItem->getItemClass() ); gcCreateItem.setItemType( pItem->getItemType() ); gcCreateItem.setObjectType( pItem->getOptionTypeList() ); gcCreateItem.setDurability( pItem->getDurability() ); gcCreateItem.setSilver( pItem->getSilver() ); if (pItem->getItemClass() == Item::ITEM_CLASS_MAGAZINE) { Magazine* pMag = dynamic_cast<Magazine*>(pItem); gcCreateItem.setItemNum(pMag->getNum()); } else { gcCreateItem.setItemNum(pItem->getNum()); } gcCreateItem.setInvenX( NewbieItems[i][2] ); gcCreateItem.setInvenY( NewbieItems[i][3] ); pPlayer->sendPacket( &gcCreateItem );*/ } } } return true; __END_CATCH}bool addNewbieGoldToInventory( Slayer* pSlayer, bool sendPacket ) throw(Error){ __BEGIN_TRY if( sendPacket ) { filelog("NewbieItemError.log", "Someone request packet to addNewbieGoldToInventory() function!"); return false; } if( pSlayer == NULL ) return false; if( pSlayer->getGold() != 0 ) return false; pSlayer->setGoldEx(500); return true; __END_CATCH}bool addNewbieItemToGear( Slayer* pSlayer, bool sendPacket ) throw(Error){ __BEGIN_TRY if( sendPacket ) { filelog("NewbieItemError.log", "Someone request packet to addNewbieItemToGear() function!"); return false; } if( pSlayer == NULL ) return false; Zone* pZone = pSlayer->getZone(); ObjectRegistry& objectRegister = pZone->getObjectRegistry(); if( pZone == NULL ) return false; list<OptionType_t> olist; if( !pSlayer->isWear( Slayer::WEAR_BODY ) && !pSlayer->isWear( Slayer::WEAR_LEG ) ) { Item* pCoat = g_pItemFactoryManager->createItem( Item::ITEM_CLASS_COAT, ((pSlayer->getSex()==MALE)?0:1), olist ); Item* pTrouser = g_pItemFactoryManager->createItem( Item::ITEM_CLASS_TROUSER, ((pSlayer->getSex()==MALE)?0:1), olist ); pCoat->setCreateType( Item::CREATE_TYPE_GAME ); pTrouser->setCreateType( Item::CREATE_TYPE_GAME ); objectRegister.registerObject( pCoat ); objectRegister.registerObject( pTrouser ); pCoat->create( pSlayer->getName(), STORAGE_GEAR, 0, Slayer::WEAR_BODY, 0, pCoat->getItemID() ); pTrouser->create( pSlayer->getName(), STORAGE_GEAR, 0, Slayer::WEAR_LEG, 0, pTrouser->getItemID() ); pSlayer->wearItem( Slayer::WEAR_BODY, pCoat ); pSlayer->wearItem( Slayer::WEAR_LEG , pTrouser ); } return true; __END_CATCH}bool addNewbieGoldToInventory( Ousters* pOusters, bool sendPacket = false ) throw(Error){ __BEGIN_TRY if( sendPacket ) { filelog("NewbieItemError.log", "Someone request packet to addNewbieItemToInventory() function!"); return false; } if( pOusters == NULL ) return false; if( pOusters->getGold() != 0 ) return false; pOusters->setGoldEx(500); return true; __END_CATCH}bool addNewbieItemToInventory( Ousters* pOusters, bool sendPacket = false ) throw(Error){ __BEGIN_TRY if( sendPacket ) { filelog("NewbieItemError.log", "Someone request packet to addNewbieGoldToInventory() function!"); return false; } if( pOusters == NULL ) return false; Zone* pZone = pOusters->getZone(); if ( pZone == NULL ) return false; Inventory* pInventory = pOusters->getInventory(); if ( pInventory == NULL ) return false; if ( pInventory->getItemNum() != 0 ) return false; Item* pPupa = g_pItemFactoryManager->createItem( Item::ITEM_CLASS_PUPA, 0, list<OptionType_t>() ); Item* pLarva = g_pItemFactoryManager->createItem( Item::ITEM_CLASS_LARVA, 0, list<OptionType_t>() ); Assert( pPupa != NULL ); Assert( pLarva != NULL ); pPupa->setNum(9); pLarva->setNum(9); pPupa->setCreateType( Item::CREATE_TYPE_GAME ); pLarva->setCreateType( Item::CREATE_TYPE_GAME ); pZone->registerObject( pPupa ); pZone->registerObject( pLarva ); _TPOINT tp; pInventory->addItem( pPupa, tp ); pPupa->create( pOusters->getName(), STORAGE_INVENTORY, 0, tp.x, tp.y, pPupa->getItemID() ); pInventory->addItem( pLarva, tp ); pLarva->create( pOusters->getName(), STORAGE_INVENTORY, 0, tp.x, tp.y, pLarva->getItemID() ); return true; __END_CATCH}bool addNewbieItemToGear( Ousters* pOusters, bool sendPacket = false ) throw(Error){ __BEGIN_TRY if( sendPacket ) { filelog("NewbieItemError.log", "Someone request packet to addNewbieItemToInventory() function!"); return false; } if( pOusters == NULL ) return false; Zone* pZone = pOusters->getZone(); Assert( pZone != NULL ); if ( pOusters->getWearItem(Ousters::WEAR_RIGHTHAND) != NULL ) return false; Item* pWeapon = g_pItemFactoryManager->createItem( Item::ITEM_CLASS_OUSTERS_CHAKRAM, 0, list<OptionType_t>() ); Assert( pWeapon != NULL ); pWeapon->setCreateType( Item::CREATE_TYPE_GAME ); pZone->registerObject( pWeapon ); pOusters->wearItem(Ousters::WEAR_RIGHTHAND, pWeapon); pWeapon->create( pOusters->getName(), STORAGE_GEAR, 0, Ousters::WEAR_RIGHTHAND, 0, pWeapon->getItemID() ); return true; __END_CATCH}Item::ItemClass getBestNewbieWeaponClass(Slayer* pSlayer) throw (Error){ __BEGIN_TRY Assert(pSlayer!=NULL); Attr_t STR = pSlayer->getSTR(); Attr_t DEX = pSlayer->getDEX(); Attr_t INT = pSlayer->getINT(); // STR if (STR>=DEX && STR>=INT) { return (rand()%2? Item::ITEM_CLASS_SWORD : Item::ITEM_CLASS_BLADE); } // DEX else if (DEX>=STR && DEX>=INT) { return Item::ITEM_CLASS_AR; } // INT return (rand()%2? Item::ITEM_CLASS_CROSS : Item::ITEM_CLASS_MACE); __END_CATCH}void makeOptionList(const string& options, list<OptionType_t>& optionList) throw(Error){ uint a = 0, b = 0; ////////////////////////////////////////////// // DEX+1,INT+2 // a ba b ////////////////////////////////////////////// optionList.clear(); if (options.size()<=1) return; do { b = options.find_first_of(',', a); string optionName = trim( options.substr(a, b-a) ); OptionType_t optionType; try { optionType = g_pOptionInfoManager->getOptionType(optionName); } catch (NoSuchElementException&) { throw Error("弊繁 可记捞 绝窜促."); } optionList.push_back( optionType ); a = b+1; } while (b!=string::npos && b < options.size() -1);}voidsaveDissectionItem(Creature* pCreature, Item* pTreasure, int x, int y) throw (Error){ __BEGIN_TRY Assert(pCreature!=NULL); Assert(pTreasure!=NULL); // relic捞 酒囱 版快父.. DB俊 酒捞袍阑 积己茄促. // 乔狼 己辑老 版快 捞固 DB俊 乐栏骨肺 DB甫 诀单捞飘秦霖促. switch (pTreasure->getItemClass()) { case Item::ITEM_CLASS_RELIC: { // Relic篮 DB俊 历厘且 鞘夸 绝促. } break; case Item::ITEM_CLASS_BLOOD_BIBLE: case Item::ITEM_CLASS_CASTLE_SYMBOL: case Item::ITEM_CLASS_SWEEPER: { char query[128]; sprintf( query, "ObjectID = %lu, Storage=%u, StorageID=%u, X=%u, Y=%u", pTreasure->getObjectID(), STORAGE_ZONE, pCreature->getZone()->getZoneID(), x, y); pTreasure->tinysave( query ); } break; default: { ItemInfo* pItemInfo = g_pItemInfoManager->getItemInfo( pTreasure->getItemClass(), pTreasure->getItemType() ); Assert(pItemInfo!=NULL); // 蜡聪农 酒捞袍牢 版快绰 // 酒捞袍 磊眉俊 蜡聪农 汲沥阑 秦林绊 // DB俊 蜡聪农 酒捞袍狼 俺荐甫 函版矫难霖促. // // (*) 阁胶磐啊 磷菌阑 锭, // 阁胶磐 救俊 乐绰 酒捞袍俊绰 蜡聪农 汲沥档 救窍绊 // DB俊档 俺荐 函版阑 救茄促. 弊贰辑, 瘤况临锭档 公矫茄促. // 泅犁 蜡聪农 酒捞袍篮 阁胶磐甫 烹秦辑父 唱鸥唱绊 // CGDissectionCorpse甫 烹秦辑 积己(!)登绊 // EffectDecayItem阑 烹秦辑父 力芭等促. if (pItemInfo->isUnique()) { pTreasure->setUnique(); UniqueItemManager::createItem(pTreasure->getItemClass(), pTreasure->getItemType()); filelog("uniqueItem.txt", "[CGDissectionCorpse] %s %s", pCreature->getName().c_str(), pTreasure->toString().c_str()); } // 扁粮狼 ItemID甫 弊措肺 蜡瘤茄促. // ItemID啊 0捞搁.. create()且锭 促矫 ItemID甫 罐绰促. // by sigi. 2002.10.28 pTreasure->create("", STORAGE_ZONE, pCreature->getZone()->getZoneID(), x, y, pTreasure->getItemID() ); } } __END_CATCH}bool canDecreaseDurability( Item* pItem ) throw(Error){ __BEGIN_TRY if ( pItem == NULL ) return false; if ( pItem->isUnique() ) return false; if ( pItem->isTimeLimitItem() ) return false; if ( pItem->isQuestItem() ) return false; if ( pItem->isFlagItem() ) return false; switch ( pItem->getItemClass() ) { case Item::ITEM_CLASS_VAMPIRE_AMULE
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -