r2.Forms = {} r2.EventTeamScenarios = { simple = {}, odd_ball = {}, adventure = {}, challenge = {}, } r2.LevelDesignScenarios = { cat1 = {}, cat2 = {}, cat3 = {}, } --/////////////////// --// EDITION FORMS // --/////////////////// -- a test form r2.Forms.TestForm = { Prop = { -- following field are tmp for property sheet building testing {Name="PVP", Type="Number", WidgetStyle="Boolean", Category="uiR2EDRollout_Test" }, {Name="Slider1", Type="Number", WidgetStyle="Slider", Category="uiR2EDRollout_Test"}, {Name="Slider2", Type="Number", WidgetStyle="Slider", Category="uiR2EDRollout_Test"}, {Name="ComboBox1", Type="Number", WidgetStyle="EnumDropDown", Enum= { "Toto", "Tata", "Titi" } }, {Name="ComboBox2", Type="Number", WidgetStyle="EnumDropDown", Enum= { "A", "B", "C" } }, {Name="Title", Type="String", Category="uiR2EDRollout_EditBoxesTest"}, {Name="Text1", Type="String", Category="uiR2EDRollout_EditBoxesTest"}, {Name="Text2", Type="Number", Category="uiR2EDRollout_EditBoxesTest", Min="1", Max="10", Default="1"}, } -- "onPostRender" : called by the framework after each frame (may be nil) -- onPostRender = function(formInstance) -- ... -- end -- -- "onShow" : called by the framework when the form is displayed -- onShow = function(formInstance) -- ... -- end } r2.Forms.CreateNewAdventureStep1 = { Caption = "uiR2EDScenarioParameters", Prop = { {Name="Level", Type="Number", WidgetStyle="EnumDropDown", Category="uiR2EDRollout_Aventure", Enum= { "0-20", "0 - 50", "50 - 100"} }, {Name="Rule", Type="Number", WidgetStyle="EnumDropDown", Category="uiR2EDRollout_Aventure", Enum= { "Liberal", "Strict"} }, {Name="MaxEntities", Type="Number", Category="uiR2EDRollout_Aventure", Min="0", Max="250", Default="50"} } } r2.Forms.CreateNewAdventureStep2 = { Caption = "uiR2EDScenarioParameters", Prop = { { Name="Location", Type="Number", WidgetStyle="EnumDropDown", Category="uiR2EDRollout_Aventure", Enum = r2.getIslandsLocation() }, {Name="EntryPoint", Type="Number", WidgetStyle="EnumDropDown", Category="uiR2EDRollout_Aventure", Enum= { "Main Entry Point"} }, } } r2.Forms.CreateNewAdventureScenarioDescription = { Caption = "uiR2EDScenarioParameters", Prop = { {Name="Title", Type="String", Category="uiR2EDRollout_Aventure"}, {Name="Category", Type="Number", WidgetStyle="EnumDropDown", Category="uiR2EDRollout_Aventure", Enum= { "Invasion"} }, {Name="Description", Type="String", Category="uiR2EDRollout_Aventure"} } } r2.Forms.CreateNewAdventureActDescription = { Caption = "uiR2EDNewActParameters", Prop = { {Name="ActName", Type="String", Category="uiR2EDRollout_Aventure"}, {Name="Location", Type="Number", WidgetStyle="EnumDropDown", Category="uiR2EDRollout_Aventure", Enum= { "Fyros", "Tryker"} }, {Name="EntryPoint", Type="Number", WidgetStyle="EnumDropDown", Category="uiR2EDRollout_Aventure", Enum= { "EntryPoint1", "EntryPoint2"} } } } r2.Forms.ConnectAdventure = { Caption = "uiR2EDConnectAdventure", Prop = { {Name="AdventureId", Type="Number", Category="uiR2EDRollout_Load"} } } r2.Forms.NewActForm = { Caption = "uiR2EDNewActParameters", Prop = { {Name="ActTitle", Type="String" }, -- {Name="EntryPoint", Type="Number", WidgetStyle="EnumDropDown", Enum= { "Spawn Point 1", "Spawn Point 2" } } } } ----------------- -- LOAD / SAVE -- ----------------- -- file list local fileListXML = [[ ]] --scenario tree local scenarioTreeXML = [[ ]] function r2.setCurrSelectedFile(filename, path) local formInstance = r2.CurrentForm.Env.FormInstance if formInstance.LastFileButton and formInstance.LastFileButton.pushed then formInstance.LastFileButton.pushed = false end if getUICaller().pushed then getUICaller().pushed = true end formInstance.LastFileButton = getUICaller() r2.CurrentForm.Env.FormInstance.Name = filename if path ~= nil and r2.CurrentForm.Env.FormInstance.Path then r2.CurrentForm.Env.FormInstance.Path = path local header = r2.getFileHeader(path..filename) if header then if header.Title then r2.CurrentForm.Env.FormInstance.LoadScenario_Title = header.Title elseif r2.CurrentForm.Env.FormInstance.LoadScenario_Title then r2.CurrentForm.Env.FormInstance.LoadScenario_Title = "" end if header.ShortDescription then r2.CurrentForm.Env.FormInstance.LoadScenario_Description = header.ShortDescription elseif r2.CurrentForm.Env.FormInstance.LoadScenario_Description then r2.CurrentForm.Env.FormInstance.LoadScenario_Description = "" end if header.Rules then r2.CurrentForm.Env.FormInstance.LoadScenario_Rules = header.Rules elseif r2.CurrentForm.Env.FormInstance.LoadScenario_Rules then r2.CurrentForm.Env.FormInstance.LoadScenario_Rules = "" end if header.Level then r2.CurrentForm.Env.FormInstance.LoadScenario_Level = header.Level elseif r2.CurrentForm.Env.FormInstance.LoadScenario_Level then r2.CurrentForm.Env.FormInstance.LoadScenario_Level = "" end if header.Language then r2.CurrentForm.Env.FormInstance.LoadScenario_Language = i18n.get("uiR2ED"..header.Language):toUtf8() elseif r2.CurrentForm.Env.FormInstance.LoadScenario_Language then r2.CurrentForm.Env.FormInstance.LoadScenario_Language = "" end if header.RingPointLevel then if r2.checkRingAccess(header.RingPointLevel) == true then r2.CurrentForm.Env.FormInstance.LoadScenario_RingPointsLevel = i18n.get("uiR2EDLoadScenario_Yes"):toUtf8() else r2.CurrentForm.Env.FormInstance.LoadScenario_RingPointsLevel = i18n.get("uiR2EDLoadScenario_No"):toUtf8() end elseif r2.CurrentForm.Env.FormInstance.LoadScenario_RingPointsLevel then r2.CurrentForm.Env.FormInstance.LoadScenario_RingPointsLevel = "" end end end r2.CurrentForm.Env.updateAll() r2.CurrentForm.Env.updateSize() local eb = r2.CurrentForm:find("eb") setCaptureKeyboard(eb) eb:setSelectionAll() end function r2.setCurrSelectedFileToLoad(filename, path) local formInstance = r2.CurrentForm.Env.FormInstance if formInstance.LastFileButton and formInstance.LastFileButton.pushed then formInstance.LastFileButton.pushed = false end if getUICaller().pushed then getUICaller().pushed = true end formInstance.LastFileButton = getUICaller() r2.CurrentForm.Env.FormInstance.LoadScenario_Name = ucstring(filename):toUtf8() if path ~= nil and r2.CurrentForm.Env.FormInstance.Path then r2.CurrentForm.Env.FormInstance.Path = path local header = r2.getFileHeader(path..filename) if header then if header.Title then r2.CurrentForm.Env.FormInstance.LoadScenario_Title = header.Title elseif r2.CurrentForm.Env.FormInstance.LoadScenario_Title then r2.CurrentForm.Env.FormInstance.LoadScenario_Title = "" end if header.ShortDescription then r2.CurrentForm.Env.FormInstance.LoadScenario_Description = header.ShortDescription elseif r2.CurrentForm.Env.FormInstance.LoadScenario_Description then r2.CurrentForm.Env.FormInstance.LoadScenario_Description = "" end if header.Rules then r2.CurrentForm.Env.FormInstance.LoadScenario_Rules = header.Rules elseif r2.CurrentForm.Env.FormInstance.LoadScenario_Rules then r2.CurrentForm.Env.FormInstance.LoadScenario_Rules = "" end if header.Level then r2.CurrentForm.Env.FormInstance.LoadScenario_Level = header.Level elseif r2.CurrentForm.Env.FormInstance.LoadScenario_Level then r2.CurrentForm.Env.FormInstance.LoadScenario_Level = "" end if header.Language then r2.CurrentForm.Env.FormInstance.LoadScenario_Language = i18n.get("uiR2ED"..header.Language):toUtf8() elseif r2.CurrentForm.Env.FormInstance.LoadScenario_Language then r2.CurrentForm.Env.FormInstance.LoadScenario_Language = "" end if header.RingPointLevel then if r2.checkRingAccess(header.RingPointLevel) == true then r2.CurrentForm.Env.FormInstance.RingAccess = 1 r2.CurrentForm.Env.FormInstance.LoadScenario_RingPointsLevel = i18n.get("uiR2EDLoadScenario_Yes"):toUtf8() else r2.CurrentForm.Env.FormInstance.RingAccess = 0 r2.CurrentForm.Env.FormInstance.LoadScenario_RingPointsLevel = i18n.get("uiR2EDLoadScenario_No"):toUtf8() end elseif r2.CurrentForm.Env.FormInstance.LoadScenario_RingPointsLevel then r2.CurrentForm.Env.FormInstance.RingAccess = 0 r2.CurrentForm.Env.FormInstance.LoadScenario_RingPointsLevel = "" end end end r2.CurrentForm.Env.updateAll() r2.CurrentForm.Env.updateSize() --local eb = r2.CurrentForm:find("eb") --setCaptureKeyboard(eb) --eb:setSelectionAll() end -- called at init to fill the file list local function showFileList(formInstance) local fileGroupList = r2.CurrentForm:find('file_list') --local searchPath = select(config.R2ScenariiPath, "save") local searchPath =r2.getScenarioSavePath() local files = getPathContent(searchPath) table.sort(files) fileGroupList:clear() 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 shortFilename2 = ucstring(shortFilename):toUtf8() local shortFileEscape2 = ucstring(shortFileEscape):toUtf8() local entry = createGroupInstance("r2ed_filelist_entry", "", { id = tostring(k), text = shortFilename2, params_l="r2.setCurrSelectedFile('" .. shortFileEscape2 .. "')" }) fileGroupList:addChild(entry) end end setCaptureKeyboard(r2.CurrentForm:find("eb")) end local function saveScenarioOnChange(formInstance) r2.print(formInstance.Name) local name = string.gsub(formInstance.Name, "[\\/:*?\"<>|]", "_") if name ~= formInstance.Name then fromInstance.Name = name formInstance.Modified = true end end local function buildScenarioTree(formInstance) local tree = r2.CurrentForm:find('tree_list') 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 = "r2.setCurrSelectedFileToLoad('" .. 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] --fileLeaf.Text = v[1] local len = string.len(v[1]) - 3 fileLeaf.Text = string.gsub(string.sub(v[1],0, len), "_", " ") fileLeaf.AHName = "lua" fileLeaf.AHParams = "r2.setCurrSelectedFileToLoad('" .. 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] --fileLeaf.Text = v[1] local len = string.len(v[1]) - 3 fileLeaf.Text = string.gsub(string.sub(v[1],0, len), "_", " ") fileLeaf.AHName = "lua" fileLeaf.AHParams = "r2.setCurrSelectedFileToLoad('" .. 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 = "r2.setCurrSelectedFileToLoad('" .. v[1] .. "', './Examples/')" parentNode:addChild(fileLeaf) end end end end --LEVELDESIGN SCENARIOS --addNodeToParent("Nevrax Examples", "examples", "root") --addNodeToParent("Simple", "simple", "examples") --addNodeToParent("Odd Ball", "odd_ball", "examples") --addNodeToParent("Adventure", "adventure", "examples") --addNodeToParent("Challenge", "challenge", "examples") loadLDScenariosFromFile() --EVENTTEAM SCENARIOS --addNodeToParent("Pioneer Scenarios", "event_team_offerings", "root") loadETScenariosFromFile() --NEWBIE 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 -- load / save forms r2.Forms.SaveScenario = { Caption = "uiR2EDSaveScenario", PropertySheetHeader = fileListXML, Prop = { {Name="Name", Type="String", EntryType="filename", Category="uiR2EDRollout_Save", ValidateOnEnter = true, MaxNumChar="512" , onChange = saveScenarioOnChange} }, onShow = showFileList } r2.Forms.LoadScenario = { Caption = "uiR2EDLoadScenario", PropertySheetHeader = scenarioTreeXML, --fileListXML, Prop = { {Name="LoadScenario_Name", Type="String", WidgetStyle="StaticText", Category="uiR2EDRollout_Load"}, {Name="Path", Type="String", Visible=false}, {Name="RingAccess", Type="Number", Visible=false}, {Name="LoadScenario_Title", Type="String", WidgetStyle="StaticText", Category="uiR2EDRollout_ScenarioInfo"}, {Name="LoadScenario_Description", Type="String", WidgetStyle="StaticTextMultiline", Category="uiR2EDRollout_ScenarioInfo"}, {Name="LoadScenario_Rules", Type="String", WidgetStyle="StaticText", Category="uiR2EDRollout_ScenarioInfo"}, {Name="LoadScenario_Level", Type="String", WidgetStyle="StaticText", Category="uiR2EDRollout_ScenarioInfo"}, {Name="LoadScenario_Language", Type="String", WidgetStyle="StaticText", Category="uiR2EDRollout_ScenarioInfo"}, {Name="LoadScenario_RingPointsLevel", Type="String", WidgetStyle="StaticText", Category="uiR2EDRollout_ScenarioInfo"}, }, onShow = buildScenarioTree } --///////////////////// --// ANIMATION FORMS // --///////////////////// ------------- -- WEATHER -- ------------- local function updateWeather(formInstance) setWeatherValue(formInstance.ManualWeather == 0, formInstance.WeatherValue / 1022) formInstance.Modified = true end r2.Forms.ChangeWeatherForm = { Caption = "uiR2EDChangeWeather", Width="300", PropertySheetHeader = [[ ]], Prop = { {Name="ManualWeather", Type="Number", WidgetStyle="Boolean", onChange = updateWeather }, { Name="WeatherValue", Type="Number", WidgetStyle="Slider", Min=0, Max=1022, LeftBitmap="r2ed_sun.tga", MiddleBitmap="r2ed_clouds.tga", RightBitmap="r2ed_storm.tga", ActiveBitmaps="true", onChange = updateWeather, Visible = function(form) return form.ManualWeather == 1 end }, --{Name="Season", Type="Number", WidgetStyle="EnumDropDown", DefaultValue="0", -- Enum= { "uiR2EDSeasonAuto", "uiR2EDSpring", "uiR2EDSummer", "uiR2EDAutumn", "uiR2EDWinter" }, --} }, onPostRender = function(formInstance) -- if form hasn't been modified, then continuously update weather from the db value if not formInstance.Modified and formInstance.ManualWeather then formInstance.WeatherValue = getWeatherValue() * 1022 r2.CurrentForm.Env.updateAll() end end, } -- -- User Defined Component -- function r2:userComponentOk(shortFilename, msg) r2.setCurrSelectedFile(shortFilename) messageBox(msg) end function r2:userComponentKo(shortFilename, msg) messageBox(msg.." in " .. shortFilename) r2.setCurrSelectedFile("") end -- called at init to fill the file list local function showUserDefinedComponent(formInstance) local fileGroupList = r2.CurrentForm:find('file_list') --local searchPath = select(config.R2ScenariiPath, "save") local searchPath = formInstance.Directory local files = getPathContent(searchPath) table.sort(files) fileGroupList:clear() for k, v in pairs(files) do if string.lower(nlfile.getExtension(v)) == formInstance.Extension then local shortFilename = nlfile.getFilename(v) local package = r2.UserComponentsManager:loadPackage(v) if package then local description= string.gsub(package.Description, "\n", "\\n") description= "Description="..description.."\\n\\n" local name = "Name= "..package.Name .. "\\n\\n" local md5 = "" local tstamp = "" local path="" if package.fileinfo and package.fileinfo.MD5 and package.fileinfo.TimeStamp and package.fileinfo.Package then md5 = "MD5="..package.fileinfo.MD5.."\\n\\n" tstamp = "TimeStamp=" .. tostring(package.fileinfo.TimeStamp) .. "\\n\\n" path = "Package="..package.fileinfo.Package.."\\n\\n" end local str = name..description .. md5..tstamp..path debugInfo(str) local entry = createGroupInstance("r2ed_filelist_entry", "", { id = tostring(k), text = "OK: " .. shortFilename, params_l="r2:userComponentOk('" .. shortFilename .. "', '"..str.."')" }) fileGroupList:addChild(entry) else local entry = createGroupInstance("r2ed_filelist_entry", "", { id = tostring(k), text = "KO: " .. shortFilename, params_l="r2:userComponentKo('" ..shortFilename .."', 'syntax error')" }) fileGroupList:addChild(entry) end end end setCaptureKeyboard(r2.CurrentForm:find("eb")) end r2.Forms.LoadUserComponent = { Caption = "uiR2EDLoadUserComponent", PropertySheetHeader = fileListXML, Prop = { {Name="Name", Type="String", Category="uiR2EDRollout_Load", ValidateOnEnter = true, MaxNumChar="512"} }, onShow = showUserDefinedComponent } r2.Forms.SpecialPaste = { Caption = "uiR2EDSpecialPaste", Prop = { { Name="CopyEvents", Type="Number", WidgetStyle="Boolean", InvertWidget="true", CaptionWidth=5, Visible = function(props) return props.CopyEvents >= 0 end }, { Name="CopyActivities", Type="Number", WidgetStyle="Boolean", InvertWidget="true", CaptionWidth=5, Visible = function(props) return props.CopyActivities >= 0 end }, { Name="DuplicateGroup", Type="Number", WidgetStyle="Boolean", InvertWidget="true", CaptionWidth=5, Visible = function(props) return props.DuplicateGroup >= 0 end }, --{ Name="CopyChatSequences", Type="Number", WidgetStyle="Boolean", InvertWidget="true", CaptionWidth=5, -- Visible = function(props) -- return props.CopyChatSequences >= 0 -- end -- }, }, }