game2006/server/gameserver/custom_battle.h
aozhiwei 57ff329703 1
2024-03-25 20:49:09 +08:00

77 lines
2.9 KiB
C++

#pragma once
const int CUSTOM_ROOM_CUSTOM = 0;
const int CUSTOM_ROOM_NORMAL = 1;
class SocketDisconnectHandler;
class Room;
class CustomTeam;
class CustomMember;
class CustomBattle
{
public:
void Init();
void UnInit();
bool GetParseOk() { return parse_ok_; }
Room* GetRoom() { return room_; }
void SetRoom(Room* room) { room_ = room; }
const std::string& GetRoomId() { return room_id_; }
const std::string& GetRoomUuid() { return room_uuid_; }
const std::string& GetSign() { return sign_; }
const std::shared_ptr<a8::XObject>& GetRawData() { return raw_data_; }
int GetZoneId() { return zone_id_; }
int GetNodeId() { return zone_id_; }
int GetMapId() { return map_id_; }
RoomType_e GetRoomType();
RoomMode_e GetRoomMode();
int GetStartTime() { return start_time_; }
void ParseResult(a8::XObject& obj);
std::shared_ptr<CustomTeam> GetTeamByAccountId(const std::string& account_id);
std::shared_ptr<CustomTeam> GetTeamByIdx(int idx);
std::shared_ptr<CustomMember> GetMemberByAccountId(const std::string& account_id);
std::shared_ptr<CustomTeam> GetTeamByTeamUuid(const std::string& team_uuid);
std::shared_ptr<CustomMember> GetObByAccountId(const std::string& account_id);
bool AllIsJoined();
int GetMemberNum();
int GetTeamNum();
void TraverseMemberList(std::function<bool (CustomMember*)> func);
void TraverseTeamList(std::function<bool (std::shared_ptr<CustomTeam>)> cb);
void TraverseObList(std::function<bool (std::shared_ptr<CustomMember>)> cb);
void SetCustomRoomType(int custom_room_type) { custom_room_type_ = custom_room_type; }
bool IsNormalMode() { return custom_room_type_ == CUSTOM_ROOM_NORMAL; }
bool IsCustomMode() { return custom_room_type_ == CUSTOM_ROOM_CUSTOM; }
bool IsPvp() { return !is_moba_; }
bool IsMoba() { return is_moba_; }
void OnEnter(std::shared_ptr<cs::CMJoin> join_msg, long ip_saddr, int socket_handle,
std::weak_ptr<SocketDisconnectHandler> sd_handler);
void OnMemberReady(CustomMember* member);
private:
void CalcTeam1AverageHeroLv();
private:
bool parse_ok_ = false;
Room *room_ = nullptr;
int custom_room_type_ = CUSTOM_ROOM_CUSTOM;
bool is_moba_ = false;
std::string room_id_;
std::string room_uuid_;
int zone_id_ = 0;
int node_id_ = 0;
int map_id_ = 0;
int start_time_ = 0;
int team1_average_hero_lv_ = 0;
std::string sign_;
std::shared_ptr<a8::XObject> raw_data_;
std::vector<std::shared_ptr<CustomTeam>> team_list_;
std::map<std::string, std::shared_ptr<CustomTeam>> uuid_hash_;
std::shared_ptr<CustomTeam> ob_team_;
std::map<std::string, std::shared_ptr<CustomTeam>> account_hash_;
std::map<std::string, std::shared_ptr<CustomMember>> member_id_hash_;
std::map<std::string, std::shared_ptr<CustomMember>> ob_id_hash_;
std::map<int, std::shared_ptr<CustomMember>> socket_hash_;
};