📄 zone.cpp.backup
字号:
// 林函狼 PC甸俊霸 舅副 GCAddSlayer or GCAddVampire 菩哦阑 积己茄促. Creature::CreatureClass CClass = pCreature->getCreatureClass(); if (CClass == Creature::CREATURE_CLASS_SLAYER) { Slayer* pSlayer = dynamic_cast<Slayer*>(pCreature); GCAddSlayer gcAddSlayer; makeGCAddSlayer(&gcAddSlayer, pSlayer); scan(pCreature, pt.x, pt.y, &gcAddSlayer); } else if (CClass == Creature::CREATURE_CLASS_VAMPIRE) { Vampire* pVampire = dynamic_cast<Vampire*>(pCreature); GCAddVampire gcAddVampire; makeGCAddVampire(&gcAddVampire, pVampire); scan(pCreature, pt.x, pt.y, &gcAddVampire); // 轨颇捞绢扼搁 器呕阑 捞侩秦 吭阑 啊瓷己捞 乐栏骨肺, // 敲贰弊甫 波霖促. if (pVampire->isFlag(Effect::EFFECT_CLASS_VAMPIRE_PORTAL)) { pVampire->removeFlag(Effect::EFFECT_CLASS_VAMPIRE_PORTAL); } } else { throw Error("invalid creature class. must be slayer or vampire..."); } // 颇萍俊 啊涝登绢 乐促搁 肺拿 颇萍俊 啊涝矫挪促. uint PartyID = pCreature->getPartyID(); if (PartyID != 0) { // 颇萍啊 乐促搁 傲 歹茄促. m_pLocalPartyManager->addPartyMember(PartyID, pCreature); } } else { ZoneCoord_t tempX = Random(20, m_Width); ZoneCoord_t tempY = Random(20, m_Height); addPC(pCreature, tempX, tempY, 0); // 钙胶墨款飘 瘤唱档 给 茫篮 版快 Assert //throw EmptyTileNotExistException("too many pc in this zone.. or too unlucky"); } __END_DEBUG __END_CATCH}//////////////////////////////////////////////////////////////////////////////// detect invisibility殿狼 瓤苞啊 荤扼柳 版快..焊捞绰 仇捞 救焊捞霸 瞪 版快// pCreature俊霸 GCDeleteObject甫 焊郴霖促. 焊绊 乐带 invisible creature甫// delete茄促. 肚绰 救焊牢绰 逞捞 焊捞霸 瞪 版快殿..//////////////////////////////////////////////////////////////////////////////void Zone::updateInvisibleScan(Creature* pCreature) throw (ProtocolException, Error){ __BEGIN_TRY Assert(pCreature != NULL && pCreature->isPC()); Coord_t cx = pCreature->getX(); Coord_t cy = pCreature->getY(); Player* pPlayer = pCreature->getPlayer(); // Revealer 捞棋飘甫 啊廉柯促.// EffectRevealer* pEffectRevealer = NULL;// if ( pCreature->isFlag(Effect::EFFECT_CLASS_REVEALER) )// {// pEffectRevealer = dynamic_cast<EffectRevealer*>(pCreature->findEffect(Effect::EFFECT_CLASS_REVEALER));// Assert( pEffectRevealer != NULL );// } for (ZoneCoord_t ix = max(0, cx - maxViewportWidth - 1), endx = min(m_Width - 1, cx + maxViewportWidth + 1) ; ix <= endx ; ix++) { for (ZoneCoord_t iy = max(0, cy - maxViewportUpperHeight - 1), endy = min(m_Height - 1, cy + maxViewportLowerHeight + 1) ; iy <= endy ; iy++) { // darkness康开 炼荤. // 荤角 pCreature绰 寸楷洒 slayer促.(updateInvisibleScan捞骨肺..) if (pCreature->isSlayer()) { const slist<Object*> & objectList = m_pTiles[ix][iy].getObjectList(); slist<Object*>::const_iterator itr = objectList.begin(); for (; itr != objectList.end() && (*itr)->getObjectPriority() <= OBJECT_PRIORITY_BURROWING_CREATURE ; itr++) { if ((*itr)->getObjectClass() == Object::OBJECT_CLASS_CREATURE) { Creature* pPC = dynamic_cast<Creature*>(*itr); Assert(pPC != NULL); // 磊扁 磊脚老 版快 烹苞 if ( pCreature == pPC ) continue; // 见绢乐绰 措惑俊 措秦辑.. // SNIPING捞唱 INVISIBILITY惑怕老 版快. if (pPC->isFlag(Effect::EFFECT_CLASS_INVISIBILITY) && pCreature->getVisionState(ix,iy) >= IN_SIGHT) { // Detect Invisibility 捞棋飘啊 乐芭唱 轨颇捞绢搁 杭 荐 乐促 // Revealer 捞棋飘啊 乐阑 版快 惑措规阑 杭 荐 乐绰 饭骇捞扼搁 if ( ( pCreature->isFlag(Effect::EFFECT_CLASS_DETECT_INVISIBILITY) || pCreature->isVampire() ) )// || ( pEffectRevealer != NULL && pEffectRevealer->canSeeInvisibility( pPC ) ) ) { if (pPC->isVampire()) { Vampire* pVampire = dynamic_cast<Vampire*>(pPC); GCAddVampire gcAddVampire; makeGCAddVampire(&gcAddVampire, pVampire); pPlayer->sendPacket(&gcAddVampire); } else if (pPC->isMonster()) { Monster* pMonster= dynamic_cast<Monster*>(pPC); //GCAddMonster gcAddMonster; //makeGCAddMonster(&gcAddMonster, pMonster); //pPlayer->sendPacket(&gcAddMonster); // by sigi Packet* pAddMonsterPacket = createMonsterAddPacket( pMonster, pCreature ); if (pAddMonsterPacket!=NULL) { pPlayer->sendPacket(pAddMonsterPacket); delete pAddMonsterPacket; } } } else { GCDeleteObject gcDO; gcDO.setObjectID(pPC->getObjectID()); pPlayer->sendPacket(&gcDO); } } else if (pPC->isFlag(Effect::EFFECT_CLASS_SNIPING_MODE)) { if ( (!pCreature->isVampire() && pCreature->isFlag(Effect::EFFECT_CLASS_DETECT_INVISIBILITY) ) )// || ( pEffectRevealer != NULL && pEffectRevealer->canSeeSniping( pPC ) ) ) { if (pPC->isSlayer()) { Slayer* pSlayer = dynamic_cast<Slayer*>(pPC); GCAddSlayer gcAddSlayer; makeGCAddSlayer(&gcAddSlayer, pSlayer); pPlayer->sendPacket(&gcAddSlayer); } else { throw Error("轨颇捞绢啊 胶唱捞俏 葛靛俊 乐促. 固媚结~"); } } else { GCDeleteObject gcDO; gcDO.setObjectID(pPC->getObjectID()); pPlayer->sendPacket(&gcDO); } } } } }// darkness } } __END_CATCH}//--------------------------------------------------------------------------------// update hidden scan// detect hidden殿狼 瓤苞啊 荤扼柳 版快..焊捞绰 仇捞 救焊捞霸 瞪 版快// pCreature俊霸 GCDeleteObject甫 焊郴霖促.// 焊绊 乐带 burrow creature甫 delete茄促. 肚绰 救焊牢绰 逞捞 焊捞霸 瞪 版快殿..// ABCD//--------------------------------------------------------------------------------void Zone::updateHiddenScan(Creature* pCreature) throw(ProtocolException, Error){ __BEGIN_TRY Assert(pCreature != NULL && pCreature->isPC()); Coord_t cx = pCreature->getX(); Coord_t cy = pCreature->getY(); Player* pPlayer = pCreature->getPlayer(); // Revealer 捞棋飘甫 啊廉柯促.// EffectRevealer* pEffectRevealer = NULL;// if ( pCreature->isFlag(Effect::EFFECT_CLASS_REVEALER) )// {// pEffectRevealer = dynamic_cast<EffectRevealer*>(pCreature->findEffect(Effect::EFFECT_CLASS_REVEALER));// Assert( pEffectRevealer != NULL );// } for (ZoneCoord_t ix = max(0, cx - maxViewportWidth - 1), endx = min(m_Width - 1, cx + maxViewportWidth + 1) ; ix <= endx ; ix++) { for (ZoneCoord_t iy = max(0, cy - maxViewportUpperHeight - 1), endy = min(m_Height - 1, cy + maxViewportLowerHeight + 1) ; iy <= endy ; iy++) { // darkness康开 炼荤. // 荤角 pCreature绰 寸楷洒 slayer促.(updateHiddenScan捞骨肺..) if (pCreature->isSlayer()) { const slist<Object*> & objectList = m_pTiles[ix][iy].getObjectList(); for (slist<Object*>::const_iterator itr = objectList.begin() ; itr != objectList.end() && (*itr)->getObjectPriority() <= OBJECT_PRIORITY_BURROWING_CREATURE ; itr++) { if ((*itr)->getObjectClass() == Object::OBJECT_CLASS_CREATURE) { Creature* pPC = dynamic_cast<Creature*>(*itr); Assert(pPC != NULL); // 磊扁 磊脚老 版快 烹苞 if ( pCreature == pPC ) continue; // 见绢乐绰 措惑俊 措秦辑.. if (pPC->isFlag(Effect::EFFECT_CLASS_HIDE) && pCreature->getVisionState(ix,iy) >= IN_SIGHT) { if ( pCreature->isFlag(Effect::EFFECT_CLASS_DETECT_HIDDEN) || pCreature->isVampire() )// || ( pEffectRevealer != NULL && pEffectRevealer->canSeeHide( pPC ) ) ) { GCAddBurrowingCreature gcABC; gcABC.setObjectID(pPC->getObjectID()); gcABC.setName(pPC->getName()); gcABC.setX(ix); gcABC.setY(iy); pPlayer->sendPacket(&gcABC); } else { GCDeleteObject gcDO; gcDO.setObjectID(pPC->getObjectID()); pPlayer->sendPacket(&gcDO); } } } } }// darkness } } __END_CATCH}//--------------------------------------------------------------------------------// update mine scan// detect mine殿狼 瓤苞啊 荤扼柳 版快..焊捞绰 mine捞 救焊捞霸 瞪 版快// pCreature俊霸 GCDeleteObject甫 焊郴霖促.//--------------------------------------------------------------------------------void Zone::updateMineScan(Creature* pCreature) throw(ProtocolException, Error){ __BEGIN_TRY Assert(pCreature != NULL && pCreature->isPC()); Coord_t cx = pCreature->getX(); Coord_t cy = pCreature->getY(); Player* pPlayer = pCreature->getPlayer(); for (ZoneCoord_t ix = max(0, cx - maxViewportWidth - 1), endx = min(m_Width - 1, cx + maxViewportWidth + 1) ; ix <= endx ; ix++) { for (ZoneCoord_t iy = max(0, cy - maxViewportUpperHeight - 1), endy = min(m_Height - 1, cy + maxViewportLowerHeight + 1) ; iy <= endy ; iy++) { // 荤角 pCreature绰 寸楷洒 slayer促.(updateMineScan捞骨肺..) if (pCreature->isSlayer()) { Item* pItem = m_pTiles[ix][iy].getItem(); if (pItem) { if (pItem->getItemClass() == Item::ITEM_CLASS_MINE && pItem->isFlag(Effect::EFFECT_CLASS_INSTALL)) { if (pCreature->isFlag(Effect::EFFECT_CLASS_REVEALER) ) { GCAddInstalledMineToZone gcAddMine; gcAddMine.setObjectID(pItem->getObjectID()); gcAddMine.setX(ix); gcAddMine.setY(iy); gcAddMine.setItemClass(pItem->getItemClass()); gcAddMine.setItemType(pItem->getItemType()); gcAddMine.setOptionType(pItem->getOptionType()); gcAddMine.setDurability(pItem->getDurability()); pPlayer->sendPacket(&gcAddMine); } else { GCDeleteObject gcDO; gcDO.setObjectID(pItem->getObjectID()); pPlayer->sendPacket(&gcDO); } } } }// darkness } } __END_CATCH}//--------------------------------------------------------------------------------// add Creature// 农府贸啊 粮俊 弥檬肺 甸绢哎 锭, 农府贸 林函狼 PC甸俊霸 货 农府贸狼 免泅阑 舅妨霖促.//--------------------------------------------------------------------------------void Zone::addCreature(Creature* pCreature, ZoneCoord_t cx, ZoneCoord_t cy, Dir_t dir) throw(EmptyTileNotExistException, Error){ __BEGIN_TRY TPOINT pt = findSuitablePosition(this, cx, cy, pCreature->getMoveMode()); // 茫篮 版快 眉农 if (pt.x != -1) { //-------------------------------------------------------------------------------- // OID 甫 且寸罐绰促. //-------------------------------------------------------------------------------- m_ObjectRegistry.registerObject(pCreature); //-------------------------------------------------------------------------------- // 利例茄 鸥老阑 茫疽栏搁, 农府贸甫 农府贸概聪历客 鸥老俊 阿阿 笼绢持绰促. // Monster 老 版快, MonsterManager俊 眠啊窍哥, NPC 老 版快, NPCManager 俊 眠啊茄促. //-------------------------------------------------------------------------------- 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->addCreature(pCreature); break; case 371: case 372: case 373: case 374: case 375: case 376: m_pCombatMonsterManager->addCreature(pCreature); // 362绰 傈捧侩 阁胶磐肺 沥狼窃, 辫版籍 break; default: m_pMonsterManager->addCreature(pCreature); break; }//#else// m_pMonsterManager->addCreature(pCreature);/*#endif*/ } else if (pCreature->isNPC()) { m_pNPCManager->addCreature(pCreature); } //cout << "鸥老俊 阁胶磐 眠啊窍扁" << endl; m_pTiles[pt.x][pt.y].addCreature(pCreature, false); //-------------------------------------------------------------------------------- // 农府贸狼 谅钎甫 瘤沥茄促. //-------------------------------------------------------------------------------- pCreature->setXYDir(pt.x, pt.y, dir); pCreature->setZone(this); //scanPC(pCreature); //-------------------------------------------------------------------------------- // 林函狼 PC甸俊霸 舅副 GCAddNPC or GCAddMonster 菩哦阑 积己茄促. //-------------------------------------------------------------------------------- //cout << "林函狼 PC甸俊霸 舅副 菩哦 父甸扁" << endl; Creature::CreatureClass CClass = pCreature->getCreatureClass(); if (CClass == Creature::CREATURE_CLASS_NPC) { NPC* pNPC = dynamic_cast<NPC*>(pCreature); GCAddNPC gcAddNPC; makeGCAddNPC(&gcAddNPC, pNPC); broadcastPacket(pt.x, pt.y, &gcAddNPC); } else if (CClass == Creature::CREATURE_CLASS_MONSTER) { //cout << "阁胶磐侩 菩哦 父甸扁" << endl; Monster* pMonster = dynamic_cast<Monster*>(pCreature); //GCAddMonster gcAddMonster; //makeGCAddMonster(&gcAddMonster, pMonster); //broadcastPacket(pt.x, pt.y, &gcAddMonster); // zone俊 贸澜 甸绢哎锭档 咯矾啊瘤 惑怕啊 乐促.. by sigi Packet* pAddMonsterPacket = createMonsterAddPacket( pMonster, NULL ); if (pAddMonsterPacket!=NULL) { //cout << "阁胶磐侩 菩哦捞 父甸绢脸栏搁" << endl; bool isMonsterHide = pMonster->isFlag(Effect::EFFECT_CLASS_HIDE); bool isMonsterInvisibility = pMonster->isFlag(Effect::EFFECT_CLASS_INVISIBILITY); //broadcastPacket(pt.x, pt.y, pAddMonsterPacket); ZoneCoord_t ix = 0; ZoneCoord_t iy = 0; ZoneCoord_t endx = 0; ZoneCoord_t endy = 0; ////////////////////////////////////////////////////////////////////////////// // 风橇 函荐 檬扁拳.. // // Plus 函荐啊 曼老 版快 Range 父怒 歹 焊郴 霖促.. // 堡开 付过狼 搬苞甫 瓤苞利栏肺 焊咯林扁 困窃捞促. // // *NOTE // - 弥利拳甫 茄促搁 VisionInfo俊 PLUS_SIGHT扼绰 函荐甫 眠啊窍咯 楷魂 ////////////////////////////////////////////////////////////////////////////// int Range = 0; endx = min(m_Width - 1, cx + maxViewportWidth + 1 + Range); endy = min(m_Height - 1, cy + maxViewportLowerHeight + 1 + Range); for (ix = max(0, cx - maxViewportWidth - 1 - Range); ix <= endx ; ix++) { for (iy = max(0, cy - maxViewportUpperHeight - 1 - Range); iy <= endy ; iy++) { // 鸥老俊 农府贸啊 乐绰 版快俊父 if (m_pTiles[ix][iy].hasCreature()) { //cout << ix << "," << iy << "俊 Creature 粮犁" << endl; const slist<Object*> & objectList = m_pTiles[ix][iy].getObjectList(); slist<Object*>::const_iterator itr = objectList.begin(); for (; itr != objectList.end() && (*itr)->getObjectPriority() <= OBJECT_PRIORITY_BURROWING_CREATURE; itr++) { Creature* pCreature = dynamic_cast<Creature*>(*itr); Assert(pCreature != NULL);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -