📄 relicutil.cpp
字号:
else { return false; } // has relic 捞棋飘甫 茫酒辑 捞棋飘甫 瘤况霖促. Effect* pEffect = pCreature->findEffect( effectClass ); if ( pEffect != NULL ) { pCreature->removeFlag( effectClass ); pEffect->unaffect(); pCreature->deleteEffect( effectClass ); return true; } return false; __END_CATCH}booladdRelicEffect(Creature* pCreature, Item* pItem) throw (Error){ __BEGIN_TRY Assert(pCreature!=NULL); Assert(pItem!=NULL); // 己拱阑 啊脸促绰 捞棋飘甫 嘿牢促. Effect::EffectClass effectClass; Effect::EffectClass effectClassSend; Item::ItemClass itemclass = pItem->getItemClass(); ItemType_t itemtype = pItem->getItemType(); if (itemclass == Item::ITEM_CLASS_RELIC) { const RelicInfo* pRelicInfo = dynamic_cast<RelicInfo*>(g_pRelicInfoManager->getItemInfo(itemtype)); if (pRelicInfo->relicType==RELIC_TYPE_SLAYER) { effectClassSend = effectClass = Effect::EFFECT_CLASS_HAS_SLAYER_RELIC; EffectHasRelic* pEffect = new EffectHasSlayerRelic(pCreature); //pEffect->setNextTime( 1*10 ); // 10檬 饶 pEffect->setTick( 1*60*10 ); // 1盒付促 皋技瘤 免仿 pCreature->addEffect( pEffect ); pEffect->affect(); } else { effectClassSend = effectClass = Effect::EFFECT_CLASS_HAS_VAMPIRE_RELIC; EffectHasRelic* pEffect = new EffectHasVampireRelic(pCreature); //pEffect->setNextTime( 1*10 ); // 10檬 饶 pEffect->setTick( 1*60*10 ); // 1盒付促 皋技瘤 免仿 pCreature->addEffect( pEffect ); pEffect->affect(); } } else if (itemclass == Item::ITEM_CLASS_BLOOD_BIBLE) { effectClass = Effect::EFFECT_CLASS_HAS_BLOOD_BIBLE; effectClassSend = (Effect::EffectClass)((int)Effect::EFFECT_CLASS_HAS_BLOOD_BIBLE + itemtype); EffectHasRelic* pEffect = new EffectHasBloodBible(pCreature); //pEffect->setNextTime( 1*10 ); // 10檬 饶 pEffect->setTick( 1*60*10 ); // 1盒付促 皋技瘤 免仿 pEffect->setPart( itemtype ); pCreature->addEffect( pEffect ); pEffect->affect(); } else if (itemclass == Item::ITEM_CLASS_CASTLE_SYMBOL) { effectClass = Effect::EFFECT_CLASS_HAS_CASTLE_SYMBOL; effectClassSend = (Effect::EffectClass)((int)Effect::EFFECT_CLASS_HAS_CASTLE_SYMBOL + itemtype); EffectHasRelic* pEffect = new EffectHasCastleSymbol(pCreature); //pEffect->setNextTime( 1*10 ); // 10檬 饶 pEffect->setTick( 1*60*10 ); // 1盒付促 皋技瘤 免仿 pEffect->setPart( itemtype ); pCreature->addEffect( pEffect ); pEffect->affect(); } else { return false; } pCreature->setFlag( effectClass ); // Effect嘿看促绊 舅妨霖促. GCAddEffect gcAddEffect; gcAddEffect.setObjectID( pCreature->getObjectID() ); gcAddEffect.setEffectID( effectClassSend ); gcAddEffect.setDuration( 65000 ); pCreature->getZone()->broadcastPacket(pCreature->getX(), pCreature->getY(), &gcAddEffect); return true; __END_CATCH}bool dropRelicToZone(PlayerCreature* pPC, Item* pItem) throw (Error){ Zone* pZone = pPC->getZone(); Assert(pZone!=NULL); // 老窜 酒捞袍阑 官蹿俊 冻绢哆赴促. // 矫眉客 般磨 荐档 乐栏骨肺.. 某腐磐啊 绝绰 镑俊 冻绢哆赴促. TPOINT pt = pZone->addItem( pItem, pPC->getX(), pPC->getY(), false ); if ( pt.x != -1 ) // 冻绢哆府绰单 己傍沁促搁 { char pField[80]; sprintf(pField, "OwnerID='', Storage=%d, StorageID=%u, X=%d, Y=%d", STORAGE_ZONE, pZone->getZoneID(), pt.x, pt.y); pItem->tinysave(pField); // 牢亥配府俊辑 猾促. //pInventory->deleteItem( pItem->getObjectID() ); deleteRelicEffect( pPC, pItem ); // Relic捞 冻绢柳 镑狼 沥焊甫 拼拼洒 舅妨林档废 茄促./* if (!pItem->isFlag( Effect::EFFECT_CLASS_RELIC_POSITION)) { EffectRelicPosition* pPosition = new EffectRelicPosition(pItem); //pPosition->setNextTime(10); // 1檬 饶 皋技瘤 谎赴促. pPosition->setTick( 1*60*10 ); // 1盒付促 茄锅究 舅赴促. pPosition->setZoneID( pZone->getZoneID() ); pPosition->setX( pt.x ); pPosition->setY( pt.y ); pPosition->setPart( pItem->getItemType() ); pItem->setFlag( Effect::EFFECT_CLASS_RELIC_POSITION ); pItem->getEffectManager().addEffect( pPosition ); pPosition->affect(); }*/ // 傈眉 荤侩磊俊霸 Relic 捞 冻绢脸促绰 皋矫瘤甫 焊辰促. /* ZoneInfo* pZoneInfo = g_pZoneInfoManager->getZoneInfo( pZone->getZoneID() ); Assert( pZoneInfo != NULL ); StringStream msg; msg << pRelicInfo->getName() << " 己拱捞 " << pZoneInfo->getFullName() << " ( " << pt.x << " , " << pt.y << " ) 俊 冻绢脸嚼聪促."; GCSystemMessage message; message.setMessage( msg.toString() ); g_pZoneGroupManager->broadcast( &message ); */ if (!pItem->isFlag( Effect::EFFECT_CLASS_RELIC_LOCK )) { EffectRelicLock* pLock = new EffectRelicLock(pItem); pLock->setDeadline( 10*10 ); // 10檬 pItem->setFlag( Effect::EFFECT_CLASS_RELIC_LOCK ); pItem->getEffectManager().addEffect( pLock ); } } else { throw Error("Logout窍绰单 己拱 冻绢哆副 磊府啊 绝促"); //return false; } return true;}bool dropRelicToZone(Creature* pCreature, bool bSendPacket) throw (Error){ __BEGIN_TRY bool bDrop = false; /////////////////////////////////////////////////////////////////// // 磷阑 锭 Relic Item阑 啊瘤绊 乐促搁 官蹿俊 冻绢哆赴促. /////////////////////////////////////////////////////////////////// if ( pCreature->hasRelicItem()) { PlayerCreature* pPC = dynamic_cast<PlayerCreature*>(pCreature); Assert( pPC != NULL ); // mouse俊 relic捞 乐绰瘤 眉农 Item* pSlotItem = pPC->getExtraInventorySlotItem(); if (pSlotItem!=NULL && isRelicItem( pSlotItem )) { if (dropRelicToZone( pPC, pSlotItem )) { pPC->deleteItemFromExtraInventorySlot(); // player狼 mouse俊辑 力芭茄促. // client俊辑 捞 菩哦阑 罐栏搁 // mouse俊辑档 窃 眉农秦林霸 沁促. if (bSendPacket) { GCDeleteInventoryItem gcDeleteInventoryItem; gcDeleteInventoryItem.setObjectID( pSlotItem->getObjectID() ); pPC->getPlayer()->sendPacket( &gcDeleteInventoryItem ); } bDrop = true; } } Zone* pZone = pPC->getZone(); Assert( pZone != NULL ); Inventory* pInventory = pPC->getInventory(); Assert( pInventory != NULL ); ZoneInfo* pZoneInfo = g_pZoneInfoManager->getZoneInfo( pZone->getZoneID() ); Assert( pZoneInfo != NULL ); // 牢亥配府俊辑 Relic Item阑 茫酒夯促. for ( CoordInven_t y = 0; y < pInventory->getHeight(); y++ ) { for ( CoordInven_t x = 0; x < pInventory->getWidth(); x++ ) { Item* pItem = pInventory->getItem( x, y ); if ( pItem != NULL && isRelicItem( pItem )) { // 老窜 酒捞袍阑 官蹿俊 冻绢哆赴促. if (dropRelicToZone(pPC, pItem)) { // 牢亥配府俊辑 猾促. pInventory->deleteItem( pItem->getObjectID() ); // player狼 inventory俊辑 力芭茄促. if (bSendPacket) { GCDeleteInventoryItem gcDeleteInventoryItem; gcDeleteInventoryItem.setObjectID( pItem->getObjectID() ); pPC->getPlayer()->sendPacket( &gcDeleteInventoryItem ); } bDrop = true; } } } } } return bDrop; __END_CATCH}// 矫眉俊辑 RelicItem捞 唱坷绰巴 贸府booldissectionRelicItem( Corpse* pCorpse, Item* pItem, const TPOINT& pt ) throw (Error){ __BEGIN_TRY if (!isRelicItem( pItem )) return false; switch (pItem->getItemClass()) { //---------------------------------------------------------------------- // // Relic // //---------------------------------------------------------------------- case Item::ITEM_CLASS_RELIC : { // 父距 酒捞袍捞 窍唱档 巢瘤 臼疽促搁(付瘤阜 酒捞袍捞菌促搁, EffectRelic阑 昏力秦 霖促) try { int relicIndex = pItem->getItemType(); const RelicInfo* pRelicInfo = dynamic_cast<RelicInfo*>(g_pRelicInfoManager->getItemInfo( pItem->getItemType() ) ); deleteRelicEffect( pCorpse, pItem ); g_pCombatInfoManager->setRelicOwner(relicIndex, CombatInfoManager::RELIC_OWNER_NULL); char msg[50]; sprintf( msg, g_pStringPool->c_str( STRID_RELIC_FROM_RELIC_TABLE ), pRelicInfo->getName().c_str() );// StringStream msg;// msg << "己拱 焊包措俊辑 "// << "己拱(" << pRelicInfo->getName() << ")捞 唱吭嚼聪促."; GCSystemMessage gcSystemMessage; gcSystemMessage.setMessage( msg ); g_pZoneGroupManager->broadcast( &gcSystemMessage ); // relic捞 己拱焊包措俊辑 狐廉唱吭扁 锭巩俊 // 焊呈胶/菩澄萍甫 促矫 炼沥秦霖促. g_pCombatInfoManager->computeModify(); } catch (Throwable& t) { cout << t.toString().c_str() << endl; throw; } } return true; //---------------------------------------------------------------------- // // BloodBible // //---------------------------------------------------------------------- case Item::ITEM_CLASS_BLOOD_BIBLE : { //deleteRelicEffect( pCorpse, pItem ); const BloodBibleInfo* pBloodBibleInfo = dynamic_cast<BloodBibleInfo*>(g_pBloodBibleInfoManager->getItemInfo( pItem->getItemType() ) );// StringStream msg;// msg << "乔狼 己辑 炼阿(" << pBloodBibleInfo->getName() << ")捞 唱吭嚼聪促."; char msg[200]; sprintf( msg, g_pStringPool->c_str( STRID_BLOOD_BIBLE_FROM_SHRINE ), pBloodBibleInfo->getName().c_str() ); GCSystemMessage gcSystemMessage; gcSystemMessage.setMessage( msg ); //g_pZoneGroupManager->broadcast( &gcSystemMessage ); g_pHolyLandManager->broadcast( &gcSystemMessage ); // 己辑 炼阿 酒捞袍 困摹 函版 if (!pItem->isFlag( Effect::EFFECT_CLASS_RELIC_POSITION)) { EffectRelicPosition* pPosition = new EffectRelicPosition(pItem); //pPosition->setNextTime(10); // 1檬 饶 皋技瘤 谎赴促. pPosition->setTick( 1*60*10 ); // 1盒付促 茄锅究 舅赴促. pPosition->setZoneID( pCorpse->getZone()->getZoneID() ); pPosition->setX( pt.x ); pPosition->setY( pt.y ); pPosition->setPart( pItem->getItemType() ); pItem->setFlag( Effect::EFFECT_CLASS_RELIC_POSITION ); pItem->getEffectManager().addEffect( pPosition ); pPosition->affect(); } } return true; //---------------------------------------------------------------------- // // CastleSymbol // //---------------------------------------------------------------------- case Item::ITEM_CLASS_CASTLE_SYMBOL : { //deleteRelicEffect( pCorpse, pItem ); const CastleSymbolInfo* pCastleSymbolInfo = dynamic_cast<const CastleSymbolInfo*>(g_pCastleSymbolInfoManager->getItemInfo( pItem->getItemType() ) ); if ( pCastleSymbolInfo != NULL ) {// StringStream msg;// msg << "己 惑隆拱(" << pCastleSymbolInfo->getName() << ")捞 唱吭嚼聪促."; char msg[200]; sprintf( msg, g_pStringPool->c_str( STRID_CASTLE_SYMBOL_FROM_SHRINE ), pCastleSymbolInfo->getName().c_str() ); GCSystemMessage gcSystemMessage; gcSystemMessage.setMessage( msg ); //g_pZoneGroupManager->broadcast( &gcSystemMessage ); g_pCastleInfoManager->broadcastShrinePacket( pItem->getItemType(), &gcSystemMessage ); // 己辑 炼阿 酒捞袍 困摹 函版 if (!pItem->isFlag( Effect::EFFECT_CLASS_RELIC_POSITION)) { EffectRelicPosition* pPosition = new EffectRelicPosition(pItem); //pPosition->setNextTime(10); // 1檬 饶 皋技瘤 谎赴促. pPosition->setTick( 1*60*10 ); // 1盒付促 茄锅究 舅赴促. pPosition->setZoneID( pCorpse->getZone()->getZoneID() ); pPosition->setX( pt.x ); pPosition->setY( pt.y ); pPosition->setPart( pItem->getItemType() ); pItem->setFlag( Effect::EFFECT_CLASS_RELIC_POSITION ); pItem->getEffectManager().addEffect( pPosition ); pPosition->affect(); } } } return true; default : return false; } return false; __END_CATCH}// Relic捞 pCorpse俊辑 绢凋啊肺 warp登菌促绊 且锭// pCorpse俊 Effect甫 嘿咯霖促.voidsendRelicWarpEffect(Corpse* pCorpse) throw (Error){ __BEGIN_TRY Assert(pCorpse!=NULL); if (pCorpse->isFlag(Effect::EFFECT_CLASS_SHRINE_GUARD)) { sendBloodBibleEffect( pCorpse, Effect::EFFECT_CLASS_SHRINE_GUARD_WARP ); } else if (pCorpse->isFlag(Effect::EFFECT_CLASS_SHRINE_HOLY)) { sendBloodBibleEffect( pCorpse, Effect::EFFECT_CLASS_SHRINE_HOLY_WARP ); } else { ZoneID_t relicZoneID = pCorpse->getZone()->getZoneID(); ZoneID_t castleZoneID; bool isCastle = g_pCastleInfoManager->getCastleZoneID( relicZoneID, castleZoneID ); if (!isCastle) return; CastleInfo* pCastleInfo = g_pCastleInfoManager->getCastleInfo( castleZoneID ); Assert( pCastleInfo != NULL ); if (pCastleInfo->getRace()==RACE_SLAYER) { sendBloodBibleEffect( pCorpse, Effect::EFFECT_CLASS_CASTLE_SHRINE_SLAYER_WARP ); } else { sendBloodBibleEffect( pCorpse, Effect::EFFECT_CLASS_CASTLE_SHRINE_VAMPIRE_WARP ); } } __END_CATCH}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -