This commit is contained in:
aozhiwei 2023-10-23 17:10:50 +08:00
parent 342c69dcf3
commit e1d435da04
9 changed files with 63 additions and 24 deletions

View File

@ -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<int>(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));

View File

@ -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(); }

View File

@ -3,14 +3,42 @@
<!--Source File: hero\standard.xml-->
<behavior name="hero/standard" agenttype="HeroAgent" version="5">
<node class="IfElse" id="4">
<attachment class="Precondition" id="11" flag="precondition">
<property BinaryOperator="And" />
<property Operator="Equal" />
<property Opl="Self.HeroAgent::IsDead()" />
<property Opr2="const bool false" />
<property Phase="Both" />
</attachment>
<attachment class="Precondition" id="12" flag="precondition">
<property BinaryOperator="And" />
<property Operator="Equal" />
<property Opl="Self.BaseAgent::IsGameOver()" />
<property Opr2="const bool false" />
<property Phase="Both" />
</attachment>
<node class="Condition" id="5">
<property Operator="Equal" />
<property Opl="room_agent.RoomAgent::GetGasMode()" />
<property Opr="const GasMode_e GasInactive" />
</node>
<node class="ReferencedBehavior" id="6">
<property ReferenceBehavior="const string &quot;task/RandomWalk&quot;" />
<property Task="Self.HeroAgent::RandomWalk(0,0,{x=0;y=0;z=0;})" />
<node class="SelectorProbability" id="8">
<node class="DecoratorWeight" id="7">
<property DecorateWhenChildEnds="false" />
<property Weight="const int 30" />
<node class="ReferencedBehavior" id="6">
<property ReferenceBehavior="const string &quot;task/RandomWalk&quot;" />
<property Task="Self.HeroAgent::RandomWalk(0,0,{x=0;y=0;z=0;})" />
</node>
</node>
<node class="DecoratorWeight" id="9">
<property DecorateWhenChildEnds="false" />
<property Weight="const int 70" />
<node class="Action" id="10">
<property Method="Self.HeroAgent::CoIdle(2000,4000)" />
<property ResultOption="BT_INVALID" />
</node>
</node>
</node>
<node class="IfElse" id="0">
<node class="Condition" id="1">

View File

@ -1,6 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<!--EXPORTED BY TOOL, DON'T MODIFY IT!-->
<agents version="1" signature="1342570378">
<agents version="1" signature="2907398068">
<agent type="HeroAgent" base="BaseAgent" signature="995930905">
<properties>
<property name="current_target_agent" type="TargetAgent*" member="false" static="false" defaultvalue="null" />

View File

@ -126,6 +126,16 @@
<property ReferenceBehavior="const string &quot;function/FnFindPathToTarget&quot;" />
</node>
</node>
<node class="IfElse" id="23">
<node class="True" id="39" />
<node class="Noop" id="40" />
<node class="Noop" id="41" />
</node>
<node class="IfElse" id="25">
<node class="True" id="42" />
<node class="Noop" id="43" />
<node class="Noop" id="44" />
</node>
</node>
</node>
</node>

View File

@ -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;
}
}

View File

@ -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];

View File

@ -72,7 +72,7 @@ int TargetAgent::GetLevel()
return target_.Get()->level;
}
void TargetAgent::Abandon()
void TargetAgent::Abandon(int time)
{
target_.Reset();
}

View File

@ -21,7 +21,7 @@ public:
float GetMaxHp();
int GetHeroId();
int GetLevel();
void Abandon();
void Abandon(int time);
float GetShotRange();
void SetOwner(Creature* owner);