cgdissectioncorpsehandler.cpp
来自「dk1游戏的原代码文件,完整.编译系统redhat7.3,mysql 3.23 」· C++ 代码 · 共 733 行 · 第 1/2 页
CPP
733 行
//////////////////////////////////////////////////////////////////////////////// Filename : CGDissectionCorpseHandler.cc// Written By : elca@ewestsoft.com// Description ://////////////////////////////////////////////////////////////////////////////#include "CGDissectionCorpse.h"#ifdef __GAME_SERVER__ #include "GamePlayer.h" #include "Zone.h" #include "Slayer.h" #include "Vampire.h" #include "Ousters.h" #include "Corpse.h" #include "Relic.h" #include "BloodBible.h" #include "MonsterCorpse.h" #include "SlayerCorpse.h" #include "AlignmentManager.h" #include "PCSlayerInfo3.h" #include "PCVampireInfo3.h" #include "VampireCorpse.h" #include "PCVampireInfo3.h" #include "PCOustersInfo3.h" #include "OustersCorpse.h" #include "PCOustersInfo3.h" #include "Effect.h" #include "EffectRelicTable.h" #include "EffectPrecedence.h" #include "EffectHasSlayerRelic.h" #include "EffectHasVampireRelic.h" #include "ZoneUtil.h" #include "ItemUtil.h" #include "RelicUtil.h" #include "DB.h" #include "CombatInfoManager.h" #include "ZoneGroupManager.h" #include "ItemInfoManager.h" #include "UniqueItemManager.h" #include "war/WarSystem.h" #include "ShrineInfoManager.h" #include "CastleInfoManager.h" #include "CastleShrineInfoManager.h" #include "StringPool.h" #include "PacketUtil.h" #include "MonsterInfo.h" #include "PetUtil.h" #include "PetInfo.h" #include "ctf/FlagManager.h" #include "EffectFlagInsert.h" #include "LevelWarManager.h" #include <stdio.h> #include "Gpackets/GCRemoveCorpseHead.h" #include "Gpackets/GCSystemMessage.h" #include "Gpackets/GCCreateItem.h" #include "Gpackets/GCAddEffect.h" #include "Gpackets/GCRemoveEffect.h"#endif // __GAME_SERVER__////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////void CGDissectionCorpseHandler::execute (CGDissectionCorpse* pPacket , Player* pPlayer) throw (Error){ __BEGIN_TRY __BEGIN_DEBUG_EX #ifdef __GAME_SERVER__ Assert(pPacket != NULL); Assert(pPlayer != NULL); try { GamePlayer* pGamePlayer = dynamic_cast<GamePlayer*>(pPlayer); if (pGamePlayer->getPlayerStatus() != GPS_NORMAL) return; Creature* pCreature = pGamePlayer->getCreature(); Zone* pZone = pCreature->getZone(); ZoneCoord_t ZoneX = pPacket->getX(); ZoneCoord_t ZoneY = pPacket->getY(); // 官款靛甫 逞绢啊瘤绰 臼绰瘤 眉农茄促. if (!isValidZoneCoord(pZone, ZoneX, ZoneY)) { return; } Tile& rTile = pZone->getTile(ZoneX , ZoneY); Item* pItem = rTile.getItem(); // Coma惑怕扼搁 风泼 阂啊. by sigi. 2002.12.10 // 泅犁 冠零 惑怕扼搁 府畔 if (pCreature->isFlag(Effect::EFFECT_CLASS_COMA) || pCreature->isFlag(Effect::EFFECT_CLASS_PARALYZE) || pCreature->isVampire() && pCreature->isFlag(Effect::EFFECT_CLASS_TRANSFORM_TO_BAT)) return; // 浇饭捞绢牢 版快 坷配官捞 鸥绊 乐栏搁 酒捞袍 风泼 阂啊 by sigi if (pCreature->isSlayer()) { Slayer* pSlayer = dynamic_cast<Slayer*>(pCreature); if (pSlayer->hasRideMotorcycle()) { return; } } // 酒快胶磐令牢 版快 角橇 鸥绊 乐栏搁 风泼 阂啊 by DEW if (pCreature->isOusters()) { Ousters* pOusters = dynamic_cast<Ousters*>(pCreature); if (pOusters->isFlag(Effect::EFFECT_CLASS_SUMMON_SYLPH)) { return; } } // 官蹿俊 酒捞袍捞 绝栏搁 府畔 // 坷宏璃飘 酒捞叼啊 老摹窍瘤 臼栏搁 府畔 // 官蹿俊 乐绰 酒捞袍捞 矫眉啊 酒聪搁 府畔 if (pItem == NULL || pItem->getObjectID() != pPacket->getObjectID() || pItem->getItemClass() != Item::ITEM_CLASS_CORPSE) { return; } bool bSlayerRelicTable = pItem->isFlag(Effect::EFFECT_CLASS_SLAYER_RELIC_TABLE); bool bVampireRelicTable = pItem->isFlag(Effect::EFFECT_CLASS_VAMPIRE_RELIC_TABLE); // 浇饭捞绢啊 浇饭捞绢狼 己拱焊包窃阑 努腐且 荐 绝绊, // 轨颇捞绢档 轨颇捞绢狼 己拱焊包窃阑 努腐且 荐 绝促. if ( (pCreature->isSlayer() && bSlayerRelicTable) || (pCreature->isVampire() && bVampireRelicTable) ) { return; } // 己窜老 版快 傈里吝捞 酒聪扼搁 努腐且 荐 绝促. // 荐龋 己窜老 版快 荐厚螟俊辑绰 努腐且 荐 绝促. if ( pItem->getItemType() == MONSTER_CORPSE ) { MonsterCorpse* pMonsterCorpse = dynamic_cast<MonsterCorpse*>(pItem); if ( g_pFlagManager->isFlagPole( pMonsterCorpse ) ) { if ( !g_pFlagManager->hasFlagWar() ) return; } else if ( pZone->getLevelWarManager() != NULL && pZone->getLevelWarManager()->isSafe( pMonsterCorpse ) ) { if ( !pZone->getLevelWarManager()->hasWar() ) return; else if ( ( pCreature->isSlayer() && pZone->getLevelWarManager()->getSafeIndex( pMonsterCorpse ) == 0 ) || ( pCreature->isVampire() && pZone->getLevelWarManager()->getSafeIndex( pMonsterCorpse ) == 1 ) || ( pCreature->isOusters() && pZone->getLevelWarManager()->getSafeIndex( pMonsterCorpse ) == 2 ) ) { return; } } else if ( pMonsterCorpse->isShrine() ) { // 焊龋阜捞 吧妨乐栏搁 给 波辰促. if ( pMonsterCorpse->isFlag( Effect::EFFECT_CLASS_SHRINE_SHIELD ) ) return; PlayerCreature* pPC = dynamic_cast<PlayerCreature*>(pCreature); Assert( pPC ); ZoneID_t castleZoneID; bool isCastle; bool hasWar = false; isCastle = g_pCastleInfoManager->getCastleZoneID( pZone->getZoneID() , castleZoneID); if ( isCastle && g_pWarSystem->hasCastleActiveWar( castleZoneID ) ) { // 辨靛傈里老 版快 贸府 // if ( pItem->getItemClass() != Item::ITEM_CLASS_CASTLE_SYMBOL ) return; // 己俊辑绰 规绢螟老 版快 努腐且 荐 绝促. if ( g_pCastleShrineInfoManager->isDefenderOfGuardShrine( pPC, pMonsterCorpse ) ) return; CastleInfo* pCastleInfo = g_pCastleInfoManager->getCastleInfo( castleZoneID ); if ( pCastleInfo->getRace() != pPC->getRace() ) return; hasWar = true; } if ( g_pWarSystem->hasActiveRaceWar() ) { // 辆练埃 傈里老 版快 贸府 // if ( pItem->getItemClass() != Item::ITEM_CLASS_BLOOD_BIBLE ) return; // 己俊辑绰 规绢螟老 版快 努腐且 荐 绝促. if ( g_pShrineInfoManager->isDefenderOfGuardShrine( pPC, pMonsterCorpse ) ) return; hasWar = true; } // 傈里捞 鞠巴档 绝栏搁 己窜俊辑 鞠巴档 给 波辰促. if (!hasWar) { return; } } } // 捞鳖瘤 吭促搁, 惑措祈 辆练狼 己拱焊包窃阑 努腐茄 版快捞促. // 捞 版快, 父距 EffectRelic捞 倔父怒 巢酒 乐绰瘤 眉农秦具 茄促. EffectRelicTable* pRelicTableEffect = NULL; // 己拱 焊包措 辆幅俊 蝶扼辑 嘿绢乐绰 Effect甫 掘绢柯促. if (bSlayerRelicTable) { pRelicTableEffect = dynamic_cast<EffectRelicTable*>( pItem->getEffectManager().findEffect(Effect::EFFECT_CLASS_SLAYER_RELIC_TABLE)); } else if (bVampireRelicTable) { pRelicTableEffect = dynamic_cast<EffectRelicTable*>( pItem->getEffectManager().findEffect(Effect::EFFECT_CLASS_VAMPIRE_RELIC_TABLE)); } // 己拱 焊包措俊辑 酒捞袍阑 哗绢尘 荐 乐绰 矫埃牢啊? // SafeTime捞 登瘤 臼疽栏搁 救等促. // LockTime 悼救篮 救等促. if (pRelicTableEffect!=NULL && (!pRelicTableEffect->isSafeTime() || pRelicTableEffect->isLockTime())) { GCSystemMessage gcSystemMessage; gcSystemMessage.setMessage( g_pStringPool->getString( STRID_CANNOT_TAKE_RELIC_NOW ) ); pGamePlayer->sendPacket( &gcSystemMessage ); return; } // 己氢阑 眉农 秦具 茄促. if (pItem->getItemType() != MONSTER_CORPSE) { if ( pPacket->isPet() ) return; if ( !pZone->isPKZone() ) { if (pItem->getItemType() == SLAYER_CORPSE && pCreature->isSlayer()) { SlayerCorpse* pSlayerCorpse = dynamic_cast<SlayerCorpse*>(pItem); PCSlayerInfo3 & rPCSlayerInfo = pSlayerCorpse->getSlayerInfo(); // 磊扁 矫眉啊 酒聪扼搁 if (rPCSlayerInfo.getName() != pCreature->getName()) { // 厩茄磊狼 矫眉绰 焊龋罐瘤 给茄促.... if (g_pAlignmentManager->getAlignmentType(rPCSlayerInfo.getAlignment()) >= NEUTRAL) { Slayer* pSlayer = dynamic_cast<Slayer*>(pCreature); // 己氢捞 -500 郴妨埃促~ Alignment_t NewAlignment = max(-10000 , pSlayer->getAlignment() - 500); pSlayer->setAlignment(NewAlignment); GCModifyInformation gcModifyInformation; gcModifyInformation.addLongData(MODIFY_ALIGNMENT, NewAlignment); pGamePlayer->sendPacket(&gcModifyInformation); } } } else if (pItem->getItemType() == VAMPIRE_CORPSE && pCreature->isVampire()) { PCVampireInfo3 & rPCVampireInfo = dynamic_cast<VampireCorpse*>(pItem)->getVampireInfo(); // 磊扁 矫眉啊 酒聪扼搁 if (rPCVampireInfo.getName() != pCreature->getName()) { // 厩茄磊狼 矫眉绰 焊龋罐瘤 给茄促.... if (g_pAlignmentManager->getAlignmentType(rPCVampireInfo.getAlignment()) >= NEUTRAL) { Vampire* pVampire = dynamic_cast<Vampire*>(pCreature); // 己氢捞 -500 郴妨埃促~ Alignment_t NewAlignment = max(-10000 , pVampire->getAlignment() - 500); pVampire->setAlignment(NewAlignment); GCModifyInformation gcModifyInformation; gcModifyInformation.addLongData(MODIFY_ALIGNMENT, NewAlignment); pGamePlayer->sendPacket(&gcModifyInformation); } } } else if (pItem->getItemType() == OUSTERS_CORPSE && pCreature->isOusters()) { PCOustersInfo3 & rPCOustersInfo = dynamic_cast<OustersCorpse*>(pItem)->getOustersInfo(); // 磊扁 矫眉啊 酒聪扼搁 if (rPCOustersInfo.getName() != pCreature->getName()) { // 厩茄磊狼 矫眉绰 焊龋罐瘤 给茄促.... if (g_pAlignmentManager->getAlignmentType(rPCOustersInfo.getAlignment()) >= NEUTRAL) { Ousters* pOusters = dynamic_cast<Ousters*>(pCreature); // 己氢捞 -500 郴妨埃促~ Alignment_t NewAlignment = max(-10000 , pOusters->getAlignment() - 500); pOusters->setAlignment(NewAlignment); GCModifyInformation gcModifyInformation; gcModifyInformation.addLongData(MODIFY_ALIGNMENT, NewAlignment); pGamePlayer->sendPacket(&gcModifyInformation); } } } } } else { MonsterCorpse* pMonsterCorpse = dynamic_cast<MonsterCorpse*>(pItem); PlayerCreature* pPC = dynamic_cast<PlayerCreature*>(pCreature); Assert( pPC != NULL ); if ( pPacket->isPet() ) { if ( pPC->getPetInfo() == NULL ) return; //(|| pMonsterCorpse->isNextTreasureHead() ) return; } if ( pMonsterCorpse != NULL && g_pFlagManager->isFlagPole( pMonsterCorpse ) ) { if ( !g_pFlagManager->hasFlagWar() ) return; // 鞍篮 辆练捞搁 给 惶绰促.. if ( g_pFlagManager->getFlagPoleRace( pMonsterCorpse ) == pPC->getRace() ) return; TPOINT tp; if ( pPC->isFlag( Effect::EFFECT_CLASS_HAS_FLAG ) ) return; if ( !pPC->getInventory()->getEmptySlot( 1, 2, tp ) ) return; if ( pPC->isFlag(Effect::EFFECT_CLASS_CASKET) || pPC->isDead() || pPC->isFlag(Effect::EFFECT_CLASS_TRANSFORM_TO_BAT) || pPC->isFlag(Effect::EFFECT_CLASS_SUMMON_SYLPH) || pPC->isFlag(Effect::EFFECT_CLASS_TENDRIL) || pPC->isFlag(Effect::EFFECT_CLASS_BLOCK_HEAD) ) return; if (pPC->isSlayer()) { Slayer* pSlayer = dynamic_cast<Slayer*>(pPC); if (pSlayer->hasRideMotorcycle()) return; } if ( pPC->isFlag(Effect::EFFECT_CLASS_HIDE) || pPC->isFlag(Effect::EFFECT_CLASS_INVISIBILITY) || pPC->isFlag(Effect::EFFECT_CLASS_FADE_OUT) || pPC->isFlag(Effect::EFFECT_CLASS_TRANSFORM_TO_WOLF) || pPC->isFlag(Effect::EFFECT_CLASS_TRANSFORM_TO_BAT) || pPC->isFlag(Effect::EFFECT_CLASS_SNIPING_MODE) || pPC->isFlag(Effect::EFFECT_CLASS_HAS_CASTLE_SYMBOL) ) return; }
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?