📄 weathermanager.cpp
字号:
//--------------------------------------------------------------------------------//// Filename : WeatherManager.cpp// Written By : Reiot////--------------------------------------------------------------------------------// include files#include "WeatherManager.h"#include "GameTime.h"#include "TimeManager.h"#include "WeatherInfo.h"#include "LogClient.h"#include "DarkLightInfo.h"#include "Zone.h"#include "PKZoneInfoManager.h"#include "Gpackets/GCChangeDarkLight.h"#include "Gpackets/GCChangeWeather.h"#include "Gpackets/GCLightning.h"//--------------------------------------------------------------------------------//// destructor//// 牧抛捞呈狼 葛电 按眉甸阑 DB俊 历厘茄 饶, 昏力茄促.////--------------------------------------------------------------------------------WeatherManager::~WeatherManager () throw (Error){ __BEGIN_TRY __END_CATCH}//--------------------------------------------------------------------------------// initialize current zone's weather, darklevel, lightlevel//--------------------------------------------------------------------------------void WeatherManager::init () throw (Error){ __BEGIN_TRY //-------------------------------------------------------------------------------- // 坷疵狼 朝揪甫 汲沥茄促. //-------------------------------------------------------------------------------- // 坷疵捞 割岿牢瘤 舅扁 困秦辑, GameTime 按眉甫 啊廉柯促. GameTime gametime = g_pTimeManager->getGameTime(); // 捞锅崔狼 朝揪 沥焊甫 罐酒柯促. //const WeatherInfo & weatherInfo = g_pWeatherInfoManager->getWeatherInfo(gametime.getMonth()); // 促捞胶甫 奔妨辑, 坷疵狼 朝揪甫 瘤沥茄促. //m_TodayWeather = weatherInfo.getWeather(Dice(1,100)); //-------------------------------------------------------------------------------- // 郴老 朝楼甫 汲沥茄促. //-------------------------------------------------------------------------------- // 霸烙矫埃阑 time_t 肺 罐酒柯促. time_t gmtime = g_pTimeManager->getgametime(); // tm 胶飘钒贸肺 函券, 矫/盒/檬 蔼阑 舅酒辰促. tm ltm; localtime_r( &gmtime, <m ); //struct tm* ptm = localtime(&gmtime); // 霸烙 矫埃栏肺 郴老鳖瘤 巢篮 檬甫 拌魂茄促. int dSec = (23 - ltm.tm_hour)* 3600 + (59 - ltm.tm_min)* 60 + (60 - ltm.tm_sec); // (巢篮 霸烙 矫埃 / 5) 甫 泅犁 角矫埃俊 歹窍搁, 郴老狼 角力 矫埃捞 唱柯促. time_t currentTime = time(0); m_Tomorrow = currentTime + dSec / 5; //-------------------------------------------------------------------------------- // 泅犁狼 朝揪, 朝揪饭骇, 促澜朝揪函版矫埃阑 汲沥茄促. //-------------------------------------------------------------------------------- // 厚/传捞 棵 犬伏苞 泅犁狼 朝揪甫 搬沥茄促. m_TodayWeather = WEATHER_CLEAR; m_Probability = 0; m_CurrentWeather = WEATHER_CLEAR; m_WeatherLevel = 0; m_NextWeatherChangingTime = m_Tomorrow; m_NextLightning = m_Tomorrow; /* if (m_TodayWeather == WEATHER_CLEAR) { // 讣篮 朝篮 公炼扒 讣促. m_Probability = 0; m_CurrentWeather = WEATHER_CLEAR; m_WeatherLevel = 0; m_NextWeatherChangingTime = m_Tomorrow; m_NextLightning = m_Tomorrow; } else { m_Probability = Dice(3,100) / 3; // 厚唱 传捞 棵 犬伏 m_CurrentWeather = (Dice(1,100) < m_Probability) ? m_TodayWeather : WEATHER_CLEAR ; m_WeatherLevel = (m_CurrentWeather != WEATHER_CLEAR) ? Dice(3,20) / 3 : 0; // 厚/传篮 弥措 20 盒(角矫埃)悼救 郴赴促. // 蝶扼辑, 促澜 朝揪 函版 矫埃篮 泅犁 矫埃 + (1-20min)* 60sec 饶啊 等促. // 老窜 抛胶飘甫 困秦辑 林扁甫 陋霸 //m_NextWeatherChangingTime = time(0) + Dice(1,20)* 60; m_NextWeatherChangingTime = time(0) + 60; // 老窜 抛胶飘甫 困秦辑 林扁甫 陋霸 //m_NextLightning = time(0) + 60; m_NextLightning = time(0) + 10; } */ //-------------------------------------------------------------------------------- // 泅犁狼 粮狼 灌扁客 绢涤扁 饭骇, 促澜 函版矫埃阑 汲沥茄促. //-------------------------------------------------------------------------------- DarkLightInfo* pDIInfo = g_pDarkLightInfoManager->getCurrentDarkLightInfo( m_pZone ); m_pZone->setDarkLevel(pDIInfo->getDarkLevel()); m_pZone->setLightLevel(pDIInfo->getLightLevel()); // 霸烙 矫埃栏肺 促澜 10盒措啊 霸烙矫埃 割 檬 饶牢瘤 拌魂茄促. dSec = (9 - ltm.tm_min / 10)* 60 + (60 - ltm.tm_sec); m_Next10Min = currentTime + dSec / 5; __END_CATCH}//--------------------------------------------------------------------------------// 瘤沥 矫埃捞 登搁 朝揪甫 舅酒辑 官层霖促. 粮狼 heartbeat 俊辑 龋免登绢具 茄促.//--------------------------------------------------------------------------------void WeatherManager::heartbeat () throw (Error){ // 畴钢 鞘靛啊 酒聪扼搁 酒公 巴档 且 鞘夸啊 绝促. if (m_pZone->getZoneType() != ZONE_NORMAL_FIELD) return; // PK 粮档 酒公巴档 且 鞘夸啊 绝促. if ( g_pPKZoneInfoManager->isPKZone( m_pZone->getZoneID() ) ) return; time_t currentTime = time(0); //-------------------------------------------------------------------------------- // 窍风啊 瘤唱埃 版快, 坷疵狼 朝揪甫 官操绊, 朝揪喊 犬伏阑 拌魂茄促. // 坷疵狼 朝揪啊 官差歹扼档, m_NextWeatherChangingTime 阑 逞绢辑瘤 // 臼疽促搁 朝揪绰 官差瘤 臼绰促绰 单 蜡狼且 巴. //-------------------------------------------------------------------------------- if (currentTime > m_Tomorrow) { // 坷疵捞 割岿牢瘤 舅扁 困秦辑, GameTime 按眉甫 啊廉柯促. GameTime gametime = g_pTimeManager->getGameTime(); // 捞锅崔狼 朝揪 沥焊甫 罐酒柯促. const WeatherInfo & weatherInfo = g_pWeatherInfoManager->getWeatherInfo(gametime.getMonth()); // 促捞胶甫 奔妨辑, 坷疵狼 朝揪甫 瘤沥茄促. m_TodayWeather = weatherInfo.getWeather(Dice(1,100)); // 厚/传捞 棵 犬伏阑 搬沥茄促. // 泅犁 朝揪绰 促澜朝揪函版矫埃捞 瘤唱具父 函版等促. // 蝶扼辑 咯扁辑 汲沥秦临 鞘夸绰 绝促. if (m_TodayWeather == WEATHER_CLEAR) { // 讣篮 朝篮 公炼扒 讣促. m_Probability = 0; } else { m_Probability = Dice(3,100) / 3; } // 霸烙矫埃阑 time_t 肺 罐酒柯促. time_t gmtime = g_pTimeManager->getgametime(); // tm 胶飘钒贸肺 函券, 矫/盒/檬 蔼阑 舅酒辰促. tm ltm; localtime_r( &gmtime, <m ); //struct tm* ptm = localtime(&gmtime); // 霸烙 矫埃栏肺 郴老鳖瘤 巢篮 檬甫 拌魂茄促. int dSec = (23 - ltm.tm_hour)* 3600 + (59 - ltm.tm_min)* 60 + (59 - ltm.tm_sec); // (巢篮 霸烙 矫埃 / 5) 甫 泅犁 角矫埃俊 歹窍搁, 郴老狼 角力 矫埃捞 唱柯促. m_Tomorrow = currentTime + dSec / 5; } //-------------------------------------------------------------------------------- // 瘤沥等 矫埃阑 檬苞茄 版快, 朝揪甫 官层拎具 茄促. //-------------------------------------------------------------------------------- if (currentTime > m_NextWeatherChangingTime) { if (m_TodayWeather == WEATHER_CLEAR) { // 讣篮 朝狼 版快, 郴老鳖瘤 酒公繁 朝揪 函拳档 惯积窍瘤 臼绰促. m_CurrentWeather = WEATHER_CLEAR; m_WeatherLevel = 0; m_NextWeatherChangingTime = m_Tomorrow; m_NextLightning = m_Tomorrow / 2; } else { m_CurrentWeather = (Dice(1,100) < m_Probability) ? m_TodayWeather : WEATHER_CLEAR ; m_WeatherLevel = (m_CurrentWeather!=WEATHER_CLEAR) ? Dice(3,20) / 3 : 0; // 老窜 抛胶飘甫 困秦辑 林扁甫 陋霸 //m_NextWeatherChangingTime = time(0) + Dice(1,20)* 60; m_NextWeatherChangingTime = time(0) + 60; // 老窜 抛胶飘甫 困秦 林扁甫 陋霸 //m_NextLightning = time(0) + 60; m_NextLightning = time(0) + 20; } GCChangeWeather gcChangeWeather; gcChangeWeather.setWeather(m_CurrentWeather); gcChangeWeather.setWeatherLevel(m_WeatherLevel); StringStream msg; msg << "ZONE[" << m_pZone->getZoneID() << "] : " << gcChangeWeather.toString(); log(LOG_DEBUG_MSG, "", "", msg.toString()); m_pZone->broadcastPacket(&gcChangeWeather , NULL); } //-------------------------------------------------------------------------------- // 坷疵狼 朝揪啊 '厚' 捞搁辑, 瘤沥等 矫埃阑 檬苞茄 版快, 锅俺 眉农甫 秦霖促. //-------------------------------------------------------------------------------- if (m_CurrentWeather == WEATHER_RAINY && currentTime > m_NextLightning) { // 1d100 促捞胶甫 奔妨辑, (厚狼 饭骇* 5 - 30) 焊促 累促搁 // 锅俺啊 模 巴栏肺 埃林茄促. 朝揪 饭骇捞 弥措 20 捞骨肺, // 犬伏篮 弥措 70% 鳖瘤 档崔且 荐 乐促. // 老窜 公炼扒 厚啊 坷搁 锅俺啊 摹档废 茄寸.. if (Dice(1 , 100) < (uint)max(0 , m_WeatherLevel* 5 - 30)) { GCLightning gcLightning; gcLightning.setDelay(Dice(1,5)); m_pZone->broadcastPacket(&gcLightning , NULL); } // 促澜 锅俺 眉农 矫埃阑 汲沥茄促. // (朝揪啊 讣阑 版快俊绰 刘啊矫难临 鞘夸炼瞒 绝促.) m_NextLightning += 60; } //-------------------------------------------------------------------------------- // 霸烙 矫埃 10盒付促 粮狼 灌扁客 绢涤扁 沥焊甫 官层霖促. //-------------------------------------------------------------------------------- if (currentTime > m_Next10Min) { DarkLightInfo* pDIInfo = g_pDarkLightInfoManager->getCurrentDarkLightInfo( m_pZone ); DarkLevel_t darkLevel = pDIInfo->getDarkLevel(); LightLevel_t lightLevel = pDIInfo->getLightLevel(); // 绢涤扁唱 灌扁 吝 窍唱扼档 官差菌促搁.. 宏肺靛某胶飘茄促. if (darkLevel != m_pZone->getDarkLevel() || lightLevel != m_pZone->getLightLevel()) { m_pZone->setDarkLevel(darkLevel); m_pZone->setLightLevel(lightLevel); GCChangeDarkLight gcChangeDarkLight; gcChangeDarkLight.setDarkLevel(darkLevel); gcChangeDarkLight.setLightLevel(lightLevel); GCChangeDarkLight gcChangeDarkLight2; gcChangeDarkLight2.setDarkLevel(DARK_MAX - darkLevel); gcChangeDarkLight2.setLightLevel(LIGHT_MAX - lightLevel); m_pZone->broadcastDarkLightPacket(&gcChangeDarkLight, &gcChangeDarkLight2, NULL); //cout << "(DarkLevel/LightLevel) : (" << (int)darkLevel << "," << (int)lightLevel << ") at " << g_pTimeManager->getGameTime().toString() << endl; } else { //cout << "(DarkLevel/LightLevel) : (" << (int)darkLevel << "," << (int)lightLevel << ") at " << g_pTimeManager->getGameTime().toString() << endl; } m_Next10Min += 120; }}//--------------------------------------------------------------------------------// get debug string//--------------------------------------------------------------------------------string WeatherManager::toString () const throw (){ StringStream msg; msg << "WeatherManager("; msg << " 坷疵狼 朝揪 : " << Weather2String[ m_TodayWeather ]; msg << " 泅犁 朝揪 : " << Weather2String[ m_CurrentWeather ]; msg << "厚/传捞 棵 犬伏 : " << (int)m_Probability << "%"; msg << " 朝揪 饭骇 : " << (int)m_WeatherLevel; time_t currentTime = time(0); msg << " 泅犁矫埃 : " << (int)ctime(¤tTime); msg << " 霸烙惑狼 郴老 : " << (int)ctime(&m_Tomorrow); msg << "促澜朝揪函版矫埃: " << (int)ctime(&m_NextWeatherChangingTime); msg << "促澜锅俺眉农矫埃: " << (int)ctime(&m_NextLightning); return msg.toString();}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -