--init fake r2 so that LD and ET scenarios index files can be loaded GameR2Loading = { CurrentFile = "", CurrentPath = "", RingAccess = false, bypassRingAccess = true } function GameR2Loading:getLoadingWindow() return getUI("ui:interface:ring_scenario_loading_window") end function GameR2Loading:getFileName() return self:getLoadingWindow():find("Name") end function GameR2Loading:clear() GameR2Loading.CurrentFile = "" GameR2Loading.CurrentPath = "" GameR2Loading.RingAccess = false self:getFileName().hardtext = "" self:getLoadingWindow().active = false local window = self:getLoadingWindow() --this part of the code correspond to method "updateSize" for lua defined form local rollouts = window:find("rollouts") local deltaH = 40 window:invalidateCoords() window:updateCoords() local newHReal = rollouts.h_real -- must resize the parent local newH = newHReal + deltaH local yOffset = newH - window.h --propertySheet.h = newH window.y = window.y + yOffset / 2 window.pop_min_h = newH window.pop_max_h = newH window:invalidateCoords() window:updateCoords() end ------------------------------------------------------- -- Setters for scenario information from header ------------------------------------------------------- function GameR2Loading:setScenarioTitle(header) local win = self:getLoadingWindow() assert(win) local titleWidget = win:find("Title") --local titleWidget = getUI("ui:interface:r2ed_form_LoadScenario:content:enclosing:rollouts:0:prop_table:r_Title:widget_group:scenario_title") if header.Title then titleWidget.hardtext = header.Title else titleWidget.hardtext = "" end end function GameR2Loading:setScenarioDesc(header) local win = self:getLoadingWindow() assert(win) local descWidget = win:find("Description") if header.ShortDescription then descWidget.hardtext = header.ShortDescription else descWidget.hardtext = "" end end function GameR2Loading:setScenarioRules(header) local win = self:getLoadingWindow() assert(win) local rulesWidget = win:find("Rules") if header.Rules then rulesWidget.hardtext = header.Rules else rulesWidget.hardtext = "" end end function GameR2Loading:setScenarioLevel(header) local win = self:getLoadingWindow() assert(win) local lvlWidget = win:find("Level") if header.Level then lvlWidget.hardtext = header.Level else lvlWidget.hardtext = "" end end function GameR2Loading:setScenarioLanguage(header) local win = self:getLoadingWindow() assert(win) local lvlWidget = win:find("Language") if header.Language then local language = "uiR2ED"..header.Language lvlWidget.hardtext = i18n.get(language):toUtf8() else lvlWidget.hardtext = "" end end function GameR2Loading:setScenarioRingAccess(header) local win = self:getLoadingWindow() assert(win) local accessWidget = win:find("RingPointsLevel") -- --Bypassed ring access while not properly working when entering the ring from ryzom if self.bypassRingAccess == true then accessWidget.active = false local accessWidgetTitle = win:find("RingPointsLevel_Caption") accessWidgetTitle.active = false return end ------------------------ -------------------------- local okButton = win:find("validate") if getDbProp("SERVER:USER:IS_NEWBIE") == 1 and isPlayerFreeTrial() and not header.OtherCharAccess or header.OtherCharAccess ~= "RoSOnly" then accessWidget.hardtext = i18n.get("uiR2EDLoadScenario_No"):toUtf8() okButton.frozen = true end if header.RingPointLevel then self.RingAccess = game.checkRingAccess(header.RingPointLevel) if self.RingAccess == true then accessWidget.hardtext = i18n.get("uiR2EDLoadScenario_Yes"):toUtf8() else accessWidget.hardtext = i18n.get("uiR2EDLoadScenario_No"):toUtf8() end okButton.frozen = not self.RingAccess else accessWidget.hardtext = "" okButton.frozen = false end end function GameR2Loading:setScenarioAuthor(header, rating) local win = self:getLoadingWindow() assert(win) local authorWidget = win:find("Author") --local ratingStr = " ("..tostring(rating)..")" if header.CreateBy then authorWidget.hardtext = header.CreateBy else authorWidget.hardtext = "" end end --RATINGS function GameR2Loading:setScenarioFunRating(rating) local win = self:getLoadingWindow() assert(win) local funWidget = win:find("FunRating") if rating then funWidget.hardtext = tostring(rating) else funWidget.hardtext = "" end end function GameR2Loading:setScenarioDifficultyRating(rating) local win = self:getLoadingWindow() assert(win) local diffWidget = win:find("DifficultyRating") if rating then diffWidget.hardtext = tostring(rating) else diffWidget.hardtext = "" end end function GameR2Loading:setScenarioAccessibilityRating(rating) local win = self:getLoadingWindow() assert(win) local accessWidget = win:find("AccessibilityRating") if rating then accessWidget.hardtext = tostring(rating) else accessWidget.hardtext = "" end end function GameR2Loading:setScenarioOriginalityRating(rating) local win = self:getLoadingWindow() assert(win) local origWidget = win:find("OriginalityRating") if rating then origWidget.hardtext = tostring(rating) else origWidget.hardtext = "" end end function GameR2Loading:setScenarioDirectionRating(rating) local win = self:getLoadingWindow() assert(win) local directionWidget = win:find("DirectionRating") if rating then directionWidget.hardtext = tostring(rating) else directionWidget.hardtext = "" end end function GameR2Loading:setScenarioRRPTotal(rrpTotal) local win = self:getLoadingWindow() assert(win) local rrpWidget = win:find("RRPTotal") if rrpTotal then rrpWidget.hardtext = tostring(rrpTotal) else rrpWidget.hardtext = "" end end function GameR2Loading:initWindow() if not r2 then r2 = {} end local emptyHeader = {} self:setScenarioTitle(emptyHeader) self:setScenarioDesc(emptyHeader) self:setScenarioRules(emptyHeader) self:setScenarioLevel(emptyHeader) self:setScenarioLanguage(emptyHeader) self:setScenarioRingAccess(emptyHeader) self:setScenarioAuthor(emptyHeader, 0) --self:setScenarioFunRating() --self:setScenarioDifficultyRating() --self:setScenarioOriginalityRating() --self:setScenarioAccessibilityRating() --self:setScenarioDirectionRating() --self:setScenarioRRPTotal() self:getFileName().hardtext = "" end function GameR2Loading:setCurrSelectedFile(filename, path) local window = self:getLoadingWindow() assert(window) if getUICaller().pushed then getUICaller().pushed = true end --formInstance.LastFileButton = getUICaller() --r2.CurrentForm.Env.FormInstance.Name = filename --GameR2Loading.Env.FormInstance.Name = filename local formName = window:find("Name") formName.hardtext = filename GameR2Loading.CurrentFile = filename GameR2Loading.CurrentPath = path local header = game.getFileHeader(path..filename) --tmp local authorRating = 42 --debugInfo("### CHECKING BODYMD5 ###") --if header and header.BodyMD5 then -- debugInfo("BodyMD5: *" ..tostring(header.BodyMD5)) -- game.getScenarioAverageScores(tostring(header.BodyMD5)) --end --debugInfo("### ****** ###") if header then self:setScenarioTitle(header) self:setScenarioAuthor(header, authorRating) self:setScenarioDesc(header) self:setScenarioRules(header) self:setScenarioLevel(header) self:setScenarioLanguage(header) self:setScenarioRingAccess(header) --self:setScenarioFunRating(42) --self:setScenarioDifficultyRating(43) --self:setScenarioOriginalityRating(44) --self:setScenarioAccessibilityRating(45) --self:setScenarioDirectionRating(46) --self:setScenarioRRPTotal(47) end --this part of the code corresponds to method "updateSize" for lua defined form local rollouts = window:find("rollouts") local deltaH = 40 window:invalidateCoords() window:updateCoords() local newHReal = rollouts.h_real -- must resize the parent local newH = newHReal + deltaH local yOffset = newH - window.h --propertySheet.h = newH window.y = window.y + yOffset / 2 window.pop_min_h = newH window.pop_max_h = newH window:invalidateCoords() window:updateCoords() end function GameR2Loading:buildScenarioTree() local window = self:getLoadingWindow() if not window then debugInfo("GameR2Loading:buildScenarioTree: failed to get ui") return end local tree = window:find('tree_list') assert(tree) local rootNode = SNode() rootNode.Id = "root" rootNode.Text = "Scenarios" rootNode.Opened = false --rootNode.Bitmap = "r2ed_icon_macro_components.tga" tree:setRootNode(rootNode) function addNodeToParent(name, id, parentId) local parentNode = rootNode:getNodeFromId(parentId) addedNode = SNode() --local text = i18n.hasTranslation(parentCategory) --if not text then text = parentCategory else text = i18n.get(parentCategory) end addedNode.Text = name addedNode.Id = id addedNode.Opened = false parentNode:addChild(addedNode) end function parseDirectory(nodeId, searchPath) local destNode = rootNode:getNodeFromId(nodeId) local autosaveNode = rootNode:getNodeFromId("autosave") local files = getPathContent(searchPath) table.sort(files) for k, v in pairs(files) do if string.lower(nlfile.getExtension(v)) == "r2" then local shortFilename = nlfile.getFilename(v) local shortFileEscape=string.gsub(shortFilename, "'", "\\'") local fileLeaf= SNode() fileLeaf.Id = shortFilename local len = string.len(shortFilename) - 3 fileLeaf.Text = string.sub(shortFilename,0, len) fileLeaf.AHName = "lua" fileLeaf.AHParams = "GameR2Loading:setCurrSelectedFile('" .. shortFileEscape .. "', '"..searchPath.."')" --if autosave file, plug it in the autosave branch if string.find(shortFilename, "autosave") ~= nil then autosaveNode:addChild(fileLeaf) else destNode:addChild(fileLeaf) end end end end function loadLDScenariosFromFile() --if using a bnp, use doFile method instead local fileListOk = loadfile("examples/r2_leveldesign_scenarios.lua") if fileListOk then fileListOk() end local files = r2.LevelDesignScenarios for parentId, fileEntries in pairs(files) do local parentNode = rootNode:getNodeFromId(parentId) if not parentNode then addNodeToParent(parentId, parentId, "root") parentNode = rootNode:getNodeFromId(parentId) end for k, v in pairs(fileEntries) do local fileLeaf= SNode() fileLeaf.Id = v[1] local len = string.len(v[1]) - 3 fileLeaf.Text = string.gsub(string.sub(v[1],0, len), "_", " ") fileLeaf.AHName = "lua" fileLeaf.AHParams = "GameR2Loading:setCurrSelectedFile('" .. v[1] .. "', './Examples/')" parentNode:addChild(fileLeaf) end end end function loadETScenariosFromFile() --if using a bnp, use doFile method instead local fileListOk = loadfile("examples/r2_event_team_scenarios.lua") if fileListOk then fileListOk() end local files = r2.EventTeamScenarios for parentId, fileEntries in pairs(files) do local parentNode = rootNode:getNodeFromId(parentId) if not parentNode then addNodeToParent(parentId, parentId, "root") parentNode = rootNode:getNodeFromId(parentId) end for k, v in pairs(fileEntries) do local fileLeaf= SNode() fileLeaf.Id = v[1] local len = string.len(v[1]) - 3 fileLeaf.Text = string.gsub(string.sub(v[1],0, len), "_", " ") fileLeaf.AHName = "lua" fileLeaf.AHParams = "GameR2Loading:setCurrSelectedFile('" .. v[1] .. "', './Examples/')" parentNode:addChild(fileLeaf) end end end function loadNewbieScenariosFromFile() --if using a bnp, use doFile method instead local fileListOk = loadfile("examples/r2_newbieland_scenarios.lua") if fileListOk then fileListOk() end local files = r2.NewbielandScenarios if files then for parentId, fileEntries in pairs(files) do local parentNode = rootNode:getNodeFromId(parentId) if not parentNode then addNodeToParent(parentId, parentId, "root") parentNode = rootNode:getNodeFromId(parentId) end for k, v in pairs(fileEntries) do local fileLeaf= SNode() fileLeaf.Id = v[1] local len = string.len(v[1]) - 3 fileLeaf.Text = string.gsub(string.sub(v[1],0, len), "_", " ") fileLeaf.AHName = "lua" fileLeaf.AHParams = "GameR2Loading:setCurrSelectedFile('" .. v[1] .. "', './Examples/')" parentNode:addChild(fileLeaf) end end end end --LEVELDESIGN SCENARIOS --addNodeToParent("Examples", "examples", "root") --addNodeToParent("Simple", "simple", "examples") loadLDScenariosFromFile() --EVENTTEAM SCENARIOS loadETScenariosFromFile() --NEWBIELAND SCENARIOS loadNewbieScenariosFromFile() --MY SCENARIOS addNodeToParent("My Files", "my_files", "root") addNodeToParent("Autosave", "autosave", "my_files") addNodeToParent("My scenarios", "my_scenarios", "my_files") parseDirectory("my_scenarios", "./My_scenarios/") --Tmp branch for old scenarios addNodeToParent("Old scenarios", "old", "root") parseDirectory("old", "./") tree:forceRebuild() end function GameR2Loading:displayLoadingWindow() self:initWindow() local isInNoobLand = getDbProp("SERVER:USER:IS_NEWBIE") if isInNoobLand == 1 and isPlayerFreeTrial() then self:buildNewbielandScenarioTree() else self:buildScenarioTree() end local window = self:getLoadingWindow() if not window then debugInfo("GameR2Loading:DisplayLoadingWindow: failed to get ui") return end --this part of the code correspond to method "updateSize" for lua defined form local rollouts = window:find("rollouts") local deltaH = 40 window:invalidateCoords() window:updateCoords() local newHReal = rollouts.h_real -- must resize the parent local newH = newHReal + deltaH local yOffset = newH - window.h --propertySheet.h = newH window.y = window.y + yOffset / 2 window.pop_min_h = newH window.pop_max_h = newH window:invalidateCoords() window:updateCoords() window.active = true local scenarioControlWnd = getUI("ui:interface:r2ed_scenario_control") if scenarioControlWnd.active then scenarioControlWnd.active = false end end function GameR2Loading:validateLoading() if GameR2Loading.CurrentFile == "" then messageBox(i18n.get("uiR2EDLoadScenario_InvalidFileName")) return end local filename = GameR2Loading.CurrentFile if string.find(filename, '.r2', -3) == nil then messageBox(i18n.get("uiR2EDLoadScenario_InvalidFileName")) return end if GameR2Loading.CurrentPath == "" then messageBox(i18n.get("uiR2EDLoadScenario_InvalidFileName")) return end local path = GameR2Loading.CurrentPath local extendedFileName = filename if path and path ~= "" then extendedFileName = path..filename end if getDbProp("SERVER:USER:IS_NEWBIE")==0 then getUI("ui:interface:r2ed_scenario_control").active=true runAH(nil, "scenario_information", "ScenarioName="..extendedFileName) else runAH(nil, "init_scenario_control", "") runAH(nil, "scenario_information", "ScenarioName="..extendedFileName) runAH(nil, "load_scenario", "") end self:getLoadingWindow().active = false self:clear() end function GameR2Loading:cancelLoading() self:getLoadingWindow().active = false self:clear() runAH(nil, "open_ring_sessions", "") end function GameR2Loading:getTreeTooltip() local tree = getUI("ui:interface:ring_scenario_loading_window"):find('tree_list') local isInNoobLand = getDbProp("SERVER:USER:IS_NEWBIE") if isInNoobLand == 1 and isPlayerFreeTrial() then tree.tooltip = i18n.get("uiR2EdPropertyToolTip_LoadScenario_LoadScenario_NewbieTreeInfo"):toUtf8() else tree.tooltip = i18n.get("uiR2EdPropertyToolTip_LoadScenario_LoadScenario_TreeInfo"):toUtf8() end end -------------------------------------------------------------------------------- -------------------------------------------------------------------------------- ------ NEWBIELAND LOADING WINDOW -------------------------------------------------------------------------------- -------------------------------------------------------------------------------- function GameR2Loading:buildNewbielandScenarioTree() local window = self:getLoadingWindow() if not window then debugInfo("GameR2Loading:buildScenarioTree: failed to get ui") return end local tree = window:find('tree_list') assert(tree) local rootNode = SNode() rootNode.Id = "root" rootNode.Text = "Scenarios" rootNode.Opened = false --rootNode.Bitmap = "r2ed_icon_macro_components.tga" tree:setRootNode(rootNode) function addNodeToParent(name, id, parentId) local parentNode = rootNode:getNodeFromId(parentId) addedNode = SNode() --local text = i18n.hasTranslation(parentCategory) --if not text then text = parentCategory else text = i18n.get(parentCategory) end addedNode.Text = name addedNode.Id = id addedNode.Opened = false parentNode:addChild(addedNode) end function loadNewbieScenariosFromFile() --if using a bnp, use doFile method instead local fileListOk = loadfile("examples/r2_newbieland_scenarios.lua") if fileListOk then fileListOk() end local files = r2.NewbielandScenarios for parentId, fileEntries in pairs(files) do local parentNode = rootNode:getNodeFromId(parentId) if not parentNode then addNodeToParent(parentId, parentId, "root") parentNode = rootNode:getNodeFromId(parentId) end for k, v in pairs(fileEntries) do local fileLeaf= SNode() fileLeaf.Id = v[1] local len = string.len(v[1]) - 3 fileLeaf.Text = string.gsub(string.sub(v[1],0, len), "_", " ") fileLeaf.AHName = "lua" fileLeaf.AHParams = "GameR2Loading:setCurrSelectedFile('" .. v[1] .. "', './Examples/')" parentNode:addChild(fileLeaf) end end end --NEWBIELAND SCENARIOS loadNewbieScenariosFromFile() tree:forceRebuild() end