📄 pcmanager.cpp
字号:
if (pEffect!=NULL) { pEffect->unaffect(); } // paralyze 力芭 pEffectManager->deleteEffect(pCreature, Effect::EFFECT_CLASS_SUMMON_SYLPH); pCreature->removeFlag(Effect::EFFECT_CLASS_SUMMON_SYLPH); } if (pCreature->isFlag(Effect::EFFECT_CLASS_INVISIBILITY)) { Effect* pEffect = pCreature->findEffect(Effect::EFFECT_CLASS_INVISIBILITY); if (pEffect!=NULL) { pEffect->unaffect(); } // paralyze 力芭 pEffectManager->deleteEffect(pCreature, Effect::EFFECT_CLASS_INVISIBILITY); pCreature->removeFlag(Effect::EFFECT_CLASS_INVISIBILITY); } if (pCreature->isFlag(Effect::EFFECT_CLASS_SNIPING_MODE)) { Effect* pEffect = pCreature->findEffect(Effect::EFFECT_CLASS_SNIPING_MODE); if (pEffect!=NULL) { pEffect->unaffect(); } // paralyze 力芭 pEffectManager->deleteEffect(pCreature, Effect::EFFECT_CLASS_SNIPING_MODE); pCreature->removeFlag(Effect::EFFECT_CLASS_SNIPING_MODE); } if (pCreature->isFlag(Effect::EFFECT_CLASS_PARALYZE)) { Effect* pEffectPal = pCreature->findEffect(Effect::EFFECT_CLASS_PARALYZE); if (pEffectPal!=NULL) { pEffectPal->unaffect(); } // paralyze 力芭 pEffectManager->deleteEffect(pCreature, Effect::EFFECT_CLASS_PARALYZE); pCreature->removeFlag(Effect::EFFECT_CLASS_PARALYZE); } // 磷菌阑锭 且风 馋促. by sigi. 2002.9.23 if (pCreature->isFlag(Effect::EFFECT_CLASS_HALLUCINATION)) { Effect* pEffectHallu = pCreature->findEffect(Effect::EFFECT_CLASS_HALLUCINATION); if (pEffectHallu!=NULL) { pEffectHallu->unaffect(); } pCreature->deleteEffect(Effect::EFFECT_CLASS_HALLUCINATION); pCreature->removeFlag(Effect::EFFECT_CLASS_HALLUCINATION); } if ( pCreature->isFlag( Effect::EFFECT_CLASS_MAGNUM_SPEAR ) ) { Effect* pEffect = pCreature->findEffect(Effect::EFFECT_CLASS_MAGNUM_SPEAR); if ( pEffect != NULL ) { pEffect->unaffect(); } pCreature->deleteEffect(Effect::EFFECT_CLASS_MAGNUM_SPEAR); pCreature->removeFlag(Effect::EFFECT_CLASS_MAGNUM_SPEAR); } if ( pCreature->isFlag( Effect::EFFECT_CLASS_HELLFIRE_TO_ENEMY ) ) { Effect* pEffect = pCreature->findEffect(Effect::EFFECT_CLASS_HELLFIRE_TO_ENEMY); if ( pEffect != NULL ) { pEffect->unaffect(); } pCreature->deleteEffect(Effect::EFFECT_CLASS_HELLFIRE_TO_ENEMY); pCreature->removeFlag(Effect::EFFECT_CLASS_HELLFIRE_TO_ENEMY); } // 磷菌阑 锭 Soul Chain 捞棋飘甫 馋促. // unaffect啊 龋免瞪 锭 flag捞 难廉乐瘤 臼促搁 transport 窍瘤 臼档废茄促. if ( pCreature->isFlag( Effect::EFFECT_CLASS_SOUL_CHAIN ) ) { //pCreature->deleteEffect( Effect::EFFECT_CLASS_SOUL_CHAIN ); pCreature->removeFlag( Effect::EFFECT_CLASS_SOUL_CHAIN ); } // 磷菌阑 锭 Love Chain 捞棋飘甫 馋促. // unaffect啊 龋免瞪 锭 flag捞 难廉乐瘤 臼促搁 transport 窍瘤 臼档废茄促. if ( pCreature->isFlag( Effect::EFFECT_CLASS_LOVE_CHAIN ) ) { pCreature->removeFlag( Effect::EFFECT_CLASS_LOVE_CHAIN ); } // 磷栏搁 GunShotGuidance Aim 捞棋飘甫 馋促. if ( pCreature->isFlag( Effect::EFFECT_CLASS_GUN_SHOT_GUIDANCE_AIM ) ) { pCreature->deleteEffect( Effect::EFFECT_CLASS_GUN_SHOT_GUIDANCE_AIM ); pCreature->removeFlag( Effect::EFFECT_CLASS_GUN_SHOT_GUIDANCE_AIM ); } // 磷栏搁 浇赋/酒付霸捣 捞棋飘甫 馋促. 2003. 1. 2. by Sequoia if (pCreature->isFlag(Effect::EFFECT_CLASS_SLEEP)) { Effect* pEffectSleep = pCreature->findEffect(Effect::EFFECT_CLASS_SLEEP); if (pEffectSleep!=NULL) { pEffectSleep->unaffect(); } pCreature->deleteEffect(Effect::EFFECT_CLASS_SLEEP); } if (pCreature->isFlag(Effect::EFFECT_CLASS_ARMAGEDDON)) { Effect* pEffectArma = pCreature->findEffect(Effect::EFFECT_CLASS_ARMAGEDDON); if (pEffectArma!=NULL) { pEffectArma->unaffect(); } pCreature->deleteEffect(Effect::EFFECT_CLASS_ARMAGEDDON); } if (pCreature->isFlag(Effect::EFFECT_CLASS_TRAPPED)) { Effect* pEffect = pCreature->findEffect(Effect::EFFECT_CLASS_TRAPPED); if (pEffect!=NULL) { pEffect->unaffect(); } pCreature->deleteEffect(Effect::EFFECT_CLASS_TRAPPED); } // 官蹿俊 静矾哆府扼绊, 捞棋飘甫 谎妨霖促. GCAddEffect gcAddEffect; gcAddEffect.setObjectID(pCreature->getObjectID()); gcAddEffect.setEffectID(Effect::EFFECT_CLASS_COMA); gcAddEffect.setDuration(300); pZone->broadcastPacket(pCreature->getX(), pCreature->getY(), &gcAddEffect); if ( g_pConfig->hasKey("Hardcore") && g_pConfig->getPropertyInt("Hardcore")!=0 ) { PlayerCreature* pPC = dynamic_cast<PlayerCreature*>( pCreature ); Assert( pPC != NULL ); deletePC( pPC ); GamePlayer* pGamePlayer = dynamic_cast<GamePlayer*>(pPC->getPlayer()); Assert( pGamePlayer != NULL ); filelog("DeletePC.log", "磷绢辑 瘤况笼聪促 : %s", pPC->getName().c_str() ); pGamePlayer->setPenaltyFlag(PENALTY_TYPE_KICKED); pGamePlayer->setItemRatioBonusPoint(1); } before = current ++; } else { EffectManager* pEffectManager = pCreature->getEffectManager(); Assert(pEffectManager != NULL); EffectComa* pEffectComa = (EffectComa*)(pEffectManager->findEffect(Effect::EFFECT_CLASS_COMA)); Assert(pEffectComa != NULL); if (pEffectComa->getDeadline() < currentTime) { // 刚历 捞棋飘甫 昏力茄促. pEffectManager->deleteEffect(pCreature, Effect::EFFECT_CLASS_COMA); pCreature->removeFlag(Effect::EFFECT_CLASS_COMA); // 荤侩磊狼 涝仿俊 狼秦辑 COMA 捞棋飘啊 unaffect登搁, 柳楼肺 磷篮 巴捞 等促. // 弊矾骨肺, PC 甫 磷捞绊, 敲饭捞绢甫 ZPM -> IPM 栏肺 颗变促. killCreature(pCreature); // PC 狼 畴靛甫 昏力茄促. m_Creatures.erase(current); if (before == m_Creatures.end()) // first element { current = m_Creatures.begin(); } else // !first element { current = before; current ++; } } else { before = current ++; } } } else { before = current ++; // 农府贸俊 吧妨 乐绰 捞棋飘甸阑 角青矫挪促. pCreature->getEffectManager()->heartbeat( currentTime ); } } // 捞芭 while 风橇 救俊 乐菌促 ぬ.ば // 傈里吝俊绰 救 焊郴林档废 荐沥 if ( m_bRefreshHolyLandPlayer && !g_pWarSystem->hasActiveRaceWar() ) { // 酒淬狼 己瘤 傈开俊 乔狼 己辑 焊呈胶 沥焊甫 谎赴促. GCHolyLandBonusInfo gcHolyLandBonusInfo; g_pBloodBibleBonusManager->makeHolyLandBonusInfo( gcHolyLandBonusInfo ); g_pHolyLandManager->broadcast( &gcHolyLandBonusInfo ); } /* if ( m_bRefreshLevelWarBonusZonePlayer && g_pSweeperBonusManager->isAble() ) { GCSweeperBonusInfo gcSweeperBonusInfo; g_pSweeperBonusManager->makeSweeperBonusInfo( gcSweeperBonusInfo ); g_pLevelWarZoneInfoManager->broadcast( &gcSweeperBonusInfo ); } if ( m_bRefreshLevelWarBonusZonePlayer && !g_pSweeperBonusManager->isAble() ) { GCSweeperBonusInfo gcSweeperBonusInfo; g_pSweeperBonusManager->makeVoidSweeperBonusInfo( gcSweeperBonusInfo ); g_pLevelWarZoneInfoManager->broadcast( &gcSweeperBonusInfo ); } */ m_bRefreshHolyLandPlayer = false; // m_bRefreshLevelWarBonusZonePlayer = false; } catch (Throwable & t) { filelog("PCManagerBug.log", "ProcessCreatureBug : %s", t.toString().c_str()); //cerr << t.toString() << endl; } //cerr << "TID[" << Thread::self() << "]" << "PCM::process end" << endl; __LEAVE_CRITICAL_SECTION(m_Mutex) __END_CATCH}//////////////////////////////////////////////////////////////////////////////// (1) 鸥老俊辑 农府贸甫 昏力茄促.// (2) 矫眉甫 积己窍绊, 牢亥配府甫 矫眉肺 颗变促.// (3) 鸥老俊 酒捞袍捞 粮犁且 版快, 利例洒 贸府茄促.// (4) 矫眉甫 鸥老俊 眠啊茄促. 吝汗矫, 弊 糠俊 初绰促.// (5) 何劝 捞棋飘甫 农府贸俊 眠啊茄促.//////////////////////////////////////////////////////////////////////////////void PCManager::killCreature (Creature* pDeadCreature) throw (Error){ __BEGIN_TRY __BEGIN_DEBUG Assert(pDeadCreature != NULL); // transfusion锭巩俊 磷篮 第俊档 HP蛮促.. // 公矫. by sigi. 2002.10.8 //Assert(pDeadCreature->isDead()); Zone* pZone = pDeadCreature->getZone(); Assert(pZone != NULL); ZoneCoord_t cx = pDeadCreature->getX(); ZoneCoord_t cy = pDeadCreature->getY(); // Eternity pDeadCreature->removeFlag( Effect::EFFECT_CLASS_ETERNITY ); // PK粮俊辑 磷菌阑 锭俊绰 混酒朝 锭 捞棋飘啊 嘿绰促. if ( g_pPKZoneInfoManager->isPKZone( pZone->getZoneID() ) ) { EffectPKZoneResurrection* pEffect = new EffectPKZoneResurrection( pDeadCreature ); pDeadCreature->addEffect( pEffect ); pDeadCreature->setFlag( pEffect->getEffectClass() ); } // 颇萍 檬措吝捞扼搁 PartyInviteInfo甫 昏力秦霖促. PartyInviteInfoManager* pPIIM = pZone->getPartyInviteInfoManager(); pPIIM->cancelInvite(pDeadCreature); // 刚历 肺拿 颇萍 概聪历俊辑 磷篮 仇阑 瘤况拎具 茄促. uint PartyID = pDeadCreature->getPartyID(); if (PartyID != 0) { LocalPartyManager* pLPM = pZone->getLocalPartyManager(); pLPM->deletePartyMember(PartyID, pDeadCreature); } // 飘饭捞靛 吝捞菌促搁 飘饭捞靛 包访 沥焊甫 昏力秦霖促. TradeManager* pTradeManager = pZone->getTradeManager(); TradeInfo* pInfo = pTradeManager->getTradeInfo(pDeadCreature->getName()); if (pInfo != NULL) { pTradeManager->cancelTrade(pDeadCreature); } // 矫眉俊 嘿绢乐绰 EFFECT_CLASS_CANNOT_ABSORB_SOUL 捞棋飘甫 力芭茄促 if (pDeadCreature->isFlag(Effect::EFFECT_CLASS_CANNOT_ABSORB_SOUL)) { pDeadCreature->removeFlag(Effect::EFFECT_CLASS_CANNOT_ABSORB_SOUL); } // 矫眉甫 积己茄促. Corpse* pCorpse = NULL; if (pDeadCreature->isSlayer()) { Slayer* pSlayer = dynamic_cast<Slayer*>(pDeadCreature); pCorpse = new SlayerCorpse( pSlayer ); pCorpse->setLevel( (int)(pSlayer->getHighestSkillDomainLevel()) ); pCorpse->setExp( (Exp_t)computeCreatureExp(pSlayer, BLOODDRAIN_EXP) ); } else if (pDeadCreature->isVampire()) { Vampire* pVampire = dynamic_cast<Vampire*>(pDeadCreature); pCorpse = new VampireCorpse( pVampire ); pCorpse->setLevel( (int)(pVampire->getLevel()) ); pCorpse->setExp( (Exp_t)computeCreatureExp(pVampire, BLOODDRAIN_EXP) ); } else if (pDeadCreature->isOusters()) { Ousters* pOusters = dynamic_cast<Ousters*>(pDeadCreature); pCorpse = new OustersCorpse( pOusters ); pCorpse->setLevel( (int)(pOusters->getLevel()) ); pCorpse->setExp( (Exp_t)computeCreatureExp(pOusters, BLOODDRAIN_EXP) ); } else { throw Error("PlayerCreature class type 坷幅"); } // by sigi. 2002.12.12 addCorpseToZone(pCorpse, pZone, cx, cy); // 农府贸啊 磷菌促绊 林函俊 舅妨霖促. GCCreatureDied gcCreatureDied; gcCreatureDied.setObjectID(pDeadCreature->getObjectID()); pDeadCreature->getPlayer()->sendPacket(&gcCreatureDied); pZone->broadcastPacket(cx , cy , &gcCreatureDied, pDeadCreature); // 鸥老俊辑 Creature甫 瘤况霖促. // 窜 PCManager 俊辑 昏力窍搁 PC's EM's heartbeat 啊 龋免登瘤 臼栏聪 林狼窍扁 官鄂促. Tile & tile = pZone->getTile(cx , cy); Assert(tile.getCreature(pDeadCreature->getMoveMode()) == pDeadCreature); tile.deleteCreature(pDeadCreature->getObjectID()); /* // 关栏肺 颗变促. by sigi. 2002.5.11 // Resurrect 捞亥飘甫 敲饭捞绢 按眉俊 楷包矫挪促. GamePlayer* pGamePlayer = dynamic_cast<GamePlayer*>(pDeadCreature->getPlayer()); EventResurrect* pEventResurrect = new EventResurrect(pGamePlayer); pEventResurrect->setDeadline(0); // 盔贰 乐菌带 厘家甫 悸泼茄促. pEventResurrect->setOldZone(pDeadCreature->getZone()); // Player俊 Event甫 嘿牢促. pGamePlayer->addEvent(pEventResurrect); */ // *NOTE // 碍力 立加 辆丰老 版快 格钎 瘤痢阑 固府 瘤沥秦 初扁 困茄 规过捞促. // Resurrect贸府 包拌客 剐立茄 何盒捞骨肺 捞 何盒捞 官拆 版快 Resurrect档 积阿秦具 // 茄促. 窜鉴洒 DB技捞宏父 窍搁 等促绊 积阿窍扁 奖瘤父. GamePlayer啊 Disconnect // 窍搁辑 农府媚甫 技捞宏窍扁 锭巩俊 促矫 丹绢辑 技捞宏窍霸 登骨肺 己赋捞 登瘤 臼绰促. ZoneID_t ZoneID = 0; ZoneCoord_t ZoneX = 0; ZoneCoord_t ZoneY = 0; ZONE_COORD ResurrectCoord; Zone* pResurrectZone = NULL; // 档馒粮捞 绢蠢 辑滚, 绢蠢 粮弊缝俊 加窍绰瘤 舅酒夯促. // 盔贰绰 葛电 粮篮 弊 粮俊辑 磷菌阑锭 倒酒啊具 且 粮阑 疙矫秦拎具 茄促. ZoneInfo* pZoneInfo = NULL; ZoneGroup* pZoneGroup = NULL;/* if (pDeadCreature->isSlayer()) { Slayer* pSlayer = dynamic_cast<Slayer*>(pDeadCreature); Assert(pSlayer != NULL); pSlayer->setStashStatus(false); pSlayer->setHP(pSlayer->getHP(ATTR_MAX), ATTR_CURRENT); // 瓷仿摹 醚钦捞 40捞窍扼搁, 公炼扒 具傈荤飞何俊辑 怕绢唱霸 等促. int SumAttr = pSlayer->getSTR(ATTR_BASIC) + pSlayer->getDEX(ATTR_BASIC) + pSlayer->getINT(ATTR_BASIC); if (SumAttr <= 40) { pSlayer->setResurrectZoneID(2101); } /o try { ResurrectCoord = g_pResurrectLocationManager->getSlayerPosition(pSlayer->getResurrectZoneID()); ZoneID = ResurrectCoord.id; ZoneX = ResurrectCoord.x; ZoneY = ResurrectCoord.y; } catch (NoSuchElementException&) { try { // 父老 酒流 何劝 困摹甫 瘤沥秦 初瘤 臼疽促搁, // 泅犁 粮俊辑 叼弃飘肺 汲沥登绢 乐绰 何劝粮栏肺 埃促. ResurrectCoord = g_pResurrectLocationManager->getSlayerPosition(pSlayer->getZone()->getZoneID());
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -