This commit is contained in:
aozhiwei 2019-03-30 11:40:46 +08:00
parent 8ade050841
commit 936a2fdd41
8 changed files with 133 additions and 40 deletions

View File

@ -50,6 +50,13 @@ enum DoorState_e
DoorStateOpen = 1 DoorStateOpen = 1
}; };
enum GasMode_e
{
GasInactive = 0,
GasWaiting = 1,
GasMoving = 2
};
const char* const PROJ_NAME_FMT = "game%d_gameserver"; const char* const PROJ_NAME_FMT = "game%d_gameserver";
const char* const PROJ_ROOT_FMT = "/data/logs/%s"; const char* const PROJ_ROOT_FMT = "/data/logs/%s";
@ -60,3 +67,5 @@ const int SYS_RESET_TIME = 2*60; //每日两点重置
const int DEF_HELMET_ID = 12404; const int DEF_HELMET_ID = 12404;
const int DEF_CHEST_ID = 12401; const int DEF_CHEST_ID = 12401;
const int DEF_WEAPON_ID = 12103; const int DEF_WEAPON_ID = 12103;
const int GAS_INACTIVE_TIME = 30;

View File

@ -192,3 +192,9 @@ MetaData::Drop* MetaMgr::GetDrop(int drop_id)
auto itr = loader_->drop_hash.find(drop_id); auto itr = loader_->drop_hash.find(drop_id);
return itr != loader_->drop_hash.end() ? itr->second : nullptr; return itr != loader_->drop_hash.end() ? itr->second : nullptr;
} }
MetaData::SafeArea* MetaMgr::GetSafeArea(int area_id)
{
auto itr = loader_->safearea_hash.find(area_id);
return itr != loader_->safearea_hash.end() ? itr->second : nullptr;
}

View File

@ -23,6 +23,7 @@ class MetaMgr : public a8::Singleton<MetaMgr>
MetaData::Equip* GetEquip(int id); MetaData::Equip* GetEquip(int id);
MetaData::Building* GetBuilding(int building_id); MetaData::Building* GetBuilding(int building_id);
MetaData::Drop* GetDrop(int drop_id); MetaData::Drop* GetDrop(int drop_id);
MetaData::SafeArea* GetSafeArea(int area_id);
private: private:
MetaDataLoader* loader_ = nullptr; MetaDataLoader* loader_ = nullptr;

View File

@ -291,6 +291,27 @@ void Player::FillMFPlayerData(cs::MFActivePlayerData* player_data)
player_data->set_has_action(false); player_data->set_has_action(false);
} }
void Player::FillMFGasData(cs::MFGasData* gas_data)
{
gas_data->set_mode(room->gas_data.gas_mode);
if (room->gas_data.gas_mode == GasInactive) {
long long duration = GAS_INACTIVE_TIME * 20 - (room->frame_no - room->gas_data.gas_start_frameno);
gas_data->set_duration(std::max(duration * 50, (long long)1000) / 1000);
} else {
if (room->gas_data.area_meta->i->wait_time() <= 0) {
gas_data->set_duration(0);
} else {
long long duration = room->gas_data.area_meta->i->wait_time() * 20 -
(room->frame_no - room->gas_data.gas_start_frameno);
gas_data->set_duration(std::max(duration * 50, (long long)1000) / 1000);
}
}
room->gas_data.pos_old.ToPB(gas_data->mutable_pos_old());
room->gas_data.pos_new.ToPB(gas_data->mutable_pos_new());
gas_data->set_rad_old(room->gas_data.rad_old);
gas_data->set_rad_new(room->gas_data.rad_new);
}
void Player::MakeUpdateMsg() void Player::MakeUpdateMsg()
{ {
update_msg->Clear(); update_msg->Clear();
@ -327,6 +348,13 @@ void Player::MakeUpdateMsg()
update_msg->set_active_player_id(entity_uniid); update_msg->set_active_player_id(entity_uniid);
FillMFPlayerData(update_msg->mutable_active_player_data()); FillMFPlayerData(update_msg->mutable_active_player_data());
} }
if (updated_times == 0 || last_sync_gas_frameno < room->gas_data.gas_start_frameno) {
last_sync_gas_frameno = room->gas_data.gas_start_frameno;
FillMFGasData(update_msg->mutable_gas_data());
}
if (room->gas_data.gas_mode == GasMoving) {
update_msg->set_gas_progress(room->gas_data.gas_progress);
}
update_msg->set_alive_count(room->AliveCount()); update_msg->set_alive_count(room->AliveCount());
{ {

View File

@ -11,6 +11,7 @@ namespace cs
class CMSpectate; class CMSpectate;
class CMVoice; class CMVoice;
class MFActivePlayerData; class MFActivePlayerData;
class MFGasData;
} }
class Room; class Room;
@ -63,9 +64,11 @@ class Player : public Human
void _CMVoice(f8::MsgHdr& hdr, const cs::CMVoice& msg); void _CMVoice(f8::MsgHdr& hdr, const cs::CMVoice& msg);
void FillMFPlayerData(cs::MFActivePlayerData* player_data); void FillMFPlayerData(cs::MFActivePlayerData* player_data);
void FillMFGasData(cs::MFGasData* gas_data);
private: private:
cs::SMUpdate* update_msg = nullptr; cs::SMUpdate* update_msg = nullptr;
long long last_sync_gas_frameno = 0;
void MakeUpdateMsg(); void MakeUpdateMsg();
}; };

View File

@ -12,6 +12,7 @@ enum RoomState_e
namespace MetaData namespace MetaData
{ {
struct Map; struct Map;
struct SafeArea;
} }
struct RoomFrameData struct RoomFrameData
@ -34,6 +35,7 @@ public:
MetaData::Map* map_meta = nullptr; MetaData::Map* map_meta = nullptr;
RoomFrameData frame_data; RoomFrameData frame_data;
long long frame_no = 0; long long frame_no = 0;
GasData gas_data;
void Update(int delta_time); void Update(int delta_time);
bool IsFull(); bool IsFull();

View File

@ -40,3 +40,20 @@ struct Vector2D
static const Vector2D LEFT; static const Vector2D LEFT;
static const Vector2D RIGHT; static const Vector2D RIGHT;
}; };
namespace MetaData
{
struct SafeArea;
}
struct GasData
{
GasMode_e gas_mode = GasInactive;
Vector2D pos_old;
Vector2D pos_new;
float rad_old = 0.0f;
float rad_new = 0.0f;
float gas_progress = 0.0f;
long long gas_start_frameno = 0;
MetaData::SafeArea* area_meta = nullptr;
};

View File

@ -88,6 +88,7 @@ message MFVector2D
optional float y = 2; //y轴 optional float y = 2; //y轴
} }
//
message MFMapObject message MFMapObject
{ {
//type //type
@ -96,6 +97,7 @@ message MFMapObject
optional int32 scale = 3; // optional int32 scale = 3; //
} }
//
message MFPlayerInfo message MFPlayerInfo
{ {
optional int32 player_id = 1; optional int32 player_id = 1;
@ -344,42 +346,66 @@ message MFActivePlayerData
optional int32 action_item_id = 5; optional int32 action_item_id = 5;
optional int32 action_target_id = 6; optional int32 action_target_id = 6;
optional int32 cur_scope = 10; optional int32 cur_scope = 10; // 1 2 4 8 15
repeated int32 inventory = 11; /*
0: 9mm
1: 762mm
2: 556mm
3: 12gauge
4: frag
5: smoke
6: bandage
7: healthkit
8: soda
9: painkiller
optional int32 cur_weap_idx = 15; 10: 1xscope
// repeated int32 weapons = 16; 11: 2xscope
12: 4xscope
13: 8xscope
14: 15xscope
*/
repeated int32 inventory = 11; //
optional int32 cur_weap_idx = 15; // 0-3
repeated int32 weapons = 16; //
optional int32 spectator_count = 20; optional int32 spectator_count = 20;
} }
// //
message MFGasData message MFGasData
{ {
optional int32 mode = 1; //0:inactive 1:waiting 2:moveing /*
optional float duration = 2; 0:
optional MFVector2D pos_old = 3; 1:
optional MFVector2D pos_new = 4; 2:
optional float rad_old = 5; */
optional float rad_new = 6; optional int32 mode = 1; //0:inactive 1:waiting 2:moving
optional float duration = 2; //()
optional MFVector2D pos_old = 3; //
optional MFVector2D pos_new = 4; //
optional float rad_old = 5; //
optional float rad_new = 6; //
} }
//
message MFTeamData message MFTeamData
{ {
optional int32 player_id = 1; optional int32 player_id = 1; //id
optional MFVector2D pos = 2; optional MFVector2D pos = 2; //
optional MFVector2D dir = 3; optional MFVector2D dir = 3; //
optional float health = 4; optional float health = 4; //
optional bool disconnected = 5; optional bool disconnected = 5; //线
optional bool dead = 6; optional bool dead = 6; //
optional bool downed = 7; optional bool downed = 7; //
} }
// //
message MFTeammateInfo message MFTeammateInfo
{ {
optional int32 team_id = 1; optional int32 team_id = 1; //id
repeated int32 player_ids = 2; repeated int32 player_ids = 2; //id列表
} }
// //
@ -397,44 +423,47 @@ message MFBullet
optional int32 gun_id = 10; //id optional int32 gun_id = 10; //id
} }
//
message MFShot message MFShot
{ {
optional int32 player_id = 1; optional int32 player_id = 1; //id
optional int32 weapon_id = 2; optional int32 weapon_id = 2; //id
optional bool offhand = 3; optional bool offhand = 3;
optional int32 bullskin = 4; optional int32 bullskin = 4;
} }
//
message MFExplosion message MFExplosion
{ {
optional MFVector2D pos = 1; optional MFVector2D pos = 1; //
optional int32 type = 2; optional int32 type = 2;
} }
//
message MFEmote message MFEmote
{ {
optional int32 type = 1; optional int32 type = 1;
optional int32 is_ping = 2; optional int32 is_ping = 2;
optional int32 player_id = 3; optional int32 player_id = 3; //id
optional MFVector2D pos = 4; optional MFVector2D pos = 4; //
optional string msg = 5; optional string msg = 5;
} }
//xx //
message MFPlayerStats message MFPlayerStats
{ {
optional int32 player_id = 1; optional int32 player_id = 1; //id
optional string player_avatar_url = 2; optional string player_avatar_url = 2; //
optional int32 time_alive = 3; optional int32 time_alive = 3; //
optional int32 kills = 4; optional int32 kills = 4; //
optional int32 dead = 5; optional int32 dead = 5; //
optional int32 damage_type = 6; optional int32 damage_type = 6;
optional int32 source_type = 30; optional int32 source_type = 30;
optional int32 killer_id = 7; optional int32 killer_id = 7; //id()
optional int32 damage_given = 8; optional int32 damage_given = 8;
optional int32 damage_taken = 9; optional int32 damage_taken = 9;
optional int32 gold = 10; optional int32 gold = 10; //
optional int32 all_score = 11; optional int32 all_score = 11; //
optional int32 score_rank = 12; optional int32 score_rank = 12;
optional int32 score_kill = 13; optional int32 score_kill = 13;
optional int32 score_dmg_given = 14; optional int32 score_dmg_given = 14;
@ -446,7 +475,7 @@ message MFPlayerStats
optional int32 chg_elo = 19; optional int32 chg_elo = 19;
optional int32 heal_heath = 20; optional int32 heal_heath = 20;
optional string account_id = 21; optional string account_id = 21; //id
repeated MFGoods annual_goods = 22; repeated MFGoods annual_goods = 22;
} }
@ -519,9 +548,7 @@ message CMEmote
{ {
optional int32 type = 1; optional int32 type = 1;
optional MFVector2D pos = 2; optional MFVector2D pos = 2;
//optional bool use_loadout = 3;
optional bool team_only = 4; optional bool team_only = 4;
//optional bool is_ping = 5;
} }
// //
@ -578,8 +605,8 @@ message SMUpdate
optional int32 active_player_id = 5; //id(id) optional int32 active_player_id = 5; //id(id)
optional MFActivePlayerData active_player_data = 6; //() optional MFActivePlayerData active_player_data = 6; //()
optional int32 alive_count = 15; // optional int32 alive_count = 15; //
optional int32 gasT = 16; // optional int32 gas_progress = 16; //
optional MFGasData gas_data = 17; // optional MFGasData gas_data = 17; //
repeated MFTeamData team_data = 18; repeated MFTeamData team_data = 18;
repeated MFTeammateInfo teams = 19; // repeated MFTeammateInfo teams = 19; //
repeated MFBullet bullets = 20; // repeated MFBullet bullets = 20; //
@ -591,7 +618,7 @@ message SMUpdate
optional uint32 data_flags32 = 256; optional uint32 data_flags32 = 256;
} }
//xx //
message SMKillMsg message SMKillMsg
{ {
optional int32 damage_type = 1; optional int32 damage_type = 1;