From 93bb206c07f4dc1537061b3ddd2e2046054605b8 Mon Sep 17 00:00:00 2001 From: aozhiwei Date: Mon, 19 Jun 2023 17:54:30 +0800 Subject: [PATCH] 1 --- server/gameserver/car.h | 1 + server/gameserver/lispenv.cc | 26 +++++++++++++++++++++----- server/gameserver/mtb/mtb.all.cc | 6 +++--- server/gameserver/pbutils.cc | 3 +++ 4 files changed, 28 insertions(+), 8 deletions(-) diff --git a/server/gameserver/car.h b/server/gameserver/car.h index 8fc9ee4c..f1a02566 100644 --- a/server/gameserver/car.h +++ b/server/gameserver/car.h @@ -51,6 +51,7 @@ class Car : public Creature bool IsSingle(); bool CanOn(Human* hum); void SetSpecialOperators(std::set& special_operators); + std::set& GetSpecialOperators() { return special_operators_; }; private: int AllocSeat(); diff --git a/server/gameserver/lispenv.cc b/server/gameserver/lispenv.cc index 367dec81..f2abd7b2 100644 --- a/server/gameserver/lispenv.cc +++ b/server/gameserver/lispenv.cc @@ -114,13 +114,18 @@ public: }); RegisterCProc ( - "caster.get_hero_atk", + "myself.get_init_max_hp", [this] (const a8::lisp::List& params) -> std::shared_ptr { - double result = 0.0f; - if (context_.buff->GetCaster().Get()) { - result = context_.buff->GetCaster().Get()->GetBattleContext()->GetHeroTotalAtk(); - } + double result = context_.buff->owner->GetBattleContext()->GetMaxHP(); + return std::make_shared(a8::lisp::Atom(result)); + }); + RegisterCProc + ( + "myself.get_uniid", + [this] (const a8::lisp::List& params) -> std::shared_ptr + { + double result = context_.buff->owner->GetUniId(); return std::make_shared(a8::lisp::Atom(result)); }); RegisterCProc @@ -224,6 +229,17 @@ public: } return std::make_shared(a8::lisp::Atom(result)); }); + RegisterCProc + ( + "caster.get_hero_atk", + [this] (const a8::lisp::List& params) -> std::shared_ptr + { + double result = 0.0f; + if (context_.buff->GetCaster().Get()) { + result = context_.buff->GetCaster().Get()->GetBattleContext()->GetHeroTotalAtk(); + } + return std::make_shared(a8::lisp::Atom(result)); + }); } float Eval(std::shared_ptr expr, diff --git a/server/gameserver/mtb/mtb.all.cc b/server/gameserver/mtb/mtb.all.cc index 89586ab6..df7a40ab 100644 --- a/server/gameserver/mtb/mtb.all.cc +++ b/server/gameserver/mtb/mtb.all.cc @@ -453,7 +453,7 @@ namespace mtb { a8::reflect::Class* meta_class = nullptr; if (!meta_class) { - meta_class = new a8::reflect::Class("Buff", 36, 0); + meta_class = new a8::reflect::Class("Buff", 38, 0); meta_class->SetSimpleField(0, "buff_id", a8::reflect::ET_INT32, my_offsetof2(Buff, buff_id_)); meta_class->SetSimpleField(1, "name", a8::reflect::ET_STRING, my_offsetof2(Buff, name_)); meta_class->SetSimpleField(2, "buff_target", a8::reflect::ET_INT32, my_offsetof2(Buff, buff_target_)); @@ -490,8 +490,8 @@ namespace mtb meta_class->SetSimpleField(33, "effect_list", a8::reflect::ET_STRING, my_offsetof2(Buff, effect_list_)); meta_class->SetSimpleField(34, "res_scale", a8::reflect::ET_STRING, my_offsetof2(Buff, res_scale_)); meta_class->SetSimpleField(35, "tenacity", a8::reflect::ET_INT32, my_offsetof2(Buff, tenacity_)); - meta_class->SetSimpleField(36, "buff_param6", a8::reflect::ET_STRING, my_offsetof2(Buff, buff_param7_)); - meta_class->SetSimpleField(37, "buff_param6", a8::reflect::ET_STRING, my_offsetof2(Buff, buff_param8_)); + meta_class->SetSimpleField(36, "buff_param7", a8::reflect::ET_STRING, my_offsetof2(Buff, buff_param7_)); + meta_class->SetSimpleField(37, "buff_param8", a8::reflect::ET_STRING, my_offsetof2(Buff, buff_param8_)); } return meta_class; } diff --git a/server/gameserver/pbutils.cc b/server/gameserver/pbutils.cc index 759785bc..52c47375 100644 --- a/server/gameserver/pbutils.cc +++ b/server/gameserver/pbutils.cc @@ -379,6 +379,9 @@ void Car::FillMFObjectFull(Room* room, Human* hum, cs::MFObjectFull* full_data) if (GetDriver()) { Creature_FillSkillList(this, p->mutable_skill_list()); } + for (int op_id : GetSpecialOperators()) { + p->add_special_operators(op_id); + } } void Hero::FillMFObjectPart(Room* room, Human* hum, cs::MFObjectPart* part_data)