예제 #1
0
    public static void ReloadParams()
    {
        if (!File.Exists(ParamPath))
        {
            Debug.Log("Data0.bdt not found. This will make treasure editor have less functionality.");
            return;
        }
        BND4 paramBnd = SFUtil.DecryptDS3Regulation(DarkSoulsTools.GetOverridenPath(ParamPath));

        DS3Param = PARAM.Read(paramBnd.Files.Find(x => Path.GetFileName(x.Name) == "ItemLotParam.param").Bytes);
        PARAM.Layout layout = PARAM.Layout.ReadXMLFile($@"{Application.dataPath.Replace('/', '\\')}\dstools\ParamLayouts\DS3\{DS3Param.ID}.xml");
        DS3Param.SetLayout(layout);

        // Build and cache the item name list
        HashSet <int> usedItemIds = new HashSet <int>();

        ItemNameList = new List <Tuple <int, string> >();
        foreach (var row in DS3Param.Rows)
        {
            ItemLotParam param = new ItemLotParam(row);
            foreach (int id in param.ItemID)
            {
                if (!usedItemIds.Contains(id))
                {
                    usedItemIds.Add(id);
                    ItemNameList.Add(new Tuple <int, string>(id, FMGUtils.LookupItemName(id)));
                }
            }
        }
        ItemNameList.Sort((a, b) => StringComparer.InvariantCulture.Compare(a.Item2, b.Item2));
    }
예제 #2
0
    protected void DrawTreasureEditor()
    {
        ShowTreasureEditor = EditorGUILayout.Foldout(ShowTreasureEditor, "Treasure Editor");
        if (ShowTreasureEditor)
        {
            if (serializedObject.targetObjects.Count() == 1)
            {
                if (GUILayout.Button("Go to Target Object"))
                {
                    var objectName = serializedObject.FindProperty("PartName2").stringValue;
                    var obj        = GameObject.Find($@"/MSBParts/Objects/{objectName}");
                    if (obj == null)
                    {
                        obj = GameObject.Find($@"/MSBParts/DummyObjects/{objectName}");
                    }
                    if (obj == null)
                    {
                        EditorUtility.DisplayDialog("Object not found", $@"Couldn't find object {obj}", "Ok");
                    }
                    else
                    {
                        Selection.activeGameObject = obj;
                        SceneView.FrameLastActiveSceneView();
                    }
                }

                var itemLots = new int[2];
                itemLots[0] = serializedObject.FindProperty("ItemLot1").intValue;
                itemLots[1] = serializedObject.FindProperty("ItemLot2").intValue;
                foreach (var lot in itemLots)
                {
                    if (lot == -1)
                    {
                        EditorGUILayout.LabelField($@"Lot Param: No lot");
                    }
                    else
                    {
                        EditorGUILayout.LabelField($@"Lot Param: {lot}");
                        EditorGUI.indentLevel++;
                        var lotParam = ItemLotParamUtils.LookupItemLot(lot);
                        if (lotParam != null)
                        {
                            EditorGUILayout.BeginVertical();
                            for (int i = 0; i < 8; i++)
                            {
                                EditorGUILayout.BeginHorizontal();
                                EditorGUILayout.LabelField($@"Item ID {i + 1}:", GUILayout.MaxWidth(80.0f));
                                lotParam.ItemID[i] = EditorGUILayout.IntField(lotParam.ItemID[i]);
                                if (EditorGUILayout.DropdownButton(new GUIContent($@"{FMGUtils.LookupItemName(lotParam.ItemID[i])}"), FocusType.Keyboard))
                                {
                                    GenericMenu menu = new GenericMenu();
                                    foreach (var item in ItemLotParamUtils.ItemNameList)
                                    {
                                        if (item.Item2 == "?ItemName?")
                                        {
                                            continue;
                                        }
                                        menu.AddItem(new GUIContent($@"{item.Item2} ({item.Item1})"), item.Item1 == lotParam.ItemID[i], o => {
                                            Tuple <int, ItemLotParam, int, int> stuff = (Tuple <int, ItemLotParam, int, int>)o;
                                            stuff.Item2.ItemID[stuff.Item4]           = stuff.Item3;
                                            ItemLotParamUtils.UpdateItemLot(stuff.Item1, stuff.Item2);
                                            this.Repaint();
                                        }, new Tuple <int, ItemLotParam, int, int>(lot, lotParam, item.Item1, i));
                                    }
                                    menu.ShowAsContext();
                                }
                                EditorGUILayout.EndHorizontal();
                            }
                            ItemLotParamUtils.UpdateItemLot(lot, lotParam);
                            EditorGUILayout.EndVertical();
                        }
                        EditorGUI.indentLevel--;
                    }
                }
                if (GUILayout.Button("Save Params"))
                {
                    ItemLotParamUtils.SaveParams();
                }
            }
        }
    }