cgdissectioncorpsehandler.cpp
来自「dk1游戏的原代码文件,完整.编译系统redhat7.3,mysql 3.23 」· C++ 代码 · 共 733 行 · 第 1/2 页
CPP
733 行
// else if (// pZone->getLevelWarManager() != NULL &&// pZone->getLevelWarManager()->isSafe( pMonsterCorpse ) )// {// if ( !pZone->getLevelWarManager()->hasWar() ) return;// } } Corpse* pCorpse = dynamic_cast<Corpse*>(pItem); bool bDissectAll = false; // 矫眉俊 酒捞袍捞 3俺 焊促 歹 腹捞 甸绢啊 乐栏搁 茄 锅俊 促磺官辰促. // 脐捞 惶酒郴绰 酒捞袍篮 茄锅俊 促 惶囚唱柯促. // 2003.1.14 by bezz, Sequoia, sigi if ( pCorpse->getTreasureCount() > 3 || pPacket->isPet() ) bDissectAll = true; int treasureCount = 0; ObjectID_t PetOID = 0; if ( pPacket->isPet() ) PetOID = pCreature->getObjectID(); do // while ( bDissectAll ); { if ( pPacket->isPet() && pCorpse->getItemType() == MONSTER_CORPSE ) { MonsterCorpse* pMonsterCorpse = dynamic_cast<MonsterCorpse*>(pItem); PlayerCreature* pPC = dynamic_cast<PlayerCreature*>(pCreature); PetInfo* pPetInfo = pPC->getPetInfo(); if ( pPetInfo == NULL ) break; if ( pMonsterCorpse->isNextTreasureHead() && pPetInfo->canCutHead()==0 ) break; } Item* pTreasure = pCorpse->getTreasure(); if (pTreasure == NULL) break; if ( pPacket->isPet() ) pTreasure->setFlag( Effect::EFFECT_CLASS_PET_DISSECT ); //////////////////////////////////////////////////////////////// // 2002斥 绢赴捞朝 捞亥飘 // 八篮喊 酒捞袍篮 啊练荤柳 迷康鼻栏肺 背券等促. // 弊矾骨肺 俺荐啊 老沥 荐霖(飘罚角海聪酒7俺, 啃扼虐酒 3俺)阑 // 逞霸 唱棵 荐 绝促. // 父距 八篮喊 酒捞袍捞 唱吭阑 版快, // 酒捞袍狼 箭磊甫 颇厩秦辑, 力茄 俺荐 捞惑捞搁 唱坷瘤 臼档废 茄促. if (pTreasure->getItemClass() == Item::ITEM_CLASS_EVENT_STAR && pTreasure->getItemType() == 0) { cout << "八篮喊 免泅" << endl; Statement* pStmt = NULL; Result* pResult = NULL; try { pStmt = g_pDatabaseManager->getConnection("DARKEDEN")->createStatement(); pResult = pStmt->executeQuery("SELECT ifnull(sum(Num),0) FROM EventStarObject WHERE ItemType=0;"); if(pResult->getRowCount() != 1) { SAFE_DELETE(pStmt); throw ProtocolException("Fail to load data from DB"); } if(pResult->next()) { int BlackStarNumber = pResult->getInt(1); if(BlackStarNumber >= 7) cout << "八篮喊捞 10俺 逞菌嚼聪促" << endl; else { (pZone->getObjectRegistry()).registerObject(pTreasure); TPOINT pt = pZone->addItem(pTreasure, ZoneX, ZoneY); if (pt.x != -1) { if (pItem->getItemType() == MONSTER_CORPSE) { MonsterCorpse* pMonsterCorpse = dynamic_cast<MonsterCorpse*>(pItem); // 阁胶磐 矫眉俊辑 唱柯 酒捞袍捞扼搁 快急鼻 捞棋飘甫 嘿咯林绢具 茄促. // 趣矫扼档 扁粮狼 捞棋飘啊 乐促搁 昏力秦林绊, // 货肺捞 捞棋飘甫 歹茄促. const string& HostName = pMonsterCorpse->getHostName(); int HostPartyID = pMonsterCorpse->getHostPartyID(); bool isPrecedence = true; if ( pTreasure->getItemClass() == Item::ITEM_CLASS_EVENT_ITEM && pTreasure->getItemType() == 3 ) { isPrecedence = false; } // by sigi. 2002.12.12 if (isPrecedence && (!HostName.empty() || HostPartyID!=0)) { EffectPrecedence* pEffectPrecedence = new EffectPrecedence(pTreasure); pEffectPrecedence->setDeadline(100); pEffectPrecedence->setHostName( HostName ); pEffectPrecedence->setHostPartyID( HostPartyID ); EffectManager& rEffectManager = pTreasure->getEffectManager(); rEffectManager.deleteEffect(Effect::EFFECT_CLASS_PRECEDENCE); rEffectManager.addEffect(pEffectPrecedence); pTreasure->setFlag(Effect::EFFECT_CLASS_PRECEDENCE); } // 父距 秦榜捞扼搁 林困俊促啊 矫眉俊辑 格阑 力芭窍扼绊 菩哦阑 朝妨林绢具 茄促. if (pTreasure->getItemClass() == Item::ITEM_CLASS_SKULL) { // 格 磊福扁~~ by sigi pMonsterCorpse->removeHead(); GCRemoveCorpseHead _GCRemoveCorpseHead; _GCRemoveCorpseHead.setObjectID(pItem->getObjectID()); //pZone->broadcastPacket(pt.x, pt.y, &_GCRemoveCorpseHead); pZone->broadcastPacket(ZoneX, ZoneY, &_GCRemoveCorpseHead); // 盔贰 矫眉 谅钎 by sigi } } // 扁粮狼 ItemID甫 弊措肺 蜡瘤茄促. // ItemID啊 0捞搁.. create()且锭 促矫 ItemID甫 罐绰促. // by sigi. 2002.10.28 pTreasure->create("", STORAGE_ZONE, pZone->getZoneID(), pt.x, pt.y, pTreasure->getItemID()); } else { SAFE_DELETE(pTreasure); } } } SAFE_DELETE(pStmt); } catch(SQLQueryException & sqe) { SAFE_DELETE(pStmt); throw Error(sqe.toString()); } } else if ( pTreasure->isFlagItem() ) { // 标惯篮 官肺 牢亥配府肺 持绢霖促. PlayerCreature* pPC = dynamic_cast<PlayerCreature*>(pCreature); Assert( pPC != NULL ); Inventory* pInventory = pPC->getInventory(); Assert( pInventory != NULL ); TPOINT tp; if ( !pInventory->getEmptySlot( pTreasure, tp ) || pCorpse->getItemType() != MONSTER_CORPSE || !g_pFlagManager->getFlag( pPC, dynamic_cast<MonsterCorpse*>(pCorpse) ) ) { // 档肺 持绰促. pCorpse->addTreasure( pTreasure ); pCorpse->setFlag( Effect::EFFECT_CLASS_FLAG_INSERT ); EffectFlagInsert* pFlagEffect = new EffectFlagInsert(pCorpse); pCorpse->getEffectManager().addEffect( pFlagEffect ); GCAddEffect gcAddEffect; gcAddEffect.setEffectID( Effect::EFFECT_CLASS_FLAG_INSERT ); gcAddEffect.setObjectID( pCorpse->getObjectID() ); gcAddEffect.setDuration( 65535 ); pCorpse->getZone()->broadcastPacket( pCorpse->getX(), pCorpse->getY(), &gcAddEffect ); continue; } pInventory->addItem( pTreasure, tp ); char pField[80]; sprintf(pField, "OwnerID='%s', Storage=%d, X=%d, Y=%d", pPC->getName().c_str(), STORAGE_INVENTORY, tp.x, tp.y); pTreasure->tinysave(pField); addSimpleCreatureEffect( pPC, Effect::EFFECT_CLASS_HAS_FLAG ); GCCreateItem gcCreateItem; makeGCCreateItem( &gcCreateItem, pTreasure, tp.x, tp.y ); pPC->getPlayer()->sendPacket( &gcCreateItem ); } else { (pZone->getObjectRegistry()).registerObject(pTreasure); TPOINT pt = pZone->addItem(pTreasure, ZoneX, ZoneY, true, 0, PetOID); if (pt.x != -1) { if (pItem->getItemType() == MONSTER_CORPSE) { MonsterCorpse* pMonsterCorpse = dynamic_cast<MonsterCorpse*>(pItem); if (dissectionRelicItem( pCorpse, pTreasure, pt )) { // pTreasure啊 relicItem牢 版快 } treasureCount++; if ( pZone->getLevelWarManager() != NULL && pZone->getLevelWarManager()->isSafe( pMonsterCorpse ) ) { Effect* pEffect = pMonsterCorpse->getEffectManager().findEffect( Effect::EFFECT_CLASS_KEEP_SWEEPER ); if ( pEffect != NULL ) { pEffect->setDeadline(0); GCRemoveEffect gcRE; gcRE.setObjectID( pMonsterCorpse->getObjectID() ); gcRE.addEffectList( pEffect->getSendEffectClass() ); pZone->broadcastPacket( pMonsterCorpse->getX(), pMonsterCorpse->getY(), &gcRE ); } // 惶栏搁 粮俊 谎妨霖促. char safeRace[15]; if ( pZone->getLevelWarManager()->getSafeIndex( pMonsterCorpse ) == 0 ) { sprintf( safeRace, g_pStringPool->c_str( STRID_SLAYER ) ); } else if ( pZone->getLevelWarManager()->getSafeIndex( pMonsterCorpse ) == 1 ) { sprintf( safeRace, g_pStringPool->c_str( STRID_VAMPIRE ) ); } else if ( pZone->getLevelWarManager()->getSafeIndex( pMonsterCorpse ) == 2 ) { sprintf( safeRace, g_pStringPool->c_str( STRID_OUSTERS ) ); } else if ( pZone->getLevelWarManager()->getSafeIndex( pMonsterCorpse ) == 3 ) { sprintf( safeRace, g_pStringPool->c_str( STRID_CENTER ) ); } else { Assert(false); } char race[15]; if ( pCreature->isSlayer() ) { sprintf( race, g_pStringPool->c_str( STRID_SLAYER ) ); } else if ( pCreature->isVampire() ) { sprintf( race, g_pStringPool->c_str( STRID_VAMPIRE ) ); } else if ( pCreature->isOusters() ) { sprintf( race, g_pStringPool->c_str( STRID_OUSTERS ) ); } else { Assert(false); } const SweeperInfo* pSweeperInfo = dynamic_cast<SweeperInfo*>(g_pSweeperInfoManager->getItemInfo(pTreasure->getItemType())); char msg[100]; sprintf( msg , g_pStringPool->c_str( STRID_PULL_OUT_SWEEPER ) , safeRace, pSweeperInfo->getName().c_str(), pCreature->getName().c_str(), race ); GCSystemMessage gcSystemMessage; gcSystemMessage.setMessage( msg ); pZone->broadcastPacket( &gcSystemMessage ); } // 阁胶磐 矫眉俊辑 唱柯 酒捞袍捞扼搁 快急鼻 捞棋飘甫 嘿咯林绢具 茄促. // 趣矫扼档 扁粮狼 捞棋飘啊 乐促搁 昏力秦林绊, // 货肺捞 捞棋飘甫 歹茄促. // 2003.2.28 扁粮狼 捞棋飘啊 乐促搁 弊成 敌促. 矫眉俊 啊 官蹿俊 眠啊瞪 锭 // 官蹿俊 乐带 酒捞袍捞 甸绢哎 版快俊 快急鼻 捞咆飘甫 嘿捞瘤 臼扁 困秦 if (!bSlayerRelicTable && !bVampireRelicTable) { const string& HostName = pMonsterCorpse->getHostName(); int HostPartyID = pMonsterCorpse->getHostPartyID(); // by sigi. 2002.12.12 if ( (!HostName.empty() || HostPartyID!=0) // by Sequoia. 2003. 2.28. && !pTreasure->isFlag(Effect::EFFECT_CLASS_PRECEDENCE) ) { EffectPrecedence* pEffectPrecedence = new EffectPrecedence(pTreasure); if ( !pTreasure->isQuestItem() ) { // 涅胶飘 酒捞袍篮 颇萍盔档 给 凛绰促. pEffectPrecedence->setDeadline(100); pEffectPrecedence->setHostPartyID( HostPartyID ); pEffectPrecedence->setHostName( HostName ); } else { // 涅胶飘 酒捞袍篮 绝绢龙锭鳖瘤 快急鼻捞 救 绝绢柳促. pEffectPrecedence->setDeadline(999999); pEffectPrecedence->setHostName( pMonsterCorpse->getQuestHostName() ); } EffectManager& rEffectManager = pTreasure->getEffectManager(); rEffectManager.deleteEffect(Effect::EFFECT_CLASS_PRECEDENCE); rEffectManager.addEffect(pEffectPrecedence); pTreasure->setFlag(Effect::EFFECT_CLASS_PRECEDENCE); } } // 父距 秦榜捞扼搁 林困俊促啊 矫眉俊辑 格阑 力芭窍扼绊 菩哦阑 朝妨林绢具 茄促. if (pTreasure->getItemClass() == Item::ITEM_CLASS_SKULL) { // 格 磊福扁~~ by sigi pMonsterCorpse->removeHead(); GCRemoveCorpseHead _GCRemoveCorpseHead; _GCRemoveCorpseHead.setObjectID(pItem->getObjectID()); //pZone->broadcastPacket(pt.x, pt.y, &_GCRemoveCorpseHead); pZone->broadcastPacket(ZoneX, ZoneY, &_GCRemoveCorpseHead); // 盔贰 矫眉 谅钎 by sigi } } // DB俊 历厘茄促. saveDissectionItem( pCreature, pTreasure, pt.x, pt.y ); } else { SAFE_DELETE(pTreasure); } } } while ( bDissectAll ); if (pItem->getItemType() == MONSTER_CORPSE) { MonsterCorpse* pMonsterCorpse = dynamic_cast<MonsterCorpse*>(pItem); // 脐 版氰摹 林磊 if ( pPacket->isPet() && treasureCount != 0 ) { PlayerCreature* pPC = dynamic_cast<PlayerCreature*>(pCreature); GCModifyInformation gcMI; if ( !increasePetExp( pPC->getPetInfo(), computePetExp( getPCLevel( pPC ), g_pMonsterInfoManager->getMonsterInfo( pMonsterCorpse->getMonsterType() )->getLevel(), pPC->getPetInfo(), pGamePlayer ), &gcMI ) ) {// cout << "版氰摹啊 官差菌绢夸 : " << gcMI.toString() << endl; pGamePlayer->sendPacket( &gcMI ); } else {// cout << "饭骇绝阑 沁措夸" << endl; sendPetInfo( pGamePlayer, true ); } } } } catch (Throwable & t) { }#endif // __GAME_SERVER__ __END_DEBUG_EX __END_CATCH}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?