diff --git a/server/gameserver/framedata.cc b/server/gameserver/framedata.cc index 372007ba..24f1f9fc 100644 --- a/server/gameserver/framedata.cc +++ b/server/gameserver/framedata.cc @@ -49,9 +49,6 @@ void FrameData::ClearFrameData(Human* hum) if (!explosions_.empty()) { explosions_.clear(); } - if (!smokes_.empty()) { - smokes_.clear(); - } if (!play_skills_.empty()) { play_skills_.clear(); } diff --git a/server/gameserver/framedata.h b/server/gameserver/framedata.h index f7953f1d..7be616a0 100644 --- a/server/gameserver/framedata.h +++ b/server/gameserver/framedata.h @@ -27,7 +27,6 @@ class FrameData std::vector shots_; std::vector emotes_; std::vector bullets_; - std::vector smokes_; std::vector play_skills_; std::vector explosions_; std::vector chged_buffs_; diff --git a/server/gameserver/frameevent.cc b/server/gameserver/frameevent.cc index ac95a836..d38ac263 100644 --- a/server/gameserver/frameevent.cc +++ b/server/gameserver/frameevent.cc @@ -222,32 +222,6 @@ void FrameEvent::AddBulletNumChg(CreatureWeakPtr& sender) } } -void FrameEvent::AddSmoke(Bullet* bullet, int item_id, glm::vec3 pos, float time_addition) -{ - if (!bullet->sender.Get()) { - return; - } - { - auto& tuple = a8::FastAppend(room->frame_event_data->smokes_); - std::get<0>(tuple).Attach(bullet->sender.Get()); - auto& p = std::get<1>(tuple); - - p.set_item_id(item_id); - TypeConvert::ToPb(pos, p.mutable_pos()); - p.set_player_id(bullet->sender.Get()->GetUniId()); - p.set_time_addition(time_addition); - } - { - int idx = room->frame_event_data->smokes_.size() - 1; - bullet->sender.Get()->TraverseAllLayerHumanList - ( - [idx] (Human* hum, bool& stop) - { - hum->GetFrameData().smokes_.push_back(idx); - }); - } -} - void FrameEvent::AddPlaySkill(CreatureWeakPtr& sender, int skill_id) { if (!sender.Get()) { diff --git a/server/gameserver/frameevent.h b/server/gameserver/frameevent.h index 282b001f..deb6cc30 100644 --- a/server/gameserver/frameevent.h +++ b/server/gameserver/frameevent.h @@ -29,7 +29,6 @@ public: std::shared_ptr> reporter_list); void RemoveBullet(glm::vec3 pos, int bullet_uniid); void AddExplosion(Bullet* bullet, int item_id, Position bomb_pos); - void AddSmoke(Bullet* bullet, int item_id, glm::vec3 pos, float time_addition); void AddPlaySkill(CreatureWeakPtr& sender, int skill_id); void AddExplosionEx(CreatureWeakPtr& sender, int item_id, Position bomb_pos, int effect); void AddBulletNumChg(CreatureWeakPtr& sender); diff --git a/server/gameserver/framemaker.cc b/server/gameserver/framemaker.cc index c103b295..bfd76db1 100644 --- a/server/gameserver/framemaker.cc +++ b/server/gameserver/framemaker.cc @@ -106,7 +106,6 @@ cs::SMUpdate* FrameMaker::MakeUpdateMsg(Human* hum) SerializeShots(msg, room, hum, framedata); SerializeEmotes(msg, room, hum, framedata); SerializeBullets(msg, room, hum, framedata); - SerializeSmokes(msg, room, hum, framedata); SerializePlaySkills(msg, room, hum, framedata); SerializeExplosions(msg, room, hum, framedata); SerializeChgedBuffs(msg, room, hum, framedata); @@ -166,10 +165,6 @@ void FrameMaker::PostProcess(cs::SMUpdate* msg, Room* room, Human* hum, FrameDat glm::vec3 v3(room->GetGasData().pos_old.x, 0.0f, room->GetGasData().pos_old.y); TypeConvert::ToPb(v3, msg->mutable_gas_pos_old()); } - if (room->GetFrameNo() - room->AliveCountChgFrameNo() <= 4 || - room->GetFrameNo() - hum->join_frameno <= 2) { - msg->set_alive_count(room->AliveCount()); - } if (room->IsPveRoom()) { int left_time = room->GetIncubator()->GetPveLeftTime(); msg->set_game_left_time(left_time); @@ -364,19 +359,6 @@ void FrameMaker::SerializeBullets(cs::SMUpdate* msg, Room* room, Human* hum, Fra } } -void FrameMaker::SerializeSmokes(cs::SMUpdate* msg, Room* room, Human* hum, FrameData* framedata) -{ - for (size_t idx : framedata->smokes_) { - msg->mutable_smokes()->Reserve(framedata->smokes_.size()); - if (idx < room->frame_event_data->smokes_.size()) { - auto& tuple = room->frame_event_data->smokes_[idx]; - if (std::get<0>(tuple).Get() && hum->CanSee(std::get<0>(tuple).Get())) { - *msg->add_smokes() = std::get<1>(tuple); - } - } - } -} - void FrameMaker::SerializePlaySkills(cs::SMUpdate* msg, Room* room, Human* hum, FrameData* framedata) { for (size_t idx : framedata->play_skills_) { diff --git a/server/gameserver/framemaker.h b/server/gameserver/framemaker.h index 55218171..defecd32 100644 --- a/server/gameserver/framemaker.h +++ b/server/gameserver/framemaker.h @@ -30,7 +30,6 @@ private: void SerializeShots(cs::SMUpdate* msg, Room* room, Human* hum, FrameData* framedata); void SerializeEmotes(cs::SMUpdate* msg, Room* room, Human* hum, FrameData* framedata); void SerializeBullets(cs::SMUpdate* msg, Room* room, Human* hum, FrameData* framedata); - void SerializeSmokes(cs::SMUpdate* msg, Room* room, Human* hum, FrameData* framedata); void SerializePlaySkills(cs::SMUpdate* msg, Room* room, Human* hum, FrameData* framedata); void SerializeExplosions(cs::SMUpdate* msg, Room* room, Human* hum, FrameData* framedata); void SerializeChgedBuffs(cs::SMUpdate* msg, Room* room, Human* hum, FrameData* framedata); diff --git a/server/gameserver/room.cc b/server/gameserver/room.cc index 64bcd27a..53e5668a 100644 --- a/server/gameserver/room.cc +++ b/server/gameserver/room.cc @@ -3214,18 +3214,6 @@ void Room::ShuaLastGas() #endif } -void Room::FillObjectPositions(Human* hum, cs::SMUpdate& msg) -{ - for (auto& pair : human_hash_) { - if (pair.second != hum) { - auto p = msg.add_object_positions(); - p->set_obj_uniid(pair.second->GetUniId()); - TypeConvert::ToPb(pair.second->GetPos(), p->mutable_pos()); - TypeConvert::ToPb(pair.second->GetAttackDir(), p->mutable_dir()); - } - } -} - void Room::RemoveRescue(Human* hum) { for (auto& pair : human_hash_) { diff --git a/server/gameserver/room.h b/server/gameserver/room.h index e8aaeff2..a75bf5e8 100644 --- a/server/gameserver/room.h +++ b/server/gameserver/room.h @@ -213,7 +213,6 @@ public: Player* GetOneAlivePlayer(); void GetAlivePlayers(std::vector& humans, size_t num); int GetCanShuaNum(int shua_num); - void FillObjectPositions(Human* hum, cs::SMUpdate& msg); void RemoveRescue(Human* hum); void NotifyCountdown(const std::string& msg, int time); void NotifySysPiao(const std::string& msg, int color, int duration); diff --git a/server/tools/protobuild/cs_msgid.proto b/server/tools/protobuild/cs_msgid.proto index 6f974d8d..e3aba85f 100644 --- a/server/tools/protobuild/cs_msgid.proto +++ b/server/tools/protobuild/cs_msgid.proto @@ -63,4 +63,6 @@ enum SMMessageId_e _SMDebugCmd = 1022; _SMNewBieEnd = 1023; _SMNewsTicker = 1024; + _SMSyncPosition = 1025; + _SMSyncTeamData = 1026; } diff --git a/server/tools/protobuild/cs_proto.proto b/server/tools/protobuild/cs_proto.proto index 6792c30f..fcd9cddf 100755 --- a/server/tools/protobuild/cs_proto.proto +++ b/server/tools/protobuild/cs_proto.proto @@ -690,6 +690,39 @@ message MFTeamData repeated MFSkin skin = 39; //皮肤id } +//队伍数据 +message MFTeamDataNew +{ + optional int32 team_id = 61; //队伍Id + optional int32 player_id = 1; //玩家id + optional MFVec3 pos = 2; //位置 + optional MFVec3 dir = 3; //方向 + optional float health = 4; //血量 + optional bool disconnected = 5 [default = false]; //是否短线 + optional bool dead = 6 [default = false]; //是否死亡 + optional bool downed = 7 [default = false]; //是否倒下 + optional string name = 8; //名字(只同步一次) + optional float max_health = 9; //最大血量 + optional bool riding = 40 [default = false]; //是否倒 下 + optional string user_data = 60 [default = ""]; //用户自定义数据(只同步一次) + optional int32 score = 63 [default = 0]; //pve模式积分 + optional int32 hero_id = 64 [default = 0]; //英雄id(只同步一次) + optional int32 level = 65 [default = 0]; //等级 + optional int32 hero_level = 72; //hero等级 + + //一下字段只在结算的时候该字段才有内容 + optional string account_id = 10; //账号id + optional string avatar_url = 11; //头像 + optional int64 user_value1 = 31; //对应好友系统的user_value1 + optional int64 user_value2 = 32; //对应好友系统的user_value2 + optional int64 user_value3 = 33; //对应好友系统的user_value3 + optional int64 guild_id = 34; //公会id + optional int32 vip_lv = 35 [default = 0]; //等级 + optional int32 head_frame = 36 [default = 0]; //头像框 + optional int32 sex = 37 [default = 0]; //性别 + repeated MFSkin skin = 39; //皮肤id +} + //子弹 message MFBullet { @@ -1286,6 +1319,14 @@ message MFSandTable repeated MFSandTableMsg msgs = 1; //沙盘消息列表 } +//对象位置坐标 +message MFObjPosition +{ + optional int32 obj_uniid = 1; //对象唯一id + optional MFVec3 pos = 2; //坐标 +} + + //end mfmsg //加入 @@ -1579,7 +1620,6 @@ message SMUpdate repeated MFObjectPart part_objects = 4; //对象-部分(用于插值更新) optional int32 active_player_id = 5; //当前活跃玩家id(如果玩家死亡后是观战对象的id) optional MFActivePlayerData active_player_data = 6; //活跃玩家数据(如果玩家死亡后是观战对象的数据) - optional int32 alive_count = 15; //存活数量 optional int32 gas_progress = 16; //毒圈进度,表示缩进的像素数(只有当gas_data.mode == moving时才会发进度) optional MFVec3 gas_pos_old = 30; //毒圈当前圆心坐标 optional MFGasData gas_data = 17; //毒圈数据 @@ -1587,7 +1627,6 @@ message SMUpdate repeated MFBullet bullets = 20; //子弹 repeated MFShot shots = 21; //射击 repeated MFExplosion explosions = 22; //爆炸 - repeated MFSmoke smokes = 25; //烟雾 repeated MFEmote emotes = 23; //表情 optional MFAirDrop airdrop = 26; //空投 optional MFPlane plane = 27; //飞机 @@ -1600,7 +1639,6 @@ message SMUpdate repeated MFTuple dead_alive_objs = 42; //玩家values[0]:objid values[1]:多少毫秒后复活 values[2]: 0:死亡 1:复活 //一下字段只有僵尸模式才有效 - repeated MFPosition object_positions = 43; //对象坐标信息,如果对象已经在part_objects则可能不发,这时客户端可以读取part_objects里的左边更新小地图 optional int32 game_left_time = 45; //游戏剩余时间(毫秒, 战斗开始后字段才有意义) optional int32 frameno = 46; repeated int32 del_bullets = 47; //子弹删除 @@ -1619,11 +1657,28 @@ message SMNewsTicker { /* 1:武器合成 msg_context.values[0]: 昵称 msg_context.values[1]: 武器id - */ + 2:boss出现 msg_context.values[0]: boss唯一id + msg_context.values[1]: boss hero id + msg_context.values[2]: boss x + msg_context.values[3]: boss y + msg_context.values[4]: boss z + */ optional int32 msg_type = 1; //消息类型 optional MFTupleString msg_content = 2; //消息内容 } +//同步对象坐标 +message SMSyncPosition +{ + repeated MFObjPosition obj_list = 1; //对象列表 +} + +//同步队伍数据 +message SMSyncTeamData +{ + repeated MFTeamDataNew team_list = 18; //队伍数据 +} + //游戏结束 message SMGameOver {