示例#1
0
        private void ReallyUnpublishThenDeleteMod()
        {
            var promise = Game.Network.Workshop.UpdateItem(
                m_mod.SteamWorkshopID.Value,
                "Deleted",
                title: m_mod.Title + " (Deleted in Editor)",
                visibility: false
                );
            var dialog = PromiseDialogBox.Create(Game.Language.Translate("menus.unpublishing.title"), promise);

            dialog.OnClosed += delegate(object sender, DialogBoxClosedEventArgs e)
            {
                if (promise.Status == Status.Complete)
                {
                    // Continue to delete the mod
                    ReallyDeleteMod();
                }
                else if (promise.Status == Status.Error)
                {
                    // Show the user the error
                    var errorDialog = DialogBox.CreateQueryBox(
                        Game.Screen,
                        Game.Language.Translate("menus.unpublishing_error.title"),
                        promise.Error,
                        new string[] {
                        Game.Language.Translate("menus.ok")
                    },
                        true
                        );
                    ShowDialog(errorDialog);
                }
            };
            ShowDialog(dialog);
        }
示例#2
0
        private void ReallyPublishMod()
        {
            // Update game_version
            m_mod.MinimumGameVersion = App.Info.Version;
            m_mod.SaveInfo();

            // Check every level has a thumbnail and has been completed
            foreach (var campaign in Assets.Find <Campaign>("campaigns", m_mod.Assets))
            {
                for (int i = 0; i < campaign.Levels.Count; ++i)
                {
                    var levelPath = campaign.Levels[i];
                    var levelData = LevelData.Get(levelPath);
                    if (!levelData.EverCompleted)
                    {
                        ShowDialog(DialogBox.CreateQueryBox(
                                       Game.Screen,
                                       Game.Language.Translate("menus.publishing_error.title"),
                                       Game.Language.Translate("menus.publishing_error.level_not_completed", TranslateTitle(levelData.Title)),
                                       new string[] {
                            Game.Language.Translate("menus.ok")
                        }, true)
                                   );
                        return;
                    }

                    var levelThumbnailPath     = AssetPath.ChangeExtension(levelPath, "png");
                    var levelThumbnailFullPath = Path.Combine(m_mod.Path, "assets/" + levelThumbnailPath);
                    if (!File.Exists(levelThumbnailFullPath))
                    {
                        ShowDialog(DialogBox.CreateQueryBox(
                                       Game.Screen,
                                       Game.Language.Translate("menus.publishing_error.title"),
                                       Game.Language.Translate("menus.publishing_error.level_no_thumbnail", TranslateTitle(levelData.Title)),
                                       new string[] {
                            Game.Language.Translate("menus.ok")
                        }, true)
                                   );
                        return;
                    }
                }
            }

            // Find source images for the thumbnail
            var thumbnailSources    = new List <string>();
            var manualThumbnailPath = Path.Combine(m_mod.Path, "thumbnail.png");

            if (File.Exists(manualThumbnailPath))
            {
                // Use thumbnail.png
                thumbnailSources.Add(manualThumbnailPath);
            }
            else
            {
                // Use the thumbnails from the levels
                var campaigns = Assets.List <Campaign>("campaigns", m_mod.Assets).ToArray();
                for (int i = 0; i < campaigns.Length; ++i)
                {
                    var campaign = campaigns[i];
                    for (int j = 0; j < campaign.Levels.Count; ++j)
                    {
                        var levelPath              = campaign.Levels[j];
                        var levelThumbnailPath     = AssetPath.ChangeExtension(levelPath, "png");
                        var levelThumbnailFullPath = Path.Combine(m_mod.Path, "assets/" + levelThumbnailPath);
                        if (File.Exists(levelThumbnailFullPath))
                        {
                            thumbnailSources.Add(levelThumbnailFullPath);
                        }
                    }
                }
            }
            if (thumbnailSources.Count == 0)
            {
                ShowDialog(DialogBox.CreateQueryBox(
                               Game.Screen,
                               Game.Language.Translate("menus.publishing_error.title"),
                               Game.Language.Translate("menus.publishing_error.no_thumbnail"),
                               new string[] {
                    Game.Language.Translate("menus.ok")
                }, true)
                           );
                return;
            }

            // Generate the thumbnail
            var thumbnailPath = GenerateThumbnail(thumbnailSources);

            // Determine the tags
            var tags = new HashSet <string>();

            if (Assets.Find <LuaScript>("animation", m_mod.Assets).Count() > 0)
            {
                tags.Add("Custom Animation");
            }
            if (Assets.List <Campaign>("campaigns", m_mod.Assets).Count() > 0 &&
                Assets.Find <LevelData>("levels", m_mod.Assets).Count() > 0)
            {
                tags.Add("New Levels");
            }
            if (Assets.List <Language>("languages", m_mod.Assets).Where(lang => !lang.IsEnglish).Count() > 0)
            {
                tags.Add("Localisation");
            }
            if (Assets.Find <Model>("models", m_mod.Assets).Count() > 0 ||
                Assets.Find <Sky>("skies", m_mod.Assets).Count() > 0)
            {
                tags.Add("Custom Art");
            }
            if (Assets.Find <Sound>("sound", m_mod.Assets).Count() > 0 ||
                Assets.Find <Sound>("music", m_mod.Assets).Count() > 0)
            {
                tags.Add("Custom Audio");
            }
            if (Assets.List <ArcadeDisk>("arcade", m_mod.Assets).Count() > 0)
            {
                tags.Add("Arcade Games");
            }

            // Publish
            if (m_mod.SteamWorkshopID.HasValue)
            {
                // Update existing mod
                ulong id      = m_mod.SteamWorkshopID.Value;
                var   promise = Game.Network.Workshop.UpdateItem(
                    id,
                    "Modified with the Redirection Mod Editor",
                    filePath: m_mod.Path,
                    previewImagePath: thumbnailPath,
                    title: m_mod.Title,
                    tags: tags.ToArray()
                    );
                var progressDialog = PromiseDialogBox.Create(
                    Game.Language.Translate("menus.publishing.title"),
                    promise
                    );
                progressDialog.OnClosed += delegate(object sender2, DialogBoxClosedEventArgs e2)
                {
                    if (promise.Status == Status.Complete)
                    {
                        // Show the user the mod
                        ShowInWorkshop();

                        // Show a dialog
                        var completeDialog = DialogBox.CreateQueryBox(
                            Game.Screen,
                            Game.Language.Translate("menus.mod_published.title"),
                            promise.Result.AgreementNeeded ?
                            Game.Language.Translate("menus.mod_published.info_agreement_needed", m_mod.Title) :
                            Game.Language.Translate("menus.mod_published.info", m_mod.Title),
                            new string[] {
                            Game.Language.Translate("menus.ok")
                        },
                            true
                            );
                        ShowDialog(completeDialog);
                    }
                    else if (promise.Status == Status.Error)
                    {
                        // Show the user the error
                        var errorDialog = DialogBox.CreateQueryBox(
                            Game.Screen,
                            Game.Language.Translate("menus.publishing_error.title"),
                            promise.Error,
                            new string[] {
                            Game.Language.Translate("menus.ok")
                        },
                            true
                            );
                        ShowDialog(errorDialog);
                    }
                };
                ShowDialog(progressDialog);
            }
            else
            {
                // Create new mod
                var description = "Created with the Redirection Mod Editor";
                var promise     = Game.Network.Workshop.CreateItem(
                    m_mod.Path,
                    thumbnailPath,
                    m_mod.Title,
                    description,
                    tags.ToArray(),
                    true
                    );
                var progressDialog = PromiseDialogBox.Create(
                    Game.Language.Translate("menus.publishing.title"),
                    promise
                    );
                progressDialog.OnClosed += delegate(object sender2, DialogBoxClosedEventArgs e2)
                {
                    if (promise.Status == Status.Complete)
                    {
                        // Save the mod
                        ulong id = promise.Result.ID;
                        m_mod.SteamWorkshopID = id;
                        m_mod.SaveInfo();

                        // Show the user the mod
                        ShowInWorkshop();

                        // Show a dialog
                        var completeDialog = DialogBox.CreateQueryBox(
                            Game.Screen,
                            Game.Language.Translate("menus.mod_published.title"),
                            promise.Result.AgreementNeeded ?
                            Game.Language.Translate("menus.mod_published.info_agreement_needed", m_mod.Title) :
                            Game.Language.Translate("menus.mod_published.info", m_mod.Title),
                            new string[] {
                            Game.Language.Translate("menus.ok")
                        },
                            true
                            );
                        completeDialog.OnClosed += delegate
                        {
                            // Re-enter state so the new "show in workshop" entry appears
                            CutToState(new ModEditorState(Game, m_mod));
                        };
                        ShowDialog(completeDialog);
                    }
                    else if (promise.Status == Status.Error)
                    {
                        // Show the user the error
                        var errorDialog = DialogBox.CreateQueryBox(
                            Game.Screen,
                            Game.Language.Translate("menus.publishing_error.title"),
                            promise.Error,
                            new string[] {
                            Game.Language.Translate("menus.ok")
                        },
                            true
                            );
                        ShowDialog(errorDialog);
                    }
                };
                ShowDialog(progressDialog);
            }
        }