#pragma once #ifdef _NA_007065_20140217_CHAOSZONE_GOLDRUSH #include class GoldRushTeam; struct BattleGroundInfo; struct GoldRushInfo; class GoldRushMonsterPointParser; class GoldRushBattleResult; class GoldRush : public ChaosZone { enum{ kSecond = 1000, }; enum eGOLDRUSH_STATE { eGOLDRUSH_NONE = 0, eGOLDRUSH_ENTERWAIT, // Ç÷¹À̾ ´Ù µé¾î¿À±æ ±â´Ù¸®´Â »óÅ eGOLDRUSH_PREPAREWAIT, // Áغñ ´ë±â »óÅ eGOLDRUSH_MATCHED, // ÀüÀå ÁøÇà »óÅ eGOLDRUSH_RESULT, // °á°ú »óÅ eGOLDRUSH_END, // Á¾·á »óÅ eGOLDRUSH_MAX }; enum { kTeamMax = 3, }; public: GoldRush() : battle_ground_Info_(NULL), goldrush_battle_result_(NULL), is_lastboss_dead_(false), goldrush_state_(eGOLDRUSH_NONE), goldrush_info_(NULL) {} virtual ~GoldRush() {} void Init(GameInstanceDungeon* const instance_dungeon); void Update(); void Release(); bool EnterPlayer(Player* const player); void LeavePlayer(Player* const player); void EnterTeam(const ChaosZoneTeam team_key, const BYTE player_count, DWORD* user_key_list); void DeadCharacter(Character* const dead_character, Character* const kill_character); void DeadPlayer(Player* const dead_player, Character* const kill_character); void DeadMonster(Monster* const dead_monster, Character* const kill_character); //µÎ Ç÷¹À̾îÀÇ °ü°è¸¦ ¸®ÅÏ eUSER_RELATION_TYPE IsFriendPVP(Player* attacker,Player* target); Player* FindGoldRushMember(const CHARGUID CharGuid); //vote system RC::eBATTLE_GROUND_RESULT OnInitiateVote(Player* initiate_player, Player* van_payer); void OnVote(Player* player, bool vote_result); void SendPacketToAll(MSG_BASE_FORWARD* msg, WORD msg_size); void GoldRushPenalty(Player* player); inline GoldRushBattleResult* GetGoldRushBattleResult() {return goldrush_battle_result_;} inline DWORD GetRemainTicks() const {return resurrection_timer_.GetRemainTicks(); } inline const GoldRushInfo* GetGoldRushInfo() { return goldrush_info_; } private: void _Start(); void _StartWait(); void _Result(); bool _IsAllPlayerEntered(); void _SentToAllTeamInfo(); void _SendTotalTeamPoint(); GoldRushTeam* _CreateTeam(const ChaosZoneTeam team_key); GoldRushTeam* _FindTeam(const ChaosZoneTeam team_key); GoldRushTeam* _FindReadyTeam(Player* const player); Player* _FindPlayer(const DWORD char_guid); void _DestroyTeamAll(); void _AllDeathMemberResurrectionAtSafezone(); bool _IsGoldRushEnd(); //packet void _SendPacketToAll(MSG_BASE_FORWARD* msg, WORD msg_size); private: PLAYER_HASH player_hash_; // ÀüÀåÀ» ÁøÇàÁßÀÎ ¸â¹ö GoldRushTeam* goldrush_team_[kTeamMax]; //°ñµå·¯½Ã ÆÀ struct { eGOLDRUSH_STATE goldrush_state_; ChaosZoneTeam winner_team_key_; }; // ÀüÀåÆÄ¼­ const BattleGroundInfo* battle_ground_Info_; const GoldRushInfo* goldrush_info_; const GoldRushMonsterPointParser* monsterpoint_parser_; GoldRushBattleResult* goldrush_battle_result_; //Time info struct { util::Timer limit_timer_; // °ñµå·¯½Ã Á¦ÇÑ ½Ã°£. util::Timer extra_timer_; // ¿¢½ºÆ®¶ó ŸÀ̸Ó, ¶ó½ºÆ®º¸½º°¡ Á×À¸¸é µ¿ÀÛ util::Timer start_wait_timer_; // ÀüÀåÀÔÀå ´ë±â ½Ã°£ ¹× ÀÔÀå ÈÄ Áغñ½Ã°£. ITimerBase resurrection_timer_; // ºÎȰ ½ºÄÉÁÙ¸µ }; bool is_count_message_; // Ŭ¶óÀÇ xÃÊ ³²¾Ò½À´Ï´Ù ¸Þ½ÃÁö¸¦ À§ÇÑ bool bool is_lastboss_dead_; //ÃÖÁ¾º¸½º »ç¸Á¿©ºÎ üũ }; #endif //_NA_007065_20140217_CHAOSZONE_GOLDRUSH