From 810d59de53d6450d76ad0710de4e17a96548a93c Mon Sep 17 00:00:00 2001 From: aozhiwei Date: Mon, 20 Mar 2023 15:30:45 +0800 Subject: [PATCH] 1 --- server/gameserver/lispenv.cc | 54 ++++++++++++++++++++++++++++++++++++ 1 file changed, 54 insertions(+) diff --git a/server/gameserver/lispenv.cc b/server/gameserver/lispenv.cc index dd6aef90..c3c7c72e 100644 --- a/server/gameserver/lispenv.cc +++ b/server/gameserver/lispenv.cc @@ -5,6 +5,7 @@ #include "battledatacontext.h" #include "creature.h" #include "glmhelper.h" +#include "room.h" #include "mt/Skill.h" #include "mt/SkillNumber.h" @@ -29,6 +30,59 @@ public: result = context_.buff->skill_meta->_number_meta->GetAttrByIdx(idx); return std::make_shared(a8::lisp::Atom(result)); }); + RegisterCProc + ( + "buff.get_buff_var", + [this] (const a8::lisp::List& params) -> std::shared_ptr + { + double result = 0; + if (params->size() != 1) { + abort(); + } + a8::lisp::Atom atom = std::any_cast(params->at(0)->value); + int idx = atom.val; + result = context_.buff->buff_vars->at(idx); + return std::make_shared(a8::lisp::Atom(result)); + }); + RegisterCProc + ( + "entity.get_pos_x", + [this] (const a8::lisp::List& params) -> std::shared_ptr + { + a8::lisp::Atom atom = std::any_cast(params->at(0)->value); + Entity* e = context_.buff->owner->room->GetEntityByUniId(atom.val); + if (!e) { + abort(); + } + double result = e->GetPos().GetX(); + return std::make_shared(a8::lisp::Atom(result)); + }); + RegisterCProc + ( + "entity.get_pos_y", + [this] (const a8::lisp::List& params) -> std::shared_ptr + { + a8::lisp::Atom atom = std::any_cast(params->at(0)->value); + Entity* e = context_.buff->owner->room->GetEntityByUniId(atom.val); + if (!e) { + abort(); + } + double result = e->GetPos().GetY(); + return std::make_shared(a8::lisp::Atom(result)); + }); + RegisterCProc + ( + "entity.get_pos_z", + [this] (const a8::lisp::List& params) -> std::shared_ptr + { + a8::lisp::Atom atom = std::any_cast(params->at(0)->value); + Entity* e = context_.buff->owner->room->GetEntityByUniId(atom.val); + if (!e) { + abort(); + } + double result = e->GetPos().GetZ(); + return std::make_shared(a8::lisp::Atom(result)); + }); RegisterCProc ( "myself.get_hero_atk",