1
This commit is contained in:
parent
55790d511d
commit
d456784353
@ -77,7 +77,7 @@ int Buff::GetLeftTime()
|
||||
|
||||
int Buff::GetLastingTime()
|
||||
{
|
||||
return meta->GetDurationTime(owner, skill_meta) * 1000;
|
||||
return meta->GetDurationTime(this) * 1000;
|
||||
}
|
||||
|
||||
void Buff::InternalTimerAddBuff()
|
||||
|
@ -20,7 +20,7 @@ void CallFuncBuff::Activate()
|
||||
break;
|
||||
case BuffCallFunc_e::kSpeedReduce:
|
||||
{
|
||||
hold_param2_ = meta->GetBuffParam2(owner, skill_meta);
|
||||
hold_param2_ = meta->GetBuffParam2(this);
|
||||
owner->GetAbility()->AddSpeedRuduce(hold_param2_);
|
||||
}
|
||||
break;
|
||||
@ -31,7 +31,18 @@ void CallFuncBuff::Activate()
|
||||
break;
|
||||
case BuffCallFunc_e::kDecHp:
|
||||
{
|
||||
hold_param2_ = meta->GetBuffParam2(owner, skill_meta);
|
||||
hold_param2_ = meta->GetBuffParam2(this);
|
||||
if (GetCaster().Get()) {
|
||||
float dmg_out = 0.0f;
|
||||
owner->DecHP(hold_param2_,
|
||||
GetCaster().Get()->GetUniId(),
|
||||
GetCaster().Get()->GetName(),
|
||||
VP_Buff,
|
||||
GetCaster().Get()->GetUniId(),
|
||||
GetCaster().Get()->GetName(),
|
||||
dmg_out
|
||||
);
|
||||
}
|
||||
}
|
||||
break;
|
||||
case BuffCallFunc_e::kMarkTag:
|
||||
@ -41,7 +52,7 @@ void CallFuncBuff::Activate()
|
||||
break;
|
||||
case BuffCallFunc_e::kSpeedAddition:
|
||||
{
|
||||
hold_param2_ = meta->GetBuffParam2(owner, skill_meta);
|
||||
hold_param2_ = meta->GetBuffParam2(this);
|
||||
owner->GetAbility()->AddSpeedAddition(hold_param2_);
|
||||
}
|
||||
break;
|
||||
@ -113,7 +124,7 @@ void CallFuncBuff::ProcIntervalRangeAddBuffFunc()
|
||||
void CallFuncBuff::ProcAddMinorMode()
|
||||
{
|
||||
if (skill_meta) {
|
||||
float dur_time = meta->GetBuffParam3(owner, skill_meta);
|
||||
float dur_time = meta->GetBuffParam3(this);
|
||||
Skill* skill = owner->GetSkill(skill_meta->skill_id());
|
||||
if (skill) {
|
||||
skill->AddMinorMode
|
||||
|
@ -13,7 +13,7 @@
|
||||
|
||||
void ReverseBuff::Activate()
|
||||
{
|
||||
hold_param1_ = meta->GetBuffParam1(owner, skill_meta);
|
||||
hold_param1_ = meta->GetBuffParam1(this);
|
||||
if (caster_.Get()) {
|
||||
glm::vec3 dir = caster_.Get()->GetPos().CalcDir(owner->GetPos());
|
||||
if ((std::isfinite(dir.x) &&
|
||||
|
@ -22,9 +22,9 @@ void SprintBuff::Activate()
|
||||
owner->IncDisableMoveDirTimes();
|
||||
}
|
||||
#endif
|
||||
move_distance_limit_ = meta->GetBuffParam2(owner, skill_meta);
|
||||
check_interval_time_ = meta->GetBuffParam5(owner, skill_meta);
|
||||
check_distance_ = meta->GetBuffParam4(owner, skill_meta);
|
||||
move_distance_limit_ = meta->GetBuffParam2(this);
|
||||
check_interval_time_ = meta->GetBuffParam5(this);
|
||||
check_distance_ = meta->GetBuffParam4(this);
|
||||
SprintMove();
|
||||
CoCollisionCheck();
|
||||
}
|
||||
@ -178,34 +178,6 @@ void SprintBuff::OnEnemyHit(Creature* enemy)
|
||||
for (int buff_id : meta->_buff_param3_int_list) {
|
||||
enemy->TryAddBuff(owner, buff_id, skill_meta);
|
||||
}
|
||||
#if 0
|
||||
if (skill_meta) {
|
||||
switch (skill_meta->GetMagicId()) {
|
||||
case MAGIC_20901_XIONG:
|
||||
{
|
||||
float dmg = SkillHelper::GetYmczDmg(owner,
|
||||
enemy,
|
||||
skill_meta);
|
||||
if (dmg > 0.0001f) {
|
||||
float dmg_out = 0.0f;
|
||||
enemy->DecHP(
|
||||
dmg,
|
||||
owner->GetUniId(),
|
||||
owner->GetName(),
|
||||
0,
|
||||
owner->GetUniId(),
|
||||
owner->GetName(),
|
||||
dmg_out);
|
||||
}
|
||||
}
|
||||
break;
|
||||
default:
|
||||
{
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
#if 0
|
||||
|
@ -275,7 +275,7 @@ int Creature::AddBuff(Creature* caster,
|
||||
{
|
||||
buff->remover_timer = room->xtimer.SetTimeoutWpEx
|
||||
(
|
||||
buff_meta->GetDurationTime(this, buff_skill_meta) * SERVER_FRAME_RATE,
|
||||
buff_meta->GetDurationTime(buff.get()) * SERVER_FRAME_RATE,
|
||||
[buff_wp = (std::weak_ptr<Buff>)buff] (int event, const a8::Args* args)
|
||||
{
|
||||
if (a8::TIMER_EXEC_EVENT == event) {
|
||||
|
@ -1,6 +1,7 @@
|
||||
#include "precompile.h"
|
||||
|
||||
#include "lispenv.h"
|
||||
#include "buff.h"
|
||||
|
||||
#include "mt/Skill.h"
|
||||
#include "mt/SkillNumber.h"
|
||||
@ -22,22 +23,19 @@ public:
|
||||
}
|
||||
a8::lisp::Atom atom = std::any_cast<a8::lisp::Atom>(params->at(0)->value);
|
||||
int idx = atom.val;
|
||||
result = context_.skill_meta->_number_meta->GetAttrByIdx(idx);
|
||||
result = context_.buff->skill_meta->_number_meta->GetAttrByIdx(idx);
|
||||
return std::make_shared<a8::lisp::Value>(a8::lisp::Atom(result));
|
||||
});
|
||||
}
|
||||
|
||||
float Eval(std::shared_ptr<a8::lisp::Value> expr,
|
||||
Creature* c,
|
||||
const mt::Skill* skill_meta)
|
||||
Buff* buff)
|
||||
{
|
||||
context_.c = c;
|
||||
context_.skill_meta = skill_meta;
|
||||
context_.buff = buff;
|
||||
|
||||
auto result = a8::lisp::Expr::Eval(expr, shared_from_this());
|
||||
|
||||
context_.c = nullptr;
|
||||
context_.skill_meta = nullptr;
|
||||
context_.buff = nullptr;
|
||||
|
||||
if (!result) {
|
||||
abort();
|
||||
@ -102,8 +100,7 @@ public:
|
||||
private:
|
||||
|
||||
struct {
|
||||
Creature* c = nullptr;
|
||||
const mt::Skill* skill_meta = nullptr;
|
||||
Buff* buff = nullptr;
|
||||
} context_;
|
||||
|
||||
};
|
||||
@ -125,8 +122,7 @@ std::shared_ptr<a8::lisp::Value> LispEnv::CompileSkillNumberExpr(const std::stri
|
||||
}
|
||||
|
||||
float LispEnv::EvalSkillNumberExpr(std::shared_ptr<a8::lisp::Value> expr,
|
||||
Creature* c,
|
||||
const mt::Skill* skill_meta)
|
||||
Buff* buff)
|
||||
{
|
||||
return skill_env_->Eval(expr, c, skill_meta);
|
||||
return skill_env_->Eval(expr, buff);
|
||||
}
|
||||
|
@ -19,8 +19,8 @@ class LispEnv : public a8::Singleton<LispEnv>
|
||||
|
||||
std::shared_ptr<a8::lisp::Value> CompileSkillNumberExpr(const std::string& script);
|
||||
float EvalSkillNumberExpr(std::shared_ptr<a8::lisp::Value> expr,
|
||||
Creature* c,
|
||||
const mt::Skill* skill_meta);
|
||||
Buff* buff
|
||||
);
|
||||
|
||||
private:
|
||||
|
||||
|
@ -345,79 +345,73 @@ namespace mt
|
||||
}
|
||||
}
|
||||
|
||||
float Buff::GetDurationTime(Creature* c, const mt::Skill* skill_meta) const
|
||||
float Buff::GetDurationTime(::Buff* buff) const
|
||||
{
|
||||
if (_duration_time_expr) {
|
||||
return LispEnv::Instance()->EvalSkillNumberExpr
|
||||
(
|
||||
_duration_time_expr,
|
||||
c,
|
||||
skill_meta
|
||||
buff
|
||||
);
|
||||
}
|
||||
return _duration_time;
|
||||
}
|
||||
|
||||
float Buff::GetBuffParam1(Creature* c, const mt::Skill* skill_meta) const
|
||||
float Buff::GetBuffParam1(::Buff* buff) const
|
||||
{
|
||||
if (_buff_param1_expr) {
|
||||
return LispEnv::Instance()->EvalSkillNumberExpr
|
||||
(
|
||||
_buff_param1_expr,
|
||||
c,
|
||||
skill_meta
|
||||
buff
|
||||
);
|
||||
}
|
||||
return _buff_param1;
|
||||
}
|
||||
|
||||
float Buff::GetBuffParam2(Creature* c, const mt::Skill* skill_meta) const
|
||||
float Buff::GetBuffParam2(::Buff* buff) const
|
||||
{
|
||||
if (_buff_param2_expr) {
|
||||
return LispEnv::Instance()->EvalSkillNumberExpr
|
||||
(
|
||||
_buff_param2_expr,
|
||||
c,
|
||||
skill_meta
|
||||
buff
|
||||
);
|
||||
}
|
||||
return _buff_param2;
|
||||
}
|
||||
|
||||
float Buff::GetBuffParam3(Creature* c, const mt::Skill* skill_meta) const
|
||||
float Buff::GetBuffParam3(::Buff* buff) const
|
||||
{
|
||||
if (_buff_param3_expr) {
|
||||
return LispEnv::Instance()->EvalSkillNumberExpr
|
||||
(
|
||||
_buff_param3_expr,
|
||||
c,
|
||||
skill_meta
|
||||
buff
|
||||
);
|
||||
}
|
||||
return _buff_param3;
|
||||
}
|
||||
|
||||
float Buff::GetBuffParam4(Creature* c, const mt::Skill* skill_meta) const
|
||||
float Buff::GetBuffParam4(::Buff* buff) const
|
||||
{
|
||||
if (_buff_param4_expr) {
|
||||
return LispEnv::Instance()->EvalSkillNumberExpr
|
||||
(
|
||||
_buff_param4_expr,
|
||||
c,
|
||||
skill_meta
|
||||
buff
|
||||
);
|
||||
}
|
||||
return _buff_param4;
|
||||
}
|
||||
|
||||
float Buff::GetBuffParam5(Creature* c, const mt::Skill* skill_meta) const
|
||||
float Buff::GetBuffParam5(::Buff* buff) const
|
||||
{
|
||||
if (_buff_param5_expr) {
|
||||
return LispEnv::Instance()->EvalSkillNumberExpr
|
||||
(
|
||||
_buff_param5_expr,
|
||||
c,
|
||||
skill_meta
|
||||
buff
|
||||
);
|
||||
}
|
||||
return _buff_param5;
|
||||
|
@ -12,6 +12,7 @@ namespace a8
|
||||
|
||||
}
|
||||
|
||||
class Buff;
|
||||
class Creature;
|
||||
namespace mt
|
||||
{
|
||||
@ -54,12 +55,12 @@ namespace mt
|
||||
|
||||
std::vector<int> _child_buff_list;
|
||||
|
||||
float GetDurationTime(Creature* c, const mt::Skill* skill_meta) const;
|
||||
float GetBuffParam1(Creature* c, const mt::Skill* skill_meta) const;
|
||||
float GetBuffParam2(Creature*, const mt::Skill* skill_meta) const;
|
||||
float GetBuffParam3(Creature* c, const mt::Skill* skill_meta) const;
|
||||
float GetBuffParam4(Creature* c, const mt::Skill* skill_meta) const;
|
||||
float GetBuffParam5(Creature* c, const mt::Skill* skill_meta) const;
|
||||
float GetDurationTime(::Buff* buff) const;
|
||||
float GetBuffParam1(::Buff* buff) const;
|
||||
float GetBuffParam2(::Buff* buff) const;
|
||||
float GetBuffParam3(::Buff* buff) const;
|
||||
float GetBuffParam4(::Buff* buff) const;
|
||||
float GetBuffParam5(::Buff* buff) const;
|
||||
|
||||
private:
|
||||
float _duration_time = 0.0f;
|
||||
|
Loading…
x
Reference in New Issue
Block a user