📄 questfunction.cpp
字号:
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 + -