static void Postfix(ItemObject __instance, FTrigger fTrigger) { foreach (LuaPowerTrigger hook in LuaPowerData.luaHooks.FindAll((LuaPowerTrigger hook) => { return(hook._trigger == fTrigger); })) { EffectActions.CallFunctionWithItem(hook._func, __instance); } }
static void Postfix(Being __instance, FTrigger fTrigger) { if (__instance == S.I.batCtrl.currentPlayer) { foreach (LuaPowerTrigger hook in LuaPowerData.luaHooks.FindAll( (LuaPowerTrigger hook) => { return(hook._trigger == fTrigger && (hook._being == __instance || (hook._being == null && __instance == MoreLuaPower.GetPlayer()) )); } )) { if ((LuaPowerHooks.triggerItem == null || LuaPowerHooks.triggerItem.item == null)) { LuaPowerHooks.triggerItem = new ItemObject(); LuaPowerHooks.triggerItem.being = __instance; LuaPowerHooks.triggerItem.item = __instance.gameObject.AddComponent <MPLHook>(); LuaPowerHooks.triggerItem.item.being = __instance; LuaPowerHooks.triggerItem.item.itemObj = LuaPowerHooks.triggerItem; } EffectActions.CallFunctionWithItem(hook._func, LuaPowerHooks.triggerItem); } } }
public static bool Trigger(ItemObject __instance, FTrigger fTrigger, bool doublecast, ref Being hitBeing, int forwardedHitDamage) { if (hitBeing == null) { hitBeing = __instance.being; } return(true); }
public static void AddHook(FTrigger trigger, string func) { bool duplicate = false; foreach (var hook in LuaPowerData.luaHooks) { if (hook._trigger == trigger && hook._func == func) { duplicate = true; } } if (!duplicate) { LuaPowerData.luaHooks.Add(new LuaPowerTrigger(trigger, func)); } }
public static void AddHook(FTrigger trigger, string func, Being being = null) { bool duplicate = false; foreach (var hook in LuaPowerData.luaHooks) { if (hook._trigger == trigger && hook._func == func && ((hook._being == MoreLuaPower.GetPlayer() && being == null) || hook._being == being)) { duplicate = true; } } if (!duplicate) { LuaPowerData.luaHooks.Add(new LuaPowerTrigger(trigger, func, being)); } }
static void DebugLog(ItemObject __instance, FTrigger fTrigger, bool doublecast, Being hitBeing, int forwardedHitDamage) { // Debug.Log($"Item ID: {__instance.itemID}"); if (!ENABLE_DEBUG_LOG_HERE) { return; } var obj = __instance; if (obj.itemID != "HellPass20" && obj.itemID != "Pinch" && obj.itemID != "Transfuse" && obj.itemID != "Corset") { return; } if (fTrigger == FTrigger.Hold) { // Too spammy return; } Debug.Log($"[{obj.itemID}] Arguments are: {fTrigger}, {doublecast}, {hitBeing?.name}, {forwardedHitDamage}"); switch (obj.itemID) { case "Pinch": case "Transfuse": case "Corset": { Debug.Log($"Being player is {hitBeing?.player}"); Debug.Log($"SpellObj is {obj.spellObj}"); break; } case "HellPass20": { Debug.Log($"Item def is {obj.pactObj.defense}"); //Debug.Log($"Effect tags are {obj.effectTags.Join()}"); //Debug.Log($"Param dict is {obj.paramDictionary.Join()}"); //Debug.Log($"Parent and origin spells are {obj.parentSpell}, {obj.originSpell}"); break; } default: break; } }
static void OnHitPinchPrefixToCheckState(ItemObject __instance, FTrigger fTrigger, Being hitBeing, out bool __state) { if (!shouldRunHack(__instance, fTrigger, hitBeing)) { __state = false; return; } Player player = hitBeing.player; // Only Reflect can short-circuit a spell like this. See Being#HitAmount. if (player.HasStatusEffect(Status.Reflect)) { Debug.Log("Player has reflect, so no pinch hack necessary"); __state = false; return; } __state = true; }
static void Postfix(Being __instance, FTrigger fTrigger) { if (__instance == S.I.batCtrl.currentPlayer) { if ((LuaPowerHooks.triggerItem == null || LuaPowerHooks.triggerItem.item == null) && S.I.batCtrl.currentPlayer != null) { LuaPowerHooks.triggerItem = new ItemObject(); LuaPowerHooks.triggerItem.item = S.I.batCtrl.currentPlayer.gameObject.AddComponent <Artifact>(); LuaPowerHooks.triggerItem.item.being = S.I.batCtrl.currentPlayer; } foreach (LuaPowerTrigger hook in LuaPowerData.luaHooks.FindAll((LuaPowerTrigger hook) => { return(hook._trigger == fTrigger); })) { if (LuaPowerHooks.triggerItem != null) { EffectActions.CallFunctionWithItem(hook._func, LuaPowerHooks.triggerItem); } else { Debug.Log("ERROR: Hooks are not loaded, but it is trying to trigger. Is there a player?"); } } } }
static void RaiseDefenseIfPinch(ItemObject __instance, FTrigger fTrigger, Being hitBeing, bool __state) { if (!__state) { return; } SpellObject obj = __instance.spellObj; if (SELF_DAMAGE_SPELLS.Contains(obj.itemID)) { Player player = hitBeing?.player; if (!player) { Debug.LogWarning($"Unexpected hitBeing for ${obj.itemID} (${hitBeing}, ${hitBeing?.player}); moving on"); return; } var pact = CustomHell.GetHellPact(player, CustomHellPassEffect.LOSE_DEF_ON_HIT); int newDef = pact.defense + 1; Debug.Log($"Pinch hack ({obj.itemID}): Refunding 1 defense to Hell Pass 20 ({pact.defense} -> {newDef})"); pact.defense = newDef; } }
private static bool shouldRunHack(ItemObject itemObj, FTrigger fTrigger, Being hitBeing) { if (itemObj.spellObj == null) { return(false); } SpellObject obj = itemObj.spellObj; if (!(fTrigger == FTrigger.OnHit && CustomHell.IsHellEnabled(obj?.ctrl?.runCtrl, CustomHellPassEffect.LOSE_DEF_ON_HIT) && SELF_DAMAGE_SPELLS.Contains(obj.itemID))) { return(false); } Player player = hitBeing?.player; if (!player) { Debug.LogWarning($"Unexpected hitBeing for ${obj.itemID} (${hitBeing}, ${hitBeing?.player}); moving on"); return(false); } return(true); }
public LuaPowerTrigger(FTrigger trigger, string func, Being being) { _trigger = trigger; _func = func; _being = being; }
public LuaPowerTrigger(FTrigger trigger, string func) { _trigger = trigger; _func = func; }
public static void AddHook(FTrigger trigger, string func) { LuaPowerData.luaHooks.Add(new LuaPowerTrigger(trigger, func)); }
public static void AddTriggerTooltip(FTrigger trigger, string name, string tooltip) { S.I.deCtrl.triggerTooltips.Add(trigger); LuaPowerLang.ImportTerm("MechKeys/" + trigger.ToString(), name); LuaPowerLang.ImportTerm("MechTooltips/" + trigger.ToString(), tooltip); }