Page 6 of 10
Re: Lua chatbox
Posted: 29 Jul 2020, 01:24
by KINGTUT10101
Dang, I was hoping it was just a simple command. I actually had the same idea to make rounded corners that way, but I thought I would ask you about it first.
Re: Lua chatbox
Posted: 17 Aug 2020, 00:03
by Uncle Koala
Spent quite some time trying to get this to work

- sand.gif (2.63 MiB) Viewed 20573 times
I wonder why does Builder.buildGround remove trees? Would be cooler if it didn't but then we wouldn't have this GIF

Re: Lua chatbox
Posted: 17 Aug 2020, 03:04
by ian`
Uncle Koala wrote: ↑17 Aug 2020, 00:03
Spent quite some time trying to get this to work
sand.gif
I wonder why does Builder.buildGround remove trees? Would be cooler if it didn't but then we wouldn't have this GIF
For now, you can try like this:
Code:
Select all Reset
local tree
local treeFrame
function script:earlyTap(x,y)
if Tile.isTree(x,y) then -- condition if any trees in position
tree = Tile.getTreeDraft(x,y) -- get tree draft
treeFrame = Tile.getTreeFrame(x,y) -- get tree frame
Builder.buildGround('$asphalt00',x,y)
Builder.buildTree(tree,x,y,treeFrame) -- build tree after build ground
else -- condition if no tree in position
Builder.buildGround('$asphalt00',x,y)
end
return false
end
Re: Lua chatbox
Posted: 17 Aug 2020, 10:38
by Uncle Koala
Thanks! That works nicely!
Re: Lua chatbox
Posted: 17 Aug 2020, 15:27
by Uncle Koala
How can I get the y position of a building using
City.getBuilding? I can get x by doing
Code: Select all
local draft = $ktt_koala01
City.getBuilding(1, draft)
but I don't know how to get y value
Re: Lua chatbox
Posted: 17 Aug 2020, 15:40
by ian`
Code:
Select all Reset
local x, y = City.getBuilding(1, draft)
local x,y,scale = City.getView()
local draft, number = City.getRank()
Re: Lua chatbox
Posted: 17 Aug 2020, 15:45
by Uncle Koala
I knew I was missing something simple. Thanks!

- town of marble.gif (11.09 MiB) Viewed 20535 times
Re: Lua chatbox
Posted: 24 Aug 2020, 19:12
by Uncle Koala
Builder.BuildBuilding doesn't seem to work with RCI.
Building a park works...
Code:
Select all Reset
function script:nextDay()
draft = Draft.getDraft("$park01")
Debug.toast("Building", draft)
if Builder.isBuildingBuildable(draft, 0, 0)
then Debug.toast("Buildable!" )
else Debug.toast("Nope!" )
end
Builder.buildBuilding(draft, 0, 0, 0)
end
... but if I change it to a residential house, it doesn't work.
Code:
Select all Reset
function script:nextDay()
draft = Draft.getDraft("$res01")
Debug.toast("Building", draft)
if Builder.isBuildingBuildable(draft, 0, 0)
then Debug.toast("Buildable!" )
else Debug.toast("Nope!" )
end
Builder.buildBuilding(draft, 0, 0, 0)
end
I also tried manually placing a zone across the entire map, but it still doesn't want to build residential stuff on it.
Re: Lua chatbox
Posted: 24 Aug 2020, 19:16
by CommanderABab
Is it zoned?
Re: Lua chatbox
Posted: 24 Aug 2020, 19:34
by Uncle Koala
Yes, everything is zoned. I also tried adding Builder.buildZone to my script. The zone is built but the house isn't, and the toast still says Nope! which means Lua doesn't see that tile as buildable even if it's zoned.
Re: Lua chatbox
Posted: 24 Aug 2020, 19:57
by CommanderABab
Why don't you try testing for buildable park and if that is true, build the zone and the res01 anyway.
Is it next to a road?

Re: Lua chatbox
Posted: 24 Aug 2020, 20:11
by Uncle Koala
Thanks

, it only builds if there's a road next to that tile. A bit weird, but understandable. I was trying to build RCI stuff just to see if they will be set as "Untouchable" if they are built by Lua. Turns out they won't be set as untouchable.
Suggestion to devs: please add something like Tile.setUntouchable(x, y)

Re: Lua chatbox
Posted: 04 Sep 2020, 17:36
by MarioBitMap
Why isn't my script working?
When playing, I can Access to the menu I've created, but when pressing the button it doesn't shows the next menu.
Code:
Select all Reset
local function showMenu(dialog)
local parent = GUI.get'$menuparent'
local d = '$townhall01'
local x = City.countBuildings(d)
GUI.createMenu{
source = parent,
actions = {
{icon = Icon.BUILD, text = 'Town Halls:' , onClick = function() Debug.toast(x) end},
}
}
end
local function showDialog()
local dialog
dialog = GUI.createDialog{
icon = script:getDraft():getPreviewFrame(),
title = 'Test 1',
text = 'Will this work? lol',
width = 250,
height = 120,
actions = {
{
id = '$menuparent',
icon = Icon.BUILD,
text = equis,
onClick = function() showMenu(dialog) end,
autoClose = false
},
}
}
closeDialog = dialog.close
end
function script:init()
if closeDialog then
closeDialog()
closeDialog = nil
showDialog()
end
end
function script:event(_, _, _, event)
if event == Script.EVENT_TOOL_ENTER then
GUI.get('cmdCloseTool'):click()
showDialog()
end
end
Thanks in advance!!

Re: Lua chatbox
Posted: 04 Sep 2020, 19:39
by Lobby
Hi, I guess it's because of these lines:
Code: Select all
local d = '$townhall01'
local x = City.countBuildings(d)
City.countBuildings expects a draft rather than the id of a draft. This should work:
Code: Select all
local d = Draft.getDraft('$townhall01')
local x = City.countBuildings(d)
Re: Lua chatbox
Posted: 04 Sep 2020, 22:46
by MarioBitMap
Oh I see, thankyou very much!
Just testing the implementation of a new resource as a variable through

Re: Lua chatbox
Posted: 05 Sep 2020, 01:14
by MarioBitMap

Is there any way to load and image with lua and use it as an icon? I mean, can I assign an image to a variable wich will be shown when I use that variable in
... icon = Icon.EXAMPLE, ...
or are Icon.EXAMPLE a type of harcoded resource that can't be added by users?
Thanks in advance!
Re: Lua chatbox
Posted: 05 Sep 2020, 03:21
by ian`
I think Icon.EX is hardcoded, because its actually return number.
If you want to add your icons, you still have to write the Json code to making a draft for the image.
Code:
Select all Reset
[
{
"id":"iconId",
"type":"animation",
"frames":[{"bmp":"icon.png", "w":24, "h":24}]
}
]
If you want to use it on multiple line, you can assigned it to a variable.
Code:
Select all Reset
-- you also can make the Json code from lua and call it with Draft.append
local iconImage = [[
[
{
"id":"iconId",
"type":"animation",
"frames":[{"bmp":"icon.png", "w":24, "h":24}]
}
]
]]
Draft.append(iconImage)
local yourIcon = Draft.getDraft('iconId'):getFrame(1)
-- Or you can make it to be a table
local icon = {}
icon.FIRST_ICON = Draft.getDraft('iconId'):getFrame(1)
icon.SECOND_ICON = Draft.getDraft('iconId'):getFrame(1)
icon.ANOTHER_ICON = Draft.getDraft('iconId'):getFrame(1)
-- To use
GUI.createDialog{
icon = icon.FIRST_ICON
}
Re: Lua chatbox
Posted: 05 Sep 2020, 04:10
by MarioBitMap
I'll test it tomorrow, it's 4am lol. It makes sense I have to draft the json and get the image from there.
Thanks for the help and spending your time into this, hope you have a great day/night!

Re: Lua chatbox
Posted: 05 Sep 2020, 12:10
by MarioBitMap

There's an error. It says attempt to call a nil value, at
Draft .append(iconImage)
However, the forum's lua tester doesn't agree with the error given at the game with loading the lua file.
Looks like the game doesn't recognizes Draft functions.
When cut- pasting the code into a local function the error disappears, but the game isn't able to show the icon or open the menu it is linked to.
Code:
Select all Reset
--This is a test for TT:TT plugin, (TheoTown Time Travel)
--Sill got to move part of this into a data type json object, not a menu.
local function showMenu(dialog)
local parent = GUI.get'$menuparent'
local d = Draft.getDraft('$res00')
--Will be woodcutter00 in a future.
local x = City.countBuildings(d)
local x2 = 1.15
local wood = math.floor(x2*x + 0.51)
local woodIconJson = [[
[
{
"id":"WCRIcon",
"type":"animation",
"frames":[{"bmp":"ancienticon.png"}]
}
]
]]
Draft.append('woodIconJson')
local iconWOOD = Draft.getDraft('WCRIcon'):getFrame(1)
GUI.createMenu{
source = parent,
actions = {
{icon = iconWOOD, text = "Houses: "..wood, onClick = function() end},
}
}
end
local function showDialog()
local dialog
dialog = GUI.createDialog{
icon = script:getDraft():getPreviewFrame(),
title = 'Test 1',
text = 'Will this work? lol',
width = 250,
height = 120,
actions = {
{
id = '$menuparent',
icon = IconWOOD,
text = equis,
onClick = function() showMenu(dialog) end,
autoClose = false
},
}
}
closeDialog = dialog.close
end
function script:init()
if closeDialog then
closeDialog()
closeDialog = nil
showDialog()
end
end
function script:event(_, _, _, event)
if event == Script.EVENT_TOOL_ENTER then
GUI.get('cmdCloseTool'):click()
showDialog()
end
end
Re: Lua chatbox
Posted: 05 Sep 2020, 13:04
by ian`
Code:
Select all Reset
Draft.append(woodIconJson) -- variable name aren't string, don't use quotation marks.