static void PostTranspiler(AbilityExecutionProcess instance, TimeSpan?gameTime)
 {
     if (gameTime.HasValue)
     {
         if (instance.IsEnded)
         {
             Mod.Core.LastTickTimeOfAbilityExecutionProcess.Remove(instance);
         }
         Game.Instance.Player.GameTime = gameTime.Value;
     }
 }
Exemple #2
0
            static void Postfix(AbilityExecutionProcess __instance, ref TimeSpan?__state)
            {
                if (__state.HasValue)
                {
                    if (__instance.IsEnded)
                    {
                        Mod.Core.LastTickTimeOfAbilityExecutionProcess.Remove(__instance);
                    }

                    Game.Instance.Player.GameTime = __state.Value;
                }
            }
 static TimeSpan?PreTranspiler(AbilityExecutionProcess instance)
 {
     if ((IsInCombat() && instance.Context.AbilityBlueprint.GetComponent <AbilityDeliverEffect>() != null) ||
         (Mod.Enabled && Mod.Core.LastTickTimeOfAbilityExecutionProcess.ContainsKey(instance)))
     {
         TimeSpan gameTime    = Game.Instance.Player.GameTime;
         TimeSpan newGameTime = Mod.Core.LastTickTimeOfAbilityExecutionProcess.TryGetValue(instance, out newGameTime) ?
                                newGameTime + Game.Instance.TimeController.GameDeltaTime.Seconds() : gameTime;
         Mod.Core.LastTickTimeOfAbilityExecutionProcess[instance] = newGameTime;
         Game.Instance.Player.GameTime = newGameTime;
         return(gameTime);
     }
     return(null);
 }
        public void HandleUnitJoinCombat(UnitEntityData unit)
        {
            //Main.logger.Log($"Unit joining combat: {unit.CharacterName}");
            var autoCastAbilities = unit.Brain.Actions.Where(action => action.Blueprint.name.StartsWith("SLE_PRECAST"));

            foreach (var autoCast in autoCastAbilities)
            {
                var spellCast   = autoCast.Blueprint as BlueprintAiCastSpell;
                var spellbook   = unit.Descriptor.Spellbooks.First();
                var abilityData = new AbilityData(spellCast.Ability, unit.Descriptor, unit.Descriptor.Spellbooks.First().Blueprint);
                //Main.logger.Log($"auto casting buff '{spellCast.Ability.name} at level {abilityData.CalculateParams().SpellLevel}' on combat join");
                //Main.logger.Log($"spellbook pre-cast: {spellbook.GetAvailableForCastSpellCount(abilityData)}");
                var proc = new AbilityExecutionContext(abilityData, abilityData.CalculateParams(), new Kingmaker.Utility.TargetWrapper(unit));
                AbilityExecutionProcess.ApplyEffectImmediate(proc, unit);
                abilityData.SpendFromSpellbook();
                //Main.logger.Log($"spellbook post-cast: {spellbook.GetAvailableForCastSpellCount(abilityData)}");
            }
        }
Exemple #5
0
            static void Prefix(AbilityExecutionProcess __instance, ref TimeSpan?__state)
            {
                if ((IsInCombat() && __instance.Context.AbilityBlueprint.GetComponent <AbilityDeliverEffect>() != null) ||
                    (Mod.Enabled && Mod.Core.LastTickTimeOfAbilityExecutionProcess.ContainsKey(__instance)))
                {
                    if (Mod.Core.LastTickTimeOfAbilityExecutionProcess.TryGetValue(__instance, out TimeSpan gameTime))
                    {
                        gameTime += Game.Instance.TimeController.GameDeltaTime.Seconds();
                    }
                    else
                    {
                        gameTime = Game.Instance.Player.GameTime;
                    }

                    Mod.Core.LastTickTimeOfAbilityExecutionProcess[__instance] = gameTime;

                    __state = Game.Instance.Player.GameTime;
                    Game.Instance.Player.GameTime = gameTime;
                }
            }