From 1ad123d4c177b21ec8aacb1a208c3bc7e743f4e8 Mon Sep 17 00:00:00 2001 From: aozhiwei Date: Wed, 13 Mar 2019 17:05:22 +0800 Subject: [PATCH] 1 --- server/gameserver/constant.h | 233 ------------------------- server/gameserver/metadata.h | 8 +- server/gameserver/metamgr.cc | 16 +- server/gameserver/player.h | 1 + server/gameserver/room.cc | 30 ++++ server/gameserver/room.h | 24 +++ server/gameserver/roommgr.cc | 4 +- server/gameserver/roommgr.h | 5 + server/tools/protobuild/cs_proto.proto | 10 +- 9 files changed, 80 insertions(+), 251 deletions(-) diff --git a/server/gameserver/constant.h b/server/gameserver/constant.h index 3f59f47..7771168 100755 --- a/server/gameserver/constant.h +++ b/server/gameserver/constant.h @@ -3,9 +3,6 @@ enum SocketFrom_e { SF_GameGate, - SF_DBServer, - SF_BattleServer, - SF_DBProxy, }; enum InnerMesssage_e @@ -16,10 +13,7 @@ enum InnerMesssage_e IM_DBSConnDisconnect, IM_BSConnDisconnect, IM_LoadConfig, - IM_DPSConnDisconnect, IM_HttpResponse, - - IM_AddHero2PVPTeam = 200, }; //网络处理对象 @@ -30,16 +24,6 @@ enum NetHandler_e HID_Room, HID_RoomMgr, HID_GGListener, - HID_Storage, - HID_DBEngine, - HID_Mission, - HID_Shop, - HID_MailMgr, - HID_ArenaMgr, - HID_ActivityMgr, - HID_FriendMgr, - HID_GuildMgr, - HID_SpaMgr, }; enum PlayerState_e @@ -58,230 +42,13 @@ enum VirtualItemId_e enum SyncData_e { SYNC_Data_Exp = 0, - SYNC_Data_Gold, - SYNC_Status_Flags, - SYNC_Place_Param, - SYNC_Opened_stage, - SYNC_Passed_stage, - SYNC_Bag_Capacity, - SYNC_Bag_Unlock_Remain_Seconds, - SYNC_Hero_list, - SYNC_Current_Chapter_Id, - SYNC_passed_chapter_id, - SYNC_explored_max_chapter_id, - SYNC_soul_utensil, - SYNC_soul_stone, - SYNC_Pickaxe, - SYNC_Dig_Mine_Count_Day, - SYNC_spa_id, - SYNC_spa_reward_box_count, - SYNC_pve_leader_id, - SYNC_Place_Param2, - SYNC_Place_Param3, - SYNC_curr_pos_x, - SYNC_curr_pos_y, - SYNC_data_guild_id, - SYNC_path_points, - SYNC_hint_flags, - SYNC_level, - SYNC_fight_value, -}; - -enum HeroAbilityType -{ - HAT_hp = 1, - HAT_pa = 2, - HAT_pd = 3, - HAT_ma = 4, - HAT_md = 5, - HAT_cc = 6, - HAT_anger = 7, - HAT_ct = 8, - HAT_dd = 9, -}; - -enum MailType -{ - MT_NORMAL_PERSONAL_MAIL = 0, - MT_SYS_PERSONAL_MAIL = 1, - MT_GROUP_MAIL = 2, -}; - -enum HintFlag -{ - HF_xx0 = 0, - HF_ACTIVITY = 1, - HF_UNREAD_MAIL = 2, - HF_DAILY_MISSION_RECEIVABLE = 3, - HF_CHALLENGE_MISSION_RECEIVABLE = 4, - HF_ACHIEVMENT_MISSION_RECEIVABLE = 5, - HF_DAILY_MISSION_ACTIVE_RECEIVABLE = 6, - HF_HAS_PET_LOTTERY_DAILY_FREE = 7, - HF_HAS_PET_LOTTERY_LUXURY_FREE = 8, - HF_HAS_PET_MISSION_RECEIVABLE = 9, - HF_ACTIVITY_SIGNIN = 10, - HF_DIANJIN = 11, - HF_GUILD_MISSION_RECEIVABLE = 12, - HF_GUILD_SKILL_CAN_UPDATE = 13, - HF_GUILD_BOSS_AWARD_RECEIVABLE = 14, - HF_HAS_NEW_TITLE = 15, - HF_HAS_PARTY_INVITE = 16, - HF_HAS_UNUSE_VOW_TIMES = 17, -}; - -enum ACTIVITY_TYPE -{ - AT_FIRST_RECHARGE = 1, //首充 - AT_SEVEN_DAY = 2, //7日礼包 - AT_LEVEL_AWARD = 3, //等级礼包 - AT_SIGN = 4, //月签到 - AT_ACCUMULATIVE_RECHARGE = 5, //累计充值 - AT_LEVEL_LIMIT = 6, //限量等级礼包 - AT_FIGHT_RANK = 7, //战力达人 - AT_GROW_UP = 8, //成长计划 - AT_ACCUMULATIVE_CRYSTAL = 9, //累计消费 - AT_WHEEL = 10, //转盘 - AT_ONLINETIME = 11, //在线时长 - AT_RECHARGE_FEEDBACK = 12, //单笔反馈 - AT_RECHARGE_DAY = 13, //累计充值天数 - AT_RECHARGE_SELECT = 14, //自选豪礼 - AT_RECHARGE_DAY_SMALL = 15, //天天礼包 -}; - -enum TASK_NO -{ - TN_mission_point = 1, // 记录日常任务活跃点数 - TN_mission_treasurebox = 2, // 记录玩家每日任务宝箱领取状态 1:每日任务宝箱,按位存 - - TN_enter_arena_count = 10, //进入竞技场次数 0:累计 1:今天 - TN_equip_compose_count = 11, //装备合成次数 0:累计 1:今天 - TN_hero_upgrade_count = 12, //武将升级次数 0:累计 1:今天 - TN_enter_spa_count = 13, //进入温泉次数 0:累计 1:今天 - TN_summon_hero_count = 14, //召唤武将次数 0:累计 1:今天 - - TN_arena = 20, // 1:挑战次数 2:购买次数 - - TN_spa_obtain_hero_count = 30, //温泉领取英雄宝箱次数 只可领取一次 - - TN_activity1 = 41, //1:已签到天数, 2:今天是否签到 - TN_activity2 = 42, //1:当前已经领取的id - TN_activity3 = 43, //1:今天已经领取的id - - TN_login = 80, //1:今天登陆次数 - - TN_last_quit_guild_time = 220, // 退出公会的24小时内,不可操作某些功能,此为记录该最后退出公会时间 - TN_guild_donate_count = 240, // 每日公会贡献记录 (1 : 每日 2: 累计) -}; - -enum MissionType_e -{ - MT_daily = 1, //每日任务 - MT_challenge, - MT_achievment, -}; - -enum MissionStatus_e -{ - MS_default = 1, //未接取 - MS_complete_already_taken, //完成且已领奖 - MS_accept, //已接取 - MS_complete_not_taken, //完成但是未领奖 -}; - -enum MissionBoxTakenStatus_e -{ - MBTS_cannot_take = 1, //未满足条件 不能领取 - MBTS_can_take, // 可领取 - MBTS_already_taken, //已经领取 -}; - -enum BattleType_e -{ - BT_NormalInstance = 0, //普通副本 - BT_ElitistInstance = 1, //精英副本 - BT_Arena = 2, //竞技场 -}; - -enum RankingType_e -{ - RT_Arena = 1, //竞技场排行 -}; - -enum GetRoleType_e -{ - GR_Arena = 1, -}; - -enum GetHumanInfo_e -{ - GH_Arena = 1, -}; - -enum Week_e -{ - MONDAY = 1, -}; - -enum HintFlags_e -{ - HF_Mail = 0, - HF_Activity = 1, - HF_Daily_Mission_Receivable = 2, - HF_Spa = 3, -}; - -//Item产出原因 -enum ItemProduceReason_e -{ - IPR_Pass_Stage = 1, //通关 - IPR_Place = 2, //挂机 - IPR_Activity = 3, //活动 - IPR_Mail = 4, //邮件附件 - IPR_Hero_Summon = 5, //英雄合成 - IPR_Enjoy_Spa = 6, //泡温泉 -}; - -//Item消耗原因 -enum ItemConsumeReason_e -{ - ICR_Hero_Summon = 1, //英雄合成 - ICR_Hero_Upgrade_Level = 2, //英雄升级 - ICR_Hero_Upgrade_Quality = 3, //英雄进阶 - ICR_Hero_Upgrade_Equip_Level = 4, //装备强化 - ICR_Hero_Upgrade_Equip_Quality = 5, //装备进阶 -}; - -enum NoticeType -{ - NT_Obtain_Hero = 10001, //获得英雄 }; const char* const PROJ_NAME_FMT = "game%d_gameserver"; const char* const PROJ_ROOT_FMT = "/data/logs/%s"; -const int POSTFIX_LEN = 7; const float TEN_W = 10000 * 10; -const int INIT_CHAPTER_ID = 110100; - -const int PLACE_REWARD_ITEM_CAPACITY = 6; - -const int QUALITY_MAX = 5; //最高品质 -const int EQUIP_POS_MAX = 6; //装备最高位 - -const int EQUIP_HERO_INTERVAL_LEVEL = 5; //装备等级不超过武将等级5级 -const int SOUL_UTENSIL_INTERVAL_LEVEL = 1; //魂石等级不超过魂导器等级1级 - const int SYS_RESET_TIME = 2*60; //每日两点重置 -const int ELITIST_INSTANCE_TILI = 5; //精英副本体力 -const int GEMSTONE_SLOT = 3; //宝石槽数量 -const int SPA_MEMBER = 3; //泡温泉用户数量 -const int SPA_ENJOY_TIME = 4; //泡温泉时间4个小时 单位s -const int SPA_BARRAGE_COUNT = 100; //温泉弹幕缓存量 -const int STORAGE_GRID_MAX = 50; //仓库格子上限 -const int REFRESH_COST = 10; //商店刷新需要的钱 - -const int MAX_PVP_RANK = 2000; -const int MAX_PLACE_REWARD_COUNT = 8;//算上经验和金币两个 diff --git a/server/gameserver/metadata.h b/server/gameserver/metadata.h index 37e6ed2..d3e0308 100755 --- a/server/gameserver/metadata.h +++ b/server/gameserver/metadata.h @@ -7,22 +7,22 @@ namespace MetaData struct Map { - const metatable::Map* meta = nullptr; + const metatable::Map* i = nullptr; }; struct SafeArea { - const metatable::SafeArea* meta = nullptr; + const metatable::SafeArea* i = nullptr; }; struct Item { - const metatable::Item* meta = nullptr; + const metatable::Item* i = nullptr; }; struct Equip { - const metatable::Equip* meta = nullptr; + const metatable::Equip* i = nullptr; }; } diff --git a/server/gameserver/metamgr.cc b/server/gameserver/metamgr.cc index 97f9cdb..faa09fd 100755 --- a/server/gameserver/metamgr.cc +++ b/server/gameserver/metamgr.cc @@ -47,26 +47,26 @@ private: for (auto& meta : map_meta_list) { MetaData::Map& item = a8::FastAppend(map_list); - item.meta = &meta; - gamemap_hash[item.meta->map_id()] = &item; + item.i = &meta; + gamemap_hash[item.i->map_id()] = &item; } for (auto& meta : safearea_meta_list) { MetaData::SafeArea& item = a8::FastAppend(safearea_list); - item.meta = &meta; - safearea_hash[item.meta->id()] = &item; + item.i = &meta; + safearea_hash[item.i->id()] = &item; } for (auto& meta : item_meta_list) { MetaData::Item& item = a8::FastAppend(item_list); - item.meta = &meta; - item_hash[item.meta->id()] = &item; + item.i = &meta; + item_hash[item.i->id()] = &item; } for (auto& meta : equip_meta_list) { MetaData::Equip& item = a8::FastAppend(equip_list); - item.meta = &meta; - equip_hash[item.meta->id()] = &item; + item.i = &meta; + equip_hash[item.i->id()] = &item; } } diff --git a/server/gameserver/player.h b/server/gameserver/player.h index 06bde56..b5f4d8c 100644 --- a/server/gameserver/player.h +++ b/server/gameserver/player.h @@ -15,6 +15,7 @@ class Player enum { HID = HID_Player }; public: + std::string account_id; int obj_uniid = 0; float health = 0.0; diff --git a/server/gameserver/room.cc b/server/gameserver/room.cc index e69de29..1e20abe 100644 --- a/server/gameserver/room.cc +++ b/server/gameserver/room.cc @@ -0,0 +1,30 @@ +#include "precompile.h" + +#include "playermgr.h" +#include "player.h" +#include "cs_proto.pb.h" +#include "room.h" + +const int ROOM_MAX_PLAYER_NUM = 50; + +bool Room::IsFull() +{ + return accountid_hash_.size() >= ROOM_MAX_PLAYER_NUM; +} + +int Room::GetPlayerNum() +{ + return accountid_hash_.size(); +} + +Player* Room::GetPlayerByAccountId(const std::string& accountid) +{ + auto itr = accountid_hash_.find(accountid); + return itr != accountid_hash_.end() ? itr->second : nullptr; +} + +Player* Room::GetPlayerByUniId(int uniid) +{ + auto itr = uniid_hash_.find(uniid); + return itr != uniid_hash_.end() ? itr->second : nullptr; +} diff --git a/server/gameserver/room.h b/server/gameserver/room.h index fc01815..c1570e8 100644 --- a/server/gameserver/room.h +++ b/server/gameserver/room.h @@ -1,8 +1,32 @@ #pragma once +enum RoomState_e +{ + RS_Inactive = 0, + RS_Waiting = 1, + RS_Moveing = 2 +}; + +namespace MetaData +{ + struct Map; +} + +class Player; class Room { +public: + MetaData::Map* map_meta = nullptr; + + bool IsFull(); + int GetPlayerNum(); + Player* GetPlayerByAccountId(const std::string& accountid); + Player* GetPlayerByUniId(int uniid); + private: long long room_id_ = 0; + RoomState_e state_ = RS_Inactive; + std::map accountid_hash_; + std::map uniid_hash_; }; diff --git a/server/gameserver/roommgr.cc b/server/gameserver/roommgr.cc index cbb139e..9b15c81 100644 --- a/server/gameserver/roommgr.cc +++ b/server/gameserver/roommgr.cc @@ -3,6 +3,7 @@ #include "roommgr.h" #include "room.h" #include "cs_proto.pb.h" +#include "GGListener.h" void RoomMgr::Init() { @@ -16,5 +17,6 @@ void RoomMgr::UnInit() void RoomMgr::_CMJoin(f8::MsgHdr& hdr, const cs::CMJoin& msg) { - + cs::SMJoinedNotify notifymsg; + GGListener::Instance()->SendToClient(hdr.socket_handle, hdr.seqid, notifymsg); } diff --git a/server/gameserver/roommgr.h b/server/gameserver/roommgr.h index 65850c9..010447a 100644 --- a/server/gameserver/roommgr.h +++ b/server/gameserver/roommgr.h @@ -5,6 +5,7 @@ namespace cs class CMJoin; } +class Room; class RoomMgr : public a8::Singleton { public: @@ -19,4 +20,8 @@ class RoomMgr : public a8::Singleton void UnInit(); void _CMJoin(f8::MsgHdr& hdr, const cs::CMJoin& msg); + + private: + std::map inactive_room_hash_; + std::map room_hash_; }; diff --git a/server/tools/protobuild/cs_proto.proto b/server/tools/protobuild/cs_proto.proto index ffb3405..c37ec14 100755 --- a/server/tools/protobuild/cs_proto.proto +++ b/server/tools/protobuild/cs_proto.proto @@ -449,7 +449,7 @@ message SMReConnect message CMJoin { optional string team_uuid = 2; //队伍唯一id (没组队时为空字符串) - optional int32 team_mode = 3; //队伍模式 + optional int32 team_mode = 3; //队伍模式 0:单人 1:多人 optional int32 player_count = 4; //玩家数(单人时为1) optional int32 auto_fill = 5; //是否自动填充玩家 optional int32 bot = 6; //是否机器人 @@ -542,10 +542,10 @@ message CMVoice //加入成功 message SMJoinedNotify { - optional int32 team_mode = 1; - optional int32 player_id = 2; - optional bool started = 3; - repeated MFPlayerInfo player_infos = 4; + optional int32 team_mode = 1; //队伍模式 0:单人 1:多人 + optional int32 player_id = 2; //玩家id + optional bool started = 3; //游戏是否已开始 + repeated MFPlayerInfo player_infos = 4; //玩家信息 optional int32 map_type = 5; optional bool elo_start = 6; }