From 527cc1f33c5f27965888d25000b0fcb437339c02 Mon Sep 17 00:00:00 2001 From: aozhiwei Date: Tue, 17 Oct 2023 19:31:30 +0800 Subject: [PATCH] 1 --- .../types/internal/behaviac_agent_meta.cpp | 10 ++--- .../types/internal/behaviac_agent_meta.h | 4 +- server/gameserver/new_hero_agent.cc | 43 ++++++++++++++++--- 3 files changed, 43 insertions(+), 14 deletions(-) diff --git a/server/bin/exported/behaviac_generated/types/internal/behaviac_agent_meta.cpp b/server/bin/exported/behaviac_generated/types/internal/behaviac_agent_meta.cpp index 7dc51e17..746decd7 100644 --- a/server/bin/exported/behaviac_generated/types/internal/behaviac_agent_meta.cpp +++ b/server/bin/exported/behaviac_generated/types/internal/behaviac_agent_meta.cpp @@ -633,7 +633,7 @@ namespace behaviac virtual bool load() { - AgentMeta::SetTotalSignature(3036958947u); + AgentMeta::SetTotalSignature(1717576671u); AgentMeta* meta = NULL; BEHAVIAC_UNUSED_VAR(meta); @@ -728,7 +728,7 @@ namespace behaviac meta->RegisterMethod(502968959u, BEHAVIAC_NEW CMethod_behaviac_Agent_VectorRemove()); // HeroAgent - meta = BEHAVIAC_NEW AgentMeta(2517562503u); + meta = BEHAVIAC_NEW AgentMeta(276906930u); AgentMeta::GetAgentMetas()[2270112014u] = meta; meta->RegisterMemberProperty(2706111800u, BEHAVIAC_NEW CMemberProperty< TargetAgent* >("current_target_agent", Set_HeroAgent_current_target_agent, Get_HeroAgent_current_target_agent)); meta->RegisterMemberProperty(1530109714u, BEHAVIAC_NEW CMemberProperty< MasterAgent* >("master_agent", Set_HeroAgent_master_agent, Get_HeroAgent_master_agent)); @@ -811,7 +811,7 @@ namespace behaviac meta->RegisterMethod(1110901686u, BEHAVIAC_NEW CAgentMethod_2< int, int, int >(FunctionPointer_HeroAgent_RandRange)); meta->RegisterMethod(1373932231u, BEHAVIAC_NEW CAgentMethod_1< behaviac::EBTStatus, behaviac::vector >(FunctionPointer_HeroAgent_RegisterEvents)); meta->RegisterMethod(3146209884u, BEHAVIAC_NEW CAgentMethodVoid(FunctionPointer_HeroAgent_RunAway) /* RunAway */); - meta->RegisterMethod(160678866u, BEHAVIAC_NEW CAgentMethodVoid(FunctionPointer_HeroAgent_RunGas) /* RunGas */); + meta->RegisterMethod(160678866u, BEHAVIAC_NEW CAgentMethodVoid_3(FunctionPointer_HeroAgent_RunGas) /* RunGas */); meta->RegisterMethod(3025058903u, BEHAVIAC_NEW CAgentMethod_1< behaviac::EBTStatus, float >(FunctionPointer_HeroAgent_SearchEnemy)); meta->RegisterMethod(2380700906u, BEHAVIAC_NEW CAgentMethodVoid_1(FunctionPointer_HeroAgent_SendEmote)); meta->RegisterMethod(1147186661u, BEHAVIAC_NEW CMethod_HeroAgent_SetAttackDir()); @@ -829,7 +829,7 @@ namespace behaviac meta->RegisterMethod(502968959u, BEHAVIAC_NEW CMethod_behaviac_Agent_VectorRemove()); // AndroidAgent - meta = BEHAVIAC_NEW AgentMeta(836572310u); + meta = BEHAVIAC_NEW AgentMeta(3184243081u); AgentMeta::GetAgentMetas()[2475098143u] = meta; meta->RegisterMemberProperty(2706111800u, BEHAVIAC_NEW CMemberProperty< TargetAgent* >("current_target_agent", Set_HeroAgent_current_target_agent, Get_HeroAgent_current_target_agent)); meta->RegisterMemberProperty(1530109714u, BEHAVIAC_NEW CMemberProperty< MasterAgent* >("master_agent", Set_HeroAgent_master_agent, Get_HeroAgent_master_agent)); @@ -913,7 +913,7 @@ namespace behaviac meta->RegisterMethod(1110901686u, BEHAVIAC_NEW CAgentMethod_2< int, int, int >(FunctionPointer_AndroidAgent_RandRange)); meta->RegisterMethod(1373932231u, BEHAVIAC_NEW CAgentMethod_1< behaviac::EBTStatus, behaviac::vector >(FunctionPointer_AndroidAgent_RegisterEvents)); meta->RegisterMethod(3146209884u, BEHAVIAC_NEW CAgentMethodVoid(FunctionPointer_AndroidAgent_RunAway) /* RunAway */); - meta->RegisterMethod(160678866u, BEHAVIAC_NEW CAgentMethodVoid(FunctionPointer_AndroidAgent_RunGas) /* RunGas */); + meta->RegisterMethod(160678866u, BEHAVIAC_NEW CAgentMethodVoid_3(FunctionPointer_AndroidAgent_RunGas) /* RunGas */); meta->RegisterMethod(3025058903u, BEHAVIAC_NEW CAgentMethod_1< behaviac::EBTStatus, float >(FunctionPointer_AndroidAgent_SearchEnemy)); meta->RegisterMethod(2380700906u, BEHAVIAC_NEW CAgentMethodVoid_1(FunctionPointer_AndroidAgent_SendEmote)); meta->RegisterMethod(1147186661u, BEHAVIAC_NEW CMethod_HeroAgent_SetAttackDir()); diff --git a/server/bin/exported/behaviac_generated/types/internal/behaviac_agent_meta.h b/server/bin/exported/behaviac_generated/types/internal/behaviac_agent_meta.h index 9d8261b4..18af55d9 100644 --- a/server/bin/exported/behaviac_generated/types/internal/behaviac_agent_meta.h +++ b/server/bin/exported/behaviac_generated/types/internal/behaviac_agent_meta.h @@ -182,7 +182,7 @@ namespace behaviac inline int FunctionPointer_HeroAgent_RandRange(Agent* self, int min_val, int max_val) { return (int)((BaseAgent*)self)->_Execute_Method_(min_val, max_val); } inline behaviac::EBTStatus FunctionPointer_HeroAgent_RegisterEvents(Agent* self, behaviac::vector events) { return ((HeroAgent*)self)->RegisterEvents(events); } inline void FunctionPointer_HeroAgent_RunAway(Agent* self) { } /* RunAway */ - inline void FunctionPointer_HeroAgent_RunGas(Agent* self) { } /* RunGas */ + inline void FunctionPointer_HeroAgent_RunGas(Agent* self, int loc_val0, int loc_val1, int loc_val2) { } /* RunGas */ inline behaviac::EBTStatus FunctionPointer_HeroAgent_SearchEnemy(Agent* self, float range) { return ((HeroAgent*)self)->SearchEnemy(range); } inline void FunctionPointer_HeroAgent_SendEmote(Agent* self, int emote) { ((HeroAgent*)self)->_Execute_Method_(emote); } inline void FunctionPointer_HeroAgent_SetV(Agent* self, int id, int val) { ((HeroAgent*)self)->_Execute_Method_(id, val); } @@ -242,7 +242,7 @@ namespace behaviac inline int FunctionPointer_AndroidAgent_RandRange(Agent* self, int min_val, int max_val) { return (int)((BaseAgent*)self)->_Execute_Method_(min_val, max_val); } inline behaviac::EBTStatus FunctionPointer_AndroidAgent_RegisterEvents(Agent* self, behaviac::vector events) { return ((AndroidAgent*)self)->RegisterEvents(events); } inline void FunctionPointer_AndroidAgent_RunAway(Agent* self) { } /* RunAway */ - inline void FunctionPointer_AndroidAgent_RunGas(Agent* self) { } /* RunGas */ + inline void FunctionPointer_AndroidAgent_RunGas(Agent* self, int loc_val0, int loc_val1, int loc_val2) { } /* RunGas */ inline behaviac::EBTStatus FunctionPointer_AndroidAgent_SearchEnemy(Agent* self, float range) { return ((AndroidAgent*)self)->SearchEnemy(range); } inline void FunctionPointer_AndroidAgent_SendEmote(Agent* self, int emote) { ((HeroAgent*)self)->_Execute_Method_(emote); } inline void FunctionPointer_AndroidAgent_SetV(Agent* self, int id, int val) { ((HeroAgent*)self)->_Execute_Method_(id, val); } diff --git a/server/gameserver/new_hero_agent.cc b/server/gameserver/new_hero_agent.cc index 42cfd983..46d73f9d 100644 --- a/server/gameserver/new_hero_agent.cc +++ b/server/gameserver/new_hero_agent.cc @@ -242,15 +242,44 @@ glm::vec3 HeroAgent::RandomPoint(const glm::vec3& center, float range) behaviac::EBTStatus HeroAgent::RandomSafeZonePoint(int try_count, int step_len) { - glm::vec3 gas_center = GlmHelper::Vec2ToVec3(owner_->room->GetGasData().pos_new); - gas_center.y = owner_->GetPos().ToGlmVec3().y; - if (GlmHelper::IsEqual2D(owner_->GetPos().ToGlmVec3(), - gas_center)) { - return behaviac::BT_FAILURE; + if (status_ == behaviac::BT_RUNNING) { + return DoRunningCb(); } + auto context = MAKE_BTCONTEXT + ( + bool find_ok = false; + ); + auto co = std::make_shared(context, "RandomSafeZonePoint"); + co->runing_cb = + [this, context, try_count, step_len] () + { + if (owner_->dead) { + return behaviac::BT_FAILURE; + } + glm::vec3 gas_center = GlmHelper::Vec2ToVec3(owner_->room->GetGasData().pos_new); + gas_center.y = owner_->GetPos().ToGlmVec3().y; + if (GlmHelper::IsEqual2D(owner_->GetPos().ToGlmVec3(), + gas_center)) { + out_point0 = gas_center; + return behaviac::BT_SUCCESS; + } - glm::vec3 dir = gas_center - owner_->GetPos().ToGlmVec3(); - GlmHelper::Normalize(dir); + glm::vec3 dir = gas_center - owner_->GetPos().ToGlmVec3(); + GlmHelper::Normalize(dir); + + glm::vec3 center = owner_->GetPos().ToGlmVec3() + + dir * (50.0f + (float)(try_count + 1) * step_len); + owner_->room->map_instance->Scale(center); + glm::vec3 point; + bool ok = owner_->room->map_instance->FindConnectableNearestPoint(center, 50, point); + if (ok) { + owner_->room->map_instance->UnScale(point); + out_point0 = point; + return behaviac::BT_SUCCESS; + } + return behaviac::BT_FAILURE; + }; + return StartCoroutine(co); } float HeroAgent::GetShotRange()