static void PostTranspiler(AbilityExecutionProcess instance, TimeSpan?gameTime) { if (gameTime.HasValue) { if (instance.IsEnded) { Mod.Core.LastTickTimeOfAbilityExecutionProcess.Remove(instance); } Game.Instance.Player.GameTime = gameTime.Value; } }
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)}"); } }
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; } }