📄 shrineinfomanager.cpp
字号:
}bool ShrineInfoManager::putBloodBible(PlayerCreature* pPC, Item* pItem, MonsterCorpse* pCorpse) const throw (Error){ __BEGIN_TRY Assert(pPC!=NULL); Assert(pItem!=NULL); Assert(pCorpse!=NULL); ShrineID_t shrineID = pItem->getItemType(); filelog( "WarLog.txt", "%s 丛捞 乔狼 己辑[%u]甫 己瘤 己窜[%s]俊 持菌嚼聪促.", pPC->getName().c_str(), (uint)shrineID, pCorpse->getName().c_str() ); // 己辑啊 甸绢埃 己窜栏肺何磐 乔狼 己辑啊 朝酒辑 倒酒皑阑 唱鸥郴绰 捞棋飘甫 嘿咯霖促.// sendBloodBibleEffect( pCorpse, Effect::EFFECT_CLASS_SHRINE_HOLY_WARP ); // PC俊霸辑 己辑甫 哗狙酒 己窜 救俊 持绰促. Assert( pItem->getObjectID() == pPC->getExtraInventorySlotItem()->getObjectID() ); pPC->deleteItemFromExtraInventorySlot(); GCDeleteInventoryItem gcDeleteInventoryItem; gcDeleteInventoryItem.setObjectID( pItem->getObjectID() ); pPC->getPlayer()->sendPacket( &gcDeleteInventoryItem ); deleteRelicEffect( pPC, pItem ); pCorpse->addTreasure( pItem ); ShrineSet* pShrineSet = getShrineSet( shrineID ); if (pShrineSet==NULL) return false; //ZoneID_t castleZoneID = pShrineSet->getReturnGuardShrine().getZoneID(); // 舅嘎篮 己窜俊 持栏搁 林牢捞 官诧 第 荐龋己窜栏肺 倒酒啊绊 if (isMatchHolyShrine( pItem, pCorpse )// && g_pWarSystem->isModifyCastleOwner( castleZoneID, pPC )) // 己狼 辆练苞 持绰 荤恩狼 辆练捞 鞍篮 版快扼搁 GuardShrine俊 持绢档 等促. || isDefenderOfGuardShrine( pPC, pCorpse ) && isMatchGuardShrine( pItem, pCorpse, pPC ) ) { pShrineSet->setOwnerRace( pPC->getRace() );// g_pWarSystem->endWar(pPC, castleZoneID); // 傈里 场唱绰 War::executeEnd俊辑 舅酒辑 登倒妨霖促.// returnBloodBible( shrineID, false ); //return true; } // 促弗 己窜俊 持芭唱 傈里捞 场朝 惑炔捞 酒聪搁 荐龋己窜栏肺 弊成 倒酒埃促 returnBloodBible( shrineID, false ); return false; __END_CATCH}/*bool ShrineInfoManager::removeShrineShield( Zone *pZone ) throw(Error){ __BEGIN_TRY cout << "ShrineInfoManager::removeShrineShield() is deprecated" << endl; Assert(false); return false; Assert(pZone != NULL); HashMapShrineSetConstItor itr = m_ShrineSets.begin(); ZoneID_t castleZoneID = pZone->getZoneID(); // castleZoneID狼 shrineID甫 八祸且荐啊 绝绢辑 窍唱窍唱 厚背茄促. -_-; for (; itr!=m_ShrineSets.end(); itr++) { ShrineSet* pShrineSet = itr->second; ZoneID_t guardZoneID = pShrineSet->m_GuardShrine.getZoneID(); if (castleZoneID==guardZoneID) { Item* pItem = pZone->getItem( pShrineSet->m_GuardShrine.getObjectID() ); if (pItem != NULL && pItem->getItemClass() == Item::ITEM_CLASS_CORPSE && pItem->isFlag(Effect::EFFECT_CLASS_HAS_BLOOD_BIBLE) && pItem->isFlag(Effect::EFFECT_CLASS_SHRINE_SHIELD) ) { pItem->removeFlag(Effect::EFFECT_CLASS_SHRINE_SHIELD); Corpse* pCorpse = dynamic_cast<Corpse*>(pItem); EffectManager& EM = pItem->getEffectManager(); EM.deleteEffect(Effect::EFFECT_CLASS_SHRINE_SHIELD); GCRemoveEffect gcRemoveEffect; gcRemoveEffect.setObjectID(pItem->getObjectID()); gcRemoveEffect.addEffectList(Effect::EFFECT_CLASS_SHRINE_SHIELD); pZone->broadcastPacket(pCorpse->getX(), pCorpse->getY(), &gcRemoveEffect); } } } return true; __END_CATCH}*/bool ShrineInfoManager::removeAllShrineShield() throw(Error){ __BEGIN_TRY HashMapShrineSetConstItor itr = m_ShrineSets.begin(); // castleZoneID狼 shrineID甫 八祸且荐啊 绝绢辑 窍唱窍唱 厚背茄促. -_-; for (; itr!=m_ShrineSets.end(); itr++) { ShrineSet* pShrineSet = itr->second; removeShrineShield( &(pShrineSet->getSlayerGuardShrine()) ); removeShrineShield( &(pShrineSet->getVampireGuardShrine()) ); removeShrineShield( &(pShrineSet->getOustersGuardShrine()) ); } return true; __END_CATCH}bool ShrineInfoManager::removeShrineShield( ShrineInfo* pShrineInfo ) throw(Error){ __BEGIN_TRY ZoneID_t guardZoneID = pShrineInfo->getZoneID(); Zone* pZone = getZoneByZoneID( guardZoneID ); Assert(pZone!=NULL); Item* pItem = pZone->getItem( pShrineInfo->getObjectID() ); if (pItem != NULL && pItem->getItemClass() == Item::ITEM_CLASS_CORPSE// && pItem->isFlag(Effect::EFFECT_CLASS_HAS_BLOOD_BIBLE) && pItem->isFlag(Effect::EFFECT_CLASS_SHRINE_SHIELD) ) { pItem->removeFlag(Effect::EFFECT_CLASS_SHRINE_SHIELD); Corpse* pCorpse = dynamic_cast<Corpse*>(pItem); EffectManager& EM = pItem->getEffectManager(); EM.deleteEffect(Effect::EFFECT_CLASS_SHRINE_SHIELD); GCRemoveEffect gcRemoveEffect; gcRemoveEffect.setObjectID(pItem->getObjectID()); gcRemoveEffect.addEffectList(Effect::EFFECT_CLASS_SHRINE_SHIELD); pZone->broadcastPacket(pCorpse->getX(), pCorpse->getY(), &gcRemoveEffect); // 己窜俊 乐绰 乔狼 己辑 困摹甫 舅妨霖促. if (pItem->isFlag(Effect::EFFECT_CLASS_HAS_BLOOD_BIBLE)) { Effect* pEffect = EM.findEffect(Effect::EFFECT_CLASS_HAS_BLOOD_BIBLE); Assert(pEffect!=NULL); EffectHasRelic* pHasRelicEffect = dynamic_cast<EffectHasRelic*>(pEffect); Assert(pHasRelicEffect!=NULL); pHasRelicEffect->affect(); } return true; } return false; __END_CATCH}/*bool ShrineInfoManager::addShrineShield(Zone *pZone) throw(Error){ __BEGIN_TRY cout << "ShrineInfoManager::addShrineShield_LOCKED( Zone *pZone ) is deprecated" << endl; Assert( false ); return false; Assert(pZone!=NULL); bool bAdded = false; __ENTER_CRITICAL_SECTION( (*pZone) ) bAdded = addShrineShield_LOCKED( pZone ); __LEAVE_CRITICAL_SECTION( (*pZone) ) return bAdded; __END_CATCH}*//*bool ShrineInfoManager::addShrineShield_LOCKED( Zone *pZone ) throw(Error){ __BEGIN_TRY cout << "ShrineInfoManager::addShrineShield_LOCKED( Zone *pZone ) is deprecated" << endl; Assert( false ); return false; Assert(pZone != NULL); HashMapShrineSetConstItor itr = m_ShrineSets.begin(); ZoneID_t castleZoneID = pZone->getZoneID(); // castleZoneID狼 shrineID甫 八祸且荐啊 绝绢辑 窍唱窍唱 厚背茄促. -_-; for (; itr!=m_ShrineSets.end(); itr++) { ShrineSet* pShrineSet = itr->second; ZoneID_t guardZoneID = pShrineSet->m_GuardShrine.getZoneID(); if (castleZoneID==guardZoneID) { addShrineShield( pShrineSet ); } } return true; __END_CATCH}*/void ShrineInfoManager::addAllShrineShield() throw(Error){ __BEGIN_TRY HashMapShrineSetConstItor itr = m_ShrineSets.begin(); for (; itr!=m_ShrineSets.end(); itr++) { ShrineSet* pShrineSet = itr->second; addShrineShield( pShrineSet->getSlayerGuardShrine() ); addShrineShield( pShrineSet->getVampireGuardShrine() ); addShrineShield( pShrineSet->getOustersGuardShrine() ); } __END_CATCH}bool ShrineInfoManager::addShrineShield( ShrineInfo& shrineInfo ) throw (Error){ __BEGIN_TRY Zone* pZone = getZoneByZoneID( shrineInfo.getZoneID() ); Assert(pZone!=NULL); Item* pItem = pZone->getItem( shrineInfo.getObjectID() ); if (pItem != NULL && pItem->getItemClass() == Item::ITEM_CLASS_CORPSE && !pItem->isFlag(Effect::EFFECT_CLASS_SHRINE_SHIELD) ) { pItem->setFlag(Effect::EFFECT_CLASS_SHRINE_SHIELD); Corpse* pCorpse = dynamic_cast<Corpse*>(pItem); Assert(pCorpse!=NULL); EffectManager& EM = pItem->getEffectManager(); EffectShrineShield* pEffect = new EffectShrineShield(pCorpse); pEffect->setShrineID( pCorpse->getItemType() ); pEffect->setTick( 60 * 10 ); EM.addEffect(pEffect); GCAddEffect gcAddEffect; gcAddEffect.setObjectID( pItem->getObjectID() ); gcAddEffect.setEffectID( Effect::EFFECT_CLASS_SHRINE_SHIELD ); gcAddEffect.setDuration( 65000 ); pZone->broadcastPacket(pCorpse->getX(), pCorpse->getY(), &gcAddEffect); return true; } return false; __END_CATCH}bool ShrineInfoManager::saveBloodBibleOwner() throw(Error){ __BEGIN_TRY Statement* pStmt = NULL; BEGIN_DB { pStmt = g_pDatabaseManager->getConnection("DARKEDEN")->createStatement(); HashMapShrineSetConstItor itr = m_ShrineSets.begin(); for (; itr!=m_ShrineSets.end(); itr++) { ShrineSet* pShrineSet = itr->second; pShrineSet->saveBloodBibleOwner(); } SAFE_DELETE(pStmt); } END_DB( pStmt ) return true; __END_CATCH}bool ShrineSet::saveBloodBibleOwner() throw(Error){ __BEGIN_TRY Statement* pStmt = NULL; BEGIN_DB { pStmt = g_pDatabaseManager->getConnection("DARKEDEN")->createStatement(); pStmt->executeQuery( "UPDATE ShrineInfo SET OwnerRace=%d WHERE ID=%d", (int)getOwnerRace(), (int)getShrineID() ); SAFE_DELETE(pStmt); } END_DB( pStmt ) return true; __END_CATCH}void ShrineInfoManager::registerBloodBibleStatus( ItemType_t m_Part, GCBloodBibleStatus* pGCBBS ) throw(Error){ __BEGIN_TRY ShrineSet* pShrineSet = getShrineSet( m_Part ); Assert( pShrineSet != NULL ); pShrineSet->setBloodBibleStatus( pGCBBS ); __END_CATCH}void ShrineInfoManager::sendBloodBibleStatus( PlayerCreature* pPC ) throw(Error){ __BEGIN_TRY Assert( pPC != NULL ); HashMapShrineSetConstItor itr = m_ShrineSets.begin(); for (; itr!=m_ShrineSets.end(); itr++) { ShrineSet* pShrineSet = itr->second; pShrineSet->sendBloodBibleStatus( pPC ); } __END_CATCH}void ShrineInfoManager::broadcastBloodBibleStatus() throw(Error){ __BEGIN_TRY HashMapShrineSetConstItor itr = m_ShrineSets.begin(); for (; itr!=m_ShrineSets.end(); itr++) { ShrineSet* pShrineSet = itr->second; pShrineSet->broadcastBloodBibleStatus(); } __END_CATCH}string ShrineInfoManager::toString() const throw(){ __BEGIN_TRY StringStream msg; msg << "ShrineInfoManager(" << "Size:" << size() << ",(\n"; HashMapShrineSetConstItor itr = m_ShrineSets.begin(); for( ; itr != m_ShrineSets.end() ; itr++ ) { msg << "\t" << itr->second->toString() << "\n"; } msg << "))"; return msg.toString(); __END_CATCH}ShrineInfoManager* g_pShrineInfoManager = NULL;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -