Files
2022-10-26 12:25:11 +08:00

160 lines
4.4 KiB
C++

#include "StdAfx.h"
#include ".\gamemissionroom.h"
#include "Player.h"
#include "Trigger.h"
#include "Map.h"
#include "ChangeMonsterAbility.h"
#include "Monster.h"
#include "TriggerManagerEx.h"
//_NA_0_20091118_GAMEROOM_BATTLE_RESULT
#include "MissionBattleResult.h"
__IMPL_CUSTOMPOOL_PTR(GameMissionRoom)
GameMissionRoom::GameMissionRoom(void)
{
// _NA_0_20091118_GAMEROOM_BATTLE_RESULT
m_pBattleResult = new MissionBattleResult;
}
GameMissionRoom::~GameMissionRoom(void)
{
//_NA_0_20091118_GAMEROOM_BATTLE_RESULT
SAFE_DELETE(m_pBattleResult);
}
void GameMissionRoom::OnCreate()
{
ChangeHandler( eZONETYPE_MISSION );
#ifdef _NA_003649_20111115_BATTLE_ZONE_HARDMODE
// 하드모드에서는 파티 인원수에 따른 몬스터의 능력치(공격력/HP) 변화 없음 - arycoat 2021.01.20
#ifdef _NA_007734_20141027_ADD_ROOMKIND_SPECIALMISSION
if(GetPartyZoneType() == PartyOfHardcore ||
GetPartyZoneType() == PartyOfSpecialMission) {
Policyment.SetField(Policyment.FIELD & ~Policyment.ENABLE_CHANGE_MOB_ABILITY);
}
#else
if(GetPartyZoneType() == PartyOfHardcore) {
Policyment.SetField(Policyment.FIELD & ~Policyment.ENABLE_CHANGE_MOB_ABILITY);
}
#endif //_NA_007734_20141027_ADD_ROOMKIND_SPECIALMISSION
#endif //_NA_003649_20111115_BATTLE_ZONE_HARDMODE
PartyZoneType zonetype = GetPartyZoneType();
#ifdef _NA_007156_20140703_TOP_OF_TRIAL_LIGHT
if (zonetype == PartyOfTopOfTrialLight_cash ||
zonetype == PartyOfTopOfTrialLight_normal ) {
Policyment.SetField(Policyment.FIELD & ~Policyment.ENABLE_CHANGE_MOB_ABILITY);
}
#endif //_NA_007156_20140703_TOP_OF_TRIAL_LIGHT
GameRoom::OnCreate();
//_NA_0_20091118_GAMEROOM_BATTLE_RESULT
m_pBattleResult->Init(false);
}
void GameMissionRoom::OnDestroy()
{
//_NA_0_20091118_GAMEROOM_BATTLE_RESULT
#ifdef _NA_007750_20141113_WZDAT_MODIFY_LOG
TCHAR tszAddInfo[MAX_ADDINFO_SIZE + 1] = { 0, };
_snprintf(tszAddInfo, MAX_ADDINFO_SIZE, "MapCode:%d,TotalHeim:%I64u", GetMapCode(),
(m_pBattleResult != NULL) ? m_pBattleResult->GetTotalDropHeim() : 0);
GAMELOG->LogWzDat(ACT_TOTAL_DROP_HEIM_FROM_MONSTER, tszAddInfo);
#endif // _NA_007750_20141113_WZDAT_MODIFY_LOG
m_pBattleResult->Release();
GameRoom::OnDestroy();
}
VOID GameMissionRoom::Ready( Player* pPlayer, MAPCODE FieldCode, WzID AreaID, WzVector* pwvStartPos )
{
pPlayer->SetGameZone( ePRS_BEFORE_ENTER_MISSION, this, FieldCode, AreaID, pwvStartPos );
}
void GameMissionRoom::SetZone( Object *pObject, MAPCODE FieldCode, WzID AreaID, WzVector* pwvStartPos )
{
pObject->SetGameZone( ePRS_AT_MISSION, this, FieldCode, AreaID, pwvStartPos );
}
BOOL GameMissionRoom::MoveField( Player* pPlayer, MAPCODE FieldCode, WzID AreaID, WzVector* pwvStartPos )
{
SetZone( pPlayer, FieldCode, AreaID, pwvStartPos );
if( !GameRoom::MoveField( pPlayer, FieldCode, AreaID, pwvStartPos ) )
{
pPlayer->SetGameZone( ePRS_NOT_AT_ZONE, NULL, 0, NULL );
return FALSE;
}
return TRUE;
}
BOOL GameMissionRoom::Join( Player* pPlayer, MAPCODE FieldCode, WzID AreaID, WzVector* pwvStartPos )
{
if( !( pPlayer->GetGameZoneState() & ePRS_BEFORE_ENTER_MISSION ) )
{
SUNLOG( eCRITICAL_LOG, "[SusunLove] GameMissionRoom::Join eRoomState[%d] ZoneType[%d]", pPlayer->GetGameZoneState(), GetZoneType() );
return FALSE;
}
SetZone( pPlayer, FieldCode, AreaID, pwvStartPos );
if( !GameRoom::Join( pPlayer, FieldCode, AreaID, pwvStartPos ) )
{
pPlayer->SetGameZone( ePRS_NOT_AT_ZONE, NULL, 0, NULL );
// 미션의 수행정보를 보내준다!!
return FALSE;
}
return TRUE;
}
VOID GameMissionRoom::LeaveForWarp( Player* pPlayer )
{
GameRoom::LeaveForWarp( pPlayer );
}
VOID GameMissionRoom::Leave( Player* pPlayer )
{
GameRoom::Leave( pPlayer );
}
void GameMissionRoom::OnKillMonster( Monster* pMonster )
{
#ifdef _NA_008012_20150130_RANKING_SYSTEM
if( Policyment.FIELD & Policyment.ENABLE_RANKING ) // SSQ control은 필요없는 곳이다.
m_pRankingSystemCtl->KillMonster( (eNPC_GRADE)pMonster->GetBaseInfo()->m_byGrade, this );
return;
#endif // _NA_008012_20150130_RANKING_SYSTEM
/*
DWORD desc_time = 0;
switch( pMonster->GetBaseInfo()->m_byGrade )
{
case eNPC_GENERAL:
desc_time = 1000; break;
case eNPC_LEADER:
desc_time = 2000; break;
default:
return;
}
MSG_CG_MISSION_TIMER_CHANGED_BRD msg;
msg.m_MissionElapsedTimePerSecond = (DWORD)(GetMissionRecordManager().DecreasingTime(desc_time)/1000);
SendPacketToAll( &msg, sizeof(msg) );
*/
}