Upload from upload_mods.ps1
This commit is contained in:
3400
Scripts/Entities/EntityNPCRebirth.cs
Normal file
3400
Scripts/Entities/EntityNPCRebirth.cs
Normal file
@@ -0,0 +1,3400 @@
|
||||
|
||||
using Audio;
|
||||
using Rebirth.RemoteCrafting;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using static RebirthManager;
|
||||
|
||||
public class EntityNPCRebirth : EntityAliveV2
|
||||
{
|
||||
public string otherTags = "";
|
||||
public string lootDropEntityClass = "";
|
||||
public bool setSize = false;
|
||||
public bool setNavIcon = false;
|
||||
public EntityPlayer Owner = null;
|
||||
private float ownerCheck = 0f;
|
||||
private float ownerTick = 10f;
|
||||
public bool canShotgunTrigger = true;
|
||||
public bool hasSetOwner = false;
|
||||
public bool hasNotified = false;
|
||||
public bool bSoundCheck = false;
|
||||
public bool bSoundRandomCheck = false;
|
||||
public bool hasAttackTarget = false;
|
||||
public bool isOnFire = false;
|
||||
public int killingSpree = 0;
|
||||
public ulong tempSpawn = 60UL;
|
||||
public ulong tempSpawnTime = 0UL;
|
||||
public bool despawning = false;
|
||||
public float delta = 0f;
|
||||
|
||||
public float updateCheck = 0f;
|
||||
public float positionCheck = 0f;
|
||||
public float bedrollCheck = 0f;
|
||||
public float positionTick = 5f;
|
||||
public float spawnCheck = 0f;
|
||||
public float ownerFastCheck = 0f;
|
||||
public float ownerMidCheck = 0f;
|
||||
public float ownerSlowCheck = 0f;
|
||||
public float spawnTick = 30f;
|
||||
public float hiredCheck = 0f;
|
||||
public float hiredTick = 60f;
|
||||
public float bedrollTick = 3f;
|
||||
public float ownerFastTick = 0.5f;
|
||||
public float ownerMidTick = 2f;
|
||||
public float ownerSlowTick = 10f;
|
||||
|
||||
public string[,] strCouldNotRepair = new string[99999, 2];
|
||||
public int numCouldNotRepair = 0;
|
||||
public string strSerialize = "";
|
||||
public bool bRepair = false;
|
||||
public bool bRepairing = false;
|
||||
public int numRepairedBlocks = 0;
|
||||
public bool bMine = false;
|
||||
public float HideDuration = 0;
|
||||
public float followDuration = 0;
|
||||
public float followDurationTick = 1;
|
||||
public float roundsPerMinute = 0;
|
||||
public int numMagazineSize = 0;
|
||||
|
||||
public List<string> uniqueKeysUsed = new List<string>();
|
||||
public string rightHandTransformName;
|
||||
public ItemValue handItem;
|
||||
public int numReposition = 0;
|
||||
public Vector3i spawnBlockPosition = new Vector3i();
|
||||
public Vector3 previousPosition = new Vector3();
|
||||
public bool bSpwanBlockSet = false;
|
||||
public int previousOrder = 0;
|
||||
public string _currentWeapon = "";
|
||||
|
||||
private int _defaultTraderID;
|
||||
private string _strTitle;
|
||||
private List<string> _startedThisFrame;
|
||||
private TileEntityTrader _tileEntityTrader;
|
||||
private float fallTime;
|
||||
private float fallThresholdTime;
|
||||
public string strWeaponType = "none";
|
||||
private string strAmmoType = "none";
|
||||
public ulong GameTimerTicks = 0UL;
|
||||
public ulong AccumulatedTicks = 0UL;
|
||||
public ulong AccumulatedTicksUpdate = 0UL;
|
||||
|
||||
public ulong AccumulatedTicksSurvivor = 0UL;
|
||||
public ulong AccumulatedTicksZombieCompanion = 0UL;
|
||||
public ulong AccumulatedTicksDespawn = 0UL;
|
||||
public ulong AccumulatedTicksSound = 0UL;
|
||||
public ulong AccumulatedTicksSoundRandom = 0UL;
|
||||
public ulong AccumulatedTicksSoundKillingSpree = 0UL;
|
||||
public ulong AccumulatedTicksSoundTarget = 0UL;
|
||||
public ulong AccumulatedTicksFoundAttackTarget = 0UL;
|
||||
|
||||
public ulong TickRate = 100UL;
|
||||
public System.Diagnostics.Stopwatch watch = new System.Diagnostics.Stopwatch();
|
||||
|
||||
public override void Collect(int _playerId)
|
||||
{
|
||||
//Log.Out("EntityNPCRebirth-Collect START");
|
||||
var entityPlayerLocal = world.GetEntity(_playerId) as EntityPlayerLocal;
|
||||
if (entityPlayerLocal == null) return;
|
||||
var uiforPlayer = LocalPlayerUI.GetUIForPlayer(entityPlayerLocal);
|
||||
var itemStack = new ItemStack(GetItemValue(), 1);
|
||||
if (!uiforPlayer.xui.PlayerInventory.AddItem(itemStack))
|
||||
{
|
||||
GameManager.Instance.ItemDropServer(itemStack, entityPlayerLocal.GetPosition(), Vector3.zero, _playerId,
|
||||
60f, false);
|
||||
}
|
||||
}
|
||||
|
||||
public override void SetItemValue(ItemValue itemValue)
|
||||
{
|
||||
//Log.Out("EntityNPCRebirth-SetItemValue START");
|
||||
if (itemValue.HasMetadata("NPCName"))
|
||||
{
|
||||
string newName = (string)itemValue.GetMetadata("NPCName");
|
||||
SetEntityName(newName);
|
||||
//Log.Out("EntityNPCRebirth-SetItemValue EntityName: " + (string)itemValue.GetMetadata("NPCName"));
|
||||
SetEntityName((string)itemValue.GetMetadata("NPCName"));
|
||||
if (SingletonMonoBehaviour<ConnectionManager>.Instance.IsServer && !SingletonMonoBehaviour<ConnectionManager>.Instance.IsSinglePlayer)
|
||||
{
|
||||
SingletonMonoBehaviour<ConnectionManager>.Instance.SendPackage(NetPackageManager.GetPackage<NetPackageChangeNPCName>().Setup(this.entityId, newName), false, this.belongsPlayerId, -1, -1, null, 192);
|
||||
}
|
||||
}
|
||||
if (itemValue.HasMetadata("health"))
|
||||
{
|
||||
//Log.Out("EntityNPCRebirth-SetItemValue $tempHealth: " + (int)itemValue.GetMetadata("health"));
|
||||
this.Buffs.SetCustomVar("$tempHealth", (int)itemValue.GetMetadata("health"));
|
||||
}
|
||||
if (itemValue.HasMetadata("numKills"))
|
||||
{
|
||||
//Log.Out("EntityNPCRebirth-SetItemValue $varNumKills: " + (int)itemValue.GetMetadata("numKills"));
|
||||
this.Buffs.SetCustomVar("$varNumKills", (int)itemValue.GetMetadata("numKills"));
|
||||
}
|
||||
if (itemValue.HasMetadata("NPCLevel"))
|
||||
{
|
||||
//Log.Out("EntityNPCRebirth-SetItemValue $FR_NPC_Level: " + (int)itemValue.GetMetadata("NPCLevel"));
|
||||
this.Buffs.SetCustomVar("$FR_NPC_Level", (int)itemValue.GetMetadata("NPCLevel"));
|
||||
}
|
||||
if (itemValue.HasMetadata("NPCMiningLevel"))
|
||||
{
|
||||
//Log.Out("EntityNPCRebirth-SetItemValue $FR_NPC_MiningLevel: " + (int)itemValue.GetMetadata("NPCMiningLevel"));
|
||||
this.Buffs.SetCustomVar("$FR_NPC_MiningLevel", (int)itemValue.GetMetadata("NPCMiningLevel"));
|
||||
}
|
||||
//this.Buffs.AddBuff("AdjustNPCStats");
|
||||
GameManager.Instance.StartCoroutine(RebirthUtilities.adjustNPCStats(this));
|
||||
}
|
||||
|
||||
public ItemValue GetItemValue(ItemValue itemValue)
|
||||
{
|
||||
//Log.Out("EntityNPCRebirth-GetItemValue START");
|
||||
itemValue.SetMetadata("NPCName", EntityName, TypedMetadataValue.TypeTag.String);
|
||||
itemValue.SetMetadata("health", (int)Stats.Health.Value, TypedMetadataValue.TypeTag.Integer);
|
||||
itemValue.SetMetadata("numKills", (int)this.Buffs.GetCustomVar("$varNumKills"), TypedMetadataValue.TypeTag.Integer);
|
||||
itemValue.SetMetadata("NPCLevel", (int)this.Buffs.GetCustomVar("$FR_NPC_Level"), TypedMetadataValue.TypeTag.Integer);
|
||||
itemValue.SetMetadata("NPCMiningLevel", (int)this.Buffs.GetCustomVar("$FR_NPC_MiningLevel"), TypedMetadataValue.TypeTag.Integer);
|
||||
|
||||
return itemValue;
|
||||
}
|
||||
|
||||
public override EntityActivationCommand[] GetActivationCommands(Vector3i _tePos, EntityAlive _entityFocusing)
|
||||
{
|
||||
//Log.Out("EntityNPCRebirth-GetActivationCommands-START");
|
||||
// Don't allow you to interact with it when its dead.
|
||||
|
||||
float flEntityRespawnCommandActivation = this.Buffs.GetCustomVar("$FR_NPC_RespawnCommandActivation");
|
||||
float flEntityNoHire = this.Buffs.GetCustomVar("$FR_NPC_NoHire");
|
||||
|
||||
if (this.Buffs.HasBuff("FuriousRamsayRespawned"))
|
||||
{
|
||||
this.Buffs.SetCustomVar("$FR_NPC_RespawnCommandActivation", 0);
|
||||
flEntityRespawnCommandActivation = 0;
|
||||
}
|
||||
|
||||
//Log.Out("EntityNPCRebirth-GetActivationCommands - flEntityNoHire: " + flEntityNoHire);
|
||||
|
||||
if (IsDead() || NPCInfo == null || flEntityRespawnCommandActivation == 1 || flEntityNoHire == 1)
|
||||
{
|
||||
//Log.Out("EntityNPCRebirth-GetActivationCommands - NO COMMANDS");
|
||||
return new EntityActivationCommand[0];
|
||||
}
|
||||
else
|
||||
{
|
||||
////Log.Out("EntityNPCRebirth-GetActivationCommands-IS ALIVE");
|
||||
}
|
||||
|
||||
if (this.IsDead() || NPCInfo == null)
|
||||
{
|
||||
//Debug.Log("NPC info == null.");
|
||||
return new EntityActivationCommand[0];
|
||||
}
|
||||
|
||||
return new EntityActivationCommand[] {
|
||||
new EntityActivationCommand("talk", "talk", true)
|
||||
};
|
||||
|
||||
/*return new EntityActivationCommand[] {
|
||||
new EntityActivationCommand("talk", "talk", true),
|
||||
new EntityActivationCommand("talk", "talk", true),
|
||||
new EntityActivationCommand("talk", "talk", true)
|
||||
};*/
|
||||
}
|
||||
|
||||
public override int DamageEntity(DamageSource _damageSource, int _strength, bool _criticalHit, float _impulseScale)
|
||||
{
|
||||
//Log.Out("EntityNPCRebirth-DamageEntity START, _damageSource.GetDamageType(): " + _damageSource.GetDamageType());
|
||||
if (_damageSource.damageType == EnumDamageTypes.Falling || IsOnMission())
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
bool flag = _damageSource.GetDamageType() == EnumDamageTypes.Heat;
|
||||
|
||||
if (flag && _damageSource.AttackingItem != null && _damageSource.AttackingItem.ItemClass.GetItemName() == "otherExplosion")
|
||||
{
|
||||
if (this.Buffs.GetCustomVar("$Leader") > 0)
|
||||
{
|
||||
if (HasAnyTags(FastTags<TagGroup.Global>.Parse("melee")))
|
||||
{
|
||||
_strength = 20;
|
||||
}
|
||||
else
|
||||
{
|
||||
_strength = 50;
|
||||
}
|
||||
//Log.Out("EntityNPCRebirth-DamageEntity _strength: " + _strength);
|
||||
}
|
||||
}
|
||||
|
||||
global::EntityAlive entityAlive = this.world.GetEntity(_damageSource.getEntityId()) as global::EntityAlive;
|
||||
|
||||
if (this.EntityTags.Test_AnySet(FastTags<TagGroup.Global>.Parse("nanospawner")))
|
||||
{
|
||||
float perc = this.Health / this.Stats.Health.ModifiedMax;
|
||||
float stage = this.Buffs.GetCustomVar("$NanoStage");
|
||||
|
||||
//Log.Out("EntityNPCRebirth-DamageEntity this.Health: " + this.Health);
|
||||
//Log.Out("EntityNPCRebirth-DamageEntity this.Stats.Health.ModifiedMax: " + this.Stats.Health.ModifiedMax);
|
||||
//Log.Out("EntityNPCRebirth-DamageEntity perc: " + perc);
|
||||
//Log.Out("EntityNPCRebirth-DamageEntity stage: " + stage);
|
||||
|
||||
bool NanoCyborgFuriousRamsayStage1Spawns = stage == 0f && perc < .85f;
|
||||
bool NanoCyborgFuriousRamsayStage2Spawns = stage == 1f && perc < .65f;
|
||||
bool NanoCyborgFuriousRamsayStage3Spawns = stage == 2f && perc < .45f;
|
||||
|
||||
int playerID = -1;
|
||||
|
||||
if (entityAlive is EntityPlayer)
|
||||
{
|
||||
playerID = entityAlive.entityId;
|
||||
}
|
||||
|
||||
if (NanoCyborgFuriousRamsayStage1Spawns)
|
||||
{
|
||||
this.Buffs.SetCustomVar("$NanoStage", 1f);
|
||||
Manager.BroadcastPlay(this.position, "FuriousRamsayNanoSpawn");
|
||||
RebirthUtilities.SpawnEntity(this.entityId, "NanoCyborg002_FR", 2, "", "", "0", "static", "", "", 1, -1, true, false, true, playerID);
|
||||
}
|
||||
else if (NanoCyborgFuriousRamsayStage2Spawns)
|
||||
{
|
||||
this.Buffs.SetCustomVar("$NanoStage", 2f);
|
||||
Manager.BroadcastPlay(this.position, "FuriousRamsayNanoSpawn");
|
||||
RebirthUtilities.SpawnEntity(this.entityId, "NanoCyborg003_FR", 2, "", "", "0", "static", "", "", 1, -1, true, false, true, playerID);
|
||||
}
|
||||
else if (NanoCyborgFuriousRamsayStage3Spawns)
|
||||
{
|
||||
this.Buffs.SetCustomVar("$NanoStage", 3f);
|
||||
Manager.BroadcastPlay(this.position, "FuriousRamsayNanoSpawn");
|
||||
RebirthUtilities.SpawnEntity(this.entityId, "NanoCyborg004_FR", 2, "", "", "0", "static", "", "", 1, -1, true, false, true, playerID);
|
||||
}
|
||||
}
|
||||
|
||||
return base.DamageEntity(_damageSource, _strength, _criticalHit, _impulseScale);
|
||||
}
|
||||
|
||||
public override void OnAddedToWorld()
|
||||
{
|
||||
base.OnAddedToWorld();
|
||||
if (this.Buffs.GetCustomVar("$FR_NPC_ContainerY") == 0)
|
||||
{
|
||||
////Log.Out("EntityNPCRebirth-PostInit Container NOT Sized");
|
||||
bool blIsEmpty = this.lootContainer.IsEmpty();
|
||||
if (blIsEmpty)
|
||||
{
|
||||
////Log.Out("EntityNPCRebirth-PostInit Container NOT Empty");
|
||||
if (this.EntityTags.Test_AllSet(FastTags<TagGroup.Global>.Parse("allyanimal")))
|
||||
{
|
||||
lootContainer.SetContainerSize(new Vector2i(10, 1));
|
||||
}
|
||||
else
|
||||
{
|
||||
int numRandom = this.rand.RandomRange(3, 5);
|
||||
lootContainer.SetContainerSize(new Vector2i(8, numRandom));
|
||||
}
|
||||
}
|
||||
this.Buffs.SetCustomVar("$FR_NPC_ContainerY", this.lootContainer.GetContainerSize().y);
|
||||
}
|
||||
}
|
||||
|
||||
public override void CopyPropertiesFromEntityClass()
|
||||
{
|
||||
base.CopyPropertiesFromEntityClass();
|
||||
var _entityClass = EntityClass.list[entityClass];
|
||||
|
||||
if (_entityClass.Properties.Values.ContainsKey("DespawnAfter"))
|
||||
{
|
||||
this.tempSpawn = Convert.ToUInt64(_entityClass.Properties.Values["DespawnAfter"]);
|
||||
}
|
||||
|
||||
if (_entityClass.Properties.Values.ContainsKey("WeaponType"))
|
||||
strWeaponType = _entityClass.Properties.Values["WeaponType"];
|
||||
|
||||
if (_entityClass.Properties.Values.ContainsKey("Hirable"))
|
||||
isHirable = StringParsers.ParseBool(_entityClass.Properties.Values["Hirable"], 0, -1, true);
|
||||
|
||||
flEyeHeight = EntityUtilities.GetFloatValue(entityId, "EyeHeight");
|
||||
|
||||
// Read in a list of names then pick one at random.
|
||||
if (_entityClass.Properties.Values.ContainsKey("Names"))
|
||||
{
|
||||
var text = _entityClass.Properties.Values["Names"];
|
||||
var names = text.Split(',');
|
||||
|
||||
string randomName = RebirthUtilities.GetRandomName(this);
|
||||
|
||||
if (randomName != "")
|
||||
{
|
||||
_strMyName = randomName;
|
||||
}
|
||||
else
|
||||
{
|
||||
var index = UnityEngine.Random.Range(0, names.Length);
|
||||
_strMyName = names[index];
|
||||
}
|
||||
}
|
||||
|
||||
// By default, make the sleepers to always be awake, this solves the issue where entities in a Passive volume does not wake up fully
|
||||
// ie, buffs are not firing, but the uai is.
|
||||
isAlwaysAwake = false;
|
||||
if (_entityClass.Properties.Values.ContainsKey("SleeperInstantAwake"))
|
||||
isAlwaysAwake = StringParsers.ParseBool(_entityClass.Properties.Values["SleeperInstantAwake"], 0, -1, true);
|
||||
|
||||
if (_entityClass.Properties.Values.ContainsKey("IsAlwaysAwake"))
|
||||
isAlwaysAwake = StringParsers.ParseBool(_entityClass.Properties.Values["IsAlwaysAwake"], 0, -1, true);
|
||||
|
||||
|
||||
if (_entityClass.Properties.Values.ContainsKey("Titles"))
|
||||
{
|
||||
var text = _entityClass.Properties.Values["Titles"];
|
||||
var names = text.Split(',');
|
||||
var index = UnityEngine.Random.Range(0, names.Length);
|
||||
_strTitle = names[index];
|
||||
}
|
||||
|
||||
var component = gameObject.GetComponent<BoxCollider>();
|
||||
if (component)
|
||||
{
|
||||
////Log.Out(" Box Collider: " + component.size.ToCultureInvariantString());
|
||||
////Log.Out(" Current Boundary Box: " + boundingBox.ToCultureInvariantString());
|
||||
}
|
||||
|
||||
if (_entityClass.Properties.Classes.ContainsKey("Boundary"))
|
||||
{
|
||||
////Log.Out(" Found Boundary Settings");
|
||||
var strBoundaryBox = "0,0,0";
|
||||
var strCenter = "0,0,0";
|
||||
var dynamicProperties3 = _entityClass.Properties.Classes["Boundary"];
|
||||
foreach (var keyValuePair in dynamicProperties3.Values.Dict)
|
||||
{
|
||||
////Log.Out("Key: " + keyValuePair.Key);
|
||||
switch (keyValuePair.Key)
|
||||
{
|
||||
case "BoundaryBox":
|
||||
////Log.Out(" Found a Boundary Box");
|
||||
strBoundaryBox = dynamicProperties3.Values[keyValuePair.Key];
|
||||
continue;
|
||||
case "Center":
|
||||
////Log.Out(" Found a Center");
|
||||
strCenter = dynamicProperties3.Values[keyValuePair.Key];
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
var box = StringParsers.ParseVector3(strBoundaryBox);
|
||||
var center = StringParsers.ParseVector3(strCenter);
|
||||
ConfigureBoundaryBox(box, center);
|
||||
}
|
||||
}
|
||||
|
||||
public override bool IsDeadIfOutOfWorld()
|
||||
{
|
||||
if (this.LeaderUtils.Owner != null)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
else
|
||||
{
|
||||
float flLeader = RebirthUtilities.GetLeader(this);
|
||||
|
||||
if (flLeader > 0)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
else
|
||||
{
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public override bool CanDamageEntity(int _sourceEntityId)
|
||||
{
|
||||
var canDamage = EntityTargetingUtilities.CanTakeDamage(this, (EntityAlive)world.GetEntity(_sourceEntityId));
|
||||
|
||||
////Log.Out("EntityNPCRebirth-CanDamageEntity entity: " + this.EntityClass.entityClassName + " / canDamage: " + canDamage);
|
||||
|
||||
return canDamage;
|
||||
}
|
||||
|
||||
public override void MarkToUnload()
|
||||
{
|
||||
if (!bWillRespawn)
|
||||
{
|
||||
base.MarkToUnload();
|
||||
}
|
||||
}
|
||||
|
||||
public void HideNPC(bool send)
|
||||
{
|
||||
//Log.Out("EntityNPCRebirth-HideNPC send: " + send);
|
||||
if (send)
|
||||
{
|
||||
if (Buffs.GetCustomVar("$FR_NPC_Hidden") == 1f)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
//Log.Out("EntityNPCRebirth-HideNPC HIDE");
|
||||
//Log.Out("EntityNPCRebirth-HideNPC 1");
|
||||
var enemy = GetRevengeTarget();
|
||||
if (enemy != null)
|
||||
{
|
||||
//Log.Out("EntityNPCRebirth-HideNPC 2");
|
||||
enemy.attackTarget = (EntityAlive) null;
|
||||
enemy.SetRevengeTarget((EntityAlive) null);
|
||||
enemy.DoRagdoll(new DamageResponse());
|
||||
}
|
||||
// Don't let anything target you
|
||||
//isIgnoredByAI = true;
|
||||
|
||||
/*var newFaction = FactionManager.Instance.GetFactionByName("none");
|
||||
if (newFaction != null)
|
||||
{
|
||||
this.factionId = newFaction.ID;
|
||||
}*/
|
||||
this.attackTarget = (EntityAlive) null;
|
||||
this.SetRevengeTarget((EntityAlive) null);
|
||||
|
||||
// rescale to make it invisible.
|
||||
Buffs.SetCustomVar("$Scale", transform.localScale.y);
|
||||
|
||||
//transform.localScale = new Vector3(0, 0, 0);
|
||||
//emodel.SetVisible(false, false);
|
||||
|
||||
RebirthUtilities.toggleCollisions(false, this);
|
||||
|
||||
//if (this.currentOrder == 1)
|
||||
{
|
||||
//enabled = false;
|
||||
}
|
||||
|
||||
Buffs.SetCustomVar("onMission", 1f);
|
||||
|
||||
Buffs.AddBuff("FuriousRamsayRespawned");
|
||||
Buffs.AddBuff("FuriousRamsayResistFireShockSmoke");
|
||||
|
||||
// Turn off the compass
|
||||
if (this.NavObject != null)
|
||||
{
|
||||
//Log.Out("EntityNPCRebirth-HideNPC 3");
|
||||
if (this.Buffs.GetCustomVar("$FR_NPC_Respawn") == 0)
|
||||
{
|
||||
this.NavObject.IsActive = false;
|
||||
}
|
||||
}
|
||||
// Clear the debug information, usually set from UAI
|
||||
this.DebugNameInfo = "";
|
||||
|
||||
// Turn off the display component
|
||||
SetupDebugNameHUD(false);
|
||||
Buffs.SetCustomVar("$FR_NPC_Hidden", 1f);
|
||||
}
|
||||
else
|
||||
{
|
||||
Buffs.SetCustomVar("$FR_NPC_Hidden", 0f);
|
||||
|
||||
//Log.Out("EntityNPCRebirth-HideNPC SHOW 1");
|
||||
//Log.Out("EntityNPCRebirth-HideNPC scale: " + scale);
|
||||
|
||||
float oldScale = Buffs.GetCustomVar("$Scale");
|
||||
//Log.Out($"EntityNPCRebirth-HideNPC {this.entityName}/{this.EntityClass.entityClassName} BEFORE oldScale: " + oldScale);
|
||||
if (oldScale == 0f)
|
||||
{
|
||||
oldScale = 1;
|
||||
}
|
||||
//Log.Out("EntityNPCRebirth-HideNPC AFTER oldScale: " + oldScale);
|
||||
//Log.Out("EntityNPCRebirth-HideNPC SHOW 2");
|
||||
emodel.SetVisible(true, true);
|
||||
SetScale(oldScale);
|
||||
|
||||
//Log.Out("EntityNPCRebirth-HideNPC SHOW 3");
|
||||
RebirthUtilities.toggleCollisions(true, this);
|
||||
//enabled = true;
|
||||
|
||||
//Log.Out("EntityNPCRebirth-HideNPC SHOW 4");
|
||||
HideDuration = 0;
|
||||
//Log.Out("EntityNPCRebirth-HideNPC SHOW 5");
|
||||
|
||||
//Log.Out("EntityNPCRebirth-HideNPC SHOW 6");
|
||||
|
||||
if (this.LeaderUtils.Owner != null)
|
||||
{
|
||||
this.LeaderUtils.Owner.Buffs.RemoveBuff("FuriousRamsayHelpRepairBuff");
|
||||
}
|
||||
|
||||
this.Buffs.RemoveBuff("FuriousRamsayHelpRepair");
|
||||
this.Buffs.RemoveBuff("FuriousRamsayGoMiningLogs");
|
||||
this.Buffs.RemoveBuff("FuriousRamsayGoMiningNailandScrews");
|
||||
this.Buffs.RemoveBuff("FuriousRamsayGoMiningClay");
|
||||
this.Buffs.RemoveBuff("FuriousRamsayGoMiningScrapIron");
|
||||
this.Buffs.RemoveBuff("FuriousRamsayGoMiningCoal");
|
||||
this.Buffs.RemoveBuff("FuriousRamsayGoMiningNitrate");
|
||||
this.Buffs.RemoveBuff("FuriousRamsayGoMiningLead");
|
||||
this.Buffs.RemoveBuff("FuriousRamsayGoMiningSand");
|
||||
this.Buffs.RemoveBuff("FuriousRamsayGoMiningShale");
|
||||
this.Buffs.RemoveBuff("FuriousRamsayGoMiningSandPremium");
|
||||
this.Buffs.RemoveBuff("FuriousRamsayGoMiningShalePremium");
|
||||
|
||||
bMine = false;
|
||||
bRepair = false;
|
||||
|
||||
Buffs.CVars.Remove("$FR_NPC_Hidden");
|
||||
//Log.Out("EntityNPCRebirth-HideNPC SHOW 22");
|
||||
Buffs.SetCustomVar("onMission", 0f);
|
||||
//Log.Out("EntityNPCRebirth-HideNPC SHOW 23");
|
||||
if (this.NavObject != null)
|
||||
{
|
||||
//Log.Out("EntityNPCRebirth-HideNPC SHOW 24");
|
||||
//Log.Out("EntityNPCRebirth-HideNPC 5");
|
||||
this.NavObject.IsActive = true;
|
||||
}
|
||||
//Log.Out("EntityNPCRebirth-HideNPC SHOW 25");
|
||||
//isIgnoredByAI = false;
|
||||
|
||||
//Log.Out("EntityNPCRebirth-HideNPC SHOW 26");
|
||||
/*var newFaction = FactionManager.Instance.GetFactionByName("whiteriver");
|
||||
Log.Out("EntityNPCRebirth-HideNPC SHOW 27");
|
||||
if (newFaction != null)
|
||||
{
|
||||
//Log.Out("EntityNPCRebirth-HideNPC SHOW 28");
|
||||
this.factionId = newFaction.ID;
|
||||
}*/
|
||||
//Log.Out("EntityNPCRebirth-HideNPC SHOW 29");
|
||||
this.attackTarget = (EntityAlive) null;
|
||||
//Log.Out("EntityNPCRebirth-HideNPC SHOW 30");
|
||||
this.SetRevengeTarget((EntityAlive) null);
|
||||
//Log.Out("EntityNPCRebirth-HideNPC SHOW 31");
|
||||
|
||||
float flRespawn = this.Buffs.GetCustomVar("$FR_NPC_Respawn");
|
||||
//Log.Out("EntityNPCRebirth-HideNPC SHOW 32");
|
||||
|
||||
if (flRespawn == 0)
|
||||
{
|
||||
//Log.Out("EntityNPCRebirth-HideNPC SHOW 33");
|
||||
Buffs.RemoveBuff("FuriousRamsayRespawned");
|
||||
Buffs.RemoveBuff("FuriousRamsayResistFireShockSmoke");
|
||||
}
|
||||
//Log.Out("EntityNPCRebirth-HideNPC SHOW 34");
|
||||
}
|
||||
}
|
||||
|
||||
public override Vector3 GetLookVector()
|
||||
{
|
||||
if (!IsDead() && attackTarget != null && HasAnyTags(FastTags<TagGroup.Global>.Parse("ranged")))
|
||||
{
|
||||
int npcLevel = (int)this.Buffs.GetCustomVar("$FR_NPC_Level");
|
||||
|
||||
int headshotChance = npcLevel - 1;
|
||||
|
||||
int random = GameManager.Instance.World.GetGameRandom().RandomRange(1, 11);
|
||||
|
||||
string tagName = "E_BP_Head";
|
||||
|
||||
if (headshotChance < random)
|
||||
{
|
||||
tagName = RebirthVariables.bodyTags[random];
|
||||
}
|
||||
|
||||
float numAccuracyModifier = float.Parse(RebirthVariables.customRangedNPCAccuracyModifier) / 100;
|
||||
|
||||
float baseValue = 70 * numAccuracyModifier;
|
||||
|
||||
if (numMagazineSize == 0)
|
||||
{
|
||||
ItemActionRanged myAction = null;
|
||||
|
||||
myAction = (ItemActionRanged)inventory.holdingItem.Actions[1];
|
||||
ItemActionData _actionData = inventory.holdingItemData.actionData[1];
|
||||
ItemActionRanged.ItemActionDataRanged itemActionDataRanged = (ItemActionRanged.ItemActionDataRanged)_actionData;
|
||||
//float myDelay = 60f / EffectManager.GetValue(PassiveEffects.RoundsPerMinute, ItemClass.GetItem(inventory.holdingItem.GetItemName(), false), 60f / itemActionDataRanged.OriginalDelay, this, null, new FastTags<TagGroup.Global>(), true, true, true, true, true, 1, false);
|
||||
float myDelay = 60f / EffectManager.GetValue(PassiveEffects.RoundsPerMinute, itemActionDataRanged.invData.itemValue, 60f / itemActionDataRanged.OriginalDelay, this);
|
||||
roundsPerMinute = 60 / myDelay;
|
||||
|
||||
//numMagazineSize = (int)EffectManager.GetValue(PassiveEffects.MagazineSize, ItemClass.GetItem(inventory.holdingItem.GetItemName(), false), myAction.BulletsPerMagazine, this, null, new FastTags<TagGroup.Global>(), true, true, true, true, true, 1);
|
||||
numMagazineSize = (int)EffectManager.GetValue(PassiveEffects.MagazineSize, itemActionDataRanged.invData.itemValue, myAction.BulletsPerMagazine, this);
|
||||
}
|
||||
|
||||
if (numMagazineSize > 1)
|
||||
{
|
||||
baseValue = 60 * numAccuracyModifier;
|
||||
int baseRoundsPerMinute = 60;
|
||||
|
||||
if (roundsPerMinute > baseRoundsPerMinute)
|
||||
{
|
||||
float multiplier = 1 - ((roundsPerMinute / baseRoundsPerMinute) / 15);
|
||||
|
||||
baseValue *= multiplier;
|
||||
}
|
||||
}
|
||||
|
||||
float missShotChance = baseValue + (npcLevel * 0.3f * numAccuracyModifier) * 10;
|
||||
|
||||
//Log.Out("EntityNPCRebirth-GetLookVector level: " + this.Buffs.GetCustomVar("$FR_NPC_Level"));
|
||||
//Log.Out("EntityNPCRebirth-GetLookVector A random: " + random);
|
||||
//Log.Out("EntityNPCRebirth-GetLookVector missShotChance: " + missShotChance);
|
||||
|
||||
random = GameManager.Instance.World.GetGameRandom().RandomRange(1, 101);
|
||||
|
||||
//Log.Out("EntityNPCRebirth-GetLookVector B random: " + random);
|
||||
|
||||
if (missShotChance < random)
|
||||
{
|
||||
//Log.Out("EntityNPCRebirth-GetLookVector MISS");
|
||||
return new Vector3(0, 100, 0);
|
||||
}
|
||||
|
||||
var col = attackTarget.GetComponentsInChildren<Collider>().Where(x => x.CompareTag(tagName)).FirstOrDefault();
|
||||
if (col != null)
|
||||
{
|
||||
return (col.transform.position - (transform.position + new Vector3(0f, GetEyeHeight(), 0f)));
|
||||
}
|
||||
}
|
||||
|
||||
return base.GetLookVector();
|
||||
}
|
||||
|
||||
public override bool IsFriendlyPlayer(EntityPlayer player)
|
||||
{
|
||||
if (!RebirthUtilities.VerifyFactionStanding(this, player)) return true;
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
public override void OnUpdateLive()
|
||||
{
|
||||
//Log.Out("EntityNPCRebirth-OnUpdateLive entityClassName: " + this.EntityClass.entityClassName);
|
||||
float respawned = this.Buffs.GetCustomVar("$FR_NPC_Respawn");
|
||||
float flLeader = RebirthUtilities.GetLeader(this);
|
||||
|
||||
if (SingletonMonoBehaviour<ConnectionManager>.Instance.IsServer && (Time.time - ownerFastCheck) > ownerFastTick)
|
||||
{
|
||||
ownerFastCheck = Time.time;
|
||||
|
||||
if (this.LeaderUtils.Owner != null)
|
||||
{
|
||||
if (!this.HasAnyTags(FastTags<TagGroup.Global>.Parse("allyanimal")))
|
||||
{
|
||||
this.Crouching = this.LeaderUtils.Owner.Crouching;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (SingletonMonoBehaviour<ConnectionManager>.Instance.IsServer && (Time.time - ownerMidCheck) > ownerMidTick)
|
||||
{
|
||||
ownerMidCheck = Time.time;
|
||||
|
||||
if (this.LeaderUtils.Owner != null && RebirthUtilities.IsPrimaryClass(this.LeaderUtils.Owner, 10) && RebirthUtilities.HasBuffLike(this.LeaderUtils.Owner, "FuriousRamsayRage"))
|
||||
{
|
||||
if (this.HasAnyTags(FastTags<TagGroup.Global>.Parse("allyanimal,melee")) && !this.Buffs.HasBuff("FuriousRamsayTempRageBuff"))
|
||||
{
|
||||
this.Buffs.AddBuff("FuriousRamsayTempRageBuff");
|
||||
}
|
||||
}
|
||||
else if (this.Buffs.HasBuff("FuriousRamsayTempRageBuff"))
|
||||
{
|
||||
this.Buffs.RemoveBuff("FuriousRamsayTempRageBuff");
|
||||
}
|
||||
}
|
||||
|
||||
if (SingletonMonoBehaviour<ConnectionManager>.Instance.IsServer && (Time.time - ownerSlowCheck) > ownerSlowTick)
|
||||
{
|
||||
ownerSlowCheck = Time.time;
|
||||
|
||||
if (this.LeaderUtils.Owner != null)
|
||||
{
|
||||
if (!RebirthManager.hasHire(this.LeaderUtils.Owner.entityId, this.entityId) && !(this.EntityClass.Tags.Test_AnySet(FastTags<TagGroup.Global>.Parse("temp"))))
|
||||
{
|
||||
RebirthUtilities.DespawnEntity(this);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (SingletonMonoBehaviour<ConnectionManager>.Instance.IsServer && (Time.time - bedrollCheck) > bedrollTick)
|
||||
{
|
||||
//Log.Out("EntityNPCRebirth-OnUpdateLive bedrollTick, $FR_NPC_Respawn: " + respawned);
|
||||
bedrollCheck = Time.time;
|
||||
|
||||
if (this.LeaderUtils.Owner != null)
|
||||
{
|
||||
//Log.Out("EntityNPCRebirth-OnUpdateLive Owner exists");
|
||||
|
||||
SpawnPosition spawnPoint = RebirthUtilities.GetSpawnPoint(this.LeaderUtils.Owner);
|
||||
|
||||
if (!spawnPoint.IsUndef())
|
||||
{
|
||||
//Log.Out("EntityNPCRebirth-OnUpdateLive spawnPoint: " + spawnPoint.position);
|
||||
|
||||
float distance = Vector3.Distance(this.position, spawnPoint.position);
|
||||
|
||||
//Log.Out("EntityNPCRebirth-OnUpdateLive distance: " + distance);
|
||||
|
||||
if (distance < 3 && respawned == 1f)
|
||||
{
|
||||
//Log.Out("EntityNPCRebirth-OnUpdateLive Apply Buff");
|
||||
this.Buffs.AddBuff("buffBedrollAOEEffect");
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
//Log.Out("EntityNPCRebirth-OnUpdateLive No Owner Spawnpoint");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//Log.Out("EntityNPCRebirth-OnUpdateLive TempPause: " + this.Buffs.GetCustomVar(".TempPause") + $"[{this.EntityClass.entityClassName}]");
|
||||
if (this.Buffs.GetCustomVar(".TempPause") == 0f)
|
||||
{
|
||||
if (this.IsSleeping)
|
||||
{
|
||||
if (this.Buffs.GetCustomVar("$FR_NPC_Respawn") == 0f)
|
||||
{
|
||||
this.ConditionalTriggerSleeperWakeUp();
|
||||
}
|
||||
return;
|
||||
}
|
||||
else
|
||||
{
|
||||
if (this.Buffs.GetCustomVar("$FR_NPC_Respawn") == 1f && this.Buffs.GetCustomVar("$FR_NPC_RespawnCommandActivation") == 0f)
|
||||
{
|
||||
this.TriggerSleeperPose(0);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (!setSize)
|
||||
{
|
||||
float sizeScale = this.Buffs.GetCustomVar("$StartScale");
|
||||
|
||||
//Log.Out("EntityNPCRebirth-OnUpdateLive sizeScale: " + sizeScale);
|
||||
if (sizeScale > 0f)
|
||||
{
|
||||
this.scale = new Vector3(sizeScale, sizeScale, sizeScale);
|
||||
this.SetScale(sizeScale);
|
||||
this.OverrideSize = sizeScale;
|
||||
}
|
||||
|
||||
setSize = true;
|
||||
}
|
||||
|
||||
if (!setNavIcon)
|
||||
{
|
||||
//Log.Out("EntityNPCRebirth-OnUpdateLive SET NAV ICON");
|
||||
|
||||
string navObjectName = "";
|
||||
|
||||
if (NavObject != null)
|
||||
{
|
||||
//Log.Out("EntityNPCRebirth-OnUpdateLive NavObject.name: " + NavObject.name);
|
||||
NavObjectManager.Instance.UnRegisterNavObject(NavObject);
|
||||
NavObject = null;
|
||||
}
|
||||
|
||||
if (RebirthVariables.customEventsNotification && this.Buffs.GetCustomVar("$varFuriousRamsaySupportMinion") == 1f)
|
||||
{
|
||||
//Log.Out("EntityNPCRebirth-OnUpdateLive SET NAV ICON SUPPORT NO HEALTH");
|
||||
navObjectName = RebirthVariables.navIconSupportEventNoHealth;
|
||||
|
||||
if (RebirthVariables.customTargetBarVisibility == "always")
|
||||
{
|
||||
//Log.Out("EntityNPCRebirth-OnUpdateLive SET NAV ICON SUPPORT");
|
||||
navObjectName = RebirthVariables.navIconSupportEvent;
|
||||
}
|
||||
this.AddNavObject(navObjectName, "", "");
|
||||
}
|
||||
else if (RebirthVariables.customEventsNotification && this.Buffs.GetCustomVar("$varFuriousRamsayBoss") == 1f)
|
||||
{
|
||||
//Log.Out("EntityNPCRebirth-OnUpdateLive SET NAV ICON BOSS NO HEALTH");
|
||||
navObjectName = RebirthVariables.navIconBossEventNoHealthNPC;
|
||||
|
||||
if (RebirthVariables.customTargetBarVisibility == "always")
|
||||
{
|
||||
//Log.Out("EntityNPCRebirth-OnUpdateLive SET NAV ICON BOSS");
|
||||
navObjectName = RebirthVariables.navIconBossEventNPC;
|
||||
}
|
||||
this.AddNavObject(navObjectName, "", "");
|
||||
}
|
||||
|
||||
//Log.Out("EntityNPCRebirth-OnUpdateLive navObjectName: " + navObjectName);
|
||||
|
||||
setNavIcon = true;
|
||||
}
|
||||
|
||||
if (SingletonMonoBehaviour<ConnectionManager>.Instance.IsServer && (Time.time - positionCheck) > positionTick)
|
||||
{
|
||||
positionCheck = Time.time;
|
||||
|
||||
if (flLeader == 0)
|
||||
{
|
||||
ulong worldTime = GameManager.Instance.World.worldTime;
|
||||
ValueTuple<int, int, int> valueTuple = GameUtils.WorldTimeToElements(worldTime);
|
||||
|
||||
int day = valueTuple.Item1;
|
||||
int hour = valueTuple.Item2;
|
||||
|
||||
float originalDayAlive = Buffs.GetCustomVar("$OriginalDayAlive");
|
||||
|
||||
if (originalDayAlive == 0)
|
||||
{
|
||||
Buffs.SetCustomVar("$OriginalDayAlive", day - 1);
|
||||
}
|
||||
else
|
||||
{
|
||||
if (originalDayAlive < day)
|
||||
{
|
||||
float numDaysAlive = day - originalDayAlive;
|
||||
|
||||
float maxDaysAlive = Buffs.GetCustomVar("$MaxDaysAlive");
|
||||
|
||||
if (maxDaysAlive == 0)
|
||||
{
|
||||
maxDaysAlive = 2;
|
||||
}
|
||||
|
||||
if (numDaysAlive >= maxDaysAlive)
|
||||
{
|
||||
bWillRespawn = false;
|
||||
GameManager.Instance.World.RemoveEntity(entityId, EnumRemoveEntityReason.Unloaded);
|
||||
return;
|
||||
}
|
||||
|
||||
Buffs.SetCustomVar("$CurrentDayAlive", day);
|
||||
Buffs.SetCustomVar("$NumDaysAlive", numDaysAlive);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (flLeader > 0)
|
||||
{
|
||||
if (respawned == 0)
|
||||
{
|
||||
//Log.Out("Entity [" + EntityName + "], POSITION: " + this.position);
|
||||
//Log.Out("Entity [" + EntityName + "], LOOK POSITION: " + this.position + this.GetLookVector());
|
||||
//Log.Out("GUARD POSITION: " + this.guardPosition);
|
||||
//Log.Out("RESPAWN POSITION: " + RebirthUtilities.GetRespawnPosition(this));
|
||||
|
||||
if (this.LeaderUtils.Owner != null)
|
||||
{
|
||||
if (this.Buffs.GetCustomVar("CurrentOrder") == 10)
|
||||
{
|
||||
this.Buffs.SetCustomVar("CurrentOrder", 1f);
|
||||
HideNPC(false);
|
||||
}
|
||||
|
||||
if (!this.LeaderUtils.Owner.AttachedToEntity)
|
||||
{
|
||||
this.Buffs.SetCustomVar("$traveling", 0f);
|
||||
}
|
||||
}
|
||||
|
||||
if (NavObject == null)
|
||||
{
|
||||
NavObject = NavObjectManager.Instance.RegisterNavObject(EntityClass.list[this.entityClass].NavObject, this, "", false);
|
||||
NavObject.name = EntityName;
|
||||
}
|
||||
|
||||
if (this.Buffs.GetCustomVar("CurrentOrder") == (int)EntityUtilities.Orders.Follow)
|
||||
{
|
||||
RebirthManager.UpdateHireInfo(this.entityId, "spawnPosition", "", this.position.ToString(), new Vector3(0, this.rotation.y, 0).ToString());
|
||||
}
|
||||
/*Vector3 newPosition = this.position;
|
||||
|
||||
if (this.position.y < 0)
|
||||
{
|
||||
if (this.LeaderUtils.Owner != null)
|
||||
{
|
||||
if (this.Buffs.GetCustomVar("CurrentOrder") == 1)
|
||||
{
|
||||
newPosition = this.LeaderUtils.Owner.position;
|
||||
}
|
||||
else
|
||||
{
|
||||
if (this.guardPosition != Vector3.zero)
|
||||
{
|
||||
newPosition = this.guardPosition;
|
||||
}
|
||||
else
|
||||
{
|
||||
newPosition = RebirthUtilities.GetRespawnPosition(this);
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
newPosition = RebirthUtilities.GetRespawnPosition(this);
|
||||
}
|
||||
|
||||
Log.Out("EntityNPCRebirth-OnUpdateLive REPOSITION");
|
||||
this.SetPosition(newPosition);
|
||||
|
||||
bool foundHire = false;
|
||||
|
||||
foreach (chunkObservers observer in observers)
|
||||
{
|
||||
if (observer.entityID == this.entityId)
|
||||
{
|
||||
foundHire = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (!foundHire)
|
||||
{
|
||||
//Log.Out("MinEventActionRespawnEntity-Execute ADDED CHUNK OBSERVER for: " + this.entityId);
|
||||
ChunkManager.ChunkObserver observerRef = GameManager.Instance.AddChunkObserver(newPosition, false, 3, -1);
|
||||
observers.Add(new chunkObservers(this.entityId, observerRef));
|
||||
}
|
||||
}*/
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (this.HasAllTags(FastTags<TagGroup.Global>.Parse("ignoreFactionChange")) || !this.enabled || respawned == 1)
|
||||
{
|
||||
//Log.Out($"EntityNPCRebirth-OnUpdateLive this Entity: {this} respawned: {respawned}");
|
||||
base.OnUpdateLive();
|
||||
return;
|
||||
}
|
||||
|
||||
if (this.LeaderUtils.Owner != null && (Time.time - hiredCheck) > hiredTick)
|
||||
{
|
||||
//Log.Out("EntityNPCRebirth-OnUpdateLive EntityName: " + this.EntityName);
|
||||
hiredCheck = Time.time;
|
||||
|
||||
bool foundMyself = false;
|
||||
int order = -1;
|
||||
|
||||
if (this.Buffs.GetCustomVar("CurrentOrder") == 1)
|
||||
{
|
||||
foreach (hireInfo hire in playerHires)
|
||||
{
|
||||
if (hire.playerID == this.LeaderUtils.Owner.entityId && hire.hireID == this.entityId)
|
||||
{
|
||||
foundMyself = true;
|
||||
order = hire.order;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (!foundMyself)
|
||||
{
|
||||
//Log.Out("EntityNPCRebirth-OnUpdateLive ADDED MISSING HIRE entityName: " + this.entityName);
|
||||
if (!this.EntityClass.Tags.Test_AnySet(FastTags<TagGroup.Global>.Parse("temp")))
|
||||
{
|
||||
RebirthManager.AddHire(this.LeaderUtils.Owner.entityId,
|
||||
this.entityId,
|
||||
this.EntityName,
|
||||
this.EntityClass.entityClassName,
|
||||
this.position,
|
||||
this.rotation,
|
||||
new Vector3(0, 0, 0),
|
||||
new Vector3(0, 0, 0),
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
true
|
||||
);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if (order > 0)
|
||||
{
|
||||
//Log.Out("EntityNPCRebirth-OnUpdateLive CHANGE ORDER TO FOLLOW");
|
||||
RebirthManager.UpdateHireInfo(this.entityId, "order", "follow");
|
||||
}
|
||||
//Log.Out("EntityNPCRebirth-OnUpdateLive HIRE ALREADY EXISTS entityName: " + this.entityName);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (this.GetCVar("_stunned") == 1f && !this.emodel.avatarController.IsAnimationStunRunning())
|
||||
{
|
||||
this.ClearStun();
|
||||
}
|
||||
|
||||
FastTags<TagGroup.Global> tagsToCompare = FastTags<TagGroup.Global>.Parse("survivor");
|
||||
bool bHasTags = this.HasAllTags(tagsToCompare);
|
||||
|
||||
bool isNPC = this.HasAllTags(FastTags<TagGroup.Global>.Parse("npc"));
|
||||
|
||||
bool isAnimal = this.HasAnyTags(FastTags<TagGroup.Global>.Parse("allyanimal"));
|
||||
bool isPanther = this.HasAnyTags(FastTags<TagGroup.Global>.Parse("panther"));
|
||||
|
||||
//Log.Out("EntityNPCRebirth-OnUpdateLive this.tempSpawn: " + this.tempSpawn);
|
||||
|
||||
if (isAnimal)
|
||||
{
|
||||
ulong elpasedTimeUpdate = GameTimer.Instance.ticks - AccumulatedTicksUpdate;
|
||||
|
||||
if (elpasedTimeUpdate >= 1200UL)
|
||||
{
|
||||
AccumulatedTicksUpdate = GameTimer.Instance.ticks;
|
||||
|
||||
//Log.Out("EntityNPCRebirth-OnUpdateLive entity: " + this.entityId);
|
||||
|
||||
if (this.lootContainer != null)
|
||||
{
|
||||
bool blIsEmpty = this.lootContainer.IsEmpty();
|
||||
if (blIsEmpty && this.lootContainer.containerSize != new Vector2i(10, 1))
|
||||
{
|
||||
lootContainer.SetContainerSize(new Vector2i(10, 1));
|
||||
}
|
||||
|
||||
if (this.LeaderUtils.Owner)
|
||||
{
|
||||
EntityPlayer entityPlayer = this.world.GetEntity(this.LeaderUtils.Owner.entityId) as EntityPlayer;
|
||||
|
||||
if (entityPlayer != null)
|
||||
{
|
||||
SpawnPosition spawnPoint = RebirthUtilities.GetSpawnPoint(entityPlayer);
|
||||
|
||||
this.Buffs.SetCustomVar("$SpawnPoint_X", spawnPoint.position.x);
|
||||
this.Buffs.SetCustomVar("$SpawnPoint_Y", spawnPoint.position.y);
|
||||
this.Buffs.SetCustomVar("$SpawnPoint_Z", spawnPoint.position.z);
|
||||
|
||||
//Log.Out("EntityNPCRebirth-OnUpdateLive SET SPAWNPOINT");
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (this.HasAnyTags(FastTags<TagGroup.Global>.Parse("temp")))
|
||||
{
|
||||
ulong elpasedTimeDespawn = GameTimer.Instance.ticks - AccumulatedTicksDespawn;
|
||||
|
||||
if (elpasedTimeDespawn >= 20UL)
|
||||
{
|
||||
AccumulatedTicksDespawn = GameTimer.Instance.ticks;
|
||||
tempSpawnTime = tempSpawnTime + 1UL;
|
||||
//Log.Out("EntityNPCRebirth-OnUpdateLive tempSpawnTime: " + tempSpawnTime);
|
||||
}
|
||||
|
||||
if ((this.tempSpawnTime >= this.tempSpawn) && !despawning)
|
||||
{
|
||||
despawning = true;
|
||||
//Log.Out("EntityNPCRebirth-OnUpdateLive UNLOAD TEMP");
|
||||
this.Buffs.AddBuff("FuriousRamsayDespawnEntity");
|
||||
}
|
||||
}
|
||||
|
||||
if (this.HasAnyTags(FastTags<TagGroup.Global>.Parse("zombieCompanion")))
|
||||
{
|
||||
ulong elpasedTimeZombieCompanion = GameTimer.Instance.ticks - AccumulatedTicksZombieCompanion;
|
||||
|
||||
if (elpasedTimeZombieCompanion >= 600UL)
|
||||
{
|
||||
AccumulatedTicksZombieCompanion = GameTimer.Instance.ticks;
|
||||
|
||||
if (this.LeaderUtils.Owner)
|
||||
{
|
||||
ProgressionValue progressionValue = this.LeaderUtils.Owner.Progression.GetProgressionValue("FuriousRamsayPerkBlackMagic");
|
||||
if (progressionValue != null)
|
||||
{
|
||||
float flZombieCompanion = this.Buffs.GetCustomVar("$FR_NPC_ZombieLvl");
|
||||
this.Buffs.SetCustomVar("$FR_NPC_ZombieLvl", progressionValue.Level);
|
||||
|
||||
//Log.Out("EntityAliveSDX-UpdateLive flZombieCompanion: " + flZombieCompanion);
|
||||
|
||||
if (flZombieCompanion > 0f)
|
||||
{
|
||||
if (flZombieCompanion != progressionValue.Level)
|
||||
{
|
||||
this.Buffs.AddBuff("FuriousRamsayWitchDoctorZombies" + progressionValue.Level);
|
||||
for (int i = 1; i < 11; i++)
|
||||
{
|
||||
if (i != progressionValue.Level)
|
||||
{
|
||||
//Log.Out("EntityAliveSDX-UpdateLive REMOVE BUFF: " + flZombieCompanion);
|
||||
this.Buffs.RemoveBuff("FuriousRamsayWitchDoctorZombies" + flZombieCompanion);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
//Log.Out("EntityAliveSDX-UpdateLive ADD BUFF: " + progressionValue.Level);
|
||||
this.Buffs.AddBuff("FuriousRamsayWitchDoctorZombies" + progressionValue.Level);
|
||||
}
|
||||
//Log.Out("EntityAliveSDX-UpdateLive ZombieCompanion: " + "FuriousRamsayWitchDoctorZombies" + progressionValue.Level);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (this.bDead)
|
||||
{
|
||||
if (this.lootContainer != null)
|
||||
{
|
||||
if (this.lootContainer.bTouched && this.lootContainer.IsEmpty())
|
||||
{
|
||||
this.MarkToUnload();
|
||||
this.KillLootContainer();
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
ulong elpasedTime = GameTimer.Instance.ticks - AccumulatedTicks;
|
||||
|
||||
if (this.LeaderUtils.Owner && this.Buffs.GetCustomVar("CurrentOrder") == 1)
|
||||
{
|
||||
if (this.LeaderUtils.Owner.AttachedToEntity)
|
||||
{
|
||||
this.position.x = this.LeaderUtils.Owner.position.x;
|
||||
this.position.z = this.LeaderUtils.Owner.position.z;
|
||||
this.position.y = this.LeaderUtils.Owner.position.y + 100;
|
||||
|
||||
this.IsFlyMode.Value = true;
|
||||
this.IsNoCollisionMode.Value = true;
|
||||
}
|
||||
else
|
||||
{
|
||||
this.IsNoCollisionMode.Value = false;
|
||||
this.IsFlyMode.Value = false;
|
||||
}
|
||||
}
|
||||
|
||||
float flNotified = this.Buffs.GetCustomVar("$FR_ENTITY_NotifiedEvent");
|
||||
if (flNotified == 1)
|
||||
{
|
||||
hasNotified = true;
|
||||
}
|
||||
|
||||
if (this.attackTarget && !hasNotified && this.HasAllTags(FastTags<TagGroup.Global>.Parse("boss,eventspawn")))
|
||||
{
|
||||
hasNotified = true;
|
||||
this.Buffs.SetCustomVar("$FR_ENTITY_NotifiedEvent", 1);
|
||||
this.attackTarget.Buffs.AddBuff("FuriousRamsayEventTrigger");
|
||||
}
|
||||
|
||||
if (elpasedTime > 100UL)
|
||||
{
|
||||
AccumulatedTicks = GameTimer.Instance.ticks;
|
||||
|
||||
if (this.LeaderUtils.Owner != null)
|
||||
{
|
||||
//Log.Out("EntityNPCRebirth-OnUpdateLive this.NavObject == null: " + (this.NavObject == null));
|
||||
if (this.NavObject != null)
|
||||
{
|
||||
//Log.Out("EntityNPCRebirth-OnUpdateLive this.NavObject.IsActive: " + this.NavObject.IsActive);
|
||||
|
||||
}
|
||||
//Log.Out("EntityNPCRebirth-OnUpdateLive entity: " + this.EntityClass.entityClassName);
|
||||
//Log.Out("EntityNPCRebirth-OnUpdateLive this.bIsChunkObserver: " + this.bIsChunkObserver);
|
||||
//Log.Out("EntityNPCRebirth-OnUpdateLive this.bWillRespawn: " + this.bWillRespawn);
|
||||
//Log.Out("EntityNPCRebirth-OnUpdateLive this.IsEntityUpdatedInUnloadedChunk: " + this.IsEntityUpdatedInUnloadedChunk);
|
||||
}
|
||||
}
|
||||
|
||||
int randomProbability = 0;
|
||||
|
||||
if (elpasedTime > 30UL)
|
||||
{
|
||||
bSoundCheck = true;
|
||||
AccumulatedTicksSound = GameTimer.Instance.ticks;
|
||||
}
|
||||
|
||||
bool attackTargetCheck = false;
|
||||
ulong elpasedTimeSoundTarget = GameTimer.Instance.ticks - AccumulatedTicksSoundTarget;
|
||||
if (elpasedTimeSoundTarget > 20UL)
|
||||
{
|
||||
attackTargetCheck = true;
|
||||
AccumulatedTicksSoundTarget = GameTimer.Instance.ticks;
|
||||
randomProbability = UnityEngine.Random.Range(0, 20);
|
||||
//Log.Out("EntityNPCRebirth-OnUpdateLive Found Target randomProbability: " + randomProbability);
|
||||
//Log.Out("EntityNPCRebirth-OnUpdateLive Found Target attackTargetCheck: " + attackTargetCheck);
|
||||
}
|
||||
|
||||
ulong elpasedTimeSoundRandom = GameTimer.Instance.ticks - AccumulatedTicksSoundRandom;
|
||||
if (elpasedTimeSoundRandom > 5000UL && randomProbability == 5)
|
||||
{
|
||||
//Log.Out("EntityNPCRebirth-OnUpdateLive Found Target elpasedTimeSoundRandom: " + elpasedTimeSoundRandom);
|
||||
bSoundRandomCheck = true;
|
||||
AccumulatedTicksSoundRandom = GameTimer.Instance.ticks;
|
||||
}
|
||||
|
||||
ulong elpasedTimeSoundKillingSpree = GameTimer.Instance.ticks - AccumulatedTicksSoundKillingSpree;
|
||||
if (elpasedTimeSoundKillingSpree > 600UL)
|
||||
{
|
||||
//Log.Out("EntityNPCRebirth-OnUpdateLive Found Target elpasedTimeSoundRandom: " + elpasedTimeSoundRandom);
|
||||
killingSpree = 0;
|
||||
AccumulatedTicksSoundKillingSpree = GameTimer.Instance.ticks;
|
||||
}
|
||||
|
||||
if (AccumulatedTicksFoundAttackTarget == 0UL)
|
||||
{
|
||||
//Log.Out("EntityNPCRebirth-OnUpdateLive SET AccumulatedTicksFoundAttackTarget");
|
||||
AccumulatedTicksFoundAttackTarget = GameTimer.Instance.ticks;
|
||||
}
|
||||
|
||||
bool canTalk = true;
|
||||
|
||||
if (!this.enabled || this.Buffs.GetCustomVar("$FR_NPC_Respawn") == 1)
|
||||
{
|
||||
canTalk = false;
|
||||
}
|
||||
|
||||
bool hasBuffs = this.Buffs.HasBuff("FuriousRamsayNPCOtherAttackedSelf") ||
|
||||
this.Buffs.HasBuff("FuriousRamsayNPCOtherDamagedSelf") ||
|
||||
this.Buffs.HasBuff("FuriousRamsayNPCOnFire") ||
|
||||
this.Buffs.HasBuff("FuriousRamsayNPCRandom");
|
||||
|
||||
if (!isAnimal && attackTargetCheck && !hasAttackTarget && canTalk && !hasBuffs)
|
||||
{
|
||||
//Log.Out("EntityNPCRebirth-OnUpdateLive Found Target AccumulatedTicksFoundAttackTarget: " + AccumulatedTicksFoundAttackTarget);
|
||||
//Log.Out("EntityNPCRebirth-OnUpdateLive Found Target AccumulatedTicksFoundAttackTarget + 200UL: " + (AccumulatedTicksFoundAttackTarget + 200UL));
|
||||
//Log.Out("EntityNPCRebirth-OnUpdateLive Found Target GameTimer.Instance.ticks: " + GameTimer.Instance.ticks);
|
||||
//Log.Out("EntityNPCRebirth-OnUpdateLive this.attackTarget: " + this.GetAttackTarget());
|
||||
//Log.Out("EntityNPCRebirth-OnUpdateLive Found Target this.attackTarget != null: " + (this.attackTarget != null));
|
||||
if (this.GetAttackTarget() != null)
|
||||
{
|
||||
if (this.GetAttackTarget() is EntityNPCRebirth)
|
||||
{
|
||||
EntityNPCRebirth target = (EntityNPCRebirth)this.GetAttackTarget();
|
||||
if (target.HasAllTags(FastTags<TagGroup.Global>.Parse("bandit,ranged")))
|
||||
{
|
||||
hasAttackTarget = true;
|
||||
AccumulatedTicksFoundAttackTarget = GameTimer.Instance.ticks;
|
||||
//Log.Out("EntityNPCRebirth-OnUpdateLive Found Target: " + this.GetAttackTarget().EntityClass.entityClassName);
|
||||
|
||||
List<string> myTags = this.EntityTags.GetTagNames();
|
||||
List<string> myRandomSounds = new List<string>();
|
||||
|
||||
if (!RebirthUtilities.IsHordeNight())
|
||||
{
|
||||
foreach (string tag in myTags)
|
||||
{
|
||||
//Log.Out("EntityNPCRebirth-OnUpdateLive SOUND CHECK tag: " + tag);
|
||||
if (tag.Contains("-CST-"))
|
||||
{
|
||||
//Log.Out("EntityNPCRebirth-OnUpdateLive SOUND CHECK 3c");
|
||||
myRandomSounds.Add(tag);
|
||||
}
|
||||
}
|
||||
|
||||
if (myRandomSounds.Count > 0)
|
||||
{
|
||||
this.Buffs.AddBuff("FuriousRamsayNPCCanSeeTarget");
|
||||
int index = UnityEngine.Random.Range(0, myRandomSounds.Count - 1);
|
||||
|
||||
if (SingletonMonoBehaviour<ConnectionManager>.Instance.IsSinglePlayer)
|
||||
{
|
||||
if (this.LeaderUtils.Owner != null)
|
||||
{
|
||||
//Log.Out("EntityNPCRebirth-OnUpdateLive SOUND CHECK 3d");
|
||||
Manager.BroadcastPlay(this.position, myRandomSounds[index], 0f);
|
||||
//Manager.BroadcastPlay(leader.position, myRandomSounds[index], 0f);
|
||||
}
|
||||
else
|
||||
{
|
||||
//Log.Out("EntityNPCRebirth-OnUpdateLive SOUND CHECK 3e");
|
||||
Manager.BroadcastPlay(this.position, myRandomSounds[index], 0f);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if (this.LeaderUtils.Owner != null)
|
||||
{
|
||||
//Log.Out("EntityNPCRebirth-OnUpdateLive SOUND CHECK 3f");
|
||||
Manager.BroadcastPlay(this.position, myRandomSounds[index], 0f);
|
||||
//Manager.BroadcastPlay(leader.position, myRandomSounds[index], 0f);
|
||||
}
|
||||
else
|
||||
{
|
||||
//Log.Out("EntityNPCRebirth-OnUpdateLive SOUND CHECK 3g");
|
||||
Manager.BroadcastPlay(this.position, myRandomSounds[index], 0f);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
randomProbability = UnityEngine.Random.Range(0, 10);
|
||||
//Log.Out("EntityNPCRebirth-OnUpdateLive randomProbability: " + randomProbability);
|
||||
|
||||
if (((AccumulatedTicksFoundAttackTarget + 1800UL) < GameTimer.Instance.ticks) && this.GetAttackTarget() == null && randomProbability == 5)
|
||||
{
|
||||
//Log.Out("EntityNPCRebirth-OnUpdateLive Cleared Target");
|
||||
hasAttackTarget = false;
|
||||
}
|
||||
}
|
||||
|
||||
hasBuffs = this.Buffs.HasBuff("FuriousRamsayNPCOtherAttackedSelf") ||
|
||||
this.Buffs.HasBuff("FuriousRamsayNPCOtherDamagedSelf") ||
|
||||
this.Buffs.HasBuff("FuriousRamsayNPCOnFire") ||
|
||||
this.Buffs.HasBuff("FuriousRamsayNPCRandom");
|
||||
|
||||
if (!isAnimal && !isOnFire && !hasAttackTarget && bSoundRandomCheck && this.LeaderUtils.Owner && !RebirthUtilities.IsHordeNight() && canTalk && !hasBuffs)
|
||||
{
|
||||
List<string> myTags = this.EntityTags.GetTagNames();
|
||||
List<string> myRandomSounds = new List<string>();
|
||||
|
||||
foreach (string tag in myTags)
|
||||
{
|
||||
//Log.Out("EntityNPCRebirth-OnUpdateLive SOUND CHECK tag: " + tag);
|
||||
if (tag.Contains("-R-"))
|
||||
{
|
||||
//Log.Out("EntityNPCRebirth-OnUpdateLive SOUND CHECK 3c");
|
||||
myRandomSounds.Add(tag);
|
||||
}
|
||||
}
|
||||
|
||||
if (myRandomSounds.Count > 0)
|
||||
{
|
||||
this.Buffs.AddBuff("FuriousRamsayNPCRandom");
|
||||
int index = UnityEngine.Random.Range(0, myRandomSounds.Count - 1);
|
||||
|
||||
if (SingletonMonoBehaviour<ConnectionManager>.Instance.IsSinglePlayer)
|
||||
{
|
||||
if (this.LeaderUtils.Owner != null)
|
||||
{
|
||||
//Log.Out("EntityNPCRebirth-OnUpdateLive SOUND CHECK 4d");
|
||||
Manager.BroadcastPlay(this.position, myRandomSounds[index], 0f);
|
||||
}
|
||||
else
|
||||
{
|
||||
//Log.Out("EntityNPCRebirth-OnUpdateLive SOUND CHECK 4e");
|
||||
Manager.BroadcastPlay(this.position, myRandomSounds[index], 0f);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
//var leader = EntityUtilities.GetLeaderOrOwner(entityId) as EntityAlive;
|
||||
|
||||
if (this.LeaderUtils.Owner != null)
|
||||
{
|
||||
//Log.Out("EntityNPCRebirth-OnUpdateLive SOUND CHECK 4f");
|
||||
Manager.BroadcastPlay(this.position, myRandomSounds[index], 0f);
|
||||
}
|
||||
else
|
||||
{
|
||||
//Log.Out("EntityNPCRebirth-OnUpdateLive SOUND CHECK 4g");
|
||||
Manager.BroadcastPlay(this.position, myRandomSounds[index], 0f);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
bSoundRandomCheck = false;
|
||||
}
|
||||
|
||||
if (!isAnimal && bSoundCheck && this.LeaderUtils.Owner && canTalk)
|
||||
{
|
||||
//Log.Out("EntityNPCRebirth-OnUpdateLive SOUND CHECK 1");
|
||||
|
||||
bSoundCheck = false;
|
||||
|
||||
//Log.Out("EntityNPCRebirth-OnUpdateLive SOUND CHECK 2");
|
||||
bool hasFireBuff = this.Buffs.HasBuff("buffBurningFlamingArrow") ||
|
||||
this.Buffs.HasBuff("buffBurningMolotov") ||
|
||||
this.Buffs.HasBuff("buffBurningEnvironmentHack") ||
|
||||
this.Buffs.HasBuff("buffBurningEnvironment") ||
|
||||
this.Buffs.HasBuff("buffBurningElement") ||
|
||||
this.Buffs.HasBuff("buffIsOnFire") ||
|
||||
this.Buffs.HasBuff("FuriousRamsayFireZombieAoEDamage") ||
|
||||
this.Buffs.HasBuff("FuriousRamsayFireZombieAoEDamageDisplay") ||
|
||||
this.Buffs.HasBuff("FuriousRamsayAddBurningEnemyBoss") ||
|
||||
this.Buffs.HasBuff("FuriousRamsayBurningTrapDamage");
|
||||
// On Fire
|
||||
if (hasFireBuff)
|
||||
{
|
||||
List<string> myTags = this.EntityTags.GetTagNames();
|
||||
List<string> myRandomSounds = new List<string>();
|
||||
|
||||
//Log.Out("EntityNPCRebirth-OnUpdateLive SOUND CHECK 3a");
|
||||
hasBuffs = this.Buffs.HasBuff("FuriousRamsayNPCOtherAttackedSelf") ||
|
||||
this.Buffs.HasBuff("FuriousRamsayNPCOtherDamagedSelf") ||
|
||||
this.Buffs.HasBuff("FuriousRamsayNPCOnFire") ||
|
||||
this.Buffs.HasBuff("FuriousRamsayNPCRandom");
|
||||
|
||||
if (!isOnFire && myTags.Count > 0 && !hasBuffs)
|
||||
{
|
||||
//Log.Out("EntityNPCRebirth-OnUpdateLive SOUND CHECK 3b");
|
||||
foreach (string tag in myTags)
|
||||
{
|
||||
//Log.Out("EntityNPCRebirth-OnUpdateLive SOUND CHECK tag: " + tag);
|
||||
if (tag.Contains("-OF-"))
|
||||
{
|
||||
//Log.Out("EntityNPCRebirth-OnUpdateLive SOUND CHECK 3c");
|
||||
myRandomSounds.Add(tag);
|
||||
//Manager.BroadcastPlay(this.position, tag, 0f);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (myRandomSounds.Count > 0)
|
||||
{
|
||||
this.Buffs.AddBuff("FuriousRamsayNPCOnFire");
|
||||
int index = UnityEngine.Random.Range(0, myRandomSounds.Count - 1);
|
||||
|
||||
if (SingletonMonoBehaviour<ConnectionManager>.Instance.IsSinglePlayer)
|
||||
{
|
||||
if (this.LeaderUtils.Owner != null)
|
||||
{
|
||||
//Log.Out("EntityNPCRebirth-OnUpdateLive SOUND CHECK 5d");
|
||||
Manager.BroadcastPlay(this.position, myRandomSounds[index], 0f);
|
||||
}
|
||||
else
|
||||
{
|
||||
//Log.Out("EntityNPCRebirth-OnUpdateLive SOUND CHECK 5e");
|
||||
Manager.BroadcastPlay(this.position, myRandomSounds[index], 0f);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if (this.LeaderUtils.Owner != null)
|
||||
{
|
||||
//Log.Out("EntityNPCRebirth-OnUpdateLive SOUND CHECK 5f");
|
||||
Manager.BroadcastPlay(this.position, myRandomSounds[index], 0f);
|
||||
}
|
||||
else
|
||||
{
|
||||
//Log.Out("EntityNPCRebirth-OnUpdateLive SOUND CHECK 5g");
|
||||
Manager.BroadcastPlay(this.position, myRandomSounds[index], 0f);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
isOnFire = true;
|
||||
}
|
||||
else
|
||||
{
|
||||
//Log.Out("EntityNPCRebirth-OnUpdateLive SOUND CHECK 4");
|
||||
isOnFire = false;
|
||||
}
|
||||
}
|
||||
|
||||
float updateTick = 5f;
|
||||
|
||||
delta = 0;
|
||||
|
||||
//Log.Out("EntityNPCRebirth-OnUpdateLive flHidden: " + Buffs.GetCustomVar("$FR_NPC_Hidden"));
|
||||
if (Buffs.GetCustomVar("$FR_NPC_Hidden") == 1)
|
||||
{
|
||||
int dayLength = GameStats.GetInt(EnumGameStats.DayLightLength);
|
||||
|
||||
delta = HideDuration - ((int)GameManager.Instance.World.worldTime / GameStats.GetInt(EnumGameStats.TimeOfDayIncPerSec));
|
||||
if (delta < 0)
|
||||
{
|
||||
delta = 0;
|
||||
}
|
||||
}
|
||||
|
||||
/*if (delta > 0)
|
||||
{
|
||||
Log.Out("EntityNPCRebirth-OnUpdateLive delta: " + delta);
|
||||
Log.Out("EntityNPCRebirth-OnUpdateLive bRepair: " + bRepair);
|
||||
Log.Out("EntityNPCRebirth-OnUpdateLive bMine: " + bMine);
|
||||
}*/
|
||||
|
||||
if ((Time.time - updateCheck) > updateTick)
|
||||
{
|
||||
//Log.Out("EntityNPCRebirth-OnUpdateLive delta: " + delta);
|
||||
updateCheck = Time.time;
|
||||
|
||||
float flMagazineSize = this.Buffs.GetCustomVar("$Magsize");
|
||||
float flEntityLevel = this.Buffs.GetCustomVar("$FR_NPC_Level");
|
||||
|
||||
if (!isAnimal && flMagazineSize == 0)
|
||||
{
|
||||
int magazineSize = RebirthUtilities.GetNPCMagazineSize(this);
|
||||
//Log.Out("EntityNPCRebirth-OnUpdateLive INITIAL magazineSize: " + magazineSize);
|
||||
|
||||
this.Buffs.SetCustomVar("$Magsize", magazineSize);
|
||||
this.Buffs.SetCustomVar("$roundsinmag", magazineSize);
|
||||
this.Buffs.SetCustomVar("$Burstsize", magazineSize);
|
||||
this.Buffs.SetCustomVar("$burstrate", magazineSize);
|
||||
}
|
||||
|
||||
//if (flEntityLevel > 0)
|
||||
{
|
||||
float flNumKills = this.Buffs.GetCustomVar("$varNumKills");
|
||||
|
||||
//Log.Out("EntityNPCRebirth-OnUpdateLive flEntityLevel: " + flEntityLevel);
|
||||
//Log.Out("EntityNPCRebirth-OnUpdateLive flNumKills: " + flNumKills);
|
||||
|
||||
//Log.Out("EntityNPCRebirth-OnUpdateLive BEFORE $Magsize: " + this.Buffs.GetCustomVar("$Magsize"));
|
||||
//Log.Out("EntityNPCRebirth-OnUpdateLive BEFORE $roundsinmag: " + this.Buffs.GetCustomVar("$roundsinmag"));
|
||||
//Log.Out("EntityNPCRebirth-OnUpdateLive BEFORE $Burstsize: " + this.Buffs.GetCustomVar("$Burstsize"));
|
||||
//Log.Out("EntityNPCRebirth-OnUpdateLive BEFORE $burstrate: " + this.Buffs.GetCustomVar("$burstrate"));
|
||||
|
||||
bool levelHasChanged = false;
|
||||
int NPCLevel = 0;
|
||||
|
||||
float multiplier = 1.5f;
|
||||
|
||||
if (isAnimal && !isPanther)
|
||||
{
|
||||
multiplier = 1f;
|
||||
}
|
||||
|
||||
if (flNumKills >= 0 && flNumKills <= 50 * multiplier)
|
||||
{
|
||||
NPCLevel = 1;
|
||||
}
|
||||
else if (flNumKills > 50 * multiplier && flNumKills <= 150 * multiplier)
|
||||
{
|
||||
NPCLevel = 2;
|
||||
}
|
||||
else if (flNumKills > 150 * multiplier && flNumKills <= 300 * multiplier)
|
||||
{
|
||||
NPCLevel = 3;
|
||||
}
|
||||
else if (flNumKills > 300 * multiplier && flNumKills <= 500 * multiplier)
|
||||
{
|
||||
NPCLevel = 4;
|
||||
}
|
||||
else if (flNumKills > 500 * multiplier && flNumKills <= 750 * multiplier)
|
||||
{
|
||||
NPCLevel = 5;
|
||||
}
|
||||
else if (flNumKills > 750 * multiplier && flNumKills <= 1050 * multiplier)
|
||||
{
|
||||
NPCLevel = 6;
|
||||
}
|
||||
else if (flNumKills > 1050 * multiplier && flNumKills <= 1400 * multiplier)
|
||||
{
|
||||
NPCLevel = 7;
|
||||
}
|
||||
else if (flNumKills > 1400 * multiplier && flNumKills <= 1800 * multiplier)
|
||||
{
|
||||
NPCLevel = 8;
|
||||
}
|
||||
else if (flNumKills > 1800 * multiplier && flNumKills <= 2250 * multiplier)
|
||||
{
|
||||
NPCLevel = 9;
|
||||
}
|
||||
else if (flNumKills > 2250 * multiplier)
|
||||
{
|
||||
NPCLevel = 10;
|
||||
}
|
||||
|
||||
if (NPCLevel > flEntityLevel)
|
||||
{
|
||||
this.Buffs.SetCustomVar("$FR_NPC_Level", NPCLevel);
|
||||
levelHasChanged = true;
|
||||
}
|
||||
|
||||
//Log.Out("EntityNPCRebirth-OnUpdateLive levelHasChanged: " + levelHasChanged);
|
||||
|
||||
if (levelHasChanged)
|
||||
{
|
||||
int magazineSize = RebirthUtilities.GetNPCMagazineSize(this);
|
||||
//Log.Out("EntityNPCRebirth-OnUpdateLive magazineSize: " + magazineSize);
|
||||
|
||||
this.Buffs.SetCustomVar("$Magsize", magazineSize);
|
||||
this.Buffs.SetCustomVar("$Burstsize", magazineSize);
|
||||
this.Buffs.SetCustomVar("$burstrate", magazineSize);
|
||||
|
||||
//Log.Out("EntityNPCRebirth-OnUpdateLive AFTER $Magsize: " + this.Buffs.GetCustomVar("$Magsize"));
|
||||
//Log.Out("EntityNPCRebirth-OnUpdateLive AFTER $roundsinmag: " + this.Buffs.GetCustomVar("$roundsinmag"));
|
||||
//Log.Out("EntityNPCRebirth-OnUpdateLive AFTER $Burstsize: " + this.Buffs.GetCustomVar("$Burstsize"));
|
||||
//Log.Out("EntityNPCRebirth-OnUpdateLive AFTER $burstrate: " + this.Buffs.GetCustomVar("$burstrate"));
|
||||
}
|
||||
}
|
||||
|
||||
//if (!isAnimal && delta == 0)
|
||||
if (delta == 0)
|
||||
{
|
||||
//Log.Out("EntityNPCRebirth-OnUpdateLive delta == 0");
|
||||
//Log.Out("EntityNPCRebirth-OnUpdateLive transform.localScale: " + transform.localScale);
|
||||
if (bMine || bRepair)
|
||||
{
|
||||
//Log.Out("EntityNPCRebirth-OnUpdateLive bMine || bRepair");
|
||||
HideNPC(false);
|
||||
return;
|
||||
}
|
||||
else
|
||||
{
|
||||
//Log.Out("EntityNPCRebirth-OnUpdateLive transform.localScale: " + transform.localScale);
|
||||
//Log.Out("EntityNPCRebirth-OnUpdateLive CurrentOrder: " + this.Buffs.GetCustomVar("CurrentOrder"));
|
||||
//Log.Out("EntityNPCRebirth-OnUpdateLive $traveling: " + this.Buffs.GetCustomVar("$traveling"));
|
||||
if (transform.localScale == new Vector3(0, 0, 0) && this.Buffs.GetCustomVar("$traveling") == 0f)
|
||||
{
|
||||
HideNPC(false);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/*if (Buffs.GetCustomVar("$FR_NPC_Hidden") == 1)
|
||||
{
|
||||
//Log.Out("EntityNPCRebirth-OnUpdateLive flHidden == 1");
|
||||
//Log.Out("EntityNPCRebirth-OnUpdateLive enabled: " + enabled);
|
||||
//Log.Out("EntityNPCRebirth-OnUpdateLive scale: " + scale);
|
||||
|
||||
Log.Out("EntityNPCRebirth-OnUpdateLive HIDENPC 1");
|
||||
HideNPC(true);
|
||||
|
||||
if (!RebirthVariables.isHordeNight)
|
||||
{
|
||||
//float flGoneMining = this.Buffs.GetCustomVar("$FuriousRamsayGoneMining");
|
||||
//float flRepairing = this.Buffs.GetCustomVar("$FR_NPC_Repairing");
|
||||
|
||||
//Log.Out("EntityNPCRebirth-OnUpdateLive bMine: " + bMine);
|
||||
//Log.Out("EntityNPCRebirth-OnUpdateLive bRepairing: " + bRepairing);
|
||||
|
||||
if (!bMine &&
|
||||
!bRepairing &&
|
||||
delta == 0
|
||||
)
|
||||
{
|
||||
Log.Out("EntityNPCRebirth-OnUpdateLive UNHIDE NPC");
|
||||
HideNPC(false);
|
||||
}
|
||||
}
|
||||
}*/
|
||||
|
||||
if (bRepair)
|
||||
{
|
||||
//Log.Out("EntityNPCRebirth-OnUpdateLive bRepairing: " + bRepairing);
|
||||
if (!this.bRepairing)
|
||||
{
|
||||
//Log.Out("EntityNPCRebirth-OnUpdateLive !this.bRepairing");
|
||||
GameTimerTicks = GameTimer.Instance.ticks;
|
||||
bRepairing = true;
|
||||
numRepairedBlocks = 0;
|
||||
watch.Reset();
|
||||
watch.Start();
|
||||
|
||||
if (strSerialize != null)
|
||||
{
|
||||
if (strSerialize.Length > 0)
|
||||
{
|
||||
//Log.Out("EntityNPCRebirth-OnUpdateLive strSerialize.Length: " + strSerialize.Length);
|
||||
//Log.Out("EntityNPCRebirth-OnUpdateLive strSerializeTmp LOAD: " + strSerialize);
|
||||
string[] array = strSerialize.Split(new char[]
|
||||
{
|
||||
'<'
|
||||
});
|
||||
|
||||
if (array.Length > 0)
|
||||
{
|
||||
for (int i = 0; i < array.Length; i++)
|
||||
{
|
||||
string[] array2 = array[i].Split(new char[]
|
||||
{
|
||||
'|'
|
||||
});
|
||||
for (int i2 = 0; i2 < array2.Length; i2++)
|
||||
{
|
||||
strCouldNotRepair[numCouldNotRepair, i2] = array2[i2];
|
||||
//Log.Out("EntityNPCRebirth-OnUpdateLive RELOAD strCouldNotRepair[" + numCouldNotRepair + "," + i2 + "] i(" + i + "): " + strCouldNotRepair[numCouldNotRepair, i2]);
|
||||
}
|
||||
numCouldNotRepair++;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
strSerialize = "";
|
||||
|
||||
//Log.Out("EntityNPCRebirth-OnUpdateLive numCouldNotRepair: " + numCouldNotRepair);
|
||||
}
|
||||
float range = RebirthVariables.repairWidth;
|
||||
float rangeY = RebirthVariables.repairHeight;
|
||||
int blockCount = 0;
|
||||
numCouldNotRepair = 0;
|
||||
|
||||
//Log.Out("EntityNPCRebirth-OnUpdateLive strSerialize: " + strSerialize);
|
||||
|
||||
////Log.Out("EntityNPCRebirth-OnUpdateLive AccumulatedTicks: " + AccumulatedTicks);
|
||||
////Log.Out("EntityNPCRebirth-OnUpdateLive tempTickRate: " + tempTickRate);
|
||||
if (delta > 0)
|
||||
{
|
||||
if (this.LeaderUtils.Owner != null)
|
||||
{
|
||||
List<TileEntity> tileEntities = RemoteCraftingUtils.GetTileEntities(this.LeaderUtils.Owner);
|
||||
|
||||
GameTimerTicks = GameTimer.Instance.ticks;
|
||||
watch.Stop();
|
||||
//Log.Out("EntityNPCRebirth-OnUpdateLive Execution Time: " + watch.ElapsedMilliseconds + " ms");
|
||||
for (int x = -(int)range; x <= range; x++)
|
||||
{
|
||||
for (int z = -(int)range; z <= range; z++)
|
||||
{
|
||||
for (int y = (int)this.position.y - (int)rangeY; y <= (int)(this.position.y) + (int)rangeY; y++)
|
||||
{
|
||||
var blockPosition = new Vector3i(this.position.x + x, y, this.position.z + z);
|
||||
BlockValue block = this.world.GetBlock(blockPosition);
|
||||
if (!block.isair)
|
||||
{
|
||||
if (block.damage > 0 &&
|
||||
block.Block.GetBlockName() != "terrAsphalt" &&
|
||||
block.Block.GetBlockName() != "terrGravel" &&
|
||||
block.Block.GetBlockName() != "terrForestGround" &&
|
||||
block.Block.GetBlockName() != "terrDestroyedStone" &&
|
||||
block.Block.GetBlockName() != "terrSnow" &&
|
||||
block.Block.GetBlockName() != "terrDesertGround" &&
|
||||
block.Block.GetBlockName() != "terrBurntForestGround" &&
|
||||
block.Block.GetBlockName() != "terrDirt" &&
|
||||
block.Block.GetBlockName() != "terrSand" &&
|
||||
block.Block.GetBlockName() != "terrSandStone" &&
|
||||
block.Block.GetBlockName() != "terrTopSoil" &&
|
||||
block.Block.GetBlockName() != "terrDestroyedWoodDebris"
|
||||
)
|
||||
{
|
||||
//Log.Out("==============================================================================");
|
||||
//Log.Out("EntityNPCRebirth-OnUpdateLive blockCount: " + blockCount);
|
||||
//Log.Out("EntityNPCRebirth-OnUpdateLive position: " + blockPosition);
|
||||
//Log.Out("EntityNPCRebirth-OnUpdateLive block: " + block.Block.GetBlockName());
|
||||
//Log.Out("EntityNPCRebirth-OnUpdateLive damage: " + block.damage);
|
||||
|
||||
float damagePerc = (float)block.damage / (float)Block.list[block.type].MaxDamage; ;
|
||||
|
||||
//Log.Out("EntityNPCRebirth-OnUpdateLive damagePerc: " + damagePerc);
|
||||
|
||||
if (block.Block.RepairItems != null)
|
||||
{
|
||||
for (int i = 0; i < block.Block.RepairItems.Count; i++)
|
||||
{
|
||||
int needed = block.Block.RepairItems[i].Count;
|
||||
needed = (int)Mathf.Ceil(damagePerc * needed);
|
||||
|
||||
ItemValue itemValue = new ItemValue(ItemClass.GetItem(block.Block.RepairItems[i].ItemName, false).type, true);
|
||||
|
||||
bool bHaveItems = RebirthUtilities.ContainersHaveItem(tileEntities, needed, itemValue);
|
||||
|
||||
if (!bHaveItems)
|
||||
{
|
||||
//Log.Out("EntityNPCRebirth-OnUpdateLive COULD NOT FIND, POSITION: " + numCouldNotRepair);
|
||||
strCouldNotRepair[numCouldNotRepair, 0] = block.Block.RepairItems[i].ItemName;
|
||||
strCouldNotRepair[numCouldNotRepair, 1] = needed.ToString();
|
||||
|
||||
//Log.Out("EntityNPCRebirth-OnUpdateLive ITEM: " + strCouldNotRepair[numCouldNotRepair, 0]);
|
||||
//Log.Out("EntityNPCRebirth-OnUpdateLive COUNT: " + strCouldNotRepair[numCouldNotRepair, 1]);
|
||||
|
||||
numCouldNotRepair++;
|
||||
//Log.Out("EntityNPCRebirth-OnUpdateLive DON'T HAVE ENOUGH OF: " + block.Block.RepairItems[i].ItemName);
|
||||
}
|
||||
else
|
||||
{
|
||||
RebirthUtilities.RemoveContainerItems(tileEntities, needed, itemValue);
|
||||
block.damage = 0;
|
||||
Chunk chunk = (Chunk)this.world.GetChunkFromWorldPos(blockPosition);
|
||||
world.SetBlock(chunk.ClrIdx, blockPosition, block, false, false);
|
||||
world.SetBlockRPC(chunk.ClrIdx, blockPosition, block, block.Block.Density);
|
||||
//Log.Out("EntityNPCRebirth-OnUpdateLive REMOVED " + needed + " " + block.Block.RepairItems[i].ItemName);
|
||||
numRepairedBlocks++;
|
||||
}
|
||||
//Log.Out("EntityNPCRebirth-OnUpdateLive item: " + block.Block.RepairItems[i].ItemName);
|
||||
//Log.Out("EntityNPCRebirth-OnUpdateLive needed: " + needed);
|
||||
}
|
||||
}
|
||||
|
||||
blockCount++;
|
||||
if (blockCount >= 100000)
|
||||
{
|
||||
//Log.Out("EntityNPCRebirth-OnUpdateLive Break");
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
if (blockCount >= 100000)
|
||||
{
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (blockCount >= 100000)
|
||||
{
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
if (blockCount < 100000)
|
||||
{
|
||||
bRepairing = false;
|
||||
bRepair = false;
|
||||
|
||||
//Log.Out("EntityNPCRebirth-OnUpdateLive numRepairedBlocks: " + numRepairedBlocks);
|
||||
//Log.Out("EntityNPCRebirth-OnUpdateLive HideDuration END: " + HideDuration);
|
||||
|
||||
if (this.LeaderUtils.Owner)
|
||||
{
|
||||
//Log.Out("EntityNPCRebirth-OnUpdateLive HAS LEADER");
|
||||
//Log.Out("EntityNPCRebirth-OnUpdateLive LEADER HAS REPAIR BUFF");
|
||||
int numDuration = (int)numRepairedBlocks; // / 20;
|
||||
//Log.Out("EntityNPCRebirth-OnUpdateLive numDuration: " + numDuration);
|
||||
this.LeaderUtils.Owner.Buffs.SetCustomVar("$varFuriousRamsayHelpRepairBuffDisplay", numDuration);
|
||||
this.LeaderUtils.Owner.Buffs.SetCustomVar("$FR_NPC_Repair", this.entityId);
|
||||
this.LeaderUtils.Owner.Buffs.AddBuff("FuriousRamsayHelpRepairBuff");
|
||||
}
|
||||
else
|
||||
{
|
||||
//Log.Out("EntityNPCRebirth-OnUpdateLive HAS NO LEADER");
|
||||
}
|
||||
|
||||
if (numCouldNotRepair > 0)
|
||||
{
|
||||
string strSerializeTmp = "";
|
||||
|
||||
for (int numFind = 0; (numFind < numCouldNotRepair); numFind++)
|
||||
{
|
||||
if (strSerializeTmp.Length > 0)
|
||||
{
|
||||
strSerializeTmp = strSerializeTmp + "<";
|
||||
}
|
||||
strSerializeTmp = strSerializeTmp + strCouldNotRepair[numFind, 0] + "|" + strCouldNotRepair[numFind, 1];
|
||||
}
|
||||
//Log.Out("EntityNPCRebirth-OnUpdateLive strSerializeTmp A: " + strSerializeTmp);
|
||||
strSerialize = strSerializeTmp;
|
||||
|
||||
string[,] strCouldNotRepairTmp = new string[numCouldNotRepair * 2, 2];
|
||||
int numCouldNotRepairTmp = 0;
|
||||
|
||||
string[] array = strSerializeTmp.Split(new char[]
|
||||
{
|
||||
'<'
|
||||
});
|
||||
|
||||
if (array.Length > 0)
|
||||
{
|
||||
for (int i = 0; i < array.Length; i++)
|
||||
{
|
||||
string[] array2 = array[i].Split(new char[]
|
||||
{
|
||||
'|'
|
||||
});
|
||||
for (int i2 = 0; i2 < array2.Length; i2++)
|
||||
{
|
||||
//Log.Out("EntityNPCRebirth-OnUpdateLive numCouldNotRepairTmp: " + numCouldNotRepairTmp);
|
||||
//Log.Out("EntityNPCRebirth-OnUpdateLive i2: " + i2);
|
||||
//Log.Out("EntityNPCRebirth-OnUpdateLive array2[i2]: " + array2[i2]);
|
||||
|
||||
strCouldNotRepairTmp[numCouldNotRepairTmp, i2] = array2[i2];
|
||||
//Log.Out("EntityNPCRebirth-OnUpdateLive RELOAD strCouldNotRepairTmp[" + numCouldNotRepairTmp + "," + i2 + "] i(" + i + "): " + strCouldNotRepairTmp[numCouldNotRepairTmp, i2]);
|
||||
}
|
||||
numCouldNotRepairTmp++;
|
||||
}
|
||||
}
|
||||
|
||||
string[,] strCouldNotRepairTmp2 = new string[numCouldNotRepairTmp * 2, 2];
|
||||
int numCouldNotRepairTmp2 = 0;
|
||||
|
||||
for (int i = 0; i < numCouldNotRepairTmp; i++)
|
||||
{
|
||||
if (numCouldNotRepairTmp2 > 0)
|
||||
{
|
||||
bool bFound = false;
|
||||
for (int j = 0; j < numCouldNotRepairTmp2; j++)
|
||||
{
|
||||
if (strCouldNotRepairTmp2[j, 0] == strCouldNotRepairTmp[i, 0])
|
||||
{
|
||||
bFound = true;
|
||||
int numRepair = 0;
|
||||
//Log.Out("EntityNPCRebirth-OnUpdateLive FOUND");
|
||||
//Log.Out("EntityNPCRebirth-OnUpdateLive numCouldNotRepairTmp2: " + numCouldNotRepairTmp2);
|
||||
//Log.Out("EntityNPCRebirth-OnUpdateLive strCouldNotRepairTmp2[j, 0]: " + strCouldNotRepairTmp2[j, 0]);
|
||||
//Log.Out("EntityNPCRebirth-OnUpdateLive strCouldNotRepairTmp2[j, 1]: " + strCouldNotRepairTmp2[j, 1]);
|
||||
//Log.Out("EntityNPCRebirth-OnUpdateLive strCouldNotRepairTmp[i, 0]: " + strCouldNotRepairTmp[i, 0]);
|
||||
//Log.Out("EntityNPCRebirth-OnUpdateLive strCouldNotRepairTmp[i, 1]: " + strCouldNotRepairTmp[i, 1]);
|
||||
|
||||
int numRepair1 = int.Parse(strCouldNotRepairTmp2[j, 1]);
|
||||
int numRepair2 = int.Parse(strCouldNotRepairTmp[i, 1]);
|
||||
numRepair = numRepair1 + numRepair2;
|
||||
|
||||
strCouldNotRepairTmp2[j, 1] = numRepair.ToString();
|
||||
}
|
||||
}
|
||||
if (!bFound)
|
||||
{
|
||||
//Log.Out("EntityNPCRebirth-OnUpdateLive DID NOT FIND");
|
||||
strCouldNotRepairTmp2[numCouldNotRepairTmp2, 0] = strCouldNotRepairTmp[i, 0];
|
||||
strCouldNotRepairTmp2[numCouldNotRepairTmp2, 1] = strCouldNotRepairTmp[i, 1];
|
||||
//Log.Out("EntityNPCRebirth-OnUpdateLive numCouldNotRepairTmp2: " + numCouldNotRepairTmp2);
|
||||
//Log.Out("EntityNPCRebirth-OnUpdateLive strCouldNotRepairTmp2[numCouldNotRepairTmp2, 0]: " + strCouldNotRepairTmp2[numCouldNotRepairTmp2, 0]);
|
||||
//Log.Out("EntityNPCRebirth-OnUpdateLive strCouldNotRepairTmp2[numCouldNotRepairTmp2, 1]: " + strCouldNotRepairTmp2[numCouldNotRepairTmp2, 1]);
|
||||
numCouldNotRepairTmp2++;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
//Log.Out("EntityNPCRebirth-OnUpdateLive INITIAL ENTRY");
|
||||
strCouldNotRepairTmp2[numCouldNotRepairTmp2, 0] = strCouldNotRepairTmp[i, 0];
|
||||
strCouldNotRepairTmp2[numCouldNotRepairTmp2, 1] = strCouldNotRepairTmp[i, 1];
|
||||
//Log.Out("EntityNPCRebirth-OnUpdateLive numCouldNotRepairTmp2: " + numCouldNotRepairTmp2);
|
||||
//Log.Out("EntityNPCRebirth-OnUpdateLive strCouldNotRepairTmp[i, 0]: " + strCouldNotRepairTmp[i, 0]);
|
||||
//Log.Out("EntityNPCRebirth-OnUpdateLive strCouldNotRepairTmp[i, 1]: " + strCouldNotRepairTmp[i, 1]);
|
||||
|
||||
//Log.Out("EntityNPCRebirth-OnUpdateLive strCouldNotRepairTmp2[numCouldNotRepairTmp2, 0]: " + strCouldNotRepairTmp2[numCouldNotRepairTmp2, 0]);
|
||||
//Log.Out("EntityNPCRebirth-OnUpdateLive strCouldNotRepairTmp2[numCouldNotRepairTmp2, 1]: " + strCouldNotRepairTmp2[numCouldNotRepairTmp2, 1]);
|
||||
numCouldNotRepairTmp2++;
|
||||
}
|
||||
}
|
||||
|
||||
string strSerializeTmp2 = "";
|
||||
|
||||
for (int numFind = 0; (numFind < numCouldNotRepairTmp2); numFind++)
|
||||
{
|
||||
if (strSerializeTmp2.Length > 0)
|
||||
{
|
||||
strSerializeTmp2 = strSerializeTmp2 + "<";
|
||||
}
|
||||
strSerializeTmp2 = strSerializeTmp2 + strCouldNotRepairTmp2[numFind, 0] + "|" + strCouldNotRepairTmp2[numFind, 1];
|
||||
}
|
||||
//Log.Out("EntityNPCRebirth-OnUpdateLive strSerializeTmp2 A2: " + strSerializeTmp2);
|
||||
|
||||
strSerialize = strSerializeTmp2;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if (numCouldNotRepair > 0)
|
||||
{
|
||||
string strSerializeTmp = "";
|
||||
|
||||
for (int numFind = 0; (numFind < numCouldNotRepair); numFind++)
|
||||
{
|
||||
if (strSerializeTmp.Length > 0)
|
||||
{
|
||||
strSerializeTmp = strSerializeTmp + "<";
|
||||
}
|
||||
strSerializeTmp = strSerializeTmp + strCouldNotRepair[numFind, 0] + "|" + strCouldNotRepair[numFind, 1];
|
||||
}
|
||||
//Log.Out("EntityNPCRebirth-OnUpdateLive strSerializeTmp B: " + strSerializeTmp);
|
||||
strSerialize = strSerializeTmp;
|
||||
//Log.Out("EntityNPCRebirth-OnUpdateLive strSerialize: " + strSerialize);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//Log.Out("EntityNPCRebirth-OnUpdateLive this.rotation.y: " + this.rotation.y);
|
||||
|
||||
if (isNPC)
|
||||
{
|
||||
ulong elpasedTimeSurvivor = GameTimer.Instance.ticks - AccumulatedTicksSurvivor;
|
||||
|
||||
float flEntityRespawn = this.Buffs.GetCustomVar("$FR_NPC_Respawn");
|
||||
|
||||
if (elpasedTimeSurvivor >= 60UL && this.LeaderUtils.Owner != null && flEntityRespawn == 0)
|
||||
{
|
||||
//Log.Out("EntityNPCRebirth-OnUpdateLive elpasedTimeSurvivor 1");
|
||||
AccumulatedTicksSurvivor = GameTimer.Instance.ticks;
|
||||
|
||||
//Log.Out("EntityNPCRebirth-OnUpdateLive elpasedTimeSurvivor bag size: " + this.bag.SlotCount);
|
||||
|
||||
if (this.lootContainer != null)
|
||||
{
|
||||
|
||||
//Log.Out("EntityNPCRebirth-OnUpdateLive elpasedTimeSurvivor 2");
|
||||
bool hasFireBuff = this.Buffs.HasBuff("FuriousRamsayFireZombieDamage") ||
|
||||
this.Buffs.HasBuff("buffBurningFlamingArrow") ||
|
||||
this.Buffs.HasBuff("buffBurningMolotov") ||
|
||||
this.Buffs.HasBuff("buffBurningEnvironmentHack") ||
|
||||
this.Buffs.HasBuff("buffBurningEnvironment") ||
|
||||
this.Buffs.HasBuff("buffBurningElement") ||
|
||||
this.Buffs.HasBuff("buffIsOnFire") ||
|
||||
this.Buffs.HasBuff("FuriousRamsayFireZombieAoEDamage") ||
|
||||
this.Buffs.HasBuff("FuriousRamsayFireZombieAoEDamageDisplay") ||
|
||||
this.Buffs.HasBuff("FuriousRamsayAddBurningEnemyBoss") ||
|
||||
this.Buffs.HasBuff("FuriousRamsayBurningTrapDamage");
|
||||
|
||||
bool blIsEmpty = this.lootContainer.IsEmpty();
|
||||
|
||||
//FIRE
|
||||
ItemValue itemFuriousRamsayModFireResist = ItemClass.GetItem("FuriousRamsayModFireResist", false);
|
||||
bool hasFuriousRamsayModFireResist = lootContainer.HasItem(itemFuriousRamsayModFireResist);
|
||||
|
||||
//Log.Out("EntityNPCRebirth-OnUpdateLive elpasedTimeSurvivor hasFuriousRamsayModFireResist: " + hasFuriousRamsayModFireResist);
|
||||
//Log.Out("EntityNPCRebirth-OnUpdateLive elpasedTimeSurvivor hasFuriousRamsayModFireResist: " + hasFuriousRamsayModFireResist);
|
||||
|
||||
if (hasFuriousRamsayModFireResist)
|
||||
{
|
||||
//Log.Out("EntityNPCRebirth-OnUpdateLive elpasedTimeSurvivor HAS FIRE IMMUNITY");
|
||||
this.Buffs.AddBuff("FuriousRamsayResistFire");
|
||||
this.Buffs.AddBuff("FuriousRamsayAddFireBuffEffect");
|
||||
}
|
||||
else
|
||||
{
|
||||
if (this.Buffs.HasBuff("FuriousRamsayResistFire"))
|
||||
{
|
||||
//Log.Out("EntityNPCRebirth-OnUpdateLive elpasedTimeSurvivor NO LONGER HAS FIRE IMMUNITY");
|
||||
this.Buffs.RemoveBuff("FuriousRamsayResistFire");
|
||||
this.Buffs.RemoveBuff("FuriousRamsayAddFireBuffEffect");
|
||||
}
|
||||
}
|
||||
|
||||
//SHOCK
|
||||
ItemValue itemFuriousRamsayModShockResist = ItemClass.GetItem("FuriousRamsayModShockResist", false);
|
||||
bool hasFuriousRamsayModShockResist = lootContainer.HasItem(itemFuriousRamsayModShockResist);
|
||||
|
||||
if (hasFuriousRamsayModShockResist)
|
||||
{
|
||||
//Log.Out("EntityNPCRebirth-OnUpdateLive elpasedTimeSurvivor HAS SHOCK IMMUNITY");
|
||||
this.Buffs.AddBuff("FuriousRamsayResistShock");
|
||||
this.Buffs.AddBuff("FuriousRamsayAddShockBuffEffect");
|
||||
}
|
||||
else
|
||||
{
|
||||
if (this.Buffs.HasBuff("FuriousRamsayResistShock"))
|
||||
{
|
||||
//Log.Out("EntityNPCRebirth-OnUpdateLive elpasedTimeSurvivor NO LONGER HAS SHOCK IMMUNITY");
|
||||
this.Buffs.RemoveBuff("FuriousRamsayResistShock");
|
||||
this.Buffs.RemoveBuff("FuriousRamsayAddShockBuffEffect");
|
||||
}
|
||||
}
|
||||
|
||||
//EXPLOSION
|
||||
ItemValue itemFuriousRamsayModSmokeResist = ItemClass.GetItem("FuriousRamsayModSmokeResist", false);
|
||||
bool hasFuriousRamsayModSmokeResist = lootContainer.HasItem(itemFuriousRamsayModSmokeResist);
|
||||
|
||||
if (hasFuriousRamsayModSmokeResist)
|
||||
{
|
||||
//Log.Out("EntityNPCRebirth-OnUpdateLive elpasedTimeSurvivor HAS EXPLOSION IMMUNITY");
|
||||
this.Buffs.AddBuff("FuriousRamsayResistSmoke");
|
||||
this.Buffs.AddBuff("FuriousRamsayAddSmokeBuffEffect");
|
||||
}
|
||||
else
|
||||
{
|
||||
if (this.Buffs.HasBuff("FuriousRamsayResistSmoke"))
|
||||
{
|
||||
//Log.Out("EntityNPCRebirth-OnUpdateLive elpasedTimeSurvivor NO LONGER HAS EXPLOSION IMMUNITY");
|
||||
this.Buffs.RemoveBuff("FuriousRamsayResistSmoke");
|
||||
this.Buffs.RemoveBuff("FuriousRamsayAddSmokeBuffEffect");
|
||||
}
|
||||
}
|
||||
|
||||
//FIRE AND SHOCK
|
||||
ItemValue itemFuriousRamsayModResistFireShock = ItemClass.GetItem("FuriousRamsayModFireShockResist", false);
|
||||
bool hasFuriousRamsayModResistFireShock = lootContainer.HasItem(itemFuriousRamsayModResistFireShock);
|
||||
|
||||
if (hasFuriousRamsayModResistFireShock)
|
||||
{
|
||||
//Log.Out("EntityNPCRebirth-OnUpdateLive elpasedTimeSurvivor HAS FIRE/SHOCK IMMUNITY");
|
||||
this.Buffs.AddBuff("FuriousRamsayResistFireShock");
|
||||
this.Buffs.AddBuff("FuriousRamsayAddFireShockBuffEffect");
|
||||
}
|
||||
else
|
||||
{
|
||||
if (this.Buffs.HasBuff("FuriousRamsayResistFireShock"))
|
||||
{
|
||||
//Log.Out("EntityNPCRebirth-OnUpdateLive elpasedTimeSurvivor NO LONGER HAS FIRE/SHOCK IMMUNITY");
|
||||
this.Buffs.RemoveBuff("FuriousRamsayResistFireShock");
|
||||
this.Buffs.RemoveBuff("FuriousRamsayAddFireShockBuffEffect");
|
||||
}
|
||||
}
|
||||
|
||||
//FIRE, SHOCK AND EXPLOSION
|
||||
ItemValue itemFuriousRamsayModResistFireShockSmoke = ItemClass.GetItem("FuriousRamsayModFireShockSmokeResist", false);
|
||||
bool hasFuriousRamsayModResistFireShockSmoke = lootContainer.HasItem(itemFuriousRamsayModResistFireShockSmoke);
|
||||
|
||||
if (hasFuriousRamsayModResistFireShockSmoke)
|
||||
{
|
||||
//Log.Out("EntityNPCRebirth-OnUpdateLive elpasedTimeSurvivor HAS FIRE/SHOCK/EXPLOPSION IMMUNITY");
|
||||
this.Buffs.AddBuff("FuriousRamsayResistFireShockSmoke");
|
||||
this.Buffs.AddBuff("FuriousRamsayAddFireShockSmokeBuffEffect");
|
||||
}
|
||||
else
|
||||
{
|
||||
if (this.Buffs.HasBuff("FuriousRamsayResistFireShockSmoke"))
|
||||
{
|
||||
//Log.Out("EntityNPCRebirth-OnUpdateLive elpasedTimeSurvivor NO LONGER HAS FIRE/SHOCK/EXPLOPSION IMMUNITY");
|
||||
this.Buffs.RemoveBuff("FuriousRamsayResistFireShockSmoke");
|
||||
this.Buffs.RemoveBuff("FuriousRamsayAddFireShockSmokeBuffEffect");
|
||||
}
|
||||
}
|
||||
|
||||
if (bHasTags && blIsEmpty)
|
||||
{
|
||||
float flContainerY = this.Buffs.GetCustomVar("$FR_NPC_ContainerY");
|
||||
|
||||
if (flContainerY == 0)
|
||||
{
|
||||
this.Buffs.SetCustomVar("$FR_NPC_ContainerY", this.lootContainer.GetContainerSize().y);
|
||||
flContainerY = this.lootContainer.GetContainerSize().y;
|
||||
}
|
||||
|
||||
int flCurrentContainerSizeY = this.lootContainer.GetContainerSize().y;
|
||||
|
||||
float flEntityLevel = this.Buffs.GetCustomVar("$FR_NPC_Level");
|
||||
|
||||
int numAdd = (int)flContainerY + (int)flEntityLevel;
|
||||
|
||||
if (numAdd > 10)
|
||||
{
|
||||
numAdd = 10;
|
||||
}
|
||||
|
||||
if (numAdd > flCurrentContainerSizeY)
|
||||
{
|
||||
//Log.Out("EntityNPCRebirth-OnUpdateLive SET CONTAINER SIZE 8X" + numAdd);
|
||||
lootContainer.SetContainerSize(new Vector2i(8, numAdd));
|
||||
}
|
||||
}
|
||||
|
||||
if (bHasTags && !blIsEmpty)
|
||||
{
|
||||
//Log.Out("EntityNPCRebirth-OnUpdateLive elpasedTimeSurvivor 3");
|
||||
|
||||
if (hasFireBuff)
|
||||
{
|
||||
//Log.Out("EntityNPCRebirth-OnUpdateLive elpasedTimeSurvivor 4");
|
||||
ItemValue itemMurkyWater = ItemClass.GetItem("drinkJarRiverWater", false);
|
||||
bool hasMurkyWater = lootContainer.HasItem(itemMurkyWater);
|
||||
|
||||
ItemValue itemBoiledWater = ItemClass.GetItem("drinkJarBoiledWater", false);
|
||||
bool hasBoiledWater = lootContainer.HasItem(itemBoiledWater);
|
||||
|
||||
ItemValue itemDistilledWater = ItemClass.GetItem("drinkJarPureMineralWater", false);
|
||||
bool hasDistilledWater = lootContainer.HasItem(itemDistilledWater);
|
||||
|
||||
bool removeFire = false;
|
||||
|
||||
ItemStack[] array = lootContainer.GetItems();
|
||||
|
||||
if (hasMurkyWater)
|
||||
{
|
||||
//Log.Out("EntityNPCRebirth-OnUpdateLive elpasedTimeSurvivor 5");
|
||||
RebirthUtilities.takeFromEntityContainer(this, "drinkJarRiverWater");
|
||||
removeFire = true;
|
||||
}
|
||||
else if (hasBoiledWater)
|
||||
{
|
||||
//Log.Out("EntityNPCRebirth-OnUpdateLive elpasedTimeSurvivor 6");
|
||||
RebirthUtilities.takeFromEntityContainer(this, "drinkJarBoiledWater");
|
||||
removeFire = true;
|
||||
}
|
||||
else if (hasDistilledWater)
|
||||
{
|
||||
//Log.Out("EntityNPCRebirth-OnUpdateLive elpasedTimeSurvivor 6");
|
||||
RebirthUtilities.takeFromEntityContainer(this, "drinkJarPureMineralWater");
|
||||
removeFire = true;
|
||||
}
|
||||
|
||||
if (removeFire)
|
||||
{
|
||||
//Log.Out("EntityNPCRebirth-OnUpdateLive elpasedTimeSurvivor 7");
|
||||
this.Buffs.AddBuff("buffExtinguishFire");
|
||||
this.Buffs.RemoveBuff("FuriousRamsayFireZombieDamage");
|
||||
this.Buffs.RemoveBuff("buffBurningFlamingArrow");
|
||||
this.Buffs.RemoveBuff("buffBurningMolotov");
|
||||
this.Buffs.RemoveBuff("buffBurningEnvironmentHack");
|
||||
this.Buffs.RemoveBuff("buffBurningEnvironment");
|
||||
this.Buffs.RemoveBuff("buffBurningElement");
|
||||
this.Buffs.RemoveBuff("buffIsOnFire");
|
||||
this.Buffs.RemoveBuff("FuriousRamsayFireZombieAoEDamage");
|
||||
this.Buffs.RemoveBuff("FuriousRamsayFireZombieAoEDamageDisplay");
|
||||
this.Buffs.RemoveBuff("FuriousRamsayAddBurningEnemyBoss");
|
||||
this.Buffs.RemoveBuff("FuriousRamsayBurningTrapDamage");
|
||||
this.Buffs.AddBuff("FuriousRamsayTempResistFire");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (!blIsEmpty)
|
||||
{
|
||||
//NPC self healing
|
||||
int healedAmount = 0;
|
||||
int survivorMaxHealth = this.GetMaxHealth();
|
||||
int survivorHealth = this.Health;
|
||||
int survivorHealthModifier = (int)Math.Floor(this.Stats.Health.MaxModifier);
|
||||
|
||||
int missingHealth = survivorMaxHealth - survivorHealth - healedAmount + survivorHealthModifier;
|
||||
|
||||
bool bHealing = this.Buffs.HasBuff("buffHealHealth");
|
||||
float numHealing = this.Buffs.GetCustomVar("medicalRegHealthAmount");
|
||||
bool bPainKillers = this.Buffs.HasBuff("buffDrugPainkillers");
|
||||
|
||||
bool isSkeleton = this.HasAnyTags(FastTags<TagGroup.Global>.Parse("skeletonCompanion"));
|
||||
bool isZombie = this.HasAnyTags(FastTags<TagGroup.Global>.Parse("zombieCompanion"));
|
||||
|
||||
float numHealingLeft = missingHealth - numHealing;
|
||||
|
||||
if (numHealingLeft > 0 && missingHealth > 0 && !bHealing)
|
||||
{
|
||||
//Log.Out("EntityNPCRebirth-OnUpdateLive elpasedTimeSurvivor 8");
|
||||
|
||||
ItemValue itemRawMeat = ItemClass.GetItem("foodRawMeat", false);
|
||||
bool hasRawMeat = lootContainer.HasItem(itemRawMeat);
|
||||
|
||||
ItemValue itemBone = ItemClass.GetItem("resourceBone", false);
|
||||
bool hasBone = lootContainer.HasItem(itemBone);
|
||||
|
||||
ItemValue itemBrains = ItemClass.GetItem("foodRottingFlesh", false);
|
||||
bool hasBrain = lootContainer.HasItem(itemBrains);
|
||||
|
||||
ItemValue itemMedicalBandage = ItemClass.GetItem("medicalBandage", false);
|
||||
bool hasMedicalBandage = lootContainer.HasItem(itemMedicalBandage);
|
||||
|
||||
ItemValue itemMedicalFirstAidBandage = ItemClass.GetItem("medicalFirstAidBandage", false);
|
||||
bool hasMedicalFirstAidBandage = lootContainer.HasItem(itemMedicalFirstAidBandage);
|
||||
|
||||
ItemValue itemMedicalFirstAidKit = ItemClass.GetItem("medicalFirstAidKit", false);
|
||||
bool hasMedicalFirstAidKit = lootContainer.HasItem(itemMedicalFirstAidKit);
|
||||
|
||||
ItemValue itemDrugPainkillers = ItemClass.GetItem("drugPainkillers", false);
|
||||
bool hasDrugPainkillers = lootContainer.HasItem(itemDrugPainkillers);
|
||||
|
||||
//Log.Out("EntityNPCRebirth-OnUpdateLive survivorHealth: " + survivorHealth);
|
||||
//Log.Out("EntityNPCRebirth-OnUpdateLive numHealingLeft: " + numHealingLeft);
|
||||
//Log.Out("EntityNPCRebirth-OnUpdateLive missingHealth: " + missingHealth);
|
||||
//Log.Out("EntityNPCRebirth-OnUpdateLive hasMedicalBandage: " + hasMedicalBandage);
|
||||
//Log.Out("EntityNPCRebirth-OnUpdateLive hasMedicalFirstAidBandage: " + hasMedicalFirstAidBandage);
|
||||
//Log.Out("EntityNPCRebirth-OnUpdateLive hasMehasMedicalFirstAidKitdicalBandage: " + hasMedicalFirstAidKit);
|
||||
//Log.Out("EntityNPCRebirth-OnUpdateLive hasDrugPainkillers: " + hasDrugPainkillers);
|
||||
//Log.Out("EntityNPCRebirth-OnUpdateLive bPainKillers: " + bPainKillers);
|
||||
|
||||
if (isZombie)
|
||||
{
|
||||
if (numHealingLeft >= 90 && hasBrain)
|
||||
{
|
||||
this.Buffs.SetCustomVar("$medicRegHealthIncreaseSpeed", 4f);
|
||||
this.Buffs.AddBuff("FuriousRamsayRawMeatTrigger");
|
||||
RebirthUtilities.takeFromEntityContainer(this, "foodRottingFlesh");
|
||||
this.Buffs.AddBuff("FuriousRamsayBrainHealTrigger");
|
||||
this.Buffs.AddBuff("FuriousRamsayHealParticle");
|
||||
}
|
||||
}
|
||||
else if (isSkeleton)
|
||||
{
|
||||
if (numHealingLeft >= 70 && hasBone)
|
||||
{
|
||||
this.Buffs.SetCustomVar("$medicRegHealthIncreaseSpeed", 4f);
|
||||
this.Buffs.AddBuff("FuriousRamsayRawMeatTrigger");
|
||||
RebirthUtilities.takeFromEntityContainer(this, "resourceBone");
|
||||
this.Buffs.AddBuff("FuriousRamsayBoneHealTrigger");
|
||||
this.Buffs.AddBuff("FuriousRamsayHealParticle");
|
||||
}
|
||||
}
|
||||
else if (isAnimal)
|
||||
{
|
||||
if (numHealingLeft >= 140 && hasRawMeat)
|
||||
{
|
||||
this.Buffs.SetCustomVar("$medicRegHealthIncreaseSpeed", 4f);
|
||||
this.Buffs.AddBuff("FuriousRamsayRawMeatHealTrigger");
|
||||
RebirthUtilities.takeFromEntityContainer(this, "foodRawMeat");
|
||||
this.Buffs.AddBuff("FuriousRamsayTriggerHealingAnim");
|
||||
this.Buffs.AddBuff("FuriousRamsayHealParticle");
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if (numHealingLeft >= 100 && !bPainKillers && survivorHealth < 50 && hasDrugPainkillers)
|
||||
{
|
||||
//Log.Out("EntityNPCRebirth-OnUpdateLive elpasedTimeSurvivor 8a");
|
||||
this.Buffs.SetCustomVar("$buffDrugPainkillersDuration", 583);
|
||||
this.Buffs.AddBuff("FuriousRamsayDrugPainkillersTrigger");
|
||||
RebirthUtilities.takeFromEntityContainer(this, "drugPainkillers");
|
||||
this.Buffs.AddBuff("FuriousRamsayTriggerHealingAnim");
|
||||
this.Buffs.AddBuff("FuriousRamsayHealParticle");
|
||||
}
|
||||
else if (numHealingLeft >= 100 && hasMedicalFirstAidKit)
|
||||
{
|
||||
//Log.Out("EntityNPCRebirth-OnUpdateLive elpasedTimeSurvivor 8b");
|
||||
this.Buffs.SetCustomVar("$medicRegHealthIncreaseSpeed", 4f);
|
||||
this.Buffs.AddBuff("FuriousRamsayMedicalFirstAidKitTrigger");
|
||||
RebirthUtilities.takeFromEntityContainer(this, "medicalFirstAidKit");
|
||||
this.Buffs.AddBuff("FuriousRamsayTriggerHealingAnim");
|
||||
this.Buffs.AddBuff("FuriousRamsayHealParticle");
|
||||
}
|
||||
else if ((numHealingLeft >= 20 && numHealingLeft < 100) && hasMedicalFirstAidBandage)
|
||||
{
|
||||
//Log.Out("EntityNPCRebirth-OnUpdateLive elpasedTimeSurvivor 8c");
|
||||
this.Buffs.SetCustomVar("$medicRegHealthIncreaseSpeed", 4f);
|
||||
this.Buffs.AddBuff("FuriousRamsayMedicalFirstAidBandageTrigger");
|
||||
RebirthUtilities.takeFromEntityContainer(this, "medicalFirstAidBandage");
|
||||
this.Buffs.AddBuff("FuriousRamsayTriggerHealingAnim");
|
||||
this.Buffs.AddBuff("FuriousRamsayHealParticle");
|
||||
}
|
||||
else if ((numHealingLeft >= 6 && numHealingLeft < 20) && hasMedicalBandage)
|
||||
{
|
||||
//Log.Out("EntityNPCRebirth-OnUpdateLive elpasedTimeSurvivor 8d");
|
||||
this.Buffs.SetCustomVar("$medicRegHealthIncreaseSpeed", 4f);
|
||||
this.Buffs.AddBuff("FuriousRamsayMedicalBandageTrigger");
|
||||
RebirthUtilities.takeFromEntityContainer(this, "medicalBandage");
|
||||
this.Buffs.AddBuff("FuriousRamsayTriggerHealingAnim");
|
||||
this.Buffs.AddBuff("FuriousRamsayHealParticle");
|
||||
}
|
||||
else if (numHealingLeft >= 20 && hasMedicalFirstAidBandage)
|
||||
{
|
||||
//Log.Out("EntityNPCRebirth-OnUpdateLive elpasedTimeSurvivor 8e");
|
||||
this.Buffs.SetCustomVar("$medicRegHealthIncreaseSpeed", 4f);
|
||||
this.Buffs.AddBuff("FuriousRamsayMedicalFirstAidBandageTrigger");
|
||||
RebirthUtilities.takeFromEntityContainer(this, "medicalFirstAidBandage");
|
||||
this.Buffs.AddBuff("FuriousRamsayTriggerHealingAnim");
|
||||
this.Buffs.AddBuff("FuriousRamsayHealParticle");
|
||||
}
|
||||
else if (numHealingLeft >= 6 && hasMedicalBandage)
|
||||
{
|
||||
//Log.Out("EntityNPCRebirth-OnUpdateLive elpasedTimeSurvivor 8f");
|
||||
this.Buffs.SetCustomVar("$medicRegHealthIncreaseSpeed", 4f);
|
||||
this.Buffs.AddBuff("FuriousRamsayMedicalBandageTrigger");
|
||||
RebirthUtilities.takeFromEntityContainer(this, "medicalBandage");
|
||||
this.Buffs.AddBuff("FuriousRamsayTriggerHealingAnim");
|
||||
this.Buffs.AddBuff("FuriousRamsayHealParticle");
|
||||
}
|
||||
else if (numHealingLeft >= 30 && !bPainKillers && hasDrugPainkillers)
|
||||
{
|
||||
//Log.Out("EntityNPCRebirth-OnUpdateLive elpasedTimeSurvivor 8g");
|
||||
this.Buffs.SetCustomVar("$buffDrugPainkillersDuration", 583);
|
||||
this.Buffs.AddBuff("FuriousRamsayDrugPainkillersTrigger");
|
||||
RebirthUtilities.takeFromEntityContainer(this, "drugPainkillers");
|
||||
this.Buffs.AddBuff("FuriousRamsayTriggerHealingAnim");
|
||||
this.Buffs.AddBuff("FuriousRamsayHealParticle");
|
||||
}
|
||||
else if (numHealingLeft >= 50 && hasMedicalFirstAidKit)
|
||||
{
|
||||
//Log.Out("EntityNPCRebirth-OnUpdateLive elpasedTimeSurvivor 8h");
|
||||
this.Buffs.SetCustomVar("$medicRegHealthIncreaseSpeed", 4f);
|
||||
this.Buffs.AddBuff("FuriousRamsayMedicalFirstAidKitTrigger");
|
||||
RebirthUtilities.takeFromEntityContainer(this, "medicalFirstAidKit");
|
||||
this.Buffs.AddBuff("FuriousRamsayTriggerHealingAnim");
|
||||
this.Buffs.AddBuff("FuriousRamsayHealParticle");
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (flEntityRespawn > 0)
|
||||
{
|
||||
//Log.Out("EntityNPCRebirth-OnUpdateLive flEntityRespawn: " + flEntityRespawn);
|
||||
this.isHirable = false;
|
||||
}
|
||||
else
|
||||
{
|
||||
if (!this.HasAnyTags(FastTags<TagGroup.Global>.Parse("ignoreFactionChange")))
|
||||
{
|
||||
this.factionId = FactionManager.Instance.GetFactionByName("whiteriver").ID;
|
||||
}
|
||||
|
||||
this.isHirable = true;
|
||||
numReposition = 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
base.OnUpdateLive();
|
||||
|
||||
if (!isAnimal && !this.bDead)
|
||||
{
|
||||
//Log.Out("EntityNPCRebirth-OnUpdateLive strWeaponType: " + strWeaponType);
|
||||
if (bHasTags)
|
||||
{
|
||||
try
|
||||
{
|
||||
float numSupplyAmmo = this.Buffs.GetCustomVar("$varFuriousRamsaySupplyAmmo");
|
||||
|
||||
if (this.Buffs.HasCustomVar("NPCInteractedFlag") && strWeaponType != "none")
|
||||
{
|
||||
//Log.Out("EntityNPCRebirth-OnUpdateLive NPCInteractedFlag");
|
||||
ItemValue item762Ammo = ItemClass.GetItem("ammo762mmBulletBall", false);
|
||||
ItemValue item9mmAmmo = ItemClass.GetItem("ammo9mmBulletBall", false);
|
||||
ItemValue item44Ammo = ItemClass.GetItem("ammo44MagnumBulletBall", false);
|
||||
ItemValue itemShellAmmo = ItemClass.GetItem("ammoShotgunShell", false);
|
||||
|
||||
ItemValue gunNPCPistol = ItemClass.GetItem("gunNPCPistol", false);
|
||||
ItemValue gunNPCDPistol = ItemClass.GetItem("gunNPCDPistol", false);
|
||||
ItemValue gunNPCPShotgun = ItemClass.GetItem("gunNPCPShotgun", false);
|
||||
ItemValue gunNPCSMG5 = ItemClass.GetItem("gunNPCSMG5", false);
|
||||
ItemValue gunNPCSRifle = ItemClass.GetItem("gunNPCSRifle", false);
|
||||
ItemValue gunNPCTRifle = ItemClass.GetItem("gunNPCTRifle", false);
|
||||
ItemValue gunNPCM60 = ItemClass.GetItem("gunNPCM60", false);
|
||||
ItemValue gunNPCAk47 = ItemClass.GetItem("gunNPCAk47", false);
|
||||
|
||||
if (this.inventory.holdingItem.GetItemName() == "meleeNPCEmptyHand")
|
||||
{
|
||||
//Log.Out("EntityNPCRebirth-OnUpdateLive Holding meleeNPCEmptyHand, Weapon: " + strWeaponType);
|
||||
//Log.Out("EntityNPCRebirth-OnUpdateLive Holding meleeNPCEmptyHand, HasItem item762Ammo: " + this.lootContainer.HasItem(item762Ammo));
|
||||
|
||||
if (strWeaponType == "PistolUser" && (this.lootContainer.HasItem(item9mmAmmo) || numSupplyAmmo == 0))
|
||||
{
|
||||
string _strRangedWeapon = strWeaponType;
|
||||
string _strRangedWeaponItem = "gunNPCPistol";
|
||||
string _strAmmo = "ammo9mmBulletBall";
|
||||
|
||||
strAmmoType = _strAmmo;
|
||||
|
||||
ItemStack[] array = this.lootContainer.GetItems();
|
||||
this.Buffs.RemoveBuff("EmptyHandUser");
|
||||
this.Buffs.AddBuff("buffReload");
|
||||
this.Buffs.AddBuff("buffBurst");
|
||||
this.Buffs.AddBuff(_strRangedWeapon);
|
||||
|
||||
Transform transform2 = this.RootTransform.FindInChilds(_strRangedWeapon.Replace("User", ""), true);
|
||||
this.rightHandTransformName = _strRangedWeapon.Replace("User", "");
|
||||
this.emodel.SetInRightHand(transform2);
|
||||
this.emodel.avatarController.UpdateInt("EmptyHandUser", 0);
|
||||
this.emodel.avatarController.UpdateInt(_strRangedWeapon, 1);
|
||||
|
||||
ItemStack itemStack = ItemStack.FromString(_strRangedWeaponItem);
|
||||
this.inventory.SetItem(0, itemStack);
|
||||
itemStack = ItemStack.FromString(_strAmmo);
|
||||
this.inventory.SetItem(1, itemStack);
|
||||
this.inventory.ForceHoldingItemUpdate();
|
||||
}
|
||||
else if (strWeaponType == "DPistolUser" && (this.lootContainer.HasItem(item44Ammo) || numSupplyAmmo == 0))
|
||||
{
|
||||
string _strRangedWeapon = strWeaponType;
|
||||
string _strRangedWeaponItem = "gunNPCDPistol";
|
||||
string _strAmmo = "ammo44MagnumBulletBall";
|
||||
|
||||
strAmmoType = _strAmmo;
|
||||
|
||||
ItemStack[] array = this.lootContainer.GetItems();
|
||||
this.Buffs.RemoveBuff("EmptyHandUser");
|
||||
this.Buffs.AddBuff("buffReload");
|
||||
this.Buffs.AddBuff("buffBurst");
|
||||
this.Buffs.AddBuff(_strRangedWeapon);
|
||||
|
||||
Transform transform2 = this.RootTransform.FindInChilds(_strRangedWeapon.Replace("User", ""), true);
|
||||
this.rightHandTransformName = _strRangedWeapon.Replace("User", "");
|
||||
this.emodel.SetInRightHand(transform2);
|
||||
this.emodel.avatarController.UpdateInt("EmptyHandUser", 0);
|
||||
this.emodel.avatarController.UpdateInt(_strRangedWeapon, 1);
|
||||
|
||||
ItemStack itemStack = ItemStack.FromString(_strRangedWeaponItem);
|
||||
this.inventory.SetItem(0, itemStack);
|
||||
itemStack = ItemStack.FromString(_strAmmo);
|
||||
this.inventory.SetItem(1, itemStack);
|
||||
this.inventory.ForceHoldingItemUpdate();
|
||||
}
|
||||
else if (strWeaponType == "PShotgunUser" && (this.lootContainer.HasItem(itemShellAmmo) || numSupplyAmmo == 0))
|
||||
{
|
||||
string _strRangedWeapon = strWeaponType;
|
||||
string _strRangedWeaponItem = "gunNPCPShotgun";
|
||||
string _strAmmo = "ammoShotgunShell";
|
||||
|
||||
strAmmoType = _strAmmo;
|
||||
|
||||
ItemStack[] array = this.lootContainer.GetItems();
|
||||
this.Buffs.RemoveBuff("EmptyHandUser");
|
||||
this.Buffs.AddBuff("buffReload");
|
||||
this.Buffs.AddBuff("buffBurst");
|
||||
this.Buffs.AddBuff(_strRangedWeapon);
|
||||
|
||||
Transform transform2 = this.RootTransform.FindInChilds(_strRangedWeapon.Replace("User", ""), true);
|
||||
this.rightHandTransformName = _strRangedWeapon.Replace("User", "");
|
||||
this.emodel.SetInRightHand(transform2);
|
||||
this.emodel.avatarController.UpdateInt("EmptyHandUser", 0);
|
||||
this.emodel.avatarController.UpdateInt(_strRangedWeapon, 1);
|
||||
|
||||
ItemStack itemStack = ItemStack.FromString(_strRangedWeaponItem);
|
||||
this.inventory.SetItem(0, itemStack);
|
||||
itemStack = ItemStack.FromString(_strAmmo);
|
||||
this.inventory.SetItem(1, itemStack);
|
||||
this.inventory.ForceHoldingItemUpdate();
|
||||
}
|
||||
else if (strWeaponType == "SMGUser" && (this.lootContainer.HasItem(item9mmAmmo) || numSupplyAmmo == 0))
|
||||
{
|
||||
string _strRangedWeapon = strWeaponType;
|
||||
string _strRangedWeaponItem = "gunNPCSMG5";
|
||||
string _strAmmo = "ammo9mmBulletBall";
|
||||
|
||||
strAmmoType = _strAmmo;
|
||||
|
||||
ItemStack[] array = this.lootContainer.GetItems();
|
||||
this.Buffs.RemoveBuff("EmptyHandUser");
|
||||
this.Buffs.AddBuff("buffReload");
|
||||
this.Buffs.AddBuff("buffBurst");
|
||||
this.Buffs.AddBuff(_strRangedWeapon);
|
||||
|
||||
Transform transform2 = this.RootTransform.FindInChilds(_strRangedWeapon.Replace("User", ""), true);
|
||||
this.rightHandTransformName = _strRangedWeapon.Replace("User", "");
|
||||
this.emodel.SetInRightHand(transform2);
|
||||
this.emodel.avatarController.UpdateInt("EmptyHandUser", 0);
|
||||
this.emodel.avatarController.UpdateInt(_strRangedWeapon, 1);
|
||||
|
||||
ItemStack itemStack = ItemStack.FromString(_strRangedWeaponItem);
|
||||
this.inventory.SetItem(0, itemStack);
|
||||
itemStack = ItemStack.FromString(_strAmmo);
|
||||
this.inventory.SetItem(1, itemStack);
|
||||
this.inventory.ForceHoldingItemUpdate();
|
||||
}
|
||||
else if (strWeaponType == "SRifleUser" && (this.lootContainer.HasItem(item762Ammo) || numSupplyAmmo == 0))
|
||||
{
|
||||
string _strRangedWeapon = strWeaponType;
|
||||
string _strRangedWeaponItem = "gunNPCSRifle";
|
||||
string _strAmmo = "ammo762mmBulletBall";
|
||||
|
||||
strAmmoType = _strAmmo;
|
||||
|
||||
ItemStack[] array = this.lootContainer.GetItems();
|
||||
this.Buffs.RemoveBuff("EmptyHandUser");
|
||||
this.Buffs.AddBuff("buffReload");
|
||||
this.Buffs.AddBuff("buffBurst");
|
||||
this.Buffs.AddBuff(_strRangedWeapon);
|
||||
|
||||
Transform transform2 = this.RootTransform.FindInChilds(_strRangedWeapon.Replace("User", ""), true);
|
||||
this.rightHandTransformName = _strRangedWeapon.Replace("User", "");
|
||||
this.emodel.SetInRightHand(transform2);
|
||||
this.emodel.avatarController.UpdateInt("EmptyHandUser", 0);
|
||||
this.emodel.avatarController.UpdateInt(_strRangedWeapon, 1);
|
||||
|
||||
ItemStack itemStack = ItemStack.FromString(_strRangedWeaponItem);
|
||||
this.inventory.SetItem(0, itemStack);
|
||||
itemStack = ItemStack.FromString(_strAmmo);
|
||||
this.inventory.SetItem(1, itemStack);
|
||||
this.inventory.ForceHoldingItemUpdate();
|
||||
}
|
||||
else if (strWeaponType == "TRifleUser" && (this.lootContainer.HasItem(item762Ammo) || numSupplyAmmo == 0))
|
||||
{
|
||||
string _strRangedWeapon = strWeaponType;
|
||||
string _strRangedWeaponItem = "gunNPCTRifle";
|
||||
string _strAmmo = "ammo762mmBulletBall";
|
||||
|
||||
strAmmoType = _strAmmo;
|
||||
|
||||
ItemStack[] array = this.lootContainer.GetItems();
|
||||
this.Buffs.RemoveBuff("EmptyHandUser");
|
||||
this.Buffs.AddBuff("buffReload");
|
||||
this.Buffs.AddBuff("buffBurst");
|
||||
this.Buffs.AddBuff(_strRangedWeapon);
|
||||
|
||||
Transform transform2 = this.RootTransform.FindInChilds(_strRangedWeapon.Replace("User", ""), true);
|
||||
this.rightHandTransformName = _strRangedWeapon.Replace("User", "");
|
||||
this.emodel.SetInRightHand(transform2);
|
||||
this.emodel.avatarController.UpdateInt("EmptyHandUser", 0);
|
||||
this.emodel.avatarController.UpdateInt("ARUser", 1);
|
||||
|
||||
ItemStack itemStack = ItemStack.FromString(_strRangedWeaponItem);
|
||||
this.inventory.SetItem(0, itemStack);
|
||||
itemStack = ItemStack.FromString(_strAmmo);
|
||||
this.inventory.SetItem(1, itemStack);
|
||||
this.inventory.ForceHoldingItemUpdate();
|
||||
}
|
||||
else if (strWeaponType == "M60User" && (this.lootContainer.HasItem(item762Ammo) || numSupplyAmmo == 0))
|
||||
{
|
||||
string _strRangedWeapon = strWeaponType;
|
||||
string _strRangedWeaponItem = "gunNPCM60";
|
||||
string _strAmmo = "ammo762mmBulletBall";
|
||||
|
||||
strAmmoType = _strAmmo;
|
||||
|
||||
ItemStack[] array = this.lootContainer.GetItems();
|
||||
this.Buffs.RemoveBuff("EmptyHandUser");
|
||||
this.Buffs.AddBuff("buffReload");
|
||||
this.Buffs.AddBuff("buffBurst");
|
||||
this.Buffs.AddBuff(_strRangedWeapon);
|
||||
|
||||
Transform transform2 = this.RootTransform.FindInChilds(_strRangedWeapon.Replace("User", ""), true);
|
||||
this.rightHandTransformName = _strRangedWeapon.Replace("User", "");
|
||||
this.emodel.SetInRightHand(transform2);
|
||||
this.emodel.avatarController.UpdateInt("EmptyHandUser", 0);
|
||||
this.emodel.avatarController.UpdateInt(_strRangedWeapon, 1);
|
||||
|
||||
ItemStack itemStack = ItemStack.FromString(_strRangedWeaponItem);
|
||||
this.inventory.SetItem(0, itemStack);
|
||||
itemStack = ItemStack.FromString(_strAmmo);
|
||||
this.inventory.SetItem(1, itemStack);
|
||||
this.inventory.ForceHoldingItemUpdate();
|
||||
}
|
||||
else if (strWeaponType == "AK47User" && (this.lootContainer.HasItem(item762Ammo) || numSupplyAmmo == 0))
|
||||
{
|
||||
string _strRangedWeapon = strWeaponType;
|
||||
string _strRangedWeaponItem = "gunNPCAk47";
|
||||
string _strAmmo = "ammo762mmBulletBall";
|
||||
|
||||
strAmmoType = _strAmmo;
|
||||
|
||||
//Log.Out("EntityNPCRebirth-OnUpdateLive _strRangedWeapon: " + _strRangedWeapon + ", strWeaponType: " + strWeaponType + " and has ammo");
|
||||
|
||||
ItemStack[] array = this.lootContainer.GetItems();
|
||||
this.Buffs.RemoveBuff("EmptyHandUser");
|
||||
this.Buffs.AddBuff("buffReload");
|
||||
this.Buffs.AddBuff("buffBurst");
|
||||
this.Buffs.AddBuff(_strRangedWeapon);
|
||||
|
||||
Transform transform2 = this.RootTransform.FindInChilds(_strRangedWeapon.Replace("User", ""), true);
|
||||
this.rightHandTransformName = _strRangedWeapon.Replace("User", "");
|
||||
this.emodel.SetInRightHand(transform2);
|
||||
this.emodel.avatarController.UpdateInt("EmptyHandUser", 0);
|
||||
this.emodel.avatarController.UpdateInt(_strRangedWeapon, 1);
|
||||
|
||||
ItemStack itemStack = ItemStack.FromString(_strRangedWeaponItem);
|
||||
this.inventory.SetItem(0, itemStack);
|
||||
itemStack = ItemStack.FromString(_strAmmo);
|
||||
this.inventory.SetItem(1, itemStack);
|
||||
this.inventory.ForceHoldingItemUpdate();
|
||||
}
|
||||
}
|
||||
else if (this.inventory.holdingItem.GetItemName() == "gunNPCPistol" && !this.lootContainer.HasItem(item9mmAmmo) && numSupplyAmmo == 1)
|
||||
{
|
||||
if (this.Buffs.HasBuff(strWeaponType))
|
||||
{
|
||||
this.Buffs.RemoveBuff(strWeaponType);
|
||||
this.Buffs.RemoveBuff("buffReload");
|
||||
this.Buffs.RemoveBuff("buffBurst");
|
||||
this.Buffs.AddBuff("EmptyHandUser");
|
||||
}
|
||||
|
||||
Transform transform2 = this.RootTransform.FindInChilds("RightWeapon", true);
|
||||
this.rightHandTransformName = "RightWeapon";
|
||||
this.emodel.SetInRightHand(transform2);
|
||||
this.emodel.avatarController.UpdateInt(strWeaponType, 0);
|
||||
this.emodel.avatarController.UpdateInt("EmptyHandUser", 1);
|
||||
|
||||
ItemStack itemStack = ItemStack.FromString("meleeNPCEmptyHand");
|
||||
this.inventory.SetItem(0, itemStack);
|
||||
itemStack = ItemStack.FromString("ammo9mmBulletBall");
|
||||
this.inventory.SetItem(1, itemStack);
|
||||
this.inventory.ForceHoldingItemUpdate();
|
||||
}
|
||||
else if (this.inventory.holdingItem.GetItemName() == "gunNPCDPistol" && !this.lootContainer.HasItem(item44Ammo) && numSupplyAmmo == 1)
|
||||
{
|
||||
if (this.Buffs.HasBuff(strWeaponType))
|
||||
{
|
||||
this.Buffs.RemoveBuff(strWeaponType);
|
||||
this.Buffs.RemoveBuff("buffReload");
|
||||
this.Buffs.RemoveBuff("buffBurst");
|
||||
this.Buffs.AddBuff("EmptyHandUser");
|
||||
}
|
||||
|
||||
Transform transform2 = this.RootTransform.FindInChilds("RightWeapon", true);
|
||||
this.rightHandTransformName = "RightWeapon";
|
||||
this.emodel.SetInRightHand(transform2);
|
||||
this.emodel.avatarController.UpdateInt(strWeaponType, 0);
|
||||
this.emodel.avatarController.UpdateInt("EmptyHandUser", 1);
|
||||
|
||||
ItemStack itemStack = ItemStack.FromString("meleeNPCEmptyHand");
|
||||
this.inventory.SetItem(0, itemStack);
|
||||
itemStack = ItemStack.FromString("ammo44MagnumBulletBall");
|
||||
this.inventory.SetItem(1, itemStack);
|
||||
this.inventory.ForceHoldingItemUpdate();
|
||||
}
|
||||
else if (this.inventory.holdingItem.GetItemName() == "gunNPCPShotgun" && !this.lootContainer.HasItem(itemShellAmmo) && numSupplyAmmo == 1)
|
||||
{
|
||||
if (this.Buffs.HasBuff(strWeaponType))
|
||||
{
|
||||
this.Buffs.RemoveBuff(strWeaponType);
|
||||
this.Buffs.RemoveBuff("buffReload");
|
||||
this.Buffs.RemoveBuff("buffBurst");
|
||||
this.Buffs.AddBuff("EmptyHandUser");
|
||||
}
|
||||
|
||||
Transform transform2 = this.RootTransform.FindInChilds("RightWeapon", true);
|
||||
this.rightHandTransformName = "RightWeapon";
|
||||
this.emodel.SetInRightHand(transform2);
|
||||
this.emodel.avatarController.UpdateInt(strWeaponType, 0);
|
||||
this.emodel.avatarController.UpdateInt("EmptyHandUser", 1);
|
||||
|
||||
ItemStack itemStack = ItemStack.FromString("meleeNPCEmptyHand");
|
||||
this.inventory.SetItem(0, itemStack);
|
||||
itemStack = ItemStack.FromString("ammoShotgunShell");
|
||||
this.inventory.SetItem(1, itemStack);
|
||||
this.inventory.ForceHoldingItemUpdate();
|
||||
}
|
||||
else if (this.inventory.holdingItem.GetItemName() == "gunNPCSMG5" && !this.lootContainer.HasItem(item9mmAmmo) && numSupplyAmmo == 1)
|
||||
{
|
||||
if (this.Buffs.HasBuff(strWeaponType))
|
||||
{
|
||||
this.Buffs.RemoveBuff(strWeaponType);
|
||||
this.Buffs.RemoveBuff("buffReload");
|
||||
this.Buffs.RemoveBuff("buffBurst");
|
||||
this.Buffs.AddBuff("EmptyHandUser");
|
||||
}
|
||||
|
||||
Transform transform2 = this.RootTransform.FindInChilds("RightWeapon", true);
|
||||
this.rightHandTransformName = "RightWeapon";
|
||||
this.emodel.SetInRightHand(transform2);
|
||||
this.emodel.avatarController.UpdateInt(strWeaponType, 0);
|
||||
this.emodel.avatarController.UpdateInt("EmptyHandUser", 1);
|
||||
|
||||
ItemStack itemStack = ItemStack.FromString("meleeNPCEmptyHand");
|
||||
this.inventory.SetItem(0, itemStack);
|
||||
itemStack = ItemStack.FromString("ammo9mmBulletBall");
|
||||
this.inventory.SetItem(1, itemStack);
|
||||
this.inventory.ForceHoldingItemUpdate();
|
||||
}
|
||||
else if (this.inventory.holdingItem.GetItemName() == "gunNPCSRifle" && !this.lootContainer.HasItem(item762Ammo) && numSupplyAmmo == 1)
|
||||
{
|
||||
if (this.Buffs.HasBuff(strWeaponType))
|
||||
{
|
||||
this.Buffs.RemoveBuff(strWeaponType);
|
||||
this.Buffs.RemoveBuff("buffReload");
|
||||
this.Buffs.RemoveBuff("buffBurst");
|
||||
this.Buffs.AddBuff("EmptyHandUser");
|
||||
}
|
||||
|
||||
Transform transform2 = this.RootTransform.FindInChilds("RightWeapon", true);
|
||||
this.rightHandTransformName = "RightWeapon";
|
||||
this.emodel.SetInRightHand(transform2);
|
||||
this.emodel.avatarController.UpdateInt(strWeaponType, 0);
|
||||
this.emodel.avatarController.UpdateInt("EmptyHandUser", 1);
|
||||
|
||||
ItemStack itemStack = ItemStack.FromString("meleeNPCEmptyHand");
|
||||
this.inventory.SetItem(0, itemStack);
|
||||
itemStack = ItemStack.FromString("ammo762mmBulletBall");
|
||||
this.inventory.SetItem(1, itemStack);
|
||||
this.inventory.ForceHoldingItemUpdate();
|
||||
}
|
||||
else if (this.inventory.holdingItem.GetItemName() == "gunNPCTRifle" && !this.lootContainer.HasItem(item762Ammo) && numSupplyAmmo == 1)
|
||||
{
|
||||
if (this.Buffs.HasBuff(strWeaponType))
|
||||
{
|
||||
this.Buffs.RemoveBuff(strWeaponType);
|
||||
this.Buffs.RemoveBuff("buffReload");
|
||||
this.Buffs.RemoveBuff("buffBurst");
|
||||
this.Buffs.AddBuff("EmptyHandUser");
|
||||
}
|
||||
|
||||
Transform transform2 = this.RootTransform.FindInChilds("RightWeapon", true);
|
||||
this.rightHandTransformName = "RightWeapon";
|
||||
this.emodel.SetInRightHand(transform2);
|
||||
this.emodel.avatarController.UpdateInt("ARUser", 0);
|
||||
this.emodel.avatarController.UpdateInt("EmptyHandUser", 1);
|
||||
|
||||
ItemStack itemStack = ItemStack.FromString("meleeNPCEmptyHand");
|
||||
this.inventory.SetItem(0, itemStack);
|
||||
itemStack = ItemStack.FromString("ammo762mmBulletBall");
|
||||
this.inventory.SetItem(1, itemStack);
|
||||
this.inventory.ForceHoldingItemUpdate();
|
||||
}
|
||||
else if (this.inventory.holdingItem.GetItemName() == "gunNPCM60" && !this.lootContainer.HasItem(item762Ammo) && numSupplyAmmo == 1)
|
||||
{
|
||||
if (this.Buffs.HasBuff(strWeaponType))
|
||||
{
|
||||
this.Buffs.RemoveBuff(strWeaponType);
|
||||
this.Buffs.RemoveBuff("buffReload");
|
||||
this.Buffs.RemoveBuff("buffBurst");
|
||||
this.Buffs.AddBuff("EmptyHandUser");
|
||||
}
|
||||
|
||||
Transform transform2 = this.RootTransform.FindInChilds("RightWeapon", true);
|
||||
this.rightHandTransformName = "RightWeapon";
|
||||
this.emodel.SetInRightHand(transform2);
|
||||
this.emodel.avatarController.UpdateInt(strWeaponType, 0);
|
||||
this.emodel.avatarController.UpdateInt("EmptyHandUser", 1);
|
||||
|
||||
ItemStack itemStack = ItemStack.FromString("meleeNPCEmptyHand");
|
||||
this.inventory.SetItem(0, itemStack);
|
||||
itemStack = ItemStack.FromString("ammo762mmBulletBall");
|
||||
this.inventory.SetItem(1, itemStack);
|
||||
this.inventory.ForceHoldingItemUpdate();
|
||||
}
|
||||
else if (this.inventory.holdingItem.GetItemName() == "gunNPCAk47" && !this.lootContainer.HasItem(item762Ammo) && numSupplyAmmo == 1)
|
||||
{
|
||||
//Log.Out("EntityNPCRebirth-OnUpdateLive Holding gunNPCAk47 no ammo");
|
||||
if (this.Buffs.HasBuff(strWeaponType))
|
||||
{
|
||||
//Log.Out("EntityNPCRebirth-OnUpdateLive have buff: " + strWeaponType);
|
||||
this.Buffs.RemoveBuff(strWeaponType);
|
||||
this.Buffs.RemoveBuff("buffReload");
|
||||
this.Buffs.RemoveBuff("buffBurst");
|
||||
this.Buffs.AddBuff("EmptyHandUser");
|
||||
}
|
||||
|
||||
//Log.Out("EntityNPCRebirth-OnUpdateLive _strRangedWeapon: meleeNPCEmptyHand, strWeaponType: " + strWeaponType + " and has no ammo");
|
||||
|
||||
Transform transform2 = this.RootTransform.FindInChilds("RightWeapon", true);
|
||||
this.rightHandTransformName = "RightWeapon";
|
||||
this.emodel.SetInRightHand(transform2);
|
||||
this.emodel.avatarController.UpdateInt(strWeaponType, 0);
|
||||
this.emodel.avatarController.UpdateInt("EmptyHandUser", 1);
|
||||
|
||||
ItemStack itemStack = ItemStack.FromString("meleeNPCEmptyHand");
|
||||
this.inventory.SetItem(0, itemStack);
|
||||
itemStack = ItemStack.FromString("ammo762mmBulletBall");
|
||||
this.inventory.SetItem(1, itemStack);
|
||||
this.inventory.ForceHoldingItemUpdate();
|
||||
}
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public override void Read(byte _version, BinaryReader _br)
|
||||
{
|
||||
base.Read(_version, _br);
|
||||
int npcHealth = _br.ReadInt32();
|
||||
//Log.Out("EntityNPCRebirth-Read HEALTH: " + npcHealth);
|
||||
Health = npcHealth;
|
||||
|
||||
this.Buffs.AddBuff("delayPickup");
|
||||
|
||||
if (this.Buffs.GetCustomVar("$updateStats") == 1f)
|
||||
{
|
||||
this.Buffs.SetCustomVar("$tempHealth", npcHealth);
|
||||
GameManager.Instance.StartCoroutine(RebirthUtilities.adjustNPCStats(this));
|
||||
}
|
||||
|
||||
this.Buffs.SetCustomVar("$updateStats", 1f);
|
||||
|
||||
try
|
||||
{
|
||||
HideDuration = _br.ReadInt32();
|
||||
}
|
||||
catch
|
||||
{
|
||||
HideDuration = 0;
|
||||
}
|
||||
|
||||
//Log.Out("EntityNPCRebirth-Read HideDuration: " + HideDuration);
|
||||
try
|
||||
{
|
||||
bMine = _br.ReadBoolean();
|
||||
}
|
||||
catch
|
||||
{
|
||||
bMine = false;
|
||||
}
|
||||
try
|
||||
{
|
||||
bRepair = _br.ReadBoolean();
|
||||
}
|
||||
catch
|
||||
{
|
||||
bRepair = false;
|
||||
}
|
||||
try
|
||||
{
|
||||
this.strSerialize = _br.ReadString();
|
||||
}
|
||||
catch
|
||||
{
|
||||
this.strSerialize = "";
|
||||
}
|
||||
try
|
||||
{
|
||||
this.lootDropEntityClass = _br.ReadString();
|
||||
}
|
||||
catch
|
||||
{
|
||||
this.lootDropEntityClass = "";
|
||||
}
|
||||
//Log.Out("EntityNPCRebirth-Write AFTER currentOrder: " + this.currentOrder);
|
||||
try
|
||||
{
|
||||
this.otherTags = _br.ReadString();
|
||||
}
|
||||
catch
|
||||
{
|
||||
this.otherTags = "";
|
||||
}
|
||||
}
|
||||
|
||||
// Saves the buff and quest information
|
||||
public override void Write(BinaryWriter _bw, bool _bNetworkWrite)
|
||||
{
|
||||
//Log.Out("StackTrace: '{0}'", Environment.StackTrace);
|
||||
base.Write(_bw, _bNetworkWrite);
|
||||
|
||||
//Log.Out("EntityNPCRebirth-Write HEALTH: " + Health);
|
||||
_bw.Write(Health);
|
||||
|
||||
//Log.Out("EntityNPCRebirth-Write HideDuration: " + (GameManager.Instance.World.worldTime / 20) + delta);
|
||||
_bw.Write((int)((GameManager.Instance.World.worldTime / 20) + delta));
|
||||
_bw.Write(this.bMine);
|
||||
_bw.Write(this.bRepair);
|
||||
_bw.Write(this.strSerialize);
|
||||
_bw.Write(lootDropEntityClass);
|
||||
_bw.Write(otherTags);
|
||||
}
|
||||
|
||||
public override string EntityName
|
||||
{
|
||||
get
|
||||
{
|
||||
if (_strMyName.Contains("REBIRTHREBIRTH"))
|
||||
{
|
||||
return _strMyName.Replace("REBIRTHREBIRTH", "");
|
||||
}
|
||||
else
|
||||
{
|
||||
string name = Localization.Get(_strMyName);
|
||||
|
||||
return name;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public override void TeleportToPlayer(EntityAlive target, bool randomPosition = false)
|
||||
{
|
||||
//Log.Out("EntityNPCRebirth-TeleportToPlayer START: " + this.EntityClass.entityClassName);
|
||||
if (target == null)
|
||||
{
|
||||
//Log.Out("EntityNPCRebirth-TeleportToPlayer 1");
|
||||
return;
|
||||
}
|
||||
|
||||
if (target.IsInElevator())
|
||||
{
|
||||
//Log.Out("EntityNPCRebirth-TeleportToPlayer target.IsInElevator(): " + target.IsInElevator());
|
||||
return;
|
||||
}
|
||||
|
||||
if (this.Buffs.GetCustomVar("CurrentOrder") == (int)EntityUtilities.Orders.Stay ||
|
||||
this.Buffs.GetCustomVar("CurrentOrder") == (int)EntityUtilities.Orders.TempStay)
|
||||
{
|
||||
//Log.Out("EntityNPCRebirth-TeleportToPlayer 2");
|
||||
return;
|
||||
}
|
||||
|
||||
if (!(this.HasAnyTags(FastTags<TagGroup.Global>.Parse("survivor")) || this.HasAnyTags(FastTags<TagGroup.Global>.Parse("ally"))))
|
||||
{
|
||||
//Log.Out("EntityNPCRebirth-TeleportToPlayer 3a");
|
||||
return;
|
||||
}
|
||||
|
||||
var target2i = new Vector2(target.position.x, target.position.z);
|
||||
var mine2i = new Vector2(position.x, position.z);
|
||||
var distance = Vector2.Distance(target2i, mine2i);
|
||||
|
||||
//Log.Out("EntityNPCRebirth-TeleportToPlayer distance: " + distance);
|
||||
//Log.Out("EntityNPCRebirth-TeleportToPlayer Math.Abs(target.position.y - this.position.y): " + Math.Abs(target.position.y - this.position.y));
|
||||
|
||||
if (LeaderUtils.IsTeleporting)
|
||||
{
|
||||
//Log.Out("EntityNPCRebirth-TeleportToPlayer 5");
|
||||
return;
|
||||
}
|
||||
|
||||
var myPosition = target.position - target.GetForwardVector();
|
||||
var player = target as EntityPlayer;
|
||||
if (player != null)
|
||||
{
|
||||
//Log.Out("EntityNPCRebirth-TeleportToPlayer 6, player: " + player.position);
|
||||
//Log.Out("EntityNPCRebirth-TeleportToPlayer 6, myPosition: " + myPosition);
|
||||
|
||||
// If my target distance is still way off from the player, teleport randomly. That means the bread crumb isn't accurate
|
||||
var distance2 = Vector3.Distance(myPosition, player.position);
|
||||
|
||||
//Log.Out("EntityNPCRebirth-TeleportToPlayer 7, distance2: " + distance2);
|
||||
|
||||
if (distance2 > 40f)
|
||||
{
|
||||
//Log.Out("EntityNPCRebirth-TeleportToPlayer 7");
|
||||
randomPosition = true;
|
||||
}
|
||||
|
||||
if (randomPosition)
|
||||
{
|
||||
//Log.Out("EntityNPCRebirth-TeleportToPlayer 8");
|
||||
Vector3 dirV = target.position - this.position;
|
||||
myPosition = RandomPositionGenerator.CalcPositionInDirection(target, target.position, dirV, 5, 80f);
|
||||
}
|
||||
// Find the ground.
|
||||
|
||||
//Log.Out("EntityNPCRebirth-TeleportToPlayer A player X: " + player.position.x);
|
||||
//Log.Out("EntityNPCRebirth-TeleportToPlayer A player Y: " + player.position.y);
|
||||
//Log.Out("EntityNPCRebirth-TeleportToPlayer A player Z: " + player.position.z);
|
||||
//Log.Out("EntityNPCRebirth-TeleportToPlayer A NPC X: " + this.position.x);
|
||||
//Log.Out("EntityNPCRebirth-TeleportToPlayer A NPC Y: " + this.position.y);
|
||||
//Log.Out("EntityNPCRebirth-TeleportToPlayer A NPC Z: " + this.position.z);
|
||||
//Log.Out("EntityNPCRebirth-TeleportToPlayer A myPosition X: " + myPosition.x);
|
||||
//Log.Out("EntityNPCRebirth-TeleportToPlayer A myPosition Y: " + myPosition.y);
|
||||
//Log.Out("EntityNPCRebirth-TeleportToPlayer A myPosition Z: " + myPosition.z);
|
||||
//Log.Out("EntityNPCRebirth-TeleportToPlayer A player ground: " + GameManager.Instance.World.GetHeightAt(player.position.x, player.position.z));
|
||||
//Log.Out("EntityNPCRebirth-TeleportToPlayer A NPC ground: " + GameManager.Instance.World.GetHeightAt(target.position.x, target.position.z));
|
||||
|
||||
float positionY = player.position.y + 1f;
|
||||
if (player.position.y > this.position.y)
|
||||
{
|
||||
//Log.Out("EntityNPCRebirth-TeleportToPlayer A1");
|
||||
//myPosition = player.position;
|
||||
myPosition.y = positionY;
|
||||
}
|
||||
else
|
||||
{
|
||||
//Log.Out("EntityNPCRebirth-TeleportToPlayer A2");
|
||||
if (GameManager.Instance.World.GetHeightAt(myPosition.x, myPosition.z) <= player.position.y)
|
||||
{
|
||||
}
|
||||
else
|
||||
{
|
||||
positionY = GameManager.Instance.World.GetHeightAt(myPosition.x, myPosition.z) + 1f;
|
||||
}
|
||||
}
|
||||
|
||||
myPosition.y = positionY;//(int)GameManager.Instance.World.GetHeightAt(myPosition.x, myPosition.z) + 1;
|
||||
|
||||
if (this.Buffs.GetCustomVar("$FR_NPC_ForceTeleport") == 1f)
|
||||
{
|
||||
//Log.Out("EntityNPCRebirth-TeleportToPlayer C");
|
||||
myPosition = player.position;
|
||||
myPosition.y = myPosition.y + 1f;
|
||||
this.Buffs.SetCustomVar("$FR_NPC_ForceTeleport", 0f);
|
||||
}
|
||||
}
|
||||
|
||||
motion = Vector3.zero;
|
||||
navigator?.clearPath();
|
||||
moveHelper?.Stop();
|
||||
speedForward = 0;
|
||||
speedStrafe = 0;
|
||||
|
||||
RebirthUtilities.toggleCollisions(false, this);
|
||||
|
||||
//motion = Vector3.zero;
|
||||
//navigator?.clearPath();
|
||||
|
||||
//Log.Out("EntityNPCRebirth-TeleportToPlayer myPosition: " + myPosition);
|
||||
|
||||
//Log.Out("EntityNPCRebirth-TeleportToPlayer REPOSITION");
|
||||
this.SetPosition(myPosition, true);
|
||||
}
|
||||
|
||||
public override void ProcessDamageResponseLocal(DamageResponse _dmResponse)
|
||||
{
|
||||
if (this.Buffs.GetCustomVar("$eventSpawn") == 1f && _dmResponse.Source.getEntityId() != -1)
|
||||
{
|
||||
Entity sourceEntity = this.world.GetEntity(_dmResponse.Source.getEntityId());
|
||||
|
||||
if (sourceEntity != null)
|
||||
{
|
||||
this.SetAttackTarget((EntityAlive)sourceEntity, 60);
|
||||
this.SetRevengeTarget((EntityAlive)sourceEntity);
|
||||
}
|
||||
}
|
||||
|
||||
//Log.Out("EntityNPCRebirth-ProcessDamageResponseLocal HAS OWNER A: " + (this.LeaderUtils.Owner != null));
|
||||
|
||||
//Log.Out("EntityNPCRebirth-ProcessDamageResponseLocal name: " + this.EntityClass.entityClassName);
|
||||
bool blEntityClass = false;
|
||||
|
||||
float flEntityInvincible = this.Buffs.GetCustomVar("$FR_NPC_Invincible");
|
||||
|
||||
if (flEntityInvincible == 1)
|
||||
{
|
||||
//Log.Out("EntityNPCRebirth-ProcessDamageResponseLocal 1");
|
||||
return;
|
||||
}
|
||||
|
||||
if (!isEntityRemote)
|
||||
{
|
||||
emodel.avatarController.UpdateBool("IsBusy", false);
|
||||
}
|
||||
|
||||
float flLeader = this.Buffs.GetCustomVar("$Leader");
|
||||
|
||||
if (this.LeaderUtils.Owner == null && flLeader > 0)
|
||||
{
|
||||
EntityPlayer entityPlayer = (EntityPlayer)this.world.GetEntity((int)flLeader);
|
||||
if (entityPlayer != null)
|
||||
{
|
||||
this.LeaderUtils.Owner = entityPlayer;
|
||||
}
|
||||
}
|
||||
|
||||
bool cannotRespawn = true;
|
||||
bool respawnAtBedroll = false;
|
||||
|
||||
if (flLeader > 0)
|
||||
{
|
||||
if (this.EntityTags.Test_AllSet(FastTags<TagGroup.Global>.Parse("npc")) &&
|
||||
!this.EntityTags.Test_AllSet(FastTags<TagGroup.Global>.Parse("temp")) /*&&
|
||||
!this.EntityTags.Test_AllSet(FastTags<TagGroup.Global>.Parse("allyanimal"))*/
|
||||
)
|
||||
{
|
||||
//Log.Out("EntityNPCRebirth-ProcessDamageResponseLocal 2");
|
||||
blEntityClass = true;
|
||||
cannotRespawn = false;
|
||||
}
|
||||
}
|
||||
|
||||
if (this.Buffs.HasBuff("FuriousRamsayTemp"))
|
||||
{
|
||||
//Log.Out("EntityNPCRebirth-ProcessDamageResponseLocal 2a1");
|
||||
cannotRespawn = true;
|
||||
blEntityClass = false;
|
||||
}
|
||||
|
||||
if ((this.EntityTags.Test_AllSet(FastTags<TagGroup.Global>.Parse("bedrollSpawn")))
|
||||
)
|
||||
{
|
||||
//Log.Out("EntityNPCRebirth-ProcessDamageResponseLocal 2a2");
|
||||
respawnAtBedroll = true;
|
||||
}
|
||||
|
||||
float flEntityRespawn = this.Buffs.GetCustomVar("$FR_NPC_Respawn");
|
||||
|
||||
//Log.Out("EntityNPCRebirth-ProcessDamageResponseLocal flEntityRespawn: " + flEntityRespawn);
|
||||
|
||||
Vector3 respawnPosition = new Vector3(0, 0, 0);
|
||||
Vector3 respawnRotation = new Vector3(0, 0, 0);
|
||||
|
||||
if (flEntityRespawn == 0)
|
||||
{
|
||||
//Log.Out("EntityNPCRebirth-ProcessDamageResponseLocal flEntityRespawn IS 0");
|
||||
bool letDie = false;
|
||||
|
||||
if (cannotRespawn)
|
||||
{
|
||||
//Log.Out("EntityNPCRebirth-ProcessDamageResponseLocal Let Die");
|
||||
letDie = true;
|
||||
}
|
||||
|
||||
if (blEntityClass || respawnAtBedroll)
|
||||
{
|
||||
//Log.Out("EntityNPCRebirth-ProcessDamageResponseLocal 2a2");
|
||||
|
||||
if (!this.EntityTags.Test_AnySet(FastTags<TagGroup.Global>.Parse("allyanimal,zombieCompanion,skeletonCompanion")))
|
||||
{
|
||||
foreach (hireInfo hire in playerHires)
|
||||
{
|
||||
if (hire.hireID == this.entityId && hire.reSpawnPosition != new Vector3(0, 0, 0))
|
||||
{
|
||||
respawnPosition = hire.reSpawnPosition;
|
||||
respawnRotation = hire.reSpawnRotation;
|
||||
//Log.Out("EntityNPCRebirth-ProcessDamageResponseLocal respawnPosition: " + respawnPosition + "[" + this.EntityName + "]");
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (respawnPosition == new Vector3(0, 0, 0))
|
||||
{
|
||||
//Log.Out("EntityNPCRebirth-ProcessDamageResponseLocal 2c");
|
||||
|
||||
if (this.LeaderUtils.Owner)
|
||||
{
|
||||
if (this.LeaderUtils.Owner.IsSpawned())
|
||||
{
|
||||
EntityPlayer entityPlayer = this.world.GetEntity(this.LeaderUtils.Owner.entityId) as EntityPlayer;
|
||||
|
||||
if (entityPlayer != null)
|
||||
{
|
||||
//Log.Out("EntityNPCRebirth-ProcessDamageResponseLocal 2c-1");
|
||||
|
||||
SpawnPosition spawnPoint = RebirthUtilities.GetSpawnPoint(entityPlayer);
|
||||
|
||||
if (spawnPoint.IsUndef())
|
||||
{
|
||||
//Log.Out("EntityNPCRebirth-ProcessDamageResponseLocal 2c-2");
|
||||
respawnPosition = this.position; // Vector3.zero;
|
||||
respawnRotation.y = this.rotation.y;
|
||||
//letDie = true;
|
||||
/*if (this.IsDead() && this.Buffs.GetCustomVar("$died") == 0f && this.EntityClass.Properties.Values.ContainsKey("SpawnBlock"))
|
||||
{
|
||||
this.Buffs.SetCustomVar("$died", 1f);
|
||||
|
||||
//Log.Out("DialogActionNPCActionRebirth-PerformAction 7c");
|
||||
string itemName = "FuriousRamsaySpawnCube" + this.EntityClass.Properties.Values["SpawnBlock"];
|
||||
|
||||
//Log.Out("DialogActionNPCActionRebirth-PerformAction 7d, itemName: " + itemName);
|
||||
|
||||
var item = ItemClass.GetItem(itemName);
|
||||
if (item != null)
|
||||
{
|
||||
//Log.Out("DialogActionNPCActionRebirth-PerformAction 7e");
|
||||
var itemStack = new ItemStack(item, 1);
|
||||
|
||||
if (!entityPlayer.inventory.AddItem(itemStack))
|
||||
{
|
||||
entityPlayer.bag.AddItem(itemStack);
|
||||
}
|
||||
}
|
||||
}*/
|
||||
}
|
||||
else
|
||||
{
|
||||
//Log.Out("EntityNPCRebirth-ProcessDamageResponseLocal 2c-3, respawnPosition: " + respawnPosition);
|
||||
respawnPosition = spawnPoint.position;
|
||||
respawnRotation.y = this.rotation.y;
|
||||
//RebirthManager.UpdateHireInfo(this.entityId, "reSpawnPosition", "", respawnPosition.ToString(), new Vector3(0, this.rotation.y, 0).ToString());
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
//Log.Out("EntityNPCRebirth-ProcessDamageResponseLocal 2c-4");
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
//Log.Out("EntityNPCRebirth-ProcessDamageResponseLocal 2c-5");
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
//Log.Out("EntityNPCRebirth-ProcessDamageResponseLocal 2c-6");
|
||||
respawnPosition = this.position;
|
||||
respawnRotation.y = this.rotation.y;
|
||||
letDie = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (((this.Health - _dmResponse.Strength) <= 0) && blEntityClass && !cannotRespawn)
|
||||
{
|
||||
if (letDie == true)
|
||||
{
|
||||
//Log.Out("EntityNPCRebirth-ProcessDamageResponseLocal 3a");
|
||||
|
||||
if (!HasAnyTags(FastTags<TagGroup.Global>.Parse("bedrollSpawn")))
|
||||
{
|
||||
//Log.Out("EntityNPCRebirth-ProcessDamageResponseLocal 3b");
|
||||
RebirthManager.RemoveHire(this.entityId);
|
||||
}
|
||||
base.ProcessDamageResponseLocal(_dmResponse);
|
||||
return;
|
||||
}
|
||||
|
||||
//Log.Out("EntityNPCRebirth-ProcessDamageResponseLocal 3");
|
||||
|
||||
//Log.Out("EntityNPCRebirth-ProcessDamageResponseLocal DIED");
|
||||
this.Buffs.SetCustomVar("$FR_NPC_Respawn", 1);
|
||||
this.Buffs.SetCustomVar("$FR_NPC_RespawnCommandActivation", 1);
|
||||
//this.Buffs.SetCustomVar("$FR_NPC_RespawnNav", 1);
|
||||
|
||||
this.factionId = FactionManager.Instance.GetFactionByName("trader").ID;
|
||||
|
||||
this.guardPosition = Vector3.zero;
|
||||
|
||||
//Log.Out("EntityNPCRebirth-ProcessDamageResponseLocal SET TO STAY");
|
||||
this.Buffs.SetCustomVar("CurrentOrder", (int)EntityUtilities.Orders.Stay);
|
||||
this.Buffs.AddBuff("FuriousRamsayRespawned");
|
||||
this.Buffs.AddBuff("FuriousRamsayResistFireShockSmoke");
|
||||
|
||||
this.Health = 1;
|
||||
|
||||
this.markedForUnload = false;
|
||||
this.bDead = false;
|
||||
|
||||
if (this.emodel.HasRagdoll())
|
||||
{
|
||||
this.emodel.DoRagdoll(_dmResponse, 999999f);
|
||||
}
|
||||
else
|
||||
{
|
||||
this.emodel.avatarController.TriggerEvent("DeathTrigger");
|
||||
}
|
||||
|
||||
PlayOneShot(soundDeath);
|
||||
attackTarget = null;
|
||||
attackTargetTime = 0;
|
||||
|
||||
RebirthManager.UpdateHireInfo(this.entityId, "order", "guard", Vector3.zero.ToString(), Vector3.zero.ToString());
|
||||
GameManager.Instance.StartCoroutine(RebirthUtilities.delayRespawn(this, respawnPosition, respawnRotation));
|
||||
|
||||
//Log.Out("EntityNPCRebirth-ProcessDamageResponseLocal REPOSITION");
|
||||
|
||||
RebirthManager.UpdateHireInfo(this.entityId, "order", "stay", respawnPosition.ToString(), this.rotation.ToString());
|
||||
bool foundHire = false;
|
||||
|
||||
foreach (chunkObservers observer in observers)
|
||||
{
|
||||
if (observer.entityID == this.entityId)
|
||||
{
|
||||
foundHire = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (!foundHire)
|
||||
{
|
||||
//Log.Out("EntityNPCRebirth-ProcessDamageResponseLocal ADDED CHUNK OBSERVER for: " + this.entityId);
|
||||
ChunkManager.ChunkObserver observerRef = GameManager.Instance.AddChunkObserver(respawnPosition, false, 3, -1);
|
||||
observers.Add(new chunkObservers(this.entityId, observerRef));
|
||||
}
|
||||
|
||||
//Log.Out("EntityNPCRebirth-ProcessDamageResponseLocal HAS OWNER B: " + (this.LeaderUtils.Owner != null));
|
||||
return;
|
||||
}
|
||||
else
|
||||
{
|
||||
//Log.Out("EntityNPCRebirth-ProcessDamageResponseLocal 8");
|
||||
|
||||
if (((this.Health - _dmResponse.Strength) <= 0))
|
||||
{
|
||||
//Log.Out("EntityNPCRebirth-ProcessDamageResponseLocal 9");
|
||||
|
||||
bool dontRespawn = false;
|
||||
|
||||
if (this.spawnerSource == EnumSpawnerSource.Dynamic)
|
||||
{
|
||||
dontRespawn = true;
|
||||
}
|
||||
|
||||
if (this.LeaderUtils.Owner && !dontRespawn)
|
||||
{
|
||||
//Log.Out("EntityNPCRebirth-ProcessDamageResponseLocal 10");
|
||||
|
||||
if (this.LeaderUtils.Owner.IsSpawned())
|
||||
{
|
||||
EntityPlayer entityPlayer = this.world.GetEntity(this.LeaderUtils.Owner.entityId) as EntityPlayer;
|
||||
|
||||
if (entityPlayer != null)
|
||||
{
|
||||
//Log.Out("EntityNPCRebirth-ProcessDamageResponseLocal 11");
|
||||
SpawnPosition spawnPoint = RebirthUtilities.GetSpawnPoint(entityPlayer);
|
||||
|
||||
if (spawnPoint.IsUndef())
|
||||
{
|
||||
//Log.Out("EntityNPCRebirth-ProcessDamageResponseLocal 12");
|
||||
RebirthManager.UpdateHireInfo(this.entityId, "reSpawnPosition", "", Vector3.zero.ToString(), new Vector3(0, this.rotation.y, 0).ToString());
|
||||
dontRespawn = true;
|
||||
}
|
||||
else
|
||||
{
|
||||
//Log.Out("EntityNPCRebirth-ProcessDamageResponseLocal 13");
|
||||
|
||||
//Log.Out("EntityNPCRebirth-ProcessDamageResponseLocal cannotRespawn: " + cannotRespawn);
|
||||
//Log.Out("EntityNPCRebirth-ProcessDamageResponseLocal respawnAtBedroll: " + respawnAtBedroll);
|
||||
//Log.Out("EntityNPCRebirth-ProcessDamageResponseLocal dontRespawn: " + dontRespawn);
|
||||
|
||||
//Log.Out("EntityNPCRebirth-ProcessDamageResponseLocal spawnPoint.position: " + spawnPoint.position);
|
||||
//Log.Out("EntityNPCRebirth-ProcessDamageResponseLocal entityPlayer.position: " + entityPlayer.position);
|
||||
|
||||
if (cannotRespawn && respawnAtBedroll && !dontRespawn)
|
||||
{
|
||||
//Log.Out("EntityNPCRebirth-ProcessDamageResponseLocal 14A");
|
||||
|
||||
if (this.LeaderUtils.Owner)
|
||||
{
|
||||
//Log.Out("EntityNPCRebirth-ProcessDamageResponseLocal 14B");
|
||||
this.LeaderUtils.Owner.Companions.Remove(this);
|
||||
}
|
||||
|
||||
RebirthManager.UpdateHireInfo(this.entityId, "order", "stay", spawnPoint.position.ToString(), this.rotation.ToString());
|
||||
//RebirthManager.UpdateHireInfo(this.entityId, "reSpawnPosition", "", spawnPoint.position.ToString(), new Vector3(0, this.rotation.y, 0).ToString());
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if (this.Buffs.HasCustomVar("$SpawnPoint_X"))
|
||||
{
|
||||
float spawnPointX = this.Buffs.GetCustomVar("$SpawnPoint_X");
|
||||
float spawnPointY = this.Buffs.GetCustomVar("$SpawnPoint_Y");
|
||||
float spawnPointZ = this.Buffs.GetCustomVar("$SpawnPoint_Z");
|
||||
|
||||
Vector3 spawnPoint = new Vector3(spawnPointX, spawnPointY, spawnPointZ);
|
||||
|
||||
if (cannotRespawn && respawnAtBedroll && !dontRespawn)
|
||||
{
|
||||
//Log.Out("EntityNPCRebirth-ProcessDamageResponseLocal 14B");
|
||||
RebirthManager.UpdateHireInfo(this.entityId, "order", "stay", spawnPoint.ToString(), this.rotation.ToString());
|
||||
RebirthManager.UpdateHireInfo(this.entityId, "reSpawnPosition", "", spawnPoint.ToString(), new Vector3(0, this.rotation.y, 0).ToString());
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (cannotRespawn && (!respawnAtBedroll || dontRespawn))
|
||||
{
|
||||
this.bWillRespawn = false;
|
||||
//Log.Out("EntityNPCRebirth-ProcessDamageResponseLocal 16");
|
||||
for (int i = 0; i < observers.Count; i++)
|
||||
{
|
||||
if (observers[i].entityID == this.entityId)
|
||||
{
|
||||
//Log.Out("EntityNPCRebirth-ProcessDamageResponseLocal REMOVED OBSERVER, hire: " + this.entityId);
|
||||
GameManager.Instance.RemoveChunkObserver(observers[i].observerRef);
|
||||
observers.RemoveAt(i);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (this.LeaderUtils.Owner && !HasAnyTags(FastTags<TagGroup.Global>.Parse("bedrollSpawn")))
|
||||
{
|
||||
//Log.Out("EntityNPCRebirth-ProcessDamageResponseLocal REMOVED HIRE/OWNED ENTITY, hire: " + this.entityId);
|
||||
RebirthManager.RemoveHire(this.entityId);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
base.ProcessDamageResponseLocal(_dmResponse);
|
||||
this.Buffs.AddBuff("FuriousRamsayHit");
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user