cgaddzonetoinventoryhandler.cpp
来自「dk1游戏的原代码文件,完整.编译系统redhat7.3,mysql 3.23 」· C++ 代码 · 共 715 行 · 第 1/2 页
CPP
715 行
//////////////////////////////////////////////////////////////////////////////// Filename : CGAddZoneToInventoryHandler.cc// Written By : elca@ewestsoft.com// Description ://////////////////////////////////////////////////////////////////////////////#include "CGAddZoneToInventory.h"#ifdef __GAME_SERVER__ #include "GamePlayer.h" #include "Zone.h" #include "PlayerCreature.h" #include "Inventory.h" #include "Item.h" #include "Relic.h" #include "RelicUtil.h" #include "Timeval.h" #include "EffectManager.h" #include "EffectPrecedence.h" #include "ItemUtil.h" #include "ItemFactoryManager.h" #include "CreatureUtil.h" #include "ZoneUtil.h" #include "LogClient.h" #include "CombatInfoManager.h" #include "ZoneGroupManager.h" #include "PacketUtil.h" #include "BloodBible.h" #include "StringPool.h" #include "ShrineInfoManager.h" #include "Belt.h" #include "Sweeper.h" #include "OustersArmsband.h" #include "VariableManager.h" #include "Gpackets/GCDeleteandPickUpOK.h" #include "Gpackets/GCDeleteObject.h" #include "Gpackets/GCCannotAdd.h" #include "Gpackets/GCSystemMessage.h" #include "Gpackets/GCAddEffect.h" #include "Gpackets/GCCreateItem.h" #include "Gpackets/GCNoticeEvent.h" #include "Gpackets/GCDeleteInventoryItem.h" #include "EffectHasSlayerRelic.h" #include "EffectHasVampireRelic.h" #include "EffectRelicPosition.h" #include "EffectHasSweeper.h" #include <stdio.h>#endif////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////void CGAddZoneToInventoryHandler::execute (CGAddZoneToInventory* pPacket , Player* pPlayer) throw (ProtocolException, Error){ __BEGIN_TRY __BEGIN_DEBUG_EX __BEGIN_DEBUG #ifdef __GAME_SERVER__ Assert(pPacket != NULL); Assert(pPlayer != NULL); try { GamePlayer* pGamePlayer = dynamic_cast<GamePlayer*>(pPlayer); Creature* pCreature = pGamePlayer->getCreature(); if (pCreature == NULL) return; PlayerCreature* pPC = dynamic_cast<PlayerCreature*>(pCreature); bool Merge = false; // 酒捞袍捞 般媚辑 甸绢哎 版快 眉农 函荐 bool Success = false; // 酒捞袍阑 Adding 且荐 乐绰瘤 绝绰瘤 咯何 Zone* pZone = pPC->getZone(); Coord_t ZoneX = pPacket->getZoneX(); Coord_t ZoneY = pPacket->getZoneY(); // 官款靛甫 逞绢啊瘤绰 臼绰瘤 眉农茄促. if (!isValidZoneCoord(pZone, ZoneX, ZoneY)) goto ERROR; Tile& _Tile = pZone->getTile(ZoneX , ZoneY); // 鸥老俊 酒捞袍捞 粮犁窍绰瘤甫 眉农茄促. if (!_Tile.hasItem()) goto ERROR; // 酒捞袍 器牢磐啊 澄捞芭唱, 葛磐荤捞努捞扼搁 林阑 荐 绝促. Item* pItem = _Tile.getItem(); if (pItem == NULL || !isPortableItem(pItem)) goto ERROR; // 酒捞袍阑 林阑 荐 绝绰 惑怕扼搁 林阑 荐 绝促. -_-; if (!isAbleToPickupItem(pPC, pItem)) goto ERROR; // OID啊 老摹窍绰瘤甫 八荤秦具 茄促. ObjectID_t ItemObjectID = pItem->getObjectID(); if (ItemObjectID != pPacket->getObjectID()) goto ERROR; // Inventory甫 罐酒柯促. Inventory* pInventory = pPC->getInventory(); CoordInven_t InvenX = pPacket->getInvenX(); CoordInven_t InvenY = pPacket->getInvenY(); // 牢亥配府 谅钎 檬苞扼搁 俊矾促. if (InvenX >= 10 || InvenY >= 6) goto ERROR; // 弊 谅钎俊 酒捞袍阑 歹且 荐 绝绢档 俊矾促. if (!pInventory->canAdding(InvenX, InvenY, pItem)) goto ERROR; // 乔狼 己辑老 版快 林匡 荐 乐绰瘤 犬牢茄促. --> 捞 内靛绰 isAbleToPickup 郴何肺 颗板促.. // 快急鼻捞 嘿绢乐绰 酒捞袍老 版快俊绰 林牢 肚绰 林牢颇萍啊 酒聪扼搁 林阑 荐 绝促. // 芳腐老 版快俊绰 快急鉴困 捞棋飘甫 昏力秦霖促. if ( isRelicItem( pItem ) && pItem->isFlag(Effect::EFFECT_CLASS_PRECEDENCE)) { EffectManager& effectManager = pItem->getEffectManager(); effectManager.deleteEffect(Effect::EFFECT_CLASS_PRECEDENCE); pItem->removeFlag(Effect::EFFECT_CLASS_PRECEDENCE); } if (pItem->isFlag(Effect::EFFECT_CLASS_PRECEDENCE)) { Timeval currentTime; getCurrentTime(currentTime); EffectManager& rEffectManager = pItem->getEffectManager(); EffectPrecedence* pEffectPrecedence = dynamic_cast<EffectPrecedence*>(rEffectManager.findEffect(Effect::EFFECT_CLASS_PRECEDENCE)); Assert(pEffectPrecedence != NULL); if (pEffectPrecedence->getDeadline() < currentTime) { // 矫埃捞 瘤车促搁 酒公唱 林阑 荐 乐促. 歹阂绢 咯扁辑 捞棋飘甫 昏力秦霖促. rEffectManager.deleteEffect(Effect::EFFECT_CLASS_PRECEDENCE); pItem->removeFlag(Effect::EFFECT_CLASS_PRECEDENCE); } else { // 矫埃捞 酒流 瘤唱瘤 臼疽促搁, 林牢 肚绰 林牢 颇萍父捞 林阑 荐 乐促. if ((pEffectPrecedence->getHostName() == pPC->getName()) || (pPC->getPartyID() != 0 && pPC->getPartyID() == pEffectPrecedence->getHostPartyID())) { // 林阑 荐 乐促. 捞棋飘甫 昏力秦 霖促. rEffectManager.deleteEffect(Effect::EFFECT_CLASS_PRECEDENCE); pItem->removeFlag(Effect::EFFECT_CLASS_PRECEDENCE); } else { // 林阑 荐 绝促. goto ERROR; } } }/*#ifdef __XMAS_EVENT_CODE__ // 林栏妨绰 酒捞袍捞 踌祸 急拱 惑磊扼搁, // 牢亥配府俊 踌祸 急拱 惑磊甫 啊瘤绊 乐促搁 林阑 荐 绝促. if (pItem->getItemClass() == Item::ITEM_CLASS_EVENT_GIFT_BOX && pItem->getItemType() == 0 && pInventory->hasGreenGiftBox()) goto ERROR;#endif*/ // 傈里矫胶袍 // 父距 鞍篮 辆练狼 己拱阑 林奎促搁, 磊悼栏肺 焊包窃栏肺 捞悼茄促. // 焊包窃栏肺狼 捞悼篮 弊成 item阑 昏力窍绊, 货肺款 阁胶磐甫 Regen窍绰 // 巴栏肺 汲沥茄促. // 捞固 鞍篮 辆幅狼 己拱阑 啊瘤绊 乐促搁 货 己拱阑 甸瘤 给窍档废 茄促. // 捞固 浇饭捞绢 己拱阑 啊瘤绊 乐促搁 货肺款 浇饭捞绢 己拱阑 甸瘤 给茄促. Item::ItemClass itemclass = pItem->getItemClass(); //ItemType_t itemtype = pItem->getItemType(); TPOINT pt; pt.x = 99; pt.y = 99; // 酒捞袍阑 歹且 磊府俊 促弗 酒捞袍捞 乐瘤 臼篮瘤 八荤茄促. Item* pPrevItem = pInventory->searchItem(InvenX, InvenY, pItem, pt); if (pPrevItem != NULL) { if (canStack(pItem, pPrevItem)) { int MaxStack = ItemMaxStack[pItem->getItemClass()]; if( pt.x == InvenX && pt.y == InvenY ) { if (pItem->getNum() + pPrevItem->getNum() > MaxStack) { ItemNum_t CurrentNum = pPrevItem->getNum(); ItemNum_t AddNum = pItem->getNum(); // 哗冈篮芭 鞍篮淡. by sigi. 2002.5.3 // 辟单.. 捞霸 巩力啊 酒聪绊.. // 粮俊辑 林匡锭, 促 给 林栏搁 给 凛绰芭 酒囱啊.. // 唱赣瘤绰 促矫 滚妨具 窍绰扒啊? // 捞犯霸 鞍篮 谅钎肺 朝酒坷绰 版快啊 乐绰啊? 眉农啊 鞘夸窍摆瘤. // 泅犁绰 绝绰芭 鞍篮单..栏褥.. --; //pInventory->increaseNum(pItem->getNum()); //pInventory->increaseWeight(pItem->getWeight()* pItem->getNum()); pPrevItem->setNum(MaxStack); pItem->setNum(AddNum + CurrentNum - MaxStack); //pPrevItem->save(pPC->getName(), STORAGE_INVENTORY, 0, InvenX, InvenY); // item历厘 弥利拳. by sigi. 2002.5.13 char pField[80]; sprintf(pField, "OwnerID='%s', Num=%d, Storage=%d, X=%d, Y=%d", pPC->getName().c_str(), MaxStack, STORAGE_INVENTORY, InvenX, InvenY); pPrevItem->tinysave(pField); //pItem->save(pPC->getName(), STORAGE_EXTRASLOT, 0, 0, 0); // item历厘 弥利拳. by sigi. 2002.5.13 sprintf(pField, "OwnerID='%s', Num=%d, Storage=%d", pPC->getName().c_str(), pItem->getNum(), STORAGE_EXTRASLOT); pItem->tinysave(pField); } else { pPrevItem->setNum(pPrevItem->getNum() + pItem->getNum()); pInventory->increaseNum(pItem->getNum()); pInventory->increaseWeight(pItem->getWeight()* pItem->getNum()); //pPrevItem->save(pPC->getName(), STORAGE_INVENTORY, 0, InvenX, InvenY); // item历厘 弥利拳. by sigi. 2002.5.13 char pField[80]; sprintf(pField, "OwnerID='%s', Num=%d, Storage=%d, X=%d, Y=%d", pPC->getName().c_str(), pPrevItem->getNum(), STORAGE_INVENTORY, InvenX, InvenY); pPrevItem->tinysave(pField); pItem->destroy(); Merge = true; Success = true; } if ( g_pVariableManager->getVariable(NETMARBLE_CARD_EVENT) != 0 && pPrevItem->getItemClass() == Item::ITEM_CLASS_MOON_CARD && pPrevItem->getItemType() == 2 && pPrevItem->getNum() == 99 ) { GCNoticeEvent gcNE; gcNE.setCode( NOTICE_EVENT_NETMARBLE_CARD_FULL ); pGamePlayer->sendPacket( &gcNE ); cout << "gcNE sent" << endl; } if ( pPrevItem->getItemClass() == Item::ITEM_CLASS_LUCKY_BAG && pPrevItem->getItemType() == 3 && pPrevItem->getNum() == 50 ) { GCDeleteInventoryItem gcDI; gcDI.setObjectID( pPrevItem->getObjectID() ); pGamePlayer->sendPacket( &gcDI ); pInventory->deleteItem( pPrevItem->getObjectID() ); pPrevItem->destroy(); SAFE_DELETE( pPrevItem ); Item* pNewItem = g_pItemFactoryManager->createItem( Item::ITEM_CLASS_EVENT_ITEM, 28, list<OptionType_t>() ); pZone->registerObject( pNewItem ); if ( !pInventory->addItem(pt.x, pt.y, pNewItem) ) { cout << "-_-;" << endl; return; } pNewItem->create( pPC->getName(), STORAGE_INVENTORY, 0, pt.x, pt.y ); if ( pNewItem != NULL ) { GCCreateItem gcCI; makeGCCreateItem( &gcCI, pNewItem, pt.x, pt.y ); pGamePlayer->sendPacket( &gcCI ); } } } } } else { pInventory->addItem(InvenX, InvenY, pItem); //pItem->save(pPC->getName(), STORAGE_INVENTORY, 0, InvenX, InvenY); // item历厘 弥利拳. by sigi. 2002.5.13 char pField[80]; sprintf(pField, "OwnerID='%s', Storage=%d, X=%d, Y=%d", pPC->getName().c_str(), STORAGE_INVENTORY, InvenX, InvenY); pItem->tinysave(pField); // 骇飘 救狼 酒捞袍甸档 葛滴 家蜡鼻捞 逞绢啊具 茄促. 2003.3.22 by Sequoia if ( pItem->getItemClass() == Item::ITEM_CLASS_BELT ) { sprintf( pField, "OwnerID='%s'", pPC->getName().c_str() ); Belt* pBelt = dynamic_cast<Belt*>( pItem ); Assert( pBelt != NULL ); Inventory* pBeltInventory = pBelt->getInventory(); PocketNum_t num = pBelt->getPocketCount(); for ( SlotID_t count = 0 ; count < num ; ++count ) { Item* pBeltItem = pBeltInventory->getItem( count, 0 ); if ( pBeltItem != NULL ) { pBeltItem->tinysave( pField ); } } } // 鞠胶龟靛 救狼 酒捞袍甸档 葛滴 家蜡鼻捞 逞绢啊具 茄促. 2003.3.22 by Sequoia if ( pItem->getItemClass() == Item::ITEM_CLASS_OUSTERS_ARMSBAND ) { sprintf( pField, "OwnerID='%s'", pPC->getName().c_str() ); OustersArmsband* pOustersArmsband = dynamic_cast<OustersArmsband*>( pItem ); Assert( pOustersArmsband != NULL ); Inventory* pOustersArmsbandInventory = pOustersArmsband->getInventory(); PocketNum_t num = pOustersArmsband->getPocketCount(); for ( SlotID_t count = 0 ; count < num ; ++count ) { Item* pOustersArmsbandItem = pOustersArmsbandInventory->getItem( count, 0 ); if ( pOustersArmsbandItem != NULL ) { pOustersArmsbandItem->tinysave( pField ); } } } Success = true; } if (Success) { // 关俊 乐带芭 颗辫. - -; 2002.12.23 pZone->deleteItem(pItem, ZoneX, ZoneY); GCDeleteandPickUpOK _GCDeleteandPickUpOK; GCDeleteObject _GCDeleteObject; _GCDeleteandPickUpOK.setObjectID(pItem->getObjectID()); pPlayer->sendPacket(&_GCDeleteandPickUpOK); // 辟贸俊 乐绰 促弗 荤恩甸俊罢 酒捞袍俊 荤扼脸促绰 巴阑 焊郴霖促. _GCDeleteObject.setObjectID(pItem->getObjectID());// pZone->broadcastPacket(pPC->getX(), pPC->getY(), &_GCDeleteObject , pPC);// pZone->broadcastPacket(ZoneX , ZoneY, &_GCDeleteObject , pPC); pZone->broadcastPacket(ZoneX , ZoneY, &_GCDeleteObject); log(LOG_PICKUP_ITEM, pPC->getName(), "", pItem->toString()); pItem->whenPCTake( pPC ); // Relic 家蜡磊 眉农窍扁 if (isRelicItem( itemclass )) { addRelicEffect( pPC, pItem ); deleteEffectRelicPosition( pItem ); }
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?