-
Forum
-
- It is currently 12 Nov 2026, 12:34
- All times are UTC
The Lua scripting language allows you to give your plugin more advanced features.
-
Lakan Haraya
- Metropolitan
- Reactions:
- Posts: 129
- Joined: 28 Mar 2019, 07:34
- Location: Philippines
- Plugins: Showcase Store
- Version: Beta
-
Plugin Creator
Platform
Post
by Lakan Haraya » 03 Jul 2020, 13:30
Heya
(1) How can I find the tile of a certain building using
Script.EVENT_PLACED and using
Tile.getBuildingDraft(x,y), I used all of it, I put the id back but still can't find it.
Code: Select all
if event == SCRIPT.EVENT_PLACED and Tile.getBuildingDraft(x,y):getDraft() == "$galleon00" then
if gllg < 100 then
Builder.remove(x,y)
end
end
--rjroldan1
(2) How can I create or trigger a new map that will save in Single Cities, something like the DSA's moon map, and back to the origin city. How variable works between those maps? Can I have a sample lua script for it, if available

"ᜀᜃᜓ ᜀᜅ᜔ ᜁᜌᜓᜅ᜔ ᜑᜇᜌ"
CEO of Haráya Motors
“TheoTown Philippines Council”
“Kapulungan Ng Mga Nagkakaisang Lungsod”
-
JustAnyone
- Honorary Contributor
- Reactions:
- Posts: 3664
- Joined: 23 Jul 2017, 10:45
- Location: Easter Island
- Plugins: Showcase Store
-
Platform
Post
by JustAnyone » 03 Jul 2020, 14:44
1) In that case, he's comparing Draft with ID which will never return true
2)
Code: Select all
City.load(file location [str], overwrite the map with same name or not [bool], is available in single cities selection or not [bool], target city name [str])
In DSA's case, it loads an empty map and then other scripts take care of generation.
-
Bearbear76
- Inhabitant of a Multiverse
- Reactions:
- Posts: 5701
- Joined: 10 Feb 2017, 12:53
- Location: L2 cache
- Plugins: Showcase Store
-
Plugin Creator
Platform
Post
by Bearbear76 » 03 Jul 2020, 21:37
Think of
Drafts as an JSON object.
Code: Select all
{
"id": "$example",
"type": "decoration",
"width": 1,
"height": 1,
...
}
So think of
Tile.getBuildingDraft() as getting the code above. Now can you see why it's not the same as the id?
Now if you want to match ids you would have to add
:getId() to get the Id of the draft that was returned by
Tile.getBuildingDraft()
Just my opinion
retired
-
ian`
- Metropolitan
- Reactions:
- Posts: 117
- Joined: 04 Apr 2020, 15:36
- Location: 日本
- Plugins: Showcase Store
- Version: Beta
-
Plugin Creator
Platform
Post
by ian` » 04 Jul 2020, 14:03
How to use City.countBuildingsOfType(type[,level])? That's always show me an errors 'call nil'. I see the returns is number and level, then i set 2 variables, but it's still doesn't work.
_20200704_205106.JPG
You do not have the required permissions to view the files attached to this post.
-
Lobby
- Inhabitant of a Supercluster
- Reactions:
- Posts: 3756
- Joined: 26 Oct 2008, 10:34
- Plugins: Showcase Store
-
Post
by Lobby » 04 Jul 2020, 17:56
Thx, try it with
instead. Will be fixed in 1.8.91.
-
ian`
- Metropolitan
- Reactions:
- Posts: 117
- Joined: 04 Apr 2020, 15:36
- Location: 日本
- Plugins: Showcase Store
- Version: Beta
-
Plugin Creator
Platform
Post
by ian` » 15 Jul 2020, 09:23
Can i get an explanation about budgetItem and getCurrency(name)? Are there different functions and types of drafts? How can I make them and show in financial information?
Last edited by ian` on 23 Jul 2020, 10:22, edited 1 time in total.
-
Hadestia
- Inhabitant of a Megalopolis
- Reactions:
- Posts: 721
- Joined: 17 Jul 2017, 14:16
- Location: Philippines
- Plugins: Showcase Store
-
Plugin Creator
Platform
Post
by Hadestia » 22 Jul 2020, 08:55
Temgamer wrote: 26 Jun 2020, 20:14
Code: Select all
function buildZoneC(zeroX, zeroY, zoneId, radius)
zeroX = zeroX - radius
zeroY = zeroY - radius
local offset = 0
Builder.buildZone(Draft.getDraft(zoneId), zeroX + offset, zeroY)
for i=1, (radius * 2 + 1)^2 - 1 do
if i % (radius * 2 + 1) == 0 then
zeroY = zeroY + 1
offset = 0
else
offset = offset + 1
end
Builder.buildZone(Draft.getDraft(zoneId), zeroX + offset, zeroY)
end
end
Code underneath runs it, when player builds a building with <id>:
Code: Select all
function script:event(zeroX, zeroY, level, event)
if event == Script.EVENT_PLACED and Tile.getBuildingDraft(zeroX, zeroY):getId() == "<id> then
buildZoneC(zeroX, zeroY, "$zonecommercial", 2)
end
end
Result of build:
Ahotee_20-06-26_23.12.47.png
It also places zone under that building, btw
Wait how to used that
<id> cause i test it and nothings happened i think it missed the "getId() = <id>" there .
Also you didn't used variable:
"zoneId" from your buildZone function
-
Hadestia
- Inhabitant of a Megalopolis
- Reactions:
- Posts: 721
- Joined: 17 Jul 2017, 14:16
- Location: Philippines
- Plugins: Showcase Store
-
Plugin Creator
Platform
Post
by Hadestia » 22 Jul 2020, 10:01
Gonna ask again.
Can i use :
for my plugin?, Sorry i just ask in advance cause I can't play right now my phone always shutdown when i startup my theo donno why

,
-
ian`
- Metropolitan
- Reactions:
- Posts: 117
- Joined: 04 Apr 2020, 15:36
- Location: 日本
- Plugins: Showcase Store
- Version: Beta
-
Plugin Creator
Platform
Post
by ian` » 24 Jul 2020, 06:52
I think City.getCommercialJobs and getIndustrialJobs return the wrong values at one level higher of available inhabitant levels.
_20200724_133550.JPG
You can see at the image, com and ind TT are (0), but return from lua are 22 and 50.
_20200724_133538.JPG
It's same at TTT levels, it must be 0, but return from lua are 172 and 409.
TT version 1907
Thanks.

You do not have the required permissions to view the files attached to this post.
-
Lobby
- Inhabitant of a Supercluster
- Reactions:
- Posts: 3756
- Joined: 26 Oct 2008, 10:34
- Plugins: Showcase Store
-
Post
by Lobby » 24 Jul 2020, 12:59
@KINGTUT10101 version 1.9.09 will introduce an extra parameter happinessType for
City.getHappiness that will allow you to get more specific happiness values.
Using it will look like that:
Code:
Select all Reset
local value = City.getHappiness(City.HAPPINESS_PARK)
Debug.toast(value)
@distian The discrepancy that you've discovered is caused by the fact that the budget view shows the amount of all jobs that are created by buildings of a specific level. Your job numbers differ from that slightly in that even poor commercial places create a few higher level jobs (e.g. the boss of a facility is usually richer than his employees).
-
ian`
- Metropolitan
- Reactions:
- Posts: 117
- Joined: 04 Apr 2020, 15:36
- Location: 日本
- Plugins: Showcase Store
- Version: Beta
-
Plugin Creator
Platform
Post
by ian` » 27 Jul 2020, 09:12
i think there is a bug in City.getDisaster() functions. it always returned 'fire' no matter what disaster happened.
-
Lobby
- Inhabitant of a Supercluster
- Reactions:
- Posts: 3756
- Joined: 26 Oct 2008, 10:34
- Plugins: Showcase Store
-
Post
by Lobby » 27 Jul 2020, 09:34
True, I called the wrong function...
image.png
You do not have the required permissions to view the files attached to this post.
-
KINGTUT10101
- 1,000,000 inhabitants
- Reactions:
- Posts: 2208
- Joined: 07 Jul 2016, 20:50
- Location: 'Merica
- Plugins: Showcase Store
- Version: Beta
-
Plugin Creator
Platform
Post
by KINGTUT10101 » 28 Jul 2020, 14:02
@distian
How did you make the corners of this window round here? Is there a specific function for that?
Screenshot_20200728-085703.png
You do not have the required permissions to view the files attached to this post.
-
ian`
- Metropolitan
- Reactions:
- Posts: 117
- Joined: 04 Apr 2020, 15:36
- Location: 日本
- Plugins: Showcase Store
- Version: Beta
-
Plugin Creator
Platform
Post
by ian` » 28 Jul 2020, 21:02
KINGTUT10101 wrote: 28 Jul 2020, 14:02
@distian
How did you make the corners of this window round here? Is there a specific function for that?
Tbh, i used 5 rectangular layers. 2 layers for the shadow, 2 layers for the brighter color and 1 layer for the base.
-
Uncle Koala
- Metropolitan
- Reactions:
- Posts: 142
- Joined: 05 Apr 2020, 12:53
- Location: Pitcairn Islands
- Plugins: Showcase Store
- Version: Beta
-
Plugin Creator
Platform
Post
by Uncle Koala » 16 Aug 2020, 22: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

You do not have the required permissions to view the files attached to this post.
Lua is easy!
Code: Select all
if Car.GoingToCrashIntoEachOther()
then Car.DontCrash
end
-
ian`
- Metropolitan
- Reactions:
- Posts: 117
- Joined: 04 Apr 2020, 15:36
- Location: 日本
- Plugins: Showcase Store
- Version: Beta
-
Plugin Creator
Platform
Post
by ian` » 17 Aug 2020, 01:04
Uncle Koala wrote: 16 Aug 2020, 22: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