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

📄 questfunction.cpp

📁 国内著名网络游戏dragon的服务端完整源码 内附完整数据库结构
💻 CPP
📖 第 1 页 / 共 4 页
字号:
	m_cTimer.push_back( cTimer );
	return true;
}

bool CQuestInMap::DeleteScriptTimer( const int iServerID , const char* szName )	
{//秦寸 cn苞 捞抚捞 乐绰巴篮 瘤款促.
//菩哦阑 罐芭唱 胶农赋飘老锭促..
	TIMERITER itFind = find_if( m_cTimer.begin(), m_cTimer.end(), bind2nd( IsIDHereInTimer(), iServerID) );

	if (itFind != m_cTimer.end())
		if( strcmp( szName, (*itFind).GetName() ) == 0 )
		{		
			(*itFind).SendSCRIPT_TIEMER( 0, CMD_SCRIPT_TIMER_END_FAL);
			DeleteScriptCounter( iServerID, szName );	//Timmer啊 瘤况龙锭 Counter档 瘤况柳促. 
			m_cTimer.erase(itFind);
			return true;
		}
	return false;
}

void CQuestInMap::DeleteScriptTimer()	
{//鸥捞赣啊 场抄巴瘤款促. 

	int tmp = 0;	//抄吝俊 瘤矿矫促.
	TIMERITER itFind = find_if(m_cTimer.begin(), m_cTimer.end(), bind2nd( IsEndInTimer(),  tmp) );

	if (itFind != m_cTimer.end())
	{
		(*itFind).SendSCRIPT_TIEMER( 0, CMD_SCRIPT_TIMER_END_SUC);
		DeleteScriptCounter( (*itFind).GetConnectionID(), (*itFind).GetName());//iServerID, szName );	//Timmer啊 瘤况龙锭 Counter档 瘤况柳促. 
		m_cTimer.erase(itFind);
	}
}


void CQuestInMap::RunScriptTimer()
{
	if( m_cTimer.size() <= 0 ) return;	//窍唱滴 绝静搁 扁成 府畔茄促.

	list<CScriptTimer>::iterator it;
	//for_each( m_cTimer.begin(), m_cTimer.end(), m_cTimer.RunTimer() );
	//抄吝俊 己悼揪俊霸 拱绢杭帛... for_each俊辑it俊 甸绢啊绰 窃荐 结档 登绰啊...
	for( it = m_cTimer.begin(); it != m_cTimer.end(); it++)
	{
		//int z = (*it).GetConnectionID();
		(*it).RunTimer();

		//捞抚捞尔 cn捞 撇府绰 版快绰 鸥捞赣甫 肛冕促.(酵
		if( !CheckID2Name( (*it).GetConnectionID(), (*it).GetName() ) )
			(*it).EndTimer( SCRIPT_END_FAL );
	}


	//捞霸 [ if(!ch) return; ] 咯扁乐绰 捞蜡 .. 蜡历啊 立加秦辑 涅胶飘甫 柳青窍促 肺弊酒眶沁促. 葛电 捞甸捞 悼矫俊 富具..
	// m_cTimer.size()绰 咯矾俺瘤父 cn捞 绝扁 锭巩俊 捞霸 涝备俊 乐促搁 官肺 府畔秦滚矾寂
	// cn,name街捞 撇府绰 仇阑 瘤匡荐啊 绝促.
	// 弊矾促啊 酒鳖 涅胶飘 柳青窍带 逞捞 甸绢吭绰单. 犁荐肺 傈狼 cn阑 罐阑 啊瓷己捞 乐波耽..  弊扼搁 
	// 酒鳖 墨款磐啊 拌加 倒绊( 教农包访篮 持瘤 救酒静骨肺 ) 捞蜡绝捞 甘捞悼阑 且荐啊 乐蝶.. 弊烦 弊芭 绢骂 瞒廉? 凉唱 绢妨款 滚弊啊 瞪瘤滴 钢弗窜富具.
	CHARLIST *ch = CheckServerId( EventPC );
	if( !ch ) return;

	//鸥捞赣啊 场抄巴捞 乐栏搁 辆丰矫挪促.
	DeleteScriptTimer();
}

void CQuestInMap::EndScriptTimer( const int iID )
{
	CHARLIST *ch = CheckServerId( iID );
	if( !ch ) return;

	DeleteScriptTimer( iID , ch->Name );
}

bool CQuestInMap::CheckID2Name( const int& iID, const char* szName )
{//酒第尔 捞抚捞 泅 府胶飘尔 老摹窍瘤 臼绰促.
	if( !szName ) return false;
	CHARLIST *ch = CheckServerId( iID );
	if( !ch) return false;//蜡历啊 捞固 唱艾促.

	//蜡历啊 官布促.
	if( strcmp( ch->Name, szName ) != 0  )
		return false;

	return true;
}

void CQuestInMap::RevcScriptTimerPacket( t_script_timer *timer, int iType, int cn )
{
	//秦寸 cn狼 某腐磐啊 鸥捞赣甫 荤侩窍绊 乐阑锭
	CHARLIST *ch = CheckServerId( cn);
	if( !ch) return;

	TIMERITER it;
	it= FindUserInScriptTimer(cn, ch->Name);
	if( it == m_cTimer.end() ) return;

	switch( iType )
	{
	case CMD_SCRIPT_TIMER_START:
		{}break;
	case CMD_SCRIPT_TIMER_SYNC:
		{
			//教农啊 救 嘎栏搁 甘鸥捞赣尔 努扼捞 鸥捞赣 辆丰茄促..
			if( !(*it).ConfirmSyncTimer( timer->dwTime ) )
			{
				(*it).SendSCRIPT_TIEMER( 0, CMD_SCRIPT_TIMER_END_FAL);
				m_cTimer.erase( it );
			}

		}break;
	case CMD_SCRIPT_TIMER_END_SUC:
		{
			(*it).EndTimer( SCRIPT_END_SUC );	

			DeleteScriptCounter( cn, ch->Name );		//鸥捞赣啊 辆丰且锭 墨款磐档 鞍捞 辆丰矫挪促. 
			
			//(*it).SendSCRIPT_TIEMER( 0, CMD_SCRIPT_TIMER_END_SUC);
			//m_cTimer.erase( it );
		}break;
	case CMD_SCRIPT_TIMER_END_FAL:
		{
			(*it).EndTimer( SCRIPT_END_FAL ); //m_cTimer.erase( it );
			DeleteScriptCounter( cn, ch->Name );		//鸥捞赣啊 辆丰且锭 墨款磐档 鞍捞 辆丰矫挪促. 
			
		}break;
	default:
		break;
	}
	
}

list<CScriptTimer>::iterator CQuestInMap::FindUserInScriptTimer( const int& iId, const char* name)
{
	TIMERITER itFind = find_if(m_cTimer.begin(), m_cTimer.end(), bind2nd( IsIDHereInTimer(), iId ) );
	if( itFind != m_cTimer.end() ) 
		if( strcmp( (*itFind).GetName(), name) == 0)
			return itFind;

	return itFind;
}

bool CQuestInMap::StartScriptCounter( const int iServerID, const char* szName, const int iNum, const int iType, const int iMuch, const int iFlag)
{	//辆幅: 0=ncp,1=酒捞袍,2=固沥. 敲矾弊: 0=肛勉,1=矫累,2=肮荐尔 老摹

	_ASSERTE( szName != NULL );
	if( szName == NULL ) return false;

	switch( iFlag) 
	{
		case SCRIPT_COUNT_STOP :
		{	//墨款磐甫 肛苗扼(昏力秦扼)
			return DeleteScriptCounter( iServerID, szName );			
		}break;

		case SCRIPT_COUNT_CHECK :
		{	//墨款磐 蔼阑 犬牢秦扼
			return CheckScriptCounter( iServerID, szName, iNum, iType, iMuch );			
		}break;

		case SCRIPT_COUNT_START:
		{
			if( FindUserInScriptCounter( iServerID, szName, iType ) != NULL ) return false;//!= m_cCounter.end() ) return false;

			CScriptCounter cCounter;
			cCounter.SetConnectionID( iServerID);
			cCounter.SetName( szName );
			cCounter.SetSpeciesNum( iNum );
			cCounter.SetSpeciesType( iType );
			cCounter.SetSpeciesMuch( iMuch );
			cCounter.StartCounter();
			m_cCounter.push_back( cCounter );

		}break;
	}

	return true;
	
}

bool CQuestInMap::DeleteScriptCounter( const int iServerId, const char* szName)
{	
	COUNTERITER itFind = find_if(m_cCounter.begin(), m_cCounter.end(), bind2nd( IsIDHereInCounter(), iServerId ) );

	if( itFind != m_cCounter.end() ) 
		if( strcmp( (*itFind).GetName(), szName) == 0 )
		{
			(*itFind).EndCounter();
			m_cCounter.erase( itFind);
			return true;
		}
	return false;
}

void CQuestInMap::DeleteScriptCounter()
{
	int z=0;	//抄吝俊 bind1st甫 肋 舅霸登搁 绊摹磊.
	COUNTERITER itFind = find_if( m_cCounter.begin(), m_cCounter.end(), bind2nd( IsEndInCounter(), z ) );
	if( itFind != m_cCounter.end() ) 
	{
		(*itFind).EndCounter();
		m_cCounter.erase( itFind);
	}

}

void CQuestInMap::RunScriptCounter( const int cn, const char* szName, int iNum, int iType)//CHARLIST *ch )//, const char* szName)
{

	if( m_cCounter.size() <=0 ) return;

	COUNTERITER	it = FindUserInScriptCounter( cn, szName, iType );	//秦寸 蜡历啊 秦寸鸥涝狼 墨款磐甫 角青窍搁
	if( it == NULL ) return;

	{
		(*it).RunCounter( iNum );
	}
	
	DeleteScriptCounter();	//墨款磐啊 场捞 唱搁 墨款磐甫 瘤匡鳖?( 辑滚鸥捞赣父 磷绰促.) 努扼捞攫飘绰 RunCounter俊 乐促.
}

list<CScriptCounter>::iterator CQuestInMap::FindUserInScriptCounter( const int& iId, const char* name, const int iType)
{
	COUNTERITER itFind = find_if(m_cCounter.begin(), m_cCounter.end(), bind2nd( IsIDHereInCounter(), iId ) );
	if( itFind != m_cCounter.end() ) 
		if( strcmp( (*itFind).GetName(), name) == 0)
			if( (*itFind).GetSpeciesType() == iType )
				return itFind;

	return NULL;
}

bool CQuestInMap::CheckScriptCounter( const int& iServerId, const char* szName, const int iNum, const int iType, const int iCounter )
{
	COUNTERITER itFind = find_if(m_cCounter.begin(), m_cCounter.end(), bind2nd( IsIDHereInCounter(), iServerId ) );
	if( itFind == m_cCounter.end() ) 
	{
		MyLog(0,"CheckScriptCounter Returned 1");
		return false;
	}

	if( ::strcmp( (*itFind).GetName(), szName)) 
	{
		MyLog(0,"CheckScriptCounter Returned 2");
		return false;
	}

	if( (*itFind).GetSpeciesType() != iType )
	{
		MyLog(0,"CheckScriptCounter Returned 3");
		return false;
	}

	if( (*itFind).GetSpeciesNum() != iNum )					
	{
		MyLog(0,"CheckScriptCounter Returned 4 user's %d zs file %d",(*itFind).GetSpeciesNum(),iNum);
		return false;
	}

	if( (*itFind).GetCounter() < iCounter) 				
	{
		MyLog(0,"CheckScriptCounter Returned 5 user's user's %d, %d",(*itFind).GetCounter(),iCounter);
		return false;
	}
	return true;
}

void CQuestInMap::RevcScriptCounterSync( t_script_counter *counter,  int cn )
{// 030110 
	CHARLIST *ch = CheckServerId( cn);
	if( ch == NULL ) return;

	COUNTERITER itFind = find_if(m_cCounter.begin(), m_cCounter.end(), bind2nd( IsIDHereInCounter(), cn ) );	
	if( itFind != m_cCounter.end() ) 
		if( strcmp( (*itFind).GetName(), ch->Name) == 0)
		{
			(*itFind).SetCounter( counter->iCounter );
		}
	
}

void CQuestInMap::RunQuestTimer()
{
	RunScriptTimer();	//胶农赋飘 鸥捞赣
	RunBossTimer();		//boss 鸥捞赣
}

DWORD CQuestInMap::StartBossTimer(const int& iCn, const int& iBoss, const int& iX, const int& iY, const DWORD& dwTimer, const int iMaxEntree, const int nFlag) 
{	//boss鸥捞赣甫 积己茄促. 焊胶档 积己茄促.
	CHARLIST *ch = ::CheckServerId( iCn );
	if( !ch ) return 0;

	//力距牢盔俊 吧赴促. 馆券 0
	//鸥捞赣啊 倒绊乐促  泅犁矫埃 馆券
	//鸥捞赣啊 绝促.     汲沥鸥捞赣 矫埃 馆券窍绊 焊胶积己
	int nKey = iX*1000 + iY; 
	if( m_mBossTimer.find( nKey ) != m_mBossTimer.end() )	//捞 鸥捞赣啊 乐促.
	{
		if( iMaxEntree<= m_mBossTimer[nKey]->GetUserSize() )
		{
			return 0;
		}
		else
		{
			m_mBossTimer[nKey]->AddUser( iCn );
			return (m_mBossTimer[nKey]->m_cBossTimer.GetCurretTimerTime() - GetCurrentBossTimer( nKey));
		}

	}
	else
	{//秦寸 鸥捞赣啊 绝栏福葛 积己茄促. 
		
		CBossTimer *cBTimer;
		cBTimer= new CBossTimer;
		cBTimer->m_cBossTimer.SetTimerTime( dwTimer );		
		cBTimer->m_cBossTimer.SetSynchroneTime( DEFAULT_TIMER_SYNC_TIME ); //5檬俊 茄锅
		cBTimer->m_cBossTimer.StartTimer( true );	//辑滚父 档绰 鸥捞赣
		cBTimer->m_nFlag	=nFlag; 
		
		DeleteBossNpc( nKey );
		if( CBossTimer::TYPE_BOSS_ONLY == nFlag )
		{			
			cBTimer->m_nBossID = GetAliveNPCList(); //积己且荐 乐绰 listid甫 何咯罐绰促.
			cBTimer->m_iBossSprNo = iBoss;
			if( ::NPC_Create( cBTimer->m_nBossID , iBoss, iX, iY,-1, 0, GT_SCRIPT ) )//021230 lsw 付过阑 救静扁 锭巩俊 GT_SCRIPT肺 官层辑 抛胶飘
				
			{	// npc甫 积己茄肺弊甫 巢变促.
				MyLog( 1, "BossTimerStart :StartBossTimer:BossListID=%d,BossSprNo=%d,OpenCN=%s,Timer=%d",
							cBTimer->m_nBossID, iBoss, ch->Name, dwTimer);
			}
			
		}
		else if( CBossTimer::TYPE_BOSS_GROUP == nFlag )
		{
			cBTimer->m_nBossID = iBoss;
			g_pRegenManager->Ready(iBoss);
		}

		cBTimer->AddUser( iCn);
		m_mBossTimer.insert( PAIR_BOSS(nKey, cBTimer) );
	}

	return dwTimer;
}

void CQuestInMap::RunBossTimer()
{
	if( m_mBossTimer.empty() ) return;

BEGIN_LOOP:
	for( map<int, CBossTimer*>::iterator it = m_mBossTimer.begin() ; it != m_mBossTimer.end(); it++)
	{
		(*it).second->m_cBossTimer.RunTimer();
		if( !(*it).second->m_cBossTimer.IsStart() )
		{
			if( DeleteBossTimer( (*it).first ) )
			{
				goto BEGIN_LOOP;
			}
		}
	}
}

void CQuestInMap::DecreaseBossTimerUser(const int nKey, const int nCn)
{
	//return;
	ITOR_BOSS it = m_mBossTimer.find( nKey );
	if( it == m_mBossTimer.end() )
	{
		return;
	}
	m_mBossTimer[nKey]->DeleteUser(nCn);
}

void CQuestInMap::CheckBossTimerBoss( const int nKey)
{
	ITOR_BOSS it = m_mBossTimer.find( nKey );
	if( it == m_mBossTimer.end() )
	{
		return;
	}
	if( 0 >= m_mBossTimer[nKey]->GetUserSize() )
	{
		DeleteBossTimer( nKey );
	}
}

bool CQuestInMap::DeleteBossTimer(int nKey)
{
	ITOR_BOSS it = m_mBossTimer.find( nKey );
	if( it == m_mBossTimer.end() )
	{
		return false;
	}

	DeleteBossNpc(nKey);
	SAFE_DELETE( (*it).second );
	m_mBossTimer.erase( it );	

	return true;
}


void CQuestInMap::DeleteBossNpc(int nKey)
{
	ITOR_BOSS it = m_mBossTimer.find( nKey );
	if( it == m_mBossTimer.end() )
	{
		return;
	}

	(*it).second->RemoveBossNpc();
}

DWORD CQuestInMap::GetCurrentBossTimer(int nKey)
{
	if( m_mBossTimer.find(nKey) == m_mBossTimer.end() )
	{
		return 0;
	}
	return m_mBossTimer[nKey]->m_cBossTimer.GetSpendTime();
}

int CQuestInMap::GetBossTimerEntree(int nKey)
{
	if( m_mBossTimer.find(nKey) == m_mBossTimer.end() )
	{
		return 0;
	}
	return m_mBossTimer[nKey]->GetUserSize();
}

int	CQuestInMap::LoadRequitalTable()
{
	if( m_cRequital != NULL )
		DeleteRequeitalTable();
	m_cRequital =  new CRequital;

	return m_cRequital->LoadRequitalTable();
}
//<! BBD 040329
int	CQuestInMap::LoadRequitalItemTable()
{
	if( m_cRequital == NULL )
		m_cRequital =  new CRequital;

	return m_cRequital->LoadRequitalItemTable();

⌨️ 快捷键说明

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