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 "explosion.h"
#include "buff.h"
#include "human.h"
void Skill::Initialzie()
{
@ -364,20 +365,40 @@ void Skill::ProcSWZB()
[this] (const std::vector<std::any>& params)
{
CreatureWeakPtr sender = owner->GetWeakPtrRef();
MetaData::Skill* skill_meta = meta;
a8::Vec2 center = owner->GetPos();
std::shared_ptr<Explosion> e = EntityFactory::Instance()->MakeExplosion();
e->SetThrough(true);
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()) {
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
@ -386,7 +407,7 @@ void Skill::ProcSWZB()
owner->GetPos(),
SkillHelper::GetSwzbRadius(meta),
SkillHelper::GetSwzbEffect(meta),
SkillHelper::GetSwzbDmg(meta)
0
);
}
);
@ -465,12 +486,19 @@ void Skill::ProcJYFH()
kStartRescueEvent,
[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
(
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)
{
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)
@ -207,7 +210,17 @@ int SkillHelper::GetSwzbEffect(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)
@ -343,12 +356,12 @@ int SkillHelper::GetJyfhBuffId(const MetaData::Skill* skill_meta)
return 0;
}
int SkillHelper::GetJyfhBuffTime(const MetaData::Skill* skill_meta)
float SkillHelper::GetJyfhBuffTime(const MetaData::Skill* skill_meta)
{
return 0;
}
int SkillHelper::GetJyfhDmgRuduce(const MetaData::Skill* skill_meta)
float SkillHelper::GetJyfhDmgRuduce(const MetaData::Skill* skill_meta)
{
return 0;
}

View File

@ -29,9 +29,11 @@ class SkillHelper
static int GetJshxHp(Creature* c, 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 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 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 GetJyfhBuffId(const MetaData::Skill* skill_meta);
static int GetJyfhBuffTime(const MetaData::Skill* skill_meta);
static int GetJyfhDmgRuduce(const MetaData::Skill* skill_meta);
static float GetJyfhBuffTime(const MetaData::Skill* skill_meta);
static float GetJyfhDmgRuduce(const MetaData::Skill* skill_meta);
static void ProcBulletHitBuff(Bullet* bullet, Creature* c, int buff_uniid);
static bool ProcBulletDmg(Bullet* bullet, Creature* target, float& finaly_dmg);