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);
     }
 }
示例#2
0
 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);
 }
示例#4
0
    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));
        }
    }
示例#5
0
    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;
            }
        }
示例#7
0
        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;
        }
示例#8
0
 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?");
             }
         }
     }
 }
示例#9
0
        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;
            }
        }
示例#10
0
        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);
        }
示例#11
0
 public LuaPowerTrigger(FTrigger trigger, string func, Being being)
 {
     _trigger = trigger;
     _func    = func;
     _being   = being;
 }
示例#12
0
 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));
 }
示例#14
0
 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);
 }