diff --git a/Data/Scripts/CoreSystems/Ai/AiConstruct.cs b/Data/Scripts/CoreSystems/Ai/AiConstruct.cs index 86f4499d..0b111e31 100644 --- a/Data/Scripts/CoreSystems/Ai/AiConstruct.cs +++ b/Data/Scripts/CoreSystems/Ai/AiConstruct.cs @@ -944,7 +944,7 @@ public bool ChangeDetected(Ai ai) var forceUpdate = LastUpdateTick == 0 || Session.I.Tick - LastUpdateTick > 600; if (forceUpdate || fd.Target != OldTarget || fd.Locked != OldLocked || fd.HasFocus != OldHasFocus || Math.Abs(fd.DistToNearestFocusSqr - OldDistToNearestFocusSqr) > 0) { - if (fd.Target > 0) + if (fd.Target != 0) PrevTarget = fd.Target; OldTarget = fd.Target; @@ -1031,7 +1031,7 @@ internal void ServerReleaseActive(Ai ai) { var fd = ai.Construct.Data.Repo.FocusData; - fd.Target = -1; + fd.Target = 0; fd.Locked = LockModes.None; ServerIsFocused(ai); @@ -1052,12 +1052,12 @@ internal bool ServerIsFocused(Ai ai) { var fd = ai.Construct.Data.Repo.FocusData; - if (fd.Target > 0 && MyEntities.GetEntityById(fd.Target) != null) { + if (fd.Target != 0 && MyEntities.GetEntityById(fd.Target) != null) { fd.HasFocus = true; return true; } - fd.Target = -1; + fd.Target = 0; fd.Locked = LockModes.None; fd.HasFocus = false; @@ -1071,14 +1071,14 @@ internal bool ClientIsFocused(Ai ai) if (Session.I.IsServer) return ServerIsFocused(ai); - return fd.Target > 0 && MyEntities.GetEntityById(fd.Target) != null; + return fd.Target != 0 && MyEntities.GetEntityById(fd.Target) != null; } internal bool GetPriorityTarget(Ai ai, out MyEntity target) { var fd = ai.Construct.Data.Repo.FocusData; - if (fd.Target > 0 && MyEntities.TryGetEntityById(fd.Target, out target, true)) + if (fd.Target != 0 && MyEntities.TryGetEntityById(fd.Target, out target, true)) return true; if (MyEntities.TryGetEntityById(fd.Target, out target, true)) diff --git a/Data/Scripts/CoreSystems/Ai/AiTargeting.cs b/Data/Scripts/CoreSystems/Ai/AiTargeting.cs index 0f3494ee..9a84f45f 100644 --- a/Data/Scripts/CoreSystems/Ai/AiTargeting.cs +++ b/Data/Scripts/CoreSystems/Ai/AiTargeting.cs @@ -305,7 +305,7 @@ private static bool AcquireTopMostEntity(Weapon w, ProtoWeaponOverrides overRide if (meteor != null && (!s.TrackMeteors || !overRides.Meteors)) continue; - if (character != null && (!overRides.Biologicals || character.IsDead || character.Integrity <= 0 || session.AdminMap.ContainsKey(character))) + if (character != null && (!w.System.TrackCharacters || !overRides.Biologicals || character.IsDead || character.Integrity <= 0 || session.AdminMap.ContainsKey(character))) continue; @@ -482,7 +482,7 @@ private static bool AcquireObstruction(Weapon w, ProtoWeaponOverrides overRides) var meteor = info.Target as MyMeteor; if (meteor != null && (!s.TrackMeteors || !overRides.Meteors)) continue; - if (character != null && (false && !overRides.Biologicals || character.IsDead || character.Integrity <= 0)) continue; + if (character != null && (!w.System.TrackCharacters || !overRides.Biologicals || character.IsDead || character.Integrity <= 0)) continue; Vector3D predictedPos; if (!Weapon.CanShootTarget(w, ref targetCenter, targetLinVel, targetAccel, out predictedPos, true, info.Target, MathFuncs.DebugCaller.CanShootTarget4)) continue; @@ -740,7 +740,7 @@ internal static bool ReacquireTarget(Projectile p) TargetInfo alphaInfo = null; int offset = 0; MyEntity fTarget; - if (!aConst.OverrideTarget && ai.Construct.Data.Repo.FocusData.Target > 0 && MyEntities.TryGetEntityById(ai.Construct.Data.Repo.FocusData.Target, out fTarget) && ai.Targets.TryGetValue(fTarget, out alphaInfo)) + if (!aConst.OverrideTarget && ai.Construct.Data.Repo.FocusData.Target != 0 && MyEntities.TryGetEntityById(ai.Construct.Data.Repo.FocusData.Target, out fTarget) && ai.Targets.TryGetValue(fTarget, out alphaInfo)) offset++; if (aConst.FocusOnly && offset <= 0) @@ -1060,7 +1060,7 @@ private static bool FindRandomBlock(Weapon w, Target target, TargetInfo info, Co { TargetInfo priorityInfo; MyEntity fTarget; - if (ai.Construct.Data.Repo.FocusData.Target > 0 && MyEntities.TryGetEntityById(ai.Construct.Data.Repo.FocusData.Target, out fTarget) && ai.Targets.TryGetValue(fTarget, out priorityInfo) && priorityInfo.Target?.GetTopMostParent() == topEnt) + if (ai.Construct.Data.Repo.FocusData.Target != 0 && MyEntities.TryGetEntityById(ai.Construct.Data.Repo.FocusData.Target, out fTarget) && ai.Targets.TryGetValue(fTarget, out priorityInfo) && priorityInfo.Target?.GetTopMostParent() == topEnt) { isPriroity = true; lastBlocks = totalBlocks < 250 ? totalBlocks : 250; diff --git a/Data/Scripts/CoreSystems/Definitions/SerializedConfigs/Weapon/ProtoWeapon.cs b/Data/Scripts/CoreSystems/Definitions/SerializedConfigs/Weapon/ProtoWeapon.cs index d5dbd880..29610d1d 100644 --- a/Data/Scripts/CoreSystems/Definitions/SerializedConfigs/Weapon/ProtoWeapon.cs +++ b/Data/Scripts/CoreSystems/Definitions/SerializedConfigs/Weapon/ProtoWeapon.cs @@ -469,13 +469,13 @@ public void Sync(Weapon.WeaponComponent weaponComponent, ProtoWeaponCompTasks sy public void Update(Weapon.WeaponComponent weaponComponent) { - if (EnemyId <= 0 || !MyEntities.TryGetEntityById(EnemyId, out Enemy)) + if (EnemyId != 0 || !MyEntities.TryGetEntityById(EnemyId, out Enemy)) { Enemy = null; EnemyId = 0; } - if (FriendId <= 0 || !MyEntities.TryGetEntityById(FriendId, out Friend)) + if (FriendId != 0 || !MyEntities.TryGetEntityById(FriendId, out Friend)) { Friend = null; FriendId = 0; @@ -487,7 +487,7 @@ public void Update(Weapon.WeaponComponent weaponComponent) public bool GetFriend(Session s, out MyEntity friend, out Ai ai) { friend = Friend; - var valid = FriendId > 0 && friend != null && !friend.MarkedForClose; + var valid = FriendId != 0 && friend != null && !friend.MarkedForClose; if (valid && s.EntityAIs.TryGetValue(friend, out ai)) { return true; @@ -500,7 +500,7 @@ public bool GetFriend(Session s, out MyEntity friend, out Ai ai) public bool GetEnemy(Session s, out MyEntity enemy, out Ai ai) { enemy = Enemy; - var valid = EnemyId > 0 && enemy != null && !enemy.MarkedForClose; + var valid = EnemyId != 0 && enemy != null && !enemy.MarkedForClose; if (valid && s.EntityAIs.TryGetValue(enemy, out ai)) { return true; diff --git a/Data/Scripts/CoreSystems/EntityComp/Parts/Weapon/WeaponData.cs b/Data/Scripts/CoreSystems/EntityComp/Parts/Weapon/WeaponData.cs index d9ccbfd8..69b10782 100644 --- a/Data/Scripts/CoreSystems/EntityComp/Parts/Weapon/WeaponData.cs +++ b/Data/Scripts/CoreSystems/EntityComp/Parts/Weapon/WeaponData.cs @@ -90,15 +90,10 @@ internal void Load() }; - if (Session.I.IsServer) { - - if (Session.I.IsCreative) { - Repo.Values.Set.Overrides.Neutrals = true; - Repo.Values.Set.Overrides.Biologicals = false; - } - + if (Session.I.IsServer) + { + Repo.Values.Set.Overrides.Biologicals = Comp.PrimaryWeapon.System.TrackCharacters; Repo.Values.Set.Overrides.LeadGroup = Comp.Structure.DefaultLeadGroup; - } for (int i = 0; i < collection.Count; i++) diff --git a/Data/Scripts/CoreSystems/Projectiles/Projectile.cs b/Data/Scripts/CoreSystems/Projectiles/Projectile.cs index e8ede956..e76b63fe 100644 --- a/Data/Scripts/CoreSystems/Projectiles/Projectile.cs +++ b/Data/Scripts/CoreSystems/Projectiles/Projectile.cs @@ -490,7 +490,7 @@ internal void RunSmart() // this is grossly inlined thanks to mod profiler... th validEntity = !targetEnt.MarkedForClose; var targetChange = validEntity && aConst.FocusOnly && Info.Target.TopEntityId != ai.Construct.Data.Repo.FocusData.Target; - if (targetChange && (aConst.FocusEviction || ai.Construct.Data.Repo.FocusData.Target > 0)) + if (targetChange && (aConst.FocusEviction || ai.Construct.Data.Repo.FocusData.Target != 0)) validEntity = IsFocusTarget(targetEnt); } diff --git a/Data/Scripts/CoreSystems/Session/SessionDamageMgr.cs b/Data/Scripts/CoreSystems/Session/SessionDamageMgr.cs index 74789c4c..4b0ab6ab 100644 --- a/Data/Scripts/CoreSystems/Session/SessionDamageMgr.cs +++ b/Data/Scripts/CoreSystems/Session/SessionDamageMgr.cs @@ -682,7 +682,7 @@ private void DamageGrid(HitEntity hitEnt, ProInfo t) var primaryDamage = rootStep && block == rootBlock && !detActive;//limits application to first run w/AOE, suppresses with detonation var baseScale = damageScale * directDamageScale * smallVsLargeBuff * gridSizeBuff; - var scaledDamage = (float)(useBaseCutoff ? cutoff : basePool * baseScale); + var scaledDamage = (float)((useBaseCutoff ? cutoff : basePool) * baseScale); var aoeScaledDmg = (float)((aoeDamageFall * (detActive ? detDamageScale : areaDamageScale)) * damageScale * gridSizeBuff); bool deadBlock = false; //Check for end of primary life diff --git a/Data/Scripts/CoreSystems/Session/SessionUpdate.cs b/Data/Scripts/CoreSystems/Session/SessionUpdate.cs index 381a9171..13bae846 100644 --- a/Data/Scripts/CoreSystems/Session/SessionUpdate.cs +++ b/Data/Scripts/CoreSystems/Session/SessionUpdate.cs @@ -224,7 +224,7 @@ private void AiLoop() rootConstruct.CheckEmptyWeapons(); } - construct.HadFocus = rootConstruct.Data.Repo.FocusData.Target > 0 && MyEntities.TryGetEntityById(rootConstruct.Data.Repo.FocusData.Target, out rootConstruct.LastFocusEntity); + construct.HadFocus = rootConstruct.Data.Repo.FocusData.Target != 0 && MyEntities.TryGetEntityById(rootConstruct.Data.Repo.FocusData.Target, out rootConstruct.LastFocusEntity); var constructResetTick = rootConstruct.TargetResetTick == Tick; /// /// Upgrade update section @@ -692,7 +692,7 @@ private void AiLoop() } } } - else if (eTarget != null && eTarget.MarkedForClose || w.Target.HasTarget && w.Target.TargetObject == null && w.TargetData.EntityId >= 0 || w.DelayedTargetResetTick == Tick && w.TargetData.EntityId == 0 && w.Target.TargetObject != null) + else if (eTarget != null && eTarget.MarkedForClose || w.Target.HasTarget && w.Target.TargetObject == null && (w.TargetData.EntityId >= 0 || w.TargetData.EntityId <= -3) || w.DelayedTargetResetTick == Tick && w.TargetData.EntityId == 0 && w.Target.TargetObject != null) { w.Target.Reset(Tick, States.ServerReset); } diff --git a/Data/Scripts/CoreSystems/Support/MiscTypes.cs b/Data/Scripts/CoreSystems/Support/MiscTypes.cs index 2efe8a24..3d145589 100644 --- a/Data/Scripts/CoreSystems/Support/MiscTypes.cs +++ b/Data/Scripts/CoreSystems/Support/MiscTypes.cs @@ -131,7 +131,7 @@ internal void ClientUpdate(Weapon w, ProtoWeaponTransferTarget tData) } MyEntity targetEntity = null; - if (tData.EntityId <= 0 || MyEntities.TryGetEntityById(tData.EntityId, out targetEntity, true)) + if ((tData.EntityId <= 0 && tData.EntityId >= -2) || MyEntities.TryGetEntityById(tData.EntityId, out targetEntity, true)) { TargetObject = targetEntity; diff --git a/Data/Scripts/CoreSystems/Ui/Targeting/TargetUiDraw.cs b/Data/Scripts/CoreSystems/Ui/Targeting/TargetUiDraw.cs index a6b67377..be816035 100644 --- a/Data/Scripts/CoreSystems/Ui/Targeting/TargetUiDraw.cs +++ b/Data/Scripts/CoreSystems/Ui/Targeting/TargetUiDraw.cs @@ -389,7 +389,7 @@ private void DrawTarget() var detailedHud = !s.Settings.ClientConfig.MinimalHud && (s.Settings.ClientConfig.AdvancedMode || s.MinimalHudOverride); var element = 0; - if (focus.Target <= 0) return; + if (focus.Target == 0) return; var lockMode = focus.Locked; var targetState = ai.TargetState; @@ -515,7 +515,7 @@ internal void SetHit(ProInfo info) var focus = Session.I.TrackingAi.Construct.Data.Repo.FocusData; MyEntity target; - if (focus.Target > 0 && MyEntities.TryGetEntityById(focus.Target, out target) && CheckBlockWeaponEntityHit(target, info)) + if (focus.Target != 0 && MyEntities.TryGetEntityById(focus.Target, out target) && CheckBlockWeaponEntityHit(target, info)) return; if (LastSelectedEntity != null) @@ -871,7 +871,7 @@ internal bool GetTargetState(Session s) var targetId = ai.Construct.Data.Repo.FocusData.Target; MyTuple targetInfo; MyEntity target; - if (targetId <= 0 || !MyEntities.TryGetEntityById(targetId, out target) || !_masterTargets.TryGetValue(target, out targetInfo)) + if (targetId == 0 || !MyEntities.TryGetEntityById(targetId, out target) || !_masterTargets.TryGetValue(target, out targetInfo)) return false; if (!s.Tick20) return true; diff --git a/Data/Scripts/CoreSystems/Ui/Targeting/TargetUiSelect.cs b/Data/Scripts/CoreSystems/Ui/Targeting/TargetUiSelect.cs index b5ea4d07..9cdaedb0 100644 --- a/Data/Scripts/CoreSystems/Ui/Targeting/TargetUiSelect.cs +++ b/Data/Scripts/CoreSystems/Ui/Targeting/TargetUiSelect.cs @@ -473,7 +473,7 @@ private bool TargetExcludedFromVoxelLos(Ai ai, MyEntity target) foreach (var m in Session.I.ActiveMarks) { var grid = m.Item3.TmpEntity as MyCubeGrid; - if ((grid != null || m.Item3.EntityId > 0 && MyEntities.TryGetEntityById(m.Item3.EntityId, out grid) && grid != null) && targetGrid.IsSameConstructAs(grid)) + if ((grid != null || (m.Item3.EntityId > 0 || m.Item3.EntityId <= -3)&& MyEntities.TryGetEntityById(m.Item3.EntityId, out grid) && grid != null) && targetGrid.IsSameConstructAs(grid)) return true; } }