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 8f45fa9b..eaf140b5 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(1342570378u); + AgentMeta::SetTotalSignature(2907398068u); 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(3996536000u); + meta = BEHAVIAC_NEW AgentMeta(3594818698u); AgentMeta::GetAgentMetas()[498664641u] = meta; - meta->RegisterMethod(347903289u, BEHAVIAC_NEW CAgentMethodVoid(FunctionPointer_TargetAgent_Abandon)); + meta->RegisterMethod(347903289u, BEHAVIAC_NEW CAgentMethodVoid_1(FunctionPointer_TargetAgent_Abandon)); meta->RegisterMethod(2524021140u, BEHAVIAC_NEW CAgentMethod< int >(FunctionPointer_TargetAgent_GetHeroId)); meta->RegisterMethod(3358849663u, BEHAVIAC_NEW CAgentMethod< float >(FunctionPointer_TargetAgent_GetHp)); meta->RegisterMethod(3451565888u, BEHAVIAC_NEW CAgentMethod< int >(FunctionPointer_TargetAgent_GetLevel)); 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 a44c7004..ab4fa777 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) { ((TargetAgent*)self)->Abandon(); } + inline void FunctionPointer_TargetAgent_Abandon(Agent* self, int time) { ((TargetAgent*)self)->Abandon(time); } inline int FunctionPointer_TargetAgent_GetHeroId(Agent* self) { return ((TargetAgent*)self)->GetHeroId(); } inline float FunctionPointer_TargetAgent_GetHp(Agent* self) { return ((TargetAgent*)self)->GetHp(); } inline int FunctionPointer_TargetAgent_GetLevel(Agent* self) { return ((TargetAgent*)self)->GetLevel(); } diff --git a/server/bin/exported/hero/standard.xml b/server/bin/exported/hero/standard.xml index f87a1b06..58c90aa6 100644 --- a/server/bin/exported/hero/standard.xml +++ b/server/bin/exported/hero/standard.xml @@ -3,14 +3,42 @@ + + + + + + + + + + + + + + - - - + + + + + + + + + + + + + + + + + diff --git a/server/bin/exported/meta/counterfire.meta.xml b/server/bin/exported/meta/counterfire.meta.xml index b478eb87..a88c40e5 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/bin/exported/task/ChaseToKill.xml b/server/bin/exported/task/ChaseToKill.xml index d62b00a8..4247bc81 100644 --- a/server/bin/exported/task/ChaseToKill.xml +++ b/server/bin/exported/task/ChaseToKill.xml @@ -126,6 +126,16 @@ + + + + + + + + + + diff --git a/server/gameserver/hero_agent.cc b/server/gameserver/hero_agent.cc index 9d5c6a64..23658363 100644 --- a/server/gameserver/hero_agent.cc +++ b/server/gameserver/hero_agent.cc @@ -357,24 +357,25 @@ bool HeroAgent::MasterInRange(float range) behaviac::EBTStatus HeroAgent::SearchEnemy(float range) { Creature* myself = owner_; - Human* target = nullptr; + Creature* target = nullptr; float last_distance = range + 1; - owner_->room->TraverseHumanList - ( - [myself, &last_distance, &target, range] (Human* hum) + owner_->room->grid_service->TraverseCreatures + (owner_->room->GetRoomIdx(), + owner_->GetGridList(), + [myself, &last_distance, &target, range] (Creature* c, bool& stop) { - if (!hum->dead && - !a8::HasBitFlag(hum->status, CS_Disable) && - !hum->HasBuffEffect(kBET_Hide) && - !hum->HasBuffEffect(kBET_Invincible) && - hum->team_id != myself->team_id) { + if (!c->dead && + !a8::HasBitFlag(c->status, CS_Disable) && + !c->HasBuffEffect(kBET_Hide) && + !c->HasBuffEffect(kBET_Invincible) && + c->team_id != myself->team_id) { if (a8::HasBitFlag(myself->status, CS_DisableAttackAndroid) && - hum->IsAndroid()) { + c->IsAndroid()) { } else { - float distance = hum->GetPos().Distance2D2(myself->GetPos()); + float distance = c->GetPos().Distance2D2(myself->GetPos()); if (distance <= range) { if (distance < last_distance) { - target = hum; + target = c; last_distance = distance; } } diff --git a/server/gameserver/incubator.cc b/server/gameserver/incubator.cc index 04d5e437..6dd5adc6 100644 --- a/server/gameserver/incubator.cc +++ b/server/gameserver/incubator.cc @@ -38,7 +38,7 @@ void Incubator::Init() if (a8::TIMER_EXEC_EVENT == event) { alloc_timer_ = room->xtimer.SetIntervalWpEx ( - SERVER_FRAME_RATE * (2 + rand() % 3), + SERVER_FRAME_RATE * (4 + rand() % 3), [this] (int event, const a8::Args* args) { if (a8::TIMER_EXEC_EVENT == event) { @@ -255,7 +255,7 @@ void Incubator::AutoAllocAndroid() Human* hum = hold_humans_[0]; if (room->GetGasData().GetGasMode() == GasWaiting && hold_humans_.size() > 1 && - ((rand() % 100) > 40)) { + ((rand() % 100) > 70)) { Human* killer = nullptr; if (hold_humans_.size() == 2) { killer = hold_humans_[1]; diff --git a/server/gameserver/target_agent.cc b/server/gameserver/target_agent.cc index 57faef7a..fa3e410f 100644 --- a/server/gameserver/target_agent.cc +++ b/server/gameserver/target_agent.cc @@ -72,7 +72,7 @@ int TargetAgent::GetLevel() return target_.Get()->level; } -void TargetAgent::Abandon() +void TargetAgent::Abandon(int time) { target_.Reset(); } diff --git a/server/gameserver/target_agent.h b/server/gameserver/target_agent.h index 48be7cc9..79a25285 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(); + void Abandon(int time); float GetShotRange(); void SetOwner(Creature* owner);