#pragma once #ifdef _NA_008543_20151027_ONE_DAYS_GUILD_MISSION /*-------------------------------------------------------------------------------------------------- -- Include Defined --------------------------------------------------------------------------------------------------*/ #include /*-------------------------------------------------------------------------------------------------- -- Class Defined --------------------------------------------------------------------------------------------------*/ struct StandByMemberInfo { CHARGUID user_guid; //À¯Àú ¾ÆÀ̵ð StandByMemberInfo() : user_guid(0) { } }; typedef STLX_VECTOR 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 StandByMemberMap; typedef util::CMemoryPoolFactory 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)