Beispiel #1
0
        public static void Prefix(TurnDirector __instance, int round)
        {
            Mod.Log.Trace?.Write($"TD:BNR entered");
            Mod.Log.Info?.Write($"=== Turn Director is beginning round: {round}");

            // Update the current vision for all allied and friendly units
            foreach (AbstractActor actor in __instance.Combat.AllActors)
            {
                // If our sensors are offline, re-enable them
                if (actor.StatCollection.ContainsStatistic(ModStats.DisableSensors))
                {
                    Mod.Log.Info?.Write($"Actor: {CombatantUtils.Label(actor)} sensors are offline until: {actor.StatCollection.GetValue<int>(ModStats.DisableSensors)}");

                    if (round >= actor.StatCollection.GetValue <int>(ModStats.DisableSensors))
                    {
                        Mod.Log.Info?.Write($"Re-enabling sensors for {CombatantUtils.Label(actor)}");
                        actor.StatCollection.RemoveStatistic(ModStats.DisableSensors);
                    }
                }

                // Update our sensors check
                ActorHelper.UpdateSensorCheck(actor, true);
                if (actor.TeamId == __instance.Combat.LocalPlayerTeamGuid)
                {
                    actor.VisibilityCache.RebuildCache(actor.Combat.GetAllImporantCombatants());
                    CombatHUDHelper.ForceNameRefresh(actor.Combat);
                }
            }
        }
        public static void Prefix(AbstractActor __instance)
        {
            if (__instance.TeamId == __instance.Combat.LocalPlayerTeamGuid)
            {
                CombatHUDHelper.ForceNameRefresh(__instance.Combat);
            }

            // Refresh any CombatHUDMarkDisplays
            foreach (CombatHUDMarkDisplay chudMD in ModState.MarkContainerRefs.Keys)
            {
                chudMD.RefreshInfo();
            }

            if (Mod.Config.Toggles.LogEffectsOnMove)
            {
                Mod.Log.Debug?.Write($" OnMoveComplete: Effects targeting actor: {CombatantUtils.Label(__instance)}");
                List <Effect> list = __instance.Combat.EffectManager.GetAllEffectsTargeting(__instance);
                foreach (Effect effect in list)
                {
                    if (effect.EffectData.statisticData != null)
                    {
                        Mod.Log.Debug?.Write($"   -- EffectID: '{effect.EffectData.Description.Id}'  Name: '{effect.EffectData.Description.Name}'  " +
                                             $"StatName:'{effect.EffectData.statisticData.statName}'  StatValue:{effect.EffectData.statisticData.modValue}");
                    }
                    else
                    {
                        Mod.Log.Debug?.Write($"   -- EffectID: {effect.EffectData.Description.Id}  Name: {effect.EffectData.Description.Name}");
                    }
                }

                foreach (AbstractActor unit in __instance.team.units)
                {
                    if (unit.GUID != __instance.GUID)
                    {
                        Mod.Log.Debug?.Write($" friendly actor effects: {CombatantUtils.Label(unit)}");
                        List <Effect> list2 = __instance.Combat.EffectManager.GetAllEffectsTargeting(unit);
                        foreach (Effect effect in list2)
                        {
                            if (effect.EffectData.statisticData != null)
                            {
                                Mod.Log.Debug?.Write($"   -- EffectID: '{effect.EffectData.Description.Id}'  Name: '{effect.EffectData.Description.Name}'  " +
                                                     $"StatName:'{effect.EffectData.statisticData.statName}'  StatValue:{effect.EffectData.statisticData.modValue}");
                            }
                            else
                            {
                                Mod.Log.Debug?.Write($"   -- EffectID: {effect.EffectData.Description.Id}  Name: {effect.EffectData.Description.Name}");
                            }
                        }
                    }
                }
            }
        }
        /*
         * RogueTech decided to add LV_PROBE_PING and LV_PROBE_CARRIER as effects that can be triggered. When this happens, VisiblityCache won't understand a state change
         *   as the underlying VisibilityLevel stays the same, even if the SensorDetailsLevel changes. As such, force a refresh - which should trigger a recompute
         *   of the various LowVis data across every actor on the board.
         */
        public static void Postfix(Ability __instance, AbstractActor creator)
        {
            List <Effect> allEffectsWithID = __instance.Combat.EffectManager.GetAllEffectsWithID(__instance.Def.Id);

            for (int i = 0; i < allEffectsWithID.Count; i++)
            {
                if (allEffectsWithID[i].creatorID == creator.GUID &&
                    allEffectsWithID[i].EffectData.targetingData.forceVisRebuild &&
                    allEffectsWithID[i].EffectData.statisticData != null &&
                    (allEffectsWithID[i].EffectData.statisticData.statName.Equals(ModStats.ProbeCarrier) || allEffectsWithID[i].EffectData.statisticData.statName.Equals(ModStats.PingedByProbe))
                    )
                {
                    CombatHUDHelper.ForceNameRefresh(__instance.Combat);
                }
            }
        }