class ForceSelfBuffs : IUnitCombatHandler { public void HandleUnitJoinCombat(UnitEntityData unit) { var autoCastAbilities = unit.Brain.AvailableActions.Where(action => action.Blueprint is BlueprintAiCastSpell && action.BaseScore == 20.0f); foreach (var autoCast in autoCastAbilities) { var spellCast = autoCast.Blueprint as BlueprintAiCastSpell; Main.logger.Log($"auto casting buff '{spellCast.Ability.name}' on combat join"); var abilityData = new AbilityData(spellCast.Ability, unit.Descriptor); var proc = new AbilityExecutionContext(abilityData, abilityData.CalculateParams(), new Kingmaker.Utility.TargetWrapper(unit)); AbilityExecutionProcess.ApplyEffectImmediate(proc, unit); abilityData.SpendFromSpellbook(); } } public void HandleUnitLeaveCombat(UnitEntityData unit) { } } static bool Load(UnityModManager.ModEntry modEntry) { try { logger = modEntry.Logger; harmony = Harmony.HarmonyInstance.Create(modEntry.Info.Id); harmony.PatchAll(Assembly.GetExecutingAssembly()); forceSelfBuffs = new ForceSelfBuffs(); EventBus.Subscribe(forceSelfBuffs); } catch (Exception ex) { DebugError(ex); throw ex; } return true; }