From f1cd20be5afc0ad98c8fbe3437c4256e9c5fdefa Mon Sep 17 00:00:00 2001 From: aozhiwei Date: Fri, 18 Jun 2021 11:37:17 +0800 Subject: [PATCH] =?UTF-8?q?21.=E7=AE=B1=E5=AD=90=E6=97=A0=E6=B3=95?= =?UTF-8?q?=E8=A2=AB=E8=A7=A6=E7=A2=B0=E7=88=86=E5=BC=80=EF=BC=8C=E4=BB=85?= =?UTF-8?q?=E5=8F=AF=E8=A2=AB=E6=9E=AA=E6=A2=B0=E6=94=BB=E5=87=BB=E6=88=96?= =?UTF-8?q?=E6=89=8B=E5=8A=A8=E6=89=93=E5=BC=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- server/gameserver/car.cc | 1 + server/gameserver/hero.cc | 8 ++++++++ server/gameserver/human.cc | 1 + server/gameserver/obstacle.cc | 9 +++++++++ server/gameserver/obstacle.h | 1 + server/gameserver/player.cc | 1 - 6 files changed, 20 insertions(+), 1 deletion(-) diff --git a/server/gameserver/car.cc b/server/gameserver/car.cc index bc7081a..7c0bca5 100644 --- a/server/gameserver/car.cc +++ b/server/gameserver/car.cc @@ -75,6 +75,7 @@ void Car::FillMFObjectFull(Room* room, Human* hum, cs::MFObjectFull* full_data) p->set_max_health(GetMaxHP()); p->set_oil(cur_oil_); p->set_max_oil(meta->i->max_oil()); + p->set_bullet_num(weapons[GUN_SLOT1].ammo); FillBuffList(hum, p->mutable_buff_list()); } diff --git a/server/gameserver/hero.cc b/server/gameserver/hero.cc index e441e7a..b2c8e0d 100644 --- a/server/gameserver/hero.cc +++ b/server/gameserver/hero.cc @@ -157,9 +157,17 @@ bool Hero::IsCollisionInMapService() ) ) { if (last_collision_door_ != collider->owner) { + OptResult opt_result = kOptPass; + obstacle->OnCollisionTrigger(this, opt_result); + if (opt_result == kOptContinue) { + continue; + } else if (opt_result == kOptBreak) { + return true; + } if (!obstacle->IsDead(room) && obstacle->Attackable() && obstacle->meta->i->drop() != 0 && + obstacle->IsTouchInteraction() && room->GetGasData().gas_mode != GasInactive && (!obstacle->IsTerminatorAirDropBox(room)) ) { diff --git a/server/gameserver/human.cc b/server/gameserver/human.cc index 7b2669e..f04ea29 100644 --- a/server/gameserver/human.cc +++ b/server/gameserver/human.cc @@ -527,6 +527,7 @@ bool Human::IsCollisionInMapService() if (!obstacle->IsDead(room) && obstacle->Attackable() && obstacle->meta->i->drop() != 0 && + obstacle->IsTouchInteraction() && room->GetGasData().gas_mode != GasInactive && (!obstacle->IsTerminatorAirDropBox(room) || GetRace() == kHumanRace) ) { diff --git a/server/gameserver/obstacle.cc b/server/gameserver/obstacle.cc index cd23b8d..0ca2515 100644 --- a/server/gameserver/obstacle.cc +++ b/server/gameserver/obstacle.cc @@ -639,6 +639,10 @@ bool Obstacle::DoInteraction(Human* sender) break; default: { + if (!IsDead(sender->room) && IsOpenInteraction()) { + Die(sender->room); + BroadcastFullState(sender->room); + } } break; } @@ -736,3 +740,8 @@ bool Obstacle::IsTouchInteraction() { return meta->i->interaction_mode() == 1; } + +bool Obstacle::IsOpenInteraction() +{ + return meta->i->interaction_mode() == 2; +} diff --git a/server/gameserver/obstacle.h b/server/gameserver/obstacle.h index e1e0ed2..6e8d42a 100644 --- a/server/gameserver/obstacle.h +++ b/server/gameserver/obstacle.h @@ -68,6 +68,7 @@ class Obstacle : public Entity bool Attackable(); bool Throughable(); bool IsTouchInteraction(); + bool IsOpenInteraction(); protected: Obstacle(); diff --git a/server/gameserver/player.cc b/server/gameserver/player.cc index b0663af..1b05c3d 100644 --- a/server/gameserver/player.cc +++ b/server/gameserver/player.cc @@ -667,7 +667,6 @@ void Player::LootInteraction(Loot* entity) case IS_C4: case IS_SHIELD_WALL: case IS_SINGAL_GUN: - case IS_SHEN_BAO: case IS_OIL_BUCKET: { Weapon* weapon = &weapons[SPEC3_SLOT_BEGIN +