diff --git a/server/gameserver/android_agent.cc b/server/gameserver/android_agent.cc index bc2eef23..4ae73e3d 100644 --- a/server/gameserver/android_agent.cc +++ b/server/gameserver/android_agent.cc @@ -45,9 +45,9 @@ behaviac::EBTStatus AndroidAgent::DoIdle(int min_time, int max_time) std::weak_ptr handler = GetOwner()->GetTrigger()->AddListener ( kAttacked, - [this, last_attacker, last_attacked_frameno] (const std::vector& args) + [this, last_attacker, last_attacked_frameno] (const a8::Args& args) { - Creature* c = std::any_cast(args.at(0)); + Creature* c = args.Get(0); *last_attacker = c->GetWeakPtrRef(); *last_attacked_frameno = c->room->GetFrameNo(); }); @@ -105,9 +105,9 @@ behaviac::EBTStatus AndroidAgent::DoRandomWalk() std::weak_ptr handler = GetOwner()->GetTrigger()->AddListener ( kAttacked, - [this, last_attacker, last_attacked_frameno] (const std::vector& args) + [this, last_attacker, last_attacked_frameno] (const a8::Args& args) { - Creature* c = std::any_cast(args.at(0)); + Creature* c = args.Get(0); *last_attacker = c->GetWeakPtrRef(); *last_attacked_frameno = c->room->GetFrameNo(); }); @@ -160,9 +160,9 @@ behaviac::EBTStatus AndroidAgent::DoRandomShot() std::weak_ptr handler = GetOwner()->GetTrigger()->AddListener ( kAttacked, - [this, last_attacker, last_attacked_frameno] (const std::vector& args) + [this, last_attacker, last_attacked_frameno] (const a8::Args& args) { - Creature* c = std::any_cast(args.at(0)); + Creature* c = args.Get(0); *last_attacker = c->GetWeakPtrRef(); *last_attacked_frameno = c->room->GetFrameNo(); }); diff --git a/server/gameserver/app.cc b/server/gameserver/app.cc index 59f381b8..e0273992 100644 --- a/server/gameserver/app.cc +++ b/server/gameserver/app.cc @@ -440,9 +440,7 @@ bool App::HasTask() void App::DispatchMsg() { - #ifdef PERFT long long begin_tick = a8::XGetTickCount(); - #endif if (!work_node_ && top_node_) { msg_mutex_->lock(); work_node_ = top_node_; @@ -483,12 +481,10 @@ void App::DispatchMsg() if (!work_node_) { working_msgnode_size_ = 0; } - #ifdef PERFT a8::tick_t end_tick = a8::XGetTickCount(); if (end_tick - begin_tick > PerfMonitor::Instance()->max_dispatchmsg_time) { PerfMonitor::Instance()->max_dispatchmsg_time = end_tick - begin_tick; } - #endif } void App::ProcessGameGateMsg(f8::MsgHdr& hdr) diff --git a/server/gameserver/buff.cc b/server/gameserver/buff.cc index c2143e22..3ace3f25 100644 --- a/server/gameserver/buff.cc +++ b/server/gameserver/buff.cc @@ -1050,10 +1050,10 @@ void Buff::ProcMachineGun() owner->GetTrigger()->AddListener ( kSkillBulletPreCreateEvent, - [this] (const std::vector& params) + [this] (const a8::Args& args) { - int delay_time = std::any_cast(params.at(0)); - MetaData::Skill* bullet_skill_meta = std::any_cast(params.at(1)); + int delay_time = args.Get(0); + MetaData::Skill* bullet_skill_meta = args.Get(1); int passed_frames = (owner->room->GetFrameNo() - add_frameno); int raw_frames = skill_meta->number_meta->float_time * 1000 / FRAME_RATE_MS; if (skill_meta == bullet_skill_meta && @@ -1073,9 +1073,9 @@ void Buff::ProcMachineGun() owner->GetTrigger()->AddListener ( kFlyHookCreateEvent, - [this] (const std::vector& params) + [this] (const a8::Args& args) { - Bullet* bullet = std::any_cast(params.at(0)); + Bullet* bullet = args.Get(0); int passed_frames = (owner->room->GetFrameNo() - add_frameno); int raw_frames = skill_meta->number_meta->float_time * 1000 / FRAME_RATE_MS; owner->room->xtimer.ModifyTimer @@ -1091,7 +1091,7 @@ void Buff::ProcMachineGun() owner->GetTrigger()->AddListener ( kFlyHookDestoryEvent, - [this] (const std::vector& params) + [this] (const a8::Args& args) { int passed_frames = (owner->room->GetFrameNo() - add_frameno); int raw_frames = skill_meta->number_meta->float_time * 1000 / FRAME_RATE_MS; @@ -1347,9 +1347,9 @@ void Buff::PreProcess() owner->GetTrigger()->AddListener ( kTriggerBulletHitBuffEvent, - [this] (const std::vector& params) + [this] (const a8::Args& args) { - Bullet* bullet = std::any_cast(params.at(0)); + Bullet* bullet = args.Get(0); ProcSputteringFunc(bullet); })); } diff --git a/server/gameserver/explosion.cc b/server/gameserver/explosion.cc index ff69d3a2..52da4e03 100644 --- a/server/gameserver/explosion.cc +++ b/server/gameserver/explosion.cc @@ -88,7 +88,7 @@ void Explosion::ProcDamage() if (sender_.Get() && sender_.Get()->IsProperTarget(c)) { if (custom_check_cb_) { bool is_hit = false; - custom_check_cb_({&is_hit, (Entity*)c}); + custom_check_cb_(a8::Args({&is_hit, (Entity*)c})); if (is_hit) { objects.insert(c); } @@ -101,7 +101,7 @@ void Explosion::ProcDamage() } else { if (custom_check_cb_) { bool is_hit = false; - custom_check_cb_({&is_hit, (Entity*)c}); + custom_check_cb_(a8::Args({&is_hit, (Entity*)c})); if (is_hit) { objects.insert(c); } @@ -130,7 +130,7 @@ void Explosion::ProcDamage() } if (custom_check_cb_) { bool is_hit = false; - custom_check_cb_({&is_hit, entity}); + custom_check_cb_(a8::Args({&is_hit, entity})); if (is_hit) { objects.insert(entity); } @@ -152,7 +152,7 @@ void Explosion::ProcDamage() target->OnExplosionHit(this); } if (hit_cb_) { - hit_cb_({target}); + hit_cb_(a8::Args({target})); } } } diff --git a/server/gameserver/explosion.h b/server/gameserver/explosion.h index e0f75dcb..9f009ee9 100644 --- a/server/gameserver/explosion.h +++ b/server/gameserver/explosion.h @@ -17,8 +17,8 @@ class Explosion : public std::enable_shared_from_this bool IsPreBattleExplosion(); int GetExplosionEffect() { return explosion_effect_; }; void SetDamageDelay(int delay) { explosion_damage_delay_ = delay; }; - void SetHitCb(CommonCbProc cb) { hit_cb_ = cb; }; - void SetCustomCheckCb(CommonCbProc cb) { custom_check_cb_ = cb; }; + void SetHitCb(a8::CommonCbProc cb) { hit_cb_ = cb; }; + void SetCustomCheckCb(a8::CommonCbProc cb) { custom_check_cb_ = cb; }; void SetThrough(bool through) { through_ = through; }; bool IsThrough() { return through_; }; void SetNoSync() { no_sync_ = true; }; @@ -54,8 +54,8 @@ protected: Position center_; long long special_damage_type_ = 0; long long create_frameno_ = 0; - CommonCbProc custom_check_cb_; - CommonCbProc hit_cb_; + a8::CommonCbProc custom_check_cb_; + a8::CommonCbProc hit_cb_; bool through_ = false; bool no_sync_ = false; diff --git a/server/gameserver/precompile.h b/server/gameserver/precompile.h index 8dd02626..2d6e1f68 100644 --- a/server/gameserver/precompile.h +++ b/server/gameserver/precompile.h @@ -1,10 +1,5 @@ #pragma once -#define GAMESERVER_SRC 1 -#define PERFT 1 - -#include - #include #include #include @@ -13,21 +8,11 @@ #include #include -typedef std::function&)> CommonCbProc; - #include "constant.h" #include "constant_export.h" #include "types.h" #include "global.h" -namespace google -{ - namespace protobuf - { - class Message; - } -} - #include "f8/types.h" #include "f8/protoutils.h" diff --git a/server/gameserver/skill.cc b/server/gameserver/skill.cc index d4ff741a..0a9db702 100644 --- a/server/gameserver/skill.cc +++ b/server/gameserver/skill.cc @@ -340,11 +340,11 @@ void Skill::ProcSJXY() owner->GetTrigger()->AddListener ( kBulletHitEvent, - [this, shot_times, hited_objs] (const std::vector& params) mutable + [this, shot_times, hited_objs] (const a8::Args& args) mutable { ++shot_times; - IBullet* bullet = std::any_cast(params.at(0)); - Creature* target = std::any_cast(params.at(1)); + IBullet* bullet = args.Get(0); + Creature* target = args.Get(1); int rnd = rand(); bool is_hit = false; bool is_immune = false; @@ -402,7 +402,7 @@ void Skill::ProcSSJS() owner->GetTrigger()->AddListener ( kReceiveDmgEvent, - [this, add_speed_timer] (const std::vector& params) mutable + [this, add_speed_timer] (const a8::Args& args) mutable { int rnd = rand(); MetaData::Skill* skill_meta = meta; @@ -465,9 +465,9 @@ void Skill::ProcJSHX() owner->GetTrigger()->AddListener ( kKillEvent, - [this] (const std::vector& params) + [this] (const a8::Args& args) { - int weapon_id = std::any_cast(params.at(2)); + int weapon_id = args.Get(2); if (owner->GetCurrWeapon()->meta->i->id() != weapon_id) { return; } @@ -507,9 +507,9 @@ void Skill::ProcSWZB() owner->GetTrigger()->AddListener ( kPreDieEvent, - [this] (const std::vector& params) + [this] (const a8::Args& args) { - int killer_id = std::any_cast(params.at(0)); + int killer_id = args.Get(0); CreatureWeakPtr sender = owner->GetWeakPtrRef(); MetaData::Skill* skill_meta = meta; Position center = owner->GetPos(); @@ -518,10 +518,10 @@ void Skill::ProcSWZB() e->SetNoSync(); e->SetHitCb ( - [sender, center, skill_meta] (const std::vector& params) mutable + [sender, center, skill_meta] (const a8::Args& args) mutable { if (sender.Get()) { - Entity* e = std::any_cast(params.at(0)); + Entity* e = args.Get(0); if (e->IsCreature(sender.Get()->room)) { Creature* c = (Creature*)e; if (c->IsInvincible()) { @@ -588,7 +588,7 @@ void Skill::ProcSWZB() owner->GetTrigger()->AddListener ( kDieEvent, - [this] (const std::vector& params) + [this] (const a8::Args& args) { #if 0 int killer_id = std::any_cast(params.at(0)); @@ -605,7 +605,7 @@ void Skill::ProcCMXD() owner->GetTrigger()->AddListener ( kShieldDestoryEvent, - [this] (const std::vector& params) + [this] (const a8::Args& params) { Buff* hold_shield_buff = owner->GetBuffByEffectId(kBET_HoldShield); if (hold_shield_buff) { @@ -618,10 +618,11 @@ void Skill::ProcCMXD() e->SetThrough(true); e->SetCustomCheckCb ( - [sender, skill_meta, this_skill_meta, shield_buff_meta] (const std::vector& params) mutable + [sender, skill_meta, this_skill_meta, shield_buff_meta] + (const a8::Args& args) mutable { - bool* is_hit = std::any_cast(params.at(0)); - Entity* e = std::any_cast(params.at(1)); + bool* is_hit = args.Get(0); + Entity* e = args.Get(1); if (sender.Get() && e->IsCreature(sender.Get()->room)) { // 999 #if 1 @@ -648,10 +649,10 @@ void Skill::ProcCMXD() ); e->SetHitCb ( - [sender, skill_meta] (const std::vector& params) mutable + [sender, skill_meta] (const a8::Args& args) mutable { if (sender.Get()) { - Entity* e = std::any_cast(params.at(0)); + Entity* e = args.Get(0); if (e->IsCreature(sender.Get()->room)) { Creature* c = (Creature*)e; if (c->IsInvincible()) { @@ -721,9 +722,10 @@ void Skill::ProcMYXY() owner->GetTrigger()->AddListener ( kUseSkillEvent, - [this, speed_rate, atk_rate, immune_buff_uniid] (const std::vector& params) + [this, speed_rate, atk_rate, immune_buff_uniid] + (const a8::Args& args) { - Skill* skill = std::any_cast(params.at(0)); + Skill* skill = args.Get(0); if (skill->meta->GetMagicId() != MAGIC_HJHX) { return; } @@ -772,9 +774,9 @@ void Skill::ProcGZJS() ( kFlyHookCreateEvent, [this, dmg_ruduce_rate, dmg_ruduce_timer, immune_buff_uniid, hold_gun_buff_uniid] - (const std::vector& params) mutable + (const a8::Args& args) mutable { - Bullet* bullet = std::any_cast(params.at(0)); + Bullet* bullet = args.Get(0); if (!bullet->skill_meta || bullet->skill_meta->GetMagicId() != MAGIC_FG) { return; } @@ -831,7 +833,8 @@ void Skill::ProcGZJS() owner->GetTrigger()->AddListener ( kFlyHookDestoryEvent, - [this, dmg_ruduce_rate, immune_buff_uniid, hold_gun_buff_uniid] (const std::vector& params) + [this, dmg_ruduce_rate, immune_buff_uniid, hold_gun_buff_uniid] + (const a8::Args& args) { if (*immune_buff_uniid) { owner->RemoveBuffByUniId(*immune_buff_uniid); @@ -853,9 +856,9 @@ void Skill::ProcJYFH() owner->GetTrigger()->AddListener ( kStartRescueEvent, - [this, buff_id, buff_time] (const std::vector& params) + [this, buff_id, buff_time] (const a8::Args& args) { - Human* target = std::any_cast(params.at(0)); + Human* target = args.Get(0); owner->TryAddBuffAndSetTime(owner, buff_id, buff_time * 1000, meta); target->TryAddBuffAndSetTime(owner, buff_id, buff_time * 1000, meta); } @@ -863,9 +866,9 @@ void Skill::ProcJYFH() owner->GetTrigger()->AddListener ( kEndRescueEvent, - [this, buff_id] (const std::vector& params) + [this, buff_id] (const a8::Args& args) { - Human* target = std::any_cast(params.at(0)); + Human* target = args.Get(0); owner->RemoveBuffById(buff_id); target->RemoveBuffById(buff_id); } @@ -891,9 +894,9 @@ void Skill::ProcFH() owner->GetTrigger()->AddListener ( kDieEvent, - [this, relive_times] (const std::vector& params) mutable + [this, relive_times] (const a8::Args& args) mutable { - int killer_id = std::any_cast(params.at(0)); + int killer_id = args.Get(0); if (relive_times <= 0) { ++relive_times; if (killer_id != owner->GetUniId()) { @@ -948,9 +951,9 @@ void Skill::ProcYSHF() owner->GetTrigger()->AddListener ( kYsRemoveEvent, - [this] (const std::vector& params) + [this] (const a8::Args& args) { - Buff* buff = std::any_cast(params.at(0)); + Buff* buff = args.Get(0); if (buff->remover_timer && !buff->owner->dead) { int buff_time = owner->room->xtimer.GetRemainTime(buff->remover_timer) * FRAME_RATE_MS; int remain_time = buff_time - meta->number_meta->float_time * 1000; diff --git a/server/gameserver/trigger.cc b/server/gameserver/trigger.cc index f9aa66dd..c32c21f6 100644 --- a/server/gameserver/trigger.cc +++ b/server/gameserver/trigger.cc @@ -395,7 +395,7 @@ void Trigger::RemoveBuffs(int cond, std::vector& buffids) } } -std::weak_ptr Trigger::AddListener(int event_id, CommonCbProc cb) +std::weak_ptr Trigger::AddListener(int event_id, a8::CommonCbProc cb) { auto itr = listeners_hash_.find(event_id); if (itr == listeners_hash_.end()) { diff --git a/server/gameserver/trigger.h b/server/gameserver/trigger.h index e66da480..9d6f3b96 100644 --- a/server/gameserver/trigger.h +++ b/server/gameserver/trigger.h @@ -14,7 +14,7 @@ struct EventHandlerPtr struct EventHandler { - CommonCbProc cb; + a8::CommonCbProc cb; list_head entry; std::shared_ptr ptr; }; @@ -79,7 +79,7 @@ public: void BulletHitBuff(Bullet* bullet); void Attacked(Creature* sender); - std::weak_ptr AddListener(int event_id, CommonCbProc cb); + std::weak_ptr AddListener(int event_id, a8::CommonCbProc cb); void RemoveEventHandler(std::weak_ptr handler_ptr); void DispatchEvent(int event_id, const std::vector& params); diff --git a/third_party/a8 b/third_party/a8 index fdce7c90..358c62df 160000 --- a/third_party/a8 +++ b/third_party/a8 @@ -1 +1 @@ -Subproject commit fdce7c90252715cce8d4e9c72f45b129506d3c68 +Subproject commit 358c62df57da601e0c2c14f38e705b17fa0fc87c