Files
Sun1602/Server/GameServer/World/ChaosZoneSystem/OneDaysGuildMission.h
T
2022-10-26 12:25:11 +08:00

120 lines
4.1 KiB
C++

#pragma once
#ifdef _NA_008543_20151027_ONE_DAYS_GUILD_MISSION
/*--------------------------------------------------------------------------------------------------
-- Include Defined
--------------------------------------------------------------------------------------------------*/
#include <World/ChaosZoneSystem/ChaosZone.h>
/*--------------------------------------------------------------------------------------------------
-- Class Defined
--------------------------------------------------------------------------------------------------*/
struct StandByMemberInfo
{
CHARGUID user_guid; //유저 아이디
StandByMemberInfo() :
user_guid(0)
{
}
};
typedef STLX_VECTOR<StandByMemberInfo*> StandByMemberList;
struct OneDaysGuildMissionInfo;
class OneDaysGuildMissionInfoParser;
class OneDaysGuildMissionResult;
class OneDaysGuildMission : public ChaosZone
{
enum{ kSecond = 1000, };
enum
{
// 시간동기화 주기
TIME_SYNC_CYCLE = 30 * kSecond,
ROOM_DESTROY_WAIT_TIME = 5 * kSecond, // 룸 파괴 전 대기 시간
};
public:
OneDaysGuildMission() :
guild_mission_state_(eGUILDMISSION_NONE),
onedays_guild_mission_result_(NULL),
onedays_guild_mission_info_(NULL)
{}
virtual ~OneDaysGuildMission() {}
public:
virtual void Init(GameInstanceDungeon* const instance_dungeon);
virtual void Release();
virtual void Update();
virtual bool EnterPlayer(Player* const player);
virtual void LeavePlayer(Player* const player);
virtual void EnterTeam(const ChaosZoneTeam team_key, const BYTE player_count, DWORD* user_key_list);
virtual eUSER_RELATION_TYPE IsFriendPVP(Player* attacker,Player* target);
virtual void DeadCharacter(Character* const dead_character, Character* const kill_character);
void SetOneDaysGuildMissionState(eGUILDMISSION_STATE state);
eGUILDMISSION_STATE GetOneDaysGuildMissionState() { return guild_mission_state_; }
// 각인관련 처리 함수
VOID SuccessStamp(Player* player);
VOID SetStampStartTime();
VOID InitStampCheckTime() {stamp_start_time_ = 0;}
public:
bool InsertStandByMember(const CHARGUID guid);
void RemoveStandByMember(const CHARGUID guid);
bool IsStandByMember(const CHARGUID guid);
private:
void _Start(); // 시작
void _Result(); // 종료
bool _IsGuildMissionEnd (); // 길드 미션 종료 체크 함수
void _SentToAllPlayerInfo(BYTE infoflag, CHARGUID user_guid); // 모든 플레이어에게 정보 전달
void _SendTimeSync();
void _SendTimeSyncForPlayer(Player* player);
bool _ItemDelete(Player* player);
//packet
void _SendPacketToAll(MSG_BASE_FORWARD* msg, WORD msg_size); // 모든유저에게 패킷보내기
void _SendPacketToAllEx(MSG_BASE_FORWARD* msg, WORD msg_size, CHARGUID charguid); // 내 자신을 뺀 모든유저에게 패킷보내기
virtual RC::eSTATUS_RESULT ResurrectionAtSafezone( Player *player ); // 부활 요청 처리 함수
RC::eSTATUS_RESULT OnMoveToSafezone(Player* const player); // 안전지대로 이동
Player* _FindPlayer(const DWORD char_guid);
private:
PLAYER_HASH player_hash_; // 진행중인 멤버
const OneDaysGuildMissionInfo* onedays_guild_mission_info_; // 스크립트 정보
OneDaysGuildMissionResult* onedays_guild_mission_result_; // 보상
typedef STLX_HASH_MAP<CHARGUID,StandByMemberInfo*> StandByMemberMap;
typedef util::CMemoryPoolFactory<StandByMemberInfo> StandByMemberPool;
private:
StandByMemberPool* stand_by_member_pool_;
StandByMemberMap stand_by_total_members_; // 스타트 업 유저 리스트 -> 요거는 방 라이프와 동일하게 간다.
// Time Info
struct
{
eGUILDMISSION_STATE guild_mission_state_; // 길드 미션 관련 상태
DWORD stamp_start_time_; // 각인 시간
util::Timer mission_limit_timer_; // 일일 길드미션 제한 시간.
util::Timer start_wait_timer_; // 입장 대기 시간 및 입장 후 강제 게임 시작 시간
util::Timer end_wait_timer_; // 게임 종료 후 결과 관련 디스플레이 시간
util::Timer room_destroy_timer_; // 방 파괴시간
bool is_stamp_state_; // 채집 상태(true이면 채집 성공 상태)
util::Timer time_sync_cycle_; // 일일 길드미션 상태 값 및 시간 관련 싱크 타임
};
};
#endif //(_NA_008543_20151027_ONE_DAYS_GUILD_MISSION)