private static bool Prefix(ItemObject item, ref ItemDrop __result)
        {
            if (IgnoreItems.allMatchedIDs.Contains(item.ItemDataId))
            {
                ULogger.LogTrace("Dropped item ignored; ID={0}, name={1}",
                                 item.ItemDataId, item.ItemBase.Name);
                __result = ( ItemDrop )null;
                return(false);
            }

            return(true);
        }
        private static void Postfix(Image ___playerIcon, bool ___rotateMap)
        {
            if (___playerIcon == null)
            {
                ULogger.LogTrace("playerIcon is null, skipping");
                return;
            }
            if (CameraManager.Instance.SourceCamera == null)
            {
                ULogger.LogTrace("SourceCamera is null, skipping");
                return;
            }

            if (!___rotateMap)
            {
                float camRotation = CameraManager.Instance.SourceTransform.eulerAngles.y;
                ___playerIcon.rectTransform.localEulerAngles = new Vector3(0.0f, 0.0f, -camRotation);
            }
        }
        private static void Postfix()
        {
            var items = ItemPickup.Config.ItemIgnore.Items;

            if (items.Count == 0 || loaded)
            {
                return;
            }

            // Yeah yeah, I know, escaping is bad and I should be using query parameters.
            // I get it. I really do. And normally I would, if I weren't dealing with stupid
            // needless abstraction layers and crap while patching someone else's product.
            // But that's what I'm doing.
            // So I'm not using them.
            // I hope that hurts you deep down inside, Mr. OMGWHYISNTHEUSINGPARAMETERSOMG.
            var method = ItemPickup.Config.ItemIgnore.MatchMethod.ToLower();
            Func <string, string> escape = s => s.Replace("'", "''");
            Func <string, string> nameQueryVal;

            switch (method)
            {
            case "exact":
                nameQueryVal = name => escape(name);
                break;

            case "contains":
                nameQueryVal = name => $"%{escape( name )}%";
                break;

            case "startswith":
                nameQueryVal = name => escape(name) + "%";
                break;

            case "endswith":
                nameQueryVal = name => "%" + escape(name);
                break;

            default:
                ULogger.LogWarn("Invalid MatchMethod value \"{0}\", defaulting to exact", method);
                method       = "exact";
                nameQueryVal = name => escape(name);
                break;
            }
            string nameQueryOp = (method != "exact" ? "LIKE" : "=");

            var lang = ItemPickup.Config.ItemIgnore.Language;

            if (!validLangs.Contains(lang, StringComparer.OrdinalIgnoreCase))
            {
                ULogger.LogWarn("Invalid Language value \"{0}\", defaulting to English", lang);
                lang = "English";
            }

            ULogger.LogInfo("Setting up {0} item ignore filters...", items.Count);

            foreach (var item in items)
            {
                ULogger.LogTrace("Processing ignore string \"{0}\"", nameQueryVal(item));

                var query = $@"
                    SELECT
                        t.ID Trans_Id, t.{lang}, p.Props_Id, p.Item_Type
                    FROM
                        Translation_hint t
                        INNER JOIN Props_total_table p
                            ON t.ID = p.Props_Name
                    WHERE
                        t.{lang} {nameQueryOp} '{nameQueryVal( item )}'";
                SqliteDataReader reader = LocalDb.cur.ExecuteQuery(query);

                int num = 0;
                while (reader.Read())
                {
                    var trans_id  = reader.GetInt32(0);
                    var item_name = reader.GetString(1);
                    var item_id   = reader.GetInt32(2);
                    var item_type = reader.GetString(3);

                    ULogger.LogTrace("Item matched; name=\"{0}\", type=\"{1}\", id={2}, tran_id={3}",
                                     item_name, item_type, item_id, trans_id);
                    IgnoreItems.allMatchedIDs.Add(item_id);
                    num++;
                }

                if (num == 0)
                {
                    ULogger.LogInfo("Ignore item value \"{0}\" didn't match any items (check spelling?)", item);
                }
            }

            ULogger.LogInfo("Done setting up! There were {0} items matched and will be ignored.",
                            IgnoreItems.allMatchedIDs.Count);
        }
Exemple #4
0
        // Target code (based on v1.1.130102):
        //      UIUtils.ShowNumberSelectMinMax(this.curItem.itemId, 0, Mathf.Max(a, 0), 1, TextMgr.GetStr(100401, -1), new Action<int>(this.StartAutomataResult), (Action) (() => {}), true, (int) totalTime, itemNameStr);
        // Replacement (transpiled) code:
        //      UIUtils.ShowNumberSelectMinMax(this.curItem.itemId, 0, Mathf.Max(a, 0), Mathf.Max(a, 0), TextMgr.GetStr(100401, -1), new Action<int>(this.StartAutomataResult), (Action) (() => {}), true, (int) totalTime, itemNameStr);
        private static IEnumerable <CodeInstruction> Transpiler(IEnumerable <CodeInstruction> instructions)
        {
            SearchState            state      = SearchState.INITIAL;
            List <CodeInstruction> saved_inst = new List <CodeInstruction>();

            foreach (CodeInstruction inst in instructions)
            {
                if (state != SearchState.DFLT_1 && state != SearchState.TXTMGR_ID)
                {
                    yield return(inst);
                }

                switch (state)
                {
                case SearchState.THIS:
                    if (inst.opcode == OpCodes.Ldarg_0)
                    {
                        saved_inst.Clear();
                        state++;
                    }
                    break;

                case SearchState.CURITEM:
                    if (inst.operand?.ToString()?.Contains("curItem") == true)
                    {
                        state++;
                    }
                    else
                    {
                        ULogger.LogTrace("Fallback from {0} state; opcode={1}", state.ToString("G"), inst.opcode.ToString());
                        state = SearchState.INITIAL;
                    }
                    break;

                case SearchState.ITEMID:
                    if (inst.operand?.ToString()?.Contains("itemId") == true)
                    {
                        state++;
                    }
                    else
                    {
                        ULogger.LogTrace("Fallback from {0} state; opcode={1}", state.ToString("G"), inst.opcode.ToString());
                        state = SearchState.INITIAL;
                    }
                    break;

                case SearchState.MIN_0:
                    if (inst.opcode == OpCodes.Ldc_I4_0)
                    {
                        state++;
                    }
                    else
                    {
                        ULogger.LogTrace("Fallback from {0} state; opcode={1}", state.ToString("G"), inst.opcode.ToString());
                        state = SearchState.INITIAL;
                    }
                    break;

                case SearchState.LOCAL_VAR:
                case SearchState.PARAM_0:
                    if (inst.opcode.ToString().StartsWith("Ldloc", true, null) || inst.opcode == OpCodes.Ldc_I4_0)
                    {
                        saved_inst.Add(inst);
                        state++;
                    }
                    else
                    {
                        ULogger.LogTrace("Fallback from {0} state; opcode={1}", state.ToString("G"), inst.opcode.ToString());
                        state = SearchState.INITIAL;
                    }
                    break;

                case SearchState.CALL_MAX:
                    if ((inst.opcode == OpCodes.Call || inst.opcode == OpCodes.Callvirt) &&
                        (inst.operand?.ToString()?.Contains(" Max(") == true))
                    {
                        saved_inst.Add(inst);
                        state++;
                    }
                    else
                    {
                        ULogger.LogTrace("Fallback from {0} state; opcode={1}, operand={2}",
                                         state.ToString("G"),
                                         inst.opcode.ToString(),
                                         inst.operand?.ToString());
                        state = SearchState.INITIAL;
                    }
                    break;

                case SearchState.DFLT_1:
                    if (inst.opcode == OpCodes.Ldc_I4_1)
                    {
                        state++;
                    }
                    else
                    {
                        ULogger.LogTrace("Fallback from {0} state; opcode={1}", state.ToString("G"), inst.opcode.ToString());
                        yield return(inst);

                        state = SearchState.INITIAL;
                    }
                    break;

                case SearchState.TXTMGR_ID:
                    var opVal = (inst.operand as int?);
                    if (opVal == 100401)
                    {
                        foreach (CodeInstruction newinst in saved_inst)
                        {
                            yield return(newinst);
                        }

                        state++;
                    }
                    else
                    {
                        ULogger.LogTrace("Fallback from {0} state; operand={1}, opVal={1}",
                                         state.ToString("G"),
                                         inst.operand.ToString(),
                                         opVal);
                        state = SearchState.INITIAL;
                    }

                    yield return(inst);

                    break;
                }
            }

            if (state != SearchState.END)
            {
                ULogger.LogError("Unable to patch default crafting number; game or plugin version is outdated!");
            }
            else
            {
                ULogger.LogTrace("Successfully patched");
            }
        }
Exemple #5
0
 private static void Prefix()
 {
     ULogger.LogTrace("PackageExchangeUICtr::DragEnd");
 }
Exemple #6
0
 private static void Prefix()
 {
     ULogger.LogTrace("PackageExchangeUICtr::DragBeginStoreage");
 }
Exemple #7
0
 private static void Prefix()
 {
     ULogger.LogTrace("PlayerItemBarCtr::DragEnd");
 }
Exemple #8
0
 private static void Prefix()
 {
     ULogger.LogTrace("StorageUIBase::DragEndStoreage");
 }
Exemple #9
0
 private static void Prefix()
 {
     ULogger.LogTrace("PackageUICtr::DragEnd (Main Menu)");
 }
Exemple #10
0
 private static void Prefix()
 {
     ULogger.LogTrace("PackageUIBase::DragEnd");
 }