From 4be0ca0883c4b8fd0079bd1dcc44819e4a97888a Mon Sep 17 00:00:00 2001 From: aozhiwei Date: Fri, 9 Apr 2021 19:52:35 +0800 Subject: [PATCH 01/11] 1 --- server/gameserver/room.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/server/gameserver/room.cc b/server/gameserver/room.cc index ebc887c8..5db96d0c 100644 --- a/server/gameserver/room.cc +++ b/server/gameserver/room.cc @@ -2246,7 +2246,7 @@ ObstacleData* Room::GetPermanentObstacleData(int obstacle_uniid) long long Room::GetGasInactiveTime() { -#if DEBUG +#ifdef DEBUG return 5; #endif if (room_mode_ == kZombieMode) { From c59716b96db6f19ca986e0d443c9a4b40ef1e7ce Mon Sep 17 00:00:00 2001 From: aozhiwei Date: Fri, 9 Apr 2021 20:17:26 +0800 Subject: [PATCH 02/11] 1 --- server/gameserver/bullet.cc | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/server/gameserver/bullet.cc b/server/gameserver/bullet.cc index 47379db8..70ee8db6 100644 --- a/server/gameserver/bullet.cc +++ b/server/gameserver/bullet.cc @@ -373,6 +373,15 @@ void Bullet::ProcFragBomb(int delay_time) void Bullet::ProcPosionGasBomb(int delay_time) { if (sender.Get()) { + #if 1 + MetaData::Buff * buff_meta = MetaMgr::Instance()->GetBuff(gun_meta->i->buffid()); + if (buff_meta) { + sender.Get()->AddBuff(sender.Get(), + buff_meta, + 1 + ); + } + #else PosionGasMiTask* task = new PosionGasMiTask(); task->room = room; task->sender.Attach(sender.Get()); @@ -398,6 +407,7 @@ void Bullet::ProcPosionGasBomb(int delay_time) }, &room->timer_attacher.timer_list_ ); + #endif } } From 6e5e733174adfc9c8136a66c0f781e6834259b37 Mon Sep 17 00:00:00 2001 From: aozhiwei Date: Fri, 9 Apr 2021 20:39:33 +0800 Subject: [PATCH 03/11] 1 --- server/gameserver/bullet.cc | 3 +++ server/gameserver/constant.h | 1 + server/gameserver/creature.cc | 4 ++++ server/gameserver/creature.h | 1 + server/gameserver/roomobstacle.cc | 28 ++++++++++++++++++++++++++++ server/gameserver/roomobstacle.h | 1 + 6 files changed, 38 insertions(+) diff --git a/server/gameserver/bullet.cc b/server/gameserver/bullet.cc index 70ee8db6..99050e47 100644 --- a/server/gameserver/bullet.cc +++ b/server/gameserver/bullet.cc @@ -374,6 +374,8 @@ void Bullet::ProcPosionGasBomb(int delay_time) { if (sender.Get()) { #if 1 + a8::Vec2 old_buff_vec2_param1 = sender.Get()->buff_vec2_param1; + sender.Get()->buff_vec2_param1 = GetPos(); MetaData::Buff * buff_meta = MetaMgr::Instance()->GetBuff(gun_meta->i->buffid()); if (buff_meta) { sender.Get()->AddBuff(sender.Get(), @@ -381,6 +383,7 @@ void Bullet::ProcPosionGasBomb(int delay_time) 1 ); } + sender.Get()->buff_vec2_param1 = old_buff_vec2_param1; #else PosionGasMiTask* task = new PosionGasMiTask(); task->room = room; diff --git a/server/gameserver/constant.h b/server/gameserver/constant.h index b72db83f..c501daf9 100755 --- a/server/gameserver/constant.h +++ b/server/gameserver/constant.h @@ -383,6 +383,7 @@ enum ObstacleType_e kObstacleSelfExplosion = 1, kObstacleMine = 2, kObstacleTrap = 3, + kObstaclePosionGas = 4, }; const char* const PROJ_NAME_FMT = "game%d_gameserver"; diff --git a/server/gameserver/creature.cc b/server/gameserver/creature.cc index e0eab1c7..6da8f6c0 100644 --- a/server/gameserver/creature.cc +++ b/server/gameserver/creature.cc @@ -21,6 +21,8 @@ void InternalShot(Creature* c, { if (weapon_meta->i->_inventory_slot() == IS_TRAP || weapon_meta->i->_inventory_slot() == IS_MINE) { + a8::Vec2 old_buff_vec2_param1 = c->buff_vec2_param1; + c->buff_vec2_param1 = c->GetPos(); MetaData::Buff * buff_meta = MetaMgr::Instance()->GetBuff(bullet_meta->i->buffid()); if (buff_meta) { c->AddBuff(c, @@ -28,6 +30,7 @@ void InternalShot(Creature* c, 1 ); } + c->buff_vec2_param1 = old_buff_vec2_param1; return; } for (auto& tuple : weapon_meta->bullet_born_offset) { @@ -843,6 +846,7 @@ void Creature::ProcBuffEffect(Creature* caster, Buff* buff) case kBET_SummonObstacle: { a8::Vec2 target_pos = caster->GetPos() + caster->skill_dir_ * caster->skill_distance_; + target_pos = buff_vec2_param1; SummonObstacle(buff->meta->param1, target_pos); } break; diff --git a/server/gameserver/creature.h b/server/gameserver/creature.h index b9f17ca3..1c4d5c37 100644 --- a/server/gameserver/creature.h +++ b/server/gameserver/creature.h @@ -47,6 +47,7 @@ class Creature : public MoveableEntity long long poisoning_time = 0; Weapon car_weapon; + a8::Vec2 buff_vec2_param1; bool need_sync_active_player = false; std::function on_loading_bullet; diff --git a/server/gameserver/roomobstacle.cc b/server/gameserver/roomobstacle.cc index ac060b0f..f3f34e56 100644 --- a/server/gameserver/roomobstacle.cc +++ b/server/gameserver/roomobstacle.cc @@ -330,6 +330,11 @@ void RoomObstacle::Active() ActiveTrap(); } break; + case kObstaclePosionGas: + { + ActivePosionGas(); + } + break; default: break; } @@ -393,3 +398,26 @@ void RoomObstacle::ActiveTrap() &xtimer_attacher.timer_list_ ); } + +void RoomObstacle::ActivePosionGas() +{ + room->frame_event.AddExplosionEx + (master, + 0,//task->meta->i->id(), + GetPos(), + meta->i->explosion_effect()); + + room->xtimer.AddDeadLineTimerAndAttach + ( + SERVER_FRAME_RATE, + a8::XParams() + .SetSender(this), + [] (const a8::XParams& param) + { + RoomObstacle* obstacle = (RoomObstacle*)param.sender.GetUserData(); + obstacle->Die(obstacle->room); + obstacle->BroadcastFullState(obstacle->room); + }, + &xtimer_attacher.timer_list_ + ); +} diff --git a/server/gameserver/roomobstacle.h b/server/gameserver/roomobstacle.h index 613100ad..78600cdb 100644 --- a/server/gameserver/roomobstacle.h +++ b/server/gameserver/roomobstacle.h @@ -28,6 +28,7 @@ private: void ActiveSelfExplosion(); void ActiveMine(); void ActiveTrap(); + void ActivePosionGas(); protected: bool temp_through_ = false; From 212085f1ff4ee9ef7bc0700ac6ea32256852d743 Mon Sep 17 00:00:00 2001 From: aozhiwei Date: Fri, 9 Apr 2021 20:47:03 +0800 Subject: [PATCH 04/11] 1 --- server/gameserver/roomobstacle.cc | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/server/gameserver/roomobstacle.cc b/server/gameserver/roomobstacle.cc index f3f34e56..0a7b00e1 100644 --- a/server/gameserver/roomobstacle.cc +++ b/server/gameserver/roomobstacle.cc @@ -409,14 +409,24 @@ void RoomObstacle::ActivePosionGas() room->xtimer.AddDeadLineTimerAndAttach ( - SERVER_FRAME_RATE, + meta->i->time() / FRAME_RATE_MS, a8::XParams() .SetSender(this), [] (const a8::XParams& param) { RoomObstacle* obstacle = (RoomObstacle*)param.sender.GetUserData(); - obstacle->Die(obstacle->room); - obstacle->BroadcastFullState(obstacle->room); + obstacle->room->xtimer.AddRepeatTimerAndAttach + ( + obstacle->meta->i->explosion_interval() / FRAME_RATE_MS, + a8::XParams() + .SetSender(obstacle), + [] (const a8::XParams& param) + { + RoomObstacle* obstacle = (RoomObstacle*)param.sender.GetUserData(); + obstacle->SpecExplosion(); + }, + &obstacle->xtimer_attacher.timer_list_ + ); }, &xtimer_attacher.timer_list_ ); From 2f8d7c4ad4b670a9dff8c631b4e249b5d2dd09e1 Mon Sep 17 00:00:00 2001 From: aozhiwei Date: Fri, 9 Apr 2021 20:58:35 +0800 Subject: [PATCH 05/11] 1 --- server/gameserver/roomobstacle.cc | 6 ------ 1 file changed, 6 deletions(-) diff --git a/server/gameserver/roomobstacle.cc b/server/gameserver/roomobstacle.cc index 0a7b00e1..ed8b0010 100644 --- a/server/gameserver/roomobstacle.cc +++ b/server/gameserver/roomobstacle.cc @@ -401,12 +401,6 @@ void RoomObstacle::ActiveTrap() void RoomObstacle::ActivePosionGas() { - room->frame_event.AddExplosionEx - (master, - 0,//task->meta->i->id(), - GetPos(), - meta->i->explosion_effect()); - room->xtimer.AddDeadLineTimerAndAttach ( meta->i->time() / FRAME_RATE_MS, From 007d50f8e9384e933f6bf765fb5a1058a1513da2 Mon Sep 17 00:00:00 2001 From: aozhiwei Date: Mon, 12 Apr 2021 13:59:32 +0800 Subject: [PATCH 06/11] 1 --- server/tools/protobuild/cs_proto.proto | 1 + 1 file changed, 1 insertion(+) diff --git a/server/tools/protobuild/cs_proto.proto b/server/tools/protobuild/cs_proto.proto index 6e25a9c0..6e777016 100755 --- a/server/tools/protobuild/cs_proto.proto +++ b/server/tools/protobuild/cs_proto.proto @@ -1037,6 +1037,7 @@ message SMUpdate repeated MFBuffChg chged_buff_list = 28; //buff变更列表 repeated MFPropertyChg chged_property_list = 31; //property变更列表 repeated MFPlaySkill play_skill_list = 32; //播放技能 + repeated int32 dead_objects = 33; //在这帧死亡的对象 //一下字段只有僵尸模式才有效 repeated MFTuple dead_alive_objs = 42; //玩家values[0]:objid values[1]:多少毫秒后复活 values[2]: 0:死亡 1:复活 From 20e31a4319bb0154cb50525b2aa4b74be10b59ba Mon Sep 17 00:00:00 2001 From: aozhiwei Date: Mon, 12 Apr 2021 14:22:10 +0800 Subject: [PATCH 07/11] 1 --- server/gameserver/human.cc | 2 ++ server/tools/protobuild/cs_proto.proto | 3 +-- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/server/gameserver/human.cc b/server/gameserver/human.cc index c0ffbdee..e2ad221f 100644 --- a/server/gameserver/human.cc +++ b/server/gameserver/human.cc @@ -836,6 +836,8 @@ void Human::BeKill(int killer_id, const std::string& killer_name, int weapon_id) RemoveBuffByEffectId(kBET_Camouflage); } ClearLordMode(); + room->frame_event.AddDead(this, + 0); #ifdef DEBUG room->CheckPartObjects(); #endif diff --git a/server/tools/protobuild/cs_proto.proto b/server/tools/protobuild/cs_proto.proto index 6e777016..c4a2ff82 100755 --- a/server/tools/protobuild/cs_proto.proto +++ b/server/tools/protobuild/cs_proto.proto @@ -1037,10 +1037,9 @@ message SMUpdate repeated MFBuffChg chged_buff_list = 28; //buff变更列表 repeated MFPropertyChg chged_property_list = 31; //property变更列表 repeated MFPlaySkill play_skill_list = 32; //播放技能 - repeated int32 dead_objects = 33; //在这帧死亡的对象 - //一下字段只有僵尸模式才有效 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; //游戏剩余时间(毫秒, 战斗开始后字段才有意义) } From f7a93b7c407e609c2f67bbaf4305f03d38e5d41e Mon Sep 17 00:00:00 2001 From: aozhiwei Date: Tue, 13 Apr 2021 16:12:37 +0800 Subject: [PATCH 08/11] 1 --- server/tools/protobuild/cs_proto.proto | 1 + 1 file changed, 1 insertion(+) diff --git a/server/tools/protobuild/cs_proto.proto b/server/tools/protobuild/cs_proto.proto index c4a2ff82..95178dc2 100755 --- a/server/tools/protobuild/cs_proto.proto +++ b/server/tools/protobuild/cs_proto.proto @@ -667,6 +667,7 @@ message MFPlayerStats optional int32 vip_lv = 35 [default = 0]; //等级 optional int32 head = 36 [default = 0]; //头像框 optional int32 sex = 37 [default = 0]; //性别 + optional int32 charid = 38; //人物id } //空投 From 1c23be3bc988e21d2ce8983dc68b5222cff940b4 Mon Sep 17 00:00:00 2001 From: aozhiwei Date: Tue, 13 Apr 2021 16:14:51 +0800 Subject: [PATCH 09/11] 1 --- server/tools/protobuild/cs_proto.proto | 1 + 1 file changed, 1 insertion(+) diff --git a/server/tools/protobuild/cs_proto.proto b/server/tools/protobuild/cs_proto.proto index 95178dc2..9fb908ce 100755 --- a/server/tools/protobuild/cs_proto.proto +++ b/server/tools/protobuild/cs_proto.proto @@ -668,6 +668,7 @@ message MFPlayerStats optional int32 head = 36 [default = 0]; //头像框 optional int32 sex = 37 [default = 0]; //性别 optional int32 charid = 38; //人物id + optional int32 team_id = 39; //tamid } //空投 From e79c487caff203d2c606c7457548fbbd00fb2bf6 Mon Sep 17 00:00:00 2001 From: aozhiwei Date: Tue, 13 Apr 2021 16:19:09 +0800 Subject: [PATCH 10/11] 1 --- server/gameserver/human.cc | 2 ++ 1 file changed, 2 insertions(+) diff --git a/server/gameserver/human.cc b/server/gameserver/human.cc index e2ad221f..76f1bcd3 100644 --- a/server/gameserver/human.cc +++ b/server/gameserver/human.cc @@ -246,6 +246,8 @@ void Human::FillMFPlayerStats(cs::MFPlayerStats* stats_pb) { stats_pb->set_player_id(GetEntityUniId()); stats_pb->set_player_avatar_url(avatar_url); + stats_pb->set_charid(meta->i->id()); + stats_pb->set_team_id(team_id); if (!dead) { stats_pb->set_time_alive(room->GetFrameNo() * 1000.0f / SERVER_FRAME_RATE); From 4efd559043e71bdcd67d40169de176c7b9c31abb Mon Sep 17 00:00:00 2001 From: aozhiwei Date: Tue, 13 Apr 2021 16:43:36 +0800 Subject: [PATCH 11/11] 1 --- server/gameserver/creature.cc | 1 + server/gameserver/human.cc | 2 ++ server/gameserver/molotor_cocktail_mitask.cc | 3 +++ server/gameserver/posiongas_mitask.cc | 3 +++ server/gameserver/room.cc | 5 +++++ server/gameserver/room.h | 1 + server/tools/protobuild/cs_proto.proto | 2 ++ 7 files changed, 17 insertions(+) diff --git a/server/gameserver/creature.cc b/server/gameserver/creature.cc index 6da8f6c0..04ef1854 100644 --- a/server/gameserver/creature.cc +++ b/server/gameserver/creature.cc @@ -501,6 +501,7 @@ void Creature::DoSkill(int skill_id, skill_distance_ = skill_distance; curr_skill_ = skill; playing_skill = true; + buff_vec2_param1 = GetPos() + skill_dir_ * skill_distance_; CurrentSkill()->last_use_frameno = room->GetFrameNo(); if (CurrentSkill()->meta->i->skill_target() == kST_Self ) { diff --git a/server/gameserver/human.cc b/server/gameserver/human.cc index 76f1bcd3..6a5f1244 100644 --- a/server/gameserver/human.cc +++ b/server/gameserver/human.cc @@ -696,6 +696,8 @@ void Human::FillSMGameOver(cs::SMGameOver& msg) msg.set_game_over(room->IsGameOver()); msg.set_victory(!dead); msg.set_room_uuid(a8::XValue(room->GetRoomUuid())); + msg.set_total_human_num(room->GetHumanNum()); + msg.set_alive_human_num(room->AliveCount()); { for (auto& itr : *team_members) { diff --git a/server/gameserver/molotor_cocktail_mitask.cc b/server/gameserver/molotor_cocktail_mitask.cc index 60d472b0..3d65a2e5 100644 --- a/server/gameserver/molotor_cocktail_mitask.cc +++ b/server/gameserver/molotor_cocktail_mitask.cc @@ -64,11 +64,14 @@ void MolotorCocktailMiTask::Check() } } ); + a8::Vec2 old_buff_vec2_param1 = sender.Get()->buff_vec2_param1; + sender.Get()->buff_vec2_param1 = sender.Get()->GetPos(); for (Creature* target : objects) { if (!target->GetBuffById(meta->i->buffid())) { target->MustBeAddBuff(sender.Get(), meta->i->buffid()); } } + sender.Get()->buff_vec2_param1 = old_buff_vec2_param1; } } diff --git a/server/gameserver/posiongas_mitask.cc b/server/gameserver/posiongas_mitask.cc index f580c25c..9a4efc39 100644 --- a/server/gameserver/posiongas_mitask.cc +++ b/server/gameserver/posiongas_mitask.cc @@ -64,11 +64,14 @@ void PosionGasMiTask::Check() } } ); + a8::Vec2 old_buff_vec2_param1 = sender.Get()->buff_vec2_param1; + sender.Get()->buff_vec2_param1 = sender.Get()->GetPos(); for (Creature* target : objects) { if (!target->GetBuffById(meta->i->buffid())) { target->MustBeAddBuff(sender.Get(), meta->i->buffid()); } } + sender.Get()->buff_vec2_param1 = old_buff_vec2_param1; } } diff --git a/server/gameserver/room.cc b/server/gameserver/room.cc index 5db96d0c..d872b612 100644 --- a/server/gameserver/room.cc +++ b/server/gameserver/room.cc @@ -171,6 +171,11 @@ int Room::GetPlayerNum() return accountid_hash_.size(); } +int Room::GetHumanNum() +{ + return human_hash_.size(); +} + Player* Room::GetPlayerByAccountId(const std::string& accountid) { auto itr = accountid_hash_.find(accountid); diff --git a/server/gameserver/room.h b/server/gameserver/room.h index e4144bd4..06971266 100644 --- a/server/gameserver/room.h +++ b/server/gameserver/room.h @@ -74,6 +74,7 @@ public: #endif int GetPlayerNum(); + int GetHumanNum(); int AliveCount(); long long AliveCountChgFrameNo() { return alive_count_chged_frameno_; }; inline int RealAliveCount() { return alive_human_hash_.size(); } diff --git a/server/tools/protobuild/cs_proto.proto b/server/tools/protobuild/cs_proto.proto index 9fb908ce..9fbfd35e 100755 --- a/server/tools/protobuild/cs_proto.proto +++ b/server/tools/protobuild/cs_proto.proto @@ -1066,6 +1066,8 @@ message SMGameOver optional int32 team_allcnt = 3; optional bool game_over = 4; //是否结束 optional bool victory = 5; //是否胜利 + optional int32 total_human_num = 12; //房间总人数 + optional int32 alive_human_num = 13; //房间剩余存活人数 repeated MFPlayerStats player_stats = 6; //玩家信息统计 optional string room_uuid = 7; //房间唯一id