Index: binaries/data/config/default.cfg =================================================================== --- binaries/data/config/default.cfg +++ binaries/data/config/default.cfg @@ -397,6 +397,14 @@ [mod] enabledmods = "mod public" +[modio] +public_key = "RWTA6VIoth2Q1PFLsRILr3G7NB+mwwO8BSGoXs63X6TQgNGM4cE8Pvd6" ; Public key corresponding to the private key valid mods are signed with + +[modio.v1] +baseurl = "https://api.test.mod.io/v1" +api_key = "acf8fc07e3a8e9228ef4d5704c1659a1" +name_id = "0ad" + [network] duplicateplayernames = false ; Rename joining player to "User (2)" if "User" is already connected, otherwise prohibit join. lateobservers = everyone ; Allow observers to join the game after it started. Possible values: everyone, buddies, disabled. Index: binaries/data/mods/mod/gui/common/functions_msgbox.js =================================================================== --- /dev/null +++ binaries/data/mods/mod/gui/common/functions_msgbox.js @@ -0,0 +1,48 @@ +// We want to pass callback functions for the different buttons in a convenient way. +// Because passing functions accross compartment boundaries is a pain, we just store them here together with some optional arguments. +// The messageBox page will return the code of the pressed button and the according function will be called. +var g_MessageBoxBtnFunctions = []; +var g_MessageBoxCallbackArgs = []; + +var g_MessageBoxCallbackFunction = function(btnCode) +{ + if (btnCode !== undefined && g_MessageBoxBtnFunctions[btnCode]) + { + // Cache the variables to make it possible to call a messageBox from a callback function. + let callbackFunction = g_MessageBoxBtnFunctions[btnCode]; + let callbackArgs = g_MessageBoxCallbackArgs[btnCode]; + + g_MessageBoxBtnFunctions = []; + g_MessageBoxCallbackArgs = []; + + if (callbackArgs !== undefined) + callbackFunction(callbackArgs); + else + callbackFunction(); + return; + } + + g_MessageBoxBtnFunctions = []; + g_MessageBoxCallbackArgs = []; +}; + +function messageBox(mbWidth, mbHeight, mbMessage, mbTitle, mbButtonCaptions, mbBtnCode, mbCallbackArgs) +{ + if (g_MessageBoxBtnFunctions && g_MessageBoxBtnFunctions.length) + { + warn("A messagebox was called when a previous callback function is still set, aborting!"); + return; + } + + g_MessageBoxBtnFunctions = mbBtnCode; + g_MessageBoxCallbackArgs = mbCallbackArgs || g_MessageBoxCallbackArgs; + + Engine.PushGuiPage("page_msgbox.xml", { + "width": mbWidth, + "height": mbHeight, + "message": mbMessage, + "title": mbTitle, + "buttonCaptions": mbButtonCaptions, + "callback": mbBtnCode && "g_MessageBoxCallbackFunction" + }); +} Index: binaries/data/mods/mod/gui/modmod/modio.js =================================================================== --- /dev/null +++ binaries/data/mods/mod/gui/modmod/modio.js @@ -0,0 +1,72 @@ +let g_ModsAvailableOnline = []; + +function init() +{ + g_ModsAvailableOnline = Engine.ModIoGetMods(); + + generateModsList(g_ModsAvailableOnline); +} + +function filesizeToString(filesize) +{ + let suffixes = ["B", "kiB", "MiB", "GiB"]; // bigger values are currently unlikely to occur here... + let i = 0; + while (i < suffixes.length-1) + { + if (filesize < 1024) + break; + filesize /= 1024; + ++i; + } + + return filesize.toFixed(i == 0 ? 0 : 1) + suffixes[i]; +} + +function generateModsList(mods) +{ + var [keys, names, name_ids, versions, filesizes, dependencies] = [[],[],[],[],[],[]]; + + let i = 0; + for (let mod of mods) + { + keys.push(i++); + names.push(mod.name); + name_ids.push(mod.name_id); + versions.push(mod.version); + filesizes.push(filesizeToString(mod.filesize)); + dependencies.push((mod.dependencies || []).join(" ")); + } + + var obj = Engine.GetGUIObjectByName("modsAvailableList"); + obj.list_name = names; + obj.list_modVersion = versions; + obj.list_modname_id = name_ids; + obj.list_modfilesize = filesizes; + obj.list_dependencies = dependencies; + + obj.list = keys; +} + +function showModDescription() +{ + let listObject = Engine.GetGUIObjectByName("modsAvailableList"); + if (listObject.selected != -1) + Engine.GetGUIObjectByName("modDescription").caption = g_ModsAvailableOnline[listObject.selected].summary; +} + +function downloadMod() +{ + let listObject = Engine.GetGUIObjectByName("modsAvailableList"); + if (listObject.selected == -1) + { + warn("Select something first."); + return; + } + + Engine.ModIoDownloadMod(+listObject.list[listObject.selected]); +} + +function closePage() +{ + Engine.PopGuiPage(); +} Index: binaries/data/mods/mod/gui/modmod/modio.xml =================================================================== --- /dev/null +++ binaries/data/mods/mod/gui/modmod/modio.xml @@ -0,0 +1,57 @@ + + + +