📄 castleshrineinfomanager.cpp
字号:
{ // 悼练 傈里 吝俊绰 傍侩己捞 酒匆 版快 己狼 家蜡 辨靛啊 defender 捞促. if ( pPC->getGuildID() == pCastleInfo->getGuildID() ) return true; } } return false; __END_CATCH}// 捞 辆练捞 己狼 惑隆 炼阿阑 甸 荐 乐绰啊?bool CastleShrineInfoManager::canPickupCastleSymbol( Race_t race, CastleSymbol* pCastleSymbol ) const throw (Error){ __BEGIN_TRY // 老窜 捞 己狼 惑隆 炼阿捞 绢蠢 傈里俊 家加登绢 乐绰瘤 舅酒柯促. CastleShrineSet* pShrineSet = getShrineSet( pCastleSymbol->getItemType() ); if ( pShrineSet == NULL ) { return false; } ZoneID_t guardZoneID = pShrineSet->m_GuardShrine.getZoneID(); ZoneID_t castleZoneID; bool isCastle = g_pCastleInfoManager->getCastleZoneID( guardZoneID, castleZoneID ); Assert(isCastle==true); War* pWar = g_pWarSystem->getActiveWar( castleZoneID ); if ( pWar == NULL ) { // 酒轿 秽荤府促~ filelog( "WarError.log", "傈里档 救窍绰单 己狼 惑隆炼阿阑 林匡妨绊 茄促. ItemType: %u", (int)pCastleSymbol->getItemType() ); return false; } /* if ( pWar->getWarType() == WAR_RACE ) { // 辆练 傈里捞搁 瘤唱俺唱 促 赁绰促. return true; } else */ if ( pWar->getWarType() == WAR_GUILD ) { CastleInfo* pCastleInfo = g_pCastleInfoManager->getCastleInfo( castleZoneID ); if ( pCastleInfo == NULL ) { // 酒轿 秽荤府促~ filelog( "WarError.log", "己捞 酒聪促. ItemType: %u, ZoneID : %u", (int)pCastleSymbol->getItemType(), (int)castleZoneID ); return false; } return ( race == pCastleInfo->getRace() ); } // 酒轿 秽荤府促~ filelog( "WarError.log", "捞惑茄 傈里捞促. WarType : %u", (int)pWar->getWarType() ); return false; __END_CATCH}bool CastleShrineInfoManager::getMatchGuardShrinePosition( Item* pItem, ZoneItemPosition& zip ) const throw(Error){ __BEGIN_TRY if ( pItem->getItemClass() != Item::ITEM_CLASS_CASTLE_SYMBOL ) return false; ItemType_t itemType = pItem->getItemType(); ShrineID_t shrineID = itemType; // ShrineID = ItemType(of CastleSymbol) CastleShrineSet* pShrineSet = getShrineSet( shrineID ); if ( pShrineSet == NULL ) { // 捞 己狼 惑隆俊 秦寸窍绰 Shrine Set捞 绝促. return false; } zip.setZoneID( pShrineSet->m_GuardShrine.getZoneID() ); zip.setZoneX( pShrineSet->m_GuardShrine.getX() ); zip.setZoneY( pShrineSet->m_GuardShrine.getY() ); return true; __END_CATCH}// putCastleSymbol ( 穿焙啊 己瘤己窜俊 己狼 惑隆阑 初疽阑锭 ) 捞 阂妨瘤搁 bLock = false// returnAllCastleSymbol ( 矫埃捞 促 登菌阑 锭 ) 捞 阂妨瘤搁 bLock = true// true老 版快 促弗 胶饭靛 (WarSystem捞 倒酒啊绰 胶饭靛)俊辑 阂妨瘤骨肺 郴何俊辑 遏阑 吧绢拎具 窍绊// false老 版快 己瘤己窜捞 乐绰 粮苞 鞍篮 粮弊缝胶饭靛俊辑 倒酒啊骨肺 郴何俊辑 遏阑 吧绢林瘤 臼酒具 茄促.// 2003. 2. 5. by Sequoiabool CastleShrineInfoManager::returnCastleSymbol( ShrineID_t shrineID, bool bLock ) const throw (Error){ __BEGIN_TRY // shrineID客 包访等 CastleSymbol阑 DB沥焊甫 捞侩秦辑 茫绰促. CastleShrineSet* pShrineSet = getShrineSet( shrineID ); if (pShrineSet==NULL) return false; Item::ItemClass ItemClass = Item::ITEM_CLASS_CASTLE_SYMBOL; ItemID_t ItemID = pShrineSet->getCastleSymbolItemID(); if (ItemID==0) return false; GlobalItemPosition* pItemPosition = GlobalItemPositionLoader::getInstance()->load( ItemClass, ItemID ); if (pItemPosition==NULL) return false; Item* pItem = pItemPosition->popItem( bLock ); if (pItem!=NULL && pItem->getItemClass()==Item::ITEM_CLASS_CASTLE_SYMBOL) { Zone* pZone = pItemPosition->getZone(); Assert(pZone!=NULL); CastleSymbol* pCastleSymbol = dynamic_cast<CastleSymbol*>(pItem); Assert(pCastleSymbol!=NULL); return returnCastleSymbol(pZone, pCastleSymbol); } return false; __END_CATCH}// WarSystem俊辑父 何弗促.bool CastleShrineInfoManager::returnAllCastleSymbol( ZoneID_t castleZoneID ) const throw (Error){ __BEGIN_TRY bool bReturned = false; HashMapShrineSetConstItor itr = m_ShrineSets.begin(); // castleZoneID狼 shrineID甫 八祸且荐啊 绝绢辑 窍唱窍唱 厚背茄促. -_-; for (; itr!=m_ShrineSets.end(); itr++) { CastleShrineSet* pShrineSet = itr->second; ZoneID_t guardZoneID = pShrineSet->m_GuardShrine.getZoneID(); ZoneID_t guardCastleZoneID; if (g_pCastleInfoManager->getCastleZoneID(guardZoneID, guardCastleZoneID)) { if (castleZoneID==guardCastleZoneID) { bReturned = returnCastleSymbol( pShrineSet->m_ShrineID ) || bReturned; } } } return bReturned; __END_CATCH}bool CastleShrineInfoManager::returnCastleSymbol(Zone* pZone, CastleSymbol* pCastleSymbol) const throw (Error){ __BEGIN_TRY Assert(pZone!=NULL); Assert(pCastleSymbol!=NULL); // TargetZone, Shrine阑 茫绰促. ShrineID_t shrineID = pCastleSymbol->getItemType(); CastleShrineSet* pShrineSet = getShrineSet( shrineID ); if (pShrineSet==NULL) return false; ShrineInfo& GuardShrine = pShrineSet->m_GuardShrine; Zone* pTargetZone = getZoneByZoneID( GuardShrine.getZoneID() ); Assert( pTargetZone!=NULL ); ObjectID_t CorpseObjectID = GuardShrine.getObjectID(); pZone->transportItemToCorpse( pCastleSymbol, pTargetZone, CorpseObjectID );// StringStream msg;// msg << "己狼 惑隆 炼阿(" << GuardShrine.getName() << ")捞 荐龋己窜(" << GuardShrine.getName() << ")栏肺 倒酒艾嚼聪促."; char msg[200]; sprintf( msg, g_pStringPool->c_str( STRID_RETURN_TO_GUARD_SHRINE_CASTLE_SYMBOL ), GuardShrine.getName().c_str(), GuardShrine.getName().c_str() ); GCSystemMessage msgPkt; msgPkt.setMessage( msg ); g_pCastleInfoManager->broadcastShrinePacket( shrineID, &msgPkt ); return true; __END_CATCH}bool CastleShrineInfoManager::putCastleSymbol(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() ); // 己狼 惑隆捞 甸绢埃 己窜栏肺何磐 己狼 惑隆捞 朝酒辑 倒酒皑阑 唱鸥郴绰 捞棋飘甫 嘿咯霖促.// sendCastleSymbolEffect( 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 ); CastleShrineSet* pShrineSet = getShrineSet( shrineID ); if (pShrineSet==NULL) return false; ZoneID_t guardZoneID = pShrineSet->m_GuardShrine.getZoneID(); ZoneID_t castleZoneID; bool isCastle = g_pCastleInfoManager->getCastleZoneID( guardZoneID, castleZoneID ); Assert(isCastle==true); // 舅嘎篮 己窜俊 持栏搁 傈里捞 场唱绊 荐龋己窜栏肺 倒酒啊绊 if (isMatchHolyShrine( pItem, pCorpse ) && g_pWarSystem->isModifyCastleOwner( castleZoneID, pPC )) { g_pWarSystem->endWar(pPC, castleZoneID); // 傈里 场唱绰 War::executeEnd俊辑 舅酒辑 登倒妨霖促.// returnCastleSymbol( shrineID, false ); return true; } // 促弗 己窜俊 持芭唱 傈里捞 场朝 惑炔捞 酒聪搁 荐龋己窜栏肺 弊成 倒酒埃促 returnCastleSymbol( shrineID, false ); return false; __END_CATCH}// pZone篮 guardZone捞促.bool CastleShrineInfoManager::removeShrineShield( Zone *pZone ) throw(Error){ __BEGIN_TRY Assert(pZone != NULL); HashMapShrineSetConstItor itr = m_ShrineSets.begin(); ZoneID_t guardZoneID = pZone->getZoneID(); // castleZoneID狼 shrineID甫 八祸且荐啊 绝绢辑 窍唱窍唱 厚背茄促. -_-; for (; itr!=m_ShrineSets.end(); itr++) { CastleShrineSet* pShrineSet = itr->second; ZoneID_t currentGuardZoneID = pShrineSet->m_GuardShrine.getZoneID(); if (guardZoneID==currentGuardZoneID) { Item* pItem = pZone->getItem( pShrineSet->m_GuardShrine.getObjectID() ); if (pItem != NULL && pItem->getItemClass() == Item::ITEM_CLASS_CORPSE && pItem->isFlag(Effect::EFFECT_CLASS_HAS_CASTLE_SYMBOL) && 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}// pZone篮 guardZone捞促.bool CastleShrineInfoManager::addShrineShield(Zone *pZone) throw(Error){ __BEGIN_TRY Assert(pZone!=NULL); bool bAdded = false; __ENTER_CRITICAL_SECTION( (*pZone) ) bAdded = addShrineShield_LOCKED( pZone ); __LEAVE_CRITICAL_SECTION( (*pZone) ) return bAdded; __END_CATCH}// pZone篮 guardZone捞促.bool CastleShrineInfoManager::addShrineShield_LOCKED( Zone *pZone ) throw(Error){ __BEGIN_TRY Assert(pZone != NULL); HashMapShrineSetConstItor itr = m_ShrineSets.begin(); ZoneID_t guardZoneID = pZone->getZoneID(); // castleZoneID狼 shrineID甫 八祸且荐啊 绝绢辑 窍唱窍唱 厚背茄促. -_-; for (; itr!=m_ShrineSets.end(); itr++) { CastleShrineSet* pShrineSet = itr->second; ZoneID_t currentGuardZoneID = pShrineSet->m_GuardShrine.getZoneID(); if (guardZoneID==currentGuardZoneID) { Item* pItem = pZone->getItem( pShrineSet->m_GuardShrine.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; __END_CATCH}string CastleShrineInfoManager::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}CastleShrineInfoManager* g_pCastleShrineInfoManager = NULL;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -