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

📄 flagwar.cpp

📁 天之炼狱1服务器端源文件游戏服务端不完整
💻 CPP
字号:
#include "FlagWar.h"#include "FlagManager.h"#include "ItemFactoryManager.h"#include "Zone.h"#include "ZoneUtil.h"#include "ZoneInfoManager.h"#include "GlobalItemPositionLoader.h"#include "MonsterSummonInfo.h"#include "ZoneGroupManager.h"#include "Gpackets/GCNoticeEvent.h"list<FlagWar::FlagGenZone> FlagWar::m_FlagGenInfo;void FlagWar::execute() throw(Error){	__BEGIN_TRY	switch ( getState() )	{		case STATE_WAIT :			filelog( "FlagWar.log", "FlagWar Ready.." );			executeReady();			setState( STATE_READY );			break;		case STATE_READY :			filelog( "FlagWar.log", "FlagWar Start.." );			executeStart();			setState( STATE_START );			break;		case STATE_START :			filelog( "FlagWar.log", "FlagWar Finising.." );			executeFinish();			setState( STATE_FINISH );			break;		case STATE_FINISH :			filelog( "FlagWar.log", "FlagWar End.." );			executeEnd();			setState( STATE_WAIT );			break;		default :			filelog( "FlagWar.log", "捞惑茄 FlagWar 惑怕.." );			break;	}	__END_CATCH}void FlagWar::executeReady() throw(Error){	__BEGIN_TRY	GCNoticeEvent gcNE;	gcNE.setCode( NOTICE_EVENT_FLAG_WAR_READY );	VSDateTime current = VSDateTime::currentDateTime();	gcNE.setParameter( ((DWORD)((DWORD)(current.date().year() - 2000))*1000000) + ((DWORD)((DWORD)current.date().month())*10000)					   + ((DWORD)((DWORD)current.date().day())*100) + ((DWORD)((DWORD)current.time().hour())) );	g_pZoneGroupManager->broadcast( &gcNE );	// 5盒乐促啊 矫累窍磊	g_pFlagManager->addSchedule( new Schedule( this, VSDateTime::currentDateTime().addSecs(300) ) );	__END_CATCH}void FlagWar::addFlagsRandom( ZoneID_t zoneID, uint no ){	Zone* pZone = getZoneByZoneID( zoneID );	Assert( pZone != NULL );	VSRect rect(0, 0, pZone->getWidth()-1, pZone->getHeight()-1);	BPOINT pt;	pZone->lock();	for ( uint i=0; i<no; ++i )	{		pt.x = rand()%pZone->getWidth();		pt.y = rand()%pZone->getHeight();		while ( !rect.ptInRect(pt.x, pt.y) || pZone->getTile(pt.x, pt.y).hasItem() || pZone->getTile(pt.x, pt.y).isBlocked(Creature::MOVE_MODE_WALKING) 				|| ( (pZone->getZoneLevel(pt.x, pt.y))&SAFE_ZONE == 0 ) )		{			pt.x = rand()%pZone->getWidth();			pt.y = rand()%pZone->getHeight();		}		Item* pItem = g_pItemFactoryManager->createItem( Item::ITEM_CLASS_EVENT_ITEM, 27, list<OptionType_t>() );		Assert( pItem != NULL );		pZone->registerObject( pItem );		TPOINT ptInZone = pZone->addItem( pItem, pt.x, pt.y, true, 36000 );		pItem->create( "", STORAGE_ZONE, pZone->getZoneID(), ptInZone.x, ptInZone.y );		filelog( "FlagWar.log", "%d : (%d,%d) 俊 标惯捞 父甸绢脸嚼聪促.", pZone->getZoneID(), ptInZone.x, ptInZone.y );		m_Flags.push_back( pItem->getItemID() );	}	pZone->unlock();	g_pFlagManager->getAllowMap()[zoneID] = no;}void FlagWar::executeStart() throw(Error){	__BEGIN_TRY	GCNoticeEvent gcNE;	gcNE.setCode( NOTICE_EVENT_FLAG_WAR_START );	VSDateTime current = VSDateTime::currentDateTime();	gcNE.setParameter( ((DWORD)((DWORD)(current.date().year() - 2000))*1000000) + ((DWORD)((DWORD)current.date().month())*10000)					   + ((DWORD)((DWORD)current.date().day())*100)    + ((DWORD)((DWORD)current.time().hour())) );	g_pZoneGroupManager->broadcast( &gcNE );		m_Flags.clear();	g_pFlagManager->getAllowMap().clear();	addFlags();//	addFlagsRandom( 1122, 20 );	// 罚待窍霸 粮阑 急琶秦辑 100俺狼 标惯阑 积己茄促.	// 2矫埃 窍磊	g_pFlagManager->addSchedule( new Schedule( this, VSDateTime::currentDateTime().addSecs(getWarTime()) ) );	g_pFlagManager->startFlagWar();	__END_CATCH}void FlagWar::executeFinish() throw(Error){	__BEGIN_TRY	GCNoticeEvent gcNE;	gcNE.setCode( NOTICE_EVENT_FLAG_WAR_FINISH );	Race_t winnerRace = g_pFlagManager->getWinnerRace();	gcNE.setParameter( ((DWORD)((DWORD)winnerRace << 16)) | (DWORD)g_pFlagManager->getFlagCount( winnerRace ) );	g_pZoneGroupManager->broadcast( &gcNE );		// 3盒乐促啊 酒袍 磐模促.	g_pFlagManager->addSchedule( new Schedule( this, VSDateTime::currentDateTime().addSecs(180) ) );	g_pFlagManager->endFlagWar();	__END_CATCH}void FlagWar::executeEnd() throw(Error){	__BEGIN_TRY	// 积己沁带 标惯甸阑 卵酒啊辑 促 瘤况挥促.	vector<ItemID_t>::iterator itr = m_Flags.begin();	vector<ItemID_t>::iterator endItr = m_Flags.end();		for ( ; itr != endItr ; ++itr )	{		GlobalItemPosition* pItemPosition = GlobalItemPositionLoader::getInstance()->load( Item::ITEM_CLASS_EVENT_ITEM, *itr );		if ( pItemPosition == NULL ) continue;		// popItem篮 酒袍阑 秦寸 困摹俊辑 惶酒郴骨肺 瘤况滚妨档 等促.		// 捞扒 FlagManager 啊 档绰 胶饭靛俊辑 阂矾瘤骨肺 救俊辑 遏吧绢拎具 等促.		Item* pItem = pItemPosition->popItem( true );		if ( pItem != NULL )		{			pItem->destroy();			SAFE_DELETE(pItem);		}		else		{			filelog( "FlagWar.log", "标惯 酒捞袍 眠利 角菩... ぬ.ば");		}	}	g_pFlagManager->resetFlagCounts();	m_Flags.clear();	// 促澜阑 扁距窍磊	g_pFlagManager->addSchedule( new Schedule( this, getNextFlagWarTime() ) );/*	ZoneCoord_t	ZoneX, ZoneY;	switch ( g_pFlagManager->getWinnerRace() )	{		case RACE_SLAYER:			ZoneX = 90;			ZoneY = 50;			break;		case RACE_VAMPIRE:			ZoneX = 24;			ZoneY = 52;			break;		case RACE_OUSTERS:			ZoneX = 30;			ZoneY = 86;			break;		default:			return;	}	SUMMON_INFO summonInfo;	summonInfo.canScanEnemy = false;	summonInfo.clanType = SUMMON_INFO::CLAN_TYPE_DEFAULT;	addMonstersToZone(getZoneByZoneID(1122), ZoneX, ZoneY, 0, 599, 1, summonInfo);*/	__END_CATCH}VSDateTime FlagWar::getNextFlagWarTime(){	static const int NextFlagWarDay[8] =	{		0, 0, 1, 0, 1, 0, 0, 0	};	VSDateTime dt = VSDateTime::currentDateTime();	VSDateTime nextWarDateTime;	nextWarDateTime = dt.addDays( NextFlagWarDay[dt.date().dayOfWeek()] );	if ( nextWarDateTime.date().dayOfWeek() < 6 )		nextWarDateTime.setTime( VSTime( 18, 55, 0 ) );	else		nextWarDateTime.setTime( VSTime( 13, 55, 0 ) );	if ( nextWarDateTime < VSDateTime::currentDateTime() )	{		bool anotherDay = true;		if ( nextWarDateTime.date().dayOfWeek() == 6 )		{			nextWarDateTime.setTime( VSTime( 18, 55, 0 ) );			if ( nextWarDateTime >= VSDateTime::currentDateTime() ) anotherDay = false;		}		if ( anotherDay )		{			//nextWarDateTime = nextWarDateTime.addDays( NextWarDay[warType][dt.addDays(1).date().dayOfWeek()] );			nextWarDateTime = nextWarDateTime.addDays( 1 );			nextWarDateTime = nextWarDateTime.addDays( NextFlagWarDay[nextWarDateTime.date().dayOfWeek()] );			if ( nextWarDateTime.date().dayOfWeek() < 6 )				nextWarDateTime.setTime( VSTime( 18, 55, 0 ) );			else				nextWarDateTime.setTime( VSTime( 13, 55, 0 ) );		}	}	//cout << nextWarDateTime.toString() << "俊 标惯 傈里 矫累窃寸~" << endl;	filelog( "FlagWar.log", "%s俊 标惯 化扁 捞亥飘 矫累", nextWarDateTime.toString().c_str() );	return nextWarDateTime;}void FlagWar::addFlags(){	addFlagsRandom( 21, 6 );	addFlagsRandom( 22, 6 );	addFlagsRandom( 23, 6 );	addFlagsRandom( 24, 7 );	addFlagsRandom( 11, 7 );	addFlagsRandom( 12, 6 );	addFlagsRandom( 13, 6 );	addFlagsRandom( 14, 6 );	addFlagsRandom( 31, 6 );	addFlagsRandom( 32, 6 );	addFlagsRandom( 33, 7 );	addFlagsRandom( 34, 6 );	addFlagsRandom( 61, 11 );	addFlagsRandom( 62, 11 );	addFlagsRandom( 63, 12 );	addFlagsRandom( 64, 11 );}int FlagWar::getWarTime() const { return 7200; }

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -