From 458c8c0d70baf14e32c308595ce4473028f16506 Mon Sep 17 00:00:00 2001 From: aozhiwei Date: Thu, 17 Jun 2021 17:05:54 +0800 Subject: [PATCH] 1 --- server/gameserver/constant.h | 7 +++++++ server/gameserver/human.cc | 17 +++++++++++++++-- server/gameserver/obstacle.cc | 9 +++++++-- server/gameserver/obstacle.h | 2 +- server/gameserver/player.cc | 3 +++ 5 files changed, 33 insertions(+), 5 deletions(-) diff --git a/server/gameserver/constant.h b/server/gameserver/constant.h index a305ed9..376b269 100755 --- a/server/gameserver/constant.h +++ b/server/gameserver/constant.h @@ -338,6 +338,13 @@ enum ObstacleType_e kObstacleAirDropBox = 8, }; +enum OptResult +{ + kOptPass = 0, + kOptContinue = 1, + kOptBreak = 2 +}; + const char* const PROJ_NAME_FMT = "game%d_gameserver"; const char* const PROJ_ROOT_FMT = "/data/logs/%s"; diff --git a/server/gameserver/human.cc b/server/gameserver/human.cc index db7b9b1..0eec845 100644 --- a/server/gameserver/human.cc +++ b/server/gameserver/human.cc @@ -93,7 +93,13 @@ float Human::GetSpeed() return buff->meta->param2; } } - if (downed) { + { + Buff* buff = GetBuffByEffectId(kBET_Sprint); + if (buff) { + return buff->meta->param2; + } + } + if (downed) { return meta->i->move_speed3(); } else { if (shot_hold) { @@ -511,6 +517,13 @@ bool Human::IsCollisionInMapService() ) && !obstacle->CanThroughable(this)) { 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 && @@ -1574,7 +1587,7 @@ void Human::FollowTarget(Human* target) void Human::SendDebugMsg(const std::string& debug_msg) { cs::SMDebugMsg notify_msg; - notify_msg.set_debug_msg(debug_msg); + notify_msg.set_debug_msg(a8::TimestampToDateTime(time(nullptr)) + " " + debug_msg); SendNotifyMsg(notify_msg); } diff --git a/server/gameserver/obstacle.cc b/server/gameserver/obstacle.cc index be8e33e..2097c5c 100644 --- a/server/gameserver/obstacle.cc +++ b/server/gameserver/obstacle.cc @@ -641,9 +641,14 @@ bool Obstacle::DoInteraction(Human* sender) return false; } -void Obstacle::OnCollisionTrigger(Creature* c) +void Obstacle::OnCollisionTrigger(Creature* c, OptResult& opt_result) { - + opt_result = kOptPass; + if (meta->i->thing_type() == kObstacleSpring) { + AddObstacleBuff(c); + a8::SetBitFlag(c->status, CS_Collisioning); + opt_result = kOptBreak; + } } void Obstacle::DoHideHouseInteraction(Human* sender) diff --git a/server/gameserver/obstacle.h b/server/gameserver/obstacle.h index 0baf34b..54fd6f5 100644 --- a/server/gameserver/obstacle.h +++ b/server/gameserver/obstacle.h @@ -45,7 +45,7 @@ class Obstacle : public Entity virtual bool CanThroughable(Creature* c); virtual bool CanThroughable(Bullet* bullet); virtual bool DoInteraction(Human* sender); - virtual void OnCollisionTrigger(Creature* c); + virtual void OnCollisionTrigger(Creature* c, OptResult& opt_result); void Explosion(Bullet* bullet); void SetDoorInfo(Building* building, int door_id_x); bool IsDoor(); diff --git a/server/gameserver/player.cc b/server/gameserver/player.cc index c289691..b0663af 100644 --- a/server/gameserver/player.cc +++ b/server/gameserver/player.cc @@ -71,6 +71,9 @@ void Player::InternalUpdate(int delta_time) if (HasSpecMove()) { _UpdateSpecMove(); } else { + if (HasBuffEffect(kBET_Sprint)) { + moving = true; + } if (moving) { UpdateMove(); }