2024-12-21 10:04:04 +08:00
# include "StdAfx.h"
# include "DnMissionSystem.h"
# include "DNMissionCommonAPI.h"
# include "DNUserData.h"
# include "DnTableDB.h"
# include "DNGameDataManager.h"
# include "EtUIXML.h"
# include "DNUserSendManager.h"
# include "DNDBConnectionManager.h"
# include "DNLogConnection.h"
# include "DnAppellation.h"
# include "DNMissionScheduler.h"
# include "DNUserSession.h"
# include "DNDBConnection.h"
# include "DNMailSender.h"
# if defined( _VILLAGESERVER )
# include "DNMasterConnection.h"
# else
# include "DNMasterConnectionManager.h"
# endif
# include "DNGuildSystem.h"
# if defined(_VILLAGESERVER)
# include "DNGuildWarManager.h"
# endif // #if defined(_VILLAGESERVER)
# if defined( PRE_ADD_STAMPSYSTEM )
# include "DNStampSystem.h"
# endif // #if defined( PRE_ADD_STAMPSYSTEM )
/*
CDNMissionSystem : : MissionInfoStruct CDNMissionSystem : : s_MissionInfoStruct [ ] = {
{ CDNMissionSystem : : AttainPlayerLevel , 2 , api_AttainPlayerLevel } ,
} ;
*/
CDNMissionSystem : : CDNMissionSystem ( CDNUserSession * pUser )
# if defined(PRE_ADD_ACTIVEMISSION)
: m_ActiveMissionState ( ActiveMission : : NOT_ASSIGNED )
, m_pActiveMission ( NULL )
# endif
{
m_pUserSession = pUser ;
}
CDNMissionSystem : : ~ CDNMissionSystem ( )
{
}
bool CDNMissionSystem : : LoadUserData ( )
{
RefreshOnOffMissionList ( ) ;
RefreshDailyMissionList ( ) ;
RefreshWeeklyMissionList ( ) ;
# if defined(PRE_ADD_MONTHLY_MISSION)
RefreshMonthlyMissionList ( ) ;
# endif // #if defined(PRE_ADD_MONTHLY_MISSION)
RefreshWeekendEventMissionList ( ) ;
RefreshGuildWarMissionList ( ) ;
RefreshPCBangMissionList ( ) ;
RefreshGuildCommonMissionList ( ) ;
RefreshWeekendRepeatMissionList ( ) ;
return true ;
}
void CDNMissionSystem : : RefreshOnOffMissionList ( )
{
for ( int i = 0 ; i < EventSystem : : EventTypeEnum_Amount ; i + + ) {
SAFE_DELETE_VEC ( m_nVecMissionGainList [ i ] ) ;
SAFE_DELETE_VEC ( m_nVecMissionAchieveList [ i ] ) ;
}
TMissionGroup * pMission = m_pUserSession - > GetMissionData ( ) ;
// On/Off <20> ̼<EFBFBD> <20> <> <EFBFBD> <EFBFBD> .
bool bModifyGain = false ;
for ( int i = 0 ; i < MISSIONMAX ; i + + ) {
# if defined(PRE_MOD_SET_ACHIEVED_MISSION_GAINFLAG)
TMissionData * pData = g_pDataManager - > GetMissionData ( i ) ;
if ( ! pData ) continue ;
if ( GetBitFlag ( pMission - > MissionAchieve , i ) )
{ //DB <20> <EFBFBD> Achieve <20> <> <20> Ǿ<EFBFBD> <20> ִµ<D6B4> Gain <20> <> <20> ȵȳ༮ Gain ó<> <C3B3> <20> <> <EFBFBD> ش<EFBFBD>
if ( ! GetBitFlag ( pMission - > MissionGain , i ) )
{
SetBitFlag ( pMission - > MissionGain , i , true ) ;
bModifyGain = true ;
}
continue ; //<2F> <EFBFBD> <DEBC> <EFBFBD> <20> ༮<EFBFBD> <E0BCAE> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> .
}
# else
// <20> ̹<EFBFBD> <20> <EFBFBD> <DEBC> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> .
if ( GetBitFlag ( pMission - > MissionAchieve , i ) ) continue ;
TMissionData * pData = g_pDataManager - > GetMissionData ( i ) ;
if ( ! pData ) continue ;
# endif
// <20> <> <EFBFBD> ̺<EFBFBD> <CCBA> <EFBFBD> Active <20> <> <20> ȵ<EFBFBD> <C8B5> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> .
if ( ! pData - > bActivate )
{
// <20> ̹<EFBFBD> Ŭ<> <C5AC> <EFBFBD> ̾<EFBFBD> Ʈ<EFBFBD> <C6AE> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> ̼<EFBFBD> <CCBC> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> Active-False<73> <65> <20> ٲ<EFBFBD> <20> <> <EFBFBD> <EFBFBD>
// Ŭ<> <C5AC> <EFBFBD> ̾<EFBFBD> Ʈ<EFBFBD> <C6AE> <EFBFBD> Ե<EFBFBD> <20> <> <EFBFBD> ̸<EFBFBD> <20> ȵǹǷ<C7B9> Gain<69> <6E> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> Ѵ <EFBFBD> .(DB<44> <42> <20> <> <EFBFBD> ϵ<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> ǵ帮<C7B5> <E5B8AE> <20> ʴ´ <CAB4> .)
if ( GetBitFlag ( pMission - > MissionGain , i ) = = true )
SetBitFlag ( pMission - > MissionGain , i , false ) ;
continue ;
}
// ȹ<> <C8B9> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> DB <20> <> <EFBFBD> <EFBFBD> ȹ<> <C8B9> <20> ÷<EFBFBD> <C3B7> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> Ѵ <EFBFBD> . <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> .
if ( pData - > GainCondition . cEvent = = 0 ) {
if ( GetBitFlag ( pMission - > MissionGain , i ) = = false ) {
bModifyGain = true ;
SetBitFlag ( pMission - > MissionGain , i , true ) ;
}
}
// <20> <EFBFBD> <DEBC> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <20> <> <EFBFBD> <EFBFBD> . <20> <> <EFBFBD> ٸ<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> ȵȰ<C8B5> <C8B0> <EFBFBD> <EFBFBD> Ƿ<EFBFBD> <20> 侲.
if ( pData - > AchieveCondition . cEvent = = 0 ) continue ;
if ( GetBitFlag ( pMission - > MissionGain , i ) = = false )
m_nVecMissionGainList [ pData - > GainCondition . cEvent ] . push_back ( i ) ;
else m_nVecMissionAchieveList [ pData - > AchieveCondition . cEvent ] . push_back ( i ) ;
}
m_pUserSession - > GetDBConnection ( ) - > QueryMissionGain ( m_pUserSession ) ;
}
void CDNMissionSystem : : RefreshDailyMissionList ( )
{
ScopeLock < CSyncLock > Lock ( m_Lock ) ;
for ( int i = 0 ; i < EventSystem : : EventTypeEnum_Amount ; i + + ) {
SAFE_DELETE_VEC ( m_nVecDailyMissionList [ Daily ] [ i ] ) ;
}
TMissionGroup * pMission = m_pUserSession - > GetMissionData ( ) ;
for ( int i = 0 ; i < DAILYMISSIONMAX ; i + + ) {
if ( pMission - > DailyMission [ i ] . nMissionID < 1 ) continue ;
if ( pMission - > DailyMission [ i ] . bAchieve ) continue ;
TDailyMissionData * pData = g_pDataManager - > GetDailyMissionData ( pMission - > DailyMission [ i ] . nMissionID ) ;
if ( ! pData ) continue ;
if ( pData - > AchieveCondition . cEvent > = EventSystem : : EventTypeEnum_Amount )
continue ;
m_nVecDailyMissionList [ Daily ] [ pData - > AchieveCondition . cEvent ] . push_back ( i ) ;
}
}
void CDNMissionSystem : : RefreshWeeklyMissionList ( )
{
ScopeLock < CSyncLock > Lock ( m_Lock ) ;
for ( int i = 0 ; i < EventSystem : : EventTypeEnum_Amount ; i + + ) {
SAFE_DELETE_VEC ( m_nVecDailyMissionList [ Weekly ] [ i ] ) ;
}
TMissionGroup * pMission = m_pUserSession - > GetMissionData ( ) ;
for ( int i = 0 ; i < WEEKLYMISSIONMAX ; i + + ) {
if ( pMission - > WeeklyMission [ i ] . nMissionID < 1 ) continue ;
if ( pMission - > WeeklyMission [ i ] . bAchieve ) continue ;
TDailyMissionData * pData = g_pDataManager - > GetDailyMissionData ( pMission - > WeeklyMission [ i ] . nMissionID ) ;
if ( ! pData ) continue ;
if ( pData - > AchieveCondition . cEvent > = EventSystem : : EventTypeEnum_Amount )
continue ;
m_nVecDailyMissionList [ Weekly ] [ pData - > AchieveCondition . cEvent ] . push_back ( i ) ;
}
}
# if defined( PRE_ADD_MONTHLY_MISSION )
void CDNMissionSystem : : RefreshMonthlyMissionList ( )
{
ScopeLock < CSyncLock > Lock ( m_Lock ) ;
for ( int i = 0 ; i < EventSystem : : EventTypeEnum_Amount ; i + + ) {
SAFE_DELETE_VEC ( m_nVecDailyMissionList [ Monthly ] [ i ] ) ;
}
TMissionGroup * pMission = m_pUserSession - > GetMissionData ( ) ;
for ( int i = 0 ; i < MONTHLYMISSIONMAX ; i + + ) {
if ( pMission - > MonthlyMission [ i ] . nMissionID < 1 ) continue ;
if ( pMission - > MonthlyMission [ i ] . bAchieve ) continue ;
TDailyMissionData * pData = g_pDataManager - > GetDailyMissionData ( pMission - > MonthlyMission [ i ] . nMissionID ) ;
if ( ! pData ) continue ;
if ( pData - > AchieveCondition . cEvent > = EventSystem : : EventTypeEnum_Amount )
continue ;
m_nVecDailyMissionList [ Monthly ] [ pData - > AchieveCondition . cEvent ] . push_back ( i ) ;
}
}
# endif // #if defined( PRE_ADD_MONTHLY_MISSION )
void CDNMissionSystem : : RefreshWeekendEventMissionList ( )
{
ScopeLock < CSyncLock > Lock ( m_Lock ) ;
for ( int i = 0 ; i < EventSystem : : EventTypeEnum_Amount ; i + + ) {
SAFE_DELETE_VEC ( m_nVecDailyMissionList [ WeekendEvent ] [ i ] ) ;
}
TMissionGroup * pMission = m_pUserSession - > GetMissionData ( ) ;
for ( int i = 0 ; i < WEEKENDEVENTMISSIONMAX ; i + + ) {
if ( pMission - > WeekendEventMission [ i ] . nMissionID < 1 ) continue ;
if ( pMission - > WeekendEventMission [ i ] . bAchieve ) continue ;
TDailyMissionData * pData = g_pDataManager - > GetDailyMissionData ( pMission - > WeekendEventMission [ i ] . nMissionID ) ;
if ( ! pData ) continue ;
if ( pData - > AchieveCondition . cEvent > = EventSystem : : EventTypeEnum_Amount )
continue ;
m_nVecDailyMissionList [ WeekendEvent ] [ pData - > AchieveCondition . cEvent ] . push_back ( i ) ;
}
}
// <20> <> <EFBFBD> <EFBFBD> <EFBFBD> ̼<EFBFBD> <20> <> <EFBFBD> <EFBFBD>
void CDNMissionSystem : : RefreshGuildWarMissionList ( )
{
// <20> ʱ<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> Ͱ<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD>
bool bCreateMission = true ;
TMissionGroup * pMission = m_pUserSession - > GetMissionData ( ) ;
for ( int i = 0 ; i < GUILDWARMISSIONMAX ; i + + )
{
if ( pMission - > GuildWarMission [ i ] . nMissionID > 0 )
{
bCreateMission = false ;
break ;
}
}
if ( bCreateMission )
{
if ( InitGuildWarMissionList ( false ) )
return ;
}
// <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> ƴҰ<C6B4> <D2B0> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> ó<EFBFBD> <C3B3> <EFBFBD> <EFBFBD> <20> ̸<EFBFBD> <CCB8> Ѵ <EFBFBD> .
if ( ! bIsGuildWarMission ( ) )
{
if ( InitGuildWarMissionList ( true ) )
return ;
}
ScopeLock < CSyncLock > Lock ( m_Lock ) ;
for ( int i = 0 ; i < EventSystem : : EventTypeEnum_Amount ; i + + ) {
SAFE_DELETE_VEC ( m_nVecDailyMissionList [ GuildWar ] [ i ] ) ;
}
for ( int i = 0 ; i < GUILDWARMISSIONMAX ; i + + )
{
if ( pMission - > GuildWarMission [ i ] . nMissionID < 1 ) continue ;
TDailyMissionData * pData = g_pDataManager - > GetDailyMissionData ( pMission - > GuildWarMission [ i ] . nMissionID ) ;
if ( ! pData ) continue ;
if ( pData - > AchieveCondition . cEvent > = EventSystem : : EventTypeEnum_Amount )
continue ;
m_nVecDailyMissionList [ GuildWar ] [ pData - > AchieveCondition . cEvent ] . push_back ( i ) ;
}
}
void CDNMissionSystem : : RefreshPCBangMissionList ( )
{
ScopeLock < CSyncLock > Lock ( m_Lock ) ;
for ( int i = 0 ; i < EventSystem : : EventTypeEnum_Amount ; i + + ) {
SAFE_DELETE_VEC ( m_nVecDailyMissionList [ PCBang ] [ i ] ) ;
}
TMissionGroup * pMission = m_pUserSession - > GetMissionData ( ) ;
for ( int i = 0 ; i < PCBangMissionMax ; i + + ) {
if ( pMission - > PCBangMission [ i ] . nMissionID < 1 ) continue ;
if ( pMission - > PCBangMission [ i ] . bAchieve ) continue ;
TDailyMissionData * pData = g_pDataManager - > GetDailyMissionData ( pMission - > PCBangMission [ i ] . nMissionID ) ;
if ( ! pData ) continue ;
if ( pData - > AchieveCondition . cEvent > = EventSystem : : EventTypeEnum_Amount ) continue ;
m_nVecDailyMissionList [ PCBang ] [ pData - > AchieveCondition . cEvent ] . push_back ( i ) ;
}
}
void CDNMissionSystem : : RefreshGuildCommonMissionList ( )
{
//<2F> <> <EFBFBD> <EFBFBD> <20> ̼<EFBFBD> <CCBC> <EFBFBD> Achieve <20> ص<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> ʰ<EFBFBD> <20> ݺ<EFBFBD> Ŭ<> <C5AC> <EFBFBD> <20> <> <EFBFBD> <EFBFBD>
ScopeLock < CSyncLock > Lock ( m_Lock ) ;
for ( int i = 0 ; i < EventSystem : : EventTypeEnum_Amount ; i + + ) {
SAFE_DELETE_VEC ( m_nVecDailyMissionList [ GuildCommon ] [ i ] ) ;
}
bool bAddedNewGuildMission = false ;
TMissionGroup * pMission = m_pUserSession - > GetMissionData ( ) ;
for ( int i = 0 ; i < GUILDCOMMONMISSIONMAX ; i + + ) {
TDailyMissionData * pData = g_pDataManager - > GetGuildCommonMissionData ( i ) ;
if ( ! pData ) continue ;
if ( pData - > AchieveCondition . cEvent > = EventSystem : : EventTypeEnum_Amount )
continue ;
if ( pMission - > GuildCommonMission [ i ] . nMissionID < 1 )
{
pMission - > GuildCommonMission [ i ] . nMissionID = pData - > nItemID ;
bAddedNewGuildMission = true ;
}
m_nVecDailyMissionList [ GuildCommon ] [ pData - > AchieveCondition . cEvent ] . push_back ( i ) ;
}
if ( bAddedNewGuildMission )
m_pUserSession - > GetDBConnection ( ) - > QuerySetGuildCommonMission ( m_pUserSession ) ;
}
void CDNMissionSystem : : RefreshWeekendRepeatMissionList ( )
{
ScopeLock < CSyncLock > Lock ( m_Lock ) ;
for ( int i = 0 ; i < EventSystem : : EventTypeEnum_Amount ; i + + ) {
SAFE_DELETE_VEC ( m_nVecDailyMissionList [ WeekendRepeat ] [ i ] ) ;
}
TMissionGroup * pMission = m_pUserSession - > GetMissionData ( ) ;
for ( int i = 0 ; i < WEEKENDREPEATMISSIONMAX ; i + + )
{
if ( pMission - > WeekendRepeatMission [ i ] . nMissionID < 1 ) continue ;
TDailyMissionData * pData = g_pDataManager - > GetDailyMissionData ( pMission - > WeekendRepeatMission [ i ] . nMissionID ) ;
if ( ! pData ) continue ;
if ( pData - > AchieveCondition . cEvent > = EventSystem : : EventTypeEnum_Amount )
continue ;
m_nVecDailyMissionList [ WeekendRepeat ] [ pData - > AchieveCondition . cEvent ] . push_back ( i ) ;
}
}
void CDNMissionSystem : : OnGainMission ( int nArrayIndex )
{
m_pUserSession - > SendMissionGain ( nArrayIndex ) ;
}
void CDNMissionSystem : : OnAchieveMission ( int nArrayIndex )
{
m_pUserSession - > SendMissionAchieve ( nArrayIndex ) ;
m_pUserSession - > GetDBConnection ( ) - > QueryMissionAchieve ( m_pUserSession , nArrayIndex ) ;
}
void CDNMissionSystem : : OnCounterDailyMission ( DailyMissionTypeEnum Type , int nArrayIndex , int nCounter )
{
m_pUserSession - > SendDailyMissionCount ( Type , nArrayIndex , nCounter ) ;
}
void CDNMissionSystem : : OnAchieveDailyMission ( DailyMissionTypeEnum Type , int nArrayIndex , bool bSecret /*=false*/ )
{
m_pUserSession - > SendDailyMissionAchieve ( Type , nArrayIndex , bSecret ) ;
# if defined( PRE_ADD_STAMPSYSTEM )
m_pUserSession - > GetStampSystem ( ) - > OnCompleteDailyMission ( nArrayIndex ) ;
# endif // #if defined( PRE_ADD_STAMPSYSTEM )
}
void CDNMissionSystem : : OnEventPopUp ( int nArrayIndex )
{
# if defined(_CH) && !defined(PRE_FIX_26377)
return ; // <20> ϴ<EFBFBD> <20> ߱<EFBFBD> <DFB1> <EFBFBD> <20> ̺<EFBFBD> Ʈ <20> ˾<EFBFBD> <CBBE> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> մϴ<D5B4> .
# endif
// <20> ̺<EFBFBD> Ʈ<EFBFBD> ˾<EFBFBD> <CBBE> <EFBFBD> <EFBFBD> <EFBFBD> (AchieveList<73> <74> <20> <> <EFBFBD> <EFBFBD> )<29> <> OnAchieveMission <20> Լ<EFBFBD> <D4BC> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> DB<44> <42> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> Ѵ <EFBFBD>
m_pUserSession - > SendMissionEventPopUp ( nArrayIndex ) ;
}
void CDNMissionSystem : : OnHelpAlarm ( int nArrayIndex )
{
m_pUserSession - > SendMissionHelpAlarm ( nArrayIndex ) ;
}
void CDNMissionSystem : : RequestMissionReward ( int nArrayIndex )
{
TMissionData * pData = g_pDataManager - > GetMissionData ( nArrayIndex ) ;
if ( ! pData ) return ;
if ( pData - > nMailID > 0 ) {
char cPayMethod = 0 ;
switch ( pData - > nType )
{
case MissionType_TimeEvent :
cPayMethod = DBDNWorldDef : : PayMethodCode : : Event ;
break ;
default :
cPayMethod = DBDNWorldDef : : PayMethodCode : : Mission ;
break ;
}
CDNMailSender : : Process ( m_pUserSession , pData - > nMailID , cPayMethod , nArrayIndex ) ;
}
else
{
# ifdef PRE_ADD_JOINGUILD_SUPPORT
//<2F> <> <EFBFBD> <EFBFBD> .....<2E> ̷<EFBFBD> <20> <> <EFBFBD> <EFBFBD> ... <20> ϵ<EFBFBD> <CFB5> ڵ<EFBFBD> ...
if ( nArrayIndex = = 43 )
{
int nMailID = pData - > nMailID ;
char cPayMethod = 0 ;
switch ( pData - > nType )
{
case MissionType_TimeEvent :
cPayMethod = DBDNWorldDef : : PayMethodCode : : Event ;
break ;
default :
cPayMethod = DBDNWorldDef : : PayMethodCode : : Mission ;
break ;
}
if ( m_pUserSession )
{
int nRewardMailID = g_pDataManager - > GetRewardFisrtGuildJoinMailID ( m_pUserSession - > GetLevel ( ) ) ;
if ( nRewardMailID > 0 )
CDNMailSender : : Process ( m_pUserSession , nRewardMailID , cPayMethod , nArrayIndex ) ;
else
_DANGER_POINT ( ) ;
}
}
# endif //#ifdef PRE_ADD_JOINGUILD_SUPPORT
}
if ( pData - > nRewardAppellation ! = - 1 ) {
m_pUserSession - > GetAppellation ( ) - > RequestAddAppellation ( pData - > nRewardAppellation ) ;
}
if ( pData - > bIsAchieveNotice ) {
# if defined(_VILLAGESERVER)
g_pMasterConnection - > SendWorldSystemMsg ( m_pUserSession - > GetAccountDBID ( ) , WORLDCHATTYPE_MISSION , nArrayIndex , 0 ) ;
# else
g_pMasterConnectionManager - > SendWorldSystemMsg ( m_pUserSession - > GetWorldSetID ( ) , m_pUserSession - > GetAccountDBID ( ) , WORLDCHATTYPE_MISSION , nArrayIndex , 0 ) ;
# endif
}
}
void CDNMissionSystem : : RequestDailyMissionReward ( int nItemID )
{
TDailyMissionData * pData = g_pDataManager - > GetDailyMissionData ( nItemID ) ;
if ( ! pData ) return ;
TMissionGroup * pMission = m_pUserSession - > GetMissionData ( ) ;
if ( pData - > nType ! = DAILYMISSION_PCBANG )
pMission - > nMissionScore + = pData - > nRewardPoint ;
if ( pData - > nMailID > 0 ) {
CDNMailSender : : Process ( m_pUserSession , pData - > nMailID , DBDNWorldDef : : PayMethodCode : : Mission , nItemID ) ;
}
if ( pData - > nRewardAppellation ! = - 1 ) {
m_pUserSession - > GetAppellation ( ) - > RequestAddAppellation ( pData - > nRewardAppellation ) ;
}
}
void CDNMissionSystem : : UpdateLastAchieveList ( int nArrayIndex )
{
TMissionGroup * pMission = m_pUserSession - > GetMissionData ( ) ;
for ( int i = LASTMISSIONACHIEVEMAX - 1 ; i > 0 ; i - - ) {
pMission - > wLastMissionAchieve [ i ] = pMission - > wLastMissionAchieve [ i - 1 ] ;
}
pMission - > wLastMissionAchieve [ 0 ] = nArrayIndex ;
}
void CDNMissionSystem : : RequestDailyMissionList ( DailyMissionTypeEnum Type , int nRandomSeed , bool bSend )
{
TMissionGroup * pMission = m_pUserSession - > GetMissionData ( ) ;
switch ( Type ) {
case Daily :
{
CDNMissionScheduler : : GetInstance ( ) . RefreshDailyMissionList ( nRandomSeed , m_pUserSession - > GetMissionData ( ) , m_pUserSession - > GetLevel ( ) , m_pUserSession - > GetClassID ( ) ) ;
RefreshDailyMissionList ( ) ;
if ( bSend ) m_pUserSession - > SendDailyMissionList ( Daily , pMission - > DailyMission ) ;
m_pUserSession - > GetDBConnection ( ) - > QuerySetDailyMission ( m_pUserSession ) ;
// <20> <> <EFBFBD> <20> Ǿ<EFBFBD> <C7BE> <EFBFBD> <20> ̼ǵ<CCBC> <20> <> <EFBFBD> <EFBFBD> ;
m_pUserSession - > RefreshPCBangMissionList ( ) ; // <20> <> <EFBFBD> ⼭ missionid <20> <> <EFBFBD> <EFBFBD>
RefreshPCBangMissionList ( ) ;
m_pUserSession - > GetDBConnection ( ) - > QuerySetPCBangMission ( m_pUserSession ) ;
}
break ;
case Weekly :
{
CDNMissionScheduler : : GetInstance ( ) . RefreshWeeklyMissionList ( nRandomSeed , m_pUserSession - > GetMissionData ( ) , m_pUserSession - > GetLevel ( ) , m_pUserSession - > GetClassID ( ) ) ;
RefreshWeeklyMissionList ( ) ;
if ( bSend ) m_pUserSession - > SendDailyMissionList ( Weekly , pMission - > WeeklyMission ) ;
m_pUserSession - > GetDBConnection ( ) - > QuerySetWeeklyMission ( m_pUserSession ) ;
}
break ;
# if defined(PRE_ADD_MONTHLY_MISSION)
case Monthly :
{
CDNMissionScheduler : : GetInstance ( ) . RefreshMonthlyMissionList ( nRandomSeed , m_pUserSession - > GetMissionData ( ) , m_pUserSession - > GetLevel ( ) , m_pUserSession - > GetClassID ( ) ) ;
RefreshMonthlyMissionList ( ) ;
if ( bSend ) m_pUserSession - > SendDailyMissionList ( Monthly , pMission - > MonthlyMission ) ;
m_pUserSession - > GetDBConnection ( ) - > QuerySetMonthlyMission ( m_pUserSession ) ;
}
break ;
# endif // #if defined(PRE_ADD_MONTHLY_MISSION)
case WeekendEvent :
{
CDNMissionScheduler : : GetInstance ( ) . RefreshWeekendEventMissionList ( m_pUserSession - > GetMissionData ( ) ) ;
RefreshWeekendEventMissionList ( ) ;
if ( bSend ) m_pUserSession - > SendDailyMissionList ( WeekendEvent , pMission - > WeekendEventMission ) ;
m_pUserSession - > GetDBConnection ( ) - > QuerySetWeekendEventMission ( m_pUserSession ) ;
}
break ;
case WeekendRepeat :
{
CDNMissionScheduler : : GetInstance ( ) . RefreshWeekendRepeatMissionList ( m_pUserSession - > GetMissionData ( ) ) ;
RefreshWeekendRepeatMissionList ( ) ;
if ( bSend ) m_pUserSession - > SendDailyMissionList ( WeekendRepeat , pMission - > WeekendRepeatMission ) ;
m_pUserSession - > GetDBConnection ( ) - > QuerySetWeekendRepeatMission ( m_pUserSession ) ;
}
break ;
}
}
void CDNMissionSystem : : RequestDailyMissionAlarm ( DailyMissionTypeEnum Type )
{
m_pUserSession - > SendDailyMissionAlarm ( Type ) ;
}
void CDNMissionSystem : : RequestForceGainMission ( int nItemID )
{
DNTableFileFormat * pSox = GetDNTable ( CDnTableDB : : TMISSION ) ;
int nTargetArrayIndex = pSox - > GetArrayIndex ( nItemID ) ;
TMissionData * pData = g_pDataManager - > GetMissionData ( nTargetArrayIndex ) ;
if ( ! pData ) return ;
TMissionGroup * pMission = m_pUserSession - > GetMissionData ( ) ;
for ( DWORD i = 0 ; i < m_nVecMissionGainList [ pData - > GainCondition . cEvent ] . size ( ) ; i + + ) {
int nArrayIndex = m_nVecMissionGainList [ pData - > GainCondition . cEvent ] [ i ] ;
if ( nArrayIndex = = nTargetArrayIndex ) {
SetBitFlag ( pMission - > MissionGain , nArrayIndex , true ) ;
OnGainMission ( nArrayIndex ) ;
// ȹ<> <C8B9> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> ̸<EFBFBD> <20> <EFBFBD> <DEBC> <EFBFBD> <EFBFBD> <EFBFBD> Ʈ<EFBFBD> <C6AE> <20> ߰<EFBFBD> <DFB0> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> Ѵ <EFBFBD> .
m_nVecMissionAchieveList [ pData - > AchieveCondition . cEvent ] . push_back ( nArrayIndex ) ;
///////////////////////////////////////////////
m_nVecMissionGainList [ pData - > GainCondition . cEvent ] . erase ( m_nVecMissionGainList [ pData - > GainCondition . cEvent ] . begin ( ) + i ) ;
i - - ;
}
}
}
void CDNMissionSystem : : RequestForceAchieveMission ( int nItemID )
{
DNTableFileFormat * pSox = GetDNTable ( CDnTableDB : : TMISSION ) ;
int nTargetArrayIndex = pSox - > GetArrayIndex ( nItemID ) ;
TMissionData * pData = g_pDataManager - > GetMissionData ( nTargetArrayIndex ) ;
if ( ! pData ) return ;
std : : vector < int > nVecAchieveList ;
TMissionGroup * pMission = m_pUserSession - > GetMissionData ( ) ;
for ( DWORD i = 0 ; i < m_nVecMissionAchieveList [ pData - > AchieveCondition . cEvent ] . size ( ) ; i + + ) {
int nArrayIndex = m_nVecMissionAchieveList [ pData - > AchieveCondition . cEvent ] [ i ] ;
if ( nArrayIndex = = nTargetArrayIndex ) {
SetBitFlag ( pMission - > MissionAchieve , nArrayIndex , true ) ;
RequestMissionReward ( nArrayIndex ) ;
OnAchieveMission ( nArrayIndex ) ;
if ( pData - > nType = = MissionType_Normal | | pData - > nType = = MissionType_MetaShow ) UpdateLastAchieveList ( nArrayIndex ) ;
nVecAchieveList . push_back ( nArrayIndex + 1 ) ;
m_nVecMissionAchieveList [ pData - > AchieveCondition . cEvent ] . erase ( m_nVecMissionAchieveList [ pData - > AchieveCondition . cEvent ] . begin ( ) + i ) ;
i - - ;
}
}
for ( DWORD i = 0 ; i < nVecAchieveList . size ( ) ; i + + ) {
m_pUserSession - > GetEventSystem ( ) - > OnEvent ( EventSystem : : OnMissionClear , 1 , EventSystem : : MissionID , nVecAchieveList [ i ] ) ;
}
}
void CDNMissionSystem : : RequestForceGainDailyMission ( int nCount , . . . )
{
va_list list ;
va_start ( list , nCount ) ;
std : : vector < int > nVecList ;
for ( int i = 0 ; i < nCount ; i + + ) {
nVecList . push_back ( va_arg ( list , int ) ) ;
if ( nVecList . size ( ) = = DAILYMISSIONMAX ) break ;
}
va_end ( list ) ;
TMissionGroup * pMission = m_pUserSession - > GetMissionData ( ) ;
int nOffset = 0 ;
memset ( pMission - > DailyMission , 0 , sizeof ( pMission - > DailyMission ) ) ;
for ( DWORD i = 0 ; i < nVecList . size ( ) ; i + + ) {
TDailyMissionData * pData = g_pDataManager - > GetDailyMissionData ( nVecList [ i ] ) ;
if ( ! pData ) continue ;
pMission - > DailyMission [ nOffset ] . nMissionID = nVecList [ i ] ;
nOffset + + ;
}
RefreshDailyMissionList ( ) ;
m_pUserSession - > SendDailyMissionList ( Daily , pMission - > DailyMission ) ;
}
void CDNMissionSystem : : RequestForceAchieveDailyMission ( int nItemID )
{
TDailyMissionData * pData = g_pDataManager - > GetDailyMissionData ( nItemID ) ;
if ( ! pData ) return ;
TMissionGroup * pMission = m_pUserSession - > GetMissionData ( ) ;
TDailyMission * pDailyMission ;
for ( DWORD i = 0 ; i < m_nVecDailyMissionList [ Daily ] [ pData - > AchieveCondition . cEvent ] . size ( ) ; i + + ) {
int nArrayIndex = m_nVecDailyMissionList [ Daily ] [ pData - > AchieveCondition . cEvent ] [ i ] ;
pDailyMission = & pMission - > DailyMission [ nArrayIndex ] ;
if ( pDailyMission - > nMissionID = = nItemID ) {
pDailyMission - > bAchieve = true ;
pDailyMission - > nCounter = pData - > nCounterParam ;
RequestDailyMissionReward ( pDailyMission - > nMissionID ) ;
OnAchieveDailyMission ( Daily , nArrayIndex ) ;
m_pUserSession - > GetDBConnection ( ) - > QueryModDailyWeeklyMission ( m_pUserSession , DAILYMISSION_DAY , nArrayIndex , pDailyMission ) ; // db<64> <62> <EFBFBD> <EFBFBD>
m_nVecDailyMissionList [ Daily ] [ pData - > AchieveCondition . cEvent ] . erase ( m_nVecDailyMissionList [ Daily ] [ pData - > AchieveCondition . cEvent ] . begin ( ) + i ) ;
break ;
}
}
}
void CDNMissionSystem : : RequestForceGainWeeklyMission ( int nCount , . . . )
{
va_list list ;
va_start ( list , nCount ) ;
std : : vector < int > nVecList ;
for ( int i = 0 ; i < nCount ; i + + ) {
nVecList . push_back ( va_arg ( list , int ) ) ;
if ( nVecList . size ( ) = = WEEKLYMISSIONMAX ) break ;
}
va_end ( list ) ;
TMissionGroup * pMission = m_pUserSession - > GetMissionData ( ) ;
int nOffset = 0 ;
memset ( pMission - > WeeklyMission , 0 , sizeof ( pMission - > WeeklyMission ) ) ;
for ( DWORD i = 0 ; i < nVecList . size ( ) ; i + + ) {
TDailyMissionData * pData = g_pDataManager - > GetDailyMissionData ( nVecList [ i ] ) ;
if ( ! pData ) continue ;
pMission - > WeeklyMission [ nOffset ] . nMissionID = nVecList [ i ] ;
nOffset + + ;
}
RefreshWeeklyMissionList ( ) ;
m_pUserSession - > SendDailyMissionList ( Weekly , pMission - > WeeklyMission ) ;
}
void CDNMissionSystem : : RequestForceAchieveWeeklyMission ( int nItemID )
{
TDailyMissionData * pData = g_pDataManager - > GetDailyMissionData ( nItemID ) ;
if ( ! pData ) return ;
TMissionGroup * pMission = m_pUserSession - > GetMissionData ( ) ;
TDailyMission * pWeeklyMission ;
for ( DWORD i = 0 ; i < m_nVecDailyMissionList [ Weekly ] [ pData - > AchieveCondition . cEvent ] . size ( ) ; i + + ) {
int nArrayIndex = m_nVecDailyMissionList [ Weekly ] [ pData - > AchieveCondition . cEvent ] [ i ] ;
pWeeklyMission = & pMission - > WeeklyMission [ nArrayIndex ] ;
if ( pWeeklyMission - > nMissionID = = nItemID ) {
pWeeklyMission - > bAchieve = true ;
pWeeklyMission - > nCounter = pData - > nCounterParam ;
RequestDailyMissionReward ( pWeeklyMission - > nMissionID ) ;
OnAchieveDailyMission ( Weekly , nArrayIndex ) ;
m_pUserSession - > GetDBConnection ( ) - > QueryModDailyWeeklyMission ( m_pUserSession , DAILYMISSION_WEEK , nArrayIndex , pWeeklyMission ) ; // db<64> <62> <EFBFBD> <EFBFBD>
m_nVecDailyMissionList [ Weekly ] [ pData - > AchieveCondition . cEvent ] . erase ( m_nVecDailyMissionList [ Weekly ] [ pData - > AchieveCondition . cEvent ] . begin ( ) + i ) ;
break ;
}
}
}
# if defined(PRE_ADD_MONTHLY_MISSION)
void CDNMissionSystem : : RequestForceGainMonthlyMission ( int nCount , . . . )
{
va_list list ;
va_start ( list , nCount ) ;
std : : vector < int > nVecList ;
for ( int i = 0 ; i < nCount ; i + + ) {
nVecList . push_back ( va_arg ( list , int ) ) ;
if ( nVecList . size ( ) = = MONTHLYMISSIONMAX ) break ;
}
va_end ( list ) ;
TMissionGroup * pMission = m_pUserSession - > GetMissionData ( ) ;
int nOffset = 0 ;
memset ( pMission - > MonthlyMission , 0 , sizeof ( pMission - > MonthlyMission ) ) ;
for ( DWORD i = 0 ; i < nVecList . size ( ) ; i + + ) {
TDailyMissionData * pData = g_pDataManager - > GetDailyMissionData ( nVecList [ i ] ) ;
if ( ! pData ) continue ;
pMission - > MonthlyMission [ nOffset ] . nMissionID = nVecList [ i ] ;
nOffset + + ;
}
RefreshMonthlyMissionList ( ) ;
m_pUserSession - > SendDailyMissionList ( Monthly , pMission - > MonthlyMission ) ;
}
void CDNMissionSystem : : RequestForceAchieveMonthlyMission ( int nItemID )
{
TDailyMissionData * pData = g_pDataManager - > GetDailyMissionData ( nItemID ) ;
if ( ! pData ) return ;
TMissionGroup * pMission = m_pUserSession - > GetMissionData ( ) ;
TDailyMission * pMonthlyMission ;
for ( DWORD i = 0 ; i < m_nVecDailyMissionList [ Monthly ] [ pData - > AchieveCondition . cEvent ] . size ( ) ; i + + ) {
int nArrayIndex = m_nVecDailyMissionList [ Monthly ] [ pData - > AchieveCondition . cEvent ] [ i ] ;
pMonthlyMission = & pMission - > MonthlyMission [ nArrayIndex ] ;
if ( pMonthlyMission - > nMissionID = = nItemID ) {
pMonthlyMission - > bAchieve = true ;
pMonthlyMission - > nCounter = pData - > nCounterParam ;
RequestDailyMissionReward ( pMonthlyMission - > nMissionID ) ;
OnAchieveDailyMission ( Monthly , nArrayIndex ) ;
m_pUserSession - > GetDBConnection ( ) - > QueryModDailyWeeklyMission ( m_pUserSession , DAILYMISSION_MONTH , nArrayIndex , pMonthlyMission ) ; // db<64> <62> <EFBFBD> <EFBFBD>
m_nVecDailyMissionList [ Monthly ] [ pData - > AchieveCondition . cEvent ] . erase ( m_nVecDailyMissionList [ Monthly ] [ pData - > AchieveCondition . cEvent ] . begin ( ) + i ) ;
break ;
}
}
}
# endif // #if defined(PRE_ADD_MONTHLY_MISSION)
void CDNMissionSystem : : RequestForceAchieveGuildWarMission ( int nItemID )
{
TDailyMissionData * pData = g_pDataManager - > GetDailyMissionData ( nItemID ) ;
if ( ! pData ) return ;
TMissionGroup * pMission = m_pUserSession - > GetMissionData ( ) ;
if ( ! pMission ) return ;
int nArrayIndex = 0 ;
char Event = pData - > AchieveCondition . cEvent ;
TDailyMission * pDailyMission ;
for ( DWORD i = 0 ; i < m_nVecDailyMissionList [ GuildWar ] [ Event ] . size ( ) ; i + + )
{
nArrayIndex = m_nVecDailyMissionList [ GuildWar ] [ Event ] [ i ] ;
pDailyMission = & pMission - > GuildWarMission [ nArrayIndex ] ;
if ( pDailyMission - > nMissionID = = nItemID )
{
bool bAchieve = true ;
bool bSecret = false ;
pDailyMission - > bAchieve = true ;
pDailyMission - > nCounter = 0 ;
// <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> Ʈ<EFBFBD> <C6AE> <EFBFBD> <EFBFBD>
int nRewardPoint = g_pDataManager - > GetDailyMissionRewarePoint ( pDailyMission - > nMissionID ) ;
# if defined(_VILLAGESERVER)
if ( g_pGuildWarManager - > IsSecretMission ( m_pUserSession - > GetGuildSelfView ( ) . cTeamColorCode , pDailyMission - > nMissionID ) )
# elif defined(_GAMESERVER)
if ( g_pMasterConnectionManager - > IsSecretMission ( m_pUserSession - > GetWorldSetID ( ) , m_pUserSession - > GetGuildSelfView ( ) . cTeamColorCode , pDailyMission - > nMissionID ) )
# endif
{
nRewardPoint * = 2 ; // <20> <> ũ<EFBFBD> <C5A9> <EFBFBD> ߵ <EFBFBD> <DFB5> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ϰ<EFBFBD> <CFB0> <EFBFBD> 2<EFBFBD> <32> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> Ʈó<C6AE> <C3B3>
bSecret = true ;
}
if ( Event = = EventSystem : : OnDungeonClear & & api_Mission_MapSubType ( m_pUserSession ) = = GlobalEnum : : MAPSUB_NONE )
{
int nLevelLimit = static_cast < int > ( CGlobalWeightTable : : GetInstance ( ) . GetValue ( CGlobalWeightTable : : GuildWarMission_LevelLimit ) ) ;
if ( m_pUserSession - > GetLevel ( ) < = nLevelLimit )
{
nRewardPoint = ( int ) ( nRewardPoint * static_cast < float > ( CGlobalWeightTable : : GetInstance ( ) . GetValue ( CGlobalWeightTable : : GuildWarMission_Rate ) ) ) ;
if ( nRewardPoint < = 0 )
nRewardPoint = 1 ;
}
}
m_pUserSession - > GetDBConnection ( ) - > QueryAddGuildWarPoint ( m_pUserSession , pDailyMission - > nMissionID , nRewardPoint ) ;
pMission - > nMissionScore + + ; // <20> <> <EFBFBD> <EFBFBD> <EFBFBD> ̼<EFBFBD> <CCBC> <EFBFBD> 1<EFBFBD> <31> <EFBFBD> <EFBFBD> <EFBFBD> ø<EFBFBD> <C3B8> <EFBFBD> .
OnAchieveDailyMission ( GuildWar , nArrayIndex , bSecret ) ;
m_pUserSession - > GetDBConnection ( ) - > QueryModGuildWarMission ( m_pUserSession , DAILYMISSION_GUILDWAR , nArrayIndex , pDailyMission , bAchieve ) ; // db<64> <62> <EFBFBD> <EFBFBD>
}
}
}
void CDNMissionSystem : : RequestForceAchieveGuildCommonMission ( int nItemID )
{
TDailyMissionData * pData = g_pDataManager - > GetDailyMissionData ( nItemID ) ;
if ( ! pData ) return ;
TMissionGroup * pMission = m_pUserSession - > GetMissionData ( ) ;
if ( ! pMission ) return ;
int nArrayIndex = 0 ;
char Event = pData - > AchieveCondition . cEvent ;
TDailyMission * pDailyMission ;
for ( DWORD i = 0 ; i < m_nVecDailyMissionList [ GuildCommon ] [ Event ] . size ( ) ; i + + )
{
nArrayIndex = m_nVecDailyMissionList [ GuildCommon ] [ Event ] [ i ] ;
pDailyMission = & pMission - > GuildCommonMission [ nArrayIndex ] ;
if ( pDailyMission - > nMissionID = = nItemID )
{
bool bAchieve = true ;
pDailyMission - > bAchieve = true ;
pDailyMission - > nCounter = 0 ;
// <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> Ʈ <20> <> <EFBFBD> <EFBFBD>
int nRewardPoint = g_pDataManager - > GetDailyMissionRewarePoint ( pDailyMission - > nMissionID ) ;
m_pUserSession - > AddGuildPoint ( GUILDPOINTTYPE_MISSION , nRewardPoint , pDailyMission - > nMissionID ) ;
RequestDailyMissionReward ( pDailyMission - > nMissionID ) ;
OnAchieveDailyMission ( GuildCommon , nArrayIndex ) ;
m_pUserSession - > GetDBConnection ( ) - > QueryModGuildWarMission ( m_pUserSession , DAILYMISSION_GUILDCOMMON , nArrayIndex , pDailyMission , bAchieve ) ; // db<64> <62> <EFBFBD> <EFBFBD>
}
}
}
bool CDNMissionSystem : : bIsDailyMission ( const int nItemID )
{
TMissionGroup * pMission = m_pUserSession - > GetMissionData ( ) ;
for ( UINT i = 0 ; i < _countof ( pMission - > DailyMission ) ; + + i )
{
if ( pMission - > DailyMission [ i ] . nMissionID = = nItemID )
return true ;
}
return false ;
}
bool CDNMissionSystem : : bIsWeeklyMission ( const int nItemID )
{
TMissionGroup * pMission = m_pUserSession - > GetMissionData ( ) ;
for ( UINT i = 0 ; i < _countof ( pMission - > WeeklyMission ) ; + + i )
{
if ( pMission - > WeeklyMission [ i ] . nMissionID = = nItemID )
return true ;
}
return false ;
}
# if defined(PRE_MOD_MISSION_HELPER)
bool CDNMissionSystem : : bCheckDailyMission ( const int nItemID , DNNotifier : : Type : : eType eType )
{
if ( eType = = DNNotifier : : Type : : NormalMission )
return bIsCommonMission ( nItemID ) ;
TMissionGroup * pMission = m_pUserSession - > GetMissionData ( ) ;
if ( ! pMission ) return false ;
TDailyMission * pDailyMission = NULL ;
int nCount = 0 ;
switch ( eType )
{
case DNNotifier : : Type : : DailyMission :
pDailyMission = pMission - > DailyMission ;
nCount = _countof ( pMission - > DailyMission ) ;
break ;
case DNNotifier : : Type : : WeeklyMission :
pDailyMission = pMission - > WeeklyMission ;
nCount = _countof ( pMission - > WeeklyMission ) ;
break ;
# if defined(PRE_ADD_MONTHLY_MISSION)
case DNNotifier : : Type : : MonthlyMission :
pDailyMission = pMission - > MonthlyMission ;
nCount = _countof ( pMission - > MonthlyMission ) ;
break ;
# endif // #if defined(PRE_ADD_MONTHLY_MISSION)
case DNNotifier : : Type : : GuildWarMission :
pDailyMission = pMission - > GuildWarMission ;
nCount = _countof ( pMission - > GuildWarMission ) ;
break ;
case DNNotifier : : Type : : PCBangMission :
pDailyMission = pMission - > PCBangMission ;
nCount = _countof ( pMission - > PCBangMission ) ;
break ;
case DNNotifier : : Type : : GuildCommonMission :
pDailyMission = pMission - > GuildCommonMission ;
nCount = _countof ( pMission - > GuildCommonMission ) ;
break ;
case DNNotifier : : Type : : WeekendEventMission :
pDailyMission = pMission - > WeekendEventMission ;
nCount = _countof ( pMission - > WeekendEventMission ) ;
break ;
case DNNotifier : : Type : : WeekendRepeatMission :
pDailyMission = pMission - > WeekendRepeatMission ;
nCount = _countof ( pMission - > WeekendRepeatMission ) ;
break ;
}
if ( ! pDailyMission ) return false ;
for ( int i = 0 ; i < nCount ; + + i )
{
if ( pDailyMission [ i ] . nMissionID = = nItemID )
return true ;
}
return false ;
}
bool CDNMissionSystem : : bIsCommonMission ( const int nItemID )
{
TMissionGroup * pMission = m_pUserSession - > GetMissionData ( ) ;
if ( GetBitFlag ( pMission - > MissionGain , nItemID ) )
return true ;
return false ;
}
# endif
bool CDNMissionSystem : : bIsGuildWarMission ( )
{
short wScheduleID = 0 ;
char cStep = 0 ;
# if defined(_VILLAGESERVER)
wScheduleID = g_pGuildWarManager - > GetScheduleID ( ) ;
cStep = g_pGuildWarManager - > GetStepIndex ( ) ;
# elif(_GAMESERVER)
wScheduleID = g_pMasterConnectionManager - > GetGuildWarScheduleID ( m_pUserSession - > GetWorldSetID ( ) ) ;
cStep = g_pMasterConnectionManager - > GetGuildWarStepIndex ( m_pUserSession - > GetWorldSetID ( ) ) ;
# endif // #elif(_GAMESERVER)
if ( wScheduleID < = 0 )
return false ;
if ( wScheduleID ! = m_pUserSession - > GetGuildSelfView ( ) . wWarSchduleID | | cStep ! = GUILDWAR_STEP_TRIAL )
return false ;
const TGuildUID GuildUID = m_pUserSession - > GetGuildUID ( ) ;
if ( ! GuildUID . IsSet ( ) )
return false ;
return true ;
}
// <20> <> <EFBFBD> <EFBFBD> <EFBFBD> ̼<EFBFBD> <CCBC> <EFBFBD> <20> ʱ<EFBFBD> ȭ
bool CDNMissionSystem : : InitGuildWarMissionList ( bool bCheckAchieve )
{
bool bReset = false ;
TMissionGroup * pMission = m_pUserSession - > GetMissionData ( ) ;
if ( bCheckAchieve )
{
for ( int i = 0 ; i < GUILDWARMISSIONMAX ; i + + )
{
if ( pMission - > GuildWarMission [ i ] . bAchieve = = true | | pMission - > GuildWarMission [ i ] . nCounter > 0 )
{
bReset = true ; // <20> ʱ<EFBFBD> ȭ <20> <> <EFBFBD> <EFBFBD>
break ;
}
}
}
else
{
bReset = true ; // <20> ̼<EFBFBD> <CCBC> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> .
}
if ( ! bReset )
return false ; // <20> ʱ<EFBFBD> ȭ<EFBFBD> <C8AD> <20> ȵ<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> ̼<EFBFBD> <20> <> <EFBFBD> <EFBFBD> Ʈ<EFBFBD> <C6AE> <20> ־<EFBFBD> <D6BE> ش<EFBFBD> .
memset ( pMission - > GuildWarMission , 0 , sizeof ( pMission - > GuildWarMission ) ) ;
{
ScopeLock < CSyncLock > Lock ( m_Lock ) ;
for ( int i = 0 ; i < EventSystem : : EventTypeEnum_Amount ; i + + )
{
SAFE_DELETE_VEC ( m_nVecDailyMissionList [ GuildWar ] [ i ] ) ;
}
int nMissionID = 0 ;
for ( int i = 0 ; i < GUILDWARMISSIONMAX ; i + + )
{
TDailyMissionData * pData = g_pDataManager - > GetGuildWarMissionData ( i ) ;
if ( ! pData ) continue ;
if ( pData - > AchieveCondition . cEvent > = EventSystem : : EventTypeEnum_Amount )
continue ;
pMission - > GuildWarMission [ i ] . nMissionID = pData - > nItemID ;
m_nVecDailyMissionList [ GuildWar ] [ pData - > AchieveCondition . cEvent ] . push_back ( i ) ;
}
}
m_pUserSession - > GetDBConnection ( ) - > QuerySetGuildWarMission ( m_pUserSession ) ;
return true ;
}
bool CDNMissionSystem : : OnEvent ( EventSystem : : EventTypeEnum Event )
{
std : : vector < int > nVecAchieveList ;
CheckMissionGain ( Event ) ; // ȹ<> <C8B9> üũ
CheckMissionAchieve ( Event , nVecAchieveList ) ; // <20> <EFBFBD> üũ
CheckDailyMissionAchieve ( Event ) ; // DailyMission üũ
# if defined(PRE_ADD_ACTIVEMISSION) && defined(_GAMESERVER)
int nActiveMissionAchieveID = CheckActiveMissionAchieve ( Event ) ; // ActiveMission üũ
// <20> ̾ȿ<CCBE> <C8BF> <EFBFBD> OnEvent <20> <> <EFBFBD> <EFBFBD> ȣ <> <C8A3> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <20> <> <EFBFBD> <EFBFBD> <20> ּ<EFBFBD> <D6BC> <EFBFBD> !
if ( nActiveMissionAchieveID > 0 )
m_pUserSession - > GetEventSystem ( ) - > OnEvent ( EventSystem : : OnActiveMissionClear , 1 , EventSystem : : ActiveMissionID , nActiveMissionAchieveID ) ;
# endif
// <20> Ϲ <EFBFBD> Mission <20> <EFBFBD> <DEBC> <EFBFBD> OnMissionClear Event <20> <EFBFBD> .
if ( ! nVecAchieveList . empty ( ) )
{
for ( DWORD i = 0 ; i < nVecAchieveList . size ( ) ; i + + )
m_pUserSession - > GetEventSystem ( ) - > OnEvent ( EventSystem : : OnMissionClear , 1 , EventSystem : : MissionID , nVecAchieveList [ i ] ) ;
}
return true ;
}
bool CDNMissionSystem : : CheckMetaMissionAchieveEvent ( TMissionData * pData )
{
TMissionGroup * pMission = m_pUserSession - > GetMissionData ( ) ;
// <20> <> Ÿ <20> <> <EFBFBD> <EFBFBD> ó<> <C3B3> <20> <> <EFBFBD> <EFBFBD> and, or <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> Ѵ <EFBFBD> .
if ( pData - > AchieveCondition . bCheckType = = false ) {
for ( int i = 0 ; i < 5 ; i + + ) {
if ( pData - > AchieveCondition . cType [ i ] = = EventSystem : : None ) continue ; // <20> <> <EFBFBD> ǿ<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> ̶<EFBFBD> <20> ص<EFBFBD> <D8B5> <EFBFBD> <EFBFBD> <EFBFBD> <20> н<EFBFBD>
if ( GetBitFlag ( pMission - > MissionAchieve , pData - > AchieveCondition . nParam [ i ] ) = = false ) return false ;
}
return true ;
}
else {
for ( int i = 0 ; i < 5 ; i + + ) {
if ( pData - > AchieveCondition . cType [ i ] = = EventSystem : : None ) continue ;
if ( GetBitFlag ( pMission - > MissionAchieve , pData - > AchieveCondition . nParam [ i ] ) = = true ) return true ;
}
return false ;
}
return false ;
}
void CDNMissionSystem : : CheckMissionGain ( EventSystem : : EventTypeEnum Event )
{
TMissionGroup * pMission = m_pUserSession - > GetMissionData ( ) ;
bool bMissionGain = false ;
int nArrayIndex ;
for ( DWORD i = 0 ; i < m_nVecMissionGainList [ Event ] . size ( ) ; i + + ) {
nArrayIndex = m_nVecMissionGainList [ Event ] [ i ] ;
TMissionData * pData = g_pDataManager - > GetMissionData ( nArrayIndex ) ;
if ( ! pData ) continue ;
if ( m_pUserSession - > GetEventSystem ( ) - > CheckEventCondition ( & pData - > GainCondition ) = = true ) {
SetBitFlag ( pMission - > MissionGain , nArrayIndex , true ) ;
OnGainMission ( nArrayIndex ) ;
// ȹ<> <C8B9> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> ̸<EFBFBD> <20> <EFBFBD> <DEBC> <EFBFBD> <EFBFBD> <EFBFBD> Ʈ<EFBFBD> <C6AE> <20> ߰<EFBFBD> <DFB0> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> Ѵ <EFBFBD> .
m_nVecMissionAchieveList [ pData - > AchieveCondition . cEvent ] . push_back ( nArrayIndex ) ;
m_nVecMissionGainList [ Event ] . erase ( m_nVecMissionGainList [ Event ] . begin ( ) + i ) ;
i - - ;
bMissionGain = true ;
}
}
if ( bMissionGain = = true )
m_pUserSession - > GetDBConnection ( ) - > QueryMissionGain ( m_pUserSession ) ;
}
void CDNMissionSystem : : CheckMissionAchieve ( EventSystem : : EventTypeEnum Event , std : : vector < int > & nVecAchieveList )
{
int nArrayIndex ;
TMissionGroup * pMission = m_pUserSession - > GetMissionData ( ) ;
for ( DWORD i = 0 ; i < m_nVecMissionAchieveList [ Event ] . size ( ) ; i + + ) {
nArrayIndex = m_nVecMissionAchieveList [ Event ] [ i ] ;
TMissionData * pData = g_pDataManager - > GetMissionData ( nArrayIndex ) ;
if ( ! pData ) continue ;
bool bAchieve = false ;
if ( pData - > nType = = MissionType_MetaShow | | pData - > nType = = MissionType_MetaHide )
bAchieve = CheckMetaMissionAchieveEvent ( pData ) ; // <20> <> Ÿ<EFBFBD> ̼<EFBFBD> <CCBC> ̶<EFBFBD> <CCB6> <EFBFBD> <20> ٸ<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> üũ<C3BC> Ѵ <EFBFBD> .
else
bAchieve = m_pUserSession - > GetEventSystem ( ) - > CheckEventCondition ( & pData - > AchieveCondition ) ;
if ( bAchieve ) {
SetBitFlag ( pMission - > MissionAchieve , nArrayIndex , true ) ;
RequestMissionReward ( nArrayIndex ) ;
OnAchieveMission ( nArrayIndex ) ;
switch ( pData - > nType ) {
case MissionType_Normal :
case MissionType_MetaShow :
UpdateLastAchieveList ( nArrayIndex ) ;
break ;
case MissionType_EventPopUp :
OnEventPopUp ( nArrayIndex ) ;
break ;
case MissionType_HelpAlarm :
OnHelpAlarm ( nArrayIndex ) ;
break ;
case MissionType_MetaHide :
case MissionType_Quest :
break ;
}
nVecAchieveList . push_back ( nArrayIndex + 1 ) ;
m_nVecMissionAchieveList [ Event ] . erase ( m_nVecMissionAchieveList [ Event ] . begin ( ) + i ) ;
i - - ;
}
}
}
# if defined(PRE_ADD_ACTIVEMISSION)
void CDNMissionSystem : : ResetActiveMission ( )
{
m_pActiveMission = NULL ;
m_ActiveMissionState = ActiveMission : : NOT_ASSIGNED ;
}
void CDNMissionSystem : : SetActiveMission ( TActiveMissionData * pData )
{
if ( ! pData ) return ;
m_pActiveMission = pData ;
m_ActiveMissionState = ActiveMission : : GAIN_MISSION ;
m_pUserSession - > SendActiveMissionGain ( pData - > nIndex ) ;
}
//<2F> <> Ƽ <EFBFBD> <C6BC> <20> ̼<EFBFBD> <20> <EFBFBD> <DEBC> <EFBFBD> <20> ش<EFBFBD> <20> ̼<EFBFBD> ID <20> <> return <20> մϴ<D5B4> .
int CDNMissionSystem : : CheckActiveMissionAchieve ( EventSystem : : EventTypeEnum Event )
{
if ( m_ActiveMissionState ! = ActiveMission : : GAIN_MISSION ) return 0 ;
if ( ! m_pActiveMission | | m_pActiveMission - > AchieveCondition . cEvent ! = Event ) return 0 ;
if ( m_pUserSession - > GetEventSystem ( ) - > CheckEventCondition ( & m_pActiveMission - > AchieveCondition ) )
{
m_ActiveMissionState = ActiveMission : : COMPLETE_MISSION ;
m_pUserSession - > SendActiveMissionAchieve ( m_pActiveMission - > nIndex ) ;
if ( m_pActiveMission - > nMailID > 0 ) {
CDNMailSender : : Process ( m_pUserSession , m_pActiveMission - > nMailID , DBDNWorldDef : : PayMethodCode : : ActiveMission , m_pActiveMission - > nIndex ) ;
}
return m_pActiveMission - > nIndex ;
}
return 0 ;
}
# endif //#if defined(PRE_ADD_ACTIVEMISSION)
TDailyMission * CDNMissionSystem : : GetDailyMission ( CDNMissionSystem : : DailyMissionTypeEnum iMissionType , int nArrayIndex )
{
if ( nArrayIndex < 0 ) return NULL ;
TMissionGroup * pMission = m_pUserSession - > GetMissionData ( ) ;
switch ( iMissionType )
{
case CDNMissionSystem : : Daily :
if ( nArrayIndex > = DAILYMISSIONMAX ) return NULL ;
return & pMission - > DailyMission [ nArrayIndex ] ;
case CDNMissionSystem : : Weekly :
if ( nArrayIndex > = WEEKLYMISSIONMAX ) return NULL ;
return & pMission - > WeeklyMission [ nArrayIndex ] ;
# if defined( PRE_ADD_MONTHLY_MISSION )
case CDNMissionSystem : : Monthly :
if ( nArrayIndex > = MONTHLYMISSIONMAX ) return NULL ;
return & pMission - > MonthlyMission [ nArrayIndex ] ;
# endif // #if defined( PRE_ADD_MONTHLY_MISSION )
case CDNMissionSystem : : GuildWar :
if ( nArrayIndex > = GUILDWARMISSIONMAX ) return NULL ;
return & pMission - > GuildWarMission [ nArrayIndex ] ;
case CDNMissionSystem : : PCBang :
if ( nArrayIndex > = PCBangMissionMax ) return NULL ;
return & pMission - > PCBangMission [ nArrayIndex ] ;
case CDNMissionSystem : : GuildCommon :
if ( nArrayIndex > = GUILDCOMMONMISSIONMAX ) return NULL ;
return & pMission - > GuildCommonMission [ nArrayIndex ] ;
case CDNMissionSystem : : WeekendEvent :
if ( nArrayIndex > = WEEKENDEVENTMISSIONMAX ) return NULL ;
return & pMission - > WeekendEventMission [ nArrayIndex ] ;
case CDNMissionSystem : : WeekendRepeat :
if ( nArrayIndex > = WEEKENDREPEATMISSIONMAX ) return NULL ;
return & pMission - > WeekendRepeatMission [ nArrayIndex ] ;
default :
return NULL ;
}
}
void CDNMissionSystem : : CheckDailyMissionAchieve ( EventSystem : : EventTypeEnum Event )
{
TMissionGroup * pMission = m_pUserSession - > GetMissionData ( ) ;
TDailyMission * pDailyMission ;
int nArrayIndex ;
for ( int iMissionType = 0 ; iMissionType < DailyMissionTypeEnum_Amount ; iMissionType + + )
{
if ( iMissionType = = GuildWar ) //GuildWar <20> <> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> üũ
{
if ( ! bIsGuildWarMission ( ) ) continue ;
# if defined( PRE_USA_FATIGUE )
# if defined( _GAMESERVER)
if ( Event = = EventSystem : : OnDungeonClear & & m_pUserSession - > bIsNoFatigueEnter ( ) )
{
m_pUserSession - > SendServerMsg ( CHATTYPE_SYSTEM , CEtUIXML : : idCategory1 , SERVERMSG_INDEX125 ) ;
continue ;
}
# endif
# endif
}
if ( iMissionType = = GuildCommon & & ! m_pUserSession - > GetGuildUID ( ) . IsSet ( ) )
continue ;
for ( DWORD i = 0 ; i < m_nVecDailyMissionList [ iMissionType ] [ Event ] . size ( ) ; i + + ) {
nArrayIndex = m_nVecDailyMissionList [ iMissionType ] [ Event ] [ i ] ;
pDailyMission = GetDailyMission ( ( CDNMissionSystem : : DailyMissionTypeEnum ) iMissionType , nArrayIndex ) ;
if ( ! pDailyMission )
{
_DANGER_POINT ( ) ;
continue ;
}
TDailyMissionData * pData = g_pDataManager - > GetDailyMissionData ( pDailyMission - > nMissionID ) ;
if ( ! pData ) continue ;
//<2F> <> <EFBFBD> <EFBFBD> <20> ̼<EFBFBD> <20> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD>
if ( m_pUserSession - > GetEventSystem ( ) - > CheckEventCondition ( & pData - > AchieveCondition ) )
pDailyMission - > nCounter + + ;
else
continue ;
bool bAchieve = true ;
switch ( pData - > cCounterOperator ) {
case 0 : if ( ! ( pDailyMission - > nCounter = = pData - > nCounterParam ) ) bAchieve = false ; break ;
case 1 : if ( ! ( pDailyMission - > nCounter ! = pData - > nCounterParam ) ) bAchieve = false ; break ;
case 2 : if ( ! ( pDailyMission - > nCounter > pData - > nCounterParam ) ) bAchieve = false ; break ;
case 3 : if ( ! ( pDailyMission - > nCounter < pData - > nCounterParam ) ) bAchieve = false ; break ;
case 4 : if ( ! ( pDailyMission - > nCounter > = pData - > nCounterParam ) ) bAchieve = false ; break ;
case 5 : if ( ! ( pDailyMission - > nCounter < = pData - > nCounterParam ) ) bAchieve = false ; break ;
}
bool bIsRepeatMission = false ;
if ( bAchieve ) //<2F> ̼<EFBFBD> <20> <EFBFBD>
{
bool bSecret = false ;
pDailyMission - > bAchieve = true ;
RequestDailyMissionReward ( pDailyMission - > nMissionID ) ;
//<2F> ݺ<EFBFBD> Ŭ<> <C5AC> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> ̼<EFBFBD>
if ( iMissionType = = WeekendRepeat | | iMissionType = = GuildWar | | iMissionType = = GuildCommon )
{
pDailyMission - > nCounter = 0 ;
bIsRepeatMission = true ;
}
else //<2F> ݺ<EFBFBD> Ŭ<> <C5AC> <EFBFBD> <20> ƴѰ<C6B4> <D1B0> <EFBFBD> <20> <EFBFBD> <DEBC> <EFBFBD> <20> ༮<EFBFBD> <E0BCAE> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> ش<EFBFBD> .
{
m_nVecDailyMissionList [ iMissionType ] [ Event ] . erase ( m_nVecDailyMissionList [ iMissionType ] [ Event ] . begin ( ) + i ) ;
i - - ;
}
//<2F> ̼<EFBFBD> Ÿ<> Ժ<EFBFBD> <20> ߰<EFBFBD> <20> ۾<EFBFBD>
if ( iMissionType = = GuildWar )
{
bSecret = AddGuildWarPoint ( pDailyMission , Event , pMission , nArrayIndex ) ;
}
else if ( iMissionType = = PCBang )
{
ApplyPCBangMissionEffect ( Event ) ;
}
else if ( iMissionType = = GuildCommon )
{
AddGuildPoint ( pDailyMission ) ;
}
OnAchieveDailyMission ( ( CDNMissionSystem : : DailyMissionTypeEnum ) iMissionType , nArrayIndex , bSecret ) ;
//Daily, Weekly <20> ̼<EFBFBD> Ŭ<> <C5AC> <EFBFBD> <EFBFBD> <20> ̺<EFBFBD> Ʈ
if ( iMissionType = = Daily | | iMissionType = = Weekly )
{
if ( bIsGuildWarMission ( ) )
{ //<2F> <> <EFBFBD> <EFBFBD> GuildWar <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> OnDailyMissionClear, OnWeeklyMissionClear <20> ̼<EFBFBD> <CCBC> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> point ȹ<> <C8B9> <20> 뵵<EFBFBD> <EBB5B5> <20> <> <EFBFBD> <EFBFBD> <20> <> (2012-08-14 by stupidfox)
EventSystem : : EventTypeEnum MissionEvent = ( iMissionType = = Daily ? EventSystem : : OnDailyMissionClear : EventSystem : : OnWeeklyMissionClear ) ;
OnEvent ( MissionEvent ) ;
}
}
}
else
{ //<2F> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> achieve count <20> <> <20> <> <EFBFBD> ڶ<EFBFBD> <20> <> <EFBFBD> <EFBFBD> count <20> <> <20> <> <EFBFBD> <EFBFBD>
OnCounterDailyMission ( ( CDNMissionSystem : : DailyMissionTypeEnum ) iMissionType , nArrayIndex , pDailyMission - > nCounter ) ;
}
// eDailyMissionType <20> <> DailyMissionTypeEnum <20> <> <EFBFBD> <EFBFBD> 1<> <31> <20> <> <EFBFBD> ̳<EFBFBD> => iMissionType+1
m_pUserSession - > GetDBConnection ( ) - > QueryModDailyWeeklyMission ( m_pUserSession , iMissionType + 1 , nArrayIndex , pDailyMission , bIsRepeatMission ) ; // db<64> <62> <EFBFBD> <EFBFBD>
}
}
}
bool CDNMissionSystem : : AddGuildWarPoint ( TDailyMission * pDailyMission , EventSystem : : EventTypeEnum Event , TMissionGroup * pMission , int nArrayIndex )
{
// <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> Ʈ <20> <> <EFBFBD> <EFBFBD>
int nRewardPoint = g_pDataManager - > GetDailyMissionRewarePoint ( pDailyMission - > nMissionID ) ;
bool bSecret = false ;
# if defined(_VILLAGESERVER)
if ( g_pGuildWarManager - > IsSecretMission ( m_pUserSession - > GetGuildSelfView ( ) . cTeamColorCode , pDailyMission - > nMissionID ) )
# elif defined(_GAMESERVER)
if ( g_pMasterConnectionManager - > IsSecretMission ( m_pUserSession - > GetWorldSetID ( ) , m_pUserSession - > GetGuildSelfView ( ) . cTeamColorCode , pDailyMission - > nMissionID ) )
# endif
{
nRewardPoint * = 2 ; // <20> <> ũ<EFBFBD> <C5A9> <20> ߵ <EFBFBD> <DFB5> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> 2<> <32> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> Ʈ ó<> <C3B3>
bSecret = true ;
}
int nMapSubType = api_Mission_MapSubType ( m_pUserSession ) ;
if ( Event = = EventSystem : : OnDungeonClear & & ( GlobalEnum : : MAPSUB_NONE = = nMapSubType | | GlobalEnum : : MAPSUB_TREASURESTAGE = = nMapSubType ) )
{
int nLevelLimit = static_cast < int > ( CGlobalWeightTable : : GetInstance ( ) . GetValue ( CGlobalWeightTable : : GuildWarMission_LevelLimit ) ) ;
if ( m_pUserSession - > GetLevel ( ) < = nLevelLimit )
{
nRewardPoint = ( int ) ( nRewardPoint * static_cast < float > ( CGlobalWeightTable : : GetInstance ( ) . GetValue ( CGlobalWeightTable : : GuildWarMission_Rate ) ) ) ;
if ( nRewardPoint < = 0 )
nRewardPoint = 1 ;
}
}
m_pUserSession - > GetDBConnection ( ) - > QueryAddGuildWarPoint ( m_pUserSession , pDailyMission - > nMissionID , nRewardPoint ) ;
pMission - > nMissionScore + + ; // <20> <> <EFBFBD> <EFBFBD> <EFBFBD> ̼<EFBFBD> <CCBC> <EFBFBD> 1<> <31> <EFBFBD> <EFBFBD> <20> ø<EFBFBD> <C3B8> <EFBFBD> .
return bSecret ;
}
void CDNMissionSystem : : ApplyPCBangMissionEffect ( EventSystem : : EventTypeEnum Event )
{
switch ( Event )
{
case EventSystem : : OnPCBang_Fatigue :
m_pUserSession - > SetDefaultPCBangFatigue ( ) ;
break ;
case EventSystem : : OnPCBang_RebirthCoin :
m_pUserSession - > SetDefaultPCBangRebirthCoin ( ) ;
break ;
}
}
void CDNMissionSystem : : AddGuildPoint ( TDailyMission * pDailyMission )
{
// <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> Ʈ <20> <> <EFBFBD> <EFBFBD>
int nRewardPoint = g_pDataManager - > GetDailyMissionRewarePoint ( pDailyMission - > nMissionID ) ;
// <20> <> <EFBFBD> ѷ<EFBFBD> üũ
m_pUserSession - > AddGuildPoint ( GUILDPOINTTYPE_MISSION , nRewardPoint , pDailyMission - > nMissionID ) ;
}
bool CDNMissionSystem : : bIsAchieveMission ( const int nItemID ) const
{
if ( 0 = = nItemID ) // 1 -> 0 <20> ̰<EFBFBD> 0 -> 0 <20> ̶<EFBFBD> <CCB6> <EFBFBD> <20> <> ȣ <EFBFBD> <C8A3> <20> <> <EFBFBD> <EFBFBD>
{
return false ;
}
DNTableFileFormat * pSox = GetDNTable ( CDnTableDB : : TMISSION ) ;
int nTargetArrayIndex = pSox - > GetArrayIndex ( nItemID ) ;
TMissionData * pData = g_pDataManager - > GetMissionData ( nTargetArrayIndex ) ;
if ( NULL = = pData | | false = = pData - > bActivate )
{
return false ;
}
TMissionGroup * pMission = m_pUserSession - > GetMissionData ( ) ;
return GetBitFlag ( pMission - > MissionAchieve , nTargetArrayIndex ) ;
}