📄 zone.cpp.backup
字号:
//cout << pCreature->toString() << endl; // PC捞搁辑, creatureList俊 家加登瘤档 臼栏搁辑, (x,y)甫 杭 荐 乐绰 版快 if (pCreature->isPC()) { // Revealer 捞棋飘啊 乐促搁 捞棋飘甫 啊廉柯促.// EffectRevealer* pEffectRevealer = NULL;// if ( pCreature->isFlag( Effect::EFFECT_CLASS_REVEALER ) )// {// pEffectRevealer = dynamic_cast<EffectRevealer*>(pCreature->findEffect(Effect::EFFECT_CLASS_REVEALER));// Assert( pEffectRevealer != NULL );// } if (pCreature->getVisionState(cx,cy) >= IN_SIGHT && (pCreature->isVampire() || (!isMonsterHide || pCreature->isFlag(Effect::EFFECT_CLASS_DETECT_HIDDEN))// || ( pEffectRevealer != NULL && pEffectRevealer->canSeeHide( pMonster ) ) ) && (!isMonsterInvisibility || pCreature->isFlag(Effect::EFFECT_CLASS_DETECT_INVISIBILITY))// || ( pEffectRevealer != NULL && pEffectRevealer->canSeeInvisibility( pMonster ) ) ) ) ) { pCreature->getPlayer()->sendPacket(pAddMonsterPacket); } } // if } // for }//if }//for }//for delete pAddMonsterPacket; } } else { throw Error("invalid creature type"); } } else { throw EmptyTileNotExistException("too many creature in this zone.. or too unlucky"); } __END_CATCH}//--------------------------------------------------------------------------------// 漂沥 困摹俊 酒捞袍阑 冻绢哆赴促.// Zone ::addItem()// 7x7 康开阑 八荤秦辑 后沫捞 粮犁窍搁 冻绢哆赴促. 巩力绰 犁荐绝绰 版快 后沫捞 // 粮犁窍瘤 臼阑 版快牢单.. 捞锭 抗寇甫 带咙栏肺结 弊 贸府甫 惑困俊霸 该扁搁// 瞪 淀...//--------------------------------------------------------------------------------TPOINT Zone::addItem(Item* pItem, ZoneCoord_t cx, ZoneCoord_t cy, bool bAllowCreature) throw(EmptyTileNotExistException, Error){ __BEGIN_TRY __BEGIN_DEBUG Item::ItemClass IClass = pItem->getItemClass(); TPOINT pt = findSuitablePositionForItem(this, cx, cy, bAllowCreature); // 初阑 困摹甫 茫酒辰 版快 if (pt.x != -1) { m_pTiles[pt.x][pt.y].addItem(pItem); addToItemList(pItem); if (IClass == Item::ITEM_CLASS_CORPSE) { ItemType_t itemType = pItem->getItemType(); Turn_t DelayTime = 0; if (itemType == SLAYER_CORPSE) { SlayerCorpse* pSlayerCorpse = dynamic_cast<SlayerCorpse*>(pItem); pSlayerCorpse->setXY(pt.x, pt.y); GCAddSlayerCorpse gcAddSlayerCorpse; makeGCAddSlayerCorpse(&gcAddSlayerCorpse, pSlayerCorpse); broadcastPacket(pt.x, pt.y, &gcAddSlayerCorpse); DelayTime = 6000; } else if (itemType == VAMPIRE_CORPSE) { VampireCorpse* pVampireCorpse = dynamic_cast<VampireCorpse*>(pItem); pVampireCorpse->setXY(pt.x, pt.y); GCAddVampireCorpse gcAddVampireCorpse; makeGCAddVampireCorpse(&gcAddVampireCorpse, pVampireCorpse); broadcastPacket(pt.x, pt.y, &gcAddVampireCorpse); DelayTime = 6000; } else if (itemType == NPC_CORPSE) { Assert(false); } else if (itemType == MONSTER_CORPSE) { MonsterCorpse* pMonsterCorpse = dynamic_cast<MonsterCorpse*>(pItem); GCAddMonsterCorpse gcAddMonsterCorpse; makeGCAddMonsterCorpse(&gcAddMonsterCorpse, pMonsterCorpse, pt.x, pt.y); broadcastPacket(pt.x, pt.y, &gcAddMonsterCorpse); DelayTime = 600; } else { Assert(false); } // 酒捞袍捞 甸绢啊乐瘤 臼篮 矫眉扼搁 掉饭捞 矫埃阑 临牢促. Corpse* pCorpse = dynamic_cast<Corpse*>(pItem); if (pCorpse->getTreasureCount() == 0) { DelayTime = DelayTime/10; } // Relic牢 版快俊绰 矫埃狼 瘤楷俊 蝶扼 酒捞袍捞 荤扼瘤瘤 臼绰促. if (!pCorpse->getRelic()) { // 官蹿俊 冻绢瘤绰 酒捞袍篮 老沥 矫埃捞 瘤唱搁 荤扼瘤霸 等促. EffectDecayCorpse* pEffectDecayCorpse = new EffectDecayCorpse(this, pt.x, pt.y, (Corpse*)pItem, DelayTime); pEffectDecayCorpse->setNextTime(999999); m_ObjectRegistry.registerObject(pEffectDecayCorpse); addEffect(pEffectDecayCorpse); } else { cout << "Relic牢 版快俊绰 矫眉啊 荤扼瘤瘤 臼嚼聪促" << endl; } } else { GCDropItemToZone gcDropItemToZone; makeGCDropItemToZone(&gcDropItemToZone, pItem, pt.x, pt.y);// if ( !pItem->isFlag(Effect::EFFECT_CLASS_INSTALL) ) { broadcastPacket(pt.x, pt.y, &gcDropItemToZone);// } // 葛磐荤捞努篮 矫埃捞 瘤唱档 荤扼瘤瘤 臼绰促. if (IClass == Item::ITEM_CLASS_MOTORCYCLE) { // transport牢 版快甫 措厚秦辑 眉农秦力秦具茄促. MotorcycleBox* pMotorcycleBox = g_pParkingCenter->getMotorcycleBox( pItem->getItemID() ); if (pMotorcycleBox!=NULL) { pMotorcycleBox->setTransport( false ); pMotorcycleBox->setX( pt.x ); pMotorcycleBox->setY( pt.y ); } } else { // 官蹿俊 冻绢瘤绰 酒捞袍篮 老沥 矫埃捞 瘤唱搁 荤扼瘤霸 等促. EffectDecayItem* pEffectDecayItem = new EffectDecayItem(this, pt.x, pt.y, (Item*)pItem, 6000); pEffectDecayItem->setNextTime(999999); m_ObjectRegistry.registerObject(pEffectDecayItem); addEffect(pEffectDecayItem); } } return pt; } else { //throw InvalidProtocolException("too many item in this zone.. or too unlucky"); //pItem->destroy(); //Delete pItem; TPOINT pt_error; pt_error.x = -1; pt_error.y = -1; return pt_error; } return pt; __END_DEBUG __END_CATCH}//--------------------------------------------------------------------------------//--------------------------------------------------------------------------------void Zone::addEffect(Effect* pEffect) throw(Error){ __BEGIN_TRY Assert(pEffect != NULL); m_pEffectManager->addEffect(pEffect); __END_CATCH}void Zone::deleteEffect(ObjectID_t id) throw(Error){ __BEGIN_TRY m_pEffectManager->deleteEffect(id); __END_CATCH}//--------------------------------------------------------------------------------//--------------------------------------------------------------------------------void Zone::addEffect_LOCKING(Effect* pEffect) throw(Error){ __BEGIN_TRY Assert(pEffect != NULL); __ENTER_CRITICAL_SECTION(m_MutexEffect) m_pLockedEffectManager->addEffect(pEffect); __LEAVE_CRITICAL_SECTION(m_MutexEffect) __END_CATCH}void Zone::deleteEffect_LOCKING(ObjectID_t id) throw(Error){ __BEGIN_TRY __ENTER_CRITICAL_SECTION(m_MutexEffect) m_pLockedEffectManager->deleteEffect(id); __LEAVE_CRITICAL_SECTION(m_MutexEffect) __END_CATCH}//--------------------------------------------------------------------------------// Delete PC from PC Manager (only do this)//--------------------------------------------------------------------------------void Zone::deletePC(Creature* pCreature) throw()//NoSuchElementException, Error){ __BEGIN_TRY Assert(pCreature != NULL); m_pPCManager->deleteCreature(pCreature->getObjectID()); __END_CATCH}//--------------------------------------------------------------------------------// Delete Queue PC//--------------------------------------------------------------------------------void Zone::deleteQueuePC(Creature* pCreature) throw(NoSuchElementException, Error){ __BEGIN_TRY __ENTER_CRITICAL_SECTION(m_Mutex) Assert(pCreature != NULL); list<Creature*>::iterator itr = find_if (m_PCListQueue.begin(), m_PCListQueue.end(), isSameCreature(pCreature)); if (itr != m_PCListQueue.end()) { m_PCListQueue.erase(itr); } __LEAVE_CRITICAL_SECTION(m_Mutex) __END_CATCH}//--------------------------------------------------------------------------------// Add PC to PC Manager (only do this)//--------------------------------------------------------------------------------void Zone::addPC(Creature* pCreature) throw(Error){ __BEGIN_TRY Assert(pCreature != NULL); m_pPCManager->addCreature(pCreature); __END_CATCH}//--------------------------------------------------------------------------------////--------------------------------------------------------------------------------void Zone::deleteCreature(Creature* pCreature, ZoneCoord_t x, ZoneCoord_t y) throw(NoSuchElementException, Error){ __BEGIN_TRY try { Assert(pCreature->getX() == x && pCreature->getY() == y); // 秦寸登绰 CreatureManager 俊辑 农府贸甫 昏力茄促. if (pCreature->isPC()) { m_pPCManager->deleteCreature(pCreature->getObjectID()); // 颇萍 檬措吝捞扼搁 PartyInviteInfo甫 昏力秦霖促. m_pPartyInviteInfoManager->cancelInvite(pCreature); // 颇萍俊 啊涝登绢 乐菌促搁 肺拿 颇萍俊辑 昏力秦 霖促. uint PartyID = pCreature->getPartyID(); if (PartyID != 0) { m_pLocalPartyManager->deletePartyMember(PartyID, pCreature); } // 飘饭捞靛 吝捞菌促搁 飘饭捞靛 包访 沥焊甫 昏力秦霖促. TradeInfo* pInfo = m_pTradeManager->getTradeInfo(pCreature->getName()); if (pInfo != NULL) { m_pTradeManager->cancelTrade(pCreature); } } else if (pCreature->isMonster()) {//#ifdef __XMAS_EVENT_CODE__ Monster* pMonster = dynamic_cast<Monster*>(pCreature); switch (pMonster->getMonsterType()) { case 358: case 359: case 360: case 361: m_pEventMonsterManager->deleteCreature(pCreature->getObjectID()); break; case 371: case 372: case 373: case 374: case 375: case 376: m_pCombatMonsterManager->deleteCreature(pCreature->getObjectID()); break; default: m_pMonsterManager->deleteCreature(pCreature->getObjectID()); break; }//#else// m_pMonsterManager->deleteCreature(pCreature->getObjectID());/*#endif*/ } else if (pCreature->isNPC()) { m_pNPCManager->deleteCreature(pCreature->getObjectID()); } // 鸥老俊辑 农府贸甫 昏力茄促. getTile(x, y).deleteCreature(pCreature->getObjectID()); // 林函狼 PC甸俊霸 农府贸啊 荤扼脸促绰 荤角阑 宏肺靛某胶飘茄促. GCDeleteObject gcDeleteObject(pCreature->getObjectID()); broadcastPacket(x, y, &gcDeleteObject, pCreature); } catch (Throwable & t) { cerr << t.toString() << endl; } __END_CATCH}//--------------------------------------------------------------------------------////--------------------------------------------------------------------------------void Zone::deleteObject(Object* pObject, ZoneCoord_t x, ZoneCoord_t y) throw(NoSuchElementException, Error){ __BEGIN_TRY //-------------------------------------------------- // 粮俊辑 按眉甫 昏力茄促. //-------------------------------------------------- getTile(x, y).deleteObject(pObject->getObjectID()); //-------------------------------------------------- // 林函狼 PC甸俊霸 按眉啊 荤扼脸促绰 荤角阑 宏肺靛某胶飘茄促. //-------------------------------------------------- GCDeleteObject gcDeleteObject(pObject->getObjectID()); broadcastPacket(x, y, &gcDeleteObject); __END_CATCH}//--------------------------------------------------------------------------------////--------------------------------------------------------------------------------void Zone::deleteItem(Object* pObject, ZoneCoord_t x, ZoneCoord_t y) throw(NoSuchElementException, Error){ __BEGIN_TRY deleteFromItemList(pObject->getObjectID()); //-------------------------------------------------- // 粮俊辑 按眉甫 昏力茄促. //-------------------------------------------------- getTile(x, y).deleteItem(); //-------------------------------------------------- // 林函狼 PC甸俊霸 按眉啊 荤扼脸促绰 荤角阑 宏肺靛某胶飘茄促. //--------------------------------------------------// GCDeleteObject gcDeleteObject(pObject->getObjectID());// broadcastPacket(x, y, &gcDeleteObject); __END_CATCH}//--------------------------------------------------------------------------------//// broadcast packet//
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -