This commit is contained in:
aozhiwei 2022-10-09 20:13:40 +08:00
parent d779c11d0f
commit 6080b7fa0a
3 changed files with 60 additions and 17 deletions

View File

@ -9,6 +9,7 @@
#include "entityfactory.h" #include "entityfactory.h"
#include "explosion.h" #include "explosion.h"
#include "buff.h" #include "buff.h"
#include "human.h"
void Skill::Initialzie() void Skill::Initialzie()
{ {
@ -364,20 +365,40 @@ void Skill::ProcSWZB()
[this] (const std::vector<std::any>& params) [this] (const std::vector<std::any>& params)
{ {
CreatureWeakPtr sender = owner->GetWeakPtrRef(); CreatureWeakPtr sender = owner->GetWeakPtrRef();
MetaData::Skill* skill_meta = meta;
a8::Vec2 center = owner->GetPos(); a8::Vec2 center = owner->GetPos();
std::shared_ptr<Explosion> e = EntityFactory::Instance()->MakeExplosion(); std::shared_ptr<Explosion> e = EntityFactory::Instance()->MakeExplosion();
e->SetThrough(true);
e->SetHitCb e->SetHitCb
( (
[sender, center] (const std::vector<std::any>& params) mutable [sender, center, skill_meta] (const std::vector<std::any>& params) mutable
{ {
#if 0
if (sender.Get()) { if (sender.Get()) {
Entity* e = std::any_cast<Entity*>(params.at(0)); Entity* e = std::any_cast<Entity*>(params.at(0));
if (e->IsCreature()) { if (e->IsCreature(sender.Get()->room)) {
Creature* c = (Creature*)e;
if (c->IsInvincible()) {
return;
}
if (c->dead) {
return;
}
float dmg = SkillHelper::GetSwzbDmg(sender.Get(), skill_meta);
c->DecHP(dmg,
VP_Explosion,
"",
SkillHelper::GetSwzbEffect(skill_meta));
a8::Vec2 dir = sender.Get()->GetAttackDir();
if (!dir.IsZero()) {
a8::Vec2 target_pos = c->GetPos() +
dir * SkillHelper::GetSwzbPullDistance(skill_meta);
c->PullTarget(target_pos);
}
int buff_id = SkillHelper::GetSwzbBuffId(skill_meta);
float buff_time = SkillHelper::GetSwzbBuffTime(skill_meta);
c->TryAddBuffAndSetTime(sender.Get(), buff_id, buff_time);
} }
} }
#endif
} }
); );
e->EnemyAndObstacleAttack e->EnemyAndObstacleAttack
@ -386,7 +407,7 @@ void Skill::ProcSWZB()
owner->GetPos(), owner->GetPos(),
SkillHelper::GetSwzbRadius(meta), SkillHelper::GetSwzbRadius(meta),
SkillHelper::GetSwzbEffect(meta), SkillHelper::GetSwzbEffect(meta),
SkillHelper::GetSwzbDmg(meta) 0
); );
} }
); );
@ -465,12 +486,19 @@ void Skill::ProcJYFH()
kStartRescueEvent, kStartRescueEvent,
[this] (const std::vector<std::any>& params) [this] (const std::vector<std::any>& params)
{ {
Human* target = std::any_cast<Human*>(params.at(0));
int buff_id = SkillHelper::GetJyfhBuffId(meta);
float buff_time = SkillHelper::GetJyfhBuffTime(meta);
owner->TryAddBuffAndSetTime(owner, buff_id, buff_time, meta);
target->TryAddBuffAndSetTime(owner, buff_id, buff_time, meta);
owner->GetTrigger()->AddListener owner->GetTrigger()->AddListener
( (
kEndRescueEvent, kEndRescueEvent,
[this] (const std::vector<std::any>& params) [this, buff_id] (const std::vector<std::any>& params)
{ {
Human* target = std::any_cast<Human*>(params.at(0));
owner->RemoveBuffById(buff_id);
target->RemoveBuffById(buff_id);
} }
); );
} }

View File

@ -192,12 +192,15 @@ int SkillHelper::GetJshxHp(Creature* c, const MetaData::Skill* skill_meta)
int SkillHelper::GetSwzbRadius(const MetaData::Skill* skill_meta) int SkillHelper::GetSwzbRadius(const MetaData::Skill* skill_meta)
{ {
return 0; return skill_meta->number_meta->float_range;
} }
int SkillHelper::GetSwzbDmg(const MetaData::Skill* skill_meta) int SkillHelper::GetSwzbDmg(Creature* c, const MetaData::Skill* skill_meta)
{ {
return 0; float finaly_dmg =
(skill_meta->number_meta->float_ratio +
skill_meta->number_meta->float_ratio2 * c->GetBattleContext()->GetHeroTotalAtk());
return finaly_dmg;
} }
int SkillHelper::GetSwzbEffect(const MetaData::Skill* skill_meta) int SkillHelper::GetSwzbEffect(const MetaData::Skill* skill_meta)
@ -207,7 +210,17 @@ int SkillHelper::GetSwzbEffect(const MetaData::Skill* skill_meta)
int SkillHelper::GetSwzbPullDistance(const MetaData::Skill* skill_meta) int SkillHelper::GetSwzbPullDistance(const MetaData::Skill* skill_meta)
{ {
return 0; return skill_meta->number_meta->float_range2;
}
int SkillHelper::GetSwzbBuffId(const MetaData::Skill* skill_meta)
{
return kVertigoBuffId;
}
float SkillHelper::GetSwzbBuffTime(const MetaData::Skill* skill_meta)
{
return skill_meta->number_meta->float_time;
} }
void SkillHelper::ProcBulletHitBuff(Bullet* bullet, Creature* c, int buff_uniid) void SkillHelper::ProcBulletHitBuff(Bullet* bullet, Creature* c, int buff_uniid)
@ -343,12 +356,12 @@ int SkillHelper::GetJyfhBuffId(const MetaData::Skill* skill_meta)
return 0; return 0;
} }
int SkillHelper::GetJyfhBuffTime(const MetaData::Skill* skill_meta) float SkillHelper::GetJyfhBuffTime(const MetaData::Skill* skill_meta)
{ {
return 0; return 0;
} }
int SkillHelper::GetJyfhDmgRuduce(const MetaData::Skill* skill_meta) float SkillHelper::GetJyfhDmgRuduce(const MetaData::Skill* skill_meta)
{ {
return 0; return 0;
} }

View File

@ -29,9 +29,11 @@ class SkillHelper
static int GetJshxHp(Creature* c, const MetaData::Skill* skill_meta); static int GetJshxHp(Creature* c, const MetaData::Skill* skill_meta);
//死亡自爆 //死亡自爆
static int GetSwzbRadius(const MetaData::Skill* skill_meta); static int GetSwzbRadius(const MetaData::Skill* skill_meta);
static int GetSwzbDmg(const MetaData::Skill* skill_meta); static int GetSwzbDmg(Creature* c, const MetaData::Skill* skill_meta);
static int GetSwzbEffect(const MetaData::Skill* skill_meta); static int GetSwzbEffect(const MetaData::Skill* skill_meta);
static int GetSwzbPullDistance(const MetaData::Skill* skill_meta); static int GetSwzbPullDistance(const MetaData::Skill* skill_meta);
static int GetSwzbBuffId(const MetaData::Skill* skill_meta);
static float GetSwzbBuffTime(const MetaData::Skill* skill_meta);
//野蛮冲撞 //野蛮冲撞
static int GetYmczBuffTime(const MetaData::Skill* skill_meta); static int GetYmczBuffTime(const MetaData::Skill* skill_meta);
static int GetYmczReserveDistance(const MetaData::Skill* skill_meta); static int GetYmczReserveDistance(const MetaData::Skill* skill_meta);
@ -41,8 +43,8 @@ class SkillHelper
static int GetYlzRecoverHp(Creature* sender, Creature* target, const MetaData::Skill* skill_meta); static int GetYlzRecoverHp(Creature* sender, Creature* target, const MetaData::Skill* skill_meta);
//救援防护 //救援防护
static int GetJyfhBuffId(const MetaData::Skill* skill_meta); static int GetJyfhBuffId(const MetaData::Skill* skill_meta);
static int GetJyfhBuffTime(const MetaData::Skill* skill_meta); static float GetJyfhBuffTime(const MetaData::Skill* skill_meta);
static int GetJyfhDmgRuduce(const MetaData::Skill* skill_meta); static float GetJyfhDmgRuduce(const MetaData::Skill* skill_meta);
static void ProcBulletHitBuff(Bullet* bullet, Creature* c, int buff_uniid); static void ProcBulletHitBuff(Bullet* bullet, Creature* c, int buff_uniid);
static bool ProcBulletDmg(Bullet* bullet, Creature* target, float& finaly_dmg); static bool ProcBulletDmg(Bullet* bullet, Creature* target, float& finaly_dmg);