cgrelictoobjecthandler.cpp
来自「dk1游戏的原代码文件,完整.编译系统redhat7.3,mysql 3.23 」· C++ 代码 · 共 753 行 · 第 1/2 页
CPP
753 行
//////////////////////////////////////////////////////////////////////////////// Filename : CGRelicToObjectHandler.cc// Written By : elca@ewestsoft.com// Description ://////////////////////////////////////////////////////////////////////////////#include "CGRelicToObject.h"#ifdef __GAME_SERVER__ #include "GamePlayer.h" #include "Zone.h" #include "Slayer.h" #include "Vampire.h" #include "Corpse.h" #include "Relic.h" #include "Monster.h" #include "MonsterCorpse.h" #include "EffectPrecedence.h" #include "EffectIncreaseAttr.h" #include "EffectRelicTable.h" #include "EffectHasSlayerRelic.h" #include "EffectHasVampireRelic.h" #include "EffectSlayerRelic.h" #include "EffectVampireRelic.h" #include "CombatInfoManager.h" #include "ZoneGroupManager.h" #include "ZoneUtil.h" #include "VariableManager.h" #include "SkillUtil.h" #include "RelicUtil.h" #include "ShrineInfoManager.h" #include "CastleShrineInfoManager.h" #include "StringPool.h" #include "LevelWarManager.h" #include "Sweeper.h" #include "ctf/FlagManager.h" #include "Gpackets/GCCannotAdd.h" #include "Gpackets/GCAddEffect.h" #include "Gpackets/GCSystemMessage.h" #include "Gpackets/GCDeleteObject.h" #include "Gpackets/GCDeleteInventoryItem.h" #include <stdio.h>#endif // __GAME_SERVER__////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////void CGRelicToObjectHandler::execute (CGRelicToObject* pPacket , Player* pPlayer) throw (Error){ __BEGIN_TRY __BEGIN_DEBUG_EX #ifdef __GAME_SERVER__ //cout << "CGRelicToObject start" << endl; //cout << "罐篮 菩哦(酒捞袍 坷宏璃飘)" << pPacket->getItemObjectID() // << "罐篮 菩哦(己拱 焊包窃)" << pPacket->getObjectID() << endl; Assert(pPacket != NULL); Assert(pPlayer != NULL); // 芳腐阑 秦寸 己拱焊包窃俊 持阑锭.. GamePlayer* pGamePlayer = dynamic_cast<GamePlayer*>(pPlayer); Creature* pCreature = pGamePlayer->getCreature(); // 己拱 焊包措俊 捞固 笛 促 乐绰 版快 // 己拱 焊包措俊 Slayer己拱捞 乐绊 pItem捞 Slayer己拱牢 版快 PlayerCreature* pPlayerCreature = dynamic_cast<PlayerCreature*>(pCreature); // 泅犁 甸绊 乐绰 酒捞袍 == Relic ? InventorySlot* pExtraInventorySlot = pPlayerCreature->getExtraInventorySlot(); Item* pItem = pExtraInventorySlot->getItem(); if (pItem==NULL || (!isRelicItem( pItem )&&!pItem->isFlagItem() && !pItem->isSweeper())) { GCCannotAdd _GCCannotAdd; _GCCannotAdd.setObjectID(pPacket->getObjectID()); pPlayer->sendPacket(&_GCCannotAdd); return; } if (pItem->getItemClass()==Item::ITEM_CLASS_RELIC) { executeRelic( pPacket, pPlayer ); } else if (pItem->getItemClass()==Item::ITEM_CLASS_BLOOD_BIBLE) { executeBloodBible( pPacket, pPlayer ); } else if (pItem->getItemClass()==Item::ITEM_CLASS_CASTLE_SYMBOL) { executeCastleSymbol( pPacket, pPlayer ); } else if ( pItem->isFlagItem() ) { //cout << "标惯 才扁!" << endl; executeFlag( pPacket, pPlayer ); } else if (pItem->getItemClass()==Item::ITEM_CLASS_SWEEPER) { executeSweeper( pPacket, pPlayer ); } else { throw DisconnectException("钧蹲茄芭 甸绊 RelicToObject焊郴瘤付"); }#endif __END_DEBUG_EX __END_CATCH}void CGRelicToObjectHandler::executeRelic(CGRelicToObject* pPacket , Player* pPlayer) throw (Error){ __BEGIN_TRY#ifdef __GAME_SERVER__ // 芳腐阑 秦寸 己拱焊包窃俊 持阑锭.. GamePlayer* pGamePlayer = dynamic_cast<GamePlayer*>(pPlayer); Creature* pCreature = pGamePlayer->getCreature(); // 己拱 焊包措俊 捞固 笛 促 乐绰 版快 // 己拱 焊包措俊 Slayer己拱捞 乐绊 pItem捞 Slayer己拱牢 版快 PlayerCreature* pPlayerCreature = dynamic_cast<PlayerCreature*>(pCreature); // 泅犁 甸绊 乐绰 酒捞袍 == Relic ? InventorySlot* pExtraInventorySlot = pPlayerCreature->getExtraInventorySlot(); Item* pItem = pExtraInventorySlot->getItem(); Zone* pZone = pCreature->getZone(); Assert(pZone!=NULL); bool Success = false; Item* pTableItem = pZone->getItem( pPacket->getObjectID() ); // 弊繁 item捞 绝芭唱 // 矫眉啊 酒聪芭唱 // Monster矫眉啊 酒聪搁 己拱焊包措啊 酒聪促. if (pTableItem==NULL || pTableItem->getItemClass()!=Item::ITEM_CLASS_CORPSE || pTableItem->getItemType()!=MONSTER_CORPSE) { GCCannotAdd _GCCannotAdd; _GCCannotAdd.setObjectID(pPacket->getObjectID()); pPlayer->sendPacket(&_GCCannotAdd); //cout << "return: not RelicTable" << endl; return; } // 己拱 焊包措 MonsterCorpse* pCorpse = dynamic_cast<MonsterCorpse*>(pTableItem); Assert(pCorpse!=NULL); // 2鸥老 救俊 乐绢具 等促. if (!verifyDistance(pCreature, pCorpse->getX(), pCorpse->getY(), 2)) { GCCannotAdd _GCCannotAdd; _GCCannotAdd.setObjectID(pPacket->getObjectID()); pPlayer->sendPacket(&_GCCannotAdd); //cout << "return: not in 2 tile" << endl; return; } // Relic 家蜡 咯何甫 眉农茄促. bool bPlayerHasSlayerRelic = pCreature->isFlag(Effect::EFFECT_CLASS_HAS_SLAYER_RELIC); bool bPlayerHasVampireRelic = pCreature->isFlag(Effect::EFFECT_CLASS_HAS_VAMPIRE_RELIC); bool bTableHasSlayerRelic = pCorpse->isFlag(Effect::EFFECT_CLASS_SLAYER_RELIC); bool bTableHasVampireRelic = pCorpse->isFlag(Effect::EFFECT_CLASS_VAMPIRE_RELIC); bool bSlayerRelicTable = pCorpse->isFlag(Effect::EFFECT_CLASS_SLAYER_RELIC_TABLE); bool bVampireRelicTable = pCorpse->isFlag(Effect::EFFECT_CLASS_VAMPIRE_RELIC_TABLE); // 捞固 滴 己拱捞 促 乐芭唱 // Player啊 滴 己拱捞 促 绝芭唱 // item捞 绝绰 版快? // 己拱捞 酒聪芭唱 if (bTableHasSlayerRelic && bTableHasVampireRelic || !bPlayerHasSlayerRelic && !bPlayerHasVampireRelic || pItem==NULL || pItem->getItemClass() != Item::ITEM_CLASS_RELIC) { GCCannotAdd _GCCannotAdd; _GCCannotAdd.setObjectID(pPacket->getObjectID()); pPlayer->sendPacket(&_GCCannotAdd); //cout << "return: Cannot add" << endl; return; } ItemType_t relicIndex = pItem->getItemType(); // RelicInfo甫 掘绰促. const RelicInfo* pRelicInfo = dynamic_cast<RelicInfo*>(g_pRelicInfoManager->getItemInfo(relicIndex)); if ( pRelicInfo == NULL ) { filelog( "relic.log", "no such relic index(%d)", relicIndex ); GCCannotAdd _GCCannotAdd; _GCCannotAdd.setObjectID(pPacket->getObjectID()); pPlayer->sendPacket(&_GCCannotAdd); return; } bool bSlayer = pCreature->isSlayer(); bool bVampire = pCreature->isVampire(); // itemObjectID啊 肋给登菌芭唱 // 甸绊 乐绰 酒捞袍捞 绝芭唱 // 巢狼 焊包措捞芭唱 // 捞固 鞍篮 辆练狼 己拱捞 乐促搁 持阑 荐 绝促. if (pItem->getObjectID() != pPacket->getItemObjectID() || bSlayer && bVampireRelicTable || bVampire && bSlayerRelicTable || bTableHasSlayerRelic && pRelicInfo->relicType==RELIC_TYPE_SLAYER || bTableHasVampireRelic && pRelicInfo->relicType==RELIC_TYPE_VAMPIRE) { GCCannotAdd _GCCannotAdd; _GCCannotAdd.setObjectID(pPacket->getObjectID()); pPlayer->sendPacket(&_GCCannotAdd); //cout << "return: Cannot Add2" << endl; return; } // 浇饭捞绢牢 版快绰 坷配官捞, 胶唱捞俏惑怕 捞搁 救登绊 // 轨颇捞绢牢 版快绰 函脚惑怕, 捧疙惑怕捞搁 救等促. if (bSlayer) { Slayer* pSlayer = dynamic_cast<Slayer*>(pCreature); // 坷配官捞甫 鸥绊 乐栏搁 阂啊瓷窍促. if (!pSlayer->hasRideMotorcycle() && !pSlayer->isFlag(Effect::EFFECT_CLASS_SNIPING_MODE)) { // Effect甫 嘿牢促. Success = true; } } else if (bVampire) { if (!pCreature->isFlag(Effect::EFFECT_CLASS_TRANSFORM_TO_BAT) && !pCreature->isFlag(Effect::EFFECT_CLASS_TRANSFORM_TO_WOLF) && !pCreature->isFlag(Effect::EFFECT_CLASS_HIDE) && !pCreature->isFlag(Effect::EFFECT_CLASS_INVISIBILITY) && !pCreature->isFlag(Effect::EFFECT_CLASS_FADE_OUT)) { Success = true; } } // 己拱焊包措俊 己拱阑 持阑 荐 乐绰 版快 if (Success) { // Mouse俊辑 酒捞袍阑 瘤快绊 pPlayerCreature->deleteItemFromExtraInventorySlot(); // 己拱阑 己拱 焊包措俊 眠啊茄促. pCorpse->addTreasure( pItem );/* StringStream msg; msg << pPlayerCreature->getName() << " 丛捞 己拱 焊包措俊 " << "己拱(" << pRelicInfo->getName() << ")阑 持菌嚼聪促."; */ char msg[100]; sprintf( msg, g_pStringPool->c_str( STRID_PUT_RELIC_TO_RELIC_TABLE ), pPlayerCreature->getName().c_str(), pRelicInfo->getName().c_str() ); GCSystemMessage gcSystemMessage; gcSystemMessage.setMessage( msg ); g_pZoneGroupManager->broadcast( &gcSystemMessage ); Effect::EffectClass effectClass; Effect::EffectClass effectClassTable; // Creature俊辑 Effect甫 力芭窍绊 if (pRelicInfo->relicType==RELIC_TYPE_SLAYER) { effectClass = Effect::EFFECT_CLASS_HAS_SLAYER_RELIC; effectClassTable = Effect::EFFECT_CLASS_SLAYER_RELIC; } else { effectClass = Effect::EFFECT_CLASS_HAS_VAMPIRE_RELIC; effectClassTable = Effect::EFFECT_CLASS_VAMPIRE_RELIC; } Effect* pEffect = pCreature->findEffect( effectClass ); Assert(pEffect!=NULL); // Creature狼 flag甫 掺绊 // GCRemoveEffect甫 焊郴霸 等促. pEffect->unaffect(); pCreature->deleteEffect( effectClass ); // 己拱 焊包措啊 Relic阑 啊脸促绰 Effect甫 嘿咯霖促. if (pRelicInfo->relicType==RELIC_TYPE_SLAYER) { EffectSlayerRelic* pEffect = new EffectSlayerRelic(pCorpse); pCorpse->getEffectManager().addEffect( pEffect ); pCorpse->setFlag(Effect::EFFECT_CLASS_SLAYER_RELIC); pEffect->affect(pCorpse); } else { EffectVampireRelic* pEffect = new EffectVampireRelic(pCorpse); pCorpse->getEffectManager().addEffect( pEffect ); pCorpse->setFlag(Effect::EFFECT_CLASS_VAMPIRE_RELIC); pEffect->affect(pCorpse); } // 己拱焊包措俊 Effect甫 嘿牢吧 client俊 舅赴促. GCAddEffect gcAddEffect; gcAddEffect.setObjectID(pCorpse->getObjectID()); gcAddEffect.setEffectID(effectClassTable); gcAddEffect.setDuration(65000); pZone->broadcastPacket(pCorpse->getX(), pCorpse->getY(), &gcAddEffect); // 己拱 初疽促绊 焊郴霖促. GCDeleteObject gcDeleteObject; gcDeleteObject.setObjectID( pItem->getObjectID() ); pPlayer->sendPacket(&gcDeleteObject); // RelicTable EffectRelicTable* pTableEffect = NULL; if (bSlayer) { // 己拱狼 家蜡甫 汲沥茄促. g_pCombatInfoManager->setRelicOwner(relicIndex, CombatInfoManager::RELIC_OWNER_SLAYER); // 捞棋飘甫 茫绰促. Effect* pEffect = pCorpse->getEffectManager().findEffect( Effect::EFFECT_CLASS_SLAYER_RELIC_TABLE ); Assert(pEffect!=NULL); pTableEffect = dynamic_cast<EffectSlayerRelicTable*>(pEffect); Assert(pTableEffect!=NULL); } else { // 己拱狼 家蜡甫 汲沥茄促. g_pCombatInfoManager->setRelicOwner(relicIndex, CombatInfoManager::RELIC_OWNER_VAMPIRE); // 捞棋飘甫 茫绰促. Effect* pEffect = pCorpse->getEffectManager().findEffect( Effect::EFFECT_CLASS_VAMPIRE_RELIC_TABLE ); Assert(pEffect!=NULL); pTableEffect = dynamic_cast<EffectVampireRelicTable*>(pEffect); Assert(pTableEffect!=NULL); } // 己拱捞 窍唱 甸绢啊搁 // 茄 悼救(10檬)篮 己拱阑 哗尘 荐 绝促. Timeval lockTime; getCurrentTime(lockTime); lockTime.tv_sec += 10; pTableEffect->setLockTime( lockTime ); // 滴 己拱阑 葛滴 爱霸 登绰 版快 if (bTableHasSlayerRelic && pRelicInfo->relicType==RELIC_TYPE_VAMPIRE || bTableHasVampireRelic && pRelicInfo->relicType==RELIC_TYPE_SLAYER)
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?