From 28acee05a8a1df85435bbaef6b044baf6437dd48 Mon Sep 17 00:00:00 2001 From: aozhiwei Date: Thu, 16 Feb 2023 18:28:09 +0800 Subject: [PATCH] 1 --- server/gameserver/constant.h | 5 ++-- server/gameserver/creature.cc | 10 +++++++ server/gameserver/creature.h | 2 ++ server/gameserver/skill.cc | 39 ++++++++++++++++++++++++-- server/tools/protobuild/cs_proto.proto | 3 ++ 5 files changed, 54 insertions(+), 5 deletions(-) diff --git a/server/gameserver/constant.h b/server/gameserver/constant.h index b6682453..9379566e 100644 --- a/server/gameserver/constant.h +++ b/server/gameserver/constant.h @@ -287,6 +287,9 @@ enum PropertyType_e kPropSkillMinor = 35, kPropReviveCion = 36, kPropCritDmg = 37, + kPropParachute = 38, + kPropFlyEffect = 39, + kPropEnergyShield = 40, }; enum SkinSlot_e @@ -509,8 +512,6 @@ const int SPEC1_SLOT_BEGIN = 3; //手雷 烟雾弹 const int SPEC2_SLOT_BEGIN = 5; //地雷 燃烧瓶 陷井 毒气弹 const int SPEC3_SLOT_BEGIN = 9; //c4 盾墙 信号抢 汽油桶 -const int DOOR_THING_ID = 61701; - const int FIGHTING_MODE_BULLET_NUM = 10000 * 10000; const int MAX_NODE_ID = 8; diff --git a/server/gameserver/creature.cc b/server/gameserver/creature.cc index 8cbba1e1..ffd0e231 100644 --- a/server/gameserver/creature.cc +++ b/server/gameserver/creature.cc @@ -2683,3 +2683,13 @@ void Creature::CheckBulletHitHoldShield(IBullet* bullet, bool& eat) } } } + +void Creature::AddEnergyShield(int value) +{ + +} + +void Creature::ClearEnergyShield() +{ + +} diff --git a/server/gameserver/creature.h b/server/gameserver/creature.h index cf9b23f7..72f87c8e 100644 --- a/server/gameserver/creature.h +++ b/server/gameserver/creature.h @@ -199,6 +199,8 @@ class Creature : public MoveableEntity void SetHP(float hp); void SetMaxHP(float max_hp); bool IsHpFull(); + void AddEnergyShield(int value); + void ClearEnergyShield(); void StartAction(ActionType_e action_type, int action_duration, diff --git a/server/gameserver/skill.cc b/server/gameserver/skill.cc index 2a066912..f2d190f8 100644 --- a/server/gameserver/skill.cc +++ b/server/gameserver/skill.cc @@ -881,18 +881,51 @@ void Skill::Proc30801LONG() void Skill::Proc30901XIONG() { #if 1 + auto context = std::make_shared>>(); + std::get<0>(*context.get()) = 0; a8::XTimerWp timer = owner->room->xtimer.SetIntervalWpEx ( - meta->_number_meta->number() / FRAME_RATE_MS, - [this] (int event, const a8::Args* args) + meta->_number_meta->number() * SERVER_FRAME_RATE, + [this, context] (int event, const a8::Args* args) { if (a8::TIMER_EXEC_EVENT == event) { if (!owner->dead) { - + if (std::get<0>(*context.get()) == 0) { + std::get<0>(*context.get()) = 1; + owner->GetAbility()->AddSpeedAddition(meta->_number_meta->_float_speed); + } } } }, &xtimer_attacher); + + auto cb = + [this, timer, context] (const a8::Args& args) mutable + { + if (timer.expired()) { + return; + } + owner->room->xtimer.ResetTimer(timer); + if (std::get<0>(*context.get()) == 1) { + for (int buff_uniid : std::get<1>(*context.get())) { + owner->RemoveBuffByUniId(buff_uniid); + } + std::get<0>(*context.get()) = 0; + std::get<1>(*context.get()).clear(); + owner->GetAbility()->DelSpeedAddition(meta->_number_meta->_float_speed); + } + }; + + owner->GetTrigger()->AddListener + ( + kDieEvent, + cb + ); + owner->GetTrigger()->AddListener + ( + kReceiveDmgEvent, + cb + ); #else int relive_times = 0; owner->GetTrigger()->AddListener diff --git a/server/tools/protobuild/cs_proto.proto b/server/tools/protobuild/cs_proto.proto index 68eff623..bd17df54 100755 --- a/server/tools/protobuild/cs_proto.proto +++ b/server/tools/protobuild/cs_proto.proto @@ -180,6 +180,9 @@ message MFVec3 property_subtype: 特效id,读取flyEffect表 valule: 目标对象 value3: 回传值,当目标对象是自己的时候才需要传(value3==0 || value3==null不用传) + property_type: 40 能量护盾 + valule: 当前护盾值 + value2: max护盾值 */ message MFPropertyChg {