📄 shrineinfomanager.cpp
字号:
{ pShrine->setFlag( Effect::EFFECT_CLASS_SHRINE_HOLY ); EffectShrineHoly* pEffect = new EffectShrineHoly(pShrine); pEffect->setShrineID( itemType ); pEffect->setTick( 60 * 10 ); pShrine->getEffectManager().addEffect( pEffect ); } */ TPOINT tp = pZone->addItem( pShrine, shrineInfo.getX(), shrineInfo.getY(), true ); Assert( tp.x != -1 ); if ( shrineInfo.getShrineType() == ShrineInfo::SHRINE_GUARD ) { // 葛电 荐龋己窜俊 Shield Effect 嘿牢促 pShrine->setFlag( Effect::EFFECT_CLASS_SHRINE_SHIELD ); EffectShrineShield* pEffect = new EffectShrineShield(pShrine); pEffect->setShrineID( itemType ); pEffect->setTick( 60 * 10 ); pShrine->getEffectManager().addEffect( pEffect ); } forbidDarkness( pZone, tp.x, tp.y, 2 ); // 己窜 谅钎甫 货肺 技泼茄促. shrineInfo.setX( tp.x ); shrineInfo.setY( tp.y ); __END_CATCH}void ShrineInfoManager::addShrineSet( ShrineSet* pShrineSet ) throw(Error){ __BEGIN_TRY if ( pShrineSet == NULL ) return; ShrineID_t shrineID = pShrineSet->getShrineID(); HashMapShrineSetItor itr = m_ShrineSets.find( shrineID ); if ( itr != m_ShrineSets.end() ) { filelog( "ShrineInfoError.log", "ShrineInfoManager::addShrineSet DuplicatedException : %d", (int)shrineID ); return; } m_ShrineSets[ shrineID ] = pShrineSet; __END_CATCH}void ShrineInfoManager::deleteShrineSet( ShrineID_t shrineID ) throw(Error){ __BEGIN_TRY HashMapShrineSetItor itr = m_ShrineSets.find( shrineID ); if ( itr != m_ShrineSets.end() ) { SAFE_DELETE( itr->second ); m_ShrineSets.erase( shrineID ); } __END_CATCH}ShrineSet* ShrineInfoManager::getShrineSet( ShrineID_t shrineID ) const throw(Error){ __BEGIN_TRY HashMapShrineSetConstItor itr = m_ShrineSets.find( shrineID ); if ( itr != m_ShrineSets.end() ) { return itr->second; } return NULL; __END_CATCH}bool ShrineInfoManager::isMatchGuardShrine(Item* pItem, MonsterCorpse* pMonsterCorpse, PlayerCreature* pPC) const throw(Error){ __BEGIN_TRY if ( pItem->getItemClass() != Item::ITEM_CLASS_BLOOD_BIBLE ) return false; ItemType_t itemType = pItem->getItemType(); ShrineID_t shrineID = itemType; // ShrineID = ItemType(of BloodBible) ShrineSet* pShrineSet = getShrineSet( shrineID ); if( pShrineSet == NULL ) { // 捞 乔狼 己辑俊 秦寸窍绰 Shrine Set捞 绝促. return false; } // 捞 乔狼 己辑俊 秦寸窍绰 Shrine set狼 己瘤己窜狼 MonsterType捞 // 逞绢柯 MonsterCorpse狼 MonsterType苞 鞍栏搁 true if (pPC->isSlayer()) { return pShrineSet->getSlayerGuardShrine().getMonsterType() == pMonsterCorpse->getMonsterType(); } else if (pPC->isVampire()) { return pShrineSet->getVampireGuardShrine().getMonsterType() == pMonsterCorpse->getMonsterType(); } else if (pPC->isOusters()) { return pShrineSet->getOustersGuardShrine().getMonsterType() == pMonsterCorpse->getMonsterType(); } return false; __END_CATCH}bool ShrineInfoManager::isMatchHolyShrine(Item* pItem, MonsterCorpse* pMonsterCorpse) const throw(Error){ __BEGIN_TRY if ( pItem->getItemClass() != Item::ITEM_CLASS_BLOOD_BIBLE ) return false; ItemType_t itemType = pItem->getItemType(); ShrineID_t shrineID = itemType; // ShrineID = ItemType(of BloodBible) ShrineSet* pShrineSet = getShrineSet( shrineID ); if( pShrineSet == NULL ) { // 捞 乔狼 己辑俊 秦寸窍绰 Shrine Set捞 绝促. return false; } // 捞 乔狼 己辑俊 秦寸窍绰 Shrine set狼 己瘤己窜狼 MonsterType捞 // 逞绢柯 MonsterCorpse狼 MonsterType苞 鞍栏搁 true return pShrineSet->getHolyShrine().getMonsterType() == pMonsterCorpse->getMonsterType(); __END_CATCH}bool ShrineInfoManager::isDefenderOfGuardShrine( PlayerCreature* pPC, MonsterCorpse* pShrine ) const throw(Error){ __BEGIN_TRY Zone* pZone = pShrine->getZone(); Assert( pZone != NULL ); // 己捞 酒聪搁 秽~ if ( !pZone->isCastle() ) { return false; } ZoneID_t castleZoneID = pZone->getZoneID(); CastleInfo* pCastleInfo = g_pCastleInfoManager->getCastleInfo( castleZoneID ); if ( pCastleInfo == NULL ) return false; // 辆练 傈里 吝俊绰 己狼 家蜡 辆练苞 鞍篮 辆练捞搁 defender 捞促. if ( pPC->getRace() == pCastleInfo->getRace() ) return true; return false; __END_CATCH}// 捞 辆练捞 己辑 炼阿阑 甸 荐 乐绰啊?bool ShrineInfoManager::canPickupBloodBible( Race_t race, BloodBible* pBloodBible ) const throw (Error){ __BEGIN_TRY // 乔狼 己辑绰 辆练埃 傈里俊父 荤侩等促. return true;/* // 老窜 捞 己辑 炼阿捞 绢蠢 傈里俊 家加登绢 乐绰瘤 舅酒柯促. ShrineSet* pShrineSet = getShrineSet( pBloodBible->getItemType() ); if ( pShrineSet == NULL ) { return false; } ZoneID_t castleZoneID = pShrineSet->m_GuardShrine.getZoneID(); War* pWar = g_pWarSystem->getActiveWar( castleZoneID ); if ( pWar == NULL ) { // 酒轿 秽荤府促~ filelog( "WarError.log", "傈里档 救窍绰单 己辑炼阿阑 林匡妨绊 茄促. ItemType: %u", (int)pBloodBible->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)pBloodBible->getItemType(), (int)castleZoneID ); return false; } return ( race == pCastleInfo->getRace() ); } // 酒轿 秽荤府促~ filelog( "WarError.log", "捞惑茄 傈里捞促. WarType : %u", (int)pWar->getWarType() ); return false; */ __END_CATCH}bool ShrineInfoManager::getMatchGuardShrinePosition( Item* pItem, ZoneItemPosition& zip ) const throw(Error){ __BEGIN_TRY if ( pItem->getItemClass() != Item::ITEM_CLASS_BLOOD_BIBLE ) return false; ItemType_t itemType = pItem->getItemType(); ShrineID_t shrineID = itemType; // ShrineID = ItemType(of BloodBible) ShrineSet* pShrineSet = getShrineSet( shrineID ); if ( pShrineSet == NULL ) { // 捞 乔狼 己辑俊 秦寸窍绰 Shrine Set捞 绝促. return false; } ShrineInfo& GuardShrine = pShrineSet->getReturnGuardShrine(); zip.setZoneID( GuardShrine.getZoneID() ); zip.setZoneX( GuardShrine.getX() ); zip.setZoneY( GuardShrine.getY() ); return true; __END_CATCH}// putBloodBible ( 穿焙啊 己瘤己窜俊 己辑甫 初疽阑锭 ) 捞 阂妨瘤搁 bLock = false// returnAllBloodBible ( 矫埃捞 促 登菌阑 锭 ) 捞 阂妨瘤搁 bLock = true// true老 版快 促弗 胶饭靛 (WarSystem捞 倒酒啊绰 胶饭靛)俊辑 阂妨瘤骨肺 郴何俊辑 遏阑 吧绢拎具 窍绊// false老 版快 己瘤己窜捞 乐绰 粮苞 鞍篮 粮弊缝胶饭靛俊辑 倒酒啊骨肺 郴何俊辑 遏阑 吧绢林瘤 臼酒具 茄促.// 2003. 2. 5. by Sequoiabool ShrineInfoManager::returnBloodBible( ShrineID_t shrineID, bool bLock ) const throw (Error){ __BEGIN_TRY // shrineID客 包访等 BloodBible阑 DB沥焊甫 捞侩秦辑 茫绰促. ShrineSet* pShrineSet = getShrineSet( shrineID ); if (pShrineSet==NULL) return false; Item::ItemClass ItemClass = Item::ITEM_CLASS_BLOOD_BIBLE; ItemID_t ItemID = pShrineSet->getBloodBibleItemID(); 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_BLOOD_BIBLE) { Zone* pZone = pItemPosition->getZone(); Assert(pZone!=NULL); BloodBible* pBloodBible = dynamic_cast<BloodBible*>(pItem); Assert(pBloodBible!=NULL); return returnBloodBible(pZone, pBloodBible); } return false; __END_CATCH}// WarSystem俊辑父 何弗促./*bool ShrineInfoManager::returnCastleBloodBible( ZoneID_t castleZoneID ) const throw (Error){ __BEGIN_TRY cout << "ShrineInfoManager::returnCastleBloodBible() is deprecated" << endl; Assert(false); return false; bool bReturned = false; HashMapShrineSetConstItor itr = m_ShrineSets.begin(); // castleZoneID狼 shrineID甫 八祸且荐啊 绝绢辑 窍唱窍唱 厚背茄促. -_-; for (; itr!=m_ShrineSets.end(); itr++) { ShrineSet* pShrineSet = itr->second; ZoneID_t guardZoneID = pShrineSet->m_GuardShrine.getZoneID(); if (castleZoneID==guardZoneID) { bReturned = bReturned || returnBloodBible( pShrineSet->m_ShrineID ); } } return bReturned; __END_CATCH}*/// WarSystem俊辑父 何弗促.bool ShrineInfoManager::returnAllBloodBible() const throw (Error){ __BEGIN_TRY bool bReturned = false; HashMapShrineSetConstItor itr = m_ShrineSets.begin(); // castleZoneID狼 shrineID甫 八祸且荐啊 绝绢辑 窍唱窍唱 厚背茄促. -_-; for (; itr!=m_ShrineSets.end(); itr++) { ShrineSet* pShrineSet = itr->second; bReturned = returnBloodBible( pShrineSet->getShrineID() ) || bReturned; } return bReturned; __END_CATCH}bool ShrineInfoManager::returnBloodBible(Zone* pZone, BloodBible* pBloodBible) const throw (Error){ __BEGIN_TRY Assert(pZone!=NULL); Assert(pBloodBible!=NULL); // TargetZone, Shrine阑 茫绰促. ShrineID_t shrineID = pBloodBible->getItemType(); ShrineSet* pShrineSet = getShrineSet( shrineID ); if (pShrineSet==NULL) return false; ShrineInfo& GuardShrine = pShrineSet->getReturnGuardShrine(); Zone* pTargetZone = getZoneByZoneID( GuardShrine.getZoneID() ); Assert( pTargetZone!=NULL ); ObjectID_t CorpseObjectID = GuardShrine.getObjectID(); pZone->transportItemToCorpse( pBloodBible, pTargetZone, CorpseObjectID ); /* StringStream msg; msg << "乔狼 己辑 炼阿(" << GuardShrine.getName() << ")捞 " << (pShrineSet->getOwnerRace()==RACE_SLAYER? "浇饭捞绢":"轨颇捞绢") << "狼 荐龋己窜(" << GuardShrine.getName() << ")栏肺 倒酒艾嚼聪促."; */ char msg[300]; const char* race; if ( pShrineSet->getOwnerRace() == RACE_SLAYER ) { race = g_pStringPool->c_str( STRID_SLAYER ); } else if ( pShrineSet->getOwnerRace() == RACE_VAMPIRE ) { race = g_pStringPool->c_str( STRID_VAMPIRE ); } else if ( pShrineSet->getOwnerRace() == RACE_OUSTERS ) { race = g_pStringPool->c_str( STRID_OUSTERS ); } sprintf( msg, g_pStringPool->c_str( STRID_RETURN_TO_GUARD_SHRINE_BLOOD_BIBLE ), GuardShrine.getName().c_str(), race,// (pShrineSet->getOwnerRace()==RACE_SLAYER? g_pStringPool->c_str( STRID_SLAYER ) : g_pStringPool->c_str( STRID_VAMPIRE ) ), GuardShrine.getName().c_str() ); GCSystemMessage msgPkt; msgPkt.setMessage( msg ); g_pHolyLandManager->broadcast( &msgPkt ); return true; __END_CATCH
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -