⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 weathermanager.cpp

📁 天之炼狱1服务器端源文件游戏服务端不完整
💻 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, &ltm );	//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, &ltm );		//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(&currentTime);	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 + -