From 7b6eda38bd85338538fffe90b0ba8cf6d41bc91b Mon Sep 17 00:00:00 2001 From: aozhiwei Date: Thu, 15 Aug 2024 11:52:36 +0800 Subject: [PATCH 1/6] 1 --- server/gameserver/commands.cc | 27 ++++++++++++++++++++++++++- server/gameserver/room.h | 1 + 2 files changed, 27 insertions(+), 1 deletion(-) diff --git a/server/gameserver/commands.cc b/server/gameserver/commands.cc index 9af7dbad..062f4986 100644 --- a/server/gameserver/commands.cc +++ b/server/gameserver/commands.cc @@ -245,7 +245,7 @@ void Player::_CMExecCommand(f8::MsgHdr* hdr, const cs::CMExecCommand& msg) ( [this] (Human* hum) -> bool { - a8::SetBitFlag(hum->status, CS_NoDie); + //a8::SetBitFlag(hum->status, CS_NoDie); hum->GetMovement()->ClearPath(); hum->GetMutablePos().FromGlmVec3(GetPos().ToGlmVec3()); room->grid_service->MoveCreature(hum); @@ -519,6 +519,31 @@ void Player::_CMExecCommand(f8::MsgHdr* hdr, const cs::CMExecCommand& msg) for (auto& str : strings) { SendDebugMsg("数值: " + str); } + } else if (cmd == "down_teammate") { + Human* target = nullptr; + GetTeam()->TraverseMembers + ( + [this, &target] (Human *hum) -> bool + { + if (!hum->dead && hum != this) { + if (!target) { + target = hum; + } else if (GetPos().Distance2D2(hum->GetPos()) < + GetPos().Distance2D2(target->GetPos())) { + target = hum; + } + } + return true; + }); + if (target) { + float dmg_out = 0.0f; + target->DecHP(100000.0f, VP_Gas, TEXT("battle_server_killer_gas", "毒圈"), VW_Gas, + VP_Gas, + TEXT("battle_server_killer_gas", "毒圈"), + dmg_out, + 0, + 0); + } } else if (cmd == "moba_pingju" && cmds.size() >= 0) { if (room->IsMobaModeRoom() && !room->IsGameOver() && room->GetMobaOvertimeRaceFrameNo() <= 0) { room->TraverseTeams diff --git a/server/gameserver/room.h b/server/gameserver/room.h index 944f9fae..2b250a60 100644 --- a/server/gameserver/room.h +++ b/server/gameserver/room.h @@ -74,6 +74,7 @@ enum RoomSwitch_e kRoomSwitchDisableUseSkill, kRoomSwitchDisableUseItem, kRoomSwitchDisableShot, + kRoomSwitchPeaceMode, }; class Room : public std::enable_shared_from_this From 1e7b83be9a618669614d200fa153b320a76f791b Mon Sep 17 00:00:00 2001 From: aozhiwei Date: Thu, 15 Aug 2024 12:04:07 +0800 Subject: [PATCH 2/6] 1 --- server/gameserver/commands.cc | 6 ++++++ server/gameserver/hero_agent.cc | 12 ++++++++++++ 2 files changed, 18 insertions(+) diff --git a/server/gameserver/commands.cc b/server/gameserver/commands.cc index 062f4986..a54364b7 100644 --- a/server/gameserver/commands.cc +++ b/server/gameserver/commands.cc @@ -555,6 +555,12 @@ void Player::_CMExecCommand(f8::MsgHdr* hdr, const cs::CMExecCommand& msg) }); room->xtimer.ModifyTime(room->moba_over_timer, 0); } + } else if (cmd == "peace_mode" && cmds.size() >= 0) { + if (cmds[1] == "1") { + room->OpenRoomSwitch(kRoomSwitchPeaceMode); + } else { + room->CloseRoomSwitch(kRoomSwitchPeaceMode); + } } else if (cmd == "findpath" && cmds.size() >= 3) { float x = a8::XValue(cmds[1]).GetDouble(); float y = a8::XValue(cmds[2]).GetDouble(); diff --git a/server/gameserver/hero_agent.cc b/server/gameserver/hero_agent.cc index aae07632..65370312 100644 --- a/server/gameserver/hero_agent.cc +++ b/server/gameserver/hero_agent.cc @@ -396,6 +396,12 @@ bool HeroAgent::MasterInRange(float range) behaviac::EBTStatus HeroAgent::SearchEnemy(float range) { +#ifdef MYDEBUG + if (owner_->room->HasRoomSwitch(kRoomSwitchPeaceMode) + ) { + return behaviac::BT_FAILURE; + } +#endif Creature* myself = owner_; Creature* target = nullptr; float last_distance = range + 1; @@ -435,6 +441,12 @@ behaviac::EBTStatus HeroAgent::SearchEnemy(float range) behaviac::EBTStatus HeroAgent::SearchHumanEnemy(float range) { +#ifdef MYDEBUG + if (owner_->room->HasRoomSwitch(kRoomSwitchPeaceMode) + ) { + return behaviac::BT_FAILURE; + } +#endif Creature* myself = owner_; Creature* target = nullptr; float last_distance = range + 1; From 96c1ae8039c854deb85d7e70b756c10ceb4a8f54 Mon Sep 17 00:00:00 2001 From: aozhiwei Date: Thu, 15 Aug 2024 14:26:43 +0800 Subject: [PATCH 3/6] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E6=95=91=E4=BA=BAbug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- server/gameserver/buff.cc | 42 ++++++++++++++++++++++++++++++++++++++ server/gameserver/human.cc | 4 ++-- 2 files changed, 44 insertions(+), 2 deletions(-) diff --git a/server/gameserver/buff.cc b/server/gameserver/buff.cc index 5cc5af66..be0054eb 100644 --- a/server/gameserver/buff.cc +++ b/server/gameserver/buff.cc @@ -3,6 +3,8 @@ #include #include +#include + #include "buff.h" #include "human.h" #include "room.h" @@ -49,10 +51,50 @@ void Buff::Init() res_scale = meta->GetResScale(this); res_scale_frameno = owner->room->GetFrameNo(); } +#ifdef MYDEBUG + switch (meta->buff_effect()) { + case kBET_InRescue: + case kBET_Rescuer: + { + a8::XPrintf("add jiuyuan role_name:%s type:%s buff_id:%d buff_effect:%\n", + { + owner->GetName(), + owner->IsPlayer() ? "player" : "android", + meta->buff_id(), + a8::GetEnumName(meta->buff_effect()) + }); + } + break; + default: + { + } + break; + } +#endif } void Buff::UnInit() { +#ifdef MYDEBUG + switch (meta->buff_effect()) { + case kBET_InRescue: + case kBET_Rescuer: + { + a8::XPrintf("remove jiuyuan role_name:%s type:%s buff_id:%d buff_effect:%\n", + { + owner->GetName(), + owner->IsPlayer() ? "player" : "android", + meta->buff_id(), + a8::GetEnumName(meta->buff_effect()) + }); + } + break; + default: + { + } + break; + } +#endif list_del_init(&effect_entry); if (!list_empty(&depend_entry)) { list_del_init(&depend_entry); diff --git a/server/gameserver/human.cc b/server/gameserver/human.cc index 90c704c9..bc5657f5 100644 --- a/server/gameserver/human.cc +++ b/server/gameserver/human.cc @@ -894,7 +894,7 @@ void Human::UpdateAction() break; case AT_Rescue: { - RemoveBuffByEffectId(kBET_InRescue); + RemoveBuffByEffectId(kBET_Rescuer); } break; default: @@ -1807,7 +1807,7 @@ void Human::ProcUseItemAction() void Human::ProcReliveAction() { - RemoveBuffByEffectId(kBET_Rescuer); + RemoveBuffByEffectId(kBET_InRescue); Entity* entity = room->GetEntityByUniId(action_target_id); if (!entity->IsEntityType(ET_Player)) { return; From dc03ded1f6187661fd888aac32feadf718d82bd4 Mon Sep 17 00:00:00 2001 From: aozhiwei Date: Thu, 15 Aug 2024 14:50:51 +0800 Subject: [PATCH 4/6] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E9=BE=99=E4=B8=BB?= =?UTF-8?q?=E5=8A=A8=E6=8A=80=E8=83=BD=E8=83=BD=E9=87=8F=E6=8A=A4=E7=BD=A9?= =?UTF-8?q?=E6=98=BE=E7=A4=BA=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- server/gameserver/buff/callfunc.cc | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/server/gameserver/buff/callfunc.cc b/server/gameserver/buff/callfunc.cc index b2efafba..32b314b1 100644 --- a/server/gameserver/buff/callfunc.cc +++ b/server/gameserver/buff/callfunc.cc @@ -548,6 +548,12 @@ void CallFuncBuff::ProcAddEnergyShield() if (dur_time < 0.00001f) { dur_time = 99999999; } + #if 1 + if (owner->energy_shield > 0) { + owner->energy_shield = 0; + owner->GetTrigger()->DestoryEnergyShield(); + } + #endif if (owner->energy_shield > 0) { is_valid_ = false; owner->GetTrigger()->UpdateEnergyShield(hold_param2_, dur_time); From 5db58d028a2aca4ca5fc638e1ba8ca3277119fb0 Mon Sep 17 00:00:00 2001 From: aozhiwei Date: Thu, 15 Aug 2024 15:06:12 +0800 Subject: [PATCH 5/6] 1 --- server/gameserver/player.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/server/gameserver/player.cc b/server/gameserver/player.cc index cfa9d98b..a96708b6 100644 --- a/server/gameserver/player.cc +++ b/server/gameserver/player.cc @@ -1093,7 +1093,7 @@ void Player::_CMMove(f8::MsgHdr* hdr, const cs::CMMove& msg) a8::XPrintf("moving:%d times:%d\n", {moving ? 1 : 0, GetDisableAttackDirTimes()}); #endif if (moving && GetDisableAttackDirTimes() <= 0) { - #if 1 + #if 0 SetAttackDir(GetMoveDir()); #else if (!HasBuffEffect(kBET_HoldShield)) { From a0c8d9cd9fe677fd974af0408d07501c7d22f29b Mon Sep 17 00:00:00 2001 From: aozhiwei Date: Thu, 15 Aug 2024 15:35:03 +0800 Subject: [PATCH 6/6] =?UTF-8?q?=E4=BF=AE=E5=A4=8Dchild=5Fbuff=5F=E9=9A=90?= =?UTF-8?q?=E6=82=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- server/gameserver/buff.h | 1 + server/gameserver/creature.cc | 26 +++++++++++++++++++++++--- 2 files changed, 24 insertions(+), 3 deletions(-) diff --git a/server/gameserver/buff.h b/server/gameserver/buff.h index 87da9a89..98c4c80a 100644 --- a/server/gameserver/buff.h +++ b/server/gameserver/buff.h @@ -37,6 +37,7 @@ class Buff float res_scale = 1; long long res_scale_frameno = 0; std::shared_ptr> buff_vars; + std::shared_ptr> child_buff_uniids; Buff(); virtual ~Buff(); diff --git a/server/gameserver/creature.cc b/server/gameserver/creature.cc index 6d105100..c6dd5260 100644 --- a/server/gameserver/creature.cc +++ b/server/gameserver/creature.cc @@ -398,7 +398,18 @@ int Creature::AddBuff(Creature* caster, for (int child_buff_id : buff->meta->_child_buff_list) { const mt::Buff* child_buff_meta = mt::Buff::GetById(child_buff_id); if (child_buff_meta) { - AddBuff(caster, child_buff_meta, buff_skill_meta, true, init_args, buff_vars); + int child_buff_uniid = AddBuff(caster, + child_buff_meta, + buff_skill_meta, + true, + init_args, + buff_vars); + if (child_buff_uniid) { + if (!buff->child_buff_uniids) { + buff->child_buff_uniids = std::make_shared>(); + } + buff->child_buff_uniids->push_back(child_buff_uniid); + } } } } @@ -537,7 +548,7 @@ void Creature::RemoveBuffById(int buff_id) void Creature::RemoveBuffByUniId(int buff_uniid) { int buff_id = 0; - std::vector> removed_buffs; + std::vector>>> removed_buffs; std::shared_ptr buff; for (auto itr = buff_list_.begin(); itr != buff_list_.end(); ++itr) { if ((*itr)->buff_uniid == buff_uniid) { @@ -553,7 +564,7 @@ void Creature::RemoveBuffByUniId(int buff_uniid) int i = 0; } #endif - removed_buffs.push_back(std::make_tuple(buff->meta, buff->GetCaster().Get())); + removed_buffs.push_back(std::make_tuple(buff->meta, buff->GetCaster().Get(), buff->child_buff_uniids)); OnBuffRemove(*buff.get()); buff->UnInit(); #ifdef MYDEBUG @@ -578,10 +589,19 @@ void Creature::RemoveBuffByUniId(int buff_uniid) for (auto& tuple1 : removed_buffs) { const mt::Buff* buff_meta = std::get<0>(tuple1); Creature* caster = std::get<1>(tuple1); + std::shared_ptr> child_buff_uniids = std::get<2>(tuple1); + #if 1 + if (child_buff_uniids) { + for (auto child_buff_uniid : *child_buff_uniids) { + RemoveBuffByUniId(child_buff_uniid); + } + } + #else for (int child_buff_id : buff_meta->_child_buff_list) { RemoveBuffById(child_buff_id); } + #endif if (!HasBuffEffect(buff_meta->buff_effect()) && !list_empty(&depend_effect_[buff_meta->buff_effect()])) {