From 4fd5414efc50d39dd51775ec187494de8de7153b Mon Sep 17 00:00:00 2001 From: aozhiwei Date: Thu, 12 Aug 2021 03:05:40 +0000 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E5=89=8D=E6=91=87=E6=97=B6?= =?UTF-8?q?=E9=97=B4=E5=B0=84=E5=87=BB=E4=BD=BF=E7=94=A8=E6=8A=80=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- server/gameserver/creature.cc | 8 ++++++++ server/gameserver/metadata.cc | 10 ++++++++++ server/gameserver/skill.cc | 12 ++++++++++++ server/gameserver/skill.h | 1 + server/tools/protobuild/metatable.proto | 2 ++ 5 files changed, 33 insertions(+) diff --git a/server/gameserver/creature.cc b/server/gameserver/creature.cc index 2f8304b..b0afd21 100644 --- a/server/gameserver/creature.cc +++ b/server/gameserver/creature.cc @@ -136,6 +136,13 @@ void InternalShot(Creature* c, c->room->xtimer.ModifyTimer(buff->remover_timer, weapon_meta->lock_time / FRAME_RATE_MS); } } + if (weapon_meta->i->cast_time() > 0) { + int buff_uniid = c->TryAddBuff(c, kVertigoBuffId); + Buff* buff = c->GetBuffByUniId(buff_uniid); + if (buff && buff->remover_timer) { + c->room->xtimer.ModifyTimer(buff->remover_timer, weapon_meta->i->cast_time() / FRAME_RATE_MS); + } + } for (auto& tuple : weapon_meta->bullet_born_offset) { a8::Vec2 bullet_born_offset = a8::Vec2(std::get<0>(tuple), std::get<1>(tuple)); bullet_born_offset.Rotate(c->GetAttackDir().CalcAngle(a8::Vec2::UP)); @@ -794,6 +801,7 @@ void Creature::DoSkill(int skill_id, context_dir = skill_dir_; context_pos = GetPos() + skill_dir_ * skill_distance_; CurrentSkill()->last_use_frameno = room->GetFrameNo(); + skill->LockCastPhase(); if (CurrentSkill()->meta->i->skill_target() == kST_Self ) { skill_target_id_ = GetUniId(); diff --git a/server/gameserver/metadata.cc b/server/gameserver/metadata.cc index 83304c1..f76dbf7 100644 --- a/server/gameserver/metadata.cc +++ b/server/gameserver/metadata.cc @@ -1029,6 +1029,16 @@ namespace MetaData } } break; + case kBET_DelayAddBuff: + { + assert(param1 < i->duration_time()); + } + break; + case kBET_IntervalAddBuff: + { + assert(int_param1 < i->duration_time() * 1000); + } + break; default: { } diff --git a/server/gameserver/skill.cc b/server/gameserver/skill.cc index 0cdefbf..120b673 100644 --- a/server/gameserver/skill.cc +++ b/server/gameserver/skill.cc @@ -155,3 +155,15 @@ void Skill::Accelerate(int time) NotifySkillState(); } } + +void Skill::LockCastPhase() +{ + if (meta->i->cast_time() > 0) { + int buff_uniid = owner->TryAddBuff(owner, kVertigoBuffId); + Buff* buff = owner->GetBuffByUniId(buff_uniid); + if (buff && buff->remover_timer) { + owner->room->xtimer.ModifyTimer(buff->remover_timer, + meta->i->cast_time() / FRAME_RATE_MS); + } + } +} diff --git a/server/gameserver/skill.h b/server/gameserver/skill.h index 07fecb8..68399b3 100644 --- a/server/gameserver/skill.h +++ b/server/gameserver/skill.h @@ -31,6 +31,7 @@ class Skill void FillMFSkill(cs::MFSkill* skill_pb); void ResetSkillCd(); void Accelerate(int time); + void LockCastPhase(); void ClearPassiveSkillBuff(); void AddPassiveSkillBuff(); diff --git a/server/tools/protobuild/metatable.proto b/server/tools/protobuild/metatable.proto index f8d8981..cb20500 100755 --- a/server/tools/protobuild/metatable.proto +++ b/server/tools/protobuild/metatable.proto @@ -142,6 +142,7 @@ message Equip optional int32 ispenetrate = 61; optional int32 is_penetrate_thing = 62; optional int32 reload_delay_time = 63; + optional int32 cast_time = 64; optional string inventory_slot = 31; //库存槽位 optional int32 _inventory_slot = 32; //库存槽位 @@ -237,6 +238,7 @@ message Skill optional string phase3_param1 = 42; optional string phase3_param2 = 43; optional string phase3_param3 = 44; + optional int32 cast_time = 45; } message Buff