diff --git a/server/gameserver/lispenv.cc b/server/gameserver/lispenv.cc index 58624f5b..7d1b46da 100644 --- a/server/gameserver/lispenv.cc +++ b/server/gameserver/lispenv.cc @@ -278,6 +278,51 @@ public: } return std::make_shared(a8::lisp::Atom(result)); }); + + RegisterCProc + ( + "caster.get_skill_local_var", + [this] (const a8::lisp::List& params) -> std::shared_ptr + { + double result = 0.0f; + if (params->size() == 1) { + a8::lisp::Atom atom_idx = std::any_cast(params->at(0)->value); + if (context_.buff->GetCaster().Get() && context_.buff->skill_meta) { + result = context_.buff->GetCaster().Get()->GetSkillLocalVar + (context_.buff->skill_meta->skill_id(), + atom_idx.val); + } + } else { +#ifdef DEBUG + abort(); +#endif + } + return std::make_shared(a8::lisp::Atom(result)); + }); + + RegisterCProc + ( + "caster.set_skill_local_var", + [this] (const a8::lisp::List& params) -> std::shared_ptr + { + double result = 0.0f; + if (params->size() == 2) { + a8::lisp::Atom atom_idx = std::any_cast(params->at(0)->value); + a8::lisp::Atom atom_val = std::any_cast(params->at(1)->value); + if (context_.buff->GetCaster().Get() && context_.buff->skill_meta) { + context_.buff->GetCaster().Get()->SetSkillLocalVar + (context_.buff->skill_meta->skill_id(), + atom_idx.val, + atom_val.val); + } + } else { +#ifdef DEBUG + abort(); +#endif + } + return std::make_shared(a8::lisp::Atom(result)); + }); + } float Eval(std::shared_ptr expr,