130 lines
4.0 KiB
C#
130 lines
4.0 KiB
C#
using UnityEngine.Scripting;
|
|
|
|
[Preserve]
|
|
public class EAIWanderCompanion : EAIBase
|
|
{
|
|
public const float cLookTimeMax = 3f;
|
|
public Vector3 position;
|
|
public float time;
|
|
|
|
public override void Init(EntityAlive _theEntity)
|
|
{
|
|
base.Init(_theEntity);
|
|
this.MutexBits = 1;
|
|
}
|
|
|
|
public override void Update() => this.time += 0.05f;
|
|
|
|
public override void Reset()
|
|
{
|
|
//Log.Out("EAIWanderCompanion-Reset START");
|
|
//Log.Out("StackTrace: '{0}'", Environment.StackTrace);
|
|
this.manager.lookTime = this.RandomFloat * 3f;
|
|
this.theEntity.moveHelper.Stop();
|
|
}
|
|
|
|
public bool NPCEAICanProceed(bool skipTargetVerification = false)
|
|
{
|
|
if (this.theEntity.Buffs.GetCustomVar("$Leader") > 0f)
|
|
{
|
|
//Log.Out("EAIWanderCompanion-NPCEAICanProceed 1");
|
|
return false;
|
|
}
|
|
|
|
if (this.theEntity.Buffs.GetCustomVar("CurrentOrder") > 0)
|
|
{
|
|
//Log.Out("EAIWanderCompanion-NPCEAICanProceed 1a");
|
|
return false;
|
|
}
|
|
|
|
if (this.theEntity.Buffs.GetCustomVar("onMission") == 1f ||
|
|
this.theEntity.Buffs.GetCustomVar("$FR_NPC_Respawn") == 1f ||
|
|
this.theEntity.Buffs.GetCustomVar("$FR_NPC_Hidden") == 1f
|
|
)
|
|
{
|
|
//Log.Out("EAIWanderCompanion-NPCEAICanProceed 1b");
|
|
return false;
|
|
}
|
|
|
|
if (this.theEntity.GetAttackTarget() != null)
|
|
{
|
|
//Log.Out($"EAIWanderCompanion-NPCEAICanProceed theEntity.GetAttackTarget() != null: {theEntity.GetAttackTarget()}");
|
|
return false;
|
|
}
|
|
|
|
if (this.theEntity.Buffs.HasBuff("buffTalkingTo"))
|
|
{
|
|
//Log.Out("EAIWanderCompanion-NPCEAICanProceed 3");
|
|
return false;
|
|
}
|
|
|
|
if (this.theEntity.sleepingOrWakingUp)
|
|
{
|
|
//Log.Out("EAIWanderCompanion-NPCEAICanProceed 4");
|
|
return false;
|
|
}
|
|
if (this.theEntity.GetTicksNoPlayerAdjacent() >= 120)
|
|
{
|
|
//Log.Out("EAIWanderCompanion-NPCEAICanProceed 5");
|
|
return false;
|
|
}
|
|
if (this.theEntity.bodyDamage.CurrentStun != EnumEntityStunType.None)
|
|
{
|
|
//Log.Out("EAIWanderCompanion-NPCEAICanProceed 6");
|
|
return false;
|
|
}
|
|
|
|
return true;
|
|
}
|
|
|
|
public override bool CanExecute()
|
|
{
|
|
if (!NPCEAICanProceed())
|
|
{
|
|
return false;
|
|
}
|
|
|
|
if (this.theEntity.sleepingOrWakingUp)
|
|
{
|
|
return false;
|
|
}
|
|
if (this.theEntity.GetTicksNoPlayerAdjacent() >= 120)
|
|
{
|
|
return false;
|
|
}
|
|
if (this.theEntity.bodyDamage.CurrentStun != EnumEntityStunType.None)
|
|
{
|
|
return false;
|
|
}
|
|
int num = (int)(200f * this.executeWaitTime);
|
|
if (base.GetRandom(1000) >= num)
|
|
{
|
|
return false;
|
|
}
|
|
return true;
|
|
}
|
|
|
|
public override void Start()
|
|
{
|
|
int num = 10;
|
|
this.theEntity.FindPath(RandomPositionGenerator.Calc(this.theEntity, num, num), this.theEntity.GetMoveSpeed(), false, this);
|
|
}
|
|
|
|
public override bool Continue()
|
|
{
|
|
if (!NPCEAICanProceed())
|
|
{
|
|
return false;
|
|
}
|
|
|
|
//Log.Out("EAIWanderCompanion-Continue this.theEntity.bodyDamage.CurrentStun == EnumEntityStunType.None: " + (this.theEntity.bodyDamage.CurrentStun == EnumEntityStunType.None));
|
|
//Log.Out("EAIWanderCompanion-Continue this.theEntity.moveHelper.BlockedTime <= 0.3f: " + (this.theEntity.moveHelper.BlockedTime <= 0.3f));
|
|
//Log.Out("EAIWanderCompanion-Continue !this.theEntity.navigator.noPathAndNotPlanningOne(): " + !this.theEntity.navigator.noPathAndNotPlanningOne());
|
|
|
|
bool result = this.theEntity.bodyDamage.CurrentStun == EnumEntityStunType.None && this.theEntity.moveHelper.BlockedTime <= 0.3f && !this.theEntity.navigator.noPathAndNotPlanningOne();
|
|
|
|
//Log.Out("EAIWanderCompanion-Continue result: " + result);
|
|
return result;
|
|
}
|
|
}
|