📄 zone.cpp
字号:
getObjectRegistry().registerObject(pNormalPortal); m_pTiles[x][y].addPortal(pNormalPortal); portalType = PORTAL_SLAYER; if (bOutput) { cout << "Slayer(" << (int)x << "," << (int)y << "," << (int)targetZoneID << "," << (int)targetX << "," << (int)targetY << ")" << endl; } } else if (type == PORTAL_VAMPIRE) { SMP.read(&targetZoneID, szZoneID); SMP.read(&targetX, szBYTE); SMP.read(&targetY, szBYTE); // 器呕阑 积己秦 霖促. NormalPortal* pNormalPortal = new NormalPortal(); pNormalPortal->setObjectType(PORTAL_VAMPIRE); pNormalPortal->setZoneID(targetZoneID); pNormalPortal->setX(targetX); pNormalPortal->setY(targetY); getObjectRegistry().registerObject(pNormalPortal); m_pTiles[x][y].addPortal(pNormalPortal); portalType = PORTAL_VAMPIRE; if (bOutput) { cout << "Vampire(" << (int)x << "," << (int)y << "," << (int)targetZoneID << "," << (int)targetX << "," << (int)targetY << ")" << endl; } } else if (type == PORTAL_MULTI_TARGET) { BYTE size; SMP.read(&size, szBYTE); // 器呕阑 积己秦 霖促. MultiPortal* pMultiPortal = new MultiPortal(); for(int i = 0; i < size; i++) { SMP.read(&targetZoneID, szZoneID); SMP.read(&targetX, szBYTE); SMP.read(&targetY, szBYTE); pMultiPortal->setObjectType(PORTAL_SLAYER); // 鸥百 牢器甫 备己茄促. PortalTargetInfo* pPortalTargetInfo = new PortalTargetInfo(); pPortalTargetInfo->setZoneID(targetZoneID); pPortalTargetInfo->setX(targetX); pPortalTargetInfo->setY(targetY); pMultiPortal->setPortalTargetInfo(pPortalTargetInfo); } getObjectRegistry().registerObject(pMultiPortal); m_pTiles[x][y].addPortal(pMultiPortal); portalType = PORTAL_SLAYER; if (bOutput) { cout << "Multi(" << (int)x << "," << (int)y << "," << (int)targetZoneID << "," << (int)targetX << "," << (int)targetY << ")" << endl; } } else if ( type == PORTAL_GUILD ) { SMP.read(&targetZoneID, szZoneID); SMP.read(&targetX, szBYTE); SMP.read(&targetY, szBYTE); // 器呕阑 积己秦 霖促. GuildPortal* pGuildPortal = new GuildPortal(); pGuildPortal->setObjectType( PORTAL_GUILD ); pGuildPortal->setZoneID( targetZoneID ); pGuildPortal->setX( targetX ); pGuildPortal->setY( targetY ); getObjectRegistry().registerObject(pGuildPortal); m_pTiles[x][y].addPortal(pGuildPortal); if (bOutput) { cout << "Guild(" << (int)x << "," << (int)y << "," << (int)targetZoneID << "," << (int)targetX << "," << (int)targetY << ")" << endl; } } else if ( type == PORTAL_BATTLE ) { SMP.read(&targetZoneID, szZoneID); SMP.read(&targetX, szBYTE); SMP.read(&targetY, szBYTE); // 器呕阑 积己秦 霖促. NormalPortal* pNormalPortal = new NormalPortal(); pNormalPortal->setObjectType(PORTAL_NORMAL); pNormalPortal->setZoneID(targetZoneID); pNormalPortal->setX(targetX); pNormalPortal->setY(targetY); getObjectRegistry().registerObject(pNormalPortal); m_pTiles[x][y].addPortal(pNormalPortal); if (bOutput) { cout << "Slayer(" << (int)x << "," << (int)y << "," << (int)targetZoneID << "," << (int)targetX << "," << (int)targetY << ")" << endl; } } else { bAddPortal = false; } // 器呕捞 眠啊等 版快俊 // 格利瘤 粮捞 蜡丰粮捞扼搁 // TriggeredPortal阑 汲沥秦具 茄促. if (bAddPortal) { ZoneInfo* pTargetZoneInfo = NULL; try { pTargetZoneInfo = g_pZoneInfoManager->getZoneInfo(targetZoneID); } catch (NoSuchElementException& t) { throw Error("弊繁 粮捞 绝促匙"); } Assert(pTargetZoneInfo!=NULL); // 扁粮狼 Portal阑 瘤匡鳖? bool bDeleteOldPortal = false; if (pTargetZoneInfo->isPayPlay() || pTargetZoneInfo->isMasterLair()) { bDeleteOldPortal = true; } Tile& rTile = m_pTiles[x][y]; // 扁粮狼 Portal阑 瘤快绰 版快 if (bDeleteOldPortal) { // 扁粮俊 乐带 portal阑 力芭茄促. if (rTile.hasPortal()) { Portal* pOldPortal = rTile.getPortal(); rTile.deletePortal(); delete pOldPortal; } } // 器呕阑 积己窍绊, 殿废茄促. //---------------------------------------- // 付胶磐 饭绢牢 版快 // by sigi. 2002.9.2 //---------------------------------------- if (pTargetZoneInfo->isMasterLair()) { TriggeredPortal* pPortal = new TriggeredPortal(); getObjectRegistry().registerObject(pPortal); // 器呕 郴侩阑 肺靛茄促. pPortal->setObjectType(portalType); //pPortal->load(m_ZoneID, left, top, right, bottom); TriggerManager& tm = pPortal->getTriggerManager(); Trigger* pTrigger = new Trigger(); pTrigger->setTriggerID( 0 ); // 狼固绝促. pTrigger->setTriggerType("QUEST"); sprintf(str, "ConditionType : EnterMasterLair\n\t TargetZoneID : %d\n\t", (int)pTargetZoneInfo->getZoneID()); pTrigger->setConditions( str ); sprintf(str, "ActionType : ActivatePortal\n\t ZoneID : %d\n\t X : %d\n\t Y : %d\n\t", targetZoneID, targetX, targetY); pTrigger->setActions(str);// sprintf( str2, "ActionType : SystemMessage\n\t Content : %s", // g_pStringPool->c_str( STRID_CANNOT_ENTER ) ); sprintf( str2, "ActionType : SystemMessage\n\t Content : %d", STRID_CANNOT_ENTER ); pTrigger->setCounterActions( str2 );// pTrigger->setCounterActions("ActionType : SystemMessage\n\t Content : 瘤陛篮 甸绢哎 荐 绝嚼聪促."); tm.addTrigger(pTrigger); // 鸥老俊促 器呕阑 嘿牢促. rTile.addPortal(pPortal); //cout << "[" << (int)pTargetZoneInfo->getZoneID() << "] is MasterLair" // << endl; } //---------------------------------------- // 橇府固决 粮牢 版快 //---------------------------------------- else if (pTargetZoneInfo->isPayPlay()) { TriggeredPortal* pPortal = new TriggeredPortal(); getObjectRegistry().registerObject(pPortal); // 器呕 郴侩阑 肺靛茄促. pPortal->setObjectType(portalType); //pPortal->load(m_ZoneID, left, top, right, bottom); TriggerManager& tm = pPortal->getTriggerManager(); Trigger* pTrigger = new Trigger(); pTrigger->setTriggerID( 0 ); // 狼固绝促. pTrigger->setTriggerType("QUEST"); pTrigger->setConditions("ConditionType : PayPlay\n\t"); sprintf(str, "ActionType : ActivatePortal\n\t ZoneID : %d\n\t X : %d\n\t Y : %d\n\t", targetZoneID, targetX, targetY); pTrigger->setActions(str);// sprintf( str2, "ActionType : SystemMessage\n\t Content : %s",// g_pStringPool->c_str( STRID_CANNOT_ENTER_PAY_ZONE ) ); sprintf( str2, "ActionType : SystemMessage\n\t Content : %d", STRID_CANNOT_ENTER_PAY_ZONE ); pTrigger->setCounterActions( str2 );// pTrigger->setCounterActions("ActionType : SystemMessage\n\t Content : 蜡丰粮捞扼辑 甸绢哎 荐 绝嚼聪促."); tm.addTrigger(pTrigger); // 鸥老俊促 器呕阑 嘿牢促. rTile.addPortal(pPortal); } } } //if (flag & 0x80) } // for } // for SMP.close(); ///* if (m_MonsterRegenPositions.size()==0) { cout << "MonsterRegenPosition not exist" << endl; cout << "Width = " << m_Width << endl; cout << "Height = " << m_Height << endl; //Assert(m_MonsterRegenPositions.size()!=0); ZoneCoord_t outerMinX = m_Width/7; ZoneCoord_t outerMinY = m_Height/7; ZoneCoord_t outerMaxX = m_Width-outerMinX; ZoneCoord_t outerMaxY = m_Width-outerMinY; for (ZoneCoord_t y=outerMinY; y<outerMaxY; y++) { for (ZoneCoord_t x=outerMinX; x<outerMaxX; x++) { Tile& rTile = m_pTiles[x][y]; if (!rTile.hasPortal() && !rTile.isGroundBlocked() && !rTile.isAirBlocked() && !rTile.isUndergroundBlocked()) { m_MonsterRegenPositions.push_back( BPOINT( (BYTE)x, (BYTE)y ) ); } } } Assert(m_MonsterRegenPositions.size()!=0); } if ((isMasterLair() || m_ZoneID == 3002) && m_EmptyTilePositions.size()==0) { cout << "MasterLair has No EmptyTilePosition" << endl; Assert(m_EmptyTilePositions.size()!=0); } // */ // Zone 沥焊甫 技泼茄促. m_ZoneType = pZoneInfo->getZoneType(); m_ZoneLevel = pZoneInfo->getZoneLevel(); // m_ppLevel 力芭 for (i = 0; i < m_Width; i++) { SAFE_DELETE_ARRAY( m_ppLevel[i] ); } SAFE_DELETE_ARRAY( m_ppLevel ); // 皋葛府 且寸秦林绊... m_ppLevel = new (ZoneLevel_t*) [ m_Width ]; for (uint i = 0; i < m_Width; i++) m_ppLevel[i] = new ZoneLevel_t[m_Height]; // 粮 饭骇阑 叼弃飘 蔼栏肺 檬扁拳矫挪促. for (ZoneCoord_t x = 0; x < m_Width; x++) for (ZoneCoord_t y = 0; y < m_Height; y++) m_ppLevel[x][y] = m_ZoneLevel; // SSI 沥焊 颇老阑 楷促. string SSIFilename = g_pConfig->getProperty("HomePath") + "/data/" + pZoneInfo->getSSIFilename(); ifstream SSI(SSIFilename.c_str(), ios::in | ios::binary | ios::nocreate); if (!SSI) { strcpy( lwrFilename, SSIFilename.c_str()); strlwr( lwrFilename ); SSI.open(lwrFilename, ios::in | ios::binary | ios::nocreate); //cout << "second chk : " << lwrFilename << endl; if (!SSI) { StringStream msg; msg << SSIFilename << " not exist or cannot open it"; throw FileNotExistException(msg.toString()); } } int size = 0; SSI.read(&size, szint); BYTE left, top, right, bottom, level; for (int i=0; i<size; i++) { SSI.read(&level, szBYTE); SSI.read(&left, szBYTE); SSI.read(&top, szBYTE); SSI.read(&right, szBYTE); SSI.read(&bottom, szBYTE); if (bOutput) { cout << "LEVEL:" << (int)level << ",(" << (int)left << "," << (int)top << "," << (int)right << "," << (int)bottom << ")" << endl; } Assert(left <= right); Assert(top <= bottom); for (int bx=left; bx<=right; bx++) for (int by=top; by<=bottom; by++) m_ppLevel[bx][by] = level; } SSI.close(); // 飘府芭靛 器呕阑 肺靛茄促. // reload俊辑绰 公矫 //loadTriggeredPortal(); // 阁胶磐 肺靛窍绊.... m_pMonsterManager->load();// eventMonsterManager绰 reload俊辑绰 公矫茄促.//#ifdef __XMAS_EVENT_CODE__// cout << "Begin Event Monster Loading..." << endl;// m_pEventMonsterManager->load();// cout << "Event Monster Loading Completed..." << endl;//#endif // 付胶磐 饭绢牢 版快 // by sigi. 2002.9.2 if (pZoneInfo->isMasterLair()) { if (m_pMasterLairManager!=NULL && m_pMasterLairManager->getCurrentEvent()==MasterLairManager::EVENT_WAITING_REGEN) { SAFE_DELETE(m_pMasterLairManager); m_pMasterLairManager = new MasterLairManager(this); } } // 己牢 版快 // by sigi. 2003.1.24 if (pZoneInfo->isCastle()) { if (m_pWarScheduler!=NULL) //&& m_pWarScheduler->getCurrentEvent()==WarScheduler::EVENT_WAITING_REGEN) { SAFE_DELETE(m_pWarScheduler); m_pWarScheduler = new WarScheduler(this); } } // reload且 锭绰 公矫茄促. // 酒捞袍 肺靛茄促. //loadItem(); // NPC 甫 肺爹茄促. //m_pNPCManager->load(m_ZoneID); // 胶橇扼捞飘 肮荐甫 檬扁拳茄促. initSpriteCount();} catch ( Throwable& t ){ cout << t.toString() << endl; Assert(false);} __END_DEBUG __END_CATCH}//////////////////////////////////////////////////////////////////////////////// load items from database// * NOTE *// 泅犁 官蹿俊 冻绢柳 酒捞袍篮 辑滚啊 犁矫累登绢档 肺爹窍瘤 臼绰促.//////////////////////////////////////////////////////////////////////////////void Zone::loadItem () throw(Error){ __BEGIN_TRY /* // 酒捞袍 肺爹........... g_pItemLoaderManager->load(this); // 酒捞袍篮 促 朝妨滚啡瘤父...弊贰滴... // 酒捞袍 坷宏璃飘 酒捞叼甫 犁 且寸 罐绊 促矫 历厘茄促. for (int j = 0; j < m_Height; j++) { for (int i = 0; i < m_Width; i++) { if (m_pTiles[i][j].hasItem()) { Item* pItem = m_pTiles[i][j].getItem(); m_ObjectRegistry.registerObject(pItem); pItem->save("", STORAGE_ZONE, m_ZoneID, i, j); addToItemList(pItem); if (pItem->getItemClass() == Item::ITEM_CLASS_MOTORCYCLE) { Motorcycle* pMotorcycle = dynamic_cast<Motorcycle*>(pItem); MotorcycleBox* pMotorcycleBox = new MotorcycleBox(pMotorcycle, this, i, j); g_pParkingCenter->addMotorcycleBox(pMotorcycleBox); } } } } */ __END_CATCH}//////////////////////////////////////////////////////////////////////////////// 泅犁 粮俊 飘府芭靛 器呕阑 肺靛茄促.////////////////////////
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -