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 383bdd19..b3f7f602 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(11432057u); + AgentMeta::SetTotalSignature(124058712u); AgentMeta* meta = NULL; BEHAVIAC_UNUSED_VAR(meta); @@ -708,9 +708,9 @@ namespace behaviac meta->RegisterMethod(502968959u, BEHAVIAC_NEW CMethod_behaviac_Agent_VectorRemove()); // TargetAgent - meta = BEHAVIAC_NEW AgentMeta(3584474458u); + meta = BEHAVIAC_NEW AgentMeta(1611323337u); AgentMeta::GetAgentMetas()[498664641u] = meta; - meta->RegisterMethod(347903289u, BEHAVIAC_NEW CAgentMethodVoid_1(FunctionPointer_TargetAgent_Abandon)); + meta->RegisterMethod(347903289u, BEHAVIAC_NEW CAgentMethodVoid_2(FunctionPointer_TargetAgent_Abandon)); meta->RegisterMethod(97826769u, BEHAVIAC_NEW CAgentMethodVoid(FunctionPointer_TargetAgent_ClearAbandon)); meta->RegisterMethod(2524021140u, BEHAVIAC_NEW CAgentMethod< int >(FunctionPointer_TargetAgent_GetHeroId)); meta->RegisterMethod(3358849663u, BEHAVIAC_NEW CAgentMethod< float >(FunctionPointer_TargetAgent_GetHp)); 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 a68798cd..b5c7dc3a 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 @@ -41,7 +41,7 @@ namespace behaviac inline int FunctionPointer_TeamAgent_GetMemberNum(Agent* self) { return ((TeamAgent*)self)->GetMemberNum(); } inline int FunctionPointer_TeamAgent_GetPlayerNum(Agent* self) { return ((TeamAgent*)self)->GetPlayerNum(); } inline void FunctionPointer_TeamAgent_LogMessage(char* param0) { TeamAgent::LogMessage(param0); } - inline void FunctionPointer_TargetAgent_Abandon(Agent* self, int time) { ((TargetAgent*)self)->Abandon(time); } + inline void FunctionPointer_TargetAgent_Abandon(Agent* self, int min_time, int max_time) { ((TargetAgent*)self)->Abandon(min_time, max_time); } inline void FunctionPointer_TargetAgent_ClearAbandon(Agent* self) { ((TargetAgent*)self)->ClearAbandon(); } inline int FunctionPointer_TargetAgent_GetHeroId(Agent* self) { return ((TargetAgent*)self)->GetHeroId(); } inline float FunctionPointer_TargetAgent_GetHp(Agent* self) { return ((TargetAgent*)self)->GetHp(); } diff --git a/server/bin/exported/meta/counterfire.meta.xml b/server/bin/exported/meta/counterfire.meta.xml index 160ee854..e5455ffe 100644 --- a/server/bin/exported/meta/counterfire.meta.xml +++ b/server/bin/exported/meta/counterfire.meta.xml @@ -1,6 +1,6 @@ - + diff --git a/server/gameserver/target_agent.cc b/server/gameserver/target_agent.cc index f0be6170..11d75e68 100644 --- a/server/gameserver/target_agent.cc +++ b/server/gameserver/target_agent.cc @@ -73,8 +73,9 @@ int TargetAgent::GetLevel() return target_.Get()->level; } -void TargetAgent::Abandon(int time) +void TargetAgent::Abandon(int min_time, int max_time) { + int time = a8::RandEx(min_time, max_time); if (target_.Get()) { auto itr = owner_->ignore_target_hash.find(target_.Get()->GetUniId()); if (itr != owner_->ignore_target_hash.end()) { @@ -121,7 +122,13 @@ void TargetAgent::SetTarget(Creature* target) void TargetAgent::ClearAbandon() { - + std::vector del_timers; + for (auto pair : owner_->ignore_target_hash) { + del_timers.push_back(pair.second); + } + for (auto t : del_timers) { + owner_->room->xtimer.Delete(t); + } } float TargetAgent::GetHPRate() diff --git a/server/gameserver/target_agent.h b/server/gameserver/target_agent.h index 0095ad21..eb760640 100644 --- a/server/gameserver/target_agent.h +++ b/server/gameserver/target_agent.h @@ -21,7 +21,7 @@ public: float GetMaxHp(); int GetHeroId(); int GetLevel(); - void Abandon(int time); + void Abandon(int min_time, int max_time); float GetShotRange(); void ClearAbandon(); float GetHPRate();