#pragma once #ifdef _NA_008334_20150608_SONNENSCHEIN #include //_NA_008801_20160429_ADD_GUILDMISSION_TIMEINFO_SCRIPT #include "ChaosZoneSystem/OneDaysGuildMissioninfoParser.h" struct SScheinRewardInfo; class SonnenScheinRewardStatus { public: SonnenScheinRewardStatus(): reward_phase_(0), MAX_REWARD_PHASE(0) {cur_target_list_.clear();} ~SonnenScheinRewardStatus() {} VOID Init(); VOID SetMaxRewardPhase(BYTE phase) {MAX_REWARD_PHASE = phase;} BYTE GetMaxRewardPhase() {return MAX_REWARD_PHASE;} VOID IncreaseRewardPhase(); //ÇöÀç ´Ü°è¸¦ ¸¶Áö¸·´Ü°è·Î ¹Ù·Î¿Ã¸°´Ù VOID SetLastRewardPhase() {reward_phase_ = GetMaxRewardPhase(); } BYTE GetCurRewardPhase() {return reward_phase_;} VOID InputTargetList(const SScheinRewardInfo* info); BOOL PopTarget(MONSTERCODE target_code); // ´Ü°è¸¦ ³Ñ¾î°¡±â À§ÇÑ Å¸°Ù ¸ðµÎ Á¦°ÅµÇ¾ú´Â°¡ BOOL IsTargetAllDeath(); VOID SetCurTargetType(BYTE target_type) {cur_target_type_ = target_type;} BYTE GetCurTargetType() {return cur_target_type_;} private: VOID _PushTarget(MONSTERCODE target_code); private: // ¼Ò³Ù»þÀÎ º¸»ó ÃÖ°íµî±Þ°ª BYTE MAX_REWARD_PHASE; BYTE reward_phase_; //Çö ´Ü°è¿¡¼­ ´ÙÀ½´Ü°è·Î ³Ñ¾î°¡±â À§ÇÑ Å¸°ÙÁ¤º¸¸¦ ±â¾ïÇÑ´Ù BYTE cur_target_type_; std::vector cur_target_list_; }; class SonnenSchein : public ChaosZone { enum { UPDATE_TIME = 500, //0.5Ãʸ¶´Ù ¾÷µ¥ÀÌÆ® ÁøÇà ROOM_DESTROY_TIME = 5 * 60 * 1000, //5ºÐ, End»óÅÂÀÌÈÄ ¹æ ¼Ò¸ê À¯¿¹½Ã°£ // 10ÃÊ, °¢ÀÎ ÈÄ, Ç÷¹ÀÌ¾î °­Åð ´ë±â½Ã°£(stampSuccess -> kick user) // 10ÃÊ, END»óÅ ÀÌÈÄ, À¯Àú °­Á¦ÅðÀå±îÁöÀÇ ´ë±â½Ã°£ ROOM_END_WAIT_TIME = 10 * 1000, TIME_SYNC_CYCLE = 30 * 1000, // ½Ã°£µ¿±âÈ­ ÁÖ±â }; public: SonnenSchein() : creater_char_guid_(0) , room_guild_guid_(0) , stamp_start_time_(0) , event_loaded_(FALSE) , is_process_phase_update_(FALSE) {} virtual ~SonnenSchein() {} virtual void Init(GameInstanceDungeon* const instance_dungeon); virtual void Release(); virtual void Update(); VOID SetSonnenScheinRewardPhase(); //SonnenSchein¹æÀ» óÀ½ »ý¼ºÇÑ Ç÷¹À̾ ±â¾ïÇÑ´Ù VOID SetInitialCreater(CHARGUID char_guid, GUILDGUID guild_guid); 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 void DeadCharacter(Character* const dead_character, Character* const kill_character); virtual eUSER_RELATION_TYPE IsFriendPVP(Player* attacker,Player* target); virtual RC::eSTATUS_RESULT ResurrectionAtSafezone( Player *player ); GUILDGUID GetRoomGuildGuid() {return room_guild_guid_;} //°¢ÀÎ °ü·Ã-------------------------------------------------------------------------------- //°¢ÀÎ ¼º°ø ó¸® VOID SuccessStamp(Player* player); VOID SetStampStartTime(); VOID InitStampCheckTime() {stamp_start_time_ = 0;} VOID SetEventState(const eSONNENSCHEIN_EVENT_STATE& state); const eSONNENSCHEIN_EVENT_STATE GetEventState() {return event_state_;} private: //ÀÔÀåÇÏ·Á´Â Ç÷¹À̾îÀÇ ±æµå üũ BOOL _CheckEnterPlayerGuild(Player* enter_player); //Starting AreaÀÇ ID¸¦ ±¸ÇÑ´Ù WzID _GetStartingArea(); VOID _IncreaseRewardPhase(); VOID _SetNextPhaseTargetInfo(); VOID _UpdateCurEventState(); VOID _SendTimeSync(); VOID _SendTimeSyncForPlayer(Player* player); VOID _SetRunTime(); DWORD _GetRunTime(const WORD& day_of_week, const DWORD time) const; VOID _WriteSonnenScheinLog(); private: eSONNENSCHEIN_EVENT_STATE event_state_; //sonnenschein »óÅ GuildMissionTimeInfo event_info_; // Á¡·ÉÀü(¸óÆ®»þÀÎ) À̺¥Æ®Á¤º¸ BOOL event_loaded_; CHARGUID creater_char_guid_; GUILDGUID room_guild_guid_; PLAYER_HASH player_hash_; // ÀÔÀå ¸â¹ö // ½Ã°£ °ü·Ã DWORD stamp_start_time_; // °¢ÀÎ ½ÃÀÛ ½Ã°£ DWORD run_time_; // ¼Ò³Ù»þÀÎ ÁøÇà ½Ã°£ util::Timer update_timer_; // ¾÷µ¥ÀÌÆ® ÁÖ±â Á¶Àý util::Timer room_destroy_timer_; //End»óÅ ÀÌÈÄ, ¹æ ¼Ò¸ê±îÁöÀÇ À¯¿¹½Ã°£ util::Timer kick_user_wait_timer_; //End»óÅ ÀÌÈÄ Ç÷¹ÀÌ¾î °­Á¦ÅðÀå±îÁöÀÇ ´ë±â½Ã°£ util::Timer stamp_success_wait_timer_; // °¢Àμº°ø -> Ç÷¹ÀÌ¾î °­Åð °£ÀÇ ´ë±â½Ã°£ util::Timer time_sync_cycle_; // Ŭ¶ó¿Í ½Ã°£µ¿±âÈ­ À§ÇÑ Å¸ÀÌ¸Ó util::Timer sonnenschein_run_timer_; // ¼Ò³Ù»þÀÎ ÁøÇà ŸÀÌ¸Ó // º¸»ó°ü·Ãó¸® SonnenScheinRewardStatus reward_status_; // GM¸í·É¾î¸¦ À§ÇÑ º¯¼ö // ¼Ò³Ù»þÀÎ µî±Þ ¾÷µ¥ÀÌÆ® ¿©ºÎ Ç÷¡±× BOOL is_process_phase_update_; }; #endif //_NA_008334_20150608_SONNENSCHEIN