Esempio n. 1
0
    void LoadAssetsFromPack(PlayAssetPackRequest packRequest)
    {
        var discreteAssets =
            gameAssetManager.GetDiscreteAssetNameList();

        foreach (string discreteAsset in discreteAssets)
        {
            var assetLocation = packRequest.GetAssetLocation(
                discreteAsset);
            if (assetLocation != null)
            {
                long assetSize       = (long)assetLocation.Size;
                long assetOffset     = (long)assetLocation.Offset;
                var  assetFileStream = File.OpenRead(assetLocation.Path);
                var  assetBuffer     = new byte[assetSize];
                assetFileStream.Seek(assetOffset, SeekOrigin.Begin);
                assetFileStream.Read(assetBuffer, 0, assetBuffer.Length);
                Debug.Log("Finished discrete load of " + discreteAsset);
                // The asset is a raw .jpg or .png, convert to a sprite
                gameAssetManager.AddSpriteAsset(discreteAsset,
                                                GameAssetManager.GenerateSpriteFromRawImage(
                                                    assetBuffer));
            }
        }
    }
        private void updateCurrency()
        {
            string translateKey;
            uint   value;

            if (!isCurrency) // experience
            {
                translateKey = "Pay_Experience";
                value        = Simulation.Experience;
            }
            else // currency
            {
                if (!Simulation.Currencies.TryGetValue(Vendor.currency, out value))
                {
                    value = 0;
                }

                translateKey = "Pay_Currency";
            }

            if (isCurrency && GameAssetManager.TryGetAsset <GameCurrencyAsset>(Guid.Parse(Vendor.currency), out var asset))
            {
                currencyText.Text = string.Format(asset.valueFormat, value);
            }
            else
            {
                formatter.Markup(currencyText, LocalizationManager.Current.Simulation["Vendor"].Translate(translateKey, value));
            }
        }
        public override string FormatCondition(Simulation simulation)
        {
            string text = Localization;

            if (string.IsNullOrEmpty(text))
            {
                text = LocalizationManager.Current.Simulation["Quest"]["Default_Condition_TreeKills"];
            }

            if (!simulation.Flags.TryGetValue(ID, out short value))
            {
                value = 0;
            }

            string arg;

            if (Guid.TryParse(Tree, out var treeGUID) && GameAssetManager.TryGetAsset <GameResourceAsset>(treeGUID, out var treeAsset))
            {
                arg = treeAsset.name;
            }
            else
            {
                arg = "?";
            }

            return(string.Format(text, value, Value, arg));
        }
Esempio n. 4
0
 private void Awake()
 {
     if (main == null)
     {
         main = this;
     }
 }
Esempio n. 5
0
 private void Awake()
 {
     gameAssetManager =
         GameObject.Find("GameAssetManager").GetComponent <GameAssetManager>();
     if (gameAssetManager == null)
     {
         Debug.LogError("Failed to find GameAssetManager");
     }
 }
Esempio n. 6
0
 private void Awake()
 {
     infoStatus       = AssetPackInfoStatus.PACKSTATUS_PENDING;
     gameAssetManager =
         GameObject.Find("GameAssetManager").GetComponent <GameAssetManager>();
     if (gameAssetManager == null)
     {
         Debug.LogError("Failed to find GameAssetManager");
     }
     waitingOnPermissionResult = false;
 }
        private void setupCurrency()
        {
            if (isCurrency)
            {
                currencyTextLabel.HorizontalAlignment = HorizontalAlignment.Right;

                if (Guid.TryParse(Vendor.currency, out var curGuid) && GameAssetManager.TryGetAsset <GameCurrencyAsset>(curGuid, out var asset))
                {
                    currencyIcons.Visibility = Visibility.Visible;

                    foreach (var entry in asset.entries.OrderBy(d => d.Value))
                    {
                        Grid eG = new Grid();

                        Image eIcon = new Image()
                        {
                            Width  = 32,
                            Height = 32,
                            Margin = new Thickness(2.5)
                        };

                        if (Guid.TryParse(entry.ItemGUID, out var itemGuid) && GameAssetManager.TryGetAsset <GameItemAsset>(itemGuid, out var itemAsset))
                        {
                            eIcon.Source = ThumbnailManager.CreateThumbnail(itemAsset.ImagePath);
                        }

                        Label eL = new Label()
                        {
                            VerticalAlignment   = VerticalAlignment.Bottom,
                            HorizontalAlignment = HorizontalAlignment.Center
                        };

                        TextBlock eT = new TextBlock()
                        {
                            TextAlignment = TextAlignment.Center,
                            Text          = entry.Value.ToString()
                        };

                        eL.Content = eT;

                        eG.Children.Add(eIcon);
                        eG.Children.Add(eL);

                        currencyIcons.Children.Add(eG);
                    }
                }
            }
            else
            {
                currencyIcons.Visibility = Visibility.Collapsed;
                currencyTextLabel.HorizontalAlignment = HorizontalAlignment.Center;
            }
        }
Esempio n. 8
0
        public void Display()
        {
            Simulation.OnPropertyChanged("");

            mainText.Text = string.Empty;
            responsesPanel.Children.Clear();

            formatter.Markup(npcNameText, FormatText(Character.DisplayName) ?? string.Empty);

            for (int i = 0; i < Dialogue.Messages.Count; i++)
            {
                NPCMessage msg = Dialogue.Messages[i];
                if (msg.conditions.All(d => d.Check(Simulation)))
                {
                    foreach (NPC.Conditions.Condition c in msg.conditions)
                    {
                        c.Apply(Simulation);
                    }

                    foreach (NPC.Rewards.Reward r in msg.rewards)
                    {
                        r.Give(Simulation);
                    }

                    lastMessageId = i;
                    lastPage      = 0;
                    lastMessage   = msg;

                    if (msg.prev != 0)
                    {
                        NPCDialogue prevNext;

                        if (GameAssetManager.TryGetAsset <GameDialogueAsset>(msg.prev, out var gameDialogueAsset))
                        {
                            prevNext = gameDialogueAsset.dialogue;
                        }
                        else
                        {
                            MessageBox.Show(LocalizationManager.Current.Simulation["Dialogue"].Translate("Error_DialogueNotFound", msg.prev));
                            Close();
                            return;
                        }

                        Previous = prevNext;
                    }

                    DisplayPage(msg, i, 0);

                    break;
                }
            }
        }
Esempio n. 9
0
 public bool UpdateIcon(out BitmapImage image)
 {
     if (ID > 0 && GameAssetManager.TryGetAsset <GameItemAsset>(ID, out var asset))
     {
         image = ThumbnailManager.CreateThumbnail(asset.ImagePath);
         return(true);
     }
     else
     {
         image = default;
         return(false);
     }
 }
Esempio n. 10
0
 internal static MenuItem CreateFindUnusedIDButton(Action <ushort> action, EGameAssetCategory category)
 {
     return(CreateGenericButton(new BaseCommand(() =>
     {
         if (GameAssetManager.TryFindUnusedID(category, out var result))
         {
             action.Invoke(result);
         }
         else
         {
             MessageBox.Show(LocalizationManager.Current.Interface["Control_FindUnusedID_Failed"]);
         }
     }), "Control_FindUnusedID", PackIconMaterialKind.Magnify));
 }
Esempio n. 11
0
 ushort resolve(ushort id)
 {
     if (GameAssetManager.TryGetAsset <GameSpawnAsset>(ID, out var asset))
     {
         asset.resolve(out id, out bool isSpawn);
         if (isSpawn)
         {
             id = resolve(id);
         }
         return(id);
     }
     else
     {
         return(0);
     }
 }
        public override string FormatCondition(Simulation simulation)
        {
            string text = Localization;

            if (string.IsNullOrEmpty(text))
            {
                if (GameAssetManager.TryGetAsset<GameCurrencyAsset>(Guid.Parse(GUID), out var asset) && !string.IsNullOrEmpty(asset.valueFormat))
                {
                    text = asset.valueFormat;
                }
                else
                {
                    text = LocalizationManager.Current.Simulation["Quest"].Translate("Default_Condition_Currency");
                }
            }

            return string.Format(text, Value);
        }
Esempio n. 13
0
        public override string FormatReward(Simulation simulation)
        {
            string text = Localization;

            if (string.IsNullOrEmpty(text))
            {
                text = LocalizationManager.Current.Simulation["Quest"].Translate("Default_Reward_Item");
            }

            string itemName;

            if (GameAssetManager.TryGetAsset <GameItemAsset>(ID, out var asset))
            {
                itemName = asset.name;
            }
            else
            {
                itemName = ID.ToString();
            }

            return(string.Format(text, Amount, itemName));
        }
Esempio n. 14
0
        public override string FormatCondition(Simulation simulation)
        {
            string text = Localization;

            if (string.IsNullOrEmpty(text))
            {
                text = LocalizationManager.Current.Simulation["Quest"].Translate("Default_Condition_Item");
            }

            System.Collections.Generic.IEnumerable <Simulation.Item> found = simulation.Items.Where(d => d.ID == ID);

            string idOrName;

            if (GameAssetManager.TryGetAsset <GameItemAsset>(ID, out var gameAsset))
            {
                idOrName = gameAsset.name;
            }
            else
            {
                idOrName = ID.ToString();
            }

            return(string.Format(text, found.Count(), Amount, idOrName));
        }
Esempio n. 15
0
        void SetupAssets()
        {
            ClearList();

            IEnumerable <GameAsset> assets = GameAssetManager.GetAllAssets(assetType);

            IEnumerable <GameAsset> orderedAssets;

            switch (orderMode)
            {
            case EOrderByMode.ID_A:
                orderedAssets = assets.OrderBy(d => d.origin).ThenBy(d => d.id);
                break;

            case EOrderByMode.ID_D:
                orderedAssets = assets.OrderBy(d => d.origin).ThenByDescending(d => d.id);
                break;

            case EOrderByMode.Name_A:
                orderedAssets = assets.OrderBy(d => d.origin).ThenBy(d =>
                {
                    if (d is IHasNameOverride nameOverride)
                    {
                        return(nameOverride.NameOverride);
                    }
                    else
                    {
                        return(d.name);
                    }
                });
                break;

            case EOrderByMode.Name_D:
                orderedAssets = assets.OrderBy(d => d.origin).ThenByDescending(d =>
                {
                    if (d is IHasNameOverride nameOverride)
                    {
                        return(nameOverride.NameOverride);
                    }
                    else
                    {
                        return(d.name);
                    }
                });
                break;

            default:
                orderedAssets = assets;
                break;
            }

            foreach (var asset in orderedAssets)
            {
                Grid g = new Grid()
                {
                    Margin = new Thickness(5),
                    Tag    = asset
                };

                g.ColumnDefinitions.Add(new ColumnDefinition()
                {
                    Width = GridLength.Auto
                });
                g.ColumnDefinitions.Add(new ColumnDefinition()
                {
                    Width = GridLength.Auto
                });

                TextBlock tb = new TextBlock();
                Label     l  = new Label()
                {
                    Content = tb
                };
                TextBlock tbid = new TextBlock();
                Label     lid  = new Label()
                {
                    Content = tbid
                };

                if (asset is IHasNameOverride gda)
                {
                    markup.Markup(tb, gda.NameOverride);
                }
                else
                {
                    markup.Markup(tb, asset.name);
                }

                tbid.Text = asset.id.ToString();

                g.Children.Add(l);
                g.Children.Add(lid);

                if (asset is IHasIcon hasIcon)
                {
                    Image icon = new Image()
                    {
                        Source = ThumbnailManager.CreateThumbnail(hasIcon.ImagePath),
                        Width  = 32,
                        Height = 32,
                        Margin = new Thickness(1)
                    };

                    g.ColumnDefinitions.Add(new ColumnDefinition()
                    {
                        Width = GridLength.Auto
                    });
                    g.Children.Add(icon);

                    Grid.SetColumn(icon, 0);
                    Grid.SetColumn(lid, 1);
                    Grid.SetColumn(l, 2);
                }
                else if (asset is IHasThumbnail hasThumbnail)
                {
                    Image icon = new Image()
                    {
                        Source = hasThumbnail.Thumbnail,
                        Width  = 32,
                        Height = 32,
                        Margin = new Thickness(1)
                    };

                    g.ColumnDefinitions.Add(new ColumnDefinition()
                    {
                        Width = GridLength.Auto
                    });
                    g.Children.Add(icon);

                    Grid.SetColumn(icon, 0);
                    Grid.SetColumn(lid, 1);
                    Grid.SetColumn(l, 2);
                }
                else if (asset is IHasAnimatedThumbnail hasAnimatedThumbnail)
                {
                    var thumbs = hasAnimatedThumbnail.Thumbnails.ToList();

                    if (thumbs.Count > 0)
                    {
                        Image icon = new Image()
                        {
                            Source = thumbs.First(),
                            Width  = 32,
                            Height = 32,
                            Margin = new Thickness(1)
                        };

                        DispatcherTimer dt = new DispatcherTimer()
                        {
                            Interval = new TimeSpan(0, 0, 3)
                        };
                        int last = 0;
                        dt.Tick += (sender, e) =>
                        {
                            last++;
                            if (last >= thumbs.Count)
                            {
                                last = 0;
                            }

                            icon.Source = thumbs[last];
                        };
                        dt.Start();

                        g.ColumnDefinitions.Add(new ColumnDefinition()
                        {
                            Width = GridLength.Auto
                        });
                        g.Children.Add(icon);

                        Grid.SetColumn(icon, 0);
                        Grid.SetColumn(lid, 1);
                        Grid.SetColumn(l, 2);
                    }
                    else
                    {
                        Grid.SetColumn(lid, 0);
                        Grid.SetColumn(l, 1);
                    }
                }
                else
                {
                    tpbarGrid.ColumnDefinitions[0].Width = new GridLength(0);
                    Grid.SetColumn(lid, 0);
                    Grid.SetColumn(l, 1);
                }

                if (asset is IHasToolTip hasToolTip)
                {
                    g.ToolTip = hasToolTip.ToolTipContent;
                }
                else if (asset is IHasTextToolTip hasTextToolTip)
                {
                    var sp = new StackPanel()
                    {
                        Orientation = Orientation.Vertical
                    };

                    void addLabel(string text)
                    {
                        sp.Children.Add(new Label()
                        {
                            Content = new TextBlock()
                            {
                                Text = text,
                                VerticalAlignment   = VerticalAlignment.Center,
                                HorizontalAlignment = HorizontalAlignment.Left,
                                TextAlignment       = TextAlignment.Left
                            },
                            VerticalAlignment   = VerticalAlignment.Center,
                            HorizontalAlignment = HorizontalAlignment.Left,
                            Margin = new Thickness(5)
                        });
                    }

                    foreach (var line in hasTextToolTip.GetToolTipLines())
                    {
                        addLabel(line);
                    }

                    g.ToolTip = sp;
                }

                g.MouseDown += (sender, e) =>
                {
                    DialogResult  = true;
                    SelectedAsset = asset;
                    Close();
                };
                stack.Children.Add(g);
            }
        }
Esempio n. 16
0
        void SetupAssets()
        {
            ClearList();

            IEnumerable <GameAsset> assets = GameAssetManager.GetAllAssets(assetType);

            IEnumerable <GameAsset> orderedAssets;

            switch (orderMode)
            {
            case EOrderByMode.ID_A:
                orderedAssets = assets.OrderBy(d => d.origin).ThenBy(d => d.GUIDOverID ? (object)d.guid : (object)d.id);
                break;

            case EOrderByMode.ID_D:
                orderedAssets = assets.OrderBy(d => d.origin).ThenByDescending(d => d.GUIDOverID ? (object)d.guid : (object)d.id);
                break;

            case EOrderByMode.Name_A:
                orderedAssets = assets.OrderBy(d => d.origin).ThenBy(d =>
                {
                    if (d is IHasNameOverride nameOverride)
                    {
                        return(nameOverride.NameOverride);
                    }
                    else
                    {
                        return(d.name);
                    }
                });
                break;

            case EOrderByMode.Name_D:
                orderedAssets = assets.OrderBy(d => d.origin).ThenByDescending(d =>
                {
                    if (d is IHasNameOverride nameOverride)
                    {
                        return(nameOverride.NameOverride);
                    }
                    else
                    {
                        return(d.name);
                    }
                });
                break;

            default:
                orderedAssets = assets;
                break;
            }

            if (typeof(ICreatable).IsAssignableFrom(assetType))
            {
                addEntryButton.Visibility = Visibility.Visible;

                addEntryButton.Command = new BaseCommand(() =>
                {
                    GameAsset createdA = (GameAsset)Activator.CreateInstance(assetType);

                    if (createdA is ICreatable createable)
                    {
                        createable.OnCreate();
                    }

                    Reorder();
                });
            }
            else
            {
                addEntryButton.Visibility = Visibility.Collapsed;
            }

            foreach (var asset in orderedAssets)
            {
                Grid g = new Grid()
                {
                    Margin = new Thickness(5),
                    Tag    = asset
                };

                g.ColumnDefinitions.Add(new ColumnDefinition()
                {
                    Width = GridLength.Auto
                });
                g.ColumnDefinitions.Add(new ColumnDefinition()
                {
                    Width = GridLength.Auto
                });
                g.ColumnDefinitions.Add(new ColumnDefinition()
                {
                    Width = GridLength.Auto
                });
                g.ColumnDefinitions.Add(new ColumnDefinition()
                {
                    Width = GridLength.Auto
                });

                TextBlock tb = new TextBlock();
                Label     l  = new Label()
                {
                    Content           = tb,
                    VerticalAlignment = VerticalAlignment.Center
                };
                TextBlock tbid = new TextBlock();
                Label     lid  = new Label()
                {
                    Content           = tbid,
                    VerticalAlignment = VerticalAlignment.Center,
                    MaxWidth          = 69
                };

                if (asset is IHasNameOverride gda)
                {
                    markup.Markup(tb, gda.NameOverride);
                }
                else
                {
                    markup.Markup(tb, asset.name);
                }

                if (asset.GUIDOverID)
                {
                    tbid.Text    = asset.guid.ToString("N");
                    tbid.ToolTip = tbid.Text;
                }
                else
                {
                    tbid.Text = asset.id.ToString();
                }

                g.Children.Add(l);
                g.Children.Add(lid);

                Grid editableGrid = new Grid()
                {
                    HorizontalAlignment = HorizontalAlignment.Right, Margin = new Thickness(5)
                };
                Grid deletableGrid = new Grid()
                {
                    HorizontalAlignment = HorizontalAlignment.Right, Margin = new Thickness(5)
                };

                g.Children.Add(editableGrid);
                g.Children.Add(deletableGrid);

                if (asset is IEditable editable)
                {
                    Button editButton = new Button()
                    {
                        ToolTip = LocalizationManager.Current.Interface["AssetPicker_Editable_Edit_ToolTip"]
                    };

                    editButton.Content = new PackIconMaterial()
                    {
                        Kind       = PackIconMaterialKind.Pencil,
                        Foreground = Application.Current.Resources["AccentColor"] as System.Windows.Media.Brush,
                        Width      = 16,
                        Height     = 16
                    };

                    editButton.Command = new BaseCommand(() =>
                    {
                        editable.Edit(this);

                        if (asset is IHasNameOverride gda1)
                        {
                            markup.Markup(tb, gda1.NameOverride);
                        }
                        else
                        {
                            markup.Markup(tb, asset.name);
                        }

                        if (asset.GUIDOverID)
                        {
                            tbid.Text    = asset.guid.ToString("N");
                            tbid.ToolTip = tbid.Text;
                        }
                        else
                        {
                            tbid.Text = asset.id.ToString();
                        }
                    });

                    editableGrid.Children.Add(editButton);
                }

                if (asset is IDeletable deletable)
                {
                    Button deleteButton = new Button()
                    {
                        ToolTip = LocalizationManager.Current.Interface["AssetPicker_Deletable_Delete_ToolTip"]
                    };

                    deleteButton.Content = new PackIconMaterial()
                    {
                        Kind       = PackIconMaterialKind.TrashCan,
                        Foreground = Application.Current.Resources["AccentColor"] as System.Windows.Media.Brush,
                        Width      = 16,
                        Height     = 16
                    };

                    deleteButton.Command = new BaseCommand(() =>
                    {
                        deletable.OnDelete();

                        Reorder();
                    });

                    deletableGrid.Children.Add(deleteButton);
                }

                if (asset is IHasIcon hasIcon)
                {
                    Image icon = new Image()
                    {
                        Source            = ThumbnailManager.CreateThumbnail(hasIcon.ImagePath),
                        Width             = 32,
                        Height            = 32,
                        Margin            = new Thickness(1),
                        VerticalAlignment = VerticalAlignment.Center
                    };

                    g.ColumnDefinitions.Add(new ColumnDefinition()
                    {
                        Width = GridLength.Auto
                    });
                    g.Children.Add(icon);

                    Grid.SetColumn(icon, 0);
                    Grid.SetColumn(lid, 1);
                    Grid.SetColumn(l, 2);
                    Grid.SetColumn(editableGrid, 3);
                    Grid.SetColumn(deletableGrid, 4);
                }
                else if (asset is IHasThumbnail hasThumbnail)
                {
                    Image icon = new Image()
                    {
                        Source            = hasThumbnail.Thumbnail,
                        Width             = 32,
                        Height            = 32,
                        Margin            = new Thickness(1),
                        VerticalAlignment = VerticalAlignment.Center
                    };

                    g.ColumnDefinitions.Add(new ColumnDefinition()
                    {
                        Width = GridLength.Auto
                    });
                    g.Children.Add(icon);

                    Grid.SetColumn(icon, 0);
                    Grid.SetColumn(lid, 1);
                    Grid.SetColumn(l, 2);
                    Grid.SetColumn(editableGrid, 3);
                    Grid.SetColumn(deletableGrid, 4);
                }
                else if (asset is IHasAnimatedThumbnail hasAnimatedThumbnail)
                {
                    var thumbs = hasAnimatedThumbnail.Thumbnails.ToList();

                    if (thumbs.Count > 0)
                    {
                        Image icon = new Image()
                        {
                            Source            = thumbs.First(),
                            Width             = 32,
                            Height            = 32,
                            Margin            = new Thickness(1),
                            VerticalAlignment = VerticalAlignment.Center
                        };

                        DispatcherTimer dt = new DispatcherTimer()
                        {
                            Interval = new TimeSpan(0, 0, 3)
                        };
                        int last = 0;
                        dt.Tick += (sender, e) =>
                        {
                            last++;
                            if (last >= thumbs.Count)
                            {
                                last = 0;
                            }

                            icon.Source = thumbs[last];
                        };
                        dt.Start();

                        g.ColumnDefinitions.Add(new ColumnDefinition()
                        {
                            Width = GridLength.Auto
                        });
                        g.Children.Add(icon);

                        Grid.SetColumn(icon, 0);
                        Grid.SetColumn(lid, 1);
                        Grid.SetColumn(l, 2);
                        Grid.SetColumn(editableGrid, 3);
                        Grid.SetColumn(deletableGrid, 4);
                    }
                    else
                    {
                        Grid.SetColumn(lid, 0);
                        Grid.SetColumn(l, 1);
                        Grid.SetColumn(editableGrid, 2);
                        Grid.SetColumn(deletableGrid, 3);
                    }
                }
                else
                {
                    tpbarGrid.ColumnDefinitions[0].Width = new GridLength(0);
                    Grid.SetColumn(lid, 0);
                    Grid.SetColumn(l, 1);
                    Grid.SetColumn(editableGrid, 2);
                    Grid.SetColumn(deletableGrid, 3);
                }

                if (asset is IHasToolTip hasToolTip)
                {
                    g.ToolTip = hasToolTip.ToolTipContent;
                }
                else if (asset is IHasTextToolTip hasTextToolTip)
                {
                    var sp = new StackPanel()
                    {
                        Orientation = Orientation.Vertical
                    };

                    void addLabel(string text)
                    {
                        sp.Children.Add(new Label()
                        {
                            Content = new TextBlock()
                            {
                                Text = text,
                                VerticalAlignment   = VerticalAlignment.Center,
                                HorizontalAlignment = HorizontalAlignment.Left,
                                TextAlignment       = TextAlignment.Left
                            },
                            VerticalAlignment   = VerticalAlignment.Center,
                            HorizontalAlignment = HorizontalAlignment.Left,
                            Margin = new Thickness(5)
                        });
                    }

                    foreach (var line in hasTextToolTip.GetToolTipLines())
                    {
                        addLabel(line);
                    }

                    g.ToolTip = sp;
                }

                g.MouseDown += (sender, e) =>
                {
                    DialogResult  = true;
                    SelectedAsset = asset;
                    Close();
                };
                stack.Children.Add(g);
            }
        }
Esempio n. 17
0
        public static void FindMistakes()
        {
            if (CheckMistakes == null)
            {
                CheckMistakes = new HashSet <Mistake>();
                string[] nspaces =
                {
                    "BowieD.Unturned.NPCMaker.Mistakes.Character",
                    "BowieD.Unturned.NPCMaker.Mistakes.Dialogue",
                    "BowieD.Unturned.NPCMaker.Mistakes.Vendor",
                    "BowieD.Unturned.NPCMaker.Mistakes.Quest",
                    "BowieD.Unturned.NPCMaker.Mistakes.Currencies"
                };
                IEnumerable <Type> q = from t in Assembly.GetExecutingAssembly().GetTypes() where t.IsClass && !t.IsAbstract && nspaces.Contains(t.Namespace) select t;
                foreach (Type t in q)
                {
                    try
                    {
                        object mistake = Activator.CreateInstance(t);
                        if (mistake is Mistake mist)
                        {
                            CheckMistakes.Add(mist);
                        }
                    }
                    catch { }
                }
            }
            MainWindow.Instance.lstMistakes.Items.Clear();
            FoundMistakes.Clear();
            foreach (Mistake m in CheckMistakes)
            {
                IEnumerable <Mistake> mistakes = m.CheckMistake();
                foreach (Mistake fm in mistakes)
                {
                    string descKey = $"{fm.MistakeName}_Desc";
                    if (fm.MistakeDesc == null)
                    {
                        if (LocalizationManager.Current.Mistakes.TryGetValue(descKey, out string desc))
                        {
                            fm.MistakeDesc = desc;
                        }
                    }

                    string solutionKey = $"{fm.MistakeName}_Solution";
                    if (fm.MistakeSolution == null)
                    {
                        if (LocalizationManager.Current.Mistakes.TryGetValue(solutionKey, out string solution))
                        {
                            fm.MistakeSolution = solution;
                        }
                    }

                    FoundMistakes.Add(fm);
                    MainWindow.Instance.lstMistakes.Items.Add(fm);
                }
            }

            foreach (NPCDialogue dialogue in MainWindow.CurrentProject.data.dialogues)
            {
                if (GameAssetManager.TryGetAsset <GameAsset>((asset) =>
                {
                    if (asset is GameDialogueAsset gda)
                    {
                        if (gda.dialogue != null && gda.dialogue == dialogue)
                        {
                            return(false);
                        }

                        return(gda.id == dialogue.ID);
                    }
                    else
                    {
                        return(asset.Category == EGameAssetCategory.NPC && asset.id == dialogue.ID);
                    }
                }, out _))
                {
                    MainWindow.Instance.lstMistakes.Items.Add(new Mistake()
                    {
                        MistakeDesc = LocalizationManager.Current.Mistakes.Translate("deep_dialogue", dialogue.ID),
                        Importance  = IMPORTANCE.WARNING
                    });
                }
            }

            foreach (NPCVendor vendor in MainWindow.CurrentProject.data.vendors)
            {
                if (GameAssetManager.TryGetAsset <GameAsset>((asset) =>
                {
                    if (asset is GameVendorAsset gva)
                    {
                        if (gva.vendor != null && gva.vendor == vendor)
                        {
                            return(false);
                        }

                        return(gva.id == vendor.ID);
                    }
                    else
                    {
                        return(asset.Category == EGameAssetCategory.NPC && asset.id == vendor.ID);
                    }
                }, out _))
                {
                    MainWindow.Instance.lstMistakes.Items.Add(new Mistake()
                    {
                        MistakeDesc = LocalizationManager.Current.Mistakes.Translate("deep_vendor", vendor.ID),
                        Importance  = IMPORTANCE.WARNING
                    });
                }
                foreach (VendorItem it in vendor.items)
                {
                    if (it.type == ItemType.VEHICLE)
                    {
                        if (GameAssetManager.HasImportedAssets && !GameAssetManager.TryGetAsset <GameVehicleAsset>(it.id, out _))
                        {
                            MainWindow.Instance.lstMistakes.Items.Add(new Mistake()
                            {
                                MistakeDesc = LocalizationManager.Current.Mistakes.Translate("deep_vehicle", it.id),
                                Importance  = IMPORTANCE.WARNING
                            });
                            continue;
                        }
                    }
                    if (it.type == ItemType.ITEM)
                    {
                        if (GameAssetManager.HasImportedAssets && !GameAssetManager.TryGetAsset <GameItemAsset>(it.id, out _))
                        {
                            MainWindow.Instance.lstMistakes.Items.Add(new Mistake()
                            {
                                MistakeDesc = LocalizationManager.Current.Mistakes.Translate("deep_item", it.id),
                                Importance  = IMPORTANCE.WARNING
                            });
                            continue;
                        }
                    }
                }
            }

            foreach (NPCQuest quest in MainWindow.CurrentProject.data.quests)
            {
                if (GameAssetManager.TryGetAsset <GameAsset>((asset) =>
                {
                    if (asset is GameQuestAsset gqa)
                    {
                        if (gqa.quest != null && gqa.quest == quest)
                        {
                            return(false);
                        }

                        return(gqa.id == quest.ID);
                    }
                    else
                    {
                        return(asset.Category == EGameAssetCategory.NPC && asset.id == quest.ID);
                    }
                }, out _))
                {
                    MainWindow.Instance.lstMistakes.Items.Add(new Mistake()
                    {
                        MistakeDesc = LocalizationManager.Current.Mistakes.Translate("deep_quest", quest.ID),
                        Importance  = IMPORTANCE.WARNING
                    });
                }
            }

            foreach (NPCCharacter character in MainWindow.CurrentProject.data.characters)
            {
                if (character.ID > 0)
                {
                    if (GameAssetManager.TryGetAsset <GameAsset>((asset) =>
                    {
                        if (asset is GameNPCAsset gva)
                        {
                            if (gva.character != null && gva.character == character)
                            {
                                return(false);
                            }

                            return(gva.id == character.ID);
                        }
                        else
                        {
                            return(asset.Category == EGameAssetCategory.OBJECT && asset.id == character.ID);
                        }
                    }, out _))
                    {
                        MainWindow.Instance.lstMistakes.Items.Add(new Mistake()
                        {
                            MistakeDesc = LocalizationManager.Current.Mistakes.Translate("deep_char", character.ID),
                            Importance  = IMPORTANCE.WARNING
                        });
                    }
                }
            }

            if (MainWindow.Instance.lstMistakes.Items.Count == 0)
            {
                MainWindow.Instance.lstMistakes.Visibility   = Visibility.Collapsed;
                MainWindow.Instance.noErrorsLabel.Visibility = Visibility.Visible;
            }
            else
            {
                MainWindow.Instance.lstMistakes.Visibility   = Visibility.Visible;
                MainWindow.Instance.noErrorsLabel.Visibility = Visibility.Collapsed;
            }
        }
Esempio n. 18
0
        public void DisplayPage(NPCMessage message, int i, int page)
        {
            Simulation.OnPropertyChanged("");

            formatter.Markup(mainText, FormatText(message.pages[page]));

            lastPage = page;

            if (!canDisplayNextPage)
            {
                foreach (NPCResponse res in Dialogue.Responses)
                {
                    if ((res.VisibleInAll || res.visibleIn.Length <= i || res.visibleIn[i] == 1) && res.conditions.All(d => d.Check(Simulation)))
                    {
                        Border border = new Border()
                        {
                            BorderBrush     = App.Current.Resources["AccentColor"] as Brush,
                            BorderThickness = new Thickness(1),
                            CornerRadius    = new CornerRadius(4),
                            Margin          = new Thickness(0, 2.5, 0, 2.5)
                        };

                        border.PreviewMouseLeftButtonDown += (sender, e) =>
                        {
                            bool shouldClose = true;

                            if (res.openQuestId > 0)
                            {
                                shouldClose = false;

                                NPCQuest questAsset;

                                if (GameAssetManager.TryGetAsset <GameQuestAsset>(res.openQuestId, out var gameQuestAsset))
                                {
                                    questAsset = gameQuestAsset.quest;
                                }
                                else
                                {
                                    MessageBox.Show(LocalizationManager.Current.Simulation["Dialogue"].Translate("Error_QuestNotFound", res.openQuestId));
                                    Close();
                                    return;
                                }

                                Quest_Status questStatus = Simulation.GetQuestStatus(questAsset.ID);

                                QuestView_Window.EMode _mode;

                                switch (questStatus)
                                {
                                case Quest_Status.Ready:
                                    _mode = QuestView_Window.EMode.END_QUEST;
                                    break;

                                default:
                                    _mode = QuestView_Window.EMode.BEGIN_QUEST;
                                    break;
                                }

                                QuestView_Window qvw = new QuestView_Window(Character, Simulation, questAsset, _mode);
                                if (qvw.ShowDialog() == true)
                                {
                                    foreach (NPC.Conditions.Condition c in res.conditions)
                                    {
                                        c.Apply(Simulation);
                                    }

                                    foreach (NPC.Rewards.Reward r in res.rewards)
                                    {
                                        r.Give(Simulation);
                                    }

                                    if (res.openDialogueId > 0)
                                    {
                                        Previous = Start;

                                        NPCDialogue next;

                                        if (GameAssetManager.TryGetAsset <GameDialogueAsset>(res.openDialogueId, out var gameDialogueAsset))
                                        {
                                            next = gameDialogueAsset.dialogue;
                                        }
                                        else
                                        {
                                            MessageBox.Show(LocalizationManager.Current.Simulation["Dialogue"].Translate("Error_DialogueNotFound", res.openDialogueId));
                                            Close();
                                            return;
                                        }

                                        Dialogue = next;

                                        Display();
                                    }
                                }

                                return;
                            }
                            else if (res.openVendorId > 0)
                            {
                                shouldClose = false;

                                NPCVendor vendorAsset;

                                if (GameAssetManager.TryGetAsset <GameVendorAsset>(res.openVendorId, out var gameVendorAsset))
                                {
                                    vendorAsset = gameVendorAsset.vendor;
                                }
                                else
                                {
                                    MessageBox.Show(LocalizationManager.Current.Simulation["Dialogue"].Translate("Error_VendorNotFound", res.openVendorId));
                                    Close();
                                    return;
                                }

                                VendorView_Window qvw = new VendorView_Window(Character, Simulation, vendorAsset);

                                qvw.ShowDialog();

                                foreach (NPC.Conditions.Condition c in res.conditions)
                                {
                                    c.Apply(Simulation);
                                }

                                foreach (NPC.Rewards.Reward r in res.rewards)
                                {
                                    r.Give(Simulation);
                                }

                                if (res.openDialogueId > 0)
                                {
                                    Previous = Start;

                                    NPCDialogue next;

                                    if (GameAssetManager.TryGetAsset <GameDialogueAsset>(res.openDialogueId, out var gameDialogueAsset))
                                    {
                                        next = gameDialogueAsset.dialogue;
                                    }
                                    else
                                    {
                                        MessageBox.Show(LocalizationManager.Current.Simulation["Dialogue"].Translate("Error_DialogueNotFound", res.openDialogueId));
                                        Close();
                                        return;
                                    }

                                    Dialogue = next;

                                    Display();
                                }

                                return;
                            }

                            foreach (NPC.Conditions.Condition c in res.conditions)
                            {
                                c.Apply(Simulation);
                            }

                            foreach (NPC.Rewards.Reward r in res.rewards)
                            {
                                r.Give(Simulation);
                            }

                            if (res.openDialogueId > 0)
                            {
                                Previous = Dialogue;

                                NPCDialogue next;

                                if (GameAssetManager.TryGetAsset <GameDialogueAsset>(res.openDialogueId, out var gameDialogueAsset))
                                {
                                    next = gameDialogueAsset.dialogue;
                                }
                                else
                                {
                                    MessageBox.Show(LocalizationManager.Current.Simulation["Dialogue"].Translate("Error_DialogueNotFound", res.openDialogueId));
                                    Close();
                                    return;
                                }

                                Display();
                            }
                            else if (shouldClose)
                            {
                                Close();
                            }
                        };

                        Grid g = new Grid();


                        TextBlock tb = new TextBlock();
                        formatter.Markup(tb, FormatText(res.mainText));

                        Label l = new Label()
                        {
                            Content             = tb,
                            HorizontalAlignment = HorizontalAlignment.Center,
                            Margin = new Thickness(5)
                        };

                        g.Children.Add(l);

                        PackIconMaterial icon = null;

                        if (res.openQuestId > 0)
                        {
                            switch (Simulation.GetQuestStatus(res.openQuestId))
                            {
                            case Quest_Status.Ready:
                                icon = new PackIconMaterial()
                                {
                                    Kind = PackIconMaterialKind.Help
                                };
                                break;

                            default:
                                icon = new PackIconMaterial()
                                {
                                    Kind = PackIconMaterialKind.Exclamation
                                };
                                break;
                            }
                        }
                        else if (res.openVendorId > 0)
                        {
                            icon = new PackIconMaterial()
                            {
                                Kind = PackIconMaterialKind.ShoppingOutline
                            };
                        }

                        if (icon != null)
                        {
                            icon.VerticalAlignment   = VerticalAlignment.Center;
                            icon.HorizontalAlignment = HorizontalAlignment.Left;
                            icon.Margin     = new Thickness(5);
                            icon.Foreground = App.Current.Resources["AccentColor"] as Brush;

                            g.Children.Add(icon);
                        }

                        border.Child = g;
                        responsesPanel.Children.Add(border);
                    }
                }
            }
        }
        public VendorView_Window(NPCCharacter character, Simulation simulation, NPCVendor vendor)
        {
            InitializeComponent();

            Vendor     = vendor;
            Simulation = simulation;

            formatter.Markup(title, SimulationTool.ReplacePlaceholders(character, simulation, vendor.Title));
            formatter.Markup(desc, SimulationTool.ReplacePlaceholders(character, simulation, vendor.vendorDescription));

            UIElement createElement(VendorItem item)
            {
                Button b = new Button()
                {
                    Margin    = new Thickness(2.5),
                    MinHeight = 64,
                    HorizontalContentAlignment = HorizontalAlignment.Stretch,
                    VerticalContentAlignment   = VerticalAlignment.Stretch
                };

                Grid g = new Grid();

                g.ColumnDefinitions.Add(new ColumnDefinition()
                {
                    Width = GridLength.Auto
                });
                g.ColumnDefinitions.Add(new ColumnDefinition());

                TextBlock tb = new TextBlock();

                formatter.Markup(tb, LocalizationManager.Current.Simulation["Vendor"].Translate("Item_Cost", item.cost));

                Label l = new Label()
                {
                    HorizontalAlignment = HorizontalAlignment.Right,
                    VerticalAlignment   = VerticalAlignment.Bottom,
                    Content             = tb
                };

                string nameKey;

                switch (item.type)
                {
                case ItemType.ITEM:
                    nameKey = "Item_Name";
                    break;

                case ItemType.VEHICLE:
                    nameKey = "Vehicle_Name";
                    break;

                default:
                    throw new Exception("Invalid ItemType");
                }

                TextBlock tb2 = new TextBlock();

                Label l2 = new Label()
                {
                    HorizontalAlignment = HorizontalAlignment.Left,
                    VerticalAlignment   = VerticalAlignment.Top,
                    Content             = tb2
                };

                TextBlock tb3 = new TextBlock()
                {
                    FontSize = 9
                };

                Label l3 = new Label()
                {
                    HorizontalAlignment = HorizontalAlignment.Left,
                    VerticalAlignment   = VerticalAlignment.Top,
                    Content             = tb3
                };

                Grid g2 = new Grid();

                g2.RowDefinitions.Add(new RowDefinition());
                g2.RowDefinitions.Add(new RowDefinition());
                g2.RowDefinitions.Add(new RowDefinition());

                g2.Children.Add(l);
                g2.Children.Add(l2);
                g2.Children.Add(l3);

                Grid.SetRow(l2, 0);
                Grid.SetRow(l3, 1);
                Grid.SetRow(l, 2);

                g.Children.Add(g2);

                Grid.SetColumn(g2, 1);

                if (item.type == ItemType.ITEM && GameAssetManager.TryGetAsset <GameItemAsset>(item.id, out var asset))
                {
                    g.Children.Add(new Image()
                    {
                        Source = new BitmapImage(asset.ImagePath),
                        Width  = 48,
                        Height = 48,
                        Margin = new Thickness(5)
                    });

                    formatter.Markup(tb2, asset.name);
                    formatter.Markup(tb3, asset.itemDescription);
                }
                else
                {
                    formatter.Markup(tb2, LocalizationManager.Current.Simulation["Vendor"].Translate(nameKey, item.id));
                    tb3.Text = string.Empty;
                }

                b.Content = g;

                return(b);
            }

            System.Collections.Generic.IEnumerable <VendorItem> buyItems  = vendor.BuyItems.Where(d => d.conditions.All(c => c.Check(simulation)));
            System.Collections.Generic.IEnumerable <VendorItem> sellItems = vendor.SellItems.Where(d => d.conditions.All(c => c.Check(simulation)));

            if (!vendor.disableSorting) // enable sorting
            {
                buyItems  = buyItems.OrderBy(v => v.id);
                sellItems = sellItems.OrderBy(v => v.id);
            }

            foreach (VendorItem b in buyItems)
            {
                UIElement elem = createElement(b);

                elem.PreviewMouseLeftButtonDown += (sender, e) =>
                {
                    if (Simulation.Items.Any(d => d.ID == b.id))
                    {
                        Simulation.Items.Remove(Simulation.Items.First(d => d.ID == b.id));
                        changeCurrency(b.cost, false);
                    }
                };

                buyingPanel.Children.Add(elem);
            }

            foreach (VendorItem s in sellItems)
            {
                UIElement elem = createElement(s);

                elem.PreviewMouseLeftButtonDown += (sender, e) =>
                {
                    if (getCurrency() >= s.cost)
                    {
                        changeCurrency(s.cost, true);
                        switch (s.type)
                        {
                        case ItemType.ITEM:
                        {
                            Simulation.Items.Add(new Simulation.Item()
                                {
                                    ID      = s.id,
                                    Amount  = 1,
                                    Quality = 100
                                });
                        }
                        break;

                        case ItemType.VEHICLE:
                        {
                            MessageBox.Show(LocalizationManager.Current.Simulation["Vendor"].Translate("Vehicle_Spawned", s.id, s.spawnPointID));
                        }
                        break;
                        }
                    }
                };

                sellingPanel.Children.Add(elem);
            }

            if (string.IsNullOrEmpty(vendor.currency))
            {
                isCurrency = false;
            }
            else
            {
                isCurrency = true;
            }

            setupCurrency();

            updateCurrency();
        }
Esempio n. 20
0
        public override void PostLoad(Universal_RewardEditor editor)
        {
            var idControl       = editor.GetAssociatedControl <MahApps.Metro.Controls.NumericUpDown>("ID");
            var sightControl    = editor.GetAssociatedControl <Controls.OptionalUInt16ValueControl>("Sight");
            var barrelControl   = editor.GetAssociatedControl <Controls.OptionalUInt16ValueControl>("Barrel");
            var magazineControl = editor.GetAssociatedControl <Controls.OptionalUInt16ValueControl>("Magazine");
            var gripControl     = editor.GetAssociatedControl <Controls.OptionalUInt16ValueControl>("Grip");
            var tacticalControl = editor.GetAssociatedControl <Controls.OptionalUInt16ValueControl>("Tactical");
            var ammoControl     = editor.GetAssociatedControl <Controls.OptionalByteValueControl>("Ammo");

            void check(ushort ID)
            {
                if (ID > 0)
                {
                    if (GameAssetManager.TryGetAsset <GameItemGunAsset>(ID, out var gunAsset))
                    {
                        if (gunAsset.hasSight)
                        {
                            sightControl.Visibility = System.Windows.Visibility.Visible;
                        }
                        else
                        {
                            sightControl.Visibility         = System.Windows.Visibility.Collapsed;
                            sightControl.checkbox.IsChecked = false;
                        }

                        if (gunAsset.hasBarrel)
                        {
                            barrelControl.Visibility = System.Windows.Visibility.Visible;
                        }
                        else
                        {
                            barrelControl.Visibility         = System.Windows.Visibility.Collapsed;
                            barrelControl.checkbox.IsChecked = false;
                        }

                        magazineControl.Visibility = System.Windows.Visibility.Visible;

                        if (gunAsset.hasGrip)
                        {
                            gripControl.Visibility = System.Windows.Visibility.Visible;
                        }
                        else
                        {
                            gripControl.Visibility         = System.Windows.Visibility.Collapsed;
                            gripControl.checkbox.IsChecked = false;
                        }

                        if (gunAsset.hasTactical)
                        {
                            tacticalControl.Visibility = System.Windows.Visibility.Visible;
                        }
                        else
                        {
                            tacticalControl.Visibility         = System.Windows.Visibility.Collapsed;
                            tacticalControl.checkbox.IsChecked = false;
                        }

                        ammoControl.Visibility = System.Windows.Visibility.Visible;
                    }
                    else if (GameAssetManager.TryGetAsset <GameItemAsset>(ID, out var itemAsset))
                    {
                        sightControl.Visibility    = System.Windows.Visibility.Collapsed;
                        barrelControl.Visibility   = System.Windows.Visibility.Collapsed;
                        magazineControl.Visibility = System.Windows.Visibility.Collapsed;
                        gripControl.Visibility     = System.Windows.Visibility.Collapsed;
                        tacticalControl.Visibility = System.Windows.Visibility.Collapsed;
                        ammoControl.Visibility     = System.Windows.Visibility.Collapsed;

                        sightControl.checkbox.IsChecked    = false;
                        barrelControl.checkbox.IsChecked   = false;
                        magazineControl.checkbox.IsChecked = false;
                        gripControl.checkbox.IsChecked     = false;
                        tacticalControl.checkbox.IsChecked = false;
                        ammoControl.checkbox.IsChecked     = false;
                    }
                    else
                    {
                        sightControl.Visibility    = System.Windows.Visibility.Visible;
                        barrelControl.Visibility   = System.Windows.Visibility.Visible;
                        magazineControl.Visibility = System.Windows.Visibility.Visible;
                        gripControl.Visibility     = System.Windows.Visibility.Visible;
                        tacticalControl.Visibility = System.Windows.Visibility.Visible;
                        ammoControl.Visibility     = System.Windows.Visibility.Visible;
                    }
                }
                else
                {
                    sightControl.Visibility    = System.Windows.Visibility.Visible;
                    barrelControl.Visibility   = System.Windows.Visibility.Visible;
                    magazineControl.Visibility = System.Windows.Visibility.Visible;
                    gripControl.Visibility     = System.Windows.Visibility.Visible;
                    tacticalControl.Visibility = System.Windows.Visibility.Visible;
                    ammoControl.Visibility     = System.Windows.Visibility.Visible;
                }
            }

            idControl.ValueChanged += (sender, e) =>
            {
                if (e.NewValue.HasValue)
                {
                    check((ushort)e.NewValue);
                }
                else
                {
                    check(0);
                }
            };

            editor.Loaded += (sender, e) =>
            {
                if (idControl.Value.HasValue)
                {
                    check((ushort)idControl.Value);
                }
                else
                {
                    check(0);
                }
            };
        }