1
This commit is contained in:
parent
2f2fa402bf
commit
95a2521293
@ -203,4 +203,5 @@ template<> inline bool MasterAgent::_Execute_Method_<METHOD_TYPE_MasterAgent_IsV
|
||||
}
|
||||
|
||||
|
||||
|
||||
#endif // _BEHAVIAC_MEMBER_VISITOR_H_
|
||||
|
@ -633,7 +633,7 @@ namespace behaviac
|
||||
|
||||
virtual bool load()
|
||||
{
|
||||
AgentMeta::SetTotalSignature(877071597u);
|
||||
AgentMeta::SetTotalSignature(3979851860u);
|
||||
|
||||
AgentMeta* meta = NULL;
|
||||
BEHAVIAC_UNUSED_VAR(meta);
|
||||
@ -750,10 +750,10 @@ namespace behaviac
|
||||
meta->RegisterMethod(502968959u, BEHAVIAC_NEW CMethod_behaviac_Agent_VectorRemove());
|
||||
|
||||
// HeroAgent
|
||||
meta = BEHAVIAC_NEW AgentMeta(2694193342u);
|
||||
meta = BEHAVIAC_NEW AgentMeta(3645053199u);
|
||||
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(3525744799u, BEHAVIAC_NEW CMemberProperty< HeroAgent* >("current_teammate_agent", Set_HeroAgent_current_teammate_agent, Get_HeroAgent_current_teammate_agent));
|
||||
meta->RegisterMemberProperty(3525744799u, BEHAVIAC_NEW CMemberProperty< TeammateAgent* >("current_teammate_agent", Set_HeroAgent_current_teammate_agent, Get_HeroAgent_current_teammate_agent));
|
||||
meta->RegisterMemberProperty(1530109714u, BEHAVIAC_NEW CMemberProperty< MasterAgent* >("master_agent", Set_HeroAgent_master_agent, Get_HeroAgent_master_agent));
|
||||
meta->RegisterMemberProperty(3100058733u, BEHAVIAC_NEW CMemberProperty< int >("out_errno", Set_HeroAgent_out_errno, Get_HeroAgent_out_errno));
|
||||
meta->RegisterMemberProperty(1342699083u, BEHAVIAC_NEW CMemberProperty< glm::vec3 >("out_point0", Set_HeroAgent_out_point0, Get_HeroAgent_out_point0));
|
||||
@ -912,10 +912,10 @@ namespace behaviac
|
||||
meta->RegisterMethod(502968959u, BEHAVIAC_NEW CMethod_behaviac_Agent_VectorRemove());
|
||||
|
||||
// AndroidAgent
|
||||
meta = BEHAVIAC_NEW AgentMeta(2904935783u);
|
||||
meta = BEHAVIAC_NEW AgentMeta(949660135u);
|
||||
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(3525744799u, BEHAVIAC_NEW CMemberProperty< HeroAgent* >("current_teammate_agent", Set_HeroAgent_current_teammate_agent, Get_HeroAgent_current_teammate_agent));
|
||||
meta->RegisterMemberProperty(3525744799u, BEHAVIAC_NEW CMemberProperty< TeammateAgent* >("current_teammate_agent", Set_HeroAgent_current_teammate_agent, Get_HeroAgent_current_teammate_agent));
|
||||
meta->RegisterMemberProperty(1530109714u, BEHAVIAC_NEW CMemberProperty< MasterAgent* >("master_agent", Set_HeroAgent_master_agent, Get_HeroAgent_master_agent));
|
||||
meta->RegisterMemberProperty(3100058733u, BEHAVIAC_NEW CMemberProperty< int >("out_errno", Set_HeroAgent_out_errno, Get_HeroAgent_out_errno));
|
||||
meta->RegisterMemberProperty(1342699083u, BEHAVIAC_NEW CMemberProperty< glm::vec3 >("out_point0", Set_HeroAgent_out_point0, Get_HeroAgent_out_point0));
|
||||
@ -1101,6 +1101,16 @@ namespace behaviac
|
||||
meta->RegisterMethod(3483755530u, BEHAVIAC_NEW CMethod_behaviac_Agent_VectorContains());
|
||||
meta->RegisterMethod(505785840u, BEHAVIAC_NEW CMethod_behaviac_Agent_VectorLength());
|
||||
meta->RegisterMethod(502968959u, BEHAVIAC_NEW CMethod_behaviac_Agent_VectorRemove());
|
||||
|
||||
// TeammateAgent
|
||||
meta = BEHAVIAC_NEW AgentMeta(1714058232u);
|
||||
AgentMeta::GetAgentMetas()[559474020u] = meta;
|
||||
meta->RegisterMethod(1045109914u, BEHAVIAC_NEW CAgentStaticMethodVoid_1<char*>(FunctionPointer_TeammateAgent_LogMessage));
|
||||
meta->RegisterMethod(2521019022u, BEHAVIAC_NEW CMethod_behaviac_Agent_VectorAdd());
|
||||
meta->RegisterMethod(2306090221u, BEHAVIAC_NEW CMethod_behaviac_Agent_VectorClear());
|
||||
meta->RegisterMethod(3483755530u, BEHAVIAC_NEW CMethod_behaviac_Agent_VectorContains());
|
||||
meta->RegisterMethod(505785840u, BEHAVIAC_NEW CMethod_behaviac_Agent_VectorLength());
|
||||
meta->RegisterMethod(502968959u, BEHAVIAC_NEW CMethod_behaviac_Agent_VectorRemove());
|
||||
|
||||
AgentMeta::Register<behaviac::Agent>("behaviac::Agent");
|
||||
AgentMeta::Register<BaseAgent>("BaseAgent");
|
||||
@ -1110,6 +1120,7 @@ namespace behaviac
|
||||
AgentMeta::Register<HeroAgent>("HeroAgent");
|
||||
AgentMeta::Register<AndroidAgent>("AndroidAgent");
|
||||
AgentMeta::Register<MasterAgent>("MasterAgent");
|
||||
AgentMeta::Register<TeammateAgent>("TeammateAgent");
|
||||
AgentMeta::Register<SkillIdx_e>("SkillIdx_e");
|
||||
AgentMeta::Register<BuffEffectType_e>("BuffEffectType_e");
|
||||
AgentMeta::Register<BtEvent_e>("BtEvent_e");
|
||||
@ -1131,6 +1142,7 @@ namespace behaviac
|
||||
AgentMeta::UnRegister<HeroAgent>("HeroAgent");
|
||||
AgentMeta::UnRegister<AndroidAgent>("AndroidAgent");
|
||||
AgentMeta::UnRegister<MasterAgent>("MasterAgent");
|
||||
AgentMeta::UnRegister<TeammateAgent>("TeammateAgent");
|
||||
AgentMeta::UnRegister<SkillIdx_e>("SkillIdx_e");
|
||||
AgentMeta::UnRegister<BuffEffectType_e>("BuffEffectType_e");
|
||||
AgentMeta::UnRegister<BtEvent_e>("BtEvent_e");
|
||||
|
@ -78,7 +78,7 @@ namespace behaviac
|
||||
inline void Set_HeroAgent_current_target_agent(Agent* self, TargetAgent* value) { ((HeroAgent*)self)->current_target_agent = value; };
|
||||
inline const void* Get_HeroAgent_current_target_agent(Agent* self) { return &((HeroAgent*)self)->current_target_agent; };
|
||||
|
||||
inline void Set_HeroAgent_current_teammate_agent(Agent* self, HeroAgent* value) { ((HeroAgent*)self)->current_teammate_agent = value; };
|
||||
inline void Set_HeroAgent_current_teammate_agent(Agent* self, TeammateAgent* value) { ((HeroAgent*)self)->current_teammate_agent = value; };
|
||||
inline const void* Get_HeroAgent_current_teammate_agent(Agent* self) { return &((HeroAgent*)self)->current_teammate_agent; };
|
||||
|
||||
inline void Set_HeroAgent_master_agent(Agent* self, MasterAgent* value) { ((HeroAgent*)self)->master_agent = value; };
|
||||
@ -414,6 +414,7 @@ namespace behaviac
|
||||
inline int FunctionPointer_MasterAgent_RandRange(Agent* self, int min_val, int max_val) { return (int)((BaseAgent*)self)->_Execute_Method_<METHOD_TYPE_BaseAgent_RandRange, int, int, int >(min_val, max_val); }
|
||||
inline float FunctionPointer_MasterAgent_RandRangeAsFloat(Agent* self, float min_val, float max_val) { return ((MasterAgent*)self)->RandRangeAsFloat(min_val, max_val); }
|
||||
inline int FunctionPointer_MasterAgent_Test(Agent* self, int p1) { return (int)((BaseAgent*)self)->_Execute_Method_<METHOD_TYPE_BaseAgent_Test, int, int >(p1); }
|
||||
inline void FunctionPointer_TeammateAgent_LogMessage(char* param0) { TeammateAgent::LogMessage(param0); }
|
||||
inline void Set_glm_vec3_x(Agent* self, float value) { ((glm::vec3*)self)->x = value; };
|
||||
inline const void* Get_glm_vec3_x(Agent* self) { return &((glm::vec3*)self)->x; };
|
||||
|
||||
|
@ -13,6 +13,7 @@
|
||||
#include "room_agent.h"
|
||||
#include "target_agent.h"
|
||||
#include "team_agent.h"
|
||||
#include "teammate_agent.h"
|
||||
#include "master_agent.h"
|
||||
|
||||
#include "behaviac_customized_types.h"
|
||||
|
@ -1,10 +1,10 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!--EXPORTED BY TOOL, DON'T MODIFY IT!-->
|
||||
<agents version="1" signature="877071597">
|
||||
<agent type="HeroAgent" base="BaseAgent" signature="2694193342">
|
||||
<agents version="1" signature="3979851860">
|
||||
<agent type="HeroAgent" base="BaseAgent" signature="3645053199">
|
||||
<properties>
|
||||
<property name="current_target_agent" type="TargetAgent*" member="false" static="false" defaultvalue="null" />
|
||||
<property name="current_teammate_agent" type="HeroAgent*" member="false" static="false" defaultvalue="null" />
|
||||
<property name="current_teammate_agent" type="TeammateAgent*" member="false" static="false" defaultvalue="null" />
|
||||
<property name="master_agent" type="MasterAgent*" member="false" static="false" defaultvalue="null" />
|
||||
<property name="out_errno" type="int" member="false" static="false" defaultvalue="0" />
|
||||
<property name="out_point0" type="glm::vec3" member="false" static="false" defaultvalue="{x=0;y=0;z=0;}" />
|
||||
@ -32,10 +32,10 @@
|
||||
<property name="tmp_val4" type="float" member="false" static="false" defaultvalue="0" />
|
||||
</properties>
|
||||
</agent>
|
||||
<agent type="AndroidAgent" base="HeroAgent" signature="2904935783">
|
||||
<agent type="AndroidAgent" base="HeroAgent" signature="949660135">
|
||||
<properties>
|
||||
<property name="current_target_agent" type="TargetAgent*" member="false" static="false" defaultvalue="null" />
|
||||
<property name="current_teammate_agent" type="HeroAgent*" member="false" static="false" defaultvalue="null" />
|
||||
<property name="current_teammate_agent" type="TeammateAgent*" member="false" static="false" defaultvalue="null" />
|
||||
<property name="master_agent" type="MasterAgent*" member="false" static="false" defaultvalue="null" />
|
||||
<property name="out_errno" type="int" member="false" static="false" defaultvalue="0" />
|
||||
<property name="out_point0" type="glm::vec3" member="false" static="false" defaultvalue="{x=0;y=0;z=0;}" />
|
||||
|
@ -1551,6 +1551,37 @@ behaviac::EBTStatus HeroAgent::ThrowItem(int slot)
|
||||
|
||||
bool HeroAgent::SearchTeammate(int range)
|
||||
{
|
||||
if (!owner_->IsHuman()) {
|
||||
return false;
|
||||
}
|
||||
current_teammate_agent = nullptr;
|
||||
Human* nearest_teammate = nullptr;
|
||||
owner_->GetTeam()->TraverseMembers
|
||||
(
|
||||
[this, &nearest_teammate] (Human* hum) mutable
|
||||
{
|
||||
if (hum == owner_) {
|
||||
return true;
|
||||
}
|
||||
if (hum->dead) {
|
||||
return true;
|
||||
}
|
||||
if (!nearest_teammate) {
|
||||
nearest_teammate = hum;
|
||||
return true;
|
||||
}
|
||||
if (hum->GetPos().ManhattanDistance2D(owner_->GetPos()) <
|
||||
nearest_teammate->GetPos().ManhattanDistance2D(owner_->GetPos())) {
|
||||
nearest_teammate = hum;
|
||||
return true;
|
||||
}
|
||||
return true;
|
||||
});
|
||||
if (nearest_teammate) {
|
||||
float distance = nearest_teammate->GetPos().Distance2D2(owner_->GetPos());
|
||||
if (distance <= range) {
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
@ -1568,3 +1599,35 @@ bool HeroAgent::TeammateIsValid()
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
void HeroAgent::GetDown()
|
||||
{
|
||||
if (owner_->IsHuman()) {
|
||||
owner_->AsHuman()->DoGetDown();
|
||||
}
|
||||
}
|
||||
|
||||
void HeroAgent::SwitchSeat(int seat)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
bool HeroAgent::CarHasOil()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
float HeroAgent::GetCarCurOil()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
float HeroAgent::GetCarMaxOil()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
bool HeroAgent::IsSingleCar()
|
||||
{
|
||||
|
||||
}
|
||||
|
@ -16,6 +16,7 @@ class RoomAgent;
|
||||
class TeamAgent;
|
||||
class TargetAgent;
|
||||
class MasterAgent;
|
||||
class TeammateAgent;
|
||||
class HeroAgent : public BaseAgent
|
||||
{
|
||||
public:
|
||||
@ -96,6 +97,12 @@ public:
|
||||
float GetTeammateDistance();
|
||||
void AbandonTeammate(int min_time, int max_time);
|
||||
bool TeammateIsValid();
|
||||
void GetDown();
|
||||
void SwitchSeat(int seat);
|
||||
bool CarHasOil();
|
||||
float GetCarCurOil();
|
||||
float GetCarMaxOil();
|
||||
bool IsSingleCar();
|
||||
|
||||
behaviac::EBTStatus RegisterEvents(behaviac::vector<BtEvent_e> events);
|
||||
behaviac::EBTStatus ClearEvents();
|
||||
@ -127,7 +134,7 @@ public:
|
||||
TeamAgent* team_agent = nullptr;
|
||||
MasterAgent* master_agent = nullptr;
|
||||
TargetAgent* current_target_agent = nullptr;
|
||||
HeroAgent* current_teammate_agent = nullptr;
|
||||
TeammateAgent* current_teammate_agent = nullptr;
|
||||
float task_param0 = 0.0f;
|
||||
float task_param1 = 0.0f;
|
||||
float task_param2 = 0.0f;
|
||||
|
122
server/gameserver/teammate_agent.cc
Normal file
122
server/gameserver/teammate_agent.cc
Normal file
@ -0,0 +1,122 @@
|
||||
#include "precompile.h"
|
||||
|
||||
#include "teammate_agent.h"
|
||||
#include "room.h"
|
||||
|
||||
#include "mt/Hero.h"
|
||||
#include "mt/Equip.h"
|
||||
|
||||
TeammateAgent::TeammateAgent():BaseAgent()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
TeammateAgent::~TeammateAgent()
|
||||
{
|
||||
}
|
||||
|
||||
int TeammateAgent::GetUniId()
|
||||
{
|
||||
if (target_.Get()) {
|
||||
return target_.Get()->GetUniId();
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
bool TeammateAgent::IsValid()
|
||||
{
|
||||
return target_.Get() && !target_.Get()->dead && target_.Get()->team_id != owner_->team_id;
|
||||
}
|
||||
|
||||
bool TeammateAgent::IsDead()
|
||||
{
|
||||
if (target_.Get()) {
|
||||
return target_.Get()->dead;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
glm::vec3 TeammateAgent::GetPos()
|
||||
{
|
||||
return target_.Get()->GetPos().ToGlmVec3();
|
||||
}
|
||||
|
||||
float TeammateAgent::GetHp()
|
||||
{
|
||||
if (!target_.Get()) {
|
||||
abort();
|
||||
}
|
||||
return target_.Get()->GetHP();
|
||||
}
|
||||
|
||||
float TeammateAgent::GetMaxHp()
|
||||
{
|
||||
if (!target_.Get()) {
|
||||
abort();
|
||||
}
|
||||
return target_.Get()->GetMaxHP();
|
||||
}
|
||||
|
||||
int TeammateAgent::GetHeroId()
|
||||
{
|
||||
if (!target_.Get()) {
|
||||
abort();
|
||||
}
|
||||
return target_.Get()->GetHeroMeta()->id();
|
||||
}
|
||||
|
||||
int TeammateAgent::GetLevel()
|
||||
{
|
||||
if (!target_.Get()) {
|
||||
abort();
|
||||
}
|
||||
return target_.Get()->level;
|
||||
}
|
||||
|
||||
void TeammateAgent::Abandon(int min_time, int max_time)
|
||||
{
|
||||
int time = a8::RandEx(min_time, max_time);
|
||||
if (target_.Get()) {
|
||||
//owner_->DelIgnoreTeammate(target_.Get()->GetUniId());
|
||||
//owner_->AddIgnoreTeammate(target_.Get()->GetUniId(), time);
|
||||
}
|
||||
target_.Reset();
|
||||
}
|
||||
|
||||
void TeammateAgent::SetOwner(Creature* owner)
|
||||
{
|
||||
owner_ = owner;
|
||||
}
|
||||
|
||||
Room* TeammateAgent::GetRoom()
|
||||
{
|
||||
return owner_->room;
|
||||
}
|
||||
|
||||
float TeammateAgent::GetShotRange()
|
||||
{
|
||||
if (target_.Get() && target_.Get()->GetCurrWeapon()) {
|
||||
return target_.Get()->GetCurrWeapon()->meta->range();
|
||||
}
|
||||
return 0.0f;
|
||||
}
|
||||
|
||||
void TeammateAgent::SetTeammate(Creature* target)
|
||||
{
|
||||
target_ = target->GetWeakPtrRef();
|
||||
}
|
||||
|
||||
void TeammateAgent::ClearAbandon()
|
||||
{
|
||||
//owner_->ClearIgnoreTeammate();
|
||||
}
|
||||
|
||||
float TeammateAgent::GetHPRate()
|
||||
{
|
||||
return GetHp() / std::max(1.0f, GetMaxHp());
|
||||
}
|
||||
|
||||
bool TeammateAgent::HasBuffEffect(int effect_id)
|
||||
{
|
||||
return target_.Get() && target_.Get()->HasBuffEffect(effect_id);
|
||||
}
|
37
server/gameserver/teammate_agent.h
Normal file
37
server/gameserver/teammate_agent.h
Normal file
@ -0,0 +1,37 @@
|
||||
#pragma once
|
||||
|
||||
#include "base_agent.h"
|
||||
|
||||
#include "creature.h"
|
||||
|
||||
class TeammateAgent : public BaseAgent
|
||||
{
|
||||
public:
|
||||
TeammateAgent();
|
||||
|
||||
virtual ~TeammateAgent();
|
||||
|
||||
BEHAVIAC_DECLARE_AGENTTYPE(TeammateAgent, BaseAgent)
|
||||
|
||||
int GetUniId();
|
||||
bool IsValid();
|
||||
bool IsDead();
|
||||
glm::vec3 GetPos();
|
||||
float GetHp();
|
||||
float GetMaxHp();
|
||||
int GetHeroId();
|
||||
int GetLevel();
|
||||
void Abandon(int min_time, int max_time);
|
||||
float GetShotRange();
|
||||
void ClearAbandon();
|
||||
float GetHPRate();
|
||||
bool HasBuffEffect(int effect_id);
|
||||
|
||||
void SetOwner(Creature* owner);
|
||||
void SetTeammate(Creature* target);
|
||||
virtual Room* GetRoom() override;
|
||||
|
||||
private:
|
||||
CreatureWeakPtr target_;
|
||||
Creature* owner_ = nullptr;
|
||||
};
|
Loading…
x
Reference in New Issue
Block a user