Autoraise: true ColorDiffuse: b: 1.0 g: 1.0 r: 1.0 CustomImage: CustomTile: Stackable: false Stretch: true Thickness: 0.1 Type: 0 ImageScalar: 1.0 ImageSecondaryURL: http://cloud-3.steamusercontent.com/ugc/959719855119695252/F9415595789317D4FAB83601CD43D165168FBA46/ ImageURL: http://cloud-3.steamusercontent.com/ugc/775107869055943792/F71B0D381488194732C8C56F4582709E5347D0C7/ WidthScale: 0.0 Description: '' DragSelectable: true GMNotes: '' GUID: f40183 Grid: true GridProjection: false Hands: false HideWhenFaceDown: false IgnoreFoW: false LayoutGroupSortIndex: 0 Locked: false LuaScript: !include 'Custom_Tile The Dream-Quest Campaign Log f40183.ttslua' LuaScriptState: '{"checkbox":[{"pos":[0.306,0.1,0.051],"size":250,"state":false},{"pos":[0.35,0.1,0.114],"size":250,"state":false},{"pos":[0.399,0.1,0.169],"size":250,"state":false},{"pos":[0.455,0.1,0.221],"size":250,"state":false},{"pos":[0.5,0.1,0.279],"size":250,"state":false},{"pos":[0.54,0.1,0.334],"size":250,"state":false},{"pos":[0.568,0.1,0.392],"size":250,"state":false},{"pos":[0.604,0.1,0.457],"size":250,"state":false},{"pos":[0.229,0.1,-0.007],"size":250,"state":false},{"pos":[-0.816,0.1,0.02],"size":250,"state":false}],"counter":[{"hideBG":true,"pos":[-0.7,0.1,-0.45],"size":400,"value":0},{"hideBG":true,"pos":[-0.5,0.1,-0.45],"size":400,"value":0},{"hideBG":true,"pos":[-0.517,0.1,-0.55],"size":300,"value":0},{"hideBG":true,"pos":[-0.274,0.1,-0.445],"size":400,"value":0},{"hideBG":true,"pos":[-0.06,0.1,-0.445],"size":400,"value":0},{"hideBG":true,"pos":[-0.061,0.1,-0.54],"size":300,"value":0},{"hideBG":true,"pos":[0.153,0.1,-0.44],"size":400,"value":0},{"hideBG":true,"pos":[0.379,0.1,-0.44],"size":400,"value":0},{"hideBG":true,"pos":[0.38,0.1,-0.54],"size":300,"value":0},{"hideBG":true,"pos":[0.614,0.1,-0.44],"size":400,"value":0},{"hideBG":true,"pos":[0.82,0.1,-0.44],"size":400,"value":0},{"hideBG":true,"pos":[0.827,0.1,-0.54],"size":300,"value":0}],"textbox":[{"alignment":2,"font_size":150,"label":"Click to type","pos":[-0.637,0.1,-0.7],"rows":1,"value":"","width":2000},{"alignment":2,"font_size":150,"label":"Click to type","pos":[-0.637,0.1,-0.625],"rows":1,"value":"","width":2000},{"alignment":2,"font_size":100,"label":"Click to type","pos":[-0.637,0.1,-0.27],"rows":9,"value":"","width":2000},{"alignment":2,"font_size":150,"label":"Click to type","pos":[-0.2,0.1,-0.7],"rows":1,"value":"","width":2000},{"alignment":2,"font_size":150,"label":"Click to type","pos":[-0.2,0.1,-0.625],"rows":1,"value":"","width":2000},{"alignment":2,"font_size":100,"label":"Click to type","pos":[-0.2,0.1,-0.27],"rows":9,"value":"","width":2000},{"alignment":2,"font_size":150,"label":"Click to type","pos":[0.241,0.1,-0.7],"rows":1,"value":"","width":2000},{"alignment":2,"font_size":150,"label":"Click to type","pos":[0.237,0.1,-0.62],"rows":1,"value":"","width":2000},{"alignment":2,"font_size":100,"label":"Click to type","pos":[0.24,0.1,-0.268],"rows":9,"value":"","width":2000},{"alignment":2,"font_size":150,"label":"Click to type","pos":[0.671,0.1,-0.7],"rows":1,"value":"","width":2000},{"alignment":2,"font_size":150,"label":"Click to type","pos":[0.671,0.1,-0.62],"rows":1,"value":"","width":2000},{"alignment":2,"font_size":100,"label":"Click to type","pos":[0.671,0.1,-0.265],"rows":9,"value":"","width":2000},{"alignment":2,"font_size":200,"label":"Click to type","pos":[-0.393,0.1,0.265],"rows":10,"value":"","width":3200},{"alignment":2,"font_size":150,"label":"Click to type","pos":[-0.417,0.1,0.881],"rows":4,"value":"","width":3500},{"alignment":2,"font_size":150,"label":"Click to type","pos":[-0.388,0.1,0.676],"rows":2,"value":"","width":3500},{"alignment":2,"font_size":150,"label":"Click to type","pos":[0.782,0.1,0.8],"rows":10,"value":"","width":1500}]}' MeasureMovement: false Name: Custom_Tile Nickname: The Dream-Quest Campaign Log Snap: true States: '2': Autoraise: true ColorDiffuse: b: 1.0 g: 1.0 r: 1.0 CustomImage: CustomTile: Stackable: false Stretch: true Thickness: 0.1 Type: 0 ImageScalar: 1.0 ImageSecondaryURL: http://cloud-3.steamusercontent.com/ugc/959719855119695252/F9415595789317D4FAB83601CD43D165168FBA46/ ImageURL: http://cloud-3.steamusercontent.com/ugc/775107869055944280/1D37D5E062542452B411D8A0EE668F75B7A909CF/ WidthScale: 0.0 Description: '' DragSelectable: true GMNotes: '' GUID: 4e2191 Grid: true GridProjection: false Hands: false HideWhenFaceDown: false IgnoreFoW: false LayoutGroupSortIndex: 0 Locked: false LuaScript: "--[[ Character Sheet Template by: MrStump\r\n\r\nYou can set\ \ up your own character sheet if you follow these steps.\r\n\r\nStep 1) Change\ \ the character sheet image\r\n -Right click on the character sheet, click\ \ Custom\r\n -Replace the image URL with one for your character sheet\r\n\ \ -Click import, make sure your sheet loads\r\n -SAVE THE GAME (the table\ \ setup)\r\n -LOAD FROM THAT SAVE YOU JUST MADE\r\n\r\nStep 2) Edit script\ \ to fit your character sheet\r\n -Below you will see some general options,\ \ and then the big data table\r\n -The data table is what determines how\ \ many of which buttons are made\r\n -Checkboxes\r\n -Counters\r\ \n -Textboxes\r\n -By default, there are 3 of each. You can add more\ \ or remove entries\r\n -If you intend to add/remove, be sure only to add/remove\ \ ENTRIES\r\n -This is what an entry looks like:\r\n {\r\n\ \ pos = {-0.977,0.1,-0.589},\r\n size = 800,\r\ \n state = false\r\n },\r\n -Deleting the whole\ \ thing would remove that specific item on the sheet\r\n -Copy and pasting\ \ it after another entry would create another\r\n -Each entry type has unique\ \ data points (pos, size, state, etc)\r\n -Do not try to add in your\ \ own data points or remove them individually\r\n -There is a summary\ \ of what each point does at the top of its category\r\n\r\nStep 3) Save and\ \ check script changes\r\n -Hit Save & Apply in the script window to save\ \ your code\r\n -You can edit your code as needed and Save+Apply as often\ \ as needed\r\n -When you are finished, make disableSave = false below then\ \ Save+apply\r\n -This enables saving, so your sheet will remember whats\ \ on it.\r\n\r\nBonus) Finding/Editing Positions for elements\r\n I have\ \ included a tool to get positions for buttons in {x,y,z} form\r\n Place\ \ it where you want the center of your element to be\r\n Then copy the table\ \ from the notes (lower right of screen)\r\n You can highlight it and\ \ CTRL+C\r\n Paste it into the data table where needed (pos=)\r\n If you\ \ want to manually tweek the values:\r\n {0,0,0} is the center of the\ \ character sheet\r\n {1,0,0} is right, {-1,0,0} is left\r\n {0,0,-1}\ \ is up, {0,0,1} is down\r\n 0.1 for Y is the height off of the page.\r\ \n If it was 0, it would be down inside the model of the sheet\r\n\ \r\nBegin editing below: ]]\r\n\r\n--Set this to true while editing and false\ \ when you have finished\r\ndisableSave = false\r\n--Remember to set this to\ \ false once you are done making changes\r\n--Then, after you save & apply it,\ \ save your game too\r\n\r\n--Color information for button text (r,g,b, values\ \ of 0-1)\r\nbuttonFontColor = {0,0,0}\r\n--Color information for button background\r\ \nbuttonColor = {0.902,0.886,0.788}\r\n--Change scale of button (Avoid changing\ \ if possible)\r\nbuttonScale = {0.1,0.1,0.1}\r\n\r\n--This is the button placement\ \ information\r\ndefaultButtonData = {\r\n --Add checkboxes\r\n checkbox =\ \ {\r\n --[[\r\n pos = the position (pasted from the helper tool)\r\ \n size = height/width/font_size for checkbox\r\n state = default\ \ starting value for checkbox (true=checked, false=not)\r\n ]]\r\n \ \ --1 checkbox\r\n {\r\n pos = {-0.931,0.1,-0.006},\r\n \ \ size = 250,\r\n state = false\r\n },\r\n --2 checkbox\r\ \n {\r\n pos = {-0.928,0.1,0.076},\r\n size = 250,\r\ \n state = false\r\n },\r\n --3 checkbox\r\n {\r\n \ \ pos = {-0.924,0.1,0.154},\r\n size = 250,\r\n \ \ state = false\r\n },\r\n --4 checkbox\r\n {\r\n pos\ \ = {-0.919,0.1,0.232},\r\n size = 250,\r\n state = false\r\ \n },\r\n --5 checkbox\r\n {\r\n pos = {-0.919,0.1,0.313},\r\ \n size = 250,\r\n state = false\r\n },\r\n --6\ \ checkbox\r\n {\r\n pos = {-0.914,0.1,0.388},\r\n \ \ size = 250,\r\n state = false\r\n },\r\n --7 checkbox\r\ \n {\r\n pos = {-0.914,0.1,0.471},\r\n size = 250,\r\ \n state = false\r\n },\r\n --8 checkbox\r\n {\r\n \ \ pos = {-0.915,0.1,0.548},\r\n size = 250,\r\n \ \ state = false\r\n },\r\n --9 checkbox\r\n {\r\n pos\ \ = {-0.915,0.1,0.624},\r\n size = 250,\r\n state = false\r\ \n },\r\n --End of checkboxes\r\n },\r\n --Add counters that have\ \ a + and - button\r\n counter = {\r\n --[[\r\n pos = the\ \ position (pasted from the helper tool)\r\n size = height/width/font_size\ \ for counter\r\n value = default starting value for counter\r\n \ \ hideBG = if background of counter is hidden (true=hidden, false=not)\r\ \n ]]\r\n --Slot one counter 1\r\n {\r\n pos\ \ = {-0.74,0.1,-0.45},\r\n size = 400,\r\n value\ \ = 0,\r\n hideBG = true\r\n },\r\n --Slot one counter\ \ 2\r\n {\r\n pos = {-0.54,0.1,-0.45},\r\n size\ \ = 400,\r\n value = 0,\r\n hideBG = true\r\n \ \ },\r\n --Slot one xp 1\r\n {\r\n pos = {-0.54,0.1,-0.55},\r\ \n size = 300,\r\n value = 0,\r\n hideBG\ \ = true\r\n },\r\n --Slot two counter 1\r\n {\r\n \ \ pos = {-0.3,0.1,-0.445},\r\n size = 400,\r\n \ \ value = 0,\r\n hideBG = true\r\n },\r\n --Slot\ \ two counter 2\r\n {\r\n pos = {-0.09,0.1,-0.445},\r\n\ \ size = 400,\r\n value = 0,\r\n hideBG\ \ = true\r\n },\r\n --Slot two xp 1\r\n {\r\n \ \ pos = {-0.09,0.1,-0.54},\r\n size = 300,\r\n \ \ value = 0,\r\n hideBG = true\r\n },\r\n --Slot three\ \ counter 1\r\n {\r\n pos = {0.13,0.1,-0.44},\r\n \ \ size = 400,\r\n value = 0,\r\n hideBG = true\r\ \n },\r\n --Slot three counter 2\r\n {\r\n pos\ \ = {0.34,0.1,-0.44},\r\n size = 400,\r\n value \ \ = 0,\r\n hideBG = true\r\n },\r\n --Slot three xp\ \ 1\r\n {\r\n pos = {0.35,0.1,-0.54},\r\n size\ \ = 300,\r\n value = 0,\r\n hideBG = true\r\n \ \ },\r\n --Slot four counter 1\r\n {\r\n pos =\ \ {0.58,0.1,-0.44},\r\n size = 400,\r\n value = 0,\r\ \n hideBG = true\r\n },\r\n --Slot four counter 2\r\ \n {\r\n pos = {0.78,0.1,-0.44},\r\n size \ \ = 400,\r\n value = 0,\r\n hideBG = true\r\n \ \ },\r\n --Slot four xp 1\r\n {\r\n pos = {0.78,0.1,-0.54},\r\ \n size = 300,\r\n value = 0,\r\n hideBG\ \ = true\r\n },\r\n\r\n --End of counters\r\n },\r\n --Add\ \ editable text boxes\r\n textbox = {\r\n --[[\r\n pos \ \ = the position (pasted from the helper tool)\r\n rows = how\ \ many lines of text you want for this box\r\n width = how wide the\ \ text box is\r\n font_size = size of text. This and \"rows\" effect\ \ overall height\r\n label = what is shown when there is no text.\ \ \"\" = nothing\r\n value = text entered into box. \"\" = nothing\r\ \n alignment = Number to indicate how you want text aligned\r\n \ \ (1=Automatic, 2=Left, 3=Center, 4=Right, 5=Justified)\r\n \ \ ]]\r\n --Slot one player\r\n {\r\n pos \ \ = {-0.677,0.1,-0.70},\r\n rows = 1,\r\n width\ \ = 2000,\r\n font_size = 150,\r\n label = \"\ Click to type\",\r\n value = \"\",\r\n alignment =\ \ 2\r\n },\r\n --Slot one investigator\r\n {\r\n \ \ pos = {-0.677,0.1,-0.625},\r\n rows = 1,\r\n \ \ width = 2000,\r\n font_size = 150,\r\n \ \ label = \"Click to type\",\r\n value = \"\",\r\n \ \ alignment = 2\r\n },\r\n --Slot one story\r\n {\r\ \n pos = {-0.677,0.1,-0.27},\r\n rows = 9,\r\ \n width = 2000,\r\n font_size = 100,\r\n \ \ label = \"Click to type\",\r\n value = \"\",\r\n \ \ alignment = 2\r\n },\r\n --Slot two player\r\n \ \ {\r\n pos = {-0.24,0.1,-0.70},\r\n rows \ \ = 1,\r\n width = 2000,\r\n font_size = 150,\r\n\ \ label = \"Click to type\",\r\n value = \"\"\ ,\r\n alignment = 2\r\n },\r\n --Slot two investigator\r\ \n {\r\n pos = {-0.24,0.1,-0.625},\r\n rows\ \ = 1,\r\n width = 2000,\r\n font_size = 150,\r\ \n label = \"Click to type\",\r\n value = \"\"\ ,\r\n alignment = 2\r\n },\r\n --Slot two story\r\n\ \ {\r\n pos = {-0.24,0.1,-0.27},\r\n rows\ \ = 9,\r\n width = 2000,\r\n font_size = 100,\r\ \n label = \"Click to type\",\r\n value = \"\"\ ,\r\n alignment = 2\r\n },\r\n --Slot three player\r\ \n {\r\n pos = {0.21,0.1,-0.70},\r\n rows\ \ = 1,\r\n width = 2000,\r\n font_size = 150,\r\ \n label = \"Click to type\",\r\n value = \"\"\ ,\r\n alignment = 2\r\n },\r\n --Slot three investigator\r\ \n {\r\n pos = {0.21,0.1,-0.62},\r\n rows\ \ = 1,\r\n width = 2000,\r\n font_size = 150,\r\ \n label = \"Click to type\",\r\n value = \"\"\ ,\r\n alignment = 2\r\n },\r\n --Slot three story\r\ \n {\r\n pos = {0.21,0.1,-0.268},\r\n rows\ \ = 9,\r\n width = 2000,\r\n font_size = 100,\r\ \n label = \"Click to type\",\r\n value = \"\"\ ,\r\n alignment = 2\r\n },\r\n --Slot four player\r\ \n {\r\n pos = {0.65,0.1,-0.70},\r\n rows\ \ = 1,\r\n width = 2000,\r\n font_size = 150,\r\ \n label = \"Click to type\",\r\n value = \"\"\ ,\r\n alignment = 2\r\n },\r\n --Slot four investigator\r\ \n {\r\n pos = {0.65,0.1,-0.62},\r\n rows\ \ = 1,\r\n width = 2000,\r\n font_size = 150,\r\ \n label = \"Click to type\",\r\n value = \"\"\ ,\r\n alignment = 2\r\n },\r\n --Slot four story\r\n\ \ {\r\n pos = {0.65,0.1,-0.265},\r\n rows\ \ = 9,\r\n width = 2000,\r\n font_size = 100,\r\ \n label = \"Click to type\",\r\n value = \"\"\ ,\r\n alignment = 2\r\n },\r\n --Campaign Notes 1\r\ \n {\r\n pos = {0.33,0.1,0.273},\r\n rows\ \ = 10,\r\n width = 2500,\r\n font_size = 150,\r\ \n label = \"Click to type\",\r\n value = \"\"\ ,\r\n alignment = 2\r\n },\r\n --Campaign Notes 2\r\ \n {\r\n pos = {0.48,0.1,0.632},\r\n rows\ \ = 8,\r\n width = 4000,\r\n font_size = 150,\r\ \n label = \"Click to type\",\r\n value = \"\"\ ,\r\n alignment = 2\r\n },\r\n --Killed Investigators\r\ \n {\r\n pos = {-0.542,0.1,0.867},\r\n rows\ \ = 4,\r\n width = 3500,\r\n font_size = 150,\r\ \n label = \"Click to type\",\r\n value = \"\"\ ,\r\n alignment = 2\r\n },\r\n --Steps of the Bridge\r\ \n {\r\n pos = {0.415,0.1,0.94},\r\n rows\ \ = 2,\r\n width = 3500,\r\n font_size = 150,\r\ \n label = \"Click to type\",\r\n value = \"\"\ ,\r\n alignment = 2\r\n },\r\n --Chaos Bag\r\n \ \ {\r\n pos = {0.797,0.1,0.26},\r\n rows \ \ = 10,\r\n width = 1500,\r\n font_size = 150,\r\n\ \ label = \"Click to type\",\r\n value = \"\"\ ,\r\n alignment = 2\r\n },\r\n --End of textboxes\r\ \n }\r\n}\r\n\r\n\r\n\r\n--Lua beyond this point, I recommend doing something\ \ more fun with your life\r\n\r\n\r\n\r\n--Save function\r\nlocal alreadySaving\ \ = false -- Copy this too!\r\nfunction updateSave()\r\n\r\n function string.replaceText(text,\ \ old, new)\r\n local b,e = text:find(old,1,true)\r\n if b==nil then\r\ \n return text\r\n else\r\n return text:sub(1,b-1) .. new\ \ .. text:sub(e+1)\r\n end\r\n end\r\n\r\n function wait(time)\r\n\ \ local start = os.time()\r\n repeat coroutine.yield(0) until os.time()\ \ > start + time\r\n end\r\n\r\n function deepcopy(orig)\r\n local\ \ orig_type = type(orig)\r\n local copy\r\n if orig_type == 'table'\ \ then\r\n copy = {}\r\n for orig_key, orig_value in next,\ \ orig, nil do\r\n copy[deepcopy(orig_key)] = deepcopy(orig_value)\r\ \n end\r\n setmetatable(copy, deepcopy(getmetatable(orig)))\r\ \n else -- number, string, boolean, etc\r\n copy = orig\r\n \ \ end\r\n return copy\r\n end\r\n\r\n function startSaving()\r\ \n while alreadySaving do\r\n wait(0.01)\r\n end\r\n alreadySaving\ \ = true\r\n local ref_buttonData = deepcopy(ref_buttonData)\r\n local\ \ input_values = {}\r\n local checkbox_values = {}\r\n local counter_values\ \ = {}\r\n\r\n local GUID = self.getGUID()\r\n local counter = 1\r\n \ \ for _, val in ipairs(ref_buttonData.textbox) do\r\n if val.value\ \ != nil then\r\n input_values[counter] = val.value\r\n val.value\ \ = \"u\"..GUID..\":iv:\"..counter..\"u\"\r\n counter = counter + 1\r\ \n end\r\n if val.label != nil then\r\n input_values[counter]\ \ = val.label\r\n val.label = \"u\"..GUID..\":iv:\"..counter..\"u\"\ \r\n counter = counter + 1\r\n end\r\n end\r\n\r\n local\ \ counter = 1\r\n for _, val in ipairs(ref_buttonData.checkbox) do\r\n \ \ if val.value != nil then\r\n checkbox_values[counter] = val.value\r\ \n val.value = \"u\"..GUID..\":bv:\"..counter..\"u\"\r\n counter\ \ = counter + 1\r\n end\r\n end\r\n\r\n local counter = 1\r\n \ \ for _, val in ipairs(ref_buttonData.counter) do\r\n if val.value\ \ != nil then\r\n counter_values[counter] = val.value\r\n \ \ val.value = \"u\"..GUID..\":cv:\"..counter..\"u\"\r\n counter = counter\ \ + 1\r\n if val.counters != nil then\r\n for _, val2 in\ \ ipairs(val.counters) do\r\n if val2.value != nil then\r\n \ \ counter_values[counter] = val2.value\r\n val2.value\ \ = \"u\"..GUID..\":cv:\"..counter..\"u\"\r\n counter = counter\ \ + 1\r\n end\r\n if val2.change_value != nil then\r\ \n counter_values[counter] = val2.change_value\r\n \ \ val2.change_value = \"u\"..GUID..\":cv:\"..counter..\"u\"\r\n \ \ counter = counter + 1\r\n end\r\n end\r\n\ \ end\r\n\r\n end\r\n end\r\n\r\n saved_data = JSON.encode(ref_buttonData)\r\ \n\r\n local counter = 1\r\n for _, val in ipairs(ref_buttonData.textbox)\ \ do\r\n if val.value != nil then\r\n saved_data = saved_data:replaceText(\"\ u\"..GUID..\":iv:\"..counter..\"u\", string.gsub(input_values[counter], \"[\\\ \\\\\"']\", \"\\\\%1\"))\r\n val.value = input_values[counter]\r\n\ \ counter = counter + 1\r\n end\r\n if val.label != nil\ \ then\r\n saved_data = saved_data:replaceText(\"u\"..GUID..\":iv:\"\ ..counter..\"u\", string.gsub(input_values[counter], \"[\\\\\\\"']\", \"\\\\\ %1\"))\r\n val.label = input_values[counter]\r\n counter =\ \ counter + 1\r\n end\r\n end\r\n\r\n local counter = 1\r\n \ \ for _, val in ipairs(ref_buttonData.checkbox) do\r\n if val.value !=\ \ nil then\r\n val.value = checkbox_values[counter]\r\n saved_data\ \ = saved_data:replaceText(\"u\"..GUID..\":bv:\"..counter..\"u\", string.gsub(checkbox_values[counter],\ \ \"[\\\\\\\"']\", \"\\\\%1\"))\r\n counter = counter + 1\r\n \ \ end\r\n end\r\n\r\n local counter = 1\r\n for _, val in ipairs(ref_buttonData.counter)\ \ do\r\n if val.value != nil then\r\n val.value = counter_values[counter]\r\ \n saved_data = saved_data:replaceText(\"u\"..GUID..\":cv:\"..counter..\"\ u\", string.gsub(counter_values[counter], \"[\\\\\\\"']\", \"\\\\%1\"))\r\n\ \ counter = counter + 1\r\n\r\n if val.counters != nil then\r\ \n for _, val2 in ipairs(val.counters) do\r\n if val2.value\ \ != nil then\r\n val2.value = counter_values[counter]\r\n \ \ saved_data = saved_data:replaceText(\"u\"..GUID..\":cv:\"..counter..\"\ u\", string.gsub(counter_values[counter], \"[\\\\\\\"']\", \"\\\\%1\"))\r\n\ \ counter = counter + 1\r\n end\r\n \ \ if val2.change_value != nil then\r\n val2.change_value = counter_values[counter]\r\ \n saved_data = saved_data:replaceText(\"u\"..GUID..\":cv:\"\ ..counter..\"u\", string.gsub(counter_values[counter], \"[\\\\\\\"']\", \"\\\ \\%1\"))\r\n counter = counter + 1\r\n end\r\n \ \ end\r\n end\r\n\r\n end\r\n end\r\n if disableSave==true\ \ then saved_data=\"\" end\r\n self.script_state = saved_data\r\n\r\n \ \ alreadySaving = false\r\n return 1\r\n end\r\n startLuaCoroutine(self,\ \ \"startSaving\")\r\nend\r\n\r\n--Startup procedure\r\nfunction onload(saved_data)\r\ \n if disableSave==true then saved_data=\"\" end\r\n if saved_data ~=\ \ \"\" then\r\n local loaded_data = JSON.decode(saved_data)\r\n \ \ ref_buttonData = loaded_data\r\n else\r\n ref_buttonData = defaultButtonData\r\ \n end\r\n\r\n spawnedButtonCount = 0\r\n createCheckbox()\r\n createCounter()\r\ \n createTextbox()\r\nend\r\n\r\n\r\n\r\n--Click functions for buttons\r\n\ \r\n\r\n\r\n--Checks or unchecks the given box\r\nfunction click_checkbox(tableIndex,\ \ buttonIndex)\r\n if ref_buttonData.checkbox[tableIndex].state == true then\r\ \n ref_buttonData.checkbox[tableIndex].state = false\r\n self.editButton({index=buttonIndex,\ \ label=\"\"})\r\n else\r\n ref_buttonData.checkbox[tableIndex].state\ \ = true\r\n self.editButton({index=buttonIndex, label=string.char(10008)})\r\ \n end\r\n updateSave()\r\nend\r\n\r\n--Applies value to given counter\ \ display\r\nfunction click_counter(tableIndex, buttonIndex, amount)\r\n \ \ ref_buttonData.counter[tableIndex].value = ref_buttonData.counter[tableIndex].value\ \ + amount\r\n self.editButton({index=buttonIndex, label=ref_buttonData.counter[tableIndex].value})\r\ \n updateSave()\r\nend\r\n\r\n--Updates saved value for given text box\r\n\ function click_textbox(i, value, selected)\r\n if selected == false then\r\ \n ref_buttonData.textbox[i].value = value\r\n updateSave()\r\n\ \ end\r\nend\r\n\r\n--Dud function for if you have a background on a counter\r\ \nfunction click_none() end\r\n\r\n\r\n\r\n--Button creation\r\n\r\n\r\n\r\n\ --Makes checkboxes\r\nfunction createCheckbox()\r\n for i, data in ipairs(ref_buttonData.checkbox)\ \ do\r\n --Sets up reference function\r\n local buttonNumber =\ \ spawnedButtonCount\r\n local funcName = \"checkbox\"..i\r\n \ \ local func = function() click_checkbox(i, buttonNumber) end\r\n self.setVar(funcName,\ \ func)\r\n --Sets up label\r\n local label = \"\"\r\n \ \ if data.state==true then label=string.char(10008) end\r\n --Creates\ \ button and counts it\r\n self.createButton({\r\n label=label,\ \ click_function=funcName, function_owner=self,\r\n position=data.pos,\ \ height=data.size, width=data.size,\r\n font_size=data.size, scale=buttonScale,\r\ \n color=buttonColor, font_color=buttonFontColor\r\n })\r\n\ \ spawnedButtonCount = spawnedButtonCount + 1\r\n end\r\nend\r\n\r\ \n--Makes counters\r\nfunction createCounter()\r\n for i, data in ipairs(ref_buttonData.counter)\ \ do\r\n --Sets up display\r\n local displayNumber = spawnedButtonCount\r\ \n --Sets up label\r\n local label = data.value\r\n --Sets\ \ height/width for display\r\n local size = data.size\r\n if data.hideBG\ \ == true then size = 0 end\r\n --Creates button and counts it\r\n \ \ self.createButton({\r\n label=label, click_function=\"click_none\"\ , function_owner=self,\r\n position=data.pos, height=size, width=size,\r\ \n font_size=data.size, scale=buttonScale,\r\n color=buttonColor,\ \ font_color=buttonFontColor\r\n })\r\n spawnedButtonCount = spawnedButtonCount\ \ + 1\r\n\r\n --Sets up add 1\r\n local funcName = \"counterAdd\"\ ..i\r\n local func = function() click_counter(i, displayNumber, 1) end\r\ \n self.setVar(funcName, func)\r\n --Sets up label\r\n \ \ local label = \"+\"\r\n --Sets up position\r\n local offsetDistance\ \ = (data.size/2 + data.size/4) * (buttonScale[1] * 0.002)\r\n local\ \ pos = {data.pos[1] + offsetDistance, data.pos[2], data.pos[3]}\r\n \ \ --Sets up size\r\n local size = data.size / 2\r\n --Creates\ \ button and counts it\r\n self.createButton({\r\n label=label,\ \ click_function=funcName, function_owner=self,\r\n position=pos,\ \ height=size, width=size,\r\n font_size=size, scale=buttonScale,\r\ \n color=buttonColor, font_color=buttonFontColor\r\n })\r\n\ \ spawnedButtonCount = spawnedButtonCount + 1\r\n\r\n --Sets up\ \ subtract 1\r\n local funcName = \"counterSub\"..i\r\n local\ \ func = function() click_counter(i, displayNumber, -1) end\r\n self.setVar(funcName,\ \ func)\r\n --Sets up label\r\n local label = \"-\"\r\n \ \ --Set up position\r\n local pos = {data.pos[1] - offsetDistance, data.pos[2],\ \ data.pos[3]}\r\n --Creates button and counts it\r\n self.createButton({\r\ \n label=label, click_function=funcName, function_owner=self,\r\n\ \ position=pos, height=size, width=size,\r\n font_size=size,\ \ scale=buttonScale,\r\n color=buttonColor, font_color=buttonFontColor\r\ \n })\r\n spawnedButtonCount = spawnedButtonCount + 1\r\n end\r\ \nend\r\n\r\nfunction createTextbox()\r\n for i, data in ipairs(ref_buttonData.textbox)\ \ do\r\n --Sets up reference function\r\n local funcName = \"\ textbox\"..i\r\n local func = function(_,_,val,sel) click_textbox(i,val,sel)\ \ end\r\n self.setVar(funcName, func)\r\n\r\n self.createInput({\r\ \n input_function = funcName,\r\n function_owner = self,\r\ \n label = data.label,\r\n alignment = data.alignment,\r\ \n position = data.pos,\r\n scale = buttonScale,\r\ \n width = data.width,\r\n height = (data.font_size*data.rows)+24,\r\ \n font_size = data.font_size,\r\n color \ \ = buttonColor,\r\n font_color = buttonFontColor,\r\n \ \ value = data.value,\r\n })\r\n end\r\nend\r\n" LuaScriptState: '{"checkbox":[{"pos":[-0.931,0.1,-0.006],"size":250,"state":false},{"pos":[-0.928,0.1,0.076],"size":250,"state":false},{"pos":[-0.924,0.1,0.154],"size":250,"state":false},{"pos":[-0.919,0.1,0.232],"size":250,"state":false},{"pos":[-0.919,0.1,0.313],"size":250,"state":false},{"pos":[-0.914,0.1,0.388],"size":250,"state":false},{"pos":[-0.914,0.1,0.471],"size":250,"state":false},{"pos":[-0.915,0.1,0.548],"size":250,"state":false},{"pos":[-0.915,0.1,0.624],"size":250,"state":false}],"counter":[{"hideBG":true,"pos":[-0.74,0.1,-0.45],"size":400,"value":0},{"hideBG":true,"pos":[-0.54,0.1,-0.45],"size":400,"value":0},{"hideBG":true,"pos":[-0.54,0.1,-0.55],"size":300,"value":0},{"hideBG":true,"pos":[-0.3,0.1,-0.445],"size":400,"value":0},{"hideBG":true,"pos":[-0.09,0.1,-0.445],"size":400,"value":0},{"hideBG":true,"pos":[-0.09,0.1,-0.54],"size":300,"value":0},{"hideBG":true,"pos":[0.13,0.1,-0.44],"size":400,"value":0},{"hideBG":true,"pos":[0.34,0.1,-0.44],"size":400,"value":0},{"hideBG":true,"pos":[0.35,0.1,-0.54],"size":300,"value":0},{"hideBG":true,"pos":[0.58,0.1,-0.44],"size":400,"value":0},{"hideBG":true,"pos":[0.78,0.1,-0.44],"size":400,"value":0},{"hideBG":true,"pos":[0.78,0.1,-0.54],"size":300,"value":0}],"textbox":[{"alignment":2,"font_size":150,"label":"Click to type","pos":[-0.677,0.1,-0.7],"rows":1,"value":"","width":2000},{"alignment":2,"font_size":150,"label":"Click to type","pos":[-0.677,0.1,-0.625],"rows":1,"value":"","width":2000},{"alignment":2,"font_size":100,"label":"Click to type","pos":[-0.677,0.1,-0.27],"rows":9,"value":"","width":2000},{"alignment":2,"font_size":150,"label":"Click to type","pos":[-0.24,0.1,-0.7],"rows":1,"value":"","width":2000},{"alignment":2,"font_size":150,"label":"Click to type","pos":[-0.24,0.1,-0.625],"rows":1,"value":"","width":2000},{"alignment":2,"font_size":100,"label":"Click to type","pos":[-0.24,0.1,-0.27],"rows":9,"value":"","width":2000},{"alignment":2,"font_size":150,"label":"Click to type","pos":[0.21,0.1,-0.7],"rows":1,"value":"","width":2000},{"alignment":2,"font_size":150,"label":"Click to type","pos":[0.21,0.1,-0.62],"rows":1,"value":"","width":2000},{"alignment":2,"font_size":100,"label":"Click to type","pos":[0.21,0.1,-0.268],"rows":9,"value":"","width":2000},{"alignment":2,"font_size":150,"label":"Click to type","pos":[0.65,0.1,-0.7],"rows":1,"value":"","width":2000},{"alignment":2,"font_size":150,"label":"Click to type","pos":[0.65,0.1,-0.62],"rows":1,"value":"","width":2000},{"alignment":2,"font_size":100,"label":"Click to type","pos":[0.65,0.1,-0.265],"rows":9,"value":"","width":2000},{"alignment":2,"font_size":150,"label":"Click to type","pos":[0.33,0.1,0.273],"rows":10,"value":"","width":2500},{"alignment":2,"font_size":150,"label":"Click to type","pos":[0.48,0.1,0.632],"rows":8,"value":"","width":4000},{"alignment":2,"font_size":150,"label":"Click to type","pos":[-0.542,0.1,0.867],"rows":4,"value":"","width":3500},{"alignment":2,"font_size":150,"label":"Click to type","pos":[0.415,0.1,0.94],"rows":2,"value":"","width":3500},{"alignment":2,"font_size":150,"label":"Click to type","pos":[0.797,0.1,0.26],"rows":10,"value":"","width":1500}]}' MeasureMovement: false Name: Custom_Tile Nickname: The Web of Dreams Campaign Log Snap: true Sticky: true Tooltip: true Transform: posX: -1.21967971 posY: 1.47529829 posZ: -26.8667126 rotX: 359.9201 rotY: 270.0728 rotZ: 0.0167700723 scaleX: 6.5 scaleY: 1.0 scaleZ: 6.5 XmlUI: '' Sticky: true Tooltip: true Transform: posX: -1.22 posY: 1.48 posZ: -26.87 rotX: 359.92 rotY: 270.07 rotZ: 0.02 scaleX: 6.5 scaleY: 1.0 scaleZ: 6.5 XmlUI: ''