Compare commits

...

208 Commits
v141.1 ... v143

Author SHA1 Message Date
Anuken
b88a215dc5 Merge remote-tracking branch 'origin/master' 2023-03-31 23:05:00 -04:00
Anuken
36e5522694 JSON planet cloudMesh/HexSkyMesh support 2023-03-31 23:04:55 -04:00
Github Actions
226e8b8a20 Automatic bundle update 2023-04-01 02:45:47 +00:00
Anuken
43424547f2 Setprop description 2023-03-31 22:44:54 -04:00
Anuken
d2f2189441 Merge remote-tracking branch 'origin/master' 2023-03-31 22:03:02 -04:00
Anuken
e81cd5b68e Better impl of #8451 2023-03-31 22:02:57 -04:00
Xasmedy
c30cbc0f20 Update contributors (#8450) 2023-03-31 16:30:14 -04:00
Xasmedy
e79a97ed92 Adding a new menu type. (#8449)
* Added a new type of menu.

* Renamed the methods and fixed buttons not selecting.

* Fixed followUpMenu and menu having different dialogs.

* Applying review changes.
- Refactored the menu dialog instantiation.
- Fixed the single-line else statement.
2023-03-31 14:21:41 -04:00
MEEPofFaith
ac19c3f160 bridgeReplacement for ducts (#8447) 2023-03-30 21:23:53 -04:00
Phinner
375837eef5 Update Xpdustry servers (#8446)
* Update Xpdustry servers

* Add warning about SRV records

* Remove default port

* And now... Dik is gone too
2023-03-30 18:26:05 -04:00
Volas171
c59d3d5279 Update servers_v7.json (#8443) 2023-03-28 18:04:35 -04:00
Suportik-GFX
d1c506330b Update servers_v7.json (#8441)
adding one more server under the Exploding Cowards.
2023-03-28 14:04:07 -04:00
Anuken
b81e942479 Fixed RadialEffect + MultiEffect 2023-03-27 10:40:16 -04:00
Anuken
e36a70749c might as well blacklist it in the game too 2023-03-27 10:19:35 -04:00
Anuken
4db085bd07 Fixed #8435 2023-03-27 10:07:41 -04:00
Anuken
cd7088d241 Closes Anuken/Mindustry-Suggestions/issues/4353 2023-03-26 23:17:08 -04:00
Anuken
821569aafb Merge remote-tracking branch 'origin/master' 2023-03-26 22:46:35 -04:00
Anuken
83a059b2da Multi-line server list 2023-03-26 22:46:30 -04:00
MEEPofFaith
0de2c95f6e (Optionally) Scale efficiency of attribute crafters (#8433)
* Scale efficiency of attribute crafters

* Make it optional :D

* Call super
2023-03-26 14:53:14 -04:00
MEEPofFaith
fcb44e4952 Fix frags in frags creating a large empty space (#8430)
* Fix frags in frags creating a large empty space

* Change suppression message

Consistency with status duration

* Too little space between boxes
2023-03-26 11:53:46 -04:00
Github Actions
af26e60a4f Automatic bundle update 2023-03-26 02:45:57 +00:00
MEEPofFaith
6b936aa7f6 Better Ammo Stats Display (#8429)
* Cleaner ammo stats based on unit factory recipe stats

* Display suppression in bullet stats

Also reword from "regen" to "repair" to more accurately convey that build towers are affected as well.

* PointLaserBulletTypes don't display damage in dps

* Display preview region instead of region

* autoFixed
2023-03-25 22:45:07 -04:00
MEEPofFaith
f6a8c7509d Include int[] in readObject/writeObject (#8400)
* Include int[] in readObject/writeObject

* The almighty Object[]

* Order
2023-03-25 14:31:14 -04:00
Anuken
deb814ce58 Merge remote-tracking branch 'origin/master' 2023-03-25 14:26:50 -04:00
Anuken
da4371baf8 Removed pointless CRC check 2023-03-25 14:26:46 -04:00
MEEPofFaith
47a2afd294 More specific ui scaling options (#8356)
Increments of 5 instead of 25
2023-03-25 14:24:09 -04:00
MEEPofFaith
0122b735a0 Pierce damage decay (#8416) 2023-03-25 14:06:14 -04:00
MEEPofFaith
9c3ddc398c Battery Graphical Updates (#8323)
* Battery Graphical Updates

* Add the vanilla fields back

* Add back topRegion and depricate it
2023-03-25 14:00:08 -04:00
HamzaGSopp
0ccbe68a65 new server v7 (#8426)
new server Tamazia
2023-03-25 13:58:10 -04:00
Suportik-GFX
30cd6a7de6 Update servers_v7.json (#8421) 2023-03-25 13:57:50 -04:00
Brandons404
23a2596e29 added pvp server to fish (#8413) 2023-03-25 13:57:20 -04:00
TheRadioactiveBanana
b88422b17e Add eradication mindustry HexPvP && Hub server (#8380) 2023-03-25 13:57:11 -04:00
thedimas
09a9b68331 [thedimas] Use IP instead of domain (#8393) 2023-03-25 13:56:48 -04:00
BalaM314
08f63122ba Set controller after setting spawnedByCore (fix UnitChangeEvent) (#8428)
* CoreBlock.playerSpawn: Set spawnedByCore first
* The call to unit.controller() calls player.unit(unit)
* That function fires UnitChangeEvent
* The unit in UnitChangeEvent has spawnedByCore incorrectly set to false
* This caused me to waste an hour of my life while making a plugin

* Might as well improve code readability
2023-03-25 13:55:26 -04:00
phoskee
355f33b0a4 Update bundle_it.properties (#8411)
Fixed errors
Translated some sentences
2023-03-25 13:52:04 -04:00
MEEPofFaith
90f7bbae65 Make an interface for blocks that spawn tethered units (#8395) 2023-03-25 13:51:43 -04:00
Даркнесс#3729
4be7cf5c0e Call.textInput (#8355)
* Update Menus.java

* Update EventType.java

* Update UI.java

* WHY

* WHY x2

* fix

* 💀
2023-03-25 13:50:25 -04:00
Pasu4
58eef49284 Scale planet grid to planet radius (#8381)
* Scale planet grid to planet radius

* Fix skewed sector icons on small planets
2023-03-25 13:50:06 -04:00
MEEPofFaith
b030a51485 If it don't collide, don't collide (#8388) 2023-03-25 13:49:22 -04:00
MEEPofFaith
aec3e178f5 Fix armor piercing ignoring status effect health multiplier (#8387)
* Make rawDamage protected

* pierceArmor ignores status effect health multiplier

* This is no longer the case
2023-03-25 13:47:53 -04:00
gorodmi
ee47d8a20a Allow 0 items (#8389) 2023-03-25 13:46:55 -04:00
南门阳德
5c05c9f1d1 Fix memory leak in pools (#8415) 2023-03-25 13:46:11 -04:00
Anuken
172f47cad6 Fixed #8418 2023-03-25 13:36:45 -04:00
Anuken
a8b3350d61 Fixed #8401 2023-03-25 13:20:04 -04:00
Anuken
b324194295 Merge remote-tracking branch 'origin/master' 2023-03-25 13:16:15 -04:00
Anuken
663fa2bd3f Fixed #8399 2023-03-25 13:16:12 -04:00
SITUVNgcd
4ddb78e8d5 Add Events.fire(Trigger.unitCommandChange) in select/remove unit by type (#8406)
* Added `Events.fire(Trigger.unitCommandChange)` and `boolean fireInRebuildCommand`

Added `Events.fire(Trigger.unitCommandChange)` to **left click - select** and **right click - remove**.
Added `boolean fireInRebuildCommand` to prevent infinite event loop with `rebuildCommand`.

* Remove useless `fireInRebuildCommand` flag.
2023-03-25 13:10:21 -04:00
Anuken
f23d203095 Merge remote-tracking branch 'origin/master' 2023-03-25 13:01:16 -04:00
Anuken
dfce361afc Fixed #8423 2023-03-25 13:01:12 -04:00
Github Actions
2553891c25 Automatic bundle update 2023-03-25 16:43:28 +00:00
Anuken
e4bef567b5 Fixed Steam public lobby hosting / Misc Steam bugfixes 2023-03-25 12:42:29 -04:00
Anuken
0daafc5ff3 Steam kick bugfixes 2023-03-25 11:11:06 -04:00
Anuken
d07706e039 Pathfinder bugfixes 2023-03-18 16:18:16 -04:00
Anuken
ca2b51d4fe Merge remote-tracking branch 'origin/master' 2023-03-09 05:25:41 -05:00
Anuken
bae3884d96 Basic setProp implementation 2023-03-09 05:25:35 -05:00
MEEPofFaith
515a6f9c8d json-able attributes (#8334) 2023-03-08 13:11:53 -05:00
Joan Josep
d937af7497 Update bundle_ca.properties (#8341)
Missatge reforçat->Missatge destacat
Unir->Uneix (use imperative in buttons)
2023-03-08 09:25:56 -05:00
Github Actions
a216c9c56e Automatic bundle update 2023-03-08 14:21:36 +00:00
Ngọc Lam
0e9f250e93 Vietnamese translation for mindustry v7 update (Phase 1) (#7843)
* Update bundle_vi.properties

* Update bundle_vi.properties

* Alot of todo ...

* More...

* REEEEEEEE

* Alot of descriptions

* re-translate sectors desc

* fck VSC

* update sector descriptions

* Sector hints

* Block description

---------

Co-authored-by: Arckyn Nightingale <86044974+Kynarc@users.noreply.github.com>
Co-authored-by: Anuken <arnukren@gmail.com>
2023-03-08 09:20:48 -05:00
MEEPofFaith
10e0be9d68 Drill multipliers for regular drills and beam drills (#8339)
* Drill multipliers for other drills

* h
2023-03-08 09:19:57 -05:00
Github Actions
29d4246019 Automatic bundle update 2023-03-08 14:19:41 +00:00
OSP
65c5d206a8 [XCore] new server (#8372) 2023-03-08 09:18:46 -05:00
MonoDx
3a73a97746 Update bundle_be.properties. (#8374)
Worked Dima Pozniac and monodx.

Thanks.
2023-03-08 09:18:17 -05:00
MEEPofFaith
a3f8ca9ca5 Shield flash on top (#8373)
Co-authored-by: Anuken <arnukren@gmail.com>
2023-03-08 09:17:39 -05:00
MEEPofFaith
a046f0f11b Non-hexagonal force projectors (#8358) 2023-03-08 09:16:07 -05:00
Github Actions
2cc486febc Automatic bundle update 2023-03-08 14:11:55 +00:00
MEEPofFaith
3c9b3680bc Interval Bullet Delay (#8365)
Like homing delay
2023-03-08 09:11:07 -05:00
MEEPofFaith
0a1957eb13 Display Interval Bullet in Stats + Collapsers (#8366)
* Display interval bullets in stats

* Collapsers for sub-bullets

* highlight /sec as well

* top
2023-03-08 09:10:34 -05:00
MEEPofFaith
75e1e6f166 Player unit spawns before core animation finishes (#8375)
* Player unit spawns before core animation finishes

* the

* Shouldn't the landing particles also be aimed at the tile's world pos?
2023-03-08 08:26:11 -05:00
Sunky.MPEG
327a8fc61b Clearer translations (#8364)
* Clearer translations

* Small changes
2023-03-08 07:12:04 -05:00
Anuken
a857eaed74 Fixed #8368 2023-03-08 07:06:59 -05:00
Anuken
028c189dc8 Merge remote-tracking branch 'origin/master' 2023-03-08 06:56:49 -05:00
Anuken
11f8e06708 Fixed #8340 / Reverted #8220 2023-03-08 06:56:44 -05:00
MEEPofFaith
0760923943 overRegion (#8337) 2023-02-27 11:26:47 -05:00
MEEPofFaith
219084fe3c Don't generate edges if edges already exist (#8338) 2023-02-27 11:26:26 -05:00
Evgenij
4f314afe21 [RU] Small translation update (#8342)
* [RU] Small translation update

* Update bundle_ru.properties
2023-02-27 11:25:29 -05:00
OGalaxy
6750cfead8 Update servers_v7.json (#8349)
* Update servers_v7.json

* Update servers_v7.json

* Update servers_v7.json
2023-02-27 11:25:12 -05:00
Anuken
b569646310 fixed ignoreLiquidFullness 2023-02-26 23:03:03 -05:00
Anuken
cc207d3d7c a 2023-02-26 15:36:28 -05:00
Anuken
e234ac43a6 Fixed keybind names 2023-02-25 11:38:18 -05:00
Anuken
2388091ed6 Merge remote-tracking branch 'origin/master' 2023-02-23 16:12:57 -05:00
Anuken
a38351d41f isLogicControllable 2023-02-23 16:12:52 -05:00
Tentyanuk
4d8de72a8e Update servers_v7.json (#8332) 2023-02-23 09:06:07 -05:00
Github Actions
ab2138d8e7 Automatic bundle update 2023-02-22 18:03:15 +00:00
MonoDx
46c75af9e4 Updated and improved belarusian translation. (#8331)
Edited by monodx.
2023-02-22 13:02:09 -05:00
Gureumi
8eb3c16c50 Fix server always paused (#8330) 2023-02-22 13:02:04 -05:00
Anuken
39e88ae614 Fixed #8328 2023-02-21 18:15:20 -05:00
Anuken
4410f31888 Merge remote-tracking branch 'origin/master' 2023-02-21 10:55:01 -05:00
Anuken
df11dd7a74 Fixed issues with #7972 2023-02-21 10:54:56 -05:00
MonoDx
804dd61cd9 Updated belarusian translate. (#8327)
Edited by monodx.
2023-02-21 10:26:04 -05:00
Anuken
b00c5b4cab Merge remote-tracking branch 'origin/master' 2023-02-21 10:24:50 -05:00
Anuken
e0d6cebb2e Fixed #8326 2023-02-21 10:24:45 -05:00
ulwepo
ab772dccd4 Update bundle_ja.properties (#8324) 2023-02-21 09:55:55 -05:00
BotiHUN7
b244032328 Update servers_v7.json (#8320) 2023-02-21 09:55:33 -05:00
DikHalz
421c5e2879 Update servers_v7.json (#8325)
HUB

Co-authored-by: ColaHz <87813567+ColaHz@users.noreply.github.com>
2023-02-21 09:52:55 -05:00
Anuken
1a8c4d8d8a Update deployment.yml 2023-02-20 14:19:36 -05:00
Tomoko
9efb1824af Update servers_v7.json (#8322) 2023-02-20 13:46:01 -05:00
Anuken
74de125700 githubImportMod old signature returned 2023-02-20 12:27:24 -05:00
Anuken
64cea34a98 Merge remote-tracking branch 'origin/master' 2023-02-20 12:20:01 -05:00
Anuken
9c4bdc213d Crash fix 2023-02-20 12:19:56 -05:00
Fischer1000
92c0552fd5 Update hungarian language file (#8315)
Fine tune the file. I have made it to it's quarter today (line 537).
2023-02-19 09:26:59 -05:00
OSP
ff39e5f90d [XCore] Change ip (#8319) 2023-02-19 09:25:09 -05:00
Anuken
83c55fdbb4 Merge remote-tracking branch 'origin/master' 2023-02-18 23:12:52 -05:00
Anuken
7d300a273b added missing break 2023-02-18 23:12:47 -05:00
MEEPofFaith
29f36c1927 ClientServerConnectEvent (#8309) 2023-02-18 19:48:22 -05:00
ferrandusqui31
b65c3cd931 Missing translation and errors correction (#8312)
On line 104 updated joingame from "Uneix-me a una partida" to "Unir-se a una partida".
On line 494 update editor.savemap from "Desa un mapa" to "Desa el mapa".
On line 1386 updated block.kiln.name from "Kiln" to "Forn de vidre".
On line 1468 updated block.reinforced.message  from "Missatge remarcat" to "Missatge reforçat".
2023-02-18 19:48:08 -05:00
Anuken
7401e7fe31 Fixed #8316 2023-02-18 19:47:22 -05:00
Anuken
150215712b formatting 2023-02-17 09:18:08 -05:00
Gureumi
f7ccf3c04a Add window size parameter (#8281)
* Add window size parameter

* Formatting

* Java 8
2023-02-17 09:13:59 -05:00
Evgenij
ebb798cac3 Update servers_v7.json (#8307) 2023-02-17 09:03:44 -05:00
MEEPofFaith
348819d1ac connectedPower similar to conductivePower (#8306) 2023-02-15 23:22:05 -05:00
MEEPofFaith
a8a3453632 Move core launch/landing to CoreBlock (#8055)
* Move core launch/landing to CoreBlock

* Slight cleanup

* just gonna...
2023-02-15 12:16:51 -05:00
FunnyCat
9b02a274f1 Update servers_v7.json (#8293)
Explosive corp deleted
2023-02-15 10:38:44 -05:00
Anuken
f093360565 Merge branch 'master' of https://github.com/Anuken/Mindustry 2023-02-15 10:34:57 -05:00
Anuken
d457901d2e Minor Conquer buff 2023-02-15 10:34:52 -05:00
Anuken
460dbff7d1 Fixed shield break effect 2023-02-15 10:33:36 -05:00
Anuken
e564602fd1 Hide isHidden content in mod info 2023-02-15 09:59:32 -05:00
Baldur404
e029321e5b Update servers_v7.json (#8290)
Co-authored-by: Anuken <arnukren@gmail.com>
2023-02-15 09:34:38 -05:00
Tentyanuk
87d7089df3 Update servers_v7.json (#8294)
DNS doesn't work for everyone
2023-02-15 09:02:46 -05:00
WayZer
e4f929a851 Fix turret when cheating (#8291)
* (C/S) Fix ItemTurret ammo when `cheat`.

* (C/S) Fix `TurretBuild.updateReload` NPE when `cheat`

* Why `shouldConsume` cause `potentialEfficiency=0`
2023-02-15 09:02:32 -05:00
MEEPofFaith
8726cde05d Return salvo and swarmer to how they were before shoot changes (#8278) 2023-02-15 09:01:03 -05:00
Bill Arndt
a189ac8613 Update Team.java to increase dynamic range of team colors (#8279)
I'm having a lot of trouble finding enough visually distinct team colors; In the worst case I need about 25 colors. I am manually excluded colliding team numbers I know about, but, I can only find about 14 easily distinguishable colors before everything is another bright magenta, or yellow, or cyan, or pale green.
2023-02-15 09:00:34 -05:00
ulwepo
652aa4c456 Update bundle_ja.properties (#8300) 2023-02-15 09:00:10 -05:00
MEEPofFaith
cc3ae2c66c Use setBars instead of overriding displayBars (#8296) 2023-02-15 08:59:57 -05:00
Даркнесс#3729
359e59bbad Changed Darkdustry domain to direct IP address (#8292)
Why? Because darkdustry.net is not available in some countries (Ukraine, Israel and some more)
Also improved formatting
2023-02-15 08:58:09 -05:00
Anuken
40ec7fd6fc Less Core.app.post for build events 2023-02-15 08:57:06 -05:00
Anuken
d17f0ebc51 Fixed #8297 2023-02-15 08:35:53 -05:00
Anuken
5027b70f5a Merge branch 'master' of https://github.com/Anuken/Mindustry 2023-02-14 15:08:27 -05:00
Anuken
0b7c790777 turret status fix 2023-02-14 15:08:24 -05:00
Github Actions
5ac9e9f63c Automatic bundle update 2023-02-13 19:13:48 +00:00
Anuken
b08136e3ea Quell no longer targets flying units 2023-02-13 14:12:53 -05:00
Anuken
ec8262418f Basic unit boost command support 2023-02-11 17:40:57 -05:00
Anuken
946e36c66e Merge branch 'master' of https://github.com/Anuken/Mindustry 2023-02-09 17:50:46 -05:00
Anuken
00f3518349 Fixed #8277 2023-02-09 17:50:43 -05:00
Volas171
29bf99fe1a Update servers_v7.json (#8276) 2023-02-09 17:43:11 -05:00
Tentyanuk
e104591dec Update servers_v7.json (#8271)
**SRV proved to be really too inefficient and unprofitable!!**

1. Huge delays
2. These records do not work for everyone
2023-02-09 09:22:58 -05:00
Gureumi
0fd26e68d4 Fix server auto pause when gameover (#8220)
* Fix server auto pause when gameover

* Update ServerControl.java

* Update ServerControl.java
2023-02-09 09:21:55 -05:00
WayZer
53f410fee0 Fix Turret bug when cheat (#8273)
* (C/S) Fix ItemTurret ammo when `cheat`.

* (C/S) Fix `TurretBuild.updateReload` NPE when `cheat`
2023-02-09 09:20:06 -05:00
FunnyCat
53206e4b31 Update servers_v7.json (#8256)
Explosive hub deleted
2023-02-08 22:54:45 -05:00
Tentyanuk
3818bfffb4 Update servers_v7.json (#8260)
We added DNS v4/v6 with proxy, updated addresses and moved our servers to a more productive host

*P.S Sorry for creating pull requests before this, I was too stupid to realize that this pull request is directed to the order of ping requests, and not to the order of servers in general..*
2023-02-08 22:54:17 -05:00
Phinner
e6afc6ef0b Add info section about SRV records in SERVERLIST.md (#8252)
* update SERVERLIST.md

* aslo setup 💀
2023-02-08 22:51:25 -05:00
Gureumi
5eb1c1dffc Remove dead servers v6 (#8262) 2023-02-08 22:50:21 -05:00
Github Actions
66406806b7 Automatic bundle update 2023-02-09 03:49:19 +00:00
Anuken
3a6debfae6 Merge branch 'master' of https://github.com/Anuken/Mindustry 2023-02-08 22:48:33 -05:00
Anuken
a093fa5718 Replaced #8035 2023-02-08 22:48:17 -05:00
Даркнесс#3729
9c1f17fbdd Add pvpAutoPause rule (#8249)
* Update Rules.java

* Update NetServer.java
2023-02-08 22:44:07 -05:00
MEEPofFaith
ce3643f0b3 Make type not required if the template already provides one (#8257)
Such as with missile units
2023-02-08 22:35:13 -05:00
MEEPofFaith
f1fb7d8098 Fix modded payload conveyor icons (#8266) 2023-02-08 22:28:44 -05:00
Anuken
3d01eeaf1c Fixed #8251 2023-02-08 22:25:10 -05:00
Github Actions
be39c31865 Automatic bundle update 2023-02-01 20:22:46 +00:00
Phinner
0d2dfadba7 Mod dependency resolution improvements (#7972)
* soft dependencies + better mod resolution algorithm

* update ModMeta#toString

* var

* add #7962 bugfix

* Use existing code to resolve

* add state text for mod dialog

* bugfix

* fix error text

* remove external resolver class

It's simpler like that :)
2023-02-01 15:21:42 -05:00
Anuken
2dcab97b6d Merge remote-tracking branch 'origin/master' 2023-02-01 15:20:38 -05:00
Anuken
31cb169002 Random server order 2023-02-01 15:20:34 -05:00
LeTuanVN
c381499c58 Update vi translation (#8225)
* Update bundle_vi.properties

* Update bundle_vi.properties
2023-02-01 14:57:09 -05:00
KotMilkMeoWtwo
8577a8cca4 Update servers_v7.json (#8234)
nya
2023-02-01 14:55:52 -05:00
Tentyanuk
7a18c4a580 Update servers_v7.json (#8238) 2023-02-01 14:55:39 -05:00
TheRadioactiveBanana
40589eb9ff Added nuclear pvp server (#8222)
i somehow forgot to press propose changes doing this yesterday, so i do this again today
2023-02-01 14:51:47 -05:00
ulwepo
722370b57c Update servers_v7.json (#8214) 2023-02-01 14:51:36 -05:00
FunnyCat
573672622a Update servers_v7.json (#8215) 2023-02-01 14:48:26 -05:00
MEEPofFaith
12f747ae1d Strip colors from mod name as well (#8224) 2023-02-01 14:45:56 -05:00
WayZer
395dc99595 Update servers_v7.json (#8240) 2023-02-01 14:45:28 -05:00
Даркнесс#3729
c945243795 It doesn't work (#8237) 2023-02-01 14:45:00 -05:00
Anuken
c2262cc9cf Fixed #8235 / Fixed #8221 2023-02-01 14:42:50 -05:00
Anuken
411399e96f Fixed #8211 2023-02-01 14:18:29 -05:00
Anuken
f833b9e0ce Fixed #8236 2023-02-01 14:09:16 -05:00
Anuken
9955423e9a Merge remote-tracking branch 'origin/master' 2023-02-01 13:35:11 -05:00
Anuken
58b4265b31 Fixed #8232 2023-02-01 13:35:06 -05:00
Epowerj
671a62aed7 Merge pull request #8242 from osp54/patch-2
[XCore] Hexed server
2023-02-01 13:09:46 -05:00
OSP
c94fe9c312 [XCore] Hexed server 2023-01-31 21:07:30 +02:00
Tentyanuk
f46a9730a3 Update SERVERLIST.md (#8205) 2023-01-22 11:03:59 -05:00
Tentyanuk
d45cd7c15e Banned logic displays on sandbox (#8204) 2023-01-22 09:54:39 -05:00
Anuken
a84d52f5fe Removed Omnidustry sandbox due to moderation issues (#8203) 2023-01-22 09:26:09 -05:00
Anuken
330d37b7a5 Merge remote-tracking branch 'origin/master' 2023-01-22 08:59:36 -05:00
Anuken
d2792a4e9d Fixed #8202 2023-01-22 08:59:32 -05:00
Kotamus
c50a69d42a Update servers_v7.json (#8201)
Crawler arena
2023-01-21 09:40:26 -05:00
Anuken
ee689d1597 Merge remote-tracking branch 'origin/master' 2023-01-20 09:37:33 -05:00
Anuken
6ef8d64d46 Efficiency fix 2023-01-20 09:37:28 -05:00
eSK8er
0095e89673 Update servers_v7.json (#8145) 2023-01-19 00:34:13 -05:00
SachaTending
55d97ea202 add tendhost(not running) [reopened] (#8147) 2023-01-18 11:49:22 -05:00
Anuken
85b8868d2b Fixed #8194 2023-01-18 10:41:39 -05:00
Anuken
65e92ab6fc Merge remote-tracking branch 'origin/master' 2023-01-17 18:50:49 -05:00
Anuken
478baf2532 Fixed #8192 2023-01-17 18:50:44 -05:00
Joan Josep
0750348cb1 Update bundle_ca.properties (#8190) 2023-01-17 18:49:20 -05:00
UnCaughT
db6cbc5cc3 Update servers_v7.json (#8189)
HexPvP IP Change
2023-01-17 00:18:09 -05:00
Anuken
b4359c0489 Merge remote-tracking branch 'origin/master' 2023-01-16 15:28:45 -05:00
Anuken
977192bc54 Fixed #8187 2023-01-16 15:28:40 -05:00
南门阳德
d54b557a9f Revert #8176 (#8186)
Liquid turrets are used to give buff like wet but not do the damage. The ammo change is not appropriate.
2023-01-16 11:07:00 -05:00
Anuken
f6c97f4ff6 Fixed #8185 2023-01-16 11:06:34 -05:00
Anuken
66f4118896 Fixed #8184 2023-01-15 15:19:13 -05:00
Anuken
4a8f8c4ecf Merge remote-tracking branch 'origin/master' 2023-01-15 08:51:57 -05:00
Anuken
6d7c207b95 Fixed drawing of assembler payloads 2023-01-15 08:51:51 -05:00
DinnerWool
597bd31a0c Update servers_v7.json (#8183) 2023-01-15 08:42:59 -05:00
Knochi
98157f2852 Never use „tun“ in German language (#8179) 2023-01-14 14:41:14 -05:00
MEEPofFaith
5e324e71d4 Hitscan fix 2 (#8175)
* Revert "Reverting #8037"

Re-implement #8037

* Properly count collisions

Fix #8170
2023-01-14 10:05:30 -05:00
Anuken
3159ce6707 Merge remote-tracking branch 'origin/master' 2023-01-13 19:34:52 -05:00
Anuken
9b033532c8 Fixed #8177 2023-01-13 19:34:48 -05:00
Даркнесс#3729
0678592d59 Fix cheaty item and liquid turrets (#8176)
* Update Turret.java

* Update TractorBeamTurret.java

* Update TractorBeamTurret.java

* Update ItemTurret.java

* Update LiquidTurret.java
2023-01-13 16:51:36 -05:00
Anuken
00d6b0d483 Merge remote-tracking branch 'origin/master' 2023-01-13 09:59:05 -05:00
Anuken
598049265a Complete revert of #8019 2023-01-13 09:59:01 -05:00
Nunting
c3209f2cdd Update bundle_ko.properties (#8171) 2023-01-13 09:44:08 -05:00
Anuken
b2b4602c91 Reverting #8037 2023-01-13 09:42:28 -05:00
Anuken
b1e1fe4922 Merge remote-tracking branch 'origin/master' 2023-01-13 09:31:14 -05:00
Anuken
edcf3c4223 Fixed #8170 2023-01-13 09:31:10 -05:00
Github Actions
58315acfa3 Automatic bundle update 2023-01-13 03:53:33 +00:00
Anuken
ec9eadd660 encoding test 2023-01-12 22:52:32 -05:00
Anuken
7277892e33 Merge remote-tracking branch 'origin/master' 2023-01-12 17:01:52 -05:00
Anuken
54962a158d Fixed #8168 2023-01-12 17:01:47 -05:00
Даркнесс#3729
30dcbe1af3 Administration improvements (#8167)
* Administration improvements

Reduced the interval for preventing sending the same message because 50 seconds is too much and kinda confusing
Added saving and loading kicked IPs so they are saved even when the server crashes
Fixed smth in Config

* skill issue
2023-01-12 16:24:51 -05:00
140 changed files with 5214 additions and 4073 deletions

View File

@@ -23,6 +23,8 @@ jobs:
run: echo "RELEASE_VERSION=${GITHUB_REF#refs/*/}" >> $GITHUB_ENV run: echo "RELEASE_VERSION=${GITHUB_REF#refs/*/}" >> $GITHUB_ENV
- name: Add Arc release - name: Add Arc release
run: | run: |
git config --global user.email "actions@github.com"
git config --global user.name "Github Actions"
git clone --depth=1 --branch=master https://github.com/Anuken/Arc ../Arc git clone --depth=1 --branch=master https://github.com/Anuken/Arc ../Arc
cd ../Arc cd ../Arc
git tag ${RELEASE_VERSION} git tag ${RELEASE_VERSION}

View File

@@ -9,7 +9,7 @@ You may want to add your server to this list. The steps for getting this done ar
1. **Ensure your server is properly moderated.** For the most part, this applies to survival servers, but PvP servers can be affected as well. 1. **Ensure your server is properly moderated.** For the most part, this applies to survival servers, but PvP servers can be affected as well.
You'll need to either hire some moderators, or make use of (currently non-existent) anti-grief and anti-curse plugins. You'll need to either hire some moderators, or make use of (currently non-existent) anti-grief and anti-curse plugins.
*Consider enabling a rate limit:* `config messageRateLimit 2` will make it so that players can only send messages every 2 seconds, for example. *Consider enabling a rate limit:* `config messageRateLimit 2` will make it so that players can only send messages every 2 seconds, for example.
2. Make sure that your server is able to handle inappropriate content - this includes NSFW display/sorter art and abusive messages. **Servers that allow such content will be removed immediately.** Consider banning display blocks if it is a problem for your server: `rules add bannedBlocks ["logic-display", "large-logic-display"]`. 2. Make sure that your server is able to handle inappropriate content - this includes NSFW display/sorter art and abusive messages. **Servers that allow such content will be removed immediately.** Consider banning display blocks if it is a problem for your server: `rules add bannedBlocks ["canvas", "logic-display", "large-logic-display"]`.
3. **Set an appropriate MOTD, name and description.** This is set with `config <name/desc/motd> <value>`. "Appropriate" means that: 3. **Set an appropriate MOTD, name and description.** This is set with `config <name/desc/motd> <value>`. "Appropriate" means that:
- Your name or description must reflect the type of server you're hosting. - Your name or description must reflect the type of server you're hosting.
Since new players may be exposed to the server list early on, put in a phrase like "Co-op survival" or "PvP" so players know what they're getting into. Yes, this is also displayed in the server mode info text, but having extra info in the name doesn't hurt. Since new players may be exposed to the server list early on, put in a phrase like "Co-op survival" or "PvP" so players know what they're getting into. Yes, this is also displayed in the server mode info text, but having extra info in the name doesn't hurt.
@@ -19,10 +19,12 @@ You'll need to either hire some moderators, or make use of (currently non-existe
5. **Check your server configuration.** *(optional)* I would recommend adding a message rate limit of 1 second (`config messageRateLimit 1`), and disabling connect/disconnect messages to reduce spam (`config showConnectMessages false`). 5. **Check your server configuration.** *(optional)* I would recommend adding a message rate limit of 1 second (`config messageRateLimit 1`), and disabling connect/disconnect messages to reduce spam (`config showConnectMessages false`).
6. Finally, **submit a pull request** to add your server's IP to the list. 6. Finally, **submit a pull request** to add your server's IP to the list.
This should be fairly straightforward: Press the edit button on the [server file](https://github.com/Anuken/Mindustry/blob/master/servers_v6.json), then add a JSON object with a single key, indicating your server address. This should be fairly straightforward: Press the edit button on the [server file](https://github.com/Anuken/Mindustry/blob/master/servers_v6.json), then add a JSON object with a single key, indicating your server address.
For example, if your server address is `google.com`, you would add a comma after the last entry and insert: For example, if your server address is `example.com:6000`, you would add a comma after the last entry and insert:
```json ```json
{ {
"address": "google.com" "address": "example.com:6000"
} }
``` ```
Then, press the *'submit pull request'* button and I'll take a look at your server. If I have any issues with it, I'll let you know in the PR comments. > Note that Mindustry also support SRV records. This allows you to use a subdomain for your server address instead of specifying the port. For example, if you want to use `play.example.com` instead of `example.com:6000`, in the dns settings of your domain, add an SRV record with `_mindustry` as the service, `tcp` as the protocol, `play` as the target and `6000` as the port. You can also setup fallback servers by modifying the weight or priority of the record. Although SRV records are very convenient, keep in mind they are slower than regular addresses. Avoid using them in the server list, but rather as an easy way to share your server address.
Then, press the *'submit pull request'* button and I'll take a look at your server. If I have any issues with it, I'll let you know in the PR comments.

View File

@@ -150,12 +150,16 @@ mod.incompatiblemod = [red]Incompatible
mod.blacklisted = [red]Unsupported mod.blacklisted = [red]Unsupported
mod.unmetdependencies = [red]Unmet Dependencies mod.unmetdependencies = [red]Unmet Dependencies
mod.erroredcontent = [red]Content Errors mod.erroredcontent = [red]Content Errors
mod.circulardependencies = [red]Circular Dependencies
mod.incompletedependencies = [red]Incomplete Dependencies
mod.requiresversion.details = Requires game version: [accent]{0}[]\nYour game is outdated. This mod requires a newer version of the game (possibly a beta/alpha release) to function. mod.requiresversion.details = Requires game version: [accent]{0}[]\nYour game is outdated. This mod requires a newer version of the game (possibly a beta/alpha release) to function.
mod.outdatedv7.details = This mod is incompatible with the latest version of the game. The author must update it, and add [accent]minGameVersion: 136[] to its [accent]mod.json[] file. mod.outdatedv7.details = This mod is incompatible with the latest version of the game. The author must update it, and add [accent]minGameVersion: 136[] to its [accent]mod.json[] file.
mod.blacklisted.details = This mod has been manually blacklisted for causing crashes or other issues with this version of the game. Do not use it. mod.blacklisted.details = This mod has been manually blacklisted for causing crashes or other issues with this version of the game. Do not use it.
mod.missingdependencies.details = This mod is missing dependencies: {0} mod.missingdependencies.details = This mod is missing dependencies: {0}
mod.erroredcontent.details = This mod caused errors when loading. Ask the mod author to fix them. mod.erroredcontent.details = This mod caused errors when loading. Ask the mod author to fix them.
mod.circulardependencies.details = This mod has dependencies that depends on each other.
mod.incompletedependencies.details = This mod is unable to be loaded due to invalid or missing dependencies: {0}.
mod.requiresversion = Requires game version: [red]{0} mod.requiresversion = Requires game version: [red]{0}
@@ -335,6 +339,7 @@ command.repair = Repair
command.rebuild = Rebuild command.rebuild = Rebuild
command.assist = Assist Player command.assist = Assist Player
command.move = Move command.move = Move
command.boost = Boost
openlink = Open Link openlink = Open Link
copylink = Copy Link copylink = Copy Link
back = Back back = Back
@@ -947,7 +952,7 @@ ability.unitspawn = {0} Factory
ability.shieldregenfield = Shield Regen Field ability.shieldregenfield = Shield Regen Field
ability.movelightning = Movement Lightning ability.movelightning = Movement Lightning
ability.shieldarc = Shield Arc ability.shieldarc = Shield Arc
ability.suppressionfield = Regen Suppression Field ability.suppressionfield = Repair Suppression Field
ability.energyfield = Energy Field: [accent]{0}[] damage ~ [accent]{1}[] blocks / [accent]{2}[] targets ability.energyfield = Energy Field: [accent]{0}[] damage ~ [accent]{1}[] blocks / [accent]{2}[] targets
bar.onlycoredeposit = Only Core Depositing Allowed bar.onlycoredeposit = Only Core Depositing Allowed
@@ -984,10 +989,12 @@ bar.strength = [stat]{0}[lightgray]x strength
units.processorcontrol = [lightgray]Processor Controlled units.processorcontrol = [lightgray]Processor Controlled
bullet.damage = [stat]{0}[lightgray] damage bullet.damage = [stat]{0}[lightgray] damage
bullet.splashdamage = [stat]{0}[lightgray] area dmg ~[stat] {1}[lightgray] tiles bullet.splashdamage = [stat]{0}[lightgray] area dmg ~ [stat]{1}[lightgray] tiles
bullet.incendiary = [stat]incendiary bullet.incendiary = [stat]incendiary
bullet.homing = [stat]homing bullet.homing = [stat]homing
bullet.armorpierce = [stat]armor piercing bullet.armorpierce = [stat]armor piercing
bullet.suppression = [stat]{0}[lightgray] seconds of repair suppression ~ [stat]{1}[lightgray] tiles
bullet.interval = [stat]{0}/sec[lightgray] interval bullets:
bullet.frags = [stat]{0}[lightgray]x frag bullets: bullet.frags = [stat]{0}[lightgray]x frag bullets:
bullet.lightning = [stat]{0}[lightgray]x lightning ~ [stat]{1}[lightgray] damage bullet.lightning = [stat]{0}[lightgray]x lightning ~ [stat]{1}[lightgray] damage
bullet.buildingdamage = [stat]{0}%[lightgray] building damage bullet.buildingdamage = [stat]{0}%[lightgray] building damage
@@ -1101,8 +1108,8 @@ setting.bridgeopacity.name = Bridge Opacity
setting.playerchat.name = Display Player Bubble Chat setting.playerchat.name = Display Player Bubble Chat
setting.showweather.name = Show Weather Graphics setting.showweather.name = Show Weather Graphics
setting.hidedisplays.name = Hide Logic Displays setting.hidedisplays.name = Hide Logic Displays
public.confirm = Do you want to make your game public?\n[accent]Anyone will be able to join your games.\n[lightgray]This can be changed later in Settings->Game->Public Game Visibility. steam.friendsonly = Friends Only
public.confirm.really = If you want to play with friends, use [green]Invite Friend[] instead of a [scarlet]Public server[]!\nAre you sure you want to make your game [scarlet]public[]? steam.friendsonly.tooltip = Whether only Steam friends will be able to join your game.\nUnchecking this box will make your game public - anyone can join.
public.beta = Note that beta versions of the game cannot make public lobbies. public.beta = Note that beta versions of the game cannot make public lobbies.
uiscale.reset = UI scale has been changed.\nPress "OK" to confirm this scale.\n[scarlet]Reverting and exiting in[accent] {0}[] seconds... uiscale.reset = UI scale has been changed.\nPress "OK" to confirm this scale.\n[scarlet]Reverting and exiting in[accent] {0}[] seconds...
uiscale.cancel = Cancel & Exit uiscale.cancel = Cancel & Exit
@@ -1154,8 +1161,8 @@ keybind.select.name = Select/Shoot
keybind.diagonal_placement.name = Diagonal Placement keybind.diagonal_placement.name = Diagonal Placement
keybind.pick.name = Pick Block keybind.pick.name = Pick Block
keybind.break_block.name = Break Block keybind.break_block.name = Break Block
keybind.select_all_units = Select All Units keybind.select_all_units.name = Select All Units
keybind.select_all_unit_factories = Select All Unit Factories keybind.select_all_unit_factories.name = Select All Unit Factories
keybind.deselect.name = Deselect keybind.deselect.name = Deselect
keybind.pickupCargo.name = Pickup Cargo keybind.pickupCargo.name = Pickup Cargo
keybind.dropCargo.name = Drop Cargo keybind.dropCargo.name = Drop Cargo
@@ -2228,6 +2235,7 @@ lst.flushmessage = Display a message on the screen from the text buffer.\nWill w
lst.cutscene = Manipulate the player camera. lst.cutscene = Manipulate the player camera.
lst.setflag = Set a global flag that can be read by all processors. lst.setflag = Set a global flag that can be read by all processors.
lst.getflag = Check if a global flag is set. lst.getflag = Check if a global flag is set.
lst.setprop = Sets a property of a unit or building.
logic.nounitbuild = [red]Unit building logic is not allowed here. logic.nounitbuild = [red]Unit building logic is not allowed here.

File diff suppressed because it is too large Load Diff

View File

@@ -149,11 +149,15 @@ mod.incompatiblemod = [red]Incompatible
mod.blacklisted = [red]Unsupported mod.blacklisted = [red]Unsupported
mod.unmetdependencies = [red]Unmet Dependencies mod.unmetdependencies = [red]Unmet Dependencies
mod.erroredcontent = [scarlet]Грешки в Съдържанието mod.erroredcontent = [scarlet]Грешки в Съдържанието
mod.circulardependencies = [red]Circular Dependencies
mod.incompletedependencies = [red]Incomplete Dependencies
mod.requiresversion.details = Requires game version: [accent]{0}[]\nYour game is outdated. This mod requires a newer version of the game (possibly a beta/alpha release) to function. mod.requiresversion.details = Requires game version: [accent]{0}[]\nYour game is outdated. This mod requires a newer version of the game (possibly a beta/alpha release) to function.
mod.outdatedv7.details = This mod is incompatible with the latest version of the game. The author must update it, and add [accent]minGameVersion: 136[] to its [accent]mod.json[] file. mod.outdatedv7.details = This mod is incompatible with the latest version of the game. The author must update it, and add [accent]minGameVersion: 136[] to its [accent]mod.json[] file.
mod.blacklisted.details = This mod has been manually blacklisted for causing crashes or other issues with this version of the game. Do not use it. mod.blacklisted.details = This mod has been manually blacklisted for causing crashes or other issues with this version of the game. Do not use it.
mod.missingdependencies.details = This mod is missing dependencies: {0} mod.missingdependencies.details = This mod is missing dependencies: {0}
mod.erroredcontent.details = This game caused errors when loading. Ask the mod author to fix them. mod.erroredcontent.details = This game caused errors when loading. Ask the mod author to fix them.
mod.circulardependencies.details = This mod has dependencies that depends on each other.
mod.incompletedependencies.details = This mod is unable to be loaded due to invalid or missing dependencies: {0}.
mod.requiresversion = Requires game version: [red]{0} mod.requiresversion = Requires game version: [red]{0}
mod.errors = Възникнаха грешки при зареждане на съдържанието. mod.errors = Възникнаха грешки при зареждане на съдържанието.
mod.noerrorplay = [scarlet]Има грешки в някои от модовете, които използвате.[] Трябва да деактивирате тези модове или да поправите грешките преди да играете. mod.noerrorplay = [scarlet]Има грешки в някои от модовете, които използвате.[] Трябва да деактивирате тези модове или да поправите грешките преди да играете.
@@ -331,6 +335,7 @@ command.repair = Repair
command.rebuild = Rebuild command.rebuild = Rebuild
command.assist = Assist Player command.assist = Assist Player
command.move = Move command.move = Move
command.boost = Boost
openlink = Отвори Линк openlink = Отвори Линк
copylink = Копирай Линк copylink = Копирай Линк
back = Назад back = Назад
@@ -974,6 +979,8 @@ bullet.splashdamage = [stat]{0}[lightgray] щети на площ ~[stat] {1}[li
bullet.incendiary = [stat]Подпалване bullet.incendiary = [stat]Подпалване
bullet.homing = [stat]Самонасочване bullet.homing = [stat]Самонасочване
bullet.armorpierce = [stat]armor piercing bullet.armorpierce = [stat]armor piercing
bullet.suppression = [stat]{0} sec[lightgray] repair suppression ~ [stat]{1}[lightgray] tiles
bullet.interval = [stat]{0}/sec[lightgray] interval bullets:
bullet.frags = [stat]{0}[lightgray]x frag bullets: bullet.frags = [stat]{0}[lightgray]x frag bullets:
bullet.lightning = [stat]{0}[lightgray]x светкавица ~ [stat]{1}[lightgray] щети bullet.lightning = [stat]{0}[lightgray]x светкавица ~ [stat]{1}[lightgray] щети
bullet.buildingdamage = [stat]{0}%[lightgray] щети на сгради bullet.buildingdamage = [stat]{0}%[lightgray] щети на сгради
@@ -1087,8 +1094,8 @@ setting.bridgeopacity.name = Плътност на Мостовете
setting.playerchat.name = Показвай Мехурчета с Чат setting.playerchat.name = Показвай Мехурчета с Чат
setting.showweather.name = Показвай Графики за Климата setting.showweather.name = Показвай Графики за Климата
setting.hidedisplays.name = Hide Logic Displays setting.hidedisplays.name = Hide Logic Displays
public.confirm = Искате ли да направите вашата игра публична?\n[accent]Всеки ще може да се присъедини към вашата игра.\n[lightgray]Това може да бъде променено по-късно в Настройки->Игри->Видимост на Публичните Игри. steam.friendsonly = Friends Only
public.confirm.really = Ако искате да играете с приятел, използвате [green]Покани Приятел[] вместо [scarlet]Публикувай Сървър[]!\nСигурни ли сте, че искате да направите вашата игра [scarlet]публична[]? steam.friendsonly.tooltip = Whether only Steam friends will be able to join your game.\nUnchecking this box will make your game public - anyone can join.
public.beta = Имайте в предвид, че бета версии на играта не могат да стартират публични игри. public.beta = Имайте в предвид, че бета версии на играта не могат да стартират публични игри.
uiscale.reset = Размерът на интерфейса беше променен.\nНатиснете "ОК" за да потвърдите този размер.\n[scarlet]Възстановяване и рестартиране след[accent] {0}[] секунди... uiscale.reset = Размерът на интерфейса беше променен.\nНатиснете "ОК" за да потвърдите този размер.\n[scarlet]Възстановяване и рестартиране след[accent] {0}[] секунди...
uiscale.cancel = Отакз & Изход uiscale.cancel = Отакз & Изход
@@ -1140,8 +1147,8 @@ keybind.select.name = Избери/Стреляй
keybind.diagonal_placement.name = Диагонално Поставяне keybind.diagonal_placement.name = Диагонално Поставяне
keybind.pick.name = Вземи Блок keybind.pick.name = Вземи Блок
keybind.break_block.name = Унищожи Блок keybind.break_block.name = Унищожи Блок
keybind.select_all_units = Select All Units keybind.select_all_units.name = Select All Units
keybind.select_all_unit_factories = Select All Unit Factories keybind.select_all_unit_factories.name = Select All Unit Factories
keybind.deselect.name = Премахни избора keybind.deselect.name = Премахни избора
keybind.pickupCargo.name = Вземи Товар keybind.pickupCargo.name = Вземи Товар
keybind.dropCargo.name = Остави Товар keybind.dropCargo.name = Остави Товар
@@ -2195,6 +2202,7 @@ lst.flushmessage = Display a message on the screen from the text buffer.\nWill w
lst.cutscene = Manipulate the player camera. lst.cutscene = Manipulate the player camera.
lst.setflag = Set a global flag that can be read by all processors. lst.setflag = Set a global flag that can be read by all processors.
lst.getflag = Check if a global flag is set. lst.getflag = Check if a global flag is set.
lst.setprop = Sets a property of a unit or building.
logic.nounitbuild = [red]Действия за строене на единици не са позволени тук. logic.nounitbuild = [red]Действия за строене на единици не са позволени тук.

View File

@@ -149,11 +149,15 @@ mod.incompatiblemod = [red]Incompatible
mod.blacklisted = [red]Unsupported mod.blacklisted = [red]Unsupported
mod.unmetdependencies = [red]Depèndencies sense resoldre mod.unmetdependencies = [red]Depèndencies sense resoldre
mod.erroredcontent = [scarlet]Errors del contingut mod.erroredcontent = [scarlet]Errors del contingut
mod.circulardependencies = [red]Dependències circulars
mod.incompletedependencies = [red]Dependències incompletes
mod.requiresversion.details = Requereix la versió: [accent]{0}[]\nCal actualitzar la vostra versió del joc. El mod necessita una versió nova (potser una distribució alfa o beta) per a funcionar. mod.requiresversion.details = Requereix la versió: [accent]{0}[]\nCal actualitzar la vostra versió del joc. El mod necessita una versió nova (potser una distribució alfa o beta) per a funcionar.
mod.outdatedv7.details = Aquest mod és incompatible amb lúltima versió del joc. Lautor lha dactualitzar i afegir [accent]minGameVersion: 136[] al seu fitxer [accent]mod.json[]. mod.outdatedv7.details = Aquest mod és incompatible amb lúltima versió del joc. Lautor lha dactualitzar i afegir [accent]minGameVersion: 136[] al seu fitxer [accent]mod.json[].
mod.blacklisted.details = Aquest mod sha afegit manualment a la llista negra perquè causa problemes amb aquesta versió del joc. No el feu servir. mod.blacklisted.details = Aquest mod sha afegit manualment a la llista negra perquè causa problemes amb aquesta versió del joc. No el feu servir.
mod.missingdependencies.details = A aquest mod li falten dependències: {0} mod.missingdependencies.details = A aquest mod li falten dependències: {0}
mod.erroredcontent.details = Aquesta partida ha causat errors mentre es carregava. Pregunteu a lautor del mod si pot arreglar-ho. mod.erroredcontent.details = Aquesta partida ha causat errors mentre es carregava. Pregunteu a lautor del mod si pot arreglar-ho.
mod.circulardependencies.details = Aquest mod depèn dun segon mod que, al seu torn, depèn del mod anterior. No es permeten dependències circulars.
mod.incompletedependencies.details = Aquest mod no es pot carregar perquè té una dependència no vàlida o que no es pot trobar: {0}.
mod.requiresversion = Cal la versió [red]{0}[] del joc. mod.requiresversion = Cal la versió [red]{0}[] del joc.
mod.errors = Shan produït errors quan es carregava el contingut. mod.errors = Shan produït errors quan es carregava el contingut.
mod.noerrorplay = [scarlet]Sexecuten mods amb errors.[] Desactiveu els mods afectats o arregleu les errades abans de jugar. mod.noerrorplay = [scarlet]Sexecuten mods amb errors.[] Desactiveu els mods afectats o arregleu les errades abans de jugar.
@@ -331,6 +335,7 @@ command.repair = Repara
command.rebuild = Reconstrueix command.rebuild = Reconstrueix
command.assist = Assisteix al jugador command.assist = Assisteix al jugador
command.move = Mou command.move = Mou
command.boost = Sobrevola
openlink = Obre lenllaç openlink = Obre lenllaç
copylink = Copia lenllaç copylink = Copia lenllaç
back = Enrere back = Enrere
@@ -486,7 +491,7 @@ editor.generate = Genera
editor.sectorgenerate = Generació del sector editor.sectorgenerate = Generació del sector
editor.resize = Canvia la mida editor.resize = Canvia la mida
editor.loadmap = Carrega un mapa editor.loadmap = Carrega un mapa
editor.savemap = Desa un mapa editor.savemap = Desa el mapa
editor.saved = Sha desat. editor.saved = Sha desat.
editor.save.noname = El mapa no té nom! Trieu-ne un des del menú «Informació del mapa». editor.save.noname = El mapa no té nom! Trieu-ne un des del menú «Informació del mapa».
editor.save.overwrite = El vostre mapa sobreescriu un mapa incorporat al joc! Trieu un nom diferent des del menú «Informació del mapa». editor.save.overwrite = El vostre mapa sobreescriu un mapa incorporat al joc! Trieu un nom diferent des del menú «Informació del mapa».
@@ -978,6 +983,8 @@ bullet.splashdamage = [stat]{0}[lightgray] de dany a làrea ~[stat] {1}[light
bullet.incendiary = [stat]incendiari bullet.incendiary = [stat]incendiari
bullet.homing = [stat]munició guiada bullet.homing = [stat]munició guiada
bullet.armorpierce = [stat]perforador darmadures bullet.armorpierce = [stat]perforador darmadures
bullet.suppression = [stat]{0} sec[lightgray] repair suppression ~ [stat]{1}[lightgray] tiles
bullet.interval = [stat]{0}/sec[lightgray] interval bullets:
bullet.frags = [stat]{0}[lightgray]× de bales de fragmentació: bullet.frags = [stat]{0}[lightgray]× de bales de fragmentació:
bullet.lightning = [stat]{0}[lightgray]× llampec ~ [stat]{1}[lightgray] de dany bullet.lightning = [stat]{0}[lightgray]× llampec ~ [stat]{1}[lightgray] de dany
bullet.buildingdamage = [stat]{0}%[lightgray] de dany a les estructures bullet.buildingdamage = [stat]{0}%[lightgray] de dany a les estructures
@@ -1091,8 +1098,8 @@ setting.bridgeopacity.name = Opacitat de cintes i canonades subterrànies
setting.playerchat.name = Mostra el xat bombolla de jugadors setting.playerchat.name = Mostra el xat bombolla de jugadors
setting.showweather.name = Mostra lestat meteorològic setting.showweather.name = Mostra lestat meteorològic
setting.hidedisplays.name = Amaga els monitors lògics setting.hidedisplays.name = Amaga els monitors lògics
public.confirm = Voleu que la vostra partida sigui pública?\n[accent]Qualsevol jugador shi podrà unir.\n[lightgray]Després es pot canviar a Configuració→Partida→Visibilitat de la partida pública. steam.friendsonly = Friends Only
public.confirm.really = Si voleu jugar amb els vostres amics, feu servir [green]Invita un amic[] en lloc demprar un [scarlet]servidor públic[]!\nEsteu segur que voleu que la partida sigui [scarlet]pública[]? steam.friendsonly.tooltip = Whether only Steam friends will be able to join your game.\nUnchecking this box will make your game public - anyone can join.
public.beta = Tingueu en compte que les versions beta no disposen de sales despera. public.beta = Tingueu en compte que les versions beta no disposen de sales despera.
uiscale.reset = Lescala de la interfície ha canviat.\nPremeu «Dacord» per a confirmar-ho.\n[scarlet]Es revertiran els canvis en [accent]{0}[] segons. uiscale.reset = Lescala de la interfície ha canviat.\nPremeu «Dacord» per a confirmar-ho.\n[scarlet]Es revertiran els canvis en [accent]{0}[] segons.
uiscale.cancel = Cancel·la i surt uiscale.cancel = Cancel·la i surt
@@ -1144,8 +1151,8 @@ keybind.select.name = Selecciona/Dispara
keybind.diagonal_placement.name = Construcció diagonal keybind.diagonal_placement.name = Construcció diagonal
keybind.pick.name = Selecciona un tipus de bloc des del mapa keybind.pick.name = Selecciona un tipus de bloc des del mapa
keybind.break_block.name = Desmunta un bloc keybind.break_block.name = Desmunta un bloc
keybind.select_all_units = Selecciona totes les unitats keybind.select_all_units.name = Selecciona totes les unitats
keybind.select_all_unit_factories = Selecciona totes les unitats fabricadores keybind.select_all_unit_factories.name = Selecciona totes les unitats fabricadores
keybind.deselect.name = Cancel·la la selecció keybind.deselect.name = Cancel·la la selecció
keybind.pickupCargo.name = Recull càrrega keybind.pickupCargo.name = Recull càrrega
keybind.dropCargo.name = Deixa la càrrega keybind.dropCargo.name = Deixa la càrrega
@@ -1207,7 +1214,7 @@ rules.unitbuildspeedmultiplier = Multiplicador de la velocitat de producció d
rules.unitcostmultiplier = Multiplicador del cost de les unitats rules.unitcostmultiplier = Multiplicador del cost de les unitats
rules.unithealthmultiplier = Multiplicador de la salut de les unitats rules.unithealthmultiplier = Multiplicador de la salut de les unitats
rules.unitdamagemultiplier = Multiplicador del dany de les unitats rules.unitdamagemultiplier = Multiplicador del dany de les unitats
rules.unitcrashdamagemultiplier = Unit Crash Damage Multiplier rules.unitcrashdamagemultiplier = Multiplicador del dany de xoc de les unitats
rules.solarmultiplier = Multiplicador de lenergia solar rules.solarmultiplier = Multiplicador de lenergia solar
rules.unitcapvariable = Els nuclis contribueixen al límit dunitats rules.unitcapvariable = Els nuclis contribueixen al límit dunitats
rules.unitcap = Capacitat base dunitats rules.unitcap = Capacitat base dunitats
@@ -1378,7 +1385,7 @@ block.scrap-wall-large.name = Mur de ferralla gros
block.scrap-wall-huge.name = Mur de ferralla enorme block.scrap-wall-huge.name = Mur de ferralla enorme
block.scrap-wall-gigantic.name = Mur de ferralla gegantí block.scrap-wall-gigantic.name = Mur de ferralla gegantí
block.thruster.name = Propulsor block.thruster.name = Propulsor
block.kiln.name = Kiln block.kiln.name = Forn de vidre
block.graphite-press.name = Premsa de grafit block.graphite-press.name = Premsa de grafit
block.multi-press.name = Premsa múltiple block.multi-press.name = Premsa múltiple
block.constructing = {0} [lightgray](Construint) block.constructing = {0} [lightgray](Construint)
@@ -1460,7 +1467,7 @@ block.distributor.name = Distrïbudor
block.sorter.name = Classificador block.sorter.name = Classificador
block.inverted-sorter.name = Classificador invers block.inverted-sorter.name = Classificador invers
block.message.name = Missatge block.message.name = Missatge
block.reinforced-message.name = Missatge remarcat block.reinforced-message.name = Missatge destacat
block.world-message.name = Missatge mundial block.world-message.name = Missatge mundial
block.illuminator.name = Il·luminador block.illuminator.name = Il·luminador
block.overflow-gate.name = Porta de desbordament block.overflow-gate.name = Porta de desbordament
@@ -1872,7 +1879,7 @@ liquid.neoplasm.details = Neoplasma. Una massa incontrolable de cèl·lules sint
block.derelict = \uf77e [lightgray]En ruïnes block.derelict = \uf77e [lightgray]En ruïnes
block.armored-conveyor.description = Mou objectes. Pels laterals només accepta entrades des daltres cintes transportadores. block.armored-conveyor.description = Mou objectes. Pels laterals només accepta entrades des daltres cintes transportadores.
block.illuminator.description = Emet llum. block.illuminator.description = Emet llum.
block.message.description = Emmagatzema un missatge. Els aliats ho poden fer servir per a comunicar-se. block.message.description = Emmagatzema un missatge. Els aliats el poden fer servir per a comunicar-se.
block.reinforced-message.description = Emmagatzema un missatge que serveix per a què els aliats es puguin comunicar. block.reinforced-message.description = Emmagatzema un missatge que serveix per a què els aliats es puguin comunicar.
block.world-message.description = Un bloc de missatge que es far servir per a fer mapes. No es pot destruir. block.world-message.description = Un bloc de missatge que es far servir per a fer mapes. No es pot destruir.
block.graphite-press.description = Comprimeix carbó fins obtenir-ne grafit. block.graphite-press.description = Comprimeix carbó fins obtenir-ne grafit.
@@ -2206,6 +2213,7 @@ lst.flushmessage = Mostra un missatge a la pantalla a partir dels continguts de
lst.cutscene = Manipula la càmera del jugador. lst.cutscene = Manipula la càmera del jugador.
lst.setflag = Estableix un senyal global que es podrà llegir en tots els processadors. lst.setflag = Estableix un senyal global que es podrà llegir en tots els processadors.
lst.getflag = Obtén un senyal global. lst.getflag = Obtén un senyal global.
lst.setprop = Sets a property of a unit or building.
logic.nounitbuild = [red]Aquí no es permet construir blocs de tipus lògic. logic.nounitbuild = [red]Aquí no es permet construir blocs de tipus lògic.

View File

@@ -149,11 +149,15 @@ mod.incompatiblemod = [red]Incompatible
mod.blacklisted = [red]Unsupported mod.blacklisted = [red]Unsupported
mod.unmetdependencies = [red]Unmet Dependencies mod.unmetdependencies = [red]Unmet Dependencies
mod.erroredcontent = [scarlet]V obsahu jsou chyby[] mod.erroredcontent = [scarlet]V obsahu jsou chyby[]
mod.circulardependencies = [red]Circular Dependencies
mod.incompletedependencies = [red]Incomplete Dependencies
mod.requiresversion.details = Requires game version: [accent]{0}[]\nYour game is outdated. This mod requires a newer version of the game (possibly a beta/alpha release) to function. mod.requiresversion.details = Requires game version: [accent]{0}[]\nYour game is outdated. This mod requires a newer version of the game (possibly a beta/alpha release) to function.
mod.outdatedv7.details = This mod is incompatible with the latest version of the game. The author must update it, and add [accent]minGameVersion: 136[] to its [accent]mod.json[] file. mod.outdatedv7.details = This mod is incompatible with the latest version of the game. The author must update it, and add [accent]minGameVersion: 136[] to its [accent]mod.json[] file.
mod.blacklisted.details = This mod has been manually blacklisted for causing crashes or other issues with this version of the game. Do not use it. mod.blacklisted.details = This mod has been manually blacklisted for causing crashes or other issues with this version of the game. Do not use it.
mod.missingdependencies.details = This mod is missing dependencies: {0} mod.missingdependencies.details = This mod is missing dependencies: {0}
mod.erroredcontent.details = This game caused errors when loading. Ask the mod author to fix them. mod.erroredcontent.details = This game caused errors when loading. Ask the mod author to fix them.
mod.circulardependencies.details = This mod has dependencies that depends on each other.
mod.incompletedependencies.details = This mod is unable to be loaded due to invalid or missing dependencies: {0}.
mod.requiresversion = Requires game version: [red]{0} mod.requiresversion = Requires game version: [red]{0}
mod.errors = Při načítání obsahu hry se vyskytly problémy. mod.errors = Při načítání obsahu hry se vyskytly problémy.
mod.noerrorplay = [scarlet]Máš modifikace s chybami.[] Buď zakaž dotčené modifikace, nebo oprav chyby před tím, než začneš hrát. mod.noerrorplay = [scarlet]Máš modifikace s chybami.[] Buď zakaž dotčené modifikace, nebo oprav chyby před tím, než začneš hrát.
@@ -331,6 +335,7 @@ command.repair = Repair
command.rebuild = Rebuild command.rebuild = Rebuild
command.assist = Assist Player command.assist = Assist Player
command.move = Move command.move = Move
command.boost = Boost
openlink = Otevřít odkaz openlink = Otevřít odkaz
copylink = Zkopírovat odkaz copylink = Zkopírovat odkaz
back = Zpět back = Zpět
@@ -976,6 +981,8 @@ bullet.splashdamage = [stat]{0}[lightgray] plošného poškození ~[stat] {1}[li
bullet.incendiary = [stat]zápalný bullet.incendiary = [stat]zápalný
bullet.homing = [stat]samonaváděcí bullet.homing = [stat]samonaváděcí
bullet.armorpierce = [stat]armor piercing bullet.armorpierce = [stat]armor piercing
bullet.suppression = [stat]{0} sec[lightgray] repair suppression ~ [stat]{1}[lightgray] tiles
bullet.interval = [stat]{0}/sec[lightgray] interval bullets:
bullet.frags = [stat]{0}[lightgray]x frag střel: bullet.frags = [stat]{0}[lightgray]x frag střel:
bullet.lightning = [stat]{0}[lightgray]x jiskření ~ [stat]{1}[lightgray] poškození bullet.lightning = [stat]{0}[lightgray]x jiskření ~ [stat]{1}[lightgray] poškození
bullet.buildingdamage = [stat]{0}%[lightgray] poškození budov bullet.buildingdamage = [stat]{0}%[lightgray] poškození budov
@@ -1089,8 +1096,8 @@ setting.bridgeopacity.name = Průsvitnost přemostění
setting.playerchat.name = Zobrazit bublinu se zprávami hráče setting.playerchat.name = Zobrazit bublinu se zprávami hráče
setting.showweather.name = Zobrazit Grafiku Počasí setting.showweather.name = Zobrazit Grafiku Počasí
setting.hidedisplays.name = Hide Logic Displays setting.hidedisplays.name = Hide Logic Displays
public.confirm = Chceš Tvoji hru zpřístupnit veřejnosti?\n[accent]Kdokoli se bude moci připojit ke tvé hře.[]\n[lightgray]Toto se dá později změnit v nabídce Volby->Hra->Veřejná viditelnost hry. steam.friendsonly = Friends Only
public.confirm.really = Pokud chceš hrát s přáteli, použij [green]Pozvat Přítele[] místo [scarlet]Zvěřejnit server[]!\nJseš si jist, že chceš udělat svou hru [scarlet]veřejnou[]? steam.friendsonly.tooltip = Whether only Steam friends will be able to join your game.\nUnchecking this box will make your game public - anyone can join.
public.beta = Poznámka: nevydané verze her nemůžou být veřejné. public.beta = Poznámka: nevydané verze her nemůžou být veřejné.
uiscale.reset = Škálování uživatelskho rozhraní se změnilo.\nZmáčkni "OK", abys potvrdil toto nastavení.\n[scarlet]Návrat k původním hodnotám proběhne za [accent]{0}[] vteřin...[] uiscale.reset = Škálování uživatelskho rozhraní se změnilo.\nZmáčkni "OK", abys potvrdil toto nastavení.\n[scarlet]Návrat k původním hodnotám proběhne za [accent]{0}[] vteřin...[]
uiscale.cancel = Ukončit a odejít uiscale.cancel = Ukončit a odejít
@@ -1142,8 +1149,8 @@ keybind.select.name = Vybrat/Střílet
keybind.diagonal_placement.name = Umisťovat úhlopříčně keybind.diagonal_placement.name = Umisťovat úhlopříčně
keybind.pick.name = Vybrat blok keybind.pick.name = Vybrat blok
keybind.break_block.name = Rozbít blok keybind.break_block.name = Rozbít blok
keybind.select_all_units = Select All Units keybind.select_all_units.name = Select All Units
keybind.select_all_unit_factories = Select All Unit Factories keybind.select_all_unit_factories.name = Select All Unit Factories
keybind.deselect.name = Odznačit keybind.deselect.name = Odznačit
keybind.pickupCargo.name = Vyzvednout náklad keybind.pickupCargo.name = Vyzvednout náklad
keybind.dropCargo.name = Položit náklad keybind.dropCargo.name = Položit náklad
@@ -2200,6 +2207,7 @@ lst.flushmessage = Display a message on the screen from the text buffer.\nWill w
lst.cutscene = Manipulate the player camera. lst.cutscene = Manipulate the player camera.
lst.setflag = Set a global flag that can be read by all processors. lst.setflag = Set a global flag that can be read by all processors.
lst.getflag = Check if a global flag is set. lst.getflag = Check if a global flag is set.
lst.setprop = Sets a property of a unit or building.
logic.nounitbuild = [red]Stavba budov pomoci jednotek kontrolované procesorem neni povolené. logic.nounitbuild = [red]Stavba budov pomoci jednotek kontrolované procesorem neni povolené.

View File

@@ -146,11 +146,15 @@ mod.incompatiblemod = [red]Incompatible
mod.blacklisted = [red]Unsupported mod.blacklisted = [red]Unsupported
mod.unmetdependencies = [red]Unmet Dependencies mod.unmetdependencies = [red]Unmet Dependencies
mod.erroredcontent = [scarlet]Indholds fejl mod.erroredcontent = [scarlet]Indholds fejl
mod.circulardependencies = [red]Circular Dependencies
mod.incompletedependencies = [red]Incomplete Dependencies
mod.requiresversion.details = Requires game version: [accent]{0}[]\nYour game is outdated. This mod requires a newer version of the game (possibly a beta/alpha release) to function. mod.requiresversion.details = Requires game version: [accent]{0}[]\nYour game is outdated. This mod requires a newer version of the game (possibly a beta/alpha release) to function.
mod.outdatedv7.details = This mod is incompatible with the latest version of the game. The author must update it, and add [accent]minGameVersion: 136[] to its [accent]mod.json[] file. mod.outdatedv7.details = This mod is incompatible with the latest version of the game. The author must update it, and add [accent]minGameVersion: 136[] to its [accent]mod.json[] file.
mod.blacklisted.details = This mod has been manually blacklisted for causing crashes or other issues with this version of the game. Do not use it. mod.blacklisted.details = This mod has been manually blacklisted for causing crashes or other issues with this version of the game. Do not use it.
mod.missingdependencies.details = This mod is missing dependencies: {0} mod.missingdependencies.details = This mod is missing dependencies: {0}
mod.erroredcontent.details = This game caused errors when loading. Ask the mod author to fix them. mod.erroredcontent.details = This game caused errors when loading. Ask the mod author to fix them.
mod.circulardependencies.details = This mod has dependencies that depends on each other.
mod.incompletedependencies.details = This mod is unable to be loaded due to invalid or missing dependencies: {0}.
mod.requiresversion = Requires game version: [red]{0} mod.requiresversion = Requires game version: [red]{0}
mod.errors = Fejl ved afhentning af indhold. mod.errors = Fejl ved afhentning af indhold.
mod.noerrorplay = [scarlet]Du har mods med fejl.[] Deaktiver det eller løs fejl før du starter spillet. mod.noerrorplay = [scarlet]Du har mods med fejl.[] Deaktiver det eller løs fejl før du starter spillet.
@@ -327,6 +331,7 @@ command.repair = Repair
command.rebuild = Rebuild command.rebuild = Rebuild
command.assist = Assist Player command.assist = Assist Player
command.move = Move command.move = Move
command.boost = Boost
openlink = Åben Link openlink = Åben Link
copylink = Kopier Link copylink = Kopier Link
back = Tilbage back = Tilbage
@@ -964,6 +969,8 @@ bullet.splashdamage = [stat]{0}[lightgray] områdeskade ~[stat] {1}[lightgray] f
bullet.incendiary = [stat]brændfarlig bullet.incendiary = [stat]brændfarlig
bullet.homing = [stat]målsøgende bullet.homing = [stat]målsøgende
bullet.armorpierce = [stat]armor piercing bullet.armorpierce = [stat]armor piercing
bullet.suppression = [stat]{0} sec[lightgray] repair suppression ~ [stat]{1}[lightgray] tiles
bullet.interval = [stat]{0}/sec[lightgray] interval bullets:
bullet.frags = [stat]{0}[lightgray]x frag bullets: bullet.frags = [stat]{0}[lightgray]x frag bullets:
bullet.lightning = [stat]{0}[lightgray]x lightning ~ [stat]{1}[lightgray] damage bullet.lightning = [stat]{0}[lightgray]x lightning ~ [stat]{1}[lightgray] damage
bullet.buildingdamage = [stat]{0}%[lightgray] building damage bullet.buildingdamage = [stat]{0}%[lightgray] building damage
@@ -1077,8 +1084,8 @@ setting.bridgeopacity.name = Bro-gennemsigtighed
setting.playerchat.name = Vis spillers bobbel-chat setting.playerchat.name = Vis spillers bobbel-chat
setting.showweather.name = Show Weather Graphics setting.showweather.name = Show Weather Graphics
setting.hidedisplays.name = Hide Logic Displays setting.hidedisplays.name = Hide Logic Displays
public.confirm = Vil du gøre dit spil offentligt?\n[accent]Alle og enhver vil kunne tilslutte.\n[lightgray]Dette kan ændres senere i Indstillinger->Spil->Synlighed af offentlige spil. steam.friendsonly = Friends Only
public.confirm.really = If you want to play with friends, use [green]Invite Friend[] instead of a [scarlet]Public server[]!\nAre you sure you want to make your game [scarlet]public[]? steam.friendsonly.tooltip = Whether only Steam friends will be able to join your game.\nUnchecking this box will make your game public - anyone can join.
public.beta = Bemærk at beta-versioner af spillet ikke kan tilslutte sig offentlige spil. public.beta = Bemærk at beta-versioner af spillet ikke kan tilslutte sig offentlige spil.
uiscale.reset = UI-størrelsen har ændret sig.\nTryk "OK" for at bekræfte størrelsen.\n[scarlet]Omgør og afslutter om[accent] {0}[] sekunder... uiscale.reset = UI-størrelsen har ændret sig.\nTryk "OK" for at bekræfte størrelsen.\n[scarlet]Omgør og afslutter om[accent] {0}[] sekunder...
uiscale.cancel = Afblæs & Afslut uiscale.cancel = Afblæs & Afslut
@@ -1130,8 +1137,8 @@ keybind.select.name = Vælg/Skyd
keybind.diagonal_placement.name = Diagonal placering keybind.diagonal_placement.name = Diagonal placering
keybind.pick.name = Tag blok keybind.pick.name = Tag blok
keybind.break_block.name = Ødelæg blok keybind.break_block.name = Ødelæg blok
keybind.select_all_units = Select All Units keybind.select_all_units.name = Select All Units
keybind.select_all_unit_factories = Select All Unit Factories keybind.select_all_unit_factories.name = Select All Unit Factories
keybind.deselect.name = Fravælg keybind.deselect.name = Fravælg
keybind.pickupCargo.name = Saml last op keybind.pickupCargo.name = Saml last op
keybind.dropCargo.name = Smid last keybind.dropCargo.name = Smid last
@@ -2180,6 +2187,7 @@ lst.flushmessage = Display a message on the screen from the text buffer.\nWill w
lst.cutscene = Manipulate the player camera. lst.cutscene = Manipulate the player camera.
lst.setflag = Set a global flag that can be read by all processors. lst.setflag = Set a global flag that can be read by all processors.
lst.getflag = Check if a global flag is set. lst.getflag = Check if a global flag is set.
lst.setprop = Sets a property of a unit or building.
logic.nounitbuild = [red]Unit building logic is not allowed here. logic.nounitbuild = [red]Unit building logic is not allowed here.
lenum.type = Type of building/unit.\ne.g. for any router, this will return [accent]@router[].\nNot a string. lenum.type = Type of building/unit.\ne.g. for any router, this will return [accent]@router[].\nNot a string.
lenum.shoot = Shoot at a position. lenum.shoot = Shoot at a position.

View File

@@ -150,12 +150,16 @@ mod.incompatiblemod = [red]Inkompatibel
mod.blacklisted = [red]Nicht unterstützt mod.blacklisted = [red]Nicht unterstützt
mod.unmetdependencies = [red]Fehlende Abhängigkeiten mod.unmetdependencies = [red]Fehlende Abhängigkeiten
mod.erroredcontent = [scarlet]Inhalt-Fehler mod.erroredcontent = [scarlet]Inhalt-Fehler
mod.circulardependencies = [red]Circular Dependencies
mod.incompletedependencies = [red]Incomplete Dependencies
mod.requiresversion.details = Benötigt Spielversion [accent]{0}[]\nDein Spiel ist veraltet. Diese Mod benötigt eine neuere (möglicherweise Alpha- oder Beta-) Spielversion. mod.requiresversion.details = Benötigt Spielversion [accent]{0}[]\nDein Spiel ist veraltet. Diese Mod benötigt eine neuere (möglicherweise Alpha- oder Beta-) Spielversion.
mod.outdatedv7.details = Diese Mod ist nicht mit der neuesten Version von Mindustry kompatibel. Der Autor muss diesen aktualisieren und [accent]minGameVersion: 136[] in der [accent]mod.json[]-Datei hinzufügen. mod.outdatedv7.details = Diese Mod ist nicht mit der neuesten Version von Mindustry kompatibel. Der Autor muss diesen aktualisieren und [accent]minGameVersion: 136[] in der [accent]mod.json[]-Datei hinzufügen.
mod.blacklisted.details = Diese Mod würde manuell gesperrt, weil er diese Spielversion zum Abstürzen bringt oder andere Fehler verursacht. Benutze diese Mod nicht. mod.blacklisted.details = Diese Mod würde manuell gesperrt, weil er diese Spielversion zum Abstürzen bringt oder andere Fehler verursacht. Benutze diese Mod nicht.
mod.missingdependencies.details = Dieser Mod fehlen folgende Abhängigkeiten: {0} mod.missingdependencies.details = Dieser Mod fehlen folgende Abhängigkeiten: {0}
mod.erroredcontent.details = Diese Mod hat beim Laden Fehler verursacht. Bitte den Mod-Autor, diese zu beheben. mod.erroredcontent.details = Diese Mod hat beim Laden Fehler verursacht. Bitte den Mod-Autor, diese zu beheben.
mod.circulardependencies.details = This mod has dependencies that depends on each other.
mod.incompletedependencies.details = This mod is unable to be loaded due to invalid or missing dependencies: {0}.
mod.requiresversion = Requires game version: [red]{0} mod.requiresversion = Requires game version: [red]{0}
mod.errors = Beim Laden von Inhalt sind Fehler aufgetreten. mod.errors = Beim Laden von Inhalt sind Fehler aufgetreten.
@@ -334,6 +338,7 @@ command.repair = Reparieren
command.rebuild = Wiederaufbauen command.rebuild = Wiederaufbauen
command.assist = Spieler unterstützen command.assist = Spieler unterstützen
command.move = Bewegen command.move = Bewegen
command.boost = Boost
openlink = Link öffnen openlink = Link öffnen
copylink = Link kopieren copylink = Link kopieren
back = Zurück back = Zurück
@@ -987,6 +992,8 @@ bullet.splashdamage = [stat]{0}[lightgray] Flächenschaden ~[stat] {1}[lightgray
bullet.incendiary = [stat]entzündend bullet.incendiary = [stat]entzündend
bullet.homing = [stat]zielsuchend bullet.homing = [stat]zielsuchend
bullet.armorpierce = [stat]panzerbrechend bullet.armorpierce = [stat]panzerbrechend
bullet.suppression = [stat]{0} sec[lightgray] repair suppression ~ [stat]{1}[lightgray] tiles
bullet.interval = [stat]{0}/sec[lightgray] interval bullets:
bullet.frags = [stat]{0}[lightgray]x Splittergeschosse: bullet.frags = [stat]{0}[lightgray]x Splittergeschosse:
bullet.lightning = [stat]{0}[lightgray]x Blitz ~ [stat]{1}[lightgray] Schaden bullet.lightning = [stat]{0}[lightgray]x Blitz ~ [stat]{1}[lightgray] Schaden
bullet.buildingdamage = [stat]{0}%[lightgray]Blockschaden bullet.buildingdamage = [stat]{0}%[lightgray]Blockschaden
@@ -1100,8 +1107,8 @@ setting.bridgeopacity.name = Brücken-Deckkraft
setting.playerchat.name = Chat im Spiel anzeigen setting.playerchat.name = Chat im Spiel anzeigen
setting.showweather.name = Wetter anzeigen setting.showweather.name = Wetter anzeigen
setting.hidedisplays.name = Logik-Bildschirme verdecken setting.hidedisplays.name = Logik-Bildschirme verdecken
public.confirm = Willst du dein Spiel öffentlich zugänglich machen?\n[accent]Jeder kann deinem Spiel beitreten.\n[lightgray]Dies kann später in den Einstellungen->Spiel->Öffentliches Spiel geändert werden. steam.friendsonly = Friends Only
public.confirm.really = Wenn du mit Freunden spielen willst, drücke [green]Freunde einladen[] statt einen [scarlet]öffentlichen Server[] zu erstellen!\nBist du dir sicher, dass du dein Spiel [scarlet]öffentlich[] machen möchtest? steam.friendsonly.tooltip = Whether only Steam friends will be able to join your game.\nUnchecking this box will make your game public - anyone can join.
public.beta = Bemerke: Beta-Versionen des Spiels können keine öffentlichen Spiele machen. public.beta = Bemerke: Beta-Versionen des Spiels können keine öffentlichen Spiele machen.
uiscale.reset = UI-Skalierung wurde geändert.\nDrücke "OK", um diese Skalierung zu bestätigen.\n[scarlet]Zurückkehren und Beenden in[accent] {0}[] Einstellungen... uiscale.reset = UI-Skalierung wurde geändert.\nDrücke "OK", um diese Skalierung zu bestätigen.\n[scarlet]Zurückkehren und Beenden in[accent] {0}[] Einstellungen...
uiscale.cancel = Abbrechen & Beenden uiscale.cancel = Abbrechen & Beenden
@@ -1153,8 +1160,8 @@ keybind.select.name = Auswählen/Schießen
keybind.diagonal_placement.name = Diagonal platzieren keybind.diagonal_placement.name = Diagonal platzieren
keybind.pick.name = Block auswählen keybind.pick.name = Block auswählen
keybind.break_block.name = Block zerstören keybind.break_block.name = Block zerstören
keybind.select_all_units = Alle Einheiten auswählen keybind.select_all_units.name = Alle Einheiten auswählen
keybind.select_all_unit_factories = Alle Einheitenfabriken auswählen keybind.select_all_unit_factories.name = Alle Einheitenfabriken auswählen
keybind.deselect.name = Auswahl aufheben keybind.deselect.name = Auswahl aufheben
keybind.pickupCargo.name = Block aufheben keybind.pickupCargo.name = Block aufheben
keybind.dropCargo.name = Block fallen lassen keybind.dropCargo.name = Block fallen lassen
@@ -1759,7 +1766,7 @@ hint.skip = Fertig
hint.desktopMove = Drücke [accent][[WASD][], um dich zu bewegen. hint.desktopMove = Drücke [accent][[WASD][], um dich zu bewegen.
hint.zoom = [accent]Scrolle[], um rein oder raus zu zoomen. hint.zoom = [accent]Scrolle[], um rein oder raus zu zoomen.
hint.desktopShoot = Benutze [accent][[Linksklick][], um zu schießen. hint.desktopShoot = Benutze [accent][[Linksklick][], um zu schießen.
hint.depositItems = Um Materialien in den Kern zu tun, ziehe sie von dir zum Kern. hint.depositItems = Um Materialien in den Kern zu verschieben, ziehe sie von dir zum Kern.
hint.respawn = Um im Kern zu respawnen, drücke [accent][[V][]. hint.respawn = Um im Kern zu respawnen, drücke [accent][[V][].
hint.respawn.mobile = Du steuerst nun eine Einheit oder einen Block. Um wieder zur normalen Einheit zu werden, [accent]drücke die Abbildung von dir oben links[]. hint.respawn.mobile = Du steuerst nun eine Einheit oder einen Block. Um wieder zur normalen Einheit zu werden, [accent]drücke die Abbildung von dir oben links[].
hint.desktopPause = Benutze [accent][[Leertaste][], um das Spiel zu pausieren oder entpausieren. hint.desktopPause = Benutze [accent][[Leertaste][], um das Spiel zu pausieren oder entpausieren.
@@ -2228,6 +2235,7 @@ lst.flushmessage = Zeige eine Nachricht aus dem Textspeicher auf dem Bildschirm.
lst.cutscene = Verschiebe die Spielerkamera. lst.cutscene = Verschiebe die Spielerkamera.
lst.setflag = Setze eine Flag, die von allen Prozessoren gelesen werden kann. lst.setflag = Setze eine Flag, die von allen Prozessoren gelesen werden kann.
lst.getflag = Überprüfe, ob eine Flag gesetzt ist. lst.getflag = Überprüfe, ob eine Flag gesetzt ist.
lst.setprop = Sets a property of a unit or building.
logic.nounitbuild = [red]Logik, die Blöcke baut, ist hier nicht erlaubt. logic.nounitbuild = [red]Logik, die Blöcke baut, ist hier nicht erlaubt.

File diff suppressed because it is too large Load Diff

View File

@@ -146,11 +146,15 @@ mod.incompatiblemod = [red]Incompatible
mod.blacklisted = [red]Unsupported mod.blacklisted = [red]Unsupported
mod.unmetdependencies = [red]Unmet Dependencies mod.unmetdependencies = [red]Unmet Dependencies
mod.erroredcontent = [scarlet]Content Errors mod.erroredcontent = [scarlet]Content Errors
mod.circulardependencies = [red]Circular Dependencies
mod.incompletedependencies = [red]Incomplete Dependencies
mod.requiresversion.details = Requires game version: [accent]{0}[]\nYour game is outdated. This mod requires a newer version of the game (possibly a beta/alpha release) to function. mod.requiresversion.details = Requires game version: [accent]{0}[]\nYour game is outdated. This mod requires a newer version of the game (possibly a beta/alpha release) to function.
mod.outdatedv7.details = This mod is incompatible with the latest version of the game. The author must update it, and add [accent]minGameVersion: 136[] to its [accent]mod.json[] file. mod.outdatedv7.details = This mod is incompatible with the latest version of the game. The author must update it, and add [accent]minGameVersion: 136[] to its [accent]mod.json[] file.
mod.blacklisted.details = This mod has been manually blacklisted for causing crashes or other issues with this version of the game. Do not use it. mod.blacklisted.details = This mod has been manually blacklisted for causing crashes or other issues with this version of the game. Do not use it.
mod.missingdependencies.details = This mod is missing dependencies: {0} mod.missingdependencies.details = This mod is missing dependencies: {0}
mod.erroredcontent.details = This game caused errors when loading. Ask the mod author to fix them. mod.erroredcontent.details = This game caused errors when loading. Ask the mod author to fix them.
mod.circulardependencies.details = This mod has dependencies that depends on each other.
mod.incompletedependencies.details = This mod is unable to be loaded due to invalid or missing dependencies: {0}.
mod.requiresversion = Requires game version: [red]{0} mod.requiresversion = Requires game version: [red]{0}
mod.errors = Errors have occurred loading content. mod.errors = Errors have occurred loading content.
mod.noerrorplay = [scarlet]You have mods with errors.[] Either disable the affected mods or fix the errors before playing. mod.noerrorplay = [scarlet]You have mods with errors.[] Either disable the affected mods or fix the errors before playing.
@@ -327,6 +331,7 @@ command.repair = Repair
command.rebuild = Rebuild command.rebuild = Rebuild
command.assist = Assist Player command.assist = Assist Player
command.move = Move command.move = Move
command.boost = Boost
openlink = Ava link openlink = Ava link
copylink = Kopeeri link copylink = Kopeeri link
back = Tagasi back = Tagasi
@@ -964,6 +969,8 @@ bullet.splashdamage = [stat]{0}[lightgray] hävituspunkti ~[stat] {1}[lightgray]
bullet.incendiary = [stat]süttiv bullet.incendiary = [stat]süttiv
bullet.homing = [stat]isesihtiv bullet.homing = [stat]isesihtiv
bullet.armorpierce = [stat]armor piercing bullet.armorpierce = [stat]armor piercing
bullet.suppression = [stat]{0} sec[lightgray] repair suppression ~ [stat]{1}[lightgray] tiles
bullet.interval = [stat]{0}/sec[lightgray] interval bullets:
bullet.frags = [stat]{0}[lightgray]x frag bullets: bullet.frags = [stat]{0}[lightgray]x frag bullets:
bullet.lightning = [stat]{0}[lightgray]x lightning ~ [stat]{1}[lightgray] damage bullet.lightning = [stat]{0}[lightgray]x lightning ~ [stat]{1}[lightgray] damage
bullet.buildingdamage = [stat]{0}%[lightgray] building damage bullet.buildingdamage = [stat]{0}%[lightgray] building damage
@@ -1077,8 +1084,8 @@ setting.bridgeopacity.name = Bridge Opacity
setting.playerchat.name = Näita mängusisest vestlusakent setting.playerchat.name = Näita mängusisest vestlusakent
setting.showweather.name = Show Weather Graphics setting.showweather.name = Show Weather Graphics
setting.hidedisplays.name = Hide Logic Displays setting.hidedisplays.name = Hide Logic Displays
public.confirm = Do you want to make your game public?\n[accent]Anyone will be able to join your games.\n[lightgray]This can be changed later in Settings->Game->Public Game Visibility. steam.friendsonly = Friends Only
public.confirm.really = If you want to play with friends, use [green]Invite Friend[] instead of a [scarlet]Public server[]!\nAre you sure you want to make your game [scarlet]public[]? steam.friendsonly.tooltip = Whether only Steam friends will be able to join your game.\nUnchecking this box will make your game public - anyone can join.
public.beta = Note that beta versions of the game cannot make public lobbies. public.beta = Note that beta versions of the game cannot make public lobbies.
uiscale.reset = Kasutajaliidese suurust on muudetud.\nVajuta nupule "OK", et uus suurus kinnitada.\n[scarlet]Esialgne suurus taastatakse[accent] {0}[] sekundi pärast... uiscale.reset = Kasutajaliidese suurust on muudetud.\nVajuta nupule "OK", et uus suurus kinnitada.\n[scarlet]Esialgne suurus taastatakse[accent] {0}[] sekundi pärast...
uiscale.cancel = Tühista ja välju uiscale.cancel = Tühista ja välju
@@ -1130,8 +1137,8 @@ keybind.select.name = Vali/Tulista
keybind.diagonal_placement.name = Diagonaalne paigutamine keybind.diagonal_placement.name = Diagonaalne paigutamine
keybind.pick.name = Vali blokk keybind.pick.name = Vali blokk
keybind.break_block.name = Hävita blokk keybind.break_block.name = Hävita blokk
keybind.select_all_units = Select All Units keybind.select_all_units.name = Select All Units
keybind.select_all_unit_factories = Select All Unit Factories keybind.select_all_unit_factories.name = Select All Unit Factories
keybind.deselect.name = Tühista valik keybind.deselect.name = Tühista valik
keybind.pickupCargo.name = Pickup Cargo keybind.pickupCargo.name = Pickup Cargo
keybind.dropCargo.name = Drop Cargo keybind.dropCargo.name = Drop Cargo
@@ -2182,6 +2189,7 @@ lst.flushmessage = Display a message on the screen from the text buffer.\nWill w
lst.cutscene = Manipulate the player camera. lst.cutscene = Manipulate the player camera.
lst.setflag = Set a global flag that can be read by all processors. lst.setflag = Set a global flag that can be read by all processors.
lst.getflag = Check if a global flag is set. lst.getflag = Check if a global flag is set.
lst.setprop = Sets a property of a unit or building.
logic.nounitbuild = [red]Unit building logic is not allowed here. logic.nounitbuild = [red]Unit building logic is not allowed here.
lenum.type = Type of building/unit.\ne.g. for any router, this will return [accent]@router[].\nNot a string. lenum.type = Type of building/unit.\ne.g. for any router, this will return [accent]@router[].\nNot a string.
lenum.shoot = Shoot at a position. lenum.shoot = Shoot at a position.

View File

@@ -146,11 +146,15 @@ mod.incompatiblemod = [red]Incompatible
mod.blacklisted = [red]Unsupported mod.blacklisted = [red]Unsupported
mod.unmetdependencies = [red]Unmet Dependencies mod.unmetdependencies = [red]Unmet Dependencies
mod.erroredcontent = [scarlet]Edukiaren erroreak mod.erroredcontent = [scarlet]Edukiaren erroreak
mod.circulardependencies = [red]Circular Dependencies
mod.incompletedependencies = [red]Incomplete Dependencies
mod.requiresversion.details = Requires game version: [accent]{0}[]\nYour game is outdated. This mod requires a newer version of the game (possibly a beta/alpha release) to function. mod.requiresversion.details = Requires game version: [accent]{0}[]\nYour game is outdated. This mod requires a newer version of the game (possibly a beta/alpha release) to function.
mod.outdatedv7.details = This mod is incompatible with the latest version of the game. The author must update it, and add [accent]minGameVersion: 136[] to its [accent]mod.json[] file. mod.outdatedv7.details = This mod is incompatible with the latest version of the game. The author must update it, and add [accent]minGameVersion: 136[] to its [accent]mod.json[] file.
mod.blacklisted.details = This mod has been manually blacklisted for causing crashes or other issues with this version of the game. Do not use it. mod.blacklisted.details = This mod has been manually blacklisted for causing crashes or other issues with this version of the game. Do not use it.
mod.missingdependencies.details = This mod is missing dependencies: {0} mod.missingdependencies.details = This mod is missing dependencies: {0}
mod.erroredcontent.details = This mod caused errors when loading. Ask the mod author to fix them. mod.erroredcontent.details = This mod caused errors when loading. Ask the mod author to fix them.
mod.circulardependencies.details = This mod has dependencies that depends on each other.
mod.incompletedependencies.details = This mod is unable to be loaded due to invalid or missing dependencies: {0}.
mod.requiresversion = Requires game version: [red]{0} mod.requiresversion = Requires game version: [red]{0}
mod.errors = Erroreak gertatu dira edukia kargatzean. mod.errors = Erroreak gertatu dira edukia kargatzean.
mod.noerrorplay = [scarlet]Erroreak dituzten mod-ak dituzu.[] Desgaitu kaltetutako mod-ak edo konpondu erroreak jolastu aurretik. mod.noerrorplay = [scarlet]Erroreak dituzten mod-ak dituzu.[] Desgaitu kaltetutako mod-ak edo konpondu erroreak jolastu aurretik.
@@ -329,6 +333,7 @@ command.repair = Repair
command.rebuild = Rebuild command.rebuild = Rebuild
command.assist = Assist Player command.assist = Assist Player
command.move = Move command.move = Move
command.boost = Boost
openlink = Ireki esteka openlink = Ireki esteka
copylink = Kopiatu esteka copylink = Kopiatu esteka
back = Atzera back = Atzera
@@ -966,6 +971,8 @@ bullet.splashdamage = [stat]{0}[lightgray] ingurune-kaltea ~[stat] {1}[lightgray
bullet.incendiary = [stat]su-eragilea bullet.incendiary = [stat]su-eragilea
bullet.homing = [stat]gidatua bullet.homing = [stat]gidatua
bullet.armorpierce = [stat]armor piercing bullet.armorpierce = [stat]armor piercing
bullet.suppression = [stat]{0} sec[lightgray] repair suppression ~ [stat]{1}[lightgray] tiles
bullet.interval = [stat]{0}/sec[lightgray] interval bullets:
bullet.frags = [stat]{0}[lightgray]x frag bullets: bullet.frags = [stat]{0}[lightgray]x frag bullets:
bullet.lightning = [stat]{0}[lightgray]x lightning ~ [stat]{1}[lightgray] damage bullet.lightning = [stat]{0}[lightgray]x lightning ~ [stat]{1}[lightgray] damage
bullet.buildingdamage = [stat]{0}%[lightgray] building damage bullet.buildingdamage = [stat]{0}%[lightgray] building damage
@@ -1079,8 +1086,8 @@ setting.bridgeopacity.name = Bridge Opacity
setting.playerchat.name = Erakutsi jolas barneko txata setting.playerchat.name = Erakutsi jolas barneko txata
setting.showweather.name = Show Weather Graphics setting.showweather.name = Show Weather Graphics
setting.hidedisplays.name = Hide Logic Displays setting.hidedisplays.name = Hide Logic Displays
public.confirm = Zure jolasa publikoa egin nahi duzu?\n[accent]Edonor elkartu ahal izango da zure partidetara.\n[lightgray]Hau gero ere aldatu dauteke, Ezarpenak->Partida->Partida publikoaren ikusgaitasuna. steam.friendsonly = Friends Only
public.confirm.really = If you want to play with friends, use [green]Invite Friend[] instead of a [scarlet]Public server[]!\nAre you sure you want to make your game [scarlet]public[]? steam.friendsonly.tooltip = Whether only Steam friends will be able to join your game.\nUnchecking this box will make your game public - anyone can join.
public.beta = Kontuan izan jolasaren beta bertsioek ezin dituztela jokalarien gela publokoak sortu. public.beta = Kontuan izan jolasaren beta bertsioek ezin dituztela jokalarien gela publokoak sortu.
uiscale.reset = Interfazearen eskala aldatu da.\nSakatu "Ados" eskala hau berresteko.\n[scarlet][accent] {0}[] segundo atzera egin eta irteteko... uiscale.reset = Interfazearen eskala aldatu da.\nSakatu "Ados" eskala hau berresteko.\n[scarlet][accent] {0}[] segundo atzera egin eta irteteko...
uiscale.cancel = Utzi eta irten uiscale.cancel = Utzi eta irten
@@ -1132,8 +1139,8 @@ keybind.select.name = Hautatu/Tirokatu
keybind.diagonal_placement.name = Kokatze diagonala keybind.diagonal_placement.name = Kokatze diagonala
keybind.pick.name = Jaso blokea keybind.pick.name = Jaso blokea
keybind.break_block.name = Apurtu blokea keybind.break_block.name = Apurtu blokea
keybind.select_all_units = Select All Units keybind.select_all_units.name = Select All Units
keybind.select_all_unit_factories = Select All Unit Factories keybind.select_all_unit_factories.name = Select All Unit Factories
keybind.deselect.name = Deshautatu keybind.deselect.name = Deshautatu
keybind.pickupCargo.name = Pickup Cargo keybind.pickupCargo.name = Pickup Cargo
keybind.dropCargo.name = Drop Cargo keybind.dropCargo.name = Drop Cargo
@@ -2184,6 +2191,7 @@ lst.flushmessage = Display a message on the screen from the text buffer.\nWill w
lst.cutscene = Manipulate the player camera. lst.cutscene = Manipulate the player camera.
lst.setflag = Set a global flag that can be read by all processors. lst.setflag = Set a global flag that can be read by all processors.
lst.getflag = Check if a global flag is set. lst.getflag = Check if a global flag is set.
lst.setprop = Sets a property of a unit or building.
logic.nounitbuild = [red]Unit building logic is not allowed here. logic.nounitbuild = [red]Unit building logic is not allowed here.
lenum.type = Type of building/unit.\ne.g. for any router, this will return [accent]@router[].\nNot a string. lenum.type = Type of building/unit.\ne.g. for any router, this will return [accent]@router[].\nNot a string.
lenum.shoot = Shoot at a position. lenum.shoot = Shoot at a position.

View File

@@ -146,11 +146,15 @@ mod.incompatiblemod = [red]Incompatible
mod.blacklisted = [red]Unsupported mod.blacklisted = [red]Unsupported
mod.unmetdependencies = [red]Unmet Dependencies mod.unmetdependencies = [red]Unmet Dependencies
mod.erroredcontent = [scarlet]Sisältövirheet mod.erroredcontent = [scarlet]Sisältövirheet
mod.circulardependencies = [red]Circular Dependencies
mod.incompletedependencies = [red]Incomplete Dependencies
mod.requiresversion.details = Requires game version: [accent]{0}[]\nYour game is outdated. This mod requires a newer version of the game (possibly a beta/alpha release) to function. mod.requiresversion.details = Requires game version: [accent]{0}[]\nYour game is outdated. This mod requires a newer version of the game (possibly a beta/alpha release) to function.
mod.outdatedv7.details = This mod is incompatible with the latest version of the game. The author must update it, and add [accent]minGameVersion: 136[] to its [accent]mod.json[] file. mod.outdatedv7.details = This mod is incompatible with the latest version of the game. The author must update it, and add [accent]minGameVersion: 136[] to its [accent]mod.json[] file.
mod.blacklisted.details = This mod has been manually blacklisted for causing crashes or other issues with this version of the game. Do not use it. mod.blacklisted.details = This mod has been manually blacklisted for causing crashes or other issues with this version of the game. Do not use it.
mod.missingdependencies.details = This mod is missing dependencies: {0} mod.missingdependencies.details = This mod is missing dependencies: {0}
mod.erroredcontent.details = This game caused errors when loading. Ask the mod author to fix them. mod.erroredcontent.details = This game caused errors when loading. Ask the mod author to fix them.
mod.circulardependencies.details = This mod has dependencies that depends on each other.
mod.incompletedependencies.details = This mod is unable to be loaded due to invalid or missing dependencies: {0}.
mod.requiresversion = Requires game version: [red]{0} mod.requiresversion = Requires game version: [red]{0}
mod.errors = Virheitä on tapahtunut pelin ladatessa. mod.errors = Virheitä on tapahtunut pelin ladatessa.
mod.noerrorplay = [scarlet]Sinulla on virheellisiä modeja.[] Joko poista ne käytöstä tai korjaa virheet. mod.noerrorplay = [scarlet]Sinulla on virheellisiä modeja.[] Joko poista ne käytöstä tai korjaa virheet.
@@ -327,6 +331,7 @@ command.repair = Repair
command.rebuild = Rebuild command.rebuild = Rebuild
command.assist = Assist Player command.assist = Assist Player
command.move = Move command.move = Move
command.boost = Boost
openlink = Avaa linkki openlink = Avaa linkki
copylink = Kopioi linkki copylink = Kopioi linkki
back = Takaisin back = Takaisin
@@ -963,6 +968,8 @@ bullet.splashdamage = [stat]{0}[lightgray] Aluevahinko ~[stat] {1}[lightgray] pa
bullet.incendiary = [stat]sytyttävä bullet.incendiary = [stat]sytyttävä
bullet.homing = [stat]itseohjautuva bullet.homing = [stat]itseohjautuva
bullet.armorpierce = [stat]haarniskan läpäisevä bullet.armorpierce = [stat]haarniskan läpäisevä
bullet.suppression = [stat]{0} sec[lightgray] repair suppression ~ [stat]{1}[lightgray] tiles
bullet.interval = [stat]{0}/sec[lightgray] interval bullets:
bullet.frags = [stat]{0}[lightgray]x sirpaleammuksia: bullet.frags = [stat]{0}[lightgray]x sirpaleammuksia:
bullet.lightning = [stat]{0}[lightgray]x salama ~ [stat]{1}[lightgray] vahinkoa bullet.lightning = [stat]{0}[lightgray]x salama ~ [stat]{1}[lightgray] vahinkoa
bullet.buildingdamage = [stat]{0}%[lightgray] vahinko rakennuksiin bullet.buildingdamage = [stat]{0}%[lightgray] vahinko rakennuksiin
@@ -1076,8 +1083,8 @@ setting.bridgeopacity.name = Siltojen läpinäkyvyys
setting.playerchat.name = Näytä pelinsisäinen keskustelu setting.playerchat.name = Näytä pelinsisäinen keskustelu
setting.showweather.name = Näytä säägrafiikat setting.showweather.name = Näytä säägrafiikat
setting.hidedisplays.name = Piilota logiikkanäytöt setting.hidedisplays.name = Piilota logiikkanäytöt
public.confirm = Haluatko tehdä pelistäsi julkisen?\n[accent]Kuka tahansa voi liittyä peliisi.\n[lightgray]Tämä voidaan muuttaa myöhemmin: Asetukset->Peli->Julkisen pelin näkyvyys steam.friendsonly = Friends Only
public.confirm.really = Jos halat pelata kaverien kanssa, käytä [green]Kutsu kaveri[] -toimintoa, älä [scarlet]Julkinen palvelin[] -toimintoa!\nOletko varma, että haluat tehdä pelistäsi [scarlet]julkisen[]? steam.friendsonly.tooltip = Whether only Steam friends will be able to join your game.\nUnchecking this box will make your game public - anyone can join.
public.beta = Huomaa, että pelin betaversiot eivät voi luoda julkisia auloja. public.beta = Huomaa, että pelin betaversiot eivät voi luoda julkisia auloja.
uiscale.reset = UI:n skaalaa on muutettu.\nPaina "OK" hyväksyäksesi tämän skaalan.\n[scarlet]Palautetaan ja poistutaan[accent] {0}[] sekunnissa... uiscale.reset = UI:n skaalaa on muutettu.\nPaina "OK" hyväksyäksesi tämän skaalan.\n[scarlet]Palautetaan ja poistutaan[accent] {0}[] sekunnissa...
uiscale.cancel = Peruuta ja poistu uiscale.cancel = Peruuta ja poistu
@@ -1129,8 +1136,8 @@ keybind.select.name = Valitse/Ammu
keybind.diagonal_placement.name = Vino sijoitus keybind.diagonal_placement.name = Vino sijoitus
keybind.pick.name = Ota palikka keybind.pick.name = Ota palikka
keybind.break_block.name = Riko palikka keybind.break_block.name = Riko palikka
keybind.select_all_units = Select All Units keybind.select_all_units.name = Select All Units
keybind.select_all_unit_factories = Select All Unit Factories keybind.select_all_unit_factories.name = Select All Unit Factories
keybind.deselect.name = Poista valinta keybind.deselect.name = Poista valinta
keybind.pickupCargo.name = Nosta lastia keybind.pickupCargo.name = Nosta lastia
keybind.dropCargo.name = Pudota lastia keybind.dropCargo.name = Pudota lastia
@@ -2185,6 +2192,7 @@ lst.flushmessage = Näytä näytöllä viesti tekstipuskurista.\nOdottaa, kunnes
lst.cutscene = Hallitse pelaajan kameraa. lst.cutscene = Hallitse pelaajan kameraa.
lst.setflag = Aseta globaali tunniste, jonka kaikki prosessorit voivat lukea. lst.setflag = Aseta globaali tunniste, jonka kaikki prosessorit voivat lukea.
lst.getflag = Tarkista, onko globaali tunniste asetettu. lst.getflag = Tarkista, onko globaali tunniste asetettu.
lst.setprop = Sets a property of a unit or building.
logic.nounitbuild = [red]Logiikan käyttö ei täällä ole sallittu yksikköjen tuottamisessa. logic.nounitbuild = [red]Logiikan käyttö ei täällä ole sallittu yksikköjen tuottamisessa.
lenum.type = Rakennuksen/Yksikön tyyppi.\nEsim. jokaisesta reitittimestä tämä palauttaa [accent]@router[].\nEi ole merkkijono. lenum.type = Rakennuksen/Yksikön tyyppi.\nEsim. jokaisesta reitittimestä tämä palauttaa [accent]@router[].\nEi ole merkkijono.
lenum.shoot = Ammu tiettyä sijaintia. lenum.shoot = Ammu tiettyä sijaintia.

View File

@@ -146,11 +146,15 @@ mod.incompatiblemod = [red]Incompatible
mod.blacklisted = [red]Unsupported mod.blacklisted = [red]Unsupported
mod.unmetdependencies = [red]Unmet Dependencies mod.unmetdependencies = [red]Unmet Dependencies
mod.erroredcontent = [scarlet]Mga Error sa Nilalaman mod.erroredcontent = [scarlet]Mga Error sa Nilalaman
mod.circulardependencies = [red]Circular Dependencies
mod.incompletedependencies = [red]Incomplete Dependencies
mod.requiresversion.details = Requires game version: [accent]{0}[]\nYour game is outdated. This mod requires a newer version of the game (possibly a beta/alpha release) to function. mod.requiresversion.details = Requires game version: [accent]{0}[]\nYour game is outdated. This mod requires a newer version of the game (possibly a beta/alpha release) to function.
mod.outdatedv7.details = This mod is incompatible with the latest version of the game. The author must update it, and add [accent]minGameVersion: 136[] to its [accent]mod.json[] file. mod.outdatedv7.details = This mod is incompatible with the latest version of the game. The author must update it, and add [accent]minGameVersion: 136[] to its [accent]mod.json[] file.
mod.blacklisted.details = This mod has been manually blacklisted for causing crashes or other issues with this version of the game. Do not use it. mod.blacklisted.details = This mod has been manually blacklisted for causing crashes or other issues with this version of the game. Do not use it.
mod.missingdependencies.details = This mod is missing dependencies: {0} mod.missingdependencies.details = This mod is missing dependencies: {0}
mod.erroredcontent.details = This game caused errors when loading. Ask the mod author to fix them. mod.erroredcontent.details = This game caused errors when loading. Ask the mod author to fix them.
mod.circulardependencies.details = This mod has dependencies that depends on each other.
mod.incompletedependencies.details = This mod is unable to be loaded due to invalid or missing dependencies: {0}.
mod.requiresversion = Requires game version: [red]{0} mod.requiresversion = Requires game version: [red]{0}
mod.errors = May mga error na naitala habang ni-lo-load ang nilalaman. mod.errors = May mga error na naitala habang ni-lo-load ang nilalaman.
mod.noerrorplay = [scarlet]May mga mod kang may error.[] Maaaring 'wag munang paganahin ang mga apektadong mod o 'di kaya'y ayusin ang mga error bago maglaro. mod.noerrorplay = [scarlet]May mga mod kang may error.[] Maaaring 'wag munang paganahin ang mga apektadong mod o 'di kaya'y ayusin ang mga error bago maglaro.
@@ -327,6 +331,7 @@ command.repair = Repair
command.rebuild = Rebuild command.rebuild = Rebuild
command.assist = Assist Player command.assist = Assist Player
command.move = Move command.move = Move
command.boost = Boost
openlink = Open Link openlink = Open Link
copylink = Copy Link copylink = Copy Link
back = Back back = Back
@@ -963,6 +968,8 @@ bullet.splashdamage = [stat]{0}[lightgray] area dmg ~[stat] {1}[lightgray] tiles
bullet.incendiary = [stat]incendiary bullet.incendiary = [stat]incendiary
bullet.homing = [stat]homing bullet.homing = [stat]homing
bullet.armorpierce = [stat]armor piercing bullet.armorpierce = [stat]armor piercing
bullet.suppression = [stat]{0} sec[lightgray] repair suppression ~ [stat]{1}[lightgray] tiles
bullet.interval = [stat]{0}/sec[lightgray] interval bullets:
bullet.frags = [stat]{0}[lightgray]x frag bullets: bullet.frags = [stat]{0}[lightgray]x frag bullets:
bullet.lightning = [stat]{0}[lightgray]x lightning ~ [stat]{1}[lightgray] damage bullet.lightning = [stat]{0}[lightgray]x lightning ~ [stat]{1}[lightgray] damage
bullet.buildingdamage = [stat]{0}%[lightgray] building damage bullet.buildingdamage = [stat]{0}%[lightgray] building damage
@@ -1076,8 +1083,8 @@ setting.bridgeopacity.name = Bridge Opacity
setting.playerchat.name = Ipakita Player Bubble Chat setting.playerchat.name = Ipakita Player Bubble Chat
setting.showweather.name = Show Weather Graphics setting.showweather.name = Show Weather Graphics
setting.hidedisplays.name = Hide Logic Displays setting.hidedisplays.name = Hide Logic Displays
public.confirm = Do you want to make your game public?\n[accent]Anyone will be able to join your games.\n[lightgray]This can be changed later in Settings->Game->Public Game Visibility. steam.friendsonly = Friends Only
public.confirm.really = If you want to play with friends, use [green]Invite Friend[] instead of a [scarlet]Public server[]!\nAre you sure you want to make your game [scarlet]public[]? steam.friendsonly.tooltip = Whether only Steam friends will be able to join your game.\nUnchecking this box will make your game public - anyone can join.
public.beta = Tandaan na ang mga beta na bersyon ng laro ay hindi maaaring gumawa ng mga pampublikong lobby. public.beta = Tandaan na ang mga beta na bersyon ng laro ay hindi maaaring gumawa ng mga pampublikong lobby.
uiscale.reset = Nabago ang sukat ng UI.\nPindutin ang "OK" upang kumpirmahin ang sukat na ito.\n[scarlet]Binabalik at lalabas sa dating anyo ng[accent] {0}[] segundo... uiscale.reset = Nabago ang sukat ng UI.\nPindutin ang "OK" upang kumpirmahin ang sukat na ito.\n[scarlet]Binabalik at lalabas sa dating anyo ng[accent] {0}[] segundo...
uiscale.cancel = I-Cancel & Exit uiscale.cancel = I-Cancel & Exit
@@ -1129,8 +1136,8 @@ keybind.select.name = Select/Shoot
keybind.diagonal_placement.name = Diagonal Placement keybind.diagonal_placement.name = Diagonal Placement
keybind.pick.name = Pick Block keybind.pick.name = Pick Block
keybind.break_block.name = Break Block keybind.break_block.name = Break Block
keybind.select_all_units = Select All Units keybind.select_all_units.name = Select All Units
keybind.select_all_unit_factories = Select All Unit Factories keybind.select_all_unit_factories.name = Select All Unit Factories
keybind.deselect.name = Deselect keybind.deselect.name = Deselect
keybind.pickupCargo.name = Pickup Cargo keybind.pickupCargo.name = Pickup Cargo
keybind.dropCargo.name = Drop Cargo keybind.dropCargo.name = Drop Cargo
@@ -2181,6 +2188,7 @@ lst.flushmessage = Display a message on the screen from the text buffer.\nWill w
lst.cutscene = Manipulate the player camera. lst.cutscene = Manipulate the player camera.
lst.setflag = Set a global flag that can be read by all processors. lst.setflag = Set a global flag that can be read by all processors.
lst.getflag = Check if a global flag is set. lst.getflag = Check if a global flag is set.
lst.setprop = Sets a property of a unit or building.
logic.nounitbuild = [red]Unit building logic is not allowed here. logic.nounitbuild = [red]Unit building logic is not allowed here.
lenum.type = Type of building/unit.\ne.g. for any router, this will return [accent]@router[].\nNot a string. lenum.type = Type of building/unit.\ne.g. for any router, this will return [accent]@router[].\nNot a string.
lenum.shoot = Shoot at a position. lenum.shoot = Shoot at a position.

View File

@@ -150,12 +150,16 @@ mod.incompatiblemod = [red]Incompatible
mod.blacklisted = [red]Non supporté mod.blacklisted = [red]Non supporté
mod.unmetdependencies = [red]Dépendances manquantes mod.unmetdependencies = [red]Dépendances manquantes
mod.erroredcontent = [scarlet]Erreurs dans le contenu ! mod.erroredcontent = [scarlet]Erreurs dans le contenu !
mod.circulardependencies = [red]Circular Dependencies
mod.incompletedependencies = [red]Incomplete Dependencies
mod.requiresversion.details = Requiert la version: [accent]{0}[]\nVotre jeu n'est pas à jour. Ce mod a besoin d'une version récente du jeu (la beta ou l'alpha) pour fonctionner. mod.requiresversion.details = Requiert la version: [accent]{0}[]\nVotre jeu n'est pas à jour. Ce mod a besoin d'une version récente du jeu (la beta ou l'alpha) pour fonctionner.
mod.outdatedv7.details = Ce mod est incompatible avec la version la plus récente du jeu. L'auteur doit le mettre à jour et ajouter [accent]minGameVersion: 136[] dans le fichier [accent]mod.json[]. mod.outdatedv7.details = Ce mod est incompatible avec la version la plus récente du jeu. L'auteur doit le mettre à jour et ajouter [accent]minGameVersion: 136[] dans le fichier [accent]mod.json[].
mod.blacklisted.details = Ce mod à été manuellement mis sur liste noire car il cause des crashs ou d'autres problèmes avec la version actuelle du jeu. Ne l'utilisez pas. mod.blacklisted.details = Ce mod à été manuellement mis sur liste noire car il cause des crashs ou d'autres problèmes avec la version actuelle du jeu. Ne l'utilisez pas.
mod.missingdependencies.details = Ce mod à des dépendances manquantes: {0} mod.missingdependencies.details = Ce mod à des dépendances manquantes: {0}
mod.erroredcontent.details = Ce mod cause des erreurs lors du chargement. Demandez à l'autheur de les régler. mod.erroredcontent.details = Ce mod cause des erreurs lors du chargement. Demandez à l'autheur de les régler.
mod.circulardependencies.details = This mod has dependencies that depends on each other.
mod.incompletedependencies.details = This mod is unable to be loaded due to invalid or missing dependencies: {0}.
mod.requiresversion = Requiert la version: [red]{0} mod.requiresversion = Requiert la version: [red]{0}
@@ -335,6 +339,7 @@ command.repair = Réparer
command.rebuild = Reconstruire command.rebuild = Reconstruire
command.assist = Assister command.assist = Assister
command.move = Bouger command.move = Bouger
command.boost = Boost
openlink = Ouvrir le lien openlink = Ouvrir le lien
copylink = Copier le lien copylink = Copier le lien
back = Retour back = Retour
@@ -988,6 +993,8 @@ bullet.splashdamage = [stat]{0}[lightgray] dégâts de zone ~[stat] {1}[lightgra
bullet.incendiary = [stat]incendiaire bullet.incendiary = [stat]incendiaire
bullet.homing = [stat]autoguidé bullet.homing = [stat]autoguidé
bullet.armorpierce = [stat]perceur d'armure bullet.armorpierce = [stat]perceur d'armure
bullet.suppression = [stat]{0} sec[lightgray] repair suppression ~ [stat]{1}[lightgray] tiles
bullet.interval = [stat]{0}/sec[lightgray] interval bullets:
bullet.frags = [stat]{0}[lightgray]x Balle à fragmentation : bullet.frags = [stat]{0}[lightgray]x Balle à fragmentation :
bullet.lightning = [stat]{0}[lightgray]x foudre ~ [stat]{1}[lightgray] dégâts bullet.lightning = [stat]{0}[lightgray]x foudre ~ [stat]{1}[lightgray] dégâts
bullet.buildingdamage = [stat]{0}%[lightgray] des dégâts aux bâtiments bullet.buildingdamage = [stat]{0}%[lightgray] des dégâts aux bâtiments
@@ -1101,8 +1108,8 @@ setting.bridgeopacity.name = Opacité des ponts
setting.playerchat.name = Montrer les bulles de discussion des joueurs setting.playerchat.name = Montrer les bulles de discussion des joueurs
setting.showweather.name = Montrer les Effets météo setting.showweather.name = Montrer les Effets météo
setting.hidedisplays.name = Cacher les Écrans setting.hidedisplays.name = Cacher les Écrans
public.confirm = Voulez-vous rendre votre partie publique ?\n[accent]N'importe qui pourra rejoindre vos parties.\n[lightgray]Ce paramètre peut être changé plus tard dans Paramètres->Jeu->Visibilité de la Partie Publique steam.friendsonly = Friends Only
public.confirm.really = Si vous voulez jouer avec des amis, utilisez [green]Inviter un Ami[] Au lieu [scarlet]d'un Serveur Public[] !\nÊtes-vous sûrs de vouloir rendre votre partie [scarlet]publique[] ? steam.friendsonly.tooltip = Whether only Steam friends will be able to join your game.\nUnchecking this box will make your game public - anyone can join.
public.beta = Notez que les versions bêta du jeu ne peuvent pas créer de salons publics. public.beta = Notez que les versions bêta du jeu ne peuvent pas créer de salons publics.
uiscale.reset = L'échelle de l'interface a été modifiée.\nAppuyez sur "OK" pour confirmer.\n[scarlet]Rétablissement des anciens paramètres et fermeture du jeu dans [accent] {0}[] secondes... uiscale.reset = L'échelle de l'interface a été modifiée.\nAppuyez sur "OK" pour confirmer.\n[scarlet]Rétablissement des anciens paramètres et fermeture du jeu dans [accent] {0}[] secondes...
uiscale.cancel = Annuler & Quitter uiscale.cancel = Annuler & Quitter
@@ -1154,8 +1161,8 @@ keybind.select.name = Sélectionner/Tirer
keybind.diagonal_placement.name = Placement en diagonale keybind.diagonal_placement.name = Placement en diagonale
keybind.pick.name = Choisir un bloc keybind.pick.name = Choisir un bloc
keybind.break_block.name = Supprimer un bloc keybind.break_block.name = Supprimer un bloc
keybind.select_all_units = Sélectionner toutes les Unités keybind.select_all_units.name = Sélectionner toutes les Unités
keybind.select_all_unit_factories = Sélectionner toutes les Usines d'Unités keybind.select_all_unit_factories.name = Sélectionner toutes les Usines d'Unités
keybind.deselect.name = Désélectionner keybind.deselect.name = Désélectionner
keybind.pickupCargo.name = Prendre un Chargement keybind.pickupCargo.name = Prendre un Chargement
keybind.dropCargo.name = Lâcher un Chargement keybind.dropCargo.name = Lâcher un Chargement
@@ -2228,6 +2235,7 @@ lst.flushmessage = Affiche un message sur l'écran depuis la mémoire tampon de
lst.cutscene = Manipule la caméra du joueur. lst.cutscene = Manipule la caméra du joueur.
lst.setflag = Définit un drapeau global qui peut être lu par tous les processeurs. lst.setflag = Définit un drapeau global qui peut être lu par tous les processeurs.
lst.getflag = Vérifie si un drapeau global est présent. lst.getflag = Vérifie si un drapeau global est présent.
lst.setprop = Sets a property of a unit or building.
logic.nounitbuild = [red]Les unités contrôlées par des processeurs ne peuvent pas construire ici. logic.nounitbuild = [red]Les unités contrôlées par des processeurs ne peuvent pas construire ici.

View File

@@ -1,6 +1,6 @@
#A fordításban közreműködött: Vajda Simon, Polgár Sándor és Erdélyi Nimród #A fordításban közreműködött: Vajda Simon, Polgár Sándor, Erdélyi Nimród és Halász Gergő
credits.text = Készítette: [royal]Anuken[] - [sky]anukendev@gmail.com[] credits.text = Készítette: [royal]Anuken[] - [sky]anukendev@gmail.com[]
credits = Credits credits = Creditek
contributors = Fordítok és készítők contributors = Fordítok és készítők
discord = Csatlakozz a Mindustry Discord szerverhez! discord = Csatlakozz a Mindustry Discord szerverhez!
link.discord.description = Az eredeti Mindustry Discord chatszoba link.discord.description = Az eredeti Mindustry Discord chatszoba
@@ -15,10 +15,10 @@ link.f-droid.description = F-Droid katalógus listázás
link.wiki.description = Hivatalos Mindustry wiki link.wiki.description = Hivatalos Mindustry wiki
link.suggestions.description = Új funkciók ajánlása link.suggestions.description = Új funkciók ajánlása
link.bug.description = Találtál szoftver hibá-t? Jelentsd itt link.bug.description = Találtál szoftver hibá-t? Jelentsd itt
linkopen = This server has sent you a link. Are you sure you want to open it?\n\n[sky]{0} linkopen = Ez a szerber egy linket küldött neked. Biztos vagy benne, hogy megnyitod?\n\n[sky]{0}
linkfail = Nem sikerült megnyitni a linket!\nAz URL a vágólapra lett másolva. linkfail = Nem sikerült megnyitni a linket!\nAz URL a vágólapra lett másolva.
screenshot = Képernyőkép mentve ide: {0} screenshot = Képernyőkép mentve ide: {0}
screenshot.invalid = Túl nagy a térkép, nincsen elég memória a képernyőképhez. screenshot.invalid = Túl nagy a map, nincsen elég memória a képernyőképhez.
gameover = Játék vége gameover = Játék vége
gameover.disconnect = Kapcsolat megszakadt gameover.disconnect = Kapcsolat megszakadt
gameover.pvp = A[accent] {0}[] csapat nyert! gameover.pvp = A[accent] {0}[] csapat nyert!
@@ -41,22 +41,22 @@ be.updating = Frissítés...
be.ignore = Most nem be.ignore = Most nem
be.noupdates = Nem találtunk frissítést. be.noupdates = Nem találtunk frissítést.
be.check = Frissítések keresése. be.check = Frissítések keresése.
mods.browser = Mod Browser mods.browser = Mod választó
mods.browser.selected = Mod kiválasztása mods.browser.selected = Mod kiválasztása
mods.browser.add = Letöltés mods.browser.add = Letöltés
mods.browser.reinstall = Reinstall mods.browser.reinstall = Reinstall
mods.browser.view-releases = View Releases mods.browser.view-releases = Kiadások megtekintése
mods.browser.noreleases = [scarlet]No Releases Found\n[accent]Couldn't find any releases for this mod. Check if the mod's repository has any releases published. mods.browser.noreleases = [scarlet]Nincsenek kiadások.\n[accent]Nem lehet kiadásokat találni ehhez a modhoz. Nézd meg a repository-ját, hogy vannak -e kiadásai.
mods.browser.latest = <Latest> mods.browser.latest = <Latest>
mods.browser.releases = Releases mods.browser.releases = Kiadások
mods.github.open = Megtekintés mods.github.open = Megtekintés
mods.github.open-release = Release Page mods.github.open-release = Kiadások oldala
mods.browser.sortdate = Rendezés dátum szerint mods.browser.sortdate = Rendezés dátum szerint
mods.browser.sortstars = Rendezés értékelés szerint mods.browser.sortstars = Rendezés értékelés szerint
schematic = Schematic schematic = Schematic
schematic.add = Schematic mentése... schematic.add = Schematic mentése...
schematics = Schematicok schematics = Schematic-ok
schematic.replace = Már van ilyen nevű schematic. Lecseréled? schematic.replace = Már van ilyen nevű schematic. Lecseréled?
schematic.exists = Már van ilyen nevű schematic. schematic.exists = Már van ilyen nevű schematic.
schematic.import = Schematic importálása... schematic.import = Schematic importálása...
@@ -72,23 +72,23 @@ schematic.delete.confirm = Ez a Schematic törölve lesz.
schematic.rename = Schematic átnevezése schematic.rename = Schematic átnevezése
schematic.info = {0}x{1}, {2} blokk schematic.info = {0}x{1}, {2} blokk
schematic.disabled = [scarlet]Schematicok letiltva[]\nNem használhat Schematicot ezen a [accent]mapon[] vagy [accent] szerveren. schematic.disabled = [scarlet]Schematicok letiltva[]\nNem használhat Schematicot ezen a [accent]mapon[] vagy [accent] szerveren.
schematic.tags = Tags: schematic.tags = Címkék:
schematic.edittags = Edit Tags schematic.edittags = Címkék szerkesztése
schematic.addtag = Add Tag schematic.addtag = Címke hozzáadása
schematic.texttag = Text Tag schematic.texttag = Következő címke
schematic.icontag = Icon Tag schematic.icontag = Icon címke
schematic.renametag = Rename Tag schematic.renametag = Címke átnevezése
schematic.tagdelconfirm = Delete this tag completely? schematic.tagdelconfirm = Teljesen törlöd ezt a címkét?
schematic.tagexists = That tag already exists. schematic.tagexists = Ez a címke már létezik.
stats = Statisztika stats = Statisztika
stats.wave = Waves Defeated stats.wave = Hullámok legyőzve
stats.unitsCreated = Units Created stats.unitsCreated = Egységek létrehozva
stats.enemiesDestroyed = Enemies Destroyed stats.enemiesDestroyed = Ellenségek megsemmisítve
stats.built = Buildings Built stats.built = Építmények építve
stats.destroyed = Buildings Destroyed stats.destroyed = Építmények elpusztítva
stats.deconstructed = Buildings Deconstructed stats.deconstructed = Építmények lebontva
stats.playtime = Time Played stats.playtime = Játszott idő
globalitems = [accent]Összes nyersanyag globalitems = [accent]Összes nyersanyag
map.delete = Biztosan akkarod törlölni a "[accent]{0}[]" mapot? map.delete = Biztosan akkarod törlölni a "[accent]{0}[]" mapot?
@@ -98,7 +98,7 @@ level.mode = Játékmód:
coreattack = < A mag támadás alatt van! > coreattack = < A mag támadás alatt van! >
nearpoint = [[ [scarlet]AZONNAL HAGYD EL A LEDOBÁSI PONTOT[] ]\nveszélyes zóna nearpoint = [[ [scarlet]AZONNAL HAGYD EL A LEDOBÁSI PONTOT[] ]\nveszélyes zóna
database = Mag adatbázis database = Mag adatbázis
database.button = Database database.button = Adatbázis
savegame = Játék mentése savegame = Játék mentése
loadgame = Játék betöltése loadgame = Játék betöltése
joingame = Csatlakozás játékhoz joingame = Csatlakozás játékhoz
@@ -112,7 +112,7 @@ position = Pozíció
close = Bezárás close = Bezárás
website = Weboldal website = Weboldal
quit = Kilépés quit = Kilépés
save.quit = Mentés & Kilépés save.quit = Mentés és kilépés
maps = Mapok maps = Mapok
maps.browse = Mapok keresése maps.browse = Mapok keresése
continue = Folytatás continue = Folytatás
@@ -126,36 +126,40 @@ uploadingpreviewfile = Előnézet feltöltése
committingchanges = Változások mentése committingchanges = Változások mentése
done = Kész done = Kész
feature.unsupported = Az eszköz nem támogatja ezt a funkciót. feature.unsupported = Az eszköz nem támogatja ezt a funkciót.
mods.initfailed = [red]⚠[] The previous Mindustry instance failed to initialize. This was likely caused by misbehaving mods.\n\nTo prevent a crash loop, [red]all mods have been disabled.[] mods.initfailed = [red]⚠[] Az előző Mindustry munkamenet nem tudott inícializálódni. Ez valószínű egy rosszúl működő mod miatt történt.\n\nA crash loop elkerülése érdekében, [red]minden mod le lett tiltva.[]
mods = Modok mods = Modok
mods.none = [lightgray]Nincsen mod! mods.none = [lightgray]Nincsen mod!
mods.guide = Mod készítési útmutató mods.guide = Mod készítési útmutató
mods.report = Hiba jelentése mods.report = Hiba jelentése
mods.openfolder = Megnyitás mappából mods.openfolder = Megnyitás mappából
mods.viewcontent = View Content mods.viewcontent = Tartalom megtekintése
mods.reload = Újratöltés mods.reload = Újratöltés
mods.reloadexit = Indítsd újra a játékot, hogy betöltődjenek a modok. mods.reloadexit = Indítsd újra a játékot, hogy betöltődjenek a modok.
mod.installed = [[Installed] mod.installed = [[Installed]
mod.display = [gray]Mod:[orange] {0} mod.display = [gray]Mod:[orange] {0}
mod.enabled = [lightgray]Aktív mod.enabled = [lightgray]Aktív
mod.disabled = [scarlet]Inaktív mod.disabled = [scarlet]Inaktív
mod.multiplayer.compatible = [gray]Multiplayer Compatible mod.multiplayer.compatible = [gray]Többjátékos kompatibilis
mod.disable = Letiltás mod.disable = Letiltás
mod.content = Tartalom: mod.content = Tartalom:
mod.delete.error = Nem lehet törölni a Modot. Lehet, hogy egy másik folyamat használja. mod.delete.error = Nem lehet törölni a Modot. Lehet, hogy egy másik folyamat használja.
mod.incompatiblegame = [red]Outdated Game mod.incompatiblegame = [red]Elavúlt játék
mod.incompatiblemod = [red]Incompatible mod.incompatiblemod = [red]Nem kompatibilis
mod.blacklisted = [red]Unsupported mod.blacklisted = [red]Nem támogatott
mod.unmetdependencies = [red]Unmet Dependencies mod.unmetdependencies = [red]Összeférhetetlen függőségek
mod.erroredcontent = [scarlet]Tartalom hiba mod.erroredcontent = [scarlet]Tartalom hiba
mod.requiresversion.details = Requires game version: [accent]{0}[]\nYour game is outdated. This mod requires a newer version of the game (possibly a beta/alpha release) to function. mod.circulardependencies = [red]Körkörös függőségek
mod.outdatedv7.details = This mod is incompatible with the latest version of the game. The author must update it, and add [accent]minGameVersion: 136[] to its [accent]mod.json[] file. mod.incompletedependencies = [red]Befejezetlen függőségek
mod.blacklisted.details = This mod has been manually blacklisted for causing crashes or other issues with this version of the game. Do not use it. mod.requiresversion.details = [accent]{0}[] játékverzió szükséges.\nA letöltésed elavúlt. Ez a mod egy újabb verziót kíván (velószínű, egy beta/alpha kiadást) a működéshez.
mod.missingdependencies.details = This mod is missing dependencies: {0} mod.outdatedv7.details = Ez a mod nem kompatibilis a játék legújabb berziójával. A készítőjének frissítenie kell azt, és hozzá kell adnia a [accent]minGameVersion: 136[] -t a [accent]mod.json[] fájlhoz.
mod.erroredcontent.details = This game caused errors when loading. Ask the mod author to fix them. mod.blacklisted.details = Ez a mod manuálisan a feketelistára került, mert a játék összeomlott tőle, vagy más probléma miatt. Ne használd!
mod.requiresversion = Requires game version: [red]{0} mod.missingdependencies.details = Ez a mod hiányol függőségeket: {0}
mod.erroredcontent.details = Ez a játék hibákat okozott betöltésnél. Kérd meg a mod készítőjét hogy kijavítsa őket!
mod.circulardependencies.details = Ennek a modnak egymástól függő föggőségai vannak.
mod.incompletedependencies.details = Ez a mod nem tudott betölteni hiányzó, vagy rossz függőségek miatt: {0}.
mod.requiresversion = [red]{0}[] játékverzió szükséges.
mod.errors = Hiba történt a tartalom betöltése közben. mod.errors = Hiba történt a tartalom betöltése közben.
mod.noerrorplay = [scarlet]Vannak hibás Modok.[] Kapcsold ki vagy javítsd ki őket a játék előtt. mod.noerrorplay = [scarlet]Vannak hibás Modok.[] Kapcsold ki, vagy javítsd ki őket a játék előtt.
mod.nowdisabled = [scarlet]A '{0}' Modnak nincsen megfelelő függősége:[accent] {1}\n[lightgray]Ezeket előbb le kell tölteni.\nEz a Mod automatikusan törölve lesz. mod.nowdisabled = [scarlet]A '{0}' Modnak nincsen megfelelő függősége:[accent] {1}\n[lightgray]Ezeket előbb le kell tölteni.\nEz a Mod automatikusan törölve lesz.
mod.enable = Engedélyezés mod.enable = Engedélyezés
mod.requiresrestart = A játék kilép a módosítások alkalmazásához. mod.requiresrestart = A játék kilép a módosítások alkalmazásához.
@@ -164,7 +168,7 @@ mod.import = Mod importálása
mod.import.file = Fájl importálása mod.import.file = Fájl importálása
mod.import.github = GitHub Mod importálása mod.import.github = GitHub Mod importálása
mod.jarwarn = [scarlet]A JAR modok eredendően nem biztonságosak.[]\nGyőződj meg arról, hogy ezt a modot megbízható forrásból importálod! mod.jarwarn = [scarlet]A JAR modok eredendően nem biztonságosak.[]\nGyőződj meg arról, hogy ezt a modot megbízható forrásból importálod!
mod.item.remove = Ez az elem része a [accent] '{0}'[] Modnak. A törléshez távolítsd el a Modot. mod.item.remove = Ez az elem része a(z) [accent] '{0}'[] Modnak. A törléshez távolítsd el a Modot.
mod.remove.confirm = Ez a Mod törölve lesz. mod.remove.confirm = Ez a Mod törölve lesz.
mod.author = [LIGHT_GRAY]Készítő:[] {0} mod.author = [LIGHT_GRAY]Készítő:[] {0}
mod.missing = Ez a mentés nemrég törölt vagy frissített Modokat tartalmaz. Elképzelhető, hogy nem fog működni. Biztosan betöltöd?\n[lightgray]Modok:\n{0} mod.missing = Ez a mentés nemrég törölt vagy frissített Modokat tartalmaz. Elképzelhető, hogy nem fog működni. Biztosan betöltöd?\n[lightgray]Modok:\n{0}
@@ -181,14 +185,14 @@ launchcore = Mag kilövése
filename = Fájl név: filename = Fájl név:
unlocked = Új tartalom kinyitva! unlocked = Új tartalom kinyitva!
available = Új kutatás áll rendelkezésre! available = Új kutatás áll rendelkezésre!
unlock.incampaign = < Unlock in campaign for details > unlock.incampaign = < Oldd fel kampány módban a részletekért >
campaign.select = Select Starting Campaign campaign.select = Válassz kezdő kampányt!
campaign.none = [lightgray]Select a planet to start on.\nThis can be switched at any time. campaign.none = [lightgray]Válassz egy bolygót a kezdéshez.\nEzt bármikor megváltoztathatod.
campaign.erekir = Newer, more polished content. Mostly linear campaign progression.\n\nHigher quality maps and overall experience. campaign.erekir = Újabb, csiszoltabb tartalom. Általában lineáris kampány.\n\nMagasabb minőségű mapok és élmények.
campaign.serpulo = Older content; the classic experience. More open-ended.\n\nPotentially unbalanced maps and campaign mechanics. Less polished. campaign.serpulo = Régebbi tartalom. A klasszikus élmények. Nyíltabb végű.\n\nPotenciálisan kiegyensúlyozatlan mapok és kampány. Kevésbé csiszolt.
completed = [accent]Kész completed = [accent]Kész
techtree = Tech Tree techtree = Fejlődési fa
techtree.select = Tech Tree Selection techtree.select = Fejlődési fa kiválasztás
techtree.serpulo = Serpulo techtree.serpulo = Serpulo
techtree.erekir = Erekir techtree.erekir = Erekir
research.load = Betöltés research.load = Betöltés
@@ -234,7 +238,7 @@ hosts.none = [lightgray]Nincs helyi játék!
host.invalid = [scarlet]Nem sikerült csatlakozni. host.invalid = [scarlet]Nem sikerült csatlakozni.
servers.local = Helyi Szerverek servers.local = Helyi Szerverek
servers.local.steam = Open Games & Local Servers servers.local.steam = Nyitott játékok és helyi szerverek
servers.remote = Távoli Szerverek servers.remote = Távoli Szerverek
servers.global = Közösségi szerverek servers.global = Közösségi szerverek
@@ -250,8 +254,8 @@ trace.ip = IP: [accent]{0}
trace.id = Azonosító: [accent]{0} trace.id = Azonosító: [accent]{0}
trace.mobile = Mobil kliens: [accent]{0} trace.mobile = Mobil kliens: [accent]{0}
trace.modclient = Nem hivatalos kliens: [accent]{0} trace.modclient = Nem hivatalos kliens: [accent]{0}
trace.times.joined = Times Joined: [accent]{0} trace.times.joined = Csatlakotások száma: [accent]{0}
trace.times.kicked = Times Kicked: [accent]{0} trace.times.kicked = Kirúgások száma: [accent]{0}
invalidid = Érvénytelen kliens ID! Küldj hibajelentést. invalidid = Érvénytelen kliens ID! Küldj hibajelentést.
server.bans = Tiltások server.bans = Tiltások
server.bans.none = Nincsenek tiltott játékosok! server.bans.none = Nincsenek tiltott játékosok!
@@ -287,7 +291,7 @@ server.invalidport = Érvénytelen port!
server.error = [crimson]Nem sikerült megnyitni a szervert. server.error = [crimson]Nem sikerült megnyitni a szervert.
save.new = Új mentés save.new = Új mentés
save.overwrite = Biztosan felülírod\nezt a mentést? save.overwrite = Biztosan felülírod\nezt a mentést?
save.nocampaign = Individual save files from the campaign cannot be imported. save.nocampaign = Nem lehet importálni különálló kampány mentés fájlokat.
overwrite = Felülírás overwrite = Felülírás
save.none = Nem található mentés! save.none = Nem található mentés!
savefail = Nem sikerült menteni! savefail = Nem sikerült menteni!
@@ -308,7 +312,7 @@ save.corrupted = Érvénytelen fájl!
empty = <üres> empty = <üres>
on = Be on = Be
off = Ki off = Ki
save.search = Search saved games... save.search = Keresés a mentett játékok között...
save.autosave = Automatikus mentés: {0} save.autosave = Automatikus mentés: {0}
save.map = Térkép: {0} save.map = Térkép: {0}
save.wave = Hullám: {0} save.wave = Hullám: {0}
@@ -324,17 +328,18 @@ ok = OK
open = Megnyitás open = Megnyitás
customize = Szabályok módosítása customize = Szabályok módosítása
cancel = Mégse cancel = Mégse
command = Command command = Parancs
command.mine = Mine command.mine = Bányászás
command.repair = Repair command.repair = Javítás
command.rebuild = Rebuild command.rebuild = Újraépítés
command.assist = Assist Player command.assist = Segítség játékosnak
command.move = Move command.move = Mozgás
command.boost = Boost-olás
openlink = Link megnyitása openlink = Link megnyitása
copylink = Link másolása copylink = Link másolása
back = Vissza back = Vissza
max = Max max = Max
objective = Map Objective objective = Map célja
crash.export = Összeomlási napló exportálása crash.export = Összeomlási napló exportálása
crash.none = Nem található összeomlási napló. crash.none = Nem található összeomlási napló.
crash.exported = Összeomlási napló exportálva. crash.exported = Összeomlási napló exportálva.
@@ -346,7 +351,7 @@ data.invalid = Érvénytelen adatok.
data.import.confirm = Külső adat importálása felülírja[scarlet] minden[] jelenlegi adatodat.\n[accent]Nem lehet visszavonni![]\n\nAmint kész az importálás, kilép a játék. data.import.confirm = Külső adat importálása felülírja[scarlet] minden[] jelenlegi adatodat.\n[accent]Nem lehet visszavonni![]\n\nAmint kész az importálás, kilép a játék.
quit.confirm = Biztos kilépsz? quit.confirm = Biztos kilépsz?
loading = [accent]Betöltés... loading = [accent]Betöltés...
downloading = [accent]Downloading... downloading = [accent]Letöltés...
saving = [accent]Mentés... saving = [accent]Mentés...
respawn = Nyomd meg a(z) [accent][[{0}][] gombot, hogy újraéledj a magban. respawn = Nyomd meg a(z) [accent][[{0}][] gombot, hogy újraéledj a magban.
cancelbuilding = Használd a(z) [accent][[{0}][] gombot, hogy töröld a tervrajzot. cancelbuilding = Használd a(z) [accent][[{0}][] gombot, hogy töröld a tervrajzot.
@@ -355,7 +360,7 @@ pausebuilding = Használd a(z) [accent][[{0}][] gombot, hogy megállítsd az ép
resumebuilding = Használd a(z) [scarlet][[{0}][] gombot, hogy folytasd az építkezést. resumebuilding = Használd a(z) [scarlet][[{0}][] gombot, hogy folytasd az építkezést.
enablebuilding = [scarlet][[{0}][] to enable building enablebuilding = [scarlet][[{0}][] to enable building
showui = A kezelőfelület elrejtve.\nNyomd meg a(z) [accent][[{0}][] gombot a megjelenítéséhez. showui = A kezelőfelület elrejtve.\nNyomd meg a(z) [accent][[{0}][] gombot a megjelenítéséhez.
commandmode.name = [accent]Command Mode commandmode.name = [accent]Parancs mód
commandmode.nounits = [no units] commandmode.nounits = [no units]
wave = [accent]{0}. hullám wave = [accent]{0}. hullám
wave.cap = [accent]{0}./{1} hullám wave.cap = [accent]{0}./{1} hullám
@@ -386,17 +391,17 @@ map.publish.confirm = Biztos, hogy közzéteszed ezt a mapot?\n\n[lightgray] Gy
workshop.menu = Válaszd ki, mit szeretnél csinálni ezzel az itemmel. workshop.menu = Válaszd ki, mit szeretnél csinálni ezzel az itemmel.
workshop.info = Item Infó workshop.info = Item Infó
changelog = Változtatási napló (opcionális): changelog = Változtatási napló (opcionális):
updatedesc = Overwrite Title & Description updatedesc = Cím és leírás felülírása
eula = Steam EULA eula = Steam EULA
missing = Ezt az elemet törölték vagy áthelyezték.\n[lightgray] A workshop adatait automatikusan leválasztották. missing = Ezt az elemet törölték vagy áthelyezték.\n[lightgray] A workshop adatait automatikusan leválasztották.
publishing = [accent]Publikálás... publishing = [accent]Publikálás...
publish.confirm = Biztosan közzéteszed?\n\n[lightgray] Győződj meg róla, hogy elfogadtad a Workshop EULA-t, különben az itemjeid nem jelennek meg! publish.confirm = Biztosan közzéteszed?\n\n[lightgray] Győződj meg róla, hogy elfogadtad a Workshop EULA-t, különben az itemjeid nem jelennek meg!
publish.error = Hiba az item publikálásakor: {0} publish.error = Hiba az item publikálásakor: {0}
steam.error = Nem sikerült inicializálni a Steam szolgáltatásokat.\nHiba: {0} steam.error = Nem sikerült inicializálni a Steam szolgáltatásokat.\nHiba: {0}
editor.planet = Planet: editor.planet = Bolygó:
editor.sector = Sector: editor.sector = Szektor:
editor.seed = Seed: editor.seed = Seed:
editor.cliffs = Walls To Cliffs editor.cliffs = Falak sziklákká
editor.brush = Méret editor.brush = Méret
editor.openin = Megnyitás a szerkesztőben editor.openin = Megnyitás a szerkesztőben
@@ -409,35 +414,35 @@ editor.nodescription = A mapnak rendelkeznie kell egy legalább 4 karakter hossz
editor.waves = Hullámok: editor.waves = Hullámok:
editor.rules = Szabályok: editor.rules = Szabályok:
editor.generation = generálás: editor.generation = generálás:
editor.objectives = Objectives editor.objectives = Célok
editor.ingame = Szerkesztés játékban editor.ingame = Szerkesztés játékban
editor.playtest = Playtest editor.playtest = Teszt játékban
editor.publish.workshop = Közzététel workshopon editor.publish.workshop = Közzététel workshopon
editor.newmap = Új Map editor.newmap = Új Map
editor.center = Ugrás középre editor.center = Ugrás középre
editor.search = Search maps... editor.search = Mapok keresése...
editor.filters = Filter Maps editor.filters = Mapok szűrése
editor.filters.mode = Gamemodes: editor.filters.mode = Játékmódok:
editor.filters.type = Map Type: editor.filters.type = Map típus:
editor.filters.search = Search In: editor.filters.search = Keresés ebben:
editor.filters.author = Author editor.filters.author = Készítő
editor.filters.description = Description editor.filters.description = Leírás
editor.shiftx = Shift X editor.shiftx = X eltolás
editor.shifty = Shift Y editor.shifty = Y eltolás
workshop = Workshop workshop = Workshop
waves.title = Hullámok waves.title = Hullámok
waves.remove = Eltávolítás waves.remove = Eltávolítás
waves.every = every waves.every = minden
waves.waves = hullámonként waves.waves = hullámonként
waves.health = health: {0}% waves.health = élet: {0}%
waves.perspawn = per spawn waves.perspawn = per spawn
waves.shields = pajzs/hullám waves.shields = pajzs/hullám
waves.to = - waves.to = -
waves.spawn = spawn: waves.spawn = spawn:
waves.spawn.all = <all> waves.spawn.all = <mind>
waves.spawn.select = Spawn Select waves.spawn.select = Kezdőhely kiválasztása
waves.spawn.none = [scarlet]no spawns found in map waves.spawn.none = [scarlet]Nem lehet kezdőhelyet találni
waves.max = max units waves.max = max egységek
waves.guardian = őrző waves.guardian = őrző
waves.preview = Előnézet waves.preview = Előnézet
waves.edit = Szerksztés... waves.edit = Szerksztés...
@@ -447,11 +452,11 @@ waves.load = Másolás a vágólapról
waves.invalid = Nem lehet beilleszteni a vágólapról. waves.invalid = Nem lehet beilleszteni a vágólapról.
waves.copied = Hullámok másolva. waves.copied = Hullámok másolva.
waves.none = Nincs ellenség megadva.\nAz üresen hagyott tervek automatikusan lecserélődnek az alapbeállításra. waves.none = Nincs ellenség megadva.\nAz üresen hagyott tervek automatikusan lecserélődnek az alapbeállításra.
waves.sort = Sort By waves.sort = Rendezési szempont
waves.sort.reverse = Reverse Sort waves.sort.reverse = Rendezés visszafelé
waves.sort.begin = Begin waves.sort.begin = Begin
waves.sort.health = Health waves.sort.health = Élet
waves.sort.type = Type waves.sort.type = Típus
waves.units.hide = Hide All waves.units.hide = Hide All
waves.units.show = Show All waves.units.show = Show All
@@ -463,10 +468,10 @@ wavemode.health = életpontok
editor.default = [lightgray]<Alapbeállítás> editor.default = [lightgray]<Alapbeállítás>
details = Részletek... details = Részletek...
edit = Szerkesztés... edit = Szerkesztés...
variables = Vars variables = Változók
editor.name = Név: editor.name = Név:
editor.spawn = Spawn Unit editor.spawn = Egység megidézése
editor.removeunit = Remove Unit editor.removeunit = Egység eltávolítása
editor.teams = Csapatok editor.teams = Csapatok
editor.errorload = Hiba a fájl betöltése közben. editor.errorload = Hiba a fájl betöltése közben.
editor.errorsave = Hiba a fájl mentése közben. editor.errorsave = Hiba a fájl mentése közben.
@@ -477,12 +482,12 @@ editor.errorheader = Ez a map fájl vagy érvénytelen vagy sérült.
editor.errorname = A Mapnak nincs neve. Mentést próbálsz betölteni? editor.errorname = A Mapnak nincs neve. Mentést próbálsz betölteni?
editor.update = Frissítés editor.update = Frissítés
editor.randomize = Véletlenszerű editor.randomize = Véletlenszerű
editor.moveup = Move Up editor.moveup = Mozgás fel
editor.movedown = Move Down editor.movedown = Mozgás le
editor.copy = Copy editor.copy = Másolás
editor.apply = Alkalmazás editor.apply = Alkalmazás
editor.generate = Haladó funkciók editor.generate = Haladó funkciók
editor.sectorgenerate = Sector Generate editor.sectorgenerate = Szektor generálása
editor.resize = Átméretezés editor.resize = Átméretezés
editor.loadmap = Map betöltése editor.loadmap = Map betöltése
editor.savemap = Mentés editor.savemap = Mentés
@@ -526,8 +531,8 @@ toolmode.fillteams = Fill Teams
toolmode.fillteams.description = Fill teams instead of blocks. toolmode.fillteams.description = Fill teams instead of blocks.
toolmode.drawteams = Draw Teams toolmode.drawteams = Draw Teams
toolmode.drawteams.description = Draw teams instead of blocks. toolmode.drawteams.description = Draw teams instead of blocks.
toolmode.underliquid = Under Liquids toolmode.underliquid = Folyadékok alá
toolmode.underliquid.description = Draw floors under liquid tiles. toolmode.underliquid.description = Padlók folyadék blokkok alá rajzolása.
filters.empty = [lightgray]Még nincs filter! Adj hozzá egyet a lenti gombra kattintva! filters.empty = [lightgray]Még nincs filter! Adj hozzá egyet a lenti gombra kattintva!
filter.distort = Distort filter.distort = Distort
@@ -973,6 +978,8 @@ bullet.splashdamage = [stat]{0}[lightgray] területi sebzés ~[stat] {1}[lightgr
bullet.incendiary = [stat]gyújtó bullet.incendiary = [stat]gyújtó
bullet.homing = [stat]nyomkövető bullet.homing = [stat]nyomkövető
bullet.armorpierce = [stat]armor piercing bullet.armorpierce = [stat]armor piercing
bullet.suppression = [stat]{0} sec[lightgray] repair suppression ~ [stat]{1}[lightgray] tiles
bullet.interval = [stat]{0}/sec[lightgray] interval bullets:
bullet.frags = [stat]{0}[lightgray]x frag bullets: bullet.frags = [stat]{0}[lightgray]x frag bullets:
bullet.lightning = [stat]{0}[lightgray]x lightning ~ [stat]{1}[lightgray] damage bullet.lightning = [stat]{0}[lightgray]x lightning ~ [stat]{1}[lightgray] damage
bullet.buildingdamage = [stat]{0}%[lightgray] épület sebzés bullet.buildingdamage = [stat]{0}%[lightgray] épület sebzés
@@ -1086,8 +1093,8 @@ setting.bridgeopacity.name = Híd átlátszatlansága
setting.playerchat.name = Játékos szóbuborékok megjelenítése setting.playerchat.name = Játékos szóbuborékok megjelenítése
setting.showweather.name = Időjárás grafika megjelenítése setting.showweather.name = Időjárás grafika megjelenítése
setting.hidedisplays.name = Hide Logic Displays setting.hidedisplays.name = Hide Logic Displays
public.confirm = Szeretnéd a játékot nyilvánossá tenni?\n[accent]Bárki beléphet a játékaidba.\n[lightgray]Ezt később megváltoztathatod a Beállítások->Játék->Nyilvános játék láthatósága menüpontban. steam.friendsonly = Friends Only
public.confirm.really = Ha a barátaiddal szeretnél játszani, használd a [green]Barátok meghívása[] funkciót [scarlet]Nyilvános szerver[] helyett!\nBiztosan szeretnéd, hogy a játékod [scarlet]nyilvános[] legyen? steam.friendsonly.tooltip = Whether only Steam friends will be able to join your game.\nUnchecking this box will make your game public - anyone can join.
public.beta = Ne feledd, hogy a játék béta verziójában nem tudsz nyilvános szobát nyitni. public.beta = Ne feledd, hogy a játék béta verziójában nem tudsz nyilvános szobát nyitni.
uiscale.reset = Az UI mérete megváltozott.\nAz "OK" gombbal megerősítheted ezt a méretet.\n[scarlet]Visszavonás és kilépés [accent] {0}[] másodperc múlva... uiscale.reset = Az UI mérete megváltozott.\nAz "OK" gombbal megerősítheted ezt a méretet.\n[scarlet]Visszavonás és kilépés [accent] {0}[] másodperc múlva...
uiscale.cancel = Mégse és Kilépés uiscale.cancel = Mégse és Kilépés
@@ -1139,8 +1146,8 @@ keybind.select.name = Kiválasztás/Lövés
keybind.diagonal_placement.name = Átlós elhelyezés keybind.diagonal_placement.name = Átlós elhelyezés
keybind.pick.name = Blokk másolása keybind.pick.name = Blokk másolása
keybind.break_block.name = Blokk törlése keybind.break_block.name = Blokk törlése
keybind.select_all_units = Select All Units keybind.select_all_units.name = Select All Units
keybind.select_all_unit_factories = Select All Unit Factories keybind.select_all_unit_factories.name = Select All Unit Factories
keybind.deselect.name = Blokk választás törlése keybind.deselect.name = Blokk választás törlése
keybind.pickupCargo.name = Rakomány felvétele keybind.pickupCargo.name = Rakomány felvétele
keybind.dropCargo.name = Rakomány lerakása keybind.dropCargo.name = Rakomány lerakása
@@ -2193,6 +2200,7 @@ lst.flushmessage = Display a message on the screen from the text buffer.\nWill w
lst.cutscene = Manipulate the player camera. lst.cutscene = Manipulate the player camera.
lst.setflag = Set a global flag that can be read by all processors. lst.setflag = Set a global flag that can be read by all processors.
lst.getflag = Check if a global flag is set. lst.getflag = Check if a global flag is set.
lst.setprop = Sets a property of a unit or building.
logic.nounitbuild = [red]Unit building logic is not allowed here. logic.nounitbuild = [red]Unit building logic is not allowed here.
lenum.type = Type of building/unit.\ne.g. for any router, this will return [accent]@router[].\nNot a string. lenum.type = Type of building/unit.\ne.g. for any router, this will return [accent]@router[].\nNot a string.
lenum.shoot = Shoot at a position. lenum.shoot = Shoot at a position.

View File

@@ -149,11 +149,15 @@ mod.incompatiblemod = [red]Incompatible
mod.blacklisted = [red]Unsupported mod.blacklisted = [red]Unsupported
mod.unmetdependencies = [red]Unmet Dependencies mod.unmetdependencies = [red]Unmet Dependencies
mod.erroredcontent = [scarlet]Konten Mengalami Kesalahan mod.erroredcontent = [scarlet]Konten Mengalami Kesalahan
mod.circulardependencies = [red]Circular Dependencies
mod.incompletedependencies = [red]Incomplete Dependencies
mod.requiresversion.details = Requires game version: [accent]{0}[]\nYour game is outdated. This mod requires a newer version of the game (possibly a beta/alpha release) to function. mod.requiresversion.details = Requires game version: [accent]{0}[]\nYour game is outdated. This mod requires a newer version of the game (possibly a beta/alpha release) to function.
mod.outdatedv7.details = This mod is incompatible with the latest version of the game. The author must update it, and add [accent]minGameVersion: 136[] to its [accent]mod.json[] file. mod.outdatedv7.details = This mod is incompatible with the latest version of the game. The author must update it, and add [accent]minGameVersion: 136[] to its [accent]mod.json[] file.
mod.blacklisted.details = This mod has been manually blacklisted for causing crashes or other issues with this version of the game. Do not use it. mod.blacklisted.details = This mod has been manually blacklisted for causing crashes or other issues with this version of the game. Do not use it.
mod.missingdependencies.details = This mod is missing dependencies: {0} mod.missingdependencies.details = This mod is missing dependencies: {0}
mod.erroredcontent.details = This game caused errors when loading. Ask the mod author to fix them. mod.erroredcontent.details = This game caused errors when loading. Ask the mod author to fix them.
mod.circulardependencies.details = This mod has dependencies that depends on each other.
mod.incompletedependencies.details = This mod is unable to be loaded due to invalid or missing dependencies: {0}.
mod.requiresversion = Requires game version: [red]{0} mod.requiresversion = Requires game version: [red]{0}
mod.errors = Terjadi kesalahan saat memuat konten. mod.errors = Terjadi kesalahan saat memuat konten.
mod.noerrorplay = [scarlet]Anda memiliki mod dengan suatu kesalahan.[] Nonaktifkan mod yang bersangkutan atau perbaiki kesalahan tersebut sebelum bermain. mod.noerrorplay = [scarlet]Anda memiliki mod dengan suatu kesalahan.[] Nonaktifkan mod yang bersangkutan atau perbaiki kesalahan tersebut sebelum bermain.
@@ -331,6 +335,7 @@ command.repair = Perbaiki
command.rebuild = Bangun Kembali command.rebuild = Bangun Kembali
command.assist = Bantu Pemain command.assist = Bantu Pemain
command.move = Maju command.move = Maju
command.boost = Boost
openlink = Buka Tautan openlink = Buka Tautan
copylink = Salin Tautan copylink = Salin Tautan
back = Kembali back = Kembali
@@ -984,6 +989,8 @@ bullet.splashdamage = [stat]{0}[lightgray] kekuatan percikan~[stat] {1}[lightgra
bullet.incendiary = [stat]membakar bullet.incendiary = [stat]membakar
bullet.homing = [stat]mengejar bullet.homing = [stat]mengejar
bullet.armorpierce = [stat]menembus baju besi bullet.armorpierce = [stat]menembus baju besi
bullet.suppression = [stat]{0} sec[lightgray] repair suppression ~ [stat]{1}[lightgray] tiles
bullet.interval = [stat]{0}/sec[lightgray] interval bullets:
bullet.frags = [stat]{0}[lightgray]x pecahan: bullet.frags = [stat]{0}[lightgray]x pecahan:
bullet.lightning = [stat]{0}[lightgray]x petir ~ [stat]{1}[lightgray] kerusakan bullet.lightning = [stat]{0}[lightgray]x petir ~ [stat]{1}[lightgray] kerusakan
bullet.buildingdamage = [stat]{0}%[lightgray] kerusakan bangunan bullet.buildingdamage = [stat]{0}%[lightgray] kerusakan bangunan
@@ -1097,8 +1104,8 @@ setting.bridgeopacity.name = Jelas-Beningnya Jembatan
setting.playerchat.name = Tunjukkan Pesan dalam Permainan setting.playerchat.name = Tunjukkan Pesan dalam Permainan
setting.showweather.name = Perlihatkan Cuaca setting.showweather.name = Perlihatkan Cuaca
setting.hidedisplays.name = Sembunyikan Tampilan Logika setting.hidedisplays.name = Sembunyikan Tampilan Logika
public.confirm = Apakah kamu ingin mempublikasi permainanmu?\n[accent]Siapa saja bisa masuk ke permainanmu.\n[lightgray]Ini bisa diganti di Peraturan->Permainan->Visibilitas Game Publik. steam.friendsonly = Friends Only
public.confirm.really = Jika kamu ingin bermain dengan temanmu, gunakan [green]Undang Teman[] daripada [scarlet]server publik[]!\nApakah kamu yakin ingin membuat permainanmu [scarlet]publik[]? steam.friendsonly.tooltip = Whether only Steam friends will be able to join your game.\nUnchecking this box will make your game public - anyone can join.
public.beta = Ingat bahwa game versi beta tidak dapat membuat lobi publik. public.beta = Ingat bahwa game versi beta tidak dapat membuat lobi publik.
uiscale.reset = Skala UI telah diubah.\nTekan "OK" untuk mengonfirmasi.\n[scarlet]Kembali dan keluar di[accent] {0}[] pengaturan... uiscale.reset = Skala UI telah diubah.\nTekan "OK" untuk mengonfirmasi.\n[scarlet]Kembali dan keluar di[accent] {0}[] pengaturan...
uiscale.cancel = Batal & Keluar uiscale.cancel = Batal & Keluar
@@ -1150,8 +1157,8 @@ keybind.select.name = Pilih/Tembak
keybind.diagonal_placement.name = Penaruhan Diagonal keybind.diagonal_placement.name = Penaruhan Diagonal
keybind.pick.name = Memilih Blok keybind.pick.name = Memilih Blok
keybind.break_block.name = Menghancurkan Blok keybind.break_block.name = Menghancurkan Blok
keybind.select_all_units = Select All Units keybind.select_all_units.name = Select All Units
keybind.select_all_unit_factories = Select All Unit Factories keybind.select_all_unit_factories.name = Select All Unit Factories
keybind.deselect.name = Batal Memilih keybind.deselect.name = Batal Memilih
keybind.pickupCargo.name = Angkat Muatan keybind.pickupCargo.name = Angkat Muatan
keybind.dropCargo.name = Turunkan Muatan keybind.dropCargo.name = Turunkan Muatan
@@ -2220,6 +2227,7 @@ lst.flushmessage = Tampilkan sebuah pesan di layar dari antrian teks.\nAkan menu
lst.cutscene = Mengendalikan kamera pemain. lst.cutscene = Mengendalikan kamera pemain.
lst.setflag = Menentukan global flag yang dapat dibaca oleh semua prosesor. lst.setflag = Menentukan global flag yang dapat dibaca oleh semua prosesor.
lst.getflag = Periksa apakah ada global flag yang ditentukan. lst.getflag = Periksa apakah ada global flag yang ditentukan.
lst.setprop = Sets a property of a unit or building.
logic.nounitbuild = [red]Logika unit membangun tidak diperbolehkan di sini. logic.nounitbuild = [red]Logika unit membangun tidak diperbolehkan di sini.

View File

@@ -147,11 +147,15 @@ mod.incompatiblemod = [red]Incompatible
mod.blacklisted = [red]Unsupported mod.blacklisted = [red]Unsupported
mod.unmetdependencies = [red]Unmet Dependencies mod.unmetdependencies = [red]Unmet Dependencies
mod.erroredcontent = [scarlet]Errori di Contenuto mod.erroredcontent = [scarlet]Errori di Contenuto
mod.requiresversion.details = Requires game version: [accent]{0}[]\nYour game is outdated. This mod requires a newer version of the game (possibly a beta/alpha release) to function. mod.circulardependencies = [red]Circular Dependencies
mod.incompletedependencies = [red]Incomplete Dependencies
mod.requiresversion.details = Richiede la versione del gioco: [accent]{0}[]\nIl tuo gioco è obsoleto. Questa mod richiede una versione più recente del gioco (possibilmente una versione beta/alpha) per funzionare.
mod.outdatedv7.details = This mod is incompatible with the latest version of the game. The author must update it, and add [accent]minGameVersion: 136[] to its [accent]mod.json[] file. mod.outdatedv7.details = This mod is incompatible with the latest version of the game. The author must update it, and add [accent]minGameVersion: 136[] to its [accent]mod.json[] file.
mod.blacklisted.details = This mod has been manually blacklisted for causing crashes or other issues with this version of the game. Do not use it. mod.blacklisted.details = This mod has been manually blacklisted for causing crashes or other issues with this version of the game. Do not use it.
mod.missingdependencies.details = This mod is missing dependencies: {0} mod.missingdependencies.details = This mod is missing dependencies: {0}
mod.erroredcontent.details = This game caused errors when loading. Ask the mod author to fix them. mod.erroredcontent.details = This game caused errors when loading. Ask the mod author to fix them.
mod.circulardependencies.details = This mod has dependencies that depends on each other.
mod.incompletedependencies.details = This mod is unable to be loaded due to invalid or missing dependencies: {0}.
mod.requiresversion = Requires game version: [red]{0} mod.requiresversion = Requires game version: [red]{0}
mod.errors = Si sono verificati degli errori durante il caricamento del contenuto. mod.errors = Si sono verificati degli errori durante il caricamento del contenuto.
mod.noerrorplay = [scarlet]Sono presenti delle mod con errori.[] Puoi disabilitare le mod affette oppure sistemarle prima di giocare. mod.noerrorplay = [scarlet]Sono presenti delle mod con errori.[] Puoi disabilitare le mod affette oppure sistemarle prima di giocare.
@@ -324,11 +328,12 @@ open = Apri
customize = Personalizza customize = Personalizza
cancel = Annulla cancel = Annulla
command = Comando command = Comando
command.mine = Mine command.mine = Mina
command.repair = Ripara command.repair = Ripara
command.rebuild = Ricostruisci command.rebuild = Ricostruisci
command.assist = Aiuta giocatore command.assist = Aiuta giocatore
command.move = Muovi command.move = Muovi
command.boost = Boost
openlink = Apri Link openlink = Apri Link
copylink = Copia link copylink = Copia link
back = Indietro back = Indietro
@@ -758,8 +763,8 @@ sector.windsweptIslands.description = Oltre la fascia costiera si trova questo r
sector.extractionOutpost.description = Un avamposto remoto, costruito dai nemici con l'obiettivo di lanciare risorse in altri settori.\n\nLa tecnologia di trasposto a settori-incrociati è essenziale per un ulteriore conquista. Distruggi la base. scopri la loro Rampa di Lancio. sector.extractionOutpost.description = Un avamposto remoto, costruito dai nemici con l'obiettivo di lanciare risorse in altri settori.\n\nLa tecnologia di trasposto a settori-incrociati è essenziale per un ulteriore conquista. Distruggi la base. scopri la loro Rampa di Lancio.
sector.impact0078.description = Qui giaciono i resti della nave da trasporto interstellare che fu la prima ad entrare in questo sistema.\n\nRecupera per quanto possibile dal relitto. Scopri qualsiasi tecnologia intatta. sector.impact0078.description = Qui giaciono i resti della nave da trasporto interstellare che fu la prima ad entrare in questo sistema.\n\nRecupera per quanto possibile dal relitto. Scopri qualsiasi tecnologia intatta.
sector.planetaryTerminal.description = Il bersaglio finale.\n\nQuesta base costiera contiene una struttura capace di lanciare Nuclei ai pianeti locali. È estremamente protetto.\n\nProduci unità navali. Elimina il nemico il più rapidamente possibile. Scopri la struttura di lancio. sector.planetaryTerminal.description = Il bersaglio finale.\n\nQuesta base costiera contiene una struttura capace di lanciare Nuclei ai pianeti locali. È estremamente protetto.\n\nProduci unità navali. Elimina il nemico il più rapidamente possibile. Scopri la struttura di lancio.
sector.coastline.description = Remnants of naval unit technology have been detected at this location. Repel the enemy attacks, capture this sector, and acquire the technology. sector.coastline.description = In questo settore sono stati rilevati resti di tecnologia di unità navali. Respingi gli attacchi nemici, cattura il settore e acquisisci la tecnologia.
sector.navalFortress.description = The enemy has established a base on a remote, naturally-fortified island. Destroy this outpost. Acquire their advanced naval craft technology, and research it. sector.navalFortress.description = Il nemico ha stabilito una base su un'isola remota e fortificata naturalmente. Distruggi questo avamposto. Acquisisci la loro tecnologia navale avanzata e fate ricerche.
sector.onset.name = The Onset sector.onset.name = The Onset
sector.aegis.name = Aegis sector.aegis.name = Aegis
sector.lake.name = Nome sector.lake.name = Nome
@@ -970,6 +975,8 @@ bullet.splashdamage = [stat]{0}[lightgray] danno ad area ~[stat] {1}[lightgray]
bullet.incendiary = [stat]incendiario bullet.incendiary = [stat]incendiario
bullet.homing = [stat]autoguidato bullet.homing = [stat]autoguidato
bullet.armorpierce = [stat]perforazione alle armature bullet.armorpierce = [stat]perforazione alle armature
bullet.suppression = [stat]{0} sec[lightgray] repair suppression ~ [stat]{1}[lightgray] tiles
bullet.interval = [stat]{0}/sec[lightgray] interval bullets:
bullet.frags = [stat]{0}[lightgray]x frammentazione: bullet.frags = [stat]{0}[lightgray]x frammentazione:
bullet.lightning = [stat]{0}[lightgray]x fulmine ~ [stat]{1}[lightgray] danno bullet.lightning = [stat]{0}[lightgray]x fulmine ~ [stat]{1}[lightgray] danno
bullet.buildingdamage = [stat]{0}%[lightgray] danno alle costruzioni bullet.buildingdamage = [stat]{0}%[lightgray] danno alle costruzioni
@@ -1012,7 +1019,7 @@ category.items = Oggetti
category.crafting = Produzione category.crafting = Produzione
category.function = Funzione category.function = Funzione
category.optional = Miglioramenti Opzionali category.optional = Miglioramenti Opzionali
setting.skipcoreanimation.name = Salta il lancio del nucleo/Animazionw setting.skipcoreanimation.name = Salta il lancio del nucleo/Animazione
setting.landscape.name = Visuale Orizontale setting.landscape.name = Visuale Orizontale
setting.shadows.name = Ombre setting.shadows.name = Ombre
setting.blockreplace.name = Suggerimento Blocchi Automatico setting.blockreplace.name = Suggerimento Blocchi Automatico
@@ -1083,8 +1090,8 @@ setting.bridgeopacity.name = Opacità Nastri e Condotti Sopraelevati
setting.playerchat.name = Mostra Chat setting.playerchat.name = Mostra Chat
setting.showweather.name = Mostra grafica del meteo setting.showweather.name = Mostra grafica del meteo
setting.hidedisplays.name = Nascondi display logici setting.hidedisplays.name = Nascondi display logici
public.confirm = Vuoi rendere la tua partita pubblica?\n[accent]Chiunque sarà in grado di accedere alle tue partite.\n[lightgray]Questo può essere modificato più tardi in Impostazioni->Gioco->Partite Pubbliche. steam.friendsonly = Friends Only
public.confirm.really = Se vuoi giocare con gli amici, usa [green]Invita Amico[] Al posto di un [scarlet]server pubblico[]!\nSicuro di voler rendere [scarlet]pubblica[] la tua partita? steam.friendsonly.tooltip = Whether only Steam friends will be able to join your game.\nUnchecking this box will make your game public - anyone can join.
public.beta = Nota che le versioni beta del gioco non possono creare lobby pubbliche. public.beta = Nota che le versioni beta del gioco non possono creare lobby pubbliche.
uiscale.reset = La scala dell'interfaccia utente è stata modificata.\nPremere 'OK' per confermare questa scala.\n[scarlet]Ripristina ed esci in [accent] {0}[] secondi... uiscale.reset = La scala dell'interfaccia utente è stata modificata.\nPremere 'OK' per confermare questa scala.\n[scarlet]Ripristina ed esci in [accent] {0}[] secondi...
uiscale.cancel = Annulla ed Esci uiscale.cancel = Annulla ed Esci
@@ -1136,8 +1143,8 @@ keybind.select.name = Seleziona/Spara
keybind.diagonal_placement.name = Posiziona Diagonalmente keybind.diagonal_placement.name = Posiziona Diagonalmente
keybind.pick.name = Scegli Blocco keybind.pick.name = Scegli Blocco
keybind.break_block.name = Rompi Blocco keybind.break_block.name = Rompi Blocco
keybind.select_all_units = Select All Units keybind.select_all_units.name = Select All Units
keybind.select_all_unit_factories = Select All Unit Factories keybind.select_all_unit_factories.name = Select All Unit Factories
keybind.deselect.name = Deseleziona keybind.deselect.name = Deseleziona
keybind.pickupCargo.name = Raccogli Carico keybind.pickupCargo.name = Raccogli Carico
keybind.dropCargo.name = Rilascia Carico keybind.dropCargo.name = Rilascia Carico
@@ -2137,31 +2144,31 @@ unit.omura.description = Utilizza un bullone sparatato grazie a due binari a sco
unit.alpha.description = Difende il nucleo Frammento dai nemici. Costruisce strutture. unit.alpha.description = Difende il nucleo Frammento dai nemici. Costruisce strutture.
unit.beta.description = Difende il nucleo Fondamento dai nemici. Costruisce strutture. unit.beta.description = Difende il nucleo Fondamento dai nemici. Costruisce strutture.
unit.gamma.description = Difende il nucleo Kernel dai nemici. Costruisce strutture. unit.gamma.description = Difende il nucleo Kernel dai nemici. Costruisce strutture.
unit.retusa.description = Fires homing torpedoes at nearby enemies. Repairs allied units. unit.retusa.description = Lancia siluri di puntamento contro i nemici vicini. Ripara le unità alleate.
unit.oxynoe.description = Fires structure-repairing streams of flame at nearby enemies. Targets nearby enemy projectiles with a point defense turret. unit.oxynoe.description = Spara flussi di fiamme che riparano le strutture ai nemici vicini. Bersaglia i proiettili nemici nelle vicinanze con una torretta di difesa.
unit.cyerce.description = Fires seeking cluster-missiles at enemies. Repairs allied units. unit.cyerce.description = Spara missili a grappolo contro i nemici. Ripara le unità alleate.
unit.aegires.description = Shocks all enemy units and structures that enter its energy field. Repairs all allies. unit.aegires.description = Scuote tutte le unità e le strutture nemiche che entrano nel suo campo energetico. Ripara tutti gli alleati.
unit.navanax.description = Fires explosive EMP projectiles, dealing significant damage to enemy power networks and repairing allied structures. Melts nearby enemies with 4 autonomous laser turrets. unit.navanax.description = Spara proiettili EMP esplosivi, infliggendo danni significativi alle reti elettriche nemiche e riparando le strutture alleate. Scioglie i nemici vicini con 4 torrette laser autonome.
unit.stell.description = Fires standard bullets at enemy targets. unit.stell.description = Spara proiettili standard contro i bersagli nemici.
unit.locus.description = Fires alternating bullets at enemy targets. unit.locus.description = Spara proiettili alternati contro i bersagli nemici.
unit.precept.description = Fires piercing cluster bullets at enemy targets. unit.precept.description = Spara proiettili a grappolo perforanti contro i bersagli nemici.
unit.vanquish.description = Fires large piercing splitting bullets at enemy targets. unit.vanquish.description = Spara grandi proiettili perforanti contro i bersagli nemici.
unit.conquer.description = Fires large piercing cascades of bullets at enemy targets. unit.conquer.description = Spara grandi cascate di proiettili perforanti contro i bersagli nemici.
unit.merui.description = Fires long-range artillery at enemy ground targets. Can step over most terrain. unit.merui.description = Spara con l'artiglieria a lungo raggio contro bersagli terrestri nemici. Può superare la maggior parte dei terreni.
unit.cleroi.description = Fires dual shells at enemy targets. Targets enemy projectiles with point defense turrets. Can step over most terrain. unit.cleroi.description = Spara proiettili doppi contro i bersagli nemici. Bersaglia i proiettili nemici con le torrette di difesa. Può superare la maggior parte dei terreni.
unit.anthicus.description = Fires long-range homing missiles at enemy targets. Can step over most terrain. unit.anthicus.description = Spara missili a lunga gittata contro i bersagli nemici. Può superare la maggior parte dei terreni.
unit.tecta.description = Fires homing plasma missiles at enemy targets. Protects itself with a directional shield. Can step over most terrain. unit.tecta.description = Spara missili al plasma a puntamento interno contro i bersagli nemici. Si protegge con uno scudo direzionale. Può superare la maggior parte dei terreni.
unit.collaris.description = Fires long-range fragmenting artillery at enemy targets. Can step over most terrain. unit.collaris.description = Spara con l'artiglieria a frammentazione a lungo raggio contro gli obiettivi nemici. Può superare la maggior parte dei terreni.
unit.elude.description = Fires pairs of homing bullets at enemy targets. Can float over bodies of liquid. unit.elude.description = Spara coppie di proiettili di puntamento contro i bersagli nemici. Può galleggiare su corpi liquidi.
unit.avert.description = Fires twisting pairs of bullets at enemy targets. unit.avert.description = Spara coppie di proiettili a spirale contro i bersagli nemici.
unit.obviate.description = Fires twisting pairs of lightning orbs at enemy targets. unit.obviate.description = Spara coppie di fulmini a spirale contro i bersagli nemici.
unit.quell.description = Fires long-range homing missiles at enemy targets. Suppresses enemy structure repair blocks. unit.quell.description = Spara missili di puntamento a lungo raggio contro gli obiettivi nemici. Sopprime i blocchi di riparazione delle strutture nemiche.
unit.disrupt.description = Fires long-range homing suppression missiles at enemy targets. Suppresses enemy structure repair blocks. unit.disrupt.description = Spara missili di soppressione a lungo raggio contro gli obiettivi nemici. Sopprime i blocchi di riparazione delle strutture nemiche.
unit.evoke.description = Builds structures to defend the Bastion core. Repairs structures with a beam. unit.evoke.description = Costruisce strutture per difendere il nucleo del Bastione. Ripara le strutture con un raggio.
unit.incite.description = Builds structures to defend the Citadel core. Repairs structures with a beam. unit.incite.description = Costruisce strutture per difendere il nucleo della Cittadella. Ripara le strutture con un raggio.
unit.emanate.description = Builds structures to defend the Acropolis core. Repairs structures with beams. unit.emanate.description = Costruisce strutture per difendere il nucleo dell'Acropoli. Ripara le strutture con le travi.
lst.read = Read a number from a linked memory cell. lst.read = Leggi un numero da una cella di memoria collegata.
lst.write = Write a number to a linked memory cell. lst.write = Scrivi un numero in una cella di memoria collegata.
lst.print = Add text to the print buffer.\nDoes not display anything until [accent]Print Flush[] is used. lst.print = Add text to the print buffer.\nDoes not display anything until [accent]Print Flush[] is used.
lst.draw = Add an operation to the drawing buffer.\nDoes not display anything until [accent]Draw Flush[] is used. lst.draw = Add an operation to the drawing buffer.\nDoes not display anything until [accent]Draw Flush[] is used.
lst.drawflush = Flush queued [accent]Draw[] operations to a display. lst.drawflush = Flush queued [accent]Draw[] operations to a display.
@@ -2195,6 +2202,7 @@ lst.flushmessage = Display a message on the screen from the text buffer.\nWill w
lst.cutscene = Manipulate the player camera. lst.cutscene = Manipulate the player camera.
lst.setflag = Set a global flag that can be read by all processors. lst.setflag = Set a global flag that can be read by all processors.
lst.getflag = Check if a global flag is set. lst.getflag = Check if a global flag is set.
lst.setprop = Sets a property of a unit or building.
logic.nounitbuild = [red]Unit building logic is not allowed here. logic.nounitbuild = [red]Unit building logic is not allowed here.
lenum.type = Type of building/unit.\ne.g. for any router, this will return [accent]@router[].\nNot a string. lenum.type = Type of building/unit.\ne.g. for any router, this will return [accent]@router[].\nNot a string.
lenum.shoot = Shoot at a position. lenum.shoot = Shoot at a position.

File diff suppressed because it is too large Load Diff

View File

@@ -149,11 +149,15 @@ mod.incompatiblemod = [red]호환되지 않음
mod.blacklisted = [red]지원하지 않음 mod.blacklisted = [red]지원하지 않음
mod.unmetdependencies = [red]충촉되지 않은 종속성 mod.unmetdependencies = [red]충촉되지 않은 종속성
mod.erroredcontent = [scarlet]콘텐츠 오류 mod.erroredcontent = [scarlet]콘텐츠 오류
mod.circulardependencies = [red]Circular Dependencies
mod.incompletedependencies = [red]Incomplete Dependencies
mod.requiresversion.details = 게임 버전 요구: [accent]{0}[]\n당신의 게임은 구버전입니다. 이 모드가 작동하려면 최신 버전의 게임이 필요합니다. (베타/알파 릴리즈일 가능성이 있음). mod.requiresversion.details = 게임 버전 요구: [accent]{0}[]\n당신의 게임은 구버전입니다. 이 모드가 작동하려면 최신 버전의 게임이 필요합니다. (베타/알파 릴리즈일 가능성이 있음).
mod.outdatedv7.details = 이 모드는 최신 버전의 게임과 호환되지 않습니다. 반드시 작성자가 업데이트해야 하고, [accent]mod.json[] 파일에 [accent]최소게임버전: 136[]을 추가해야 합니다. mod.outdatedv7.details = 이 모드는 최신 버전의 게임과 호환되지 않습니다. 반드시 작성자가 업데이트해야 하고, [accent]mod.json[] 파일에 [accent]최소게임버전: 136[]을 추가해야 합니다.
mod.blacklisted.details = 이 모드는 이 버전의 게임에서 충돌 또는 기타 문제를 일으키는 것으로 인해 수동으로 블랙리스트에 올라와 있습니다. 사용하지 마세요. mod.blacklisted.details = 이 모드는 이 버전의 게임에서 충돌 또는 기타 문제를 일으키는 것으로 인해 수동으로 블랙리스트에 올라와 있습니다. 사용하지 마세요.
mod.missingdependencies.details = 이 모드에는 종속성이 없음: {0} mod.missingdependencies.details = 이 모드에는 종속성이 없음: {0}
mod.erroredcontent.details = 이 게임은 로딩하는 동안 오류가 발생했습니다. 모드 작성자에게 수정하도록 요청하세요. mod.erroredcontent.details = 이 게임은 로딩하는 동안 오류가 발생했습니다. 모드 작성자에게 수정하도록 요청하세요.
mod.circulardependencies.details = This mod has dependencies that depends on each other.
mod.incompletedependencies.details = This mod is unable to be loaded due to invalid or missing dependencies: {0}.
mod.requiresversion = 필요한 게임 버전: [red]{0} mod.requiresversion = 필요한 게임 버전: [red]{0}
mod.errors = 콘텐츠를 불러오는 중에 오류가 발생함 mod.errors = 콘텐츠를 불러오는 중에 오류가 발생함
mod.noerrorplay = [scarlet]오류가 있는 모드가 있습니다.[] 영향을 받는 모드를 비활성화하거나 플레이하기 전에 오류를 수정하세요. mod.noerrorplay = [scarlet]오류가 있는 모드가 있습니다.[] 영향을 받는 모드를 비활성화하거나 플레이하기 전에 오류를 수정하세요.
@@ -288,7 +292,7 @@ server.invalidport = 잘못된 포트 번호입니다!
server.error = [scarlet]서버 호스팅 오류 server.error = [scarlet]서버 호스팅 오류
save.new = 새로 저장 save.new = 새로 저장
save.overwrite = 저장된 슬롯을 덮어쓰시겠습니까? save.overwrite = 저장된 슬롯을 덮어쓰시겠습니까?
save.nocampaign = Individual save files from the campaign cannot be imported. save.nocampaign = 캠페인의 개별 저장 파일을 가져올 수 없습니다.
overwrite = 덮어쓰기 overwrite = 덮어쓰기
save.none = 저장된 파일을 찾을 수 없습니다! save.none = 저장된 파일을 찾을 수 없습니다!
savefail = 게임을 저장하지 못했습니다! savefail = 게임을 저장하지 못했습니다!
@@ -331,6 +335,7 @@ command.repair = 수리
command.rebuild = 재건 command.rebuild = 재건
command.assist = 플레이어 지원 command.assist = 플레이어 지원
command.move = 이동 command.move = 이동
command.boost = Boost
openlink = 링크 열기 openlink = 링크 열기
copylink = 링크 복사 copylink = 링크 복사
back = 뒤로가기 back = 뒤로가기
@@ -356,8 +361,8 @@ pausebuilding = [accent][[{0}][] 키를 눌러 건설을 일시중지
resumebuilding = [scarlet][[{0}][] 키를 눌러 건설을 재개 resumebuilding = [scarlet][[{0}][] 키를 눌러 건설을 재개
enablebuilding = [scarlet][[{0}][] 키를 눌러 건설을 활성 enablebuilding = [scarlet][[{0}][] 키를 눌러 건설을 활성
showui = UI가 숨겨졌습니다. [accent][[{0}][] 키를 눌러 UI를 활성화하세요. showui = UI가 숨겨졌습니다. [accent][[{0}][] 키를 눌러 UI를 활성화하세요.
commandmode.name = [accent]Command Mode commandmode.name = [accent]명령 모드
commandmode.nounits = [no units] commandmode.nounits = [기체 없음]
wave = [accent]{0}단계 wave = [accent]{0}단계
wave.cap = [accent]단계 {0}/{1} wave.cap = [accent]단계 {0}/{1}
wave.waiting = 다음 단계까지[lightgray] {0}초 wave.waiting = 다음 단계까지[lightgray] {0}초
@@ -441,7 +446,7 @@ waves.max = 기까지
waves.guardian = 수호자 waves.guardian = 수호자
waves.preview = 미리보기 waves.preview = 미리보기
waves.edit = 편집 waves.edit = 편집
waves.random = Random waves.random = 무작위
waves.copy = 클립보드로 복사하기 waves.copy = 클립보드로 복사하기
waves.load = 클립보드에서 불러오기 waves.load = 클립보드에서 불러오기
waves.invalid = 클립보드에 잘못된 단계 데이터가 있습니다. waves.invalid = 클립보드에 잘못된 단계 데이터가 있습니다.
@@ -700,7 +705,7 @@ sectors.enemybase = [scarlet]적 기지[]
sectors.vulnerable = [scarlet]취약함[] sectors.vulnerable = [scarlet]취약함[]
sectors.underattack = [scarlet]공격받고 있습니다! [accent]{0}% 손상됨[] sectors.underattack = [scarlet]공격받고 있습니다! [accent]{0}% 손상됨[]
sectors.underattack.nodamage = [scarlet]점령되지 않음 sectors.underattack.nodamage = [scarlet]점령되지 않음
sectors.survives = [accent]{0} 단계 이상 버티세요.[] sectors.survives = [accent]{0} 단계 버팀[]
sectors.go = 진입 sectors.go = 진입
sector.abandon = 포기 sector.abandon = 포기
sector.abandon.confirm = 이 지역의 코어가 자폭합니다.\n계속하시겠습니까? sector.abandon.confirm = 이 지역의 코어가 자폭합니다.\n계속하시겠습니까?
@@ -976,6 +981,8 @@ bullet.splashdamage = [stat]{0}[lightgray] 범위 피해량 ~ [stat]{1}[lightgra
bullet.incendiary = [stat]방화[] bullet.incendiary = [stat]방화[]
bullet.homing = [stat]유도[] bullet.homing = [stat]유도[]
bullet.armorpierce = [stat]방어 관통 bullet.armorpierce = [stat]방어 관통
bullet.suppression = [stat]{0} sec[lightgray] repair suppression ~ [stat]{1}[lightgray] tiles
bullet.interval = [stat]{0}/sec[lightgray] interval bullets:
bullet.frags = [stat]{0}[lightgray]개 파편 탄환:[][] bullet.frags = [stat]{0}[lightgray]개 파편 탄환:[][]
bullet.lightning = [stat]{0}[lightgray]x 전격 ~ [stat]{1}[lightgray] 피해량[][][][] bullet.lightning = [stat]{0}[lightgray]x 전격 ~ [stat]{1}[lightgray] 피해량[][][][]
bullet.buildingdamage = [stat]{0}%[lightgray] 건물 피해량[][] bullet.buildingdamage = [stat]{0}%[lightgray] 건물 피해량[][]
@@ -1089,8 +1096,8 @@ setting.bridgeopacity.name = 터널 투명도
setting.playerchat.name = 채팅 말풍선 표시 setting.playerchat.name = 채팅 말풍선 표시
setting.showweather.name = 날씨 그래픽 표시 setting.showweather.name = 날씨 그래픽 표시
setting.hidedisplays.name = 로직 디스플레이 숨김 setting.hidedisplays.name = 로직 디스플레이 숨김
public.confirm = 게임을 모두에게 공개하시겠습니까?\n[accent]모든 플레이어가 게임에 참여할 수 있습니다.\n[lightgray]설정->게임->멀티플레이 공용 서버로 표시에서 나중에 변경할 수 있습니다.\n\n[sky]번역자 추가[]\n[accent]친구끼리 하려고 이 기능을 활성화 한 뒤에, 친구 외에 다른 플레이어가 들어왔을 때\n해당 플레이어를 차단하는 행위는 비매너를 넘어서는 얌체 행위 그 자체입니다.\n정말로 [scarlet]많은 다른 플레이어들이 오길 원한다[]면 확인하세요. steam.friendsonly = Friends Only
public.confirm.really = [red]친구하고 플레이 하고 싶으면 [scarlet]공용 서버[] 대신에 [green]친구 초대[] 를 사용하세요. 정말로 [scarlet]공용 서버[] 를 열겠습니까?[] steam.friendsonly.tooltip = Whether only Steam friends will be able to join your game.\nUnchecking this box will make your game public - anyone can join.
public.beta = 베타 버전의 게임은 공개 서버를 만들 수 없습니다. public.beta = 베타 버전의 게임은 공개 서버를 만들 수 없습니다.
uiscale.reset = UI 스케일이 변경되었습니다.\n"확인"버튼을 눌러 저장하세요.\n[accent] {0}[][scarlet]초 후에 예전 설정으로 되돌리고 게임을 종료합니다... uiscale.reset = UI 스케일이 변경되었습니다.\n"확인"버튼을 눌러 저장하세요.\n[accent] {0}[][scarlet]초 후에 예전 설정으로 되돌리고 게임을 종료합니다...
uiscale.cancel = 취소 후 나가기 uiscale.cancel = 취소 후 나가기
@@ -1142,8 +1149,8 @@ keybind.select.name = 선택/공격
keybind.diagonal_placement.name = 대각선 설치 keybind.diagonal_placement.name = 대각선 설치
keybind.pick.name = 블록 선택 keybind.pick.name = 블록 선택
keybind.break_block.name = 블록 파괴 keybind.break_block.name = 블록 파괴
keybind.select_all_units = 전체 기체 선택 keybind.select_all_units.name = 전체 기체 선택
keybind.select_all_unit_factories = 전체 기체 공장 선택 keybind.select_all_unit_factories.name = 전체 기체 공장 선택
keybind.deselect.name = 선택해제 keybind.deselect.name = 선택해제
keybind.pickupCargo.name = 화물 집기 keybind.pickupCargo.name = 화물 집기
keybind.dropCargo.name = 화물 내려놓기 keybind.dropCargo.name = 화물 내려놓기
@@ -1205,7 +1212,7 @@ rules.unitbuildspeedmultiplier = 기체 생산속도 배수
rules.unitcostmultiplier = 기체 비용 배수 rules.unitcostmultiplier = 기체 비용 배수
rules.unithealthmultiplier = 기체 체력 배수 rules.unithealthmultiplier = 기체 체력 배수
rules.unitdamagemultiplier = 기체 피해량 배수 rules.unitdamagemultiplier = 기체 피해량 배수
rules.unitcrashdamagemultiplier = Unit Crash Damage Multiplier rules.unitcrashdamagemultiplier = 기체 파손 피해량 배수
rules.solarmultiplier = 태양광 전력 배수 rules.solarmultiplier = 태양광 전력 배수
rules.unitcapvariable = 코어 기체수 제한 추가 rules.unitcapvariable = 코어 기체수 제한 추가
rules.unitcap = 기본 기체 제한 rules.unitcap = 기본 기체 제한
@@ -2199,6 +2206,7 @@ lst.flushmessage = 텍스트 버퍼로부터 화면에 메세지를 표시\n이
lst.cutscene = 플레이어 카메라 조작 lst.cutscene = 플레이어 카메라 조작
lst.setflag = 모든 프로세서가 읽을 수 있는 전역 플래그 설정 lst.setflag = 모든 프로세서가 읽을 수 있는 전역 플래그 설정
lst.getflag = 전역 플래그가 설정되어 있는지 확인 lst.getflag = 전역 플래그가 설정되어 있는지 확인
lst.setprop = Sets a property of a unit or building.
logic.nounitbuild = [red]기체의 건설 로직은 여기서 허용되지 않습니다. logic.nounitbuild = [red]기체의 건설 로직은 여기서 허용되지 않습니다.

View File

@@ -146,11 +146,15 @@ mod.incompatiblemod = [red]Incompatible
mod.blacklisted = [red]Unsupported mod.blacklisted = [red]Unsupported
mod.unmetdependencies = [red]Unmet Dependencies mod.unmetdependencies = [red]Unmet Dependencies
mod.erroredcontent = [scarlet]Turinio klaidos. mod.erroredcontent = [scarlet]Turinio klaidos.
mod.circulardependencies = [red]Circular Dependencies
mod.incompletedependencies = [red]Incomplete Dependencies
mod.requiresversion.details = Requires game version: [accent]{0}[]\nYour game is outdated. This mod requires a newer version of the game (possibly a beta/alpha release) to function. mod.requiresversion.details = Requires game version: [accent]{0}[]\nYour game is outdated. This mod requires a newer version of the game (possibly a beta/alpha release) to function.
mod.outdatedv7.details = This mod is incompatible with the latest version of the game. The author must update it, and add [accent]minGameVersion: 136[] to its [accent]mod.json[] file. mod.outdatedv7.details = This mod is incompatible with the latest version of the game. The author must update it, and add [accent]minGameVersion: 136[] to its [accent]mod.json[] file.
mod.blacklisted.details = This mod has been manually blacklisted for causing crashes or other issues with this version of the game. Do not use it. mod.blacklisted.details = This mod has been manually blacklisted for causing crashes or other issues with this version of the game. Do not use it.
mod.missingdependencies.details = This mod is missing dependencies: {0} mod.missingdependencies.details = This mod is missing dependencies: {0}
mod.erroredcontent.details = This game caused errors when loading. Ask the mod author to fix them. mod.erroredcontent.details = This game caused errors when loading. Ask the mod author to fix them.
mod.circulardependencies.details = This mod has dependencies that depends on each other.
mod.incompletedependencies.details = This mod is unable to be loaded due to invalid or missing dependencies: {0}.
mod.requiresversion = Requires game version: [red]{0} mod.requiresversion = Requires game version: [red]{0}
mod.errors = Įvyko klaida kraunant turinį. mod.errors = Įvyko klaida kraunant turinį.
mod.noerrorplay = [scarlet]Turite modifikacijas su klaidomis.[] Išjunkite modifikacijas su klaidomis arba patasykite jas prieš žaidžiant. mod.noerrorplay = [scarlet]Turite modifikacijas su klaidomis.[] Išjunkite modifikacijas su klaidomis arba patasykite jas prieš žaidžiant.
@@ -327,6 +331,7 @@ command.repair = Repair
command.rebuild = Rebuild command.rebuild = Rebuild
command.assist = Assist Player command.assist = Assist Player
command.move = Move command.move = Move
command.boost = Boost
openlink = Atidaryti Nuorodą openlink = Atidaryti Nuorodą
copylink = Kopijuoti Nuorodą copylink = Kopijuoti Nuorodą
back = Sugrįžti back = Sugrįžti
@@ -964,6 +969,8 @@ bullet.splashdamage = [stat]{0}[lightgray] zonos žalos ~[stat] {1}[lightgray] b
bullet.incendiary = [stat]uždegantis bullet.incendiary = [stat]uždegantis
bullet.homing = [stat]sekimas bullet.homing = [stat]sekimas
bullet.armorpierce = [stat]armor piercing bullet.armorpierce = [stat]armor piercing
bullet.suppression = [stat]{0} sec[lightgray] repair suppression ~ [stat]{1}[lightgray] tiles
bullet.interval = [stat]{0}/sec[lightgray] interval bullets:
bullet.frags = [stat]{0}[lightgray]x frag bullets: bullet.frags = [stat]{0}[lightgray]x frag bullets:
bullet.lightning = [stat]{0}[lightgray]x lightning ~ [stat]{1}[lightgray] damage bullet.lightning = [stat]{0}[lightgray]x lightning ~ [stat]{1}[lightgray] damage
bullet.buildingdamage = [stat]{0}%[lightgray] building damage bullet.buildingdamage = [stat]{0}%[lightgray] building damage
@@ -1077,8 +1084,8 @@ setting.bridgeopacity.name = Tilto Nepermatomumas
setting.playerchat.name = Rodyti Pokalbių Teksto Burbulus Virš Žaidėjų setting.playerchat.name = Rodyti Pokalbių Teksto Burbulus Virš Žaidėjų
setting.showweather.name = Show Weather Graphics setting.showweather.name = Show Weather Graphics
setting.hidedisplays.name = Hide Logic Displays setting.hidedisplays.name = Hide Logic Displays
public.confirm = Ar norite savo žaidimą paversti viešu?\n[accent]Bet kas galės įeiti į jūsų žaidimą.\n[lightgray]Tai gali būti pakeista nuėjus į Nustatymai->Žaidimas->Viešojo Žaidimo Matomumas. steam.friendsonly = Friends Only
public.confirm.really = If you want to play with friends, use [green]Invite Friend[] instead of a [scarlet]Public server[]!\nAre you sure you want to make your game [scarlet]public[]? steam.friendsonly.tooltip = Whether only Steam friends will be able to join your game.\nUnchecking this box will make your game public - anyone can join.
public.beta = Įsiminkite, jog beta versijoje negalima sukrti viešų kambarių. public.beta = Įsiminkite, jog beta versijoje negalima sukrti viešų kambarių.
uiscale.reset = UI mastelis buvo pakeistas.\nSpauskite "GERAI", norėdami palikti šį mastelį.\n[scarlet]Atšaukiama ir išeinama po[accent] {0}[] sekundžių... uiscale.reset = UI mastelis buvo pakeistas.\nSpauskite "GERAI", norėdami palikti šį mastelį.\n[scarlet]Atšaukiama ir išeinama po[accent] {0}[] sekundžių...
uiscale.cancel = Atšaukti ir Išeiti uiscale.cancel = Atšaukti ir Išeiti
@@ -1130,8 +1137,8 @@ keybind.select.name = Pasirinkti/Šauti
keybind.diagonal_placement.name = Įstrižas Padėjimas keybind.diagonal_placement.name = Įstrižas Padėjimas
keybind.pick.name = Pasirinkti Bloką keybind.pick.name = Pasirinkti Bloką
keybind.break_block.name = Išgriauti Bloką keybind.break_block.name = Išgriauti Bloką
keybind.select_all_units = Select All Units keybind.select_all_units.name = Select All Units
keybind.select_all_unit_factories = Select All Unit Factories keybind.select_all_unit_factories.name = Select All Unit Factories
keybind.deselect.name = Panaikinti Pasirinkimą keybind.deselect.name = Panaikinti Pasirinkimą
keybind.pickupCargo.name = Pickup Cargo keybind.pickupCargo.name = Pickup Cargo
keybind.dropCargo.name = Drop Cargo keybind.dropCargo.name = Drop Cargo
@@ -2182,6 +2189,7 @@ lst.flushmessage = Display a message on the screen from the text buffer.\nWill w
lst.cutscene = Manipulate the player camera. lst.cutscene = Manipulate the player camera.
lst.setflag = Set a global flag that can be read by all processors. lst.setflag = Set a global flag that can be read by all processors.
lst.getflag = Check if a global flag is set. lst.getflag = Check if a global flag is set.
lst.setprop = Sets a property of a unit or building.
logic.nounitbuild = [red]Unit building logic is not allowed here. logic.nounitbuild = [red]Unit building logic is not allowed here.
lenum.type = Type of building/unit.\ne.g. for any router, this will return [accent]@router[].\nNot a string. lenum.type = Type of building/unit.\ne.g. for any router, this will return [accent]@router[].\nNot a string.
lenum.shoot = Shoot at a position. lenum.shoot = Shoot at a position.

View File

@@ -150,12 +150,16 @@ mod.incompatiblemod = [red]Onverenigbaar
mod.blacklisted = [red]Niet Ondersteund mod.blacklisted = [red]Niet Ondersteund
mod.unmetdependencies = [red]Onbevredigde Afhankelijkheden mod.unmetdependencies = [red]Onbevredigde Afhankelijkheden
mod.erroredcontent = [scarlet]Fouten in de inhoud mod.erroredcontent = [scarlet]Fouten in de inhoud
mod.circulardependencies = [red]Circular Dependencies
mod.incompletedependencies = [red]Incomplete Dependencies
mod.requiresversion.details = Vereist spelversie: [accent]{0}[]\nJouw spel is verouderd. Deze mod heeft een nieuwere versie van de game nodig (mogelijk een beta/alpha release) om te functioneren. mod.requiresversion.details = Vereist spelversie: [accent]{0}[]\nJouw spel is verouderd. Deze mod heeft een nieuwere versie van de game nodig (mogelijk een beta/alpha release) om te functioneren.
mod.outdatedv7.details = Deze mod is onverenigbaar met de nieuwste versie van het spel. De auteur moet het updaten en [accent]minGameVersion: 136[] toevoegen aan zijn/haar [accent]mod.json[] bestand. mod.outdatedv7.details = Deze mod is onverenigbaar met de nieuwste versie van het spel. De auteur moet het updaten en [accent]minGameVersion: 136[] toevoegen aan zijn/haar [accent]mod.json[] bestand.
mod.blacklisted.details = Deze mod is handmatig op de zwarte lijst gezet wegens het veroorzaken van crashes of andere problemen met deze versie van het spel. Gebruik het niet. mod.blacklisted.details = Deze mod is handmatig op de zwarte lijst gezet wegens het veroorzaken van crashes of andere problemen met deze versie van het spel. Gebruik het niet.
mod.missingdependencies.details = Deze mod mist afhankelijkheden: {0} mod.missingdependencies.details = Deze mod mist afhankelijkheden: {0}
mod.erroredcontent.details = Deze mod veroorzaakte fouten tijdens het laden. Vraag de auteur van de mod om ze te op te lossen. mod.erroredcontent.details = Deze mod veroorzaakte fouten tijdens het laden. Vraag de auteur van de mod om ze te op te lossen.
mod.circulardependencies.details = This mod has dependencies that depends on each other.
mod.incompletedependencies.details = This mod is unable to be loaded due to invalid or missing dependencies: {0}.
mod.requiresversion = Vereist spelversie: [red]{0} mod.requiresversion = Vereist spelversie: [red]{0}
@@ -335,6 +339,7 @@ command.repair = Repareer
command.rebuild = Herbouw command.rebuild = Herbouw
command.assist = Assist Speler command.assist = Assist Speler
command.move = Beweeg command.move = Beweeg
command.boost = Boost
openlink = Open Link openlink = Open Link
copylink = Kopieer Link copylink = Kopieer Link
back = Terug back = Terug
@@ -976,6 +981,8 @@ bullet.splashdamage = [stat]{0}[lightgray] gebied scade ~[stat] {1}[lightgray] t
bullet.incendiary = [stat]brandstichtend bullet.incendiary = [stat]brandstichtend
bullet.homing = [stat]doelzoekend bullet.homing = [stat]doelzoekend
bullet.armorpierce = [stat]pantserdoorborend bullet.armorpierce = [stat]pantserdoorborend
bullet.suppression = [stat]{0} sec[lightgray] repair suppression ~ [stat]{1}[lightgray] tiles
bullet.interval = [stat]{0}/sec[lightgray] interval bullets:
bullet.frags = [stat]{0}[lightgray]x fragment kogels: bullet.frags = [stat]{0}[lightgray]x fragment kogels:
bullet.lightning = [stat]{0}[lightgray]x bliksem ~ [stat]{1}[lightgray] schade bullet.lightning = [stat]{0}[lightgray]x bliksem ~ [stat]{1}[lightgray] schade
bullet.buildingdamage = [stat]{0}%[lightgray] gebouwschade bullet.buildingdamage = [stat]{0}%[lightgray] gebouwschade
@@ -1089,8 +1096,8 @@ setting.bridgeopacity.name = Brug Transparantie
setting.playerchat.name = Toon Chat setting.playerchat.name = Toon Chat
setting.showweather.name = Toon Weer Graphics setting.showweather.name = Toon Weer Graphics
setting.hidedisplays.name = Verberg Logische Displays setting.hidedisplays.name = Verberg Logische Displays
public.confirm = Wil je je game publiek maken?\n[accent]Iedereen kan je spel dan joinen.\n[lightgray]Dit kan je later veranderen in Instellingen->Spel->Publieke Server Zichtbaarheid. steam.friendsonly = Friends Only
public.confirm.really = Als je met een vriend wilt spelen, gebruik dan de optie [green]Nodig Vriend Uit[] in plaats van [scarlet]Publieke Server[]!\nWeet je zeker dat je je server [scarlet]public[] wilt maken? steam.friendsonly.tooltip = Whether only Steam friends will be able to join your game.\nUnchecking this box will make your game public - anyone can join.
public.beta = Onthoud dat b<>ta versies geen publieke lobby's kunnen maken. public.beta = Onthoud dat b<>ta versies geen publieke lobby's kunnen maken.
uiscale.reset = UI formaat is geweizigd.\nKlik op "OK" om het te bevestigen.\n[scarlet]Anders word het in[accent] {0}[] seconden ongedaan gemaakt... uiscale.reset = UI formaat is geweizigd.\nKlik op "OK" om het te bevestigen.\n[scarlet]Anders word het in[accent] {0}[] seconden ongedaan gemaakt...
uiscale.cancel = Annuleer & Sluit uiscale.cancel = Annuleer & Sluit
@@ -1142,8 +1149,8 @@ keybind.select.name = Selecteer/Schiet
keybind.diagonal_placement.name = Plaats Diagonaal keybind.diagonal_placement.name = Plaats Diagonaal
keybind.pick.name = Kies Blok keybind.pick.name = Kies Blok
keybind.break_block.name = Breek Blok keybind.break_block.name = Breek Blok
keybind.select_all_units = Selecteer Alle Eenheden keybind.select_all_units.name = Selecteer Alle Eenheden
keybind.select_all_unit_factories = Selecteer Alle Eenheidsfabrieken keybind.select_all_unit_factories.name = Selecteer Alle Eenheidsfabrieken
keybind.deselect.name = Deselecteer keybind.deselect.name = Deselecteer
keybind.pickupCargo.name = Pak Vracht Op keybind.pickupCargo.name = Pak Vracht Op
keybind.dropCargo.name = Laat Vracht Vallen keybind.dropCargo.name = Laat Vracht Vallen
@@ -2195,6 +2202,7 @@ lst.flushmessage = Display a message on the screen from the text buffer.\nWill w
lst.cutscene = Manipulate the player camera. lst.cutscene = Manipulate the player camera.
lst.setflag = Set a global flag that can be read by all processors. lst.setflag = Set a global flag that can be read by all processors.
lst.getflag = Check if a global flag is set. lst.getflag = Check if a global flag is set.
lst.setprop = Sets a property of a unit or building.
logic.nounitbuild = [red]Unit building logic is not allowed here. logic.nounitbuild = [red]Unit building logic is not allowed here.
lenum.type = Type of building/unit.\ne.g. for any router, this will return [accent]@router[].\nNot a string. lenum.type = Type of building/unit.\ne.g. for any router, this will return [accent]@router[].\nNot a string.
lenum.shoot = Shoot at a position. lenum.shoot = Shoot at a position.

View File

@@ -146,11 +146,15 @@ mod.incompatiblemod = [red]Incompatible
mod.blacklisted = [red]Unsupported mod.blacklisted = [red]Unsupported
mod.unmetdependencies = [red]Unmet Dependencies mod.unmetdependencies = [red]Unmet Dependencies
mod.erroredcontent = [scarlet]Content Errors mod.erroredcontent = [scarlet]Content Errors
mod.circulardependencies = [red]Circular Dependencies
mod.incompletedependencies = [red]Incomplete Dependencies
mod.requiresversion.details = Requires game version: [accent]{0}[]\nYour game is outdated. This mod requires a newer version of the game (possibly a beta/alpha release) to function. mod.requiresversion.details = Requires game version: [accent]{0}[]\nYour game is outdated. This mod requires a newer version of the game (possibly a beta/alpha release) to function.
mod.outdatedv7.details = This mod is incompatible with the latest version of the game. The author must update it, and add [accent]minGameVersion: 136[] to its [accent]mod.json[] file. mod.outdatedv7.details = This mod is incompatible with the latest version of the game. The author must update it, and add [accent]minGameVersion: 136[] to its [accent]mod.json[] file.
mod.blacklisted.details = This mod has been manually blacklisted for causing crashes or other issues with this version of the game. Do not use it. mod.blacklisted.details = This mod has been manually blacklisted for causing crashes or other issues with this version of the game. Do not use it.
mod.missingdependencies.details = This mod is missing dependencies: {0} mod.missingdependencies.details = This mod is missing dependencies: {0}
mod.erroredcontent.details = This game caused errors when loading. Ask the mod author to fix them. mod.erroredcontent.details = This game caused errors when loading. Ask the mod author to fix them.
mod.circulardependencies.details = This mod has dependencies that depends on each other.
mod.incompletedependencies.details = This mod is unable to be loaded due to invalid or missing dependencies: {0}.
mod.requiresversion = Requires game version: [red]{0} mod.requiresversion = Requires game version: [red]{0}
mod.errors = Errors have occurred loading content. mod.errors = Errors have occurred loading content.
mod.noerrorplay = [scarlet]You have mods with errors.[] Either disable the affected mods or fix the errors before playing. mod.noerrorplay = [scarlet]You have mods with errors.[] Either disable the affected mods or fix the errors before playing.
@@ -327,6 +331,7 @@ command.repair = Repair
command.rebuild = Rebuild command.rebuild = Rebuild
command.assist = Assist Player command.assist = Assist Player
command.move = Move command.move = Move
command.boost = Boost
openlink = Open Link openlink = Open Link
copylink = Kopiëer Link copylink = Kopiëer Link
back = Terug back = Terug
@@ -964,6 +969,8 @@ bullet.splashdamage = [stat]{0}[lightgray] area dmg ~[stat] {1}[lightgray] tiles
bullet.incendiary = [stat]incendiary bullet.incendiary = [stat]incendiary
bullet.homing = [stat]homing bullet.homing = [stat]homing
bullet.armorpierce = [stat]armor piercing bullet.armorpierce = [stat]armor piercing
bullet.suppression = [stat]{0} sec[lightgray] repair suppression ~ [stat]{1}[lightgray] tiles
bullet.interval = [stat]{0}/sec[lightgray] interval bullets:
bullet.frags = [stat]{0}[lightgray]x frag bullets: bullet.frags = [stat]{0}[lightgray]x frag bullets:
bullet.lightning = [stat]{0}[lightgray]x lightning ~ [stat]{1}[lightgray] damage bullet.lightning = [stat]{0}[lightgray]x lightning ~ [stat]{1}[lightgray] damage
bullet.buildingdamage = [stat]{0}%[lightgray] building damage bullet.buildingdamage = [stat]{0}%[lightgray] building damage
@@ -1077,8 +1084,8 @@ setting.bridgeopacity.name = Bridge Opacity
setting.playerchat.name = Display In-Game Chat setting.playerchat.name = Display In-Game Chat
setting.showweather.name = Show Weather Graphics setting.showweather.name = Show Weather Graphics
setting.hidedisplays.name = Hide Logic Displays setting.hidedisplays.name = Hide Logic Displays
public.confirm = Do you want to make your game public?\n[accent]Anyone will be able to join your games.\n[lightgray]This can be changed later in Settings->Game->Public Game Visibility. steam.friendsonly = Friends Only
public.confirm.really = If you want to play with friends, use [green]Invite Friend[] instead of a [scarlet]Public server[]!\nAre you sure you want to make your game [scarlet]public[]? steam.friendsonly.tooltip = Whether only Steam friends will be able to join your game.\nUnchecking this box will make your game public - anyone can join.
public.beta = Note that beta versions of the game cannot make public lobbies. public.beta = Note that beta versions of the game cannot make public lobbies.
uiscale.reset = UI scale has been changed.\nPress "OK" to confirm this scale.\n[scarlet]Reverting and exiting in[accent] {0}[] settings... uiscale.reset = UI scale has been changed.\nPress "OK" to confirm this scale.\n[scarlet]Reverting and exiting in[accent] {0}[] settings...
uiscale.cancel = Cancel & Exit uiscale.cancel = Cancel & Exit
@@ -1130,8 +1137,8 @@ keybind.select.name = Select/Shoot
keybind.diagonal_placement.name = Diagonal Placement keybind.diagonal_placement.name = Diagonal Placement
keybind.pick.name = Pick Block keybind.pick.name = Pick Block
keybind.break_block.name = Break Block keybind.break_block.name = Break Block
keybind.select_all_units = Select All Units keybind.select_all_units.name = Select All Units
keybind.select_all_unit_factories = Select All Unit Factories keybind.select_all_unit_factories.name = Select All Unit Factories
keybind.deselect.name = Deselect keybind.deselect.name = Deselect
keybind.pickupCargo.name = Pickup Cargo keybind.pickupCargo.name = Pickup Cargo
keybind.dropCargo.name = Drop Cargo keybind.dropCargo.name = Drop Cargo
@@ -2182,6 +2189,7 @@ lst.flushmessage = Display a message on the screen from the text buffer.\nWill w
lst.cutscene = Manipulate the player camera. lst.cutscene = Manipulate the player camera.
lst.setflag = Set a global flag that can be read by all processors. lst.setflag = Set a global flag that can be read by all processors.
lst.getflag = Check if a global flag is set. lst.getflag = Check if a global flag is set.
lst.setprop = Sets a property of a unit or building.
logic.nounitbuild = [red]Unit building logic is not allowed here. logic.nounitbuild = [red]Unit building logic is not allowed here.
lenum.type = Type of building/unit.\ne.g. for any router, this will return [accent]@router[].\nNot a string. lenum.type = Type of building/unit.\ne.g. for any router, this will return [accent]@router[].\nNot a string.
lenum.shoot = Shoot at a position. lenum.shoot = Shoot at a position.

View File

@@ -149,11 +149,15 @@ mod.incompatiblemod = [red]Niekompatybilne
mod.blacklisted = [red]Niewspierane mod.blacklisted = [red]Niewspierane
mod.unmetdependencies = [red]Niespełnione Zależnośći mod.unmetdependencies = [red]Niespełnione Zależnośći
mod.erroredcontent = [scarlet]Błędy Zawartości mod.erroredcontent = [scarlet]Błędy Zawartości
mod.circulardependencies = [red]Circular Dependencies
mod.incompletedependencies = [red]Incomplete Dependencies
mod.requiresversion.details = Wymaga wersji gry: [accent]{0}[]\nTwoja gra jest przestarzała. Ten mod potrzebuje nowszej wersji gry (możliwe, że wersji w fazie alfa/beta) aby mógł funkcjonować. mod.requiresversion.details = Wymaga wersji gry: [accent]{0}[]\nTwoja gra jest przestarzała. Ten mod potrzebuje nowszej wersji gry (możliwe, że wersji w fazie alfa/beta) aby mógł funkcjonować.
mod.outdatedv7.details = Ten mod jest niekompatybilny z najnowszą wersją gry. Autor musi go zaktualizować, i dodać [accent]minGameVersion: 136[] w pliku [accent]mod.json[]. mod.outdatedv7.details = Ten mod jest niekompatybilny z najnowszą wersją gry. Autor musi go zaktualizować, i dodać [accent]minGameVersion: 136[] w pliku [accent]mod.json[].
mod.blacklisted.details = Ten mod został ręczenie przeniesiony na czarną listę, ponieważ powodował wyłączenia gry i inne problemy na tej wersji. Nie używaj go. mod.blacklisted.details = Ten mod został ręczenie przeniesiony na czarną listę, ponieważ powodował wyłączenia gry i inne problemy na tej wersji. Nie używaj go.
mod.missingdependencies.details = W tym modzie brakuje zależnośći: {0} mod.missingdependencies.details = W tym modzie brakuje zależnośći: {0}
mod.erroredcontent.details = Ten mod spowodował błędy przy uruchomianu. Poproś autora moda o ich naprawienie. mod.erroredcontent.details = Ten mod spowodował błędy przy uruchomianu. Poproś autora moda o ich naprawienie.
mod.circulardependencies.details = This mod has dependencies that depends on each other.
mod.incompletedependencies.details = This mod is unable to be loaded due to invalid or missing dependencies: {0}.
mod.requiresversion = Requires game version: [red]{0} mod.requiresversion = Requires game version: [red]{0}
mod.errors = Wystąpił błąd podczas ładowania treści. mod.errors = Wystąpił błąd podczas ładowania treści.
mod.noerrorplay = [scarlet]Twoje mody zawierają błędy.[] Wyłącz je lub napraw błędy przed rozpoczęciem gry. mod.noerrorplay = [scarlet]Twoje mody zawierają błędy.[] Wyłącz je lub napraw błędy przed rozpoczęciem gry.
@@ -331,6 +335,7 @@ command.repair = Naprawiaj
command.rebuild = Odbudowywuj command.rebuild = Odbudowywuj
command.assist = Asystuj Graczowi command.assist = Asystuj Graczowi
command.move = Przemieść command.move = Przemieść
command.boost = Boost
openlink = Otwórz Link openlink = Otwórz Link
copylink = Kopiuj Link copylink = Kopiuj Link
back = Wróć back = Wróć
@@ -974,6 +979,8 @@ bullet.splashdamage = [stat]{0}[lightgray] Obrażenia obszarowe ~[stat] {1}[ligh
bullet.incendiary = [stat]zapalający bullet.incendiary = [stat]zapalający
bullet.homing = [stat]naprowadzający bullet.homing = [stat]naprowadzający
bullet.armorpierce = [stat]przebijający pancerz bullet.armorpierce = [stat]przebijający pancerz
bullet.suppression = [stat]{0} sec[lightgray] repair suppression ~ [stat]{1}[lightgray] tiles
bullet.interval = [stat]{0}/sec[lightgray] interval bullets:
bullet.frags = [stat]{0}[lightgray]x pociski odłamkowe: bullet.frags = [stat]{0}[lightgray]x pociski odłamkowe:
bullet.lightning = [stat]{0}[lightgray]x błyskawice ~ [stat]{1}[lightgray] Obrażenia bullet.lightning = [stat]{0}[lightgray]x błyskawice ~ [stat]{1}[lightgray] Obrażenia
bullet.buildingdamage = [stat]{0}%[lightgray] obrażeń budynkom bullet.buildingdamage = [stat]{0}%[lightgray] obrażeń budynkom
@@ -1087,8 +1094,8 @@ setting.bridgeopacity.name = Przezroczystość mostów
setting.playerchat.name = Wyświetlaj dymek czatu w grze setting.playerchat.name = Wyświetlaj dymek czatu w grze
setting.showweather.name = Pokaż pogodę setting.showweather.name = Pokaż pogodę
setting.hidedisplays.name = Ukryj wyświetlacze logiczne setting.hidedisplays.name = Ukryj wyświetlacze logiczne
public.confirm = Czy chcesz ustawić swoją grę jako publiczną?\n[accent]Każdy będzie mógł dołączyć do Twojej gry.\n[lightgray]Można to później zmienić w Ustawienia->Gra->Widoczność Gry Publicznej. steam.friendsonly = Friends Only
public.confirm.really = Jeśli chcesz zagrać ze znajomymi, użyj opcji [green]Zaproś Znajomych[] zamiast [scarlet]Publiczny serwer[]!\nJesteś pewny że chcesz rozpocząć grę [scarlet]publiczną[]? steam.friendsonly.tooltip = Whether only Steam friends will be able to join your game.\nUnchecking this box will make your game public - anyone can join.
public.beta = Wersje beta gry nie mogą tworzyć publicznych pokoi. public.beta = Wersje beta gry nie mogą tworzyć publicznych pokoi.
uiscale.reset = Skala interfejsu uległa zmianie.\nNaciśnij "OK" by potwierdzić zmiany.\n[scarlet]Cofanie zmian i wyjście z gry za[accent] {0}[] uiscale.reset = Skala interfejsu uległa zmianie.\nNaciśnij "OK" by potwierdzić zmiany.\n[scarlet]Cofanie zmian i wyjście z gry za[accent] {0}[]
uiscale.cancel = Anuluj i wyjdź uiscale.cancel = Anuluj i wyjdź
@@ -1140,8 +1147,8 @@ keybind.select.name = Zaznacz
keybind.diagonal_placement.name = Budowa po skosie keybind.diagonal_placement.name = Budowa po skosie
keybind.pick.name = Wybierz Blok keybind.pick.name = Wybierz Blok
keybind.break_block.name = Zniszcz Blok keybind.break_block.name = Zniszcz Blok
keybind.select_all_units = Wybierz Wszystkie Jednostki keybind.select_all_units.name = Wybierz Wszystkie Jednostki
keybind.select_all_unit_factories = Wybierz Wszystkie Fabryki Jednostek keybind.select_all_unit_factories.name = Wybierz Wszystkie Fabryki Jednostek
keybind.deselect.name = Odznacz keybind.deselect.name = Odznacz
keybind.pickupCargo.name = Podnieś Ładunek keybind.pickupCargo.name = Podnieś Ładunek
keybind.dropCargo.name = Opuść Ładunek keybind.dropCargo.name = Opuść Ładunek
@@ -2217,6 +2224,7 @@ lst.flushmessage = Wyświetl wiadomość na ekranie z bufora tekstowego.\nPoczek
lst.cutscene = Manipuluj kamerą gracza. lst.cutscene = Manipuluj kamerą gracza.
lst.setflag = Ustaw globalną flagę, którą mogą odczytać wszystkie procesory. lst.setflag = Ustaw globalną flagę, którą mogą odczytać wszystkie procesory.
lst.getflag = Sprawdź, czy ustawiona jest flaga globalna. lst.getflag = Sprawdź, czy ustawiona jest flaga globalna.
lst.setprop = Sets a property of a unit or building.
logic.nounitbuild = [red]Logika budowania jednostek nie jest tu dozwolona. logic.nounitbuild = [red]Logika budowania jednostek nie jest tu dozwolona.

View File

@@ -149,11 +149,15 @@ mod.incompatiblemod = [red]Incompatible
mod.blacklisted = [red]Unsupported mod.blacklisted = [red]Unsupported
mod.unmetdependencies = [red]Unmet Dependencies mod.unmetdependencies = [red]Unmet Dependencies
mod.erroredcontent = [scarlet]Erros no conteúdo mod.erroredcontent = [scarlet]Erros no conteúdo
mod.circulardependencies = [red]Circular Dependencies
mod.incompletedependencies = [red]Incomplete Dependencies
mod.requiresversion.details = Requires game version: [accent]{0}[]\nYour game is outdated. This mod requires a newer version of the game (possibly a beta/alpha release) to function. mod.requiresversion.details = Requires game version: [accent]{0}[]\nYour game is outdated. This mod requires a newer version of the game (possibly a beta/alpha release) to function.
mod.outdatedv7.details = This mod is incompatible with the latest version of the game. The author must update it, and add [accent]minGameVersion: 136[] to its [accent]mod.json[] file. mod.outdatedv7.details = This mod is incompatible with the latest version of the game. The author must update it, and add [accent]minGameVersion: 136[] to its [accent]mod.json[] file.
mod.blacklisted.details = This mod has been manually blacklisted for causing crashes or other issues with this version of the game. Do not use it. mod.blacklisted.details = This mod has been manually blacklisted for causing crashes or other issues with this version of the game. Do not use it.
mod.missingdependencies.details = This mod is missing dependencies: {0} mod.missingdependencies.details = This mod is missing dependencies: {0}
mod.erroredcontent.details = This game caused errors when loading. Ask the mod author to fix them. mod.erroredcontent.details = This game caused errors when loading. Ask the mod author to fix them.
mod.circulardependencies.details = This mod has dependencies that depends on each other.
mod.incompletedependencies.details = This mod is unable to be loaded due to invalid or missing dependencies: {0}.
mod.requiresversion = Requires game version: [red]{0} mod.requiresversion = Requires game version: [red]{0}
mod.errors = Ocorreram erros ao carregar o conteúdo. mod.errors = Ocorreram erros ao carregar o conteúdo.
mod.noerrorplay = [scarlet]Você tem mods com erros.[] Desative os mods afetados ou conserte os erros antes de jogar. mod.noerrorplay = [scarlet]Você tem mods com erros.[] Desative os mods afetados ou conserte os erros antes de jogar.
@@ -331,6 +335,7 @@ command.repair = Reparar
command.rebuild = Reconstruir command.rebuild = Reconstruir
command.assist = Assist Player command.assist = Assist Player
command.move = Mover command.move = Mover
command.boost = Boost
openlink = Abrir Link openlink = Abrir Link
copylink = Copiar link copylink = Copiar link
back = Voltar back = Voltar
@@ -985,6 +990,8 @@ bullet.splashdamage = [stat]{0}[lightgray] de dano em área ~[stat] {1}[lightgra
bullet.incendiary = [stat]Incendiário bullet.incendiary = [stat]Incendiário
bullet.homing = [stat]Guiado bullet.homing = [stat]Guiado
bullet.armorpierce = [stat]pentração de armadura bullet.armorpierce = [stat]pentração de armadura
bullet.suppression = [stat]{0} sec[lightgray] repair suppression ~ [stat]{1}[lightgray] tiles
bullet.interval = [stat]{0}/sec[lightgray] interval bullets:
bullet.frags = [stat]{0}[lightgray]x balas de fragmentação: bullet.frags = [stat]{0}[lightgray]x balas de fragmentação:
bullet.lightning = [stat]{0}[lightgray]x raio ~ [stat]{1}[lightgray] dano bullet.lightning = [stat]{0}[lightgray]x raio ~ [stat]{1}[lightgray] dano
bullet.buildingdamage = [stat]{0}%[lightgray] dano em construção bullet.buildingdamage = [stat]{0}%[lightgray] dano em construção
@@ -1098,8 +1105,8 @@ setting.bridgeopacity.name = Opacidade da ponte
setting.playerchat.name = Mostrar chat em jogo setting.playerchat.name = Mostrar chat em jogo
setting.showweather.name = Mostrar Gráficos do Clima setting.showweather.name = Mostrar Gráficos do Clima
setting.hidedisplays.name = Ocultar Displays de Lógicos setting.hidedisplays.name = Ocultar Displays de Lógicos
public.confirm = Você quer fazer sua partida pública?\n[accent]Qualquer um será capaz de entrar na sua partida.\n[lightgray]Isso pode ser mudado depois em Configurações->Jogo->Visibilidade da partida pública. steam.friendsonly = Friends Only
public.confirm.really = Se você quer jogar com amigos, use [green]Convidar Amigos[] ao invés de um [scarlet]Server Público[]!\nTem certeza que quer tornar seu jogo[scarlet]público[]? steam.friendsonly.tooltip = Whether only Steam friends will be able to join your game.\nUnchecking this box will make your game public - anyone can join.
public.beta = Note que as versões beta do jogo não podem fazer salas públicas. public.beta = Note que as versões beta do jogo não podem fazer salas públicas.
uiscale.reset = A escala da interface foi mudada.\nPressione "OK" para confirmar esta escala.\n[scarlet]Revertendo e saindo em[accent] {0}[] segundos... uiscale.reset = A escala da interface foi mudada.\nPressione "OK" para confirmar esta escala.\n[scarlet]Revertendo e saindo em[accent] {0}[] segundos...
uiscale.cancel = Cancelar e sair uiscale.cancel = Cancelar e sair
@@ -1151,8 +1158,8 @@ keybind.select.name = Selecionar
keybind.diagonal_placement.name = Posicionamento Diagonal keybind.diagonal_placement.name = Posicionamento Diagonal
keybind.pick.name = Pegar bloco keybind.pick.name = Pegar bloco
keybind.break_block.name = Quebrar bloco keybind.break_block.name = Quebrar bloco
keybind.select_all_units = Select All Units keybind.select_all_units.name = Select All Units
keybind.select_all_unit_factories = Select All Unit Factories keybind.select_all_unit_factories.name = Select All Unit Factories
keybind.deselect.name = Desmarcar keybind.deselect.name = Desmarcar
keybind.pickupCargo.name = Pegar Carga keybind.pickupCargo.name = Pegar Carga
keybind.dropCargo.name = Soltar Carga keybind.dropCargo.name = Soltar Carga
@@ -2215,6 +2222,7 @@ lst.flushmessage = Display a message on the screen from the text buffer.\nWill w
lst.cutscene = Manipulate the player camera. lst.cutscene = Manipulate the player camera.
lst.setflag = Set a global flag that can be read by all processors. lst.setflag = Set a global flag that can be read by all processors.
lst.getflag = Check if a global flag is set. lst.getflag = Check if a global flag is set.
lst.setprop = Sets a property of a unit or building.
logic.nounitbuild = [red]Unit building logic is not allowed here. logic.nounitbuild = [red]Unit building logic is not allowed here.

View File

@@ -146,11 +146,15 @@ mod.incompatiblemod = [red]Incompatible
mod.blacklisted = [red]Unsupported mod.blacklisted = [red]Unsupported
mod.unmetdependencies = [red]Unmet Dependencies mod.unmetdependencies = [red]Unmet Dependencies
mod.erroredcontent = [scarlet]Erros de conteudo mod.erroredcontent = [scarlet]Erros de conteudo
mod.circulardependencies = [red]Circular Dependencies
mod.incompletedependencies = [red]Incomplete Dependencies
mod.requiresversion.details = Requires game version: [accent]{0}[]\nYour game is outdated. This mod requires a newer version of the game (possibly a beta/alpha release) to function. mod.requiresversion.details = Requires game version: [accent]{0}[]\nYour game is outdated. This mod requires a newer version of the game (possibly a beta/alpha release) to function.
mod.outdatedv7.details = This mod is incompatible with the latest version of the game. The author must update it, and add [accent]minGameVersion: 136[] to its [accent]mod.json[] file. mod.outdatedv7.details = This mod is incompatible with the latest version of the game. The author must update it, and add [accent]minGameVersion: 136[] to its [accent]mod.json[] file.
mod.blacklisted.details = This mod has been manually blacklisted for causing crashes or other issues with this version of the game. Do not use it. mod.blacklisted.details = This mod has been manually blacklisted for causing crashes or other issues with this version of the game. Do not use it.
mod.missingdependencies.details = This mod is missing dependencies: {0} mod.missingdependencies.details = This mod is missing dependencies: {0}
mod.erroredcontent.details = This game caused errors when loading. Ask the mod author to fix them. mod.erroredcontent.details = This game caused errors when loading. Ask the mod author to fix them.
mod.circulardependencies.details = This mod has dependencies that depends on each other.
mod.incompletedependencies.details = This mod is unable to be loaded due to invalid or missing dependencies: {0}.
mod.requiresversion = Requires game version: [red]{0} mod.requiresversion = Requires game version: [red]{0}
mod.errors = Ocorreram erros ao carregar o conteúdo. mod.errors = Ocorreram erros ao carregar o conteúdo.
mod.noerrorplay = [scarlet]Tens mods com erros.[] Desative os mods afetados ou corrija os erros antes de jogar. mod.noerrorplay = [scarlet]Tens mods com erros.[] Desative os mods afetados ou corrija os erros antes de jogar.
@@ -327,6 +331,7 @@ command.repair = Repair
command.rebuild = Rebuild command.rebuild = Rebuild
command.assist = Assist Player command.assist = Assist Player
command.move = Move command.move = Move
command.boost = Boost
openlink = Abrir Ligação openlink = Abrir Ligação
copylink = Copiar ligação copylink = Copiar ligação
back = Voltar back = Voltar
@@ -964,6 +969,8 @@ bullet.splashdamage = [stat]{0}[lightgray] Dano em área ~[stat] {1}[lightgray]
bullet.incendiary = [stat]Incendiário bullet.incendiary = [stat]Incendiário
bullet.homing = [stat]Guiado bullet.homing = [stat]Guiado
bullet.armorpierce = [stat]armor piercing bullet.armorpierce = [stat]armor piercing
bullet.suppression = [stat]{0} sec[lightgray] repair suppression ~ [stat]{1}[lightgray] tiles
bullet.interval = [stat]{0}/sec[lightgray] interval bullets:
bullet.frags = [stat]{0}[lightgray]x frag bullets: bullet.frags = [stat]{0}[lightgray]x frag bullets:
bullet.lightning = [stat]{0}[lightgray]x lightning ~ [stat]{1}[lightgray] damage bullet.lightning = [stat]{0}[lightgray]x lightning ~ [stat]{1}[lightgray] damage
bullet.buildingdamage = [stat]{0}%[lightgray] building damage bullet.buildingdamage = [stat]{0}%[lightgray] building damage
@@ -1077,8 +1084,8 @@ setting.bridgeopacity.name = Opacidade da Ponte
setting.playerchat.name = Mostrar chat em jogo setting.playerchat.name = Mostrar chat em jogo
setting.showweather.name = Show Weather Graphics setting.showweather.name = Show Weather Graphics
setting.hidedisplays.name = Hide Logic Displays setting.hidedisplays.name = Hide Logic Displays
public.confirm = Queres que o teu jogo fique publico?\n[accent]Qualquer jogador vai conseguir juntar-se ao teu jogo.\n[lightgray]Isto pode ser alterado mais tarde in Settings->Game->Public Game Visibility. steam.friendsonly = Friends Only
public.confirm.really = If you want to play with friends, use [green]Invite Friend[] instead of a [scarlet]Public server[]!\nAre you sure you want to make your game [scarlet]public[]? steam.friendsonly.tooltip = Whether only Steam friends will be able to join your game.\nUnchecking this box will make your game public - anyone can join.
public.beta = Observe que as versões beta do jogo não podem criar lobbies públicos. public.beta = Observe que as versões beta do jogo não podem criar lobbies públicos.
uiscale.reset = A escala da IU foi mudada.\nPressione "OK" para confirmar esta escala.\n[scarlet]Revertendo e saindo em[accent] {0}[] settings... uiscale.reset = A escala da IU foi mudada.\nPressione "OK" para confirmar esta escala.\n[scarlet]Revertendo e saindo em[accent] {0}[] settings...
uiscale.cancel = Cancelar e sair uiscale.cancel = Cancelar e sair
@@ -1130,8 +1137,8 @@ keybind.select.name = Selecionar
keybind.diagonal_placement.name = Colocação diagonal keybind.diagonal_placement.name = Colocação diagonal
keybind.pick.name = Pegar bloco keybind.pick.name = Pegar bloco
keybind.break_block.name = Quebrar bloco keybind.break_block.name = Quebrar bloco
keybind.select_all_units = Select All Units keybind.select_all_units.name = Select All Units
keybind.select_all_unit_factories = Select All Unit Factories keybind.select_all_unit_factories.name = Select All Unit Factories
keybind.deselect.name = Deselecionar keybind.deselect.name = Deselecionar
keybind.pickupCargo.name = Pickup Cargo keybind.pickupCargo.name = Pickup Cargo
keybind.dropCargo.name = Drop Cargo keybind.dropCargo.name = Drop Cargo
@@ -2182,6 +2189,7 @@ lst.flushmessage = Display a message on the screen from the text buffer.\nWill w
lst.cutscene = Manipulate the player camera. lst.cutscene = Manipulate the player camera.
lst.setflag = Set a global flag that can be read by all processors. lst.setflag = Set a global flag that can be read by all processors.
lst.getflag = Check if a global flag is set. lst.getflag = Check if a global flag is set.
lst.setprop = Sets a property of a unit or building.
logic.nounitbuild = [red]Unit building logic is not allowed here. logic.nounitbuild = [red]Unit building logic is not allowed here.
lenum.type = Type of building/unit.\ne.g. for any router, this will return [accent]@router[].\nNot a string. lenum.type = Type of building/unit.\ne.g. for any router, this will return [accent]@router[].\nNot a string.
lenum.shoot = Shoot at a position. lenum.shoot = Shoot at a position.

View File

@@ -149,11 +149,15 @@ mod.incompatiblemod = [red]Incompatible
mod.blacklisted = [red]Unsupported mod.blacklisted = [red]Unsupported
mod.unmetdependencies = [red]Unmet Dependencies mod.unmetdependencies = [red]Unmet Dependencies
mod.erroredcontent = [scarlet]Erori de Conținut mod.erroredcontent = [scarlet]Erori de Conținut
mod.circulardependencies = [red]Circular Dependencies
mod.incompletedependencies = [red]Incomplete Dependencies
mod.requiresversion.details = Requires game version: [accent]{0}[]\nYour game is outdated. This mod requires a newer version of the game (possibly a beta/alpha release) to function. mod.requiresversion.details = Requires game version: [accent]{0}[]\nYour game is outdated. This mod requires a newer version of the game (possibly a beta/alpha release) to function.
mod.outdatedv7.details = This mod is incompatible with the latest version of the game. The author must update it, and add [accent]minGameVersion: 136[] to its [accent]mod.json[] file. mod.outdatedv7.details = This mod is incompatible with the latest version of the game. The author must update it, and add [accent]minGameVersion: 136[] to its [accent]mod.json[] file.
mod.blacklisted.details = This mod has been manually blacklisted for causing crashes or other issues with this version of the game. Do not use it. mod.blacklisted.details = This mod has been manually blacklisted for causing crashes or other issues with this version of the game. Do not use it.
mod.missingdependencies.details = This mod is missing dependencies: {0} mod.missingdependencies.details = This mod is missing dependencies: {0}
mod.erroredcontent.details = This game caused errors when loading. Ask the mod author to fix them. mod.erroredcontent.details = This game caused errors when loading. Ask the mod author to fix them.
mod.circulardependencies.details = This mod has dependencies that depends on each other.
mod.incompletedependencies.details = This mod is unable to be loaded due to invalid or missing dependencies: {0}.
mod.requiresversion = Requires game version: [red]{0} mod.requiresversion = Requires game version: [red]{0}
mod.errors = Au apărut erori la încărcarea conținutului. mod.errors = Au apărut erori la încărcarea conținutului.
mod.noerrorplay = [scarlet]Modurile tale au erori.[] Dezactivează modurile afectate sau repară erorile înainte să joci. mod.noerrorplay = [scarlet]Modurile tale au erori.[] Dezactivează modurile afectate sau repară erorile înainte să joci.
@@ -331,6 +335,7 @@ command.repair = Repair
command.rebuild = Rebuild command.rebuild = Rebuild
command.assist = Assist Player command.assist = Assist Player
command.move = Move command.move = Move
command.boost = Boost
openlink = Deschide Linkul openlink = Deschide Linkul
copylink = Copiază Linkul copylink = Copiază Linkul
back = Înapoi back = Înapoi
@@ -976,6 +981,8 @@ bullet.splashdamage = [stat]{0}[lightgray] forță pe raza ~[stat] {1}[lightgray
bullet.incendiary = [stat]incendiar bullet.incendiary = [stat]incendiar
bullet.homing = [stat]cu radar bullet.homing = [stat]cu radar
bullet.armorpierce = [stat]armor piercing bullet.armorpierce = [stat]armor piercing
bullet.suppression = [stat]{0} sec[lightgray] repair suppression ~ [stat]{1}[lightgray] tiles
bullet.interval = [stat]{0}/sec[lightgray] interval bullets:
bullet.frags = [stat]{0}[lightgray]x fragmente: bullet.frags = [stat]{0}[lightgray]x fragmente:
bullet.lightning = [stat]{0}[lightgray]x fulgere ~ [stat]{1}[lightgray] forță bullet.lightning = [stat]{0}[lightgray]x fulgere ~ [stat]{1}[lightgray] forță
bullet.buildingdamage = [stat]{0}%[lightgray] forță/clădire bullet.buildingdamage = [stat]{0}%[lightgray] forță/clădire
@@ -1089,8 +1096,8 @@ setting.bridgeopacity.name = Opacitate Poduri
setting.playerchat.name = Vezi Chat Temporar setting.playerchat.name = Vezi Chat Temporar
setting.showweather.name = Vezi Vremea setting.showweather.name = Vezi Vremea
setting.hidedisplays.name = Hide Logic Displays setting.hidedisplays.name = Hide Logic Displays
public.confirm = Vrei să îți faci jocul public?\n[accent]Oricine va putea intra în jocurile tale.\n[lightgray]Poți schimba asta mai târziu din Setări->Joc->Vizibilitatea Jocurilor Publice. steam.friendsonly = Friends Only
public.confirm.really = Dacă vrei să joci cu prietenii, folosește butonul [green]Invită Prieteni[] în loc de un [scarlet]Server Public[]!\nSigur vrei să-ți faci jocul [scarlet]public[]? steam.friendsonly.tooltip = Whether only Steam friends will be able to join your game.\nUnchecking this box will make your game public - anyone can join.
public.beta = De reținut că versiunile beta ale jocului nu poate face servere publice. public.beta = De reținut că versiunile beta ale jocului nu poate face servere publice.
uiscale.reset = Scara interfeței a fost schimbată.\nApasă "OK" pt a confirma această scară.\n[scarlet]Revin setările și se iese în [accent] {0}[] secunde... uiscale.reset = Scara interfeței a fost schimbată.\nApasă "OK" pt a confirma această scară.\n[scarlet]Revin setările și se iese în [accent] {0}[] secunde...
uiscale.cancel = Anulare și ieșire uiscale.cancel = Anulare și ieșire
@@ -1142,8 +1149,8 @@ keybind.select.name = Selectează/Trage
keybind.diagonal_placement.name = Plasare Diagonală keybind.diagonal_placement.name = Plasare Diagonală
keybind.pick.name = Ia Bloc keybind.pick.name = Ia Bloc
keybind.break_block.name = Distruge Bloc keybind.break_block.name = Distruge Bloc
keybind.select_all_units = Select All Units keybind.select_all_units.name = Select All Units
keybind.select_all_unit_factories = Select All Unit Factories keybind.select_all_unit_factories.name = Select All Unit Factories
keybind.deselect.name = Deselectează keybind.deselect.name = Deselectează
keybind.pickupCargo.name = Ridică Încărcătura keybind.pickupCargo.name = Ridică Încărcătura
keybind.dropCargo.name = Aruncă Încărcătura keybind.dropCargo.name = Aruncă Încărcătura
@@ -2200,6 +2207,7 @@ lst.flushmessage = Display a message on the screen from the text buffer.\nWill w
lst.cutscene = Manipulate the player camera. lst.cutscene = Manipulate the player camera.
lst.setflag = Set a global flag that can be read by all processors. lst.setflag = Set a global flag that can be read by all processors.
lst.getflag = Check if a global flag is set. lst.getflag = Check if a global flag is set.
lst.setprop = Sets a property of a unit or building.
logic.nounitbuild = [red]Nu ai voie să construiești cu unitățile folosind procesoare. logic.nounitbuild = [red]Nu ai voie să construiești cu unitățile folosind procesoare.

View File

@@ -149,11 +149,15 @@ mod.incompatiblemod = [red]Несовместимый
mod.blacklisted = [red]Неподдерживаемый mod.blacklisted = [red]Неподдерживаемый
mod.unmetdependencies = [red]Не найдены зависимости mod.unmetdependencies = [red]Не найдены зависимости
mod.erroredcontent = [scarlet]Ошибки содержимого mod.erroredcontent = [scarlet]Ошибки содержимого
mod.circulardependencies = [red]Цикличные зависимости
mod.incompletedependencies = [red]Недопустимые или отсутствующие зависимости
mod.requiresversion.details = Требуется версия игры: [accent]{0}[]\nВаша игра устарела. Для работы этого мода требуется более новая версия игры (возможно, альфа/бета-версия). mod.requiresversion.details = Требуется версия игры: [accent]{0}[]\nВаша игра устарела. Для работы этого мода требуется более новая версия игры (возможно, альфа/бета-версия).
mod.outdatedv7.details = Этот мод несовместим с последней версией игры. Автор должен обновить его и добавить [accent]minGameVersion: 136[] в файл [accent]mod.json[]. mod.outdatedv7.details = Этот мод несовместим с последней версией игры. Автор должен обновить его и добавить [accent]minGameVersion: 136[] в файл [accent]mod.json[].
mod.blacklisted.details = Этот мод был вручную занесен в черный список из-за того, что он вызывал сбои или другие проблемы с текущей версией игры. Не используйте его. mod.blacklisted.details = Этот мод был вручную занесен в черный список из-за того, что он вызывал сбои или другие проблемы с текущей версией игры. Не используйте его.
mod.missingdependencies.details = Для этого мода отсутствуют зависимости: {0} mod.missingdependencies.details = Для этого мода отсутствуют зависимости: {0}
mod.erroredcontent.details = Этот мод вызвал ошибки при загрузке. Попросите автора мода исправить их. mod.erroredcontent.details = Этот мод вызвал ошибки при загрузке. Попросите автора мода исправить их.
mod.circulardependencies.details = Этот мод имеет зависимости, которые зависят друг от друга.
mod.incompletedependencies.details = Этот мод не может быть загружен из-за недопустимых или отсутствующих зависимостей: {0}.
mod.requiresversion = Требуется версия игры: [red]{0} mod.requiresversion = Требуется версия игры: [red]{0}
mod.errors = Ошибки были вызваны загружаемым содержимым. mod.errors = Ошибки были вызваны загружаемым содержимым.
@@ -331,6 +335,7 @@ command.repair = Ремонтировать
command.rebuild = Восстанавливать command.rebuild = Восстанавливать
command.assist = Помогать игроку command.assist = Помогать игроку
command.move = Двигаться command.move = Двигаться
command.boost = Лететь
openlink = Открыть ссылку openlink = Открыть ссылку
copylink = Скопировать ссылку copylink = Скопировать ссылку
back = Назад back = Назад
@@ -977,6 +982,8 @@ bullet.splashdamage = [stat]{0}[lightgray] урона в радиусе ~[stat]
bullet.incendiary = [stat]зажигательный bullet.incendiary = [stat]зажигательный
bullet.homing = [stat]самонаводящийся bullet.homing = [stat]самонаводящийся
bullet.armorpierce = [stat]бронебойный bullet.armorpierce = [stat]бронебойный
bullet.suppression = [stat]{0} sec[lightgray] repair suppression ~ [stat]{1}[lightgray] tiles
bullet.interval = [stat]{0}/sec[lightgray] interval bullets:
bullet.frags = [stat]{0}[lightgray]x осколочный(ых) снаряд(ов): bullet.frags = [stat]{0}[lightgray]x осколочный(ых) снаряд(ов):
bullet.lightning = [stat]{0}[lightgray]x молнии ~ [stat]{1}[lightgray] урона bullet.lightning = [stat]{0}[lightgray]x молнии ~ [stat]{1}[lightgray] урона
bullet.buildingdamage = [stat]{0}%[lightgray] урона по постройкам bullet.buildingdamage = [stat]{0}%[lightgray] урона по постройкам
@@ -1090,8 +1097,8 @@ setting.bridgeopacity.name = Непрозрачность мостов
setting.playerchat.name = Отображать облака чата над игроками setting.playerchat.name = Отображать облака чата над игроками
setting.showweather.name = Отображать погоду setting.showweather.name = Отображать погоду
setting.hidedisplays.name = Скрыть логические дисплеи setting.hidedisplays.name = Скрыть логические дисплеи
public.confirm = Вы хотите, чтобы ваша игра стала публичной?\n[accent] Любой игрок сможет присоединиться к вашим играм.\n[lightgray]Позже, это можно будет изменить в Настройки->Игра->Общедоступность игры. steam.friendsonly = Friends Only
public.confirm.really = Если вы хотите поиграть с друзьями, то используйте кнопку «[green]Пригласить друзей[]» вместо создания [scarlet]публичного сервера[]!\nВы уверены, что хотите сделать свою игру [scarlet]публичной[]? steam.friendsonly.tooltip = Whether only Steam friends will be able to join your game.\nUnchecking this box will make your game public - anyone can join.
public.beta = Имейте в виду, что бета-версия игры не может делать игры публичными. public.beta = Имейте в виду, что бета-версия игры не может делать игры публичными.
uiscale.reset = Масштаб пользовательского интерфейса был изменён.\nНажмите «ОК» для подтверждения этого масштаба.\n[scarlet]Возврат настроек и выход через[accent] {0}[] секунд… uiscale.reset = Масштаб пользовательского интерфейса был изменён.\nНажмите «ОК» для подтверждения этого масштаба.\n[scarlet]Возврат настроек и выход через[accent] {0}[] секунд…
uiscale.cancel = Отменить & Выйти uiscale.cancel = Отменить & Выйти
@@ -1143,8 +1150,8 @@ keybind.select.name = Выбор/выстрел
keybind.diagonal_placement.name = Диагональное размещение keybind.diagonal_placement.name = Диагональное размещение
keybind.pick.name = Выбрать блок keybind.pick.name = Выбрать блок
keybind.break_block.name = Разрушить блок keybind.break_block.name = Разрушить блок
keybind.select_all_units = Выбрать все единицы keybind.select_all_units.name = Выбрать все единицы
keybind.select_all_unit_factories = Выбрать все заводы единиц keybind.select_all_unit_factories.name = Выбрать все заводы единиц
keybind.deselect.name = Снять выделение keybind.deselect.name = Снять выделение
keybind.pickupCargo.name = Взять груз keybind.pickupCargo.name = Взять груз
keybind.dropCargo.name = Сбросить груз keybind.dropCargo.name = Сбросить груз
@@ -1178,14 +1185,14 @@ mode.editor.name = Редактор
mode.pvp.name = PvP mode.pvp.name = PvP
mode.pvp.description = Сражайтесь против других игроков.\n[gray]Для игры требуется как минимум 2 ядра разного цвета на карте. mode.pvp.description = Сражайтесь против других игроков.\n[gray]Для игры требуется как минимум 2 ядра разного цвета на карте.
mode.attack.name = Атака mode.attack.name = Атака
mode.attack.description = Уничтожьте вражескую базу.\n[gray]Для игры требуется красное ядро на карте. mode.attack.description = Уничтожьте вражескую базу.\n[gray]Для игры требуется вражеское ядро на карте.
mode.custom = Пользовательские правила mode.custom = Пользовательские правила
rules.infiniteresources = Бесконечные ресурсы rules.infiniteresources = Бесконечные ресурсы
rules.onlydepositcore = Разрешен перенос только в ядро rules.onlydepositcore = Разрешен перенос только в ядро
rules.reactorexplosions = Взрывы реакторов rules.reactorexplosions = Взрывы реакторов
rules.coreincinerates = Ядро сжигает избыток ресурсов rules.coreincinerates = Ядро сжигает избыток ресурсов
rules.disableworldprocessors = Отключить мировые процессоры rules.disableworldprocessors = Отключить мировые процессоры
rules.schematic = Схемы разрешены rules.schematic = Разрешить схемы
rules.wavetimer = Интервал волн rules.wavetimer = Интервал волн
rules.wavesending = Отправка волн rules.wavesending = Отправка волн
rules.waves = Волны rules.waves = Волны
@@ -1198,7 +1205,7 @@ rules.rtsminattackweight = Минимальный вес для атаки
rules.cleanupdeadteams = Очистка строений побежденных команд (PvP) rules.cleanupdeadteams = Очистка строений побежденных команд (PvP)
rules.corecapture = Захват ядра после уничтожения rules.corecapture = Захват ядра после уничтожения
rules.polygoncoreprotection = Полигональная защита ядер rules.polygoncoreprotection = Полигональная защита ядер
rules.placerangecheck = Проверка диапазона размещения rules.placerangecheck = Запретить размещение турелей возле вражеских построек
rules.enemyCheat = Бесконечные ресурсы ИИ rules.enemyCheat = Бесконечные ресурсы ИИ
rules.blockhealthmultiplier = Множитель прочности блоков rules.blockhealthmultiplier = Множитель прочности блоков
rules.blockdamagemultiplier = Множитель урона блоков rules.blockdamagemultiplier = Множитель урона блоков
@@ -1213,7 +1220,7 @@ rules.unitcap = Начальный лимит единиц
rules.limitarea = Ограничить область карты rules.limitarea = Ограничить область карты
rules.enemycorebuildradius = Радиус защиты враж. ядер:[lightgray] (блок.) rules.enemycorebuildradius = Радиус защиты враж. ядер:[lightgray] (блок.)
rules.wavespacing = Интервал волн:[lightgray] (сек) rules.wavespacing = Интервал волн:[lightgray] (сек)
rules.initialwavespacing = Начальное расстояние между волнами:[lightgray] (сек) rules.initialwavespacing = Время до первой волны:[lightgray] (сек)
rules.buildcostmultiplier = Множитель затрат на строительство rules.buildcostmultiplier = Множитель затрат на строительство
rules.buildspeedmultiplier = Множитель скорости строительства rules.buildspeedmultiplier = Множитель скорости строительства
rules.deconstructrefundmultiplier = Множитель возврата ресурсов при разборке rules.deconstructrefundmultiplier = Множитель возврата ресурсов при разборке
@@ -2175,7 +2182,7 @@ lst.getlink = Получает соединение процессора по и
lst.control = Контролирует блок. lst.control = Контролирует блок.
lst.radar = Обнаруживает единицы вокруг постройки с заданным радиусом. lst.radar = Обнаруживает единицы вокруг постройки с заданным радиусом.
lst.sensor = Получает данные из постройки или единицы. lst.sensor = Получает данные из постройки или единицы.
lst.set = Устанавливает переменную. lst.set = Задаёт значение переменной.
lst.operation = Совершает операцию над 1-2 переменными. lst.operation = Совершает операцию над 1-2 переменными.
lst.end = Переходит к началу стека операций. lst.end = Переходит к началу стека операций.
lst.wait = Ждёт определённое количество секунд. lst.wait = Ждёт определённое количество секунд.
@@ -2196,10 +2203,11 @@ lst.setrate = Устанавливает скорость выполнения
lst.fetch = Ищет единицы, ядра, игроков или зданий по индексу.\nИндексы начинаются с 0 и заканчиваются возвращаемым числом. lst.fetch = Ищет единицы, ядра, игроков или зданий по индексу.\nИндексы начинаются с 0 и заканчиваются возвращаемым числом.
lst.packcolor = Упаковывает компоненты RGBA [0, 1] в один номер для рисования или установки правил. lst.packcolor = Упаковывает компоненты RGBA [0, 1] в один номер для рисования или установки правил.
lst.setrule = Устанавливает игровое правило. lst.setrule = Устанавливает игровое правило.
lst.flushmessage = Отображает сообщение на экране из текстового буфера.\nБудет ожидать окончание предыдущего сообщения. lst.flushmessage = Отображает сообщение из текстового буфера на экране игрока.\nБудет ожидать окончание предыдущего сообщения.
lst.cutscene = Управляет камерой игрока. lst.cutscene = Управляет камерой игрока.
lst.setflag = Устанавливает глобальный флаг, который может быть прочитан всеми процессорами. lst.setflag = Устанавливает глобальный флаг, который может быть прочитан всеми процессорами.
lst.getflag = Проверяет, установлен ли глобальный флаг. lst.getflag = Проверяет, установлен ли глобальный флаг.
lst.setprop = Sets a property of a unit or building.
logic.nounitbuild = [red]Строительство с помощью процессоров здесь запрещено. logic.nounitbuild = [red]Строительство с помощью процессоров здесь запрещено.

View File

@@ -149,11 +149,15 @@ mod.incompatiblemod = [red]Nije Podesan
mod.blacklisted = [red]Nema Podršku mod.blacklisted = [red]Nema Podršku
mod.unmetdependencies = [red]Nedostaju Zavisni Modovi mod.unmetdependencies = [red]Nedostaju Zavisni Modovi
mod.erroredcontent = [scarlet]Greška u sadržaju mod.erroredcontent = [scarlet]Greška u sadržaju
mod.circulardependencies = [red]Circular Dependencies
mod.incompletedependencies = [red]Incomplete Dependencies
mod.requiresversion.details = Zahteva verziju igre: [accent]{0}[]\nVaša igra je zastarela. Ovaj mod zahteva novu verziju igre (po mogućstvu alfa/beta izdanje) da bi funkcionisala. mod.requiresversion.details = Zahteva verziju igre: [accent]{0}[]\nVaša igra je zastarela. Ovaj mod zahteva novu verziju igre (po mogućstvu alfa/beta izdanje) da bi funkcionisala.
mod.outdatedv7.details = Ovaj mod nije podesan sa novijom verzijom igre. Autor mora da ga ažurira, i da doda [accent]minGameVersion: 136[] u [accent]mod.json[] datoteku. mod.outdatedv7.details = Ovaj mod nije podesan sa novijom verzijom igre. Autor mora da ga ažurira, i da doda [accent]minGameVersion: 136[] u [accent]mod.json[] datoteku.
mod.blacklisted.details = Ovaj mod nema podršku zato što stalno ispada ili prave razne greške u ovoj verziji igre. Ne koristi te ga. mod.blacklisted.details = Ovaj mod nema podršku zato što stalno ispada ili prave razne greške u ovoj verziji igre. Ne koristi te ga.
mod.missingdependencies.details = Ovaj mod nema sledeće zavisne modove: {0} mod.missingdependencies.details = Ovaj mod nema sledeće zavisne modove: {0}
mod.erroredcontent.details = Ova igra sadrži greške. Pitajte autora moda da ih popravi. mod.erroredcontent.details = Ova igra sadrži greške. Pitajte autora moda da ih popravi.
mod.circulardependencies.details = This mod has dependencies that depends on each other.
mod.incompletedependencies.details = This mod is unable to be loaded due to invalid or missing dependencies: {0}.
mod.requiresversion = Requires game version: [red]{0} mod.requiresversion = Requires game version: [red]{0}
mod.errors = Greške su nastale tokom učitavanja sadržaja. mod.errors = Greške su nastale tokom učitavanja sadržaja.
mod.noerrorplay = [scarlet]Imate modove sa greškama.[] Onemogućite te modove, ili ispravite greške. mod.noerrorplay = [scarlet]Imate modove sa greškama.[] Onemogućite te modove, ili ispravite greške.
@@ -331,6 +335,7 @@ command.repair = Popravljaj
command.rebuild = Ponovna Gradnja command.rebuild = Ponovna Gradnja
command.assist = Pomoć Igraču command.assist = Pomoć Igraču
command.move = Kretanje command.move = Kretanje
command.boost = Boost
openlink = Otvori Link openlink = Otvori Link
copylink = Iskopiraj Link copylink = Iskopiraj Link
back = Nazad back = Nazad
@@ -978,6 +983,8 @@ bullet.splashdamage = [stat]{0}[lightgray] oblasna šteta ~[stat] {1}[lightgray]
bullet.incendiary = [stat]zapaljiv bullet.incendiary = [stat]zapaljiv
bullet.homing = [stat]samonavođenje bullet.homing = [stat]samonavođenje
bullet.armorpierce = [stat]proboj oklopa bullet.armorpierce = [stat]proboj oklopa
bullet.suppression = [stat]{0} sec[lightgray] repair suppression ~ [stat]{1}[lightgray] tiles
bullet.interval = [stat]{0}/sec[lightgray] interval bullets:
bullet.frags = [stat]{0}[lightgray]x šrapnela: bullet.frags = [stat]{0}[lightgray]x šrapnela:
bullet.lightning = [stat]{0}[lightgray]x munja ~ [stat]{1}[lightgray] štete bullet.lightning = [stat]{0}[lightgray]x munja ~ [stat]{1}[lightgray] štete
bullet.buildingdamage = [stat]{0}%[lightgray] šteta za strukture bullet.buildingdamage = [stat]{0}%[lightgray] šteta za strukture
@@ -1091,8 +1098,8 @@ setting.bridgeopacity.name = Prozirnost Mostova
setting.playerchat.name = Prikazuj Čet Mehure Igrača setting.playerchat.name = Prikazuj Čet Mehure Igrača
setting.showweather.name = Prikazuj Grafiku Vremena setting.showweather.name = Prikazuj Grafiku Vremena
setting.hidedisplays.name = Sakrij Logičke Displeje setting.hidedisplays.name = Sakrij Logičke Displeje
public.confirm = Da li ste sigurni da želite da vam igra bude javna?\n[accent]Svako će moći se pridruži vašoj igri.\n[lightgray]Ovo se može posle promeniti u Podešavanja->Igra->Vidljivost Javne Igre. steam.friendsonly = Friends Only
public.confirm.really = Ako hoćete da igrate sa prijateljima, koristite [green]Pozovi Prijatelje[] umesto [scarlet]Javnog servera[]!\nDa li ste sigurni da želite da vam igra bude [scarlet]javna[]? steam.friendsonly.tooltip = Whether only Steam friends will be able to join your game.\nUnchecking this box will make your game public - anyone can join.
public.beta = Note that beta versions of the game cannot make public lobbies. public.beta = Note that beta versions of the game cannot make public lobbies.
uiscale.reset = UI skala se promenija.\nPritisnite "OK" da porvdite ovu skali.\n[scarlet]Vraćanje i izlazak za[accent] {0}[] sekundi... uiscale.reset = UI skala se promenija.\nPritisnite "OK" da porvdite ovu skali.\n[scarlet]Vraćanje i izlazak za[accent] {0}[] sekundi...
uiscale.cancel = Obustavi i Izađi uiscale.cancel = Obustavi i Izađi
@@ -1144,8 +1151,8 @@ keybind.select.name = Izaberi/Pucaj
keybind.diagonal_placement.name = Diagonalo Postavljanje keybind.diagonal_placement.name = Diagonalo Postavljanje
keybind.pick.name = Izaberi Blok keybind.pick.name = Izaberi Blok
keybind.break_block.name = Razori Blok keybind.break_block.name = Razori Blok
keybind.select_all_units = Izaberi Sve Jedinice keybind.select_all_units.name = Izaberi Sve Jedinice
keybind.select_all_unit_factories = Izaberi Sve Fabrike Jedinica keybind.select_all_unit_factories.name = Izaberi Sve Fabrike Jedinica
keybind.deselect.name = Deselect keybind.deselect.name = Deselect
keybind.pickupCargo.name = Uzmi Tovar keybind.pickupCargo.name = Uzmi Tovar
keybind.dropCargo.name = Spusti Tovar keybind.dropCargo.name = Spusti Tovar
@@ -2203,6 +2210,7 @@ lst.flushmessage = Display a message on the screen from the text buffer.\nWill w
lst.cutscene = Manipulate the player camera. lst.cutscene = Manipulate the player camera.
lst.setflag = Set a global flag that can be read by all processors. lst.setflag = Set a global flag that can be read by all processors.
lst.getflag = Check if a global flag is set. lst.getflag = Check if a global flag is set.
lst.setprop = Sets a property of a unit or building.
logic.nounitbuild = [red]Unit building logic is not allowed here. logic.nounitbuild = [red]Unit building logic is not allowed here.

View File

@@ -146,11 +146,15 @@ mod.incompatiblemod = [red]Incompatible
mod.blacklisted = [red]Unsupported mod.blacklisted = [red]Unsupported
mod.unmetdependencies = [red]Unmet Dependencies mod.unmetdependencies = [red]Unmet Dependencies
mod.erroredcontent = [scarlet]Innehålls Fel mod.erroredcontent = [scarlet]Innehålls Fel
mod.circulardependencies = [red]Circular Dependencies
mod.incompletedependencies = [red]Incomplete Dependencies
mod.requiresversion.details = Requires game version: [accent]{0}[]\nYour game is outdated. This mod requires a newer version of the game (possibly a beta/alpha release) to function. mod.requiresversion.details = Requires game version: [accent]{0}[]\nYour game is outdated. This mod requires a newer version of the game (possibly a beta/alpha release) to function.
mod.outdatedv7.details = This mod is incompatible with the latest version of the game. The author must update it, and add [accent]minGameVersion: 136[] to its [accent]mod.json[] file. mod.outdatedv7.details = This mod is incompatible with the latest version of the game. The author must update it, and add [accent]minGameVersion: 136[] to its [accent]mod.json[] file.
mod.blacklisted.details = This mod has been manually blacklisted for causing crashes or other issues with this version of the game. Do not use it. mod.blacklisted.details = This mod has been manually blacklisted for causing crashes or other issues with this version of the game. Do not use it.
mod.missingdependencies.details = This mod is missing dependencies: {0} mod.missingdependencies.details = This mod is missing dependencies: {0}
mod.erroredcontent.details = This game caused errors when loading. Ask the mod author to fix them. mod.erroredcontent.details = This game caused errors when loading. Ask the mod author to fix them.
mod.circulardependencies.details = This mod has dependencies that depends on each other.
mod.incompletedependencies.details = This mod is unable to be loaded due to invalid or missing dependencies: {0}.
mod.requiresversion = Requires game version: [red]{0} mod.requiresversion = Requires game version: [red]{0}
mod.errors = Fel har inträffat under laddning av innehåll. mod.errors = Fel har inträffat under laddning av innehåll.
mod.noerrorplay = [scarlet]Du har moddar med fel.[] Stäng antingen av de drabbade moddarna eller fixa felen innan du spelar. mod.noerrorplay = [scarlet]Du har moddar med fel.[] Stäng antingen av de drabbade moddarna eller fixa felen innan du spelar.
@@ -327,6 +331,7 @@ command.repair = Repair
command.rebuild = Rebuild command.rebuild = Rebuild
command.assist = Assist Player command.assist = Assist Player
command.move = Move command.move = Move
command.boost = Boost
openlink = Öppna Länk openlink = Öppna Länk
copylink = Kopiera Länk copylink = Kopiera Länk
back = Tillbaka back = Tillbaka
@@ -964,6 +969,8 @@ bullet.splashdamage = [stat]{0}[lightgray] area dmg ~[stat] {1}[lightgray] tiles
bullet.incendiary = [stat]incendiary bullet.incendiary = [stat]incendiary
bullet.homing = [stat]homing bullet.homing = [stat]homing
bullet.armorpierce = [stat]armor piercing bullet.armorpierce = [stat]armor piercing
bullet.suppression = [stat]{0} sec[lightgray] repair suppression ~ [stat]{1}[lightgray] tiles
bullet.interval = [stat]{0}/sec[lightgray] interval bullets:
bullet.frags = [stat]{0}[lightgray]x frag bullets: bullet.frags = [stat]{0}[lightgray]x frag bullets:
bullet.lightning = [stat]{0}[lightgray]x lightning ~ [stat]{1}[lightgray] damage bullet.lightning = [stat]{0}[lightgray]x lightning ~ [stat]{1}[lightgray] damage
bullet.buildingdamage = [stat]{0}%[lightgray] building damage bullet.buildingdamage = [stat]{0}%[lightgray] building damage
@@ -1077,8 +1084,8 @@ setting.bridgeopacity.name = Bridge Opacity
setting.playerchat.name = Visa setting.playerchat.name = Visa
setting.showweather.name = Show Weather Graphics setting.showweather.name = Show Weather Graphics
setting.hidedisplays.name = Hide Logic Displays setting.hidedisplays.name = Hide Logic Displays
public.confirm = Do you want to make your game public?\n[accent]Anyone will be able to join your games.\n[lightgray]This can be changed later in Settings->Game->Public Game Visibility. steam.friendsonly = Friends Only
public.confirm.really = If you want to play with friends, use [green]Invite Friend[] instead of a [scarlet]Public server[]!\nAre you sure you want to make your game [scarlet]public[]? steam.friendsonly.tooltip = Whether only Steam friends will be able to join your game.\nUnchecking this box will make your game public - anyone can join.
public.beta = Note that beta versions of the game cannot make public lobbies. public.beta = Note that beta versions of the game cannot make public lobbies.
uiscale.reset = UI-skalan har ändrats.\nTryck "OK" för att använda den här skalan.\n[scarlet]Avslutar och återställer om[accent] {0}[] sekunder... uiscale.reset = UI-skalan har ändrats.\nTryck "OK" för att använda den här skalan.\n[scarlet]Avslutar och återställer om[accent] {0}[] sekunder...
uiscale.cancel = Avbryt och Avsluta uiscale.cancel = Avbryt och Avsluta
@@ -1130,8 +1137,8 @@ keybind.select.name = Select/Shoot
keybind.diagonal_placement.name = Diagonal Placement keybind.diagonal_placement.name = Diagonal Placement
keybind.pick.name = Pick Block keybind.pick.name = Pick Block
keybind.break_block.name = Break Block keybind.break_block.name = Break Block
keybind.select_all_units = Select All Units keybind.select_all_units.name = Select All Units
keybind.select_all_unit_factories = Select All Unit Factories keybind.select_all_unit_factories.name = Select All Unit Factories
keybind.deselect.name = Deselect keybind.deselect.name = Deselect
keybind.pickupCargo.name = Pickup Cargo keybind.pickupCargo.name = Pickup Cargo
keybind.dropCargo.name = Drop Cargo keybind.dropCargo.name = Drop Cargo
@@ -2182,6 +2189,7 @@ lst.flushmessage = Display a message on the screen from the text buffer.\nWill w
lst.cutscene = Manipulate the player camera. lst.cutscene = Manipulate the player camera.
lst.setflag = Set a global flag that can be read by all processors. lst.setflag = Set a global flag that can be read by all processors.
lst.getflag = Check if a global flag is set. lst.getflag = Check if a global flag is set.
lst.setprop = Sets a property of a unit or building.
logic.nounitbuild = [red]Unit building logic is not allowed here. logic.nounitbuild = [red]Unit building logic is not allowed here.
lenum.type = Type of building/unit.\ne.g. for any router, this will return [accent]@router[].\nNot a string. lenum.type = Type of building/unit.\ne.g. for any router, this will return [accent]@router[].\nNot a string.
lenum.shoot = Shoot at a position. lenum.shoot = Shoot at a position.

View File

@@ -149,11 +149,15 @@ mod.incompatiblemod = [red]Incompatible
mod.blacklisted = [red]Unsupported mod.blacklisted = [red]Unsupported
mod.unmetdependencies = [red]Unmet Dependencies mod.unmetdependencies = [red]Unmet Dependencies
mod.erroredcontent = [scarlet]เนื้อหาผิดพลาด mod.erroredcontent = [scarlet]เนื้อหาผิดพลาด
mod.circulardependencies = [red]Circular Dependencies
mod.incompletedependencies = [red]Incomplete Dependencies
mod.requiresversion.details = Requires game version: [accent]{0}[]\nYour game is outdated. This mod requires a newer version of the game (possibly a beta/alpha release) to function. mod.requiresversion.details = Requires game version: [accent]{0}[]\nYour game is outdated. This mod requires a newer version of the game (possibly a beta/alpha release) to function.
mod.outdatedv7.details = This mod is incompatible with the latest version of the game. The author must update it, and add [accent]minGameVersion: 136[] to its [accent]mod.json[] file. mod.outdatedv7.details = This mod is incompatible with the latest version of the game. The author must update it, and add [accent]minGameVersion: 136[] to its [accent]mod.json[] file.
mod.blacklisted.details = This mod has been manually blacklisted for causing crashes or other issues with this version of the game. Do not use it. mod.blacklisted.details = This mod has been manually blacklisted for causing crashes or other issues with this version of the game. Do not use it.
mod.missingdependencies.details = This mod is missing dependencies: {0} mod.missingdependencies.details = This mod is missing dependencies: {0}
mod.erroredcontent.details = This game caused errors when loading. Ask the mod author to fix them. mod.erroredcontent.details = This game caused errors when loading. Ask the mod author to fix them.
mod.circulardependencies.details = This mod has dependencies that depends on each other.
mod.incompletedependencies.details = This mod is unable to be loaded due to invalid or missing dependencies: {0}.
mod.requiresversion = Requires game version: [red]{0} mod.requiresversion = Requires game version: [red]{0}
mod.errors = มีข้อผิดพลาดเกิดขึ้นระหว่างโหลดเนื้อหา mod.errors = มีข้อผิดพลาดเกิดขึ้นระหว่างโหลดเนื้อหา
mod.noerrorplay = [scarlet]คุณมีม็อดที่มีข้อผิดพลาด[] กรุณาปิดม็อดนั้นๆ หรือแก้ไขข้อผิดพลาดก่อนที่จะเล่น mod.noerrorplay = [scarlet]คุณมีม็อดที่มีข้อผิดพลาด[] กรุณาปิดม็อดนั้นๆ หรือแก้ไขข้อผิดพลาดก่อนที่จะเล่น
@@ -331,6 +335,7 @@ command.repair = Repair
command.rebuild = Rebuild command.rebuild = Rebuild
command.assist = Assist Player command.assist = Assist Player
command.move = Move command.move = Move
command.boost = Boost
openlink = เปิดลิ้งค์ openlink = เปิดลิ้งค์
copylink = คัดลอกลิ้งค์ copylink = คัดลอกลิ้งค์
back = กลับ back = กลับ
@@ -977,6 +982,8 @@ bullet.splashdamage = [stat]{0}[lightgray] ดาเมจกระจาย ~[s
bullet.incendiary = [stat]ติดไฟ bullet.incendiary = [stat]ติดไฟ
bullet.homing = [stat]ติดตามตัว bullet.homing = [stat]ติดตามตัว
bullet.armorpierce = [stat]เจาะเกราะ bullet.armorpierce = [stat]เจาะเกราะ
bullet.suppression = [stat]{0} sec[lightgray] repair suppression ~ [stat]{1}[lightgray] tiles
bullet.interval = [stat]{0}/sec[lightgray] interval bullets:
bullet.frags = [stat]{0}[lightgray]x กระจาย กระสุน: bullet.frags = [stat]{0}[lightgray]x กระจาย กระสุน:
bullet.lightning = [stat]{0}[lightgray]x สายฟ้า ~ [stat]{1}[lightgray] ดาเมจ bullet.lightning = [stat]{0}[lightgray]x สายฟ้า ~ [stat]{1}[lightgray] ดาเมจ
bullet.buildingdamage = [lightgray]ดาเมจต่อสิ่งก่อสร้าง [stat]{0}%[lightgray] bullet.buildingdamage = [lightgray]ดาเมจต่อสิ่งก่อสร้าง [stat]{0}%[lightgray]
@@ -1090,8 +1097,8 @@ setting.bridgeopacity.name = ความโปร่งแสงของสะ
setting.playerchat.name = แสดงบับเบิ้ลแชทของผู้เล่น setting.playerchat.name = แสดงบับเบิ้ลแชทของผู้เล่น
setting.showweather.name = แสดงแกรฟฟิกสภาพอากาศ setting.showweather.name = แสดงแกรฟฟิกสภาพอากาศ
setting.hidedisplays.name = ซ่อนหน้าจอลอจิก setting.hidedisplays.name = ซ่อนหน้าจอลอจิก
public.confirm = คุณต้องการให้เกมของคุณเปิดเป็นสาธารณะหรือไม่?\n[accent]ทุกคนจะสามารถเข้าร่วมเกมของคุณได้\n[lightgray]คุณสามารถเปลี่ยนการตั้งค่านี้ได้ที่ ตั้งค่า->เกม->การมองเห็นเซิร์ฟเวอร์สาธารณะ steam.friendsonly = Friends Only
public.confirm.really = หากคุณอยากเล่นกับเล่นกับเพื่อน ใช้[green]ชวนเพื่อน[]ดีกว่า แทนที่จะใช้[scarlet]เซิร์ฟเวอร์สาธารณะ[]!\nคุณแน่ใจนะว่าจะเปลี่ยนเกมคุณเป็น[scarlet]สาธารณะ[]? steam.friendsonly.tooltip = Whether only Steam friends will be able to join your game.\nUnchecking this box will make your game public - anyone can join.
public.beta = เกมเวอร์ชั่นเบต้าไม่สามารถเปิดเซิร์ฟเวอร์สาธารณะได้ public.beta = เกมเวอร์ชั่นเบต้าไม่สามารถเปิดเซิร์ฟเวอร์สาธารณะได้
uiscale.reset = อัตราขนาดของ UI ได้มีการเปลี่ยนแปลง\nกด "โอเค" เพื่อยืนยันขนาด UI นี้\n[scarlet]จะเปลี่ยนกลับไปเป็นขนาดเดิมและออกในอีก[accent] {0}[] วินาที... uiscale.reset = อัตราขนาดของ UI ได้มีการเปลี่ยนแปลง\nกด "โอเค" เพื่อยืนยันขนาด UI นี้\n[scarlet]จะเปลี่ยนกลับไปเป็นขนาดเดิมและออกในอีก[accent] {0}[] วินาที...
uiscale.cancel = ยกเลิกและออก uiscale.cancel = ยกเลิกและออก
@@ -1143,8 +1150,8 @@ keybind.select.name = เลือก/ยิง
keybind.diagonal_placement.name = วางเป็นแนวทแยง keybind.diagonal_placement.name = วางเป็นแนวทแยง
keybind.pick.name = เลือกบล็อก keybind.pick.name = เลือกบล็อก
keybind.break_block.name = ทุบบล็อก keybind.break_block.name = ทุบบล็อก
keybind.select_all_units = Select All Units keybind.select_all_units.name = Select All Units
keybind.select_all_unit_factories = Select All Unit Factories keybind.select_all_unit_factories.name = Select All Unit Factories
keybind.deselect.name = ยกเลิกการเลือก keybind.deselect.name = ยกเลิกการเลือก
keybind.pickupCargo.name = ยกสิ่งบรรทุกขึ้น keybind.pickupCargo.name = ยกสิ่งบรรทุกขึ้น
keybind.dropCargo.name = วางสิ่งบรรทุกลง keybind.dropCargo.name = วางสิ่งบรรทุกลง
@@ -2201,6 +2208,7 @@ lst.flushmessage = แสดงข้อความบนหน้าจอจ
lst.cutscene = ควบคุมมุมกล้องของผู้เล่น lst.cutscene = ควบคุมมุมกล้องของผู้เล่น
lst.setflag = เซ็ตธงทั่วโลกที่ตัวประมวลผลทุกตัวสามารถอ่านค่าได้ lst.setflag = เซ็ตธงทั่วโลกที่ตัวประมวลผลทุกตัวสามารถอ่านค่าได้
lst.getflag = เช็กว่าธงทั่วโลกนั้นเซ็ตอยู่รึเปล่า lst.getflag = เช็กว่าธงทั่วโลกนั้นเซ็ตอยู่รึเปล่า
lst.setprop = Sets a property of a unit or building.
logic.nounitbuild = [red]ไม่อนุญาตให้ใช้ลอจิกควบคุมให้ยูนิตสร้างที่นี่ logic.nounitbuild = [red]ไม่อนุญาตให้ใช้ลอจิกควบคุมให้ยูนิตสร้างที่นี่

View File

@@ -146,11 +146,15 @@ mod.incompatiblemod = [red]Incompatible
mod.blacklisted = [red]Unsupported mod.blacklisted = [red]Unsupported
mod.unmetdependencies = [red]Unmet Dependencies mod.unmetdependencies = [red]Unmet Dependencies
mod.erroredcontent = [scarlet]Content Errors mod.erroredcontent = [scarlet]Content Errors
mod.circulardependencies = [red]Circular Dependencies
mod.incompletedependencies = [red]Incomplete Dependencies
mod.requiresversion.details = Requires game version: [accent]{0}[]\nYour game is outdated. This mod requires a newer version of the game (possibly a beta/alpha release) to function. mod.requiresversion.details = Requires game version: [accent]{0}[]\nYour game is outdated. This mod requires a newer version of the game (possibly a beta/alpha release) to function.
mod.outdatedv7.details = This mod is incompatible with the latest version of the game. The author must update it, and add [accent]minGameVersion: 136[] to its [accent]mod.json[] file. mod.outdatedv7.details = This mod is incompatible with the latest version of the game. The author must update it, and add [accent]minGameVersion: 136[] to its [accent]mod.json[] file.
mod.blacklisted.details = This mod has been manually blacklisted for causing crashes or other issues with this version of the game. Do not use it. mod.blacklisted.details = This mod has been manually blacklisted for causing crashes or other issues with this version of the game. Do not use it.
mod.missingdependencies.details = This mod is missing dependencies: {0} mod.missingdependencies.details = This mod is missing dependencies: {0}
mod.erroredcontent.details = This game caused errors when loading. Ask the mod author to fix them. mod.erroredcontent.details = This game caused errors when loading. Ask the mod author to fix them.
mod.circulardependencies.details = This mod has dependencies that depends on each other.
mod.incompletedependencies.details = This mod is unable to be loaded due to invalid or missing dependencies: {0}.
mod.requiresversion = Requires game version: [red]{0} mod.requiresversion = Requires game version: [red]{0}
mod.errors = Errors have occurred loading content. mod.errors = Errors have occurred loading content.
mod.noerrorplay = [scarlet]You have mods with errors.[] Either disable the affected mods or fix the errors before playing. mod.noerrorplay = [scarlet]You have mods with errors.[] Either disable the affected mods or fix the errors before playing.
@@ -327,6 +331,7 @@ command.repair = Repair
command.rebuild = Rebuild command.rebuild = Rebuild
command.assist = Assist Player command.assist = Assist Player
command.move = Move command.move = Move
command.boost = Boost
openlink = Linki ac openlink = Linki ac
copylink = Linki kopyala copylink = Linki kopyala
back = Geri don back = Geri don
@@ -964,6 +969,8 @@ bullet.splashdamage = [stat]{0}[lightgray] area dmg ~[stat] {1}[lightgray] tiles
bullet.incendiary = [stat]incendiary bullet.incendiary = [stat]incendiary
bullet.homing = [stat]homing bullet.homing = [stat]homing
bullet.armorpierce = [stat]armor piercing bullet.armorpierce = [stat]armor piercing
bullet.suppression = [stat]{0} sec[lightgray] repair suppression ~ [stat]{1}[lightgray] tiles
bullet.interval = [stat]{0}/sec[lightgray] interval bullets:
bullet.frags = [stat]{0}[lightgray]x frag bullets: bullet.frags = [stat]{0}[lightgray]x frag bullets:
bullet.lightning = [stat]{0}[lightgray]x lightning ~ [stat]{1}[lightgray] damage bullet.lightning = [stat]{0}[lightgray]x lightning ~ [stat]{1}[lightgray] damage
bullet.buildingdamage = [stat]{0}%[lightgray] building damage bullet.buildingdamage = [stat]{0}%[lightgray] building damage
@@ -1077,8 +1084,8 @@ setting.bridgeopacity.name = Bridge Opacity
setting.playerchat.name = Display In-Game Chat setting.playerchat.name = Display In-Game Chat
setting.showweather.name = Show Weather Graphics setting.showweather.name = Show Weather Graphics
setting.hidedisplays.name = Hide Logic Displays setting.hidedisplays.name = Hide Logic Displays
public.confirm = Do you want to make your game public?\n[accent]Anyone will be able to join your games.\n[lightgray]This can be changed later in Settings->Game->Public Game Visibility. steam.friendsonly = Friends Only
public.confirm.really = If you want to play with friends, use [green]Invite Friend[] instead of a [scarlet]Public server[]!\nAre you sure you want to make your game [scarlet]public[]? steam.friendsonly.tooltip = Whether only Steam friends will be able to join your game.\nUnchecking this box will make your game public - anyone can join.
public.beta = Note that beta versions of the game cannot make public lobbies. public.beta = Note that beta versions of the game cannot make public lobbies.
uiscale.reset = UI scale has been changed.\nPress "OK" to confirm this scale.\n[scarlet]Reverting and exiting in[accent] {0}[] settings... uiscale.reset = UI scale has been changed.\nPress "OK" to confirm this scale.\n[scarlet]Reverting and exiting in[accent] {0}[] settings...
uiscale.cancel = Cancel & Exit uiscale.cancel = Cancel & Exit
@@ -1130,8 +1137,8 @@ keybind.select.name = Sec/silahi sik
keybind.diagonal_placement.name = Diagonal Placement keybind.diagonal_placement.name = Diagonal Placement
keybind.pick.name = Pick Block keybind.pick.name = Pick Block
keybind.break_block.name = Break Block keybind.break_block.name = Break Block
keybind.select_all_units = Select All Units keybind.select_all_units.name = Select All Units
keybind.select_all_unit_factories = Select All Unit Factories keybind.select_all_unit_factories.name = Select All Unit Factories
keybind.deselect.name = Eldeki yapiyi birak keybind.deselect.name = Eldeki yapiyi birak
keybind.pickupCargo.name = Pickup Cargo keybind.pickupCargo.name = Pickup Cargo
keybind.dropCargo.name = Drop Cargo keybind.dropCargo.name = Drop Cargo
@@ -2182,6 +2189,7 @@ lst.flushmessage = Display a message on the screen from the text buffer.\nWill w
lst.cutscene = Manipulate the player camera. lst.cutscene = Manipulate the player camera.
lst.setflag = Set a global flag that can be read by all processors. lst.setflag = Set a global flag that can be read by all processors.
lst.getflag = Check if a global flag is set. lst.getflag = Check if a global flag is set.
lst.setprop = Sets a property of a unit or building.
logic.nounitbuild = [red]Unit building logic is not allowed here. logic.nounitbuild = [red]Unit building logic is not allowed here.
lenum.type = Type of building/unit.\ne.g. for any router, this will return [accent]@router[].\nNot a string. lenum.type = Type of building/unit.\ne.g. for any router, this will return [accent]@router[].\nNot a string.
lenum.shoot = Shoot at a position. lenum.shoot = Shoot at a position.

View File

@@ -149,11 +149,15 @@ mod.incompatiblemod = [red]Sürüm Uyuşmazlığı
mod.blacklisted = [red]Desteklenmeyen Sürüm mod.blacklisted = [red]Desteklenmeyen Sürüm
mod.unmetdependencies = [red]Uyuşmayan Modlar. mod.unmetdependencies = [red]Uyuşmayan Modlar.
mod.erroredcontent = [scarlet]İçerik hatası. mod.erroredcontent = [scarlet]İçerik hatası.
mod.circulardependencies = [red]Circular Dependencies
mod.incompletedependencies = [red]Incomplete Dependencies
mod.requiresversion.details = [accent]{0}[] oyun sürümü gerekiyor.\nSürümün eski. Bu mod, çalışmak için oyunun daha yeni bir sürümünü gerektiriyor (büyük ihtimal alpha/beta). mod.requiresversion.details = [accent]{0}[] oyun sürümü gerekiyor.\nSürümün eski. Bu mod, çalışmak için oyunun daha yeni bir sürümünü gerektiriyor (büyük ihtimal alpha/beta).
mod.outdatedv7.details = Bu mod, oyunun en son sürümüyle uyumsuz. Modun yapmıcısının [accent]mod.json[] dosyasına, [accent]minGameVersion: 136[] eklemesi gerekiyor. mod.outdatedv7.details = Bu mod, oyunun en son sürümüyle uyumsuz. Modun yapmıcısının [accent]mod.json[] dosyasına, [accent]minGameVersion: 136[] eklemesi gerekiyor.
mod.blacklisted.details = Bu mod, oyunun bu sürümüyle hata verdiğinden veya başka sorunlar ötürü kara listeye alınmıştır. [#ff]KULLANMAYINIZ! mod.blacklisted.details = Bu mod, oyunun bu sürümüyle hata verdiğinden veya başka sorunlar ötürü kara listeye alınmıştır. [#ff]KULLANMAYINIZ!
mod.missingdependencies.details = Bu Mod, şu ek modları gerektiriyor: {0} mod.missingdependencies.details = Bu Mod, şu ek modları gerektiriyor: {0}
mod.erroredcontent.details = Bu mod yüklenirken hata veriyor, yapımcıdan hataları düzeltmesini isteyin. mod.erroredcontent.details = Bu mod yüklenirken hata veriyor, yapımcıdan hataları düzeltmesini isteyin.
mod.circulardependencies.details = This mod has dependencies that depends on each other.
mod.incompletedependencies.details = This mod is unable to be loaded due to invalid or missing dependencies: {0}.
mod.requiresversion = Requires game version: [red]{0} mod.requiresversion = Requires game version: [red]{0}
mod.errors = İçerik yüklenirken bir hata oluştu. mod.errors = İçerik yüklenirken bir hata oluştu.
mod.noerrorplay = [scarlet]Hatalı modlarınız var.[] Oynamadan önce bu modları devre dışı bırakın veya dosyadaki hataları düzeltin. mod.noerrorplay = [scarlet]Hatalı modlarınız var.[] Oynamadan önce bu modları devre dışı bırakın veya dosyadaki hataları düzeltin.
@@ -331,6 +335,7 @@ command.repair = Tamir Et
command.rebuild = Yeniden İnşaa Et command.rebuild = Yeniden İnşaa Et
command.assist = Oyuncuya Yardım Et command.assist = Oyuncuya Yardım Et
command.move = Hareket Et command.move = Hareket Et
command.boost = Boost
openlink = Bağlantıyı openlink = Bağlantıyı
copylink = Bağlantıyı Kopyala copylink = Bağlantıyı Kopyala
back = Geri back = Geri
@@ -975,6 +980,8 @@ bullet.splashdamage = [stat]{0} [lightgray]alan hasarı ~[stat] {1} [lightgray]k
bullet.incendiary = [stat]yakıcı bullet.incendiary = [stat]yakıcı
bullet.homing = [stat]güdümlü bullet.homing = [stat]güdümlü
bullet.armorpierce = [stat]zırh delici bullet.armorpierce = [stat]zırh delici
bullet.suppression = [stat]{0} sec[lightgray] repair suppression ~ [stat]{1}[lightgray] tiles
bullet.interval = [stat]{0}/sec[lightgray] interval bullets:
bullet.frags = [stat]{0}[lightgray]x parçalı mermiler: bullet.frags = [stat]{0}[lightgray]x parçalı mermiler:
bullet.lightning = [stat]{0}[lightgray]x elektrik ~ [stat]{1}[lightgray] hasarı bullet.lightning = [stat]{0}[lightgray]x elektrik ~ [stat]{1}[lightgray] hasarı
bullet.buildingdamage = [stat]{0}%[lightgray] inşaa hasarı bullet.buildingdamage = [stat]{0}%[lightgray] inşaa hasarı
@@ -1088,8 +1095,8 @@ setting.bridgeopacity.name = Köprü Opaklığı
setting.playerchat.name = Oyun-içi Konuşmayı Göster setting.playerchat.name = Oyun-içi Konuşmayı Göster
setting.showweather.name = Hava Durmu Grafiklerini Göster setting.showweather.name = Hava Durmu Grafiklerini Göster
setting.hidedisplays.name = İşlemci İpuçlarını Gizle setting.hidedisplays.name = İşlemci İpuçlarını Gizle
public.confirm = Oyununuzu halka açık yapmak ister misiniz?\n[accent]Oyunlarınıza herkes katılabilecektir.\n[lightgray]Bu seçenek daha sonra Ayarlar->Oyun->Halka Açık Oyunlar'dan değiştirilebilir. steam.friendsonly = Friends Only
public.confirm.really = Eğer Arkadaşlarınla oynamak istiyorsan [green]Arkadaş Davet Et[] e bas. [scarlet]Halka Açık Sunucuya Değil[]!\nOyununu Gerçekten Halka açık yapmak istediğine [scarlet]Emin Misin[]? steam.friendsonly.tooltip = Whether only Steam friends will be able to join your game.\nUnchecking this box will make your game public - anyone can join.
public.beta = Oyunun beta sürümlerinin halka açık lobiler yapamayacağını unutmayın. public.beta = Oyunun beta sürümlerinin halka açık lobiler yapamayacağını unutmayın.
uiscale.reset = Arayüz ölçeği değiştirildi.\nBu ölçeği onaylamak için "Tamam" butonuna basın.\n[accent] {0}[] [scarlet]saniye içinde eski ayarlara geri dönülüp oyundan çıkılıyor…[] uiscale.reset = Arayüz ölçeği değiştirildi.\nBu ölçeği onaylamak için "Tamam" butonuna basın.\n[accent] {0}[] [scarlet]saniye içinde eski ayarlara geri dönülüp oyundan çıkılıyor…[]
uiscale.cancel = İptal Et ve Çık uiscale.cancel = İptal Et ve Çık
@@ -1141,8 +1148,8 @@ keybind.select.name = Seç/Ateş Et
keybind.diagonal_placement.name = Çapraz Yerleştirme keybind.diagonal_placement.name = Çapraz Yerleştirme
keybind.pick.name = Blok Seç keybind.pick.name = Blok Seç
keybind.break_block.name = Blok Kır keybind.break_block.name = Blok Kır
keybind.select_all_units = Tüm Birimleri Seç keybind.select_all_units.name = Tüm Birimleri Seç
keybind.select_all_unit_factories = Select All Unit Factories keybind.select_all_unit_factories.name = Select All Unit Factories
keybind.deselect.name = Seçimleri Kaldır keybind.deselect.name = Seçimleri Kaldır
keybind.pickupCargo.name = Kargoyu Al keybind.pickupCargo.name = Kargoyu Al
keybind.dropCargo.name = Kargoyu Bırak keybind.dropCargo.name = Kargoyu Bırak
@@ -2201,6 +2208,7 @@ lst.flushmessage = Ekranda bir yazı göster.\nBir önceki yazı kaybolana kadar
lst.cutscene = Oyuncu Kamerasını hareket ettir. lst.cutscene = Oyuncu Kamerasını hareket ettir.
lst.setflag = Tüm İşlemciler tarafından okunabilen bir Numara İşaretle. lst.setflag = Tüm İşlemciler tarafından okunabilen bir Numara İşaretle.
lst.getflag = Evrensel İşaretli Numara Oku. lst.getflag = Evrensel İşaretli Numara Oku.
lst.setprop = Sets a property of a unit or building.
logic.nounitbuild = [red]Birim İnşası Yasak! logic.nounitbuild = [red]Birim İnşası Yasak!

View File

@@ -150,11 +150,15 @@ mod.incompatiblemod = [red]Несумісно
mod.blacklisted = [red]Не підтримується mod.blacklisted = [red]Не підтримується
mod.unmetdependencies = [red]Відсутні залежності mod.unmetdependencies = [red]Відсутні залежності
mod.erroredcontent = [scarlet]Помилки під час завантаження mod.erroredcontent = [scarlet]Помилки під час завантаження
mod.circulardependencies = [red]Circular Dependencies
mod.incompletedependencies = [red]Incomplete Dependencies
mod.requiresversion.details = Необхідна версія гри: [accent]{0}[]\nВаша гра застаріла. Мод потребує новішу версію гри (можливо бета- чи альфа-версію) для роботи.mod.outdatedv7.details = Ця модифікація не сумісна з останньою версією гри. Розробник модифікації має оновити її та додати [accent]minGameVersion: 136[] у свій [accent]mod.json[] файл. mod.requiresversion.details = Необхідна версія гри: [accent]{0}[]\nВаша гра застаріла. Мод потребує новішу версію гри (можливо бета- чи альфа-версію) для роботи.mod.outdatedv7.details = Ця модифікація не сумісна з останньою версією гри. Розробник модифікації має оновити її та додати [accent]minGameVersion: 136[] у свій [accent]mod.json[] файл.
mod.outdatedv7.details = This mod is incompatible with the latest version of the game. The author must update it, and add [accent]minGameVersion: 136[] to its [accent]mod.json[] file. mod.outdatedv7.details = This mod is incompatible with the latest version of the game. The author must update it, and add [accent]minGameVersion: 136[] to its [accent]mod.json[] file.
mod.blacklisted.details = Цю модифікацію було вручну внесено у чорний список за постійні збої або інші проблеми з цією версією гри. Не використовуйте її. mod.blacklisted.details = Цю модифікацію було вручну внесено у чорний список за постійні збої або інші проблеми з цією версією гри. Не використовуйте її.
mod.missingdependencies.details = This mod is missing dependencies: {0} mod.missingdependencies.details = This mod is missing dependencies: {0}
mod.erroredcontent.details = Ця модифікація спричинила помилки при завантаженні. Попросіть автора виправити їх. mod.erroredcontent.details = Ця модифікація спричинила помилки при завантаженні. Попросіть автора виправити їх.
mod.circulardependencies.details = This mod has dependencies that depends on each other.
mod.incompletedependencies.details = This mod is unable to be loaded due to invalid or missing dependencies: {0}.
mod.requiresversion = Необхідна версія гри: [red]{0} mod.requiresversion = Необхідна версія гри: [red]{0}
mod.errors = Виникли помилки під час завантаження змісту. mod.errors = Виникли помилки під час завантаження змісту.
mod.noerrorplay = [red]Ви маєте модифікації з помилками.[] Або вимкніть проблемні модифікації, або виправте їх. mod.noerrorplay = [red]Ви маєте модифікації з помилками.[] Або вимкніть проблемні модифікації, або виправте їх.
@@ -332,6 +336,7 @@ command.repair = Ремонтувати
command.rebuild = Відбудовувати command.rebuild = Відбудовувати
command.assist = Допомагати гравцеві command.assist = Допомагати гравцеві
command.move = Рухатися command.move = Рухатися
command.boost = Boost
openlink = Перейти за посиланням openlink = Перейти за посиланням
copylink = Скопіювати посилання copylink = Скопіювати посилання
back = Назад back = Назад
@@ -985,6 +990,8 @@ bullet.splashdamage = [stat]{0}[lightgray] шкода по ділянці ~[stat
bullet.incendiary = [stat]запальний bullet.incendiary = [stat]запальний
bullet.homing = [stat]самонаведення bullet.homing = [stat]самонаведення
bullet.armorpierce = [stat]бронебійність bullet.armorpierce = [stat]бронебійність
bullet.suppression = [stat]{0} sec[lightgray] repair suppression ~ [stat]{1}[lightgray] tiles
bullet.interval = [stat]{0}/sec[lightgray] interval bullets:
bullet.frags = [stat]{0}[lightgray]x шкода по ділянці від снарядів: bullet.frags = [stat]{0}[lightgray]x шкода по ділянці від снарядів:
bullet.lightning = [stat]{0}[lightgray]x блискавки ~ [stat]{1}[lightgray] шкоди bullet.lightning = [stat]{0}[lightgray]x блискавки ~ [stat]{1}[lightgray] шкоди
bullet.buildingdamage = [stat]{0}%[lightgray] шкода по будівлям bullet.buildingdamage = [stat]{0}%[lightgray] шкода по будівлям
@@ -1098,8 +1105,8 @@ setting.bridgeopacity.name = Непрозорість мостів
setting.playerchat.name = Показувати хмару чата над гравцями setting.playerchat.name = Показувати хмару чата над гравцями
setting.showweather.name = Показувати погоду setting.showweather.name = Показувати погоду
setting.hidedisplays.name = Приховувати логічні дисплеї setting.hidedisplays.name = Приховувати логічні дисплеї
public.confirm = Ви хочете зробити цю гру загальнодоступною?\n[accent]Будь-хто може приєднатися до вашої гри.\n[lightgray]Це можна змінити в Налаштування->Гра->Загальнодоступність гри. steam.friendsonly = Friends Only
public.confirm.really = Якщо ви хочете грати з друзями, використовуйте [green]Запросити друзів[] замість [scarlet]Публічного сервера[]!\nВи справді хочете зробити свою гру [scarlet]публічною[]? steam.friendsonly.tooltip = Whether only Steam friends will be able to join your game.\nUnchecking this box will make your game public - anyone can join.
public.beta = Зауважте, що в бета-версії гри ви не можете робити публічні ігри. public.beta = Зауважте, що в бета-версії гри ви не можете робити публічні ігри.
uiscale.reset = Масштаб користувацького інтерфейсу було змінено.\nНатисніть «Гаразд» для підтвердження цього масштабу.\n[scarlet]Повернення налаштувань і вихід через[accent] {0}[] секунд… uiscale.reset = Масштаб користувацького інтерфейсу було змінено.\nНатисніть «Гаразд» для підтвердження цього масштабу.\n[scarlet]Повернення налаштувань і вихід через[accent] {0}[] секунд…
uiscale.cancel = Скасувати й вийти uiscale.cancel = Скасувати й вийти
@@ -1151,8 +1158,8 @@ keybind.select.name = Вибір/Постріл
keybind.diagonal_placement.name = Діагональне розміщення keybind.diagonal_placement.name = Діагональне розміщення
keybind.pick.name = Вибрати блок keybind.pick.name = Вибрати блок
keybind.break_block.name = Зламати блок keybind.break_block.name = Зламати блок
keybind.select_all_units = Вибрати всі одиниці keybind.select_all_units.name = Вибрати всі одиниці
keybind.select_all_unit_factories = Вибрати всі заводи зі створення одиниць keybind.select_all_unit_factories.name = Вибрати всі заводи зі створення одиниць
keybind.deselect.name = Скасувати keybind.deselect.name = Скасувати
keybind.pickupCargo.name = Взяти вантаж keybind.pickupCargo.name = Взяти вантаж
keybind.dropCargo.name = Скинути вантаж keybind.dropCargo.name = Скинути вантаж
@@ -2225,6 +2232,7 @@ lst.flushmessage = Показує повідомлення на екрані з
lst.cutscene = Керує камерою гравця. lst.cutscene = Керує камерою гравця.
lst.setflag = Установлює глобальний прапорець, який можуть прочитати усі процесори. lst.setflag = Установлює глобальний прапорець, який можуть прочитати усі процесори.
lst.getflag = Перевіряє, чи встановлено глобальний прапорець. lst.getflag = Перевіряє, чи встановлено глобальний прапорець.
lst.setprop = Sets a property of a unit or building.
logic.nounitbuild = [red]Будування за допомогою процесорів заборено. logic.nounitbuild = [red]Будування за допомогою процесорів заборено.

File diff suppressed because it is too large Load Diff

View File

@@ -150,12 +150,16 @@ mod.incompatiblemod = [red]不兼容
mod.blacklisted = [red]不支持 mod.blacklisted = [red]不支持
mod.unmetdependencies = [red]缺少前置模组 mod.unmetdependencies = [red]缺少前置模组
mod.erroredcontent = [scarlet]内容错误 mod.erroredcontent = [scarlet]内容错误
mod.circulardependencies = [red]Circular Dependencies
mod.incompletedependencies = [red]Incomplete Dependencies
mod.requiresversion.details = 所需的最低游戏版本:[accent]{0}[]\n您的游戏版本过低。 这个模组需要更新的游戏版本通常是beta/alpha版本才能工作。 mod.requiresversion.details = 所需的最低游戏版本:[accent]{0}[]\n您的游戏版本过低。 这个模组需要更新的游戏版本通常是beta/alpha版本才能工作。
mod.outdatedv7.details = 这个模组与最新版游戏不兼容。 作者必须更新它,并在[accent]mod.json[]文件中写入[accent]minGameVersion: 136[]。 mod.outdatedv7.details = 这个模组与最新版游戏不兼容。 作者必须更新它,并在[accent]mod.json[]文件中写入[accent]minGameVersion: 136[]。
mod.blacklisted.details = 这个模组由于造成该版本游戏崩溃或其他原因被手动禁用了。 不要使用它。 mod.blacklisted.details = 这个模组由于造成该版本游戏崩溃或其他原因被手动禁用了。 不要使用它。
mod.missingdependencies.details = 缺少前置模组:{0} mod.missingdependencies.details = 缺少前置模组:{0}
mod.erroredcontent.details = 这个模组在游戏加载时发生了错误。 请通知模组作者修复它。 mod.erroredcontent.details = 这个模组在游戏加载时发生了错误。 请通知模组作者修复它。
mod.circulardependencies.details = This mod has dependencies that depends on each other.
mod.incompletedependencies.details = This mod is unable to be loaded due to invalid or missing dependencies: {0}.
mod.requiresversion = Requires game version: [red]{0} mod.requiresversion = Requires game version: [red]{0}
mod.errors = 读取内容时发生错误。 mod.errors = 读取内容时发生错误。
@@ -334,6 +338,7 @@ command.repair = 维修
command.rebuild = 重建 command.rebuild = 重建
command.assist = 协助建造 command.assist = 协助建造
command.move = 移动 command.move = 移动
command.boost = Boost
openlink = 打开链接 openlink = 打开链接
copylink = 复制链接 copylink = 复制链接
back = 返回 back = 返回
@@ -987,6 +992,8 @@ bullet.splashdamage = [stat]{0}[lightgray]范围伤害~[stat] {1}[lightgray]格
bullet.incendiary = [stat]燃烧 bullet.incendiary = [stat]燃烧
bullet.homing = [stat]追踪 bullet.homing = [stat]追踪
bullet.armorpierce = [stat]穿甲 bullet.armorpierce = [stat]穿甲
bullet.suppression = [stat]{0} sec[lightgray] repair suppression ~ [stat]{1}[lightgray] tiles
bullet.interval = [stat]{0}/sec[lightgray] interval bullets:
bullet.frags = [stat]{0}[lightgray]x分裂子弹 bullet.frags = [stat]{0}[lightgray]x分裂子弹
bullet.lightning = [stat]{0}[lightgray]x闪电~[stat]{1}[lightgray]伤害 bullet.lightning = [stat]{0}[lightgray]x闪电~[stat]{1}[lightgray]伤害
bullet.buildingdamage = [stat]{0}%[lightgray]对建筑伤害 bullet.buildingdamage = [stat]{0}%[lightgray]对建筑伤害
@@ -1100,8 +1107,8 @@ setting.bridgeopacity.name = 桥梁不透明度
setting.playerchat.name = 显示玩家聊天气泡 setting.playerchat.name = 显示玩家聊天气泡
setting.showweather.name = 显示天气效果 setting.showweather.name = 显示天气效果
setting.hidedisplays.name = 不显示逻辑绘图 setting.hidedisplays.name = 不显示逻辑绘图
public.confirm = 确定使您的游戏公开可见?\n[accent]其他人将可以加入到您的游戏。 \n[lightgray]此后可以在 设置->游戏->游戏公开可见 里面更改。 steam.friendsonly = Friends Only
public.confirm.really = 如果您想与好友一起游戏,可以使用[green]邀请好友[]而不是[scarlet]公开游戏[]\n您确定要使游戏[scarlet]公开可见[]吗? steam.friendsonly.tooltip = Whether only Steam friends will be able to join your game.\nUnchecking this box will make your game public - anyone can join.
public.beta = 请注意,测试版的游戏不能公开可见。 public.beta = 请注意,测试版的游戏不能公开可见。
uiscale.reset = UI缩放比例已更改。\n点击“确定”接受更改。\n[accent]{0}[]秒后[scarlet]将自动退出并还原设置。 uiscale.reset = UI缩放比例已更改。\n点击“确定”接受更改。\n[accent]{0}[]秒后[scarlet]将自动退出并还原设置。
uiscale.cancel = 取消并退出 uiscale.cancel = 取消并退出
@@ -1153,8 +1160,8 @@ keybind.select.name = 选择/射击
keybind.diagonal_placement.name = 斜线建造 keybind.diagonal_placement.name = 斜线建造
keybind.pick.name = 选择建筑 keybind.pick.name = 选择建筑
keybind.break_block.name = 拆除建筑 keybind.break_block.name = 拆除建筑
keybind.select_all_units = 选择所有单位 keybind.select_all_units.name = 选择所有单位
keybind.select_all_unit_factories = 选择所有单位工厂 keybind.select_all_unit_factories.name = 选择所有单位工厂
keybind.deselect.name = 取消选择 keybind.deselect.name = 取消选择
keybind.pickupCargo.name = 拾取载荷 keybind.pickupCargo.name = 拾取载荷
keybind.dropCargo.name = 释放载荷 keybind.dropCargo.name = 释放载荷
@@ -2227,6 +2234,7 @@ lst.flushmessage = 在屏幕中央投影文字缓存区的内容\n会等待上
lst.cutscene = 控制玩家游戏视角 lst.cutscene = 控制玩家游戏视角
lst.setflag = 设置一个可以被所有处理器读取的全局flag lst.setflag = 设置一个可以被所有处理器读取的全局flag
lst.getflag = 检查是否设置了全局flag lst.getflag = 检查是否设置了全局flag
lst.setprop = Sets a property of a unit or building.
logic.nounitbuild = [red]此处不允许处理器操控单位去建设 logic.nounitbuild = [red]此处不允许处理器操控单位去建设

View File

@@ -149,11 +149,15 @@ mod.incompatiblemod = [red]Incompatible
mod.blacklisted = [red]Unsupported mod.blacklisted = [red]Unsupported
mod.unmetdependencies = [red]Unmet Dependencies mod.unmetdependencies = [red]Unmet Dependencies
mod.erroredcontent = [scarlet]內容錯誤 mod.erroredcontent = [scarlet]內容錯誤
mod.circulardependencies = [red]Circular Dependencies
mod.incompletedependencies = [red]Incomplete Dependencies
mod.requiresversion.details = Requires game version: [accent]{0}[]\nYour game is outdated. This mod requires a newer version of the game (possibly a beta/alpha release) to function. mod.requiresversion.details = Requires game version: [accent]{0}[]\nYour game is outdated. This mod requires a newer version of the game (possibly a beta/alpha release) to function.
mod.outdatedv7.details = This mod is incompatible with the latest version of the game. The author must update it, and add [accent]minGameVersion: 136[] to its [accent]mod.json[] file. mod.outdatedv7.details = This mod is incompatible with the latest version of the game. The author must update it, and add [accent]minGameVersion: 136[] to its [accent]mod.json[] file.
mod.blacklisted.details = This mod has been manually blacklisted for causing crashes or other issues with this version of the game. Do not use it. mod.blacklisted.details = This mod has been manually blacklisted for causing crashes or other issues with this version of the game. Do not use it.
mod.missingdependencies.details = This mod is missing dependencies: {0} mod.missingdependencies.details = This mod is missing dependencies: {0}
mod.erroredcontent.details = This game caused errors when loading. Ask the mod author to fix them. mod.erroredcontent.details = This game caused errors when loading. Ask the mod author to fix them.
mod.circulardependencies.details = This mod has dependencies that depends on each other.
mod.incompletedependencies.details = This mod is unable to be loaded due to invalid or missing dependencies: {0}.
mod.requiresversion = Requires game version: [red]{0} mod.requiresversion = Requires game version: [red]{0}
mod.errors = 載入內容時發生錯誤 mod.errors = 載入內容時發生錯誤
mod.noerrorplay = [scarlet]你使用了有問題的模組。[] 遊戲前請先停用相關模組或修正問題。 mod.noerrorplay = [scarlet]你使用了有問題的模組。[] 遊戲前請先停用相關模組或修正問題。
@@ -331,6 +335,7 @@ command.repair = 修復
command.rebuild = 重建 command.rebuild = 重建
command.assist = 協助玩家 command.assist = 協助玩家
command.move = 移動 command.move = 移動
command.boost = Boost
openlink = 開啟連結 openlink = 開啟連結
copylink = 複製連結 copylink = 複製連結
back = 返回 back = 返回
@@ -983,6 +988,8 @@ bullet.splashdamage = [stat]{0}[lightgray]範圍傷害 ~[stat] {1}[lightgray]格
bullet.incendiary = [stat]燃燒 bullet.incendiary = [stat]燃燒
bullet.homing = [stat]追蹤 bullet.homing = [stat]追蹤
bullet.armorpierce = [stat]穿甲 bullet.armorpierce = [stat]穿甲
bullet.suppression = [stat]{0} sec[lightgray] repair suppression ~ [stat]{1}[lightgray] tiles
bullet.interval = [stat]{0}/sec[lightgray] interval bullets:
bullet.frags = [stat]{0}[lightgray]x 集束子彈: bullet.frags = [stat]{0}[lightgray]x 集束子彈:
bullet.lightning = [stat]{0}[lightgray]x 電弧 ~ [stat]{1}[lightgray] 傷害 bullet.lightning = [stat]{0}[lightgray]x 電弧 ~ [stat]{1}[lightgray] 傷害
bullet.buildingdamage = [stat]{0}%[lightgray] 建築傷害 bullet.buildingdamage = [stat]{0}%[lightgray] 建築傷害
@@ -1096,8 +1103,8 @@ setting.bridgeopacity.name = 橋透明度
setting.playerchat.name = 在遊戲中顯示聊天視窗 setting.playerchat.name = 在遊戲中顯示聊天視窗
setting.showweather.name = 顯示天氣動畫 setting.showweather.name = 顯示天氣動畫
setting.hidedisplays.name = 隱藏邏輯顯示 setting.hidedisplays.name = 隱藏邏輯顯示
public.confirm = 您想公開遊戲嗎?\n[accent]任何人都可以加入您的遊戲。\n[lightgray]之後可以在「設定」→「遊戲」→「公開遊戲可見度」中進行更改。 steam.friendsonly = Friends Only
public.confirm.really = 如果你想和朋友一起遊玩,可利用[green]邀請好友[]而不是[scarlet]公開伺服器[]\n你確定要將伺服設為[scarlet]公開[] steam.friendsonly.tooltip = Whether only Steam friends will be able to join your game.\nUnchecking this box will make your game public - anyone can join.
public.beta = 請注意該遊戲的Beta版本無法公開遊戲大廳。 public.beta = 請注意該遊戲的Beta版本無法公開遊戲大廳。
uiscale.reset = 使用者介面縮放已變更\n按下「確定」確認這個比例\n[scarlet][accent] {0}[] 秒後退出並還原設定 uiscale.reset = 使用者介面縮放已變更\n按下「確定」確認這個比例\n[scarlet][accent] {0}[] 秒後退出並還原設定
uiscale.cancel = 取消並退出 uiscale.cancel = 取消並退出
@@ -1149,8 +1156,8 @@ keybind.select.name = 選取
keybind.diagonal_placement.name = 對角線放置 keybind.diagonal_placement.name = 對角線放置
keybind.pick.name = 選擇方塊 keybind.pick.name = 選擇方塊
keybind.break_block.name = 移除方塊 keybind.break_block.name = 移除方塊
keybind.select_all_units = Select All Units keybind.select_all_units.name = Select All Units
keybind.select_all_unit_factories = Select All Unit Factories keybind.select_all_unit_factories.name = Select All Unit Factories
keybind.deselect.name = 取消選取 keybind.deselect.name = 取消選取
keybind.pickupCargo.name = 撿起貨物 keybind.pickupCargo.name = 撿起貨物
keybind.dropCargo.name = 丟棄貨物 keybind.dropCargo.name = 丟棄貨物
@@ -2211,6 +2218,7 @@ lst.flushmessage = 从文本緩存中讀取並於屏幕上顯示一條消息\n
lst.cutscene = 控制玩家鏡頭 lst.cutscene = 控制玩家鏡頭
lst.setflag = 設置一個全局flag可被所有處理器讀取 lst.setflag = 設置一個全局flag可被所有處理器讀取
lst.getflag = 檢查某一全局flag是否存在 lst.getflag = 檢查某一全局flag是否存在
lst.setprop = Sets a property of a unit or building.
logic.nounitbuild = [red]單位建造邏輯已被禁止。 logic.nounitbuild = [red]單位建造邏輯已被禁止。

View File

@@ -153,3 +153,4 @@ BlackDeluxeCat
zenonet zenonet
AyuKo-o AyuKo-o
JojoFR1 JojoFR1
Xasmedy

View File

@@ -102,9 +102,7 @@ public abstract class ClientLauncher extends ApplicationCore implements Platform
}); });
assets.setLoader(Music.class, new MusicLoader(tree){ assets.setLoader(Music.class, new MusicLoader(tree){
@Override @Override
public void loadAsync(AssetManager manager, String fileName, Fi file, MusicParameter parameter){ public void loadAsync(AssetManager manager, String fileName, Fi file, MusicParameter parameter){}
}
@Override @Override
public Music loadSync(AssetManager manager, String fileName, Fi file, MusicParameter parameter){ public Music loadSync(AssetManager manager, String fileName, Fi file, MusicParameter parameter){

View File

@@ -273,7 +273,7 @@ public class ControlPathfinder{
req.raycastTimer = 0; req.raycastTimer = 0;
} }
if(req.rayPathIndex < len){ if(req.rayPathIndex < len && req.rayPathIndex >= 0){
Tile tile = tile(items[req.rayPathIndex]); Tile tile = tile(items[req.rayPathIndex]);
out.set(tile); out.set(tile);

View File

@@ -19,7 +19,7 @@ import mindustry.world.meta.*;
import static mindustry.Vars.*; import static mindustry.Vars.*;
public class Pathfinder implements Runnable{ public class Pathfinder implements Runnable{
private static final long maxUpdate = Time.millisToNanos(7); private static final long maxUpdate = Time.millisToNanos(8);
private static final int updateFPS = 60; private static final int updateFPS = 60;
private static final int updateInterval = 1000 / updateFPS; private static final int updateInterval = 1000 / updateFPS;
@@ -219,8 +219,6 @@ public class Pathfinder implements Runnable{
public void updateTile(Tile tile){ public void updateTile(Tile tile){
if(net.client()) return; if(net.client()) return;
int x = tile.x, y = tile.y;
tile.getLinkedTiles(t -> { tile.getLinkedTiles(t -> {
int pos = t.array(); int pos = t.array();
if(pos < tiles.length){ if(pos < tiles.length){
@@ -232,15 +230,15 @@ public class Pathfinder implements Runnable{
for(Flowfield path : mainList){ for(Flowfield path : mainList){
if(path != null){ if(path != null){
synchronized(path.targets){ synchronized(path.targets){
path.targets.clear(); path.updateTargetPositions();
path.getPositions(path.targets);
} }
} }
} }
//mark every flow field as dirty, so it updates when it's done
queue.post(() -> { queue.post(() -> {
for(Flowfield data : threadList){ for(Flowfield data : threadList){
updateTargets(data, x, y); data.dirty = true;
} }
}); });
} }
@@ -257,6 +255,13 @@ public class Pathfinder implements Runnable{
//each update time (not total!) no longer than maxUpdate //each update time (not total!) no longer than maxUpdate
for(Flowfield data : threadList){ for(Flowfield data : threadList){
//if it's dirty and there is nothing to update, begin updating once more
if(data.dirty && data.frontier.size == 0){
updateTargets(data);
data.dirty = false;
}
updateFrontier(data, maxUpdate); updateFrontier(data, maxUpdate);
} }
} }
@@ -306,8 +311,7 @@ public class Pathfinder implements Runnable{
synchronized(path.targets){ synchronized(path.targets){
//make sure the position actually changed //make sure the position actually changed
if(!(path.targets.size == 1 && tmpArray.size == 1 && path.targets.first() == tmpArray.first())){ if(!(path.targets.size == 1 && tmpArray.size == 1 && path.targets.first() == tmpArray.first())){
path.targets.clear(); path.updateTargetPositions();
path.getPositions(path.targets);
//queue an update //queue an update
queue.post(() -> updateTargets(path)); queue.post(() -> updateTargets(path));
@@ -315,7 +319,8 @@ public class Pathfinder implements Runnable{
} }
} }
int[] values = path.weights; //use complete weights if possible; these contain a complete flow field that is not being updated
int[] values = path.hasComplete ? path.completeWeights : path.weights;
int apos = tile.array(); int apos = tile.array();
int value = values[apos]; int value = values[apos];
@@ -341,32 +346,6 @@ public class Pathfinder implements Runnable{
return current; return current;
} }
/**
* Clears the frontier, increments the search and sets up all flow sources.
* This only occurs for active teams.
*/
private void updateTargets(Flowfield path, int x, int y){
int packed = world.packArray(x, y);
if(packed > path.weights.length) return;
if(path.weights[packed] == 0){
//this was a previous target
path.frontier.clear();
}else if(!path.frontier.isEmpty()){
//skip if this path is processing
return;
}
//update cost of the tile TODO maybe only update the cost when it's not passable
path.weights[packed] = path.cost.getCost(path.team.id, tiles[packed]);
//clear frontier to prevent contamination
path.frontier.clear();
updateTargets(path);
}
/** Increments the search and sets up flow sources. Does not change the frontier. */ /** Increments the search and sets up flow sources. Does not change the frontier. */
private void updateTargets(Flowfield path){ private void updateTargets(Flowfield path){
@@ -386,8 +365,7 @@ public class Pathfinder implements Runnable{
} }
private void preloadPath(Flowfield path){ private void preloadPath(Flowfield path){
path.targets.clear(); path.updateTargetPositions();
path.getPositions(path.targets);
registerPath(path); registerPath(path);
updateFrontier(path, -1); updateFrontier(path, -1);
} }
@@ -421,6 +399,7 @@ public class Pathfinder implements Runnable{
/** Update the frontier for a path. Pathfinding thread only. */ /** Update the frontier for a path. Pathfinding thread only. */
private void updateFrontier(Flowfield path, long nsToRun){ private void updateFrontier(Flowfield path, long nsToRun){
boolean hadAny = path.frontier.size > 0;
long start = Time.nanos(); long start = Time.nanos();
int counter = 0; int counter = 0;
@@ -462,6 +441,12 @@ public class Pathfinder implements Runnable{
} }
} }
} }
//there WERE some things in the frontier, but now they are gone, so the path is done; copy over latest data
if(hadAny && path.frontier.size == 0){
System.arraycopy(path.weights, 0, path.completeWeights, 0, path.weights.length);
path.hasComplete = true;
}
} }
public static class EnemyCoreField extends Flowfield{ public static class EnemyCoreField extends Flowfield{
@@ -505,11 +490,18 @@ public class Pathfinder implements Runnable{
protected Team team = Team.derelict; protected Team team = Team.derelict;
/** Function for calculating path cost. Set before using. */ /** Function for calculating path cost. Set before using. */
protected PathCost cost = costTypes.get(costGround); protected PathCost cost = costTypes.get(costGround);
/** Whether there are valid weights in the complete array. */
protected volatile boolean hasComplete;
/** If true, this flow field needs updating. This flag is only set to false once the flow field finishes and the weights are copied over. */
protected boolean dirty = false;
/** costs of getting to a specific tile */ /** costs of getting to a specific tile */
public int[] weights; public int[] weights;
/** search IDs of each position - the highest, most recent search is prioritized and overwritten */ /** search IDs of each position - the highest, most recent search is prioritized and overwritten */
public int[] searches; public int[] searches;
/** the last "complete" weights of this tilemap. */
public int[] completeWeights;
/** search frontier, these are Pos objects */ /** search frontier, these are Pos objects */
IntQueue frontier = new IntQueue(); IntQueue frontier = new IntQueue();
/** all target positions; these positions have a cost of 0, and must be synchronized on! */ /** all target positions; these positions have a cost of 0, and must be synchronized on! */
@@ -524,10 +516,16 @@ public class Pathfinder implements Runnable{
void setup(int length){ void setup(int length){
this.weights = new int[length]; this.weights = new int[length];
this.searches = new int[length]; this.searches = new int[length];
this.completeWeights = new int[length];
this.frontier.ensureCapacity((length) / 4); this.frontier.ensureCapacity((length) / 4);
this.initialized = true; this.initialized = true;
} }
public void updateTargetPositions(){
targets.clear();
getPositions(targets);
}
protected boolean passable(int pos){ protected boolean passable(int pos){
return cost.getCost(team.id, pathfinder.tiles[pos]) != impassable; return cost.getCost(team.id, pathfinder.tiles[pos]) != impassable;
} }

View File

@@ -14,7 +14,10 @@ public class UnitCommand{
public static final UnitCommand public static final UnitCommand
moveCommand = new UnitCommand("move", "right", u -> null), moveCommand = new UnitCommand("move", "right", u -> null){{
drawTarget = true;
resetTarget = false;
}},
repairCommand = new UnitCommand("repair", "modeSurvival", u -> new RepairAI()), repairCommand = new UnitCommand("repair", "modeSurvival", u -> new RepairAI()),
rebuildCommand = new UnitCommand("rebuild", "hammer", u -> new BuilderAI()), rebuildCommand = new UnitCommand("rebuild", "hammer", u -> new BuilderAI()),
assistCommand = new UnitCommand("assist", "players", u -> { assistCommand = new UnitCommand("assist", "players", u -> {
@@ -22,7 +25,12 @@ public class UnitCommand{
ai.onlyAssist = true; ai.onlyAssist = true;
return ai; return ai;
}), }),
mineCommand = new UnitCommand("mine", "production", u -> new MinerAI()); mineCommand = new UnitCommand("mine", "production", u -> new MinerAI()),
boostCommand = new UnitCommand("boost", "up", u -> new BoostAI()){{
switchToMove = false;
drawTarget = true;
resetTarget = false;
}};
/** Unique ID number. */ /** Unique ID number. */
public final int id; public final int id;
@@ -32,6 +40,12 @@ public class UnitCommand{
public final String icon; public final String icon;
/** Controller that this unit will use when this command is used. Return null for "default" behavior. */ /** Controller that this unit will use when this command is used. Return null for "default" behavior. */
public final Func<Unit, AIController> controller; public final Func<Unit, AIController> controller;
/** If true, this unit will automatically switch away to the move command when given a position. */
public boolean switchToMove = true;
/** Whether to draw the movement/attack target. */
public boolean drawTarget = false;
/** Whether to reset targets when switching to or from this command. */
public boolean resetTarget = true;
public UnitCommand(String name, String icon, Func<Unit, AIController> controller){ public UnitCommand(String name, String icon, Func<Unit, AIController> controller){
this.name = name; this.name = name;
@@ -45,4 +59,9 @@ public class UnitCommand{
public String localized(){ public String localized(){
return Core.bundle.get("command." + name); return Core.bundle.get("command." + name);
} }
@Override
public String toString(){
return "UnitCommand:" + name;
}
} }

View File

@@ -0,0 +1,21 @@
package mindustry.ai.types;
import mindustry.ai.*;
import mindustry.entities.units.*;
//not meant to be used outside RTS-AI-controlled units
public class BoostAI extends AIController{
@Override
public void updateUnit(){
if(unit.controller() instanceof CommandAI ai){
ai.defaultBehavior();
unit.updateBoosting(true);
//auto land when near target
if(ai.attackTarget != null && unit.within(ai.attackTarget, unit.range())){
unit.command().command(UnitCommand.moveCommand);
}
}
}
}

View File

@@ -119,7 +119,7 @@ public class BuilderAI extends AIController{
} }
//follow someone and help them build //follow someone and help them build
if(timer.get(timerTarget2, 60f)){ if(timer.get(timerTarget2, 20f)){
found = false; found = false;
Units.nearby(unit.team, unit.x, unit.y, buildRadius, u -> { Units.nearby(unit.team, unit.x, unit.y, buildRadius, u -> {

View File

@@ -35,8 +35,8 @@ public class CommandAI extends AIController{
/** Last command type assigned. Used for detecting command changes. */ /** Last command type assigned. Used for detecting command changes. */
protected @Nullable UnitCommand lastCommand; protected @Nullable UnitCommand lastCommand;
public @Nullable UnitCommand currentCommand(){ public UnitCommand currentCommand(){
return command; return command == null ? UnitCommand.moveCommand : command;
} }
/** Attempts to assign a command to this unit. If not supported by the unit type, does nothing. */ /** Attempts to assign a command to this unit. If not supported by the unit type, does nothing. */
@@ -49,6 +49,11 @@ public class CommandAI extends AIController{
} }
} }
@Override
public boolean isLogicControllable(){
return !hasCommand();
}
public boolean isAttacking(){ public boolean isAttacking(){
return target != null && unit.within(target, unit.range() + 10f); return target != null && unit.within(target, unit.range() + 10f);
} }
@@ -62,7 +67,7 @@ public class CommandAI extends AIController{
} }
//update command controller based on index. //update command controller based on index.
var curCommand = currentCommand(); var curCommand = command;
if(lastCommand != curCommand){ if(lastCommand != curCommand){
lastCommand = curCommand; lastCommand = curCommand;
commandController = (curCommand == null ? null : curCommand.controller.get(unit)); commandController = (curCommand == null ? null : curCommand.controller.get(unit));
@@ -72,8 +77,14 @@ public class CommandAI extends AIController{
if(commandController != null){ if(commandController != null){
if(commandController.unit() != unit) commandController.unit(unit); if(commandController.unit() != unit) commandController.unit(unit);
commandController.updateUnit(); commandController.updateUnit();
return; }else{
defaultBehavior();
//boosting control is not supported, so just don't.
unit.updateBoosting(false);
} }
}
public void defaultBehavior(){
//acquiring naval targets isn't supported yet, so use the fallback dumb AI //acquiring naval targets isn't supported yet, so use the fallback dumb AI
if(unit.team.isAI() && unit.team.rules().rtsAi && unit.type.naval){ if(unit.team.isAI() && unit.team.rules().rtsAi && unit.type.naval){
@@ -207,9 +218,6 @@ public class CommandAI extends AIController{
}else if(target != null){ }else if(target != null){
faceTarget(); faceTarget();
} }
//boosting control is not supported, so just don't.
unit.updateBoosting(false);
} }
@Override @Override
@@ -249,8 +257,12 @@ public class CommandAI extends AIController{
lastTargetPos = targetPos; lastTargetPos = targetPos;
} }
@Override
public void commandPosition(Vec2 pos){ public void commandPosition(Vec2 pos){
commandPosition(pos, false); commandPosition(pos, false);
if(commandController != null){
commandController.commandPosition(pos);
}
} }
public void commandPosition(Vec2 pos, boolean stopWhenInRange){ public void commandPosition(Vec2 pos, boolean stopWhenInRange){
@@ -261,8 +273,12 @@ public class CommandAI extends AIController{
this.stopWhenInRange = stopWhenInRange; this.stopWhenInRange = stopWhenInRange;
} }
@Override
public void commandTarget(Teamc moveTo){ public void commandTarget(Teamc moveTo){
commandTarget(moveTo, false); commandTarget(moveTo, false);
if(commandController != null){
commandController.commandTarget(moveTo);
}
} }
public void commandTarget(Teamc moveTo, boolean stopAtTarget){ public void commandTarget(Teamc moveTo, boolean stopAtTarget){

View File

@@ -1277,6 +1277,7 @@ public class Blocks{
heatOutput = 3f; heatOutput = 3f;
regionRotated1 = 1; regionRotated1 = 1;
ambientSound = Sounds.hum; ambientSound = Sounds.hum;
itemCapacity = 0;
consumePower(100f / 60f); consumePower(100f / 60f);
}}; }};
@@ -1287,6 +1288,7 @@ public class Blocks{
drawer = new DrawMulti(new DrawRegion("-bottom"), new DrawLiquidTile(Liquids.slag), new DrawDefault(), new DrawHeatOutput()); drawer = new DrawMulti(new DrawRegion("-bottom"), new DrawLiquidTile(Liquids.slag), new DrawDefault(), new DrawHeatOutput());
size = 3; size = 3;
itemCapacity = 0;
liquidCapacity = 40f; liquidCapacity = 40f;
rotateDraw = false; rotateDraw = false;
regionRotated1 = 1; regionRotated1 = 1;
@@ -3402,6 +3404,7 @@ public class Blocks{
reload = 30f; reload = 30f;
inaccuracy = 10f; inaccuracy = 10f;
range = 240f; range = 240f;
consumeAmmoOnce = false;
size = 2; size = 2;
scaledHealth = 300; scaledHealth = 300;
shootSound = Sounds.missile; shootSound = Sounds.missile;
@@ -3464,6 +3467,7 @@ public class Blocks{
size = 2; size = 2;
range = 190f; range = 190f;
reload = 31f; reload = 31f;
consumeAmmoOnce = false;
ammoEjectBack = 3f; ammoEjectBack = 3f;
recoil = 3f; recoil = 3f;
shake = 1f; shake = 1f;
@@ -4079,6 +4083,7 @@ public class Blocks{
liquidConsumed = 10f / 60f; liquidConsumed = 10f / 60f;
targetInterval = 5f; targetInterval = 5f;
targetUnderBlocks = false;
float r = range = 130f; float r = range = 130f;

View File

@@ -8,6 +8,7 @@ import arc.math.geom.*;
import arc.struct.*; import arc.struct.*;
import arc.util.*; import arc.util.*;
import mindustry.entities.*; import mindustry.entities.*;
import mindustry.entities.abilities.*;
import mindustry.gen.*; import mindustry.gen.*;
import mindustry.graphics.*; import mindustry.graphics.*;
import mindustry.type.*; import mindustry.type.*;
@@ -2404,6 +2405,14 @@ public class Fx{
shieldBreak = new Effect(40, e -> { shieldBreak = new Effect(40, e -> {
color(e.color); color(e.color);
stroke(3f * e.fout()); stroke(3f * e.fout());
if(e.data instanceof Unit u){
var ab = (ForceFieldAbility)Structs.find(u.abilities, a -> a instanceof ForceFieldAbility);
if(ab != null){
Lines.poly(e.x, e.y, ab.sides, e.rotation + e.fin(), ab.rotation);
return;
}
}
Lines.poly(e.x, e.y, 6, e.rotation + e.fin()); Lines.poly(e.x, e.y, 6, e.rotation + e.fin());
}).followParent(true), }).followParent(true),

View File

@@ -2751,7 +2751,7 @@ public class UnitTypes{
weapons.add(new Weapon("conquer-weapon"){{ weapons.add(new Weapon("conquer-weapon"){{
shootSound = Sounds.largeCannon; shootSound = Sounds.largeCannon;
layerOffset = 0.1f; layerOffset = 0.1f;
reload = 110f; reload = 100f;
shootY = 32.5f; shootY = 32.5f;
shake = 5f; shake = 5f;
recoil = 5f; recoil = 5f;
@@ -2823,7 +2823,7 @@ public class UnitTypes{
}}); }});
} }
bullet = new BasicBulletType(8f, 330f){{ bullet = new BasicBulletType(8f, 360f){{
sprite = "missile-large"; sprite = "missile-large";
width = 12f; width = 12f;
height = 20f; height = 20f;
@@ -2862,7 +2862,7 @@ public class UnitTypes{
float fin = 0.05f + (j + 1) / (float)count; float fin = 0.05f + (j + 1) / (float)count;
float spd = speed; float spd = speed;
float life = lifetime / Mathf.lerp(fin, 1f, 0.5f); float life = lifetime / Mathf.lerp(fin, 1f, 0.5f);
spawnBullets.add(new BasicBulletType(spd * fin, 55){{ spawnBullets.add(new BasicBulletType(spd * fin, 60){{
drag = 0.002f; drag = 0.002f;
width = 12f; width = 12f;
height = 11f; height = 11f;
@@ -2879,7 +2879,7 @@ public class UnitTypes{
weaveScale = (3f + s/2f) / 1.2f; weaveScale = (3f + s/2f) / 1.2f;
weaveMag = i * (4f - fin * 2f); weaveMag = i * (4f - fin * 2f);
splashDamage = 60f; splashDamage = 65f;
splashDamageRadius = 30f; splashDamageRadius = 30f;
despawnEffect = new ExplosionEffect(){{ despawnEffect = new ExplosionEffect(){{
lifetime = 50f; lifetime = 50f;
@@ -3434,9 +3434,9 @@ public class UnitTypes{
}}); }});
} }
bullet = new ArtilleryBulletType(5.5f, 280){{ bullet = new ArtilleryBulletType(5.5f, 260){{
collidesTiles = collides = true; collidesTiles = collides = true;
lifetime = 75f; lifetime = 70f;
shootEffect = Fx.shootBigColor; shootEffect = Fx.shootBigColor;
smokeEffect = Fx.shootSmokeSquareBig; smokeEffect = Fx.shootSmokeSquareBig;
frontColor = Color.white; frontColor = Color.white;
@@ -3769,11 +3769,12 @@ public class UnitTypes{
speed = 1.1f; speed = 1.1f;
rotateSpeed = 3.2f; rotateSpeed = 3.2f;
accel = 0.1f; accel = 0.1f;
health = 8000f; health = 6000f;
armor = 5f; armor = 4f;
hitSize = 36f; hitSize = 36f;
payloadCapacity = Mathf.sqr(3f) * tilePayload; payloadCapacity = Mathf.sqr(3f) * tilePayload;
researchCostMultiplier = 0f; researchCostMultiplier = 0f;
targetAir = false;
engineSize = 4.8f; engineSize = 4.8f;
engineOffset = 61 / 4f; engineOffset = 61 / 4f;
@@ -3800,11 +3801,13 @@ public class UnitTypes{
shake = 1f; shake = 1f;
speed = 0f; speed = 0f;
keepVelocity = false; keepVelocity = false;
collidesAir = false;
spawnUnit = new MissileUnitType("quell-missile"){{ spawnUnit = new MissileUnitType("quell-missile"){{
targetAir = false;
speed = 4.3f; speed = 4.3f;
maxRange = 6f; maxRange = 6f;
lifetime = 60f * 1.6f; lifetime = 60f * 1.4f;
outlineColor = Pal.darkOutline; outlineColor = Pal.darkOutline;
engineColor = trailColor = Pal.sapBulletBack; engineColor = trailColor = Pal.sapBulletBack;
engineLayer = Layer.effect; engineLayer = Layer.effect;
@@ -3818,6 +3821,7 @@ public class UnitTypes{
shootOnDeath = true; shootOnDeath = true;
bullet = new ExplosionBulletType(110f, 25f){{ bullet = new ExplosionBulletType(110f, 25f){{
shootEffect = Fx.massiveExplosion; shootEffect = Fx.massiveExplosion;
collidesAir = false;
}}; }};
}}); }});
}}; }};
@@ -3844,6 +3848,7 @@ public class UnitTypes{
armor = 9f; armor = 9f;
hitSize = 46f; hitSize = 46f;
payloadCapacity = Mathf.sqr(6f) * tilePayload; payloadCapacity = Mathf.sqr(6f) * tilePayload;
targetAir = false;
engineSize = 6f; engineSize = 6f;
engineOffset = 25.25f; engineOffset = 25.25f;
@@ -3909,8 +3914,10 @@ public class UnitTypes{
shake = 1f; shake = 1f;
speed = 0f; speed = 0f;
keepVelocity = false; keepVelocity = false;
collidesAir = false;
spawnUnit = new MissileUnitType("disrupt-missile"){{ spawnUnit = new MissileUnitType("disrupt-missile"){{
targetAir = false;
speed = 4.6f; speed = 4.6f;
maxRange = 5f; maxRange = 5f;
outlineColor = Pal.darkOutline; outlineColor = Pal.darkOutline;
@@ -3949,6 +3956,7 @@ public class UnitTypes{
reload = 1f; reload = 1f;
shootOnDeath = true; shootOnDeath = true;
bullet = new ExplosionBulletType(140f, 25f){{ bullet = new ExplosionBulletType(140f, 25f){{
collidesAir = false;
suppressionRange = 140f; suppressionRange = 140f;
shootEffect = new ExplosionEffect(){{ shootEffect = new ExplosionEffect(){{
lifetime = 50f; lifetime = 50f;

View File

@@ -193,7 +193,7 @@ public class Control implements ApplicationListener, Loadable{
if(!settings.getBool("skipcoreanimation") && !state.rules.pvp){ if(!settings.getBool("skipcoreanimation") && !state.rules.pvp){
coreDelay = coreLandDuration; coreDelay = coreLandDuration;
//delay player respawn so animation can play. //delay player respawn so animation can play.
player.deathTimer = -80f; player.deathTimer = Player.deathDelay - coreLandDuration;
//TODO this sounds pretty bad due to conflict //TODO this sounds pretty bad due to conflict
if(settings.getInt("musicvol") > 0){ if(settings.getInt("musicvol") > 0){
Musics.land.stop(); Musics.land.stop();

View File

@@ -383,12 +383,18 @@ public class Logic implements ApplicationListener{
public static void researched(Content content){ public static void researched(Content content){
if(!(content instanceof UnlockableContent u)) return; if(!(content instanceof UnlockableContent u)) return;
boolean was = u.unlockedNow();
state.rules.researched.add(u.name); state.rules.researched.add(u.name);
if(!was){
Events.fire(new UnlockEvent(u));
}
} }
@Override @Override
public void dispose(){ public void dispose(){
//save the settings before quitting //save the settings before quitting
netServer.admins.forceSave();
Core.settings.manualSave(); Core.settings.manualSave();
} }
@@ -398,9 +404,12 @@ public class Logic implements ApplicationListener{
universe.updateGlobal(); universe.updateGlobal();
if(Core.settings.modified() && !state.isPlaying()){ if(Core.settings.modified() && !state.isPlaying()){
netServer.admins.forceSave();
Core.settings.forceSave(); Core.settings.forceSave();
} }
boolean runStateCheck = !net.client() && !world.isInvalidMap() && !state.isEditor() && state.rules.canGameOver;
if(state.isGame()){ if(state.isGame()){
if(!net.client()){ if(!net.client()){
state.enemies = Groups.unit.count(u -> u.team() == state.rules.waveTeam && u.isEnemy()); state.enemies = Groups.unit.count(u -> u.team() == state.rules.waveTeam && u.isEnemy());
@@ -466,9 +475,11 @@ public class Logic implements ApplicationListener{
Groups.update(); Groups.update();
} }
if(!net.client() && !world.isInvalidMap() && !state.isEditor() && state.rules.canGameOver){ if(runStateCheck){
checkGameState(); checkGameState();
} }
}else if(netServer.isWaitingForPlayers() && runStateCheck){
checkGameState();
} }
} }

View File

@@ -435,8 +435,9 @@ public class NetClient implements ApplicationListener{
for(int j = 0; j < amount; j++){ for(int j = 0; j < amount; j++){
readSyncEntity(input, Reads.get(input)); readSyncEntity(input, Reads.get(input));
} }
}catch(IOException e){ }catch(Exception e){
throw new RuntimeException(e); //don't disconnect, just log it
Log.err("Error reading entity snapshot", e);
} }
} }

View File

@@ -9,7 +9,6 @@ import arc.struct.*;
import arc.util.*; import arc.util.*;
import arc.util.CommandHandler.*; import arc.util.CommandHandler.*;
import arc.util.io.*; import arc.util.io.*;
import arc.util.serialization.*;
import mindustry.annotations.Annotations.*; import mindustry.annotations.Annotations.*;
import mindustry.content.*; import mindustry.content.*;
import mindustry.core.GameState.*; import mindustry.core.GameState.*;
@@ -138,15 +137,6 @@ public class NetServer implements ApplicationListener{
con.connectTime = Time.millis(); con.connectTime = Time.millis();
String uuid = packet.uuid; String uuid = packet.uuid;
byte[] buuid = Base64Coder.decode(uuid);
CRC32 crc = new CRC32();
crc.update(buuid, 0, 8);
ByteBuffer buff = ByteBuffer.allocate(8);
buff.put(buuid, 8, 8);
if(crc.getValue() != buff.getLong(0)){
con.kick(KickReason.clientOutdated);
return;
}
if(admins.isIPBanned(con.address) || admins.isSubnetBanned(con.address)) return; if(admins.isIPBanned(con.address) || admins.isSubnetBanned(con.address)) return;
@@ -195,6 +185,7 @@ public class NetServer implements ApplicationListener{
result.append("Unnecessary mods:[lightgray]\n").append("> ").append(extraMods.toString("\n> ")); result.append("Unnecessary mods:[lightgray]\n").append("> ").append(extraMods.toString("\n> "));
} }
con.kick(result.toString(), 0); con.kick(result.toString(), 0);
return;
} }
if(!admins.isWhitelisted(packet.uuid, packet.usid)){ if(!admins.isWhitelisted(packet.uuid, packet.usid)){
@@ -869,7 +860,7 @@ public class NetServer implements ApplicationListener{
} }
if(state.isGame() && net.server()){ if(state.isGame() && net.server()){
if(state.rules.pvp){ if(state.rules.pvp && state.rules.pvpAutoPause){
boolean waiting = isWaitingForPlayers(), paused = state.isPaused(); boolean waiting = isWaitingForPlayers(), paused = state.isPaused();
if(waiting != paused){ if(waiting != paused){
if(waiting){ if(waiting){
@@ -1003,7 +994,7 @@ public class NetServer implements ApplicationListener{
player.con.snapshotsSent++; player.con.snapshotsSent++;
} }
String fixName(String name){ public String fixName(String name){
name = name.trim().replace("\n", "").replace("\t", ""); name = name.trim().replace("\n", "").replace("\t", "");
if(name.equals("[") || name.equals("]")){ if(name.equals("[") || name.equals("]")){
return ""; return "";
@@ -1027,7 +1018,7 @@ public class NetServer implements ApplicationListener{
return result.toString(); return result.toString();
} }
static String checkColor(String str){ public String checkColor(String str){
for(int i = 1; i < str.length(); i++){ for(int i = 1; i < str.length(); i++){
if(str.charAt(i) == ']'){ if(str.charAt(i) == ']'){
String color = str.substring(1, i); String color = str.substring(1, i);

View File

@@ -32,7 +32,6 @@ public class Renderer implements ApplicationListener{
private static final float cloudScaling = 1700f, cfinScl = -2f, cfinOffset = 0.3f, calphaFinOffset = 0.25f; private static final float cloudScaling = 1700f, cfinScl = -2f, cfinOffset = 0.3f, calphaFinOffset = 0.25f;
private static final float[] cloudAlphas = {0, 0.5f, 1f, 0.1f, 0, 0f}; private static final float[] cloudAlphas = {0, 0.5f, 1f, 0.1f, 0, 0f};
private static final float cloudAlpha = 0.81f; private static final float cloudAlpha = 0.81f;
private static final float[] thrusterSizes = {0f, 0f, 0f, 0f, 0.3f, 1f, 1f, 1f, 1f, 1f, 1f, 1f, 1f, 0f};
private static final Interp landInterp = Interp.pow3; private static final Interp landInterp = Interp.pow3;
public final BlockRenderer blocks = new BlockRenderer(); public final BlockRenderer blocks = new BlockRenderer();
@@ -174,13 +173,14 @@ public class Renderer implements ApplicationListener{
laserOpacity = settings.getInt("lasersopacity") / 100f; laserOpacity = settings.getInt("lasersopacity") / 100f;
bridgeOpacity = settings.getInt("bridgeopacity") / 100f; bridgeOpacity = settings.getInt("bridgeopacity") / 100f;
animateShields = settings.getBool("animatedshields"); animateShields = settings.getBool("animatedshields");
drawStatus = Core.settings.getBool("blockstatus"); drawStatus = settings.getBool("blockstatus");
enableEffects = settings.getBool("effects"); enableEffects = settings.getBool("effects");
drawDisplays = !settings.getBool("hidedisplays"); drawDisplays = !settings.getBool("hidedisplays");
if(landTime > 0){ if(landTime > 0){
if(!state.isPaused()){ if(!state.isPaused()){
updateLandParticles(); CoreBuild build = landCore == null ? player.bestCore() : landCore;
build.updateLandParticles();
} }
if(!state.isPaused()){ if(!state.isPaused()){
@@ -453,63 +453,26 @@ public class Renderer implements ApplicationListener{
} }
void updateLandParticles(){
float time = launching ? coreLandDuration - landTime : landTime;
float tsize = Mathf.sample(thrusterSizes, (time + 35f) / coreLandDuration);
landPTimer += tsize * Time.delta;
if(landCore != null && landPTimer >= 1f){
landCore.tile.getLinkedTiles(t -> {
if(Mathf.chance(0.4f)){
Fx.coreLandDust.at(t.worldx(), t.worldy(), landCore.angleTo(t) + Mathf.range(30f), Tmp.c1.set(t.floor().mapColor).mul(1.5f + Mathf.range(0.15f)));
}
});
landPTimer = 0f;
}
}
void drawLanding(){ void drawLanding(){
CoreBuild build = landCore == null ? player.bestCore() : landCore; CoreBuild build = landCore == null ? player.bestCore() : landCore;
var clouds = assets.get("sprites/clouds.png", Texture.class); var clouds = assets.get("sprites/clouds.png", Texture.class);
if(landTime > 0 && build != null){ if(landTime > 0 && build != null){
float fout = landTime / coreLandDuration; float fout = landTime / coreLandDuration;
if(launching) fout = 1f - fout; if(launching) fout = 1f - fout;
float fin = 1f - fout; float fin = 1f - fout;
//draw core
var block = launching && launchCoreType != null ? launchCoreType : (CoreBlock)build.block;
TextureRegion reg = block.fullIcon;
float scl = Scl.scl(4f) / camerascale; float scl = Scl.scl(4f) / camerascale;
float shake = 0f;
float s = reg.width * reg.scl() * scl * 3.6f * Interp.pow2Out.apply(fout);
float rotation = Interp.pow2In.apply(fout) * 135f, x = build.x + Mathf.range(shake), y = build.y + Mathf.range(shake);
float thrustOpen = 0.25f;
float thrusterFrame = fin >= thrustOpen ? 1f : fin / thrustOpen;
float thrusterSize = Mathf.sample(thrusterSizes, fin);
//when launching, thrusters stay out the entire time.
if(launching){
Interp i = Interp.pow2Out;
thrusterFrame = i.apply(Mathf.clamp(fout*13f));
thrusterSize = i.apply(Mathf.clamp(fout*9f));
}
Draw.color(Pal.lightTrail);
//TODO spikier heat
Draw.rect("circle-shadow", x, y, s, s);
Draw.color(Pal.lightTrail);
float pfin = Interp.pow3Out.apply(fin), pf = Interp.pow2In.apply(fout); float pfin = Interp.pow3Out.apply(fin), pf = Interp.pow2In.apply(fout);
//draw particles //draw particles
Draw.color(Pal.lightTrail);
Angles.randLenVectors(1, pfin, 100, 800f * scl * pfin, (ax, ay, ffin, ffout) -> { Angles.randLenVectors(1, pfin, 100, 800f * scl * pfin, (ax, ay, ffin, ffout) -> {
Lines.stroke(scl * ffin * pf * 3f); Lines.stroke(scl * ffin * pf * 3f);
Lines.lineAngle(build.x + ax, build.y + ay, Mathf.angle(ax, ay), (ffin * 20 + 1f) * scl); Lines.lineAngle(build.x + ax, build.y + ay, Mathf.angle(ax, ay), (ffin * 20 + 1f) * scl);
}); });
Draw.color();
CoreBlock block = launching && launchCoreType != null ? launchCoreType : (CoreBlock)build.block;
block.drawLanding(build, build.x, build.y);
Draw.color(); Draw.color();
Draw.mixcol(Color.white, Interp.pow5In.apply(fout)); Draw.mixcol(Color.white, Interp.pow5In.apply(fout));
@@ -522,44 +485,6 @@ public class Renderer implements ApplicationListener{
} }
} }
Draw.scl(scl);
Draw.alpha(1f);
//draw thruster flame
float strength = (1f + (block.size - 3)/2.5f) * scl * thrusterSize * (0.95f + Mathf.absin(2f, 0.1f));
float offset = (block.size - 3) * 3f * scl;
for(int i = 0; i < 4; i++){
Tmp.v1.trns(i * 90 + rotation, 1f);
Tmp.v1.setLength((block.size * tilesize/2f + 1f)*scl + strength*2f + offset);
Draw.color(build.team.color);
Fill.circle(Tmp.v1.x + x, Tmp.v1.y + y, 6f * strength);
Tmp.v1.setLength((block.size * tilesize/2f + 1f)*scl + strength*0.5f + offset);
Draw.color(Color.white);
Fill.circle(Tmp.v1.x + x, Tmp.v1.y + y, 3.5f * strength);
}
drawThrusters(block, x, y, rotation, thrusterFrame);
Drawf.spinSprite(block.region, x, y, rotation);
Draw.alpha(Interp.pow4In.apply(thrusterFrame));
drawThrusters(block, x, y, rotation, thrusterFrame);
Draw.alpha(1f);
if(block.teamRegions[build.team.id] == block.teamRegion) Draw.color(build.team.color);
Drawf.spinSprite(block.teamRegions[build.team.id], x, y, rotation);
Draw.color();
Draw.scl();
Draw.reset();
//draw clouds //draw clouds
if(state.rules.cloudColor.a > 0.0001f){ if(state.rules.cloudColor.a > 0.0001f){
float scaling = cloudScaling; float scaling = cloudScaling;
@@ -582,32 +507,6 @@ public class Renderer implements ApplicationListener{
} }
} }
void drawThrusters(CoreBlock block, float x, float y, float rotation, float frame){
float length = block.thrusterLength * (frame - 1f) - 1f/4f;
float alpha = Draw.getColor().a;
//two passes for consistent lighting
for(int j = 0; j < 2; j++){
for(int i = 0; i < 4; i++){
var reg = i >= 2 ? block.thruster2 : block.thruster1;
float rot = (i * 90) + rotation % 90f;
Tmp.v1.trns(rot, length * Draw.xscl);
//second pass applies extra layer of shading
if(j == 1){
Tmp.v1.rotate(-90f);
Draw.alpha((rotation % 90f) / 90f * alpha);
rot -= 90f;
Draw.rect(reg, x + Tmp.v1.x, y + Tmp.v1.y, rot);
}else{
Draw.alpha(alpha);
Draw.rect(reg, x + Tmp.v1.x, y + Tmp.v1.y, rot);
}
}
}
Draw.alpha(1f);
}
public void scaleCamera(float amount){ public void scaleCamera(float amount){
targetscale *= (amount / 4) + 1; targetscale *= (amount / 4) + 1;
clampScale(); clampScale();
@@ -638,6 +537,26 @@ public class Renderer implements ApplicationListener{
clampScale(); clampScale();
} }
public boolean isLaunching(){
return launching;
}
public CoreBlock getLaunchCoreType(){
return launchCoreType;
}
public float getLandTime(){
return landTime;
}
public float getLandPTimer(){
return landPTimer;
}
public void setLandPTimer(float landPTimer){
this.landPTimer = landPTimer;
}
public void showLanding(){ public void showLanding(){
launching = false; launching = false;
camerascale = minZoomScl; camerascale = minZoomScl;

View File

@@ -75,6 +75,8 @@ public class UI implements ApplicationListener, Loadable{
public FullTextDialog fullText; public FullTextDialog fullText;
public CampaignCompleteDialog campaignComplete; public CampaignCompleteDialog campaignComplete;
public IntMap<Dialog> followUpMenus;
public Cursor drillCursor, unloadCursor, targetCursor; public Cursor drillCursor, unloadCursor, targetCursor;
private @Nullable Element lastAnnouncement; private @Nullable Element lastAnnouncement;
@@ -202,6 +204,7 @@ public class UI implements ApplicationListener, Loadable{
logic = new LogicDialog(); logic = new LogicDialog();
fullText = new FullTextDialog(); fullText = new FullTextDialog();
campaignComplete = new CampaignCompleteDialog(); campaignComplete = new CampaignCompleteDialog();
followUpMenus = new IntMap<>();
Group group = Core.scene.root; Group group = Core.scene.root;
@@ -261,28 +264,32 @@ public class UI implements ApplicationListener, Loadable{
}); });
} }
public void showTextInput(String titleText, String dtext, int textLength, String def, boolean inumeric, Cons<String> confirmed){ public void showTextInput(String titleText, String text, int textLength, String def, boolean numbers, Cons<String> confirmed, Runnable closed){
if(mobile){ if(mobile){
Core.input.getTextInput(new TextInput(){{ Core.input.getTextInput(new TextInput(){{
this.title = (titleText.startsWith("@") ? Core.bundle.get(titleText.substring(1)) : titleText); this.title = (titleText.startsWith("@") ? Core.bundle.get(titleText.substring(1)) : titleText);
this.text = def; this.text = def;
this.numeric = inumeric; this.numeric = numbers;
this.maxLength = textLength; this.maxLength = textLength;
this.accepted = confirmed; this.accepted = confirmed;
this.allowEmpty = false; this.allowEmpty = false;
}}); }});
}else{ }else{
new Dialog(titleText){{ new Dialog(titleText){{
cont.margin(30).add(dtext).padRight(6f); cont.margin(30).add(text).padRight(6f);
TextFieldFilter filter = inumeric ? TextFieldFilter.digitsOnly : (f, c) -> true; TextFieldFilter filter = numbers ? TextFieldFilter.digitsOnly : (f, c) -> true;
TextField field = cont.field(def, t -> {}).size(330f, 50f).get(); TextField field = cont.field(def, t -> {}).size(330f, 50f).get();
field.setFilter((f, c) -> field.getText().length() < textLength && filter.acceptChar(f, c)); field.setFilter((f, c) -> field.getText().length() < textLength && filter.acceptChar(f, c));
buttons.defaults().size(120, 54).pad(4); buttons.defaults().size(120, 54).pad(4);
buttons.button("@cancel", this::hide); buttons.button("@cancel", () -> {
closed.run();
hide();
});
buttons.button("@ok", () -> { buttons.button("@ok", () -> {
confirmed.get(field.getText()); confirmed.get(field.getText());
hide(); hide();
}).disabled(b -> field.getText().isEmpty()); }).disabled(b -> field.getText().isEmpty());
keyDown(KeyCode.enter, () -> { keyDown(KeyCode.enter, () -> {
String text = field.getText(); String text = field.getText();
if(!text.isEmpty()){ if(!text.isEmpty()){
@@ -290,9 +297,10 @@ public class UI implements ApplicationListener, Loadable{
hide(); hide();
} }
}); });
keyDown(KeyCode.escape, this::hide);
keyDown(KeyCode.back, this::hide); closeOnBack(closed);
show(); show();
Core.scene.setKeyboardFocus(field); Core.scene.setKeyboardFocus(field);
field.setCursorPosition(def.length()); field.setCursorPosition(def.length());
}}; }};
@@ -303,8 +311,12 @@ public class UI implements ApplicationListener, Loadable{
showTextInput(title, text, 32, def, confirmed); showTextInput(title, text, 32, def, confirmed);
} }
public void showTextInput(String titleText, String text, int textLength, String def, Cons<String> confirmed){ public void showTextInput(String title, String text, int textLength, String def, Cons<String> confirmed){
showTextInput(titleText, text, textLength, def, false, confirmed); showTextInput(title, text, textLength, def, false, confirmed);
}
public void showTextInput(String title, String text, int textLength, String def, boolean numeric, Cons<String> confirmed){
showTextInput(title, text, textLength, def, numeric, confirmed, () -> {});
} }
public void showInfoFade(String info){ public void showInfoFade(String info){
@@ -322,6 +334,24 @@ public class UI implements ApplicationListener, Loadable{
Core.scene.add(table); Core.scene.add(table);
} }
public void addDescTooltip(Element elem, String description){
if(description == null) return;
elem.addListener(new Tooltip(t -> t.background(Styles.black8).margin(4f).add(description).color(Color.lightGray)){
{
allowMobile = true;
}
@Override
protected void setContainerPosition(Element element, float x, float y){
this.targetActor = element;
Vec2 pos = element.localToStageCoordinates(Tmp.v1.set(0, 0));
container.pack();
container.setPosition(pos.x, pos.y, Align.topLeft);
container.setOrigin(0, element.getHeight());
}
});
}
/** Shows a fading label at the top of the screen. */ /** Shows a fading label at the top of the screen. */
public void showInfoToast(String info, float duration){ public void showInfoToast(String info, float duration){
var cinfo = Core.scene.find("coreinfo"); var cinfo = Core.scene.find("coreinfo");
@@ -419,6 +449,8 @@ public class UI implements ApplicationListener, Loadable{
} }
public void showException(String text, Throwable exc){ public void showException(String text, Throwable exc){
if(loadfrag == null) return;
loadfrag.hide(); loadfrag.hide();
new Dialog(""){{ new Dialog(""){{
String message = Strings.getFinalMessage(exc); String message = Strings.getFinalMessage(exc);
@@ -562,17 +594,12 @@ public class UI implements ApplicationListener, Loadable{
dialog.show(); dialog.show();
} }
/** Shows a menu that fires a callback when an option is selected. If nothing is selected, -1 is returned. */ public Dialog newMenuDialog(String title, String message, String[][] options, Intc buttonListener, Runnable closeOnBack){
public void showMenu(String title, String message, String[][] options, Intc callback){ return new Dialog(title){{
new Dialog("[accent]" + title){{
setFillParent(true); setFillParent(true);
removeChild(titleTable); removeChild(titleTable);
cont.add(titleTable).width(400f); cont.add(titleTable).width(400f);
getStyle().titleFontColor = Color.white;
title.getStyle().fontColor = Color.white;
title.setStyle(title.getStyle());
cont.row(); cont.row();
cont.image().width(400f).pad(2).colspan(2).height(4f).color(Pal.accent).bottom(); cont.image().width(400f).pad(2).colspan(2).height(4f).color(Pal.accent).bottom();
cont.row(); cont.row();
@@ -592,16 +619,46 @@ public class UI implements ApplicationListener, Loadable{
String optionName = optionsRow[i]; String optionName = optionsRow[i];
int finalOption = option; int finalOption = option;
buttonRow.button(optionName, () -> { buttonRow.button(optionName, () -> buttonListener.get(finalOption))
callback.get(finalOption); .size(i == optionsRow.length - 1 ? lastWidth : width, 50).pad(4);
hide();
}).size(i == optionsRow.length - 1 ? lastWidth : width, 50).pad(4);
option++; option++;
} }
} }
}).growX(); }).growX();
closeOnBack(() -> callback.get(-1)); closeOnBack(closeOnBack);
}}.show(); }};
}
/** Shows a menu that fires a callback when an option is selected. If nothing is selected, -1 is returned. */
public void showMenu(String title, String message, String[][] options, Intc callback){
newMenuDialog(title, message, options, option -> {
callback.get(option);
hide();
}, () -> callback.get(-1)).show();
}
/** Shows a menu that hides when another followUp-menu is shown or when nothing is selected.
* @see UI#showMenu(String, String, String[][], Intc) */
public void showFollowUpMenu(int menuId, String title, String message, String[][] options, Intc callback) {
Dialog dialog = newMenuDialog(title, message, options, callback, () -> {
followUpMenus.remove(menuId);
callback.get(-1);
});
Dialog oldDialog = followUpMenus.remove(menuId);
if(oldDialog != null){
dialog.show(Core.scene, null);
oldDialog.hide(null);
}else{
dialog.show();
}
followUpMenus.put(menuId, dialog);
}
public void hideFollowUpMenu(int menuId) {
if(!followUpMenus.containsKey(menuId)) return;
followUpMenus.remove(menuId).hide();
} }
/** Formats time with hours:minutes:seconds. */ /** Formats time with hours:minutes:seconds. */

View File

@@ -160,7 +160,7 @@ public class Damage{
//add distance to list so it can be processed //add distance to list so it can be processed
var build = world.build(x, y); var build = world.build(x, y);
if(build != null && build.team != b.team && b.checkUnderBuild(build, x * tilesize, y * tilesize)){ if(build != null && build.team != b.team && build.collide(b) && b.checkUnderBuild(build, x * tilesize, y * tilesize)){
distances.add(b.dst(build)); distances.add(b.dst(build));
if(b.type.laserAbsorb && build.absorbLasers()){ if(b.type.laserAbsorb && build.absorbLasers()){
@@ -237,7 +237,8 @@ public class Damage{
seg2.set(seg1).add(vec); seg2.set(seg1).add(vec);
World.raycastEachWorld(x, y, seg2.x, seg2.y, (cx, cy) -> { World.raycastEachWorld(x, y, seg2.x, seg2.y, (cx, cy) -> {
Building tile = world.build(cx, cy); Building tile = world.build(cx, cy);
boolean collide = tile != null && hitter.checkUnderBuild(tile, cx * tilesize, cy * tilesize) && collidedBlocks.add(tile.pos()); boolean collide = tile != null && tile.collide(hitter) && hitter.checkUnderBuild(tile, cx * tilesize, cy * tilesize)
&& ((tile.team != team && tile.collide(hitter)) || hitter.type.testCollision(hitter, tile)) && collidedBlocks.add(tile.pos());
if(collide){ if(collide){
collided.add(collidePool.obtain().set(cx * tilesize, cy * tilesize, tile)); collided.add(collidePool.obtain().set(cx * tilesize, cy * tilesize, tile));
@@ -275,17 +276,19 @@ public class Damage{
int[] collideCount = {0}; int[] collideCount = {0};
collided.sort(c -> hitter.dst2(c.x, c.y)); collided.sort(c -> hitter.dst2(c.x, c.y));
collided.each(c -> { collided.each(c -> {
if(hitter.damage > 0 && (pierceCap <= 0 || collideCount[0]++ < pierceCap)){ if(hitter.damage > 0 && (pierceCap <= 0 || collideCount[0] < pierceCap)){
if(c.target instanceof Unit u){ if(c.target instanceof Unit u){
effect.at(c.x, c.y); effect.at(c.x, c.y);
u.collision(hitter, c.x, c.y); u.collision(hitter, c.x, c.y);
hitter.collision(u, c.x, c.y); hitter.collision(u, c.x, c.y);
collideCount[0]++;
}else if(c.target instanceof Building tile){ }else if(c.target instanceof Building tile){
float health = tile.health; float health = tile.health;
if(tile.team != team && tile.collide(hitter)){ if(tile.team != team && tile.collide(hitter)){
tile.collision(hitter); tile.collision(hitter);
hitter.type.hit(hitter, c.x, c.y); hitter.type.hit(hitter, c.x, c.y);
collideCount[0]++;
} }
//try to heal the tile //try to heal the tile
@@ -615,7 +618,7 @@ public class Damage{
return Math.max(damage - armor, minArmorDamage * damage); return Math.max(damage - armor, minArmorDamage * damage);
} }
public static class Collided{ public static class Collided implements Pool.Poolable{
public float x, y; public float x, y;
public Teamc target; public Teamc target;
@@ -625,5 +628,10 @@ public class Damage{
this.target = target; this.target = target;
return this; return this;
} }
@Override
public void reset(){
target = null;
}
} }
} }

View File

@@ -206,7 +206,7 @@ public class EntityGroup<T extends Entityc> implements Iterable<T>{
//fix incorrect HEAD index since it was swapped //fix incorrect HEAD index since it was swapped
if(array.size > 0 && idx != array.size){ if(array.size > 0 && idx != array.size){
var swapped = array.items[idx]; var swapped = array.items[idx];
indexer.change(swapped, idx); if(indexer != null) indexer.change(swapped, idx);
} }
if(map != null){ if(map != null){
@@ -228,7 +228,7 @@ public class EntityGroup<T extends Entityc> implements Iterable<T>{
//swap head with current //swap head with current
if(array.size > 1){ if(array.size > 1){
var head = array.items[array.size - 1]; var head = array.items[array.size - 1];
indexer.change(head, position); if(indexer != null) indexer.change(head, position);
array.items[position] = head; array.items[position] = head;
} }

View File

@@ -93,13 +93,13 @@ public class ForceFieldAbility extends Ability{
checkRadius(unit); checkRadius(unit);
if(unit.shield > 0){ if(unit.shield > 0){
Draw.z(Layer.shields);
Draw.color(unit.team.color, Color.white, Mathf.clamp(alpha)); Draw.color(unit.team.color, Color.white, Mathf.clamp(alpha));
if(Vars.renderer.animateShields){ if(Vars.renderer.animateShields){
Draw.z(Layer.shields + 0.001f * alpha);
Fill.poly(unit.x, unit.y, sides, realRad, rotation); Fill.poly(unit.x, unit.y, sides, realRad, rotation);
}else{ }else{
Draw.z(Layer.shields);
Lines.stroke(1.5f); Lines.stroke(1.5f);
Draw.alpha(0.09f); Draw.alpha(0.09f);
Fill.poly(unit.x, unit.y, sides, radius, rotation); Fill.poly(unit.x, unit.y, sides, radius, rotation);

View File

@@ -46,6 +46,8 @@ public class BulletType extends Content implements Cloneable{
public boolean pierceBuilding; public boolean pierceBuilding;
/** Maximum # of pierced objects. */ /** Maximum # of pierced objects. */
public int pierceCap = -1; public int pierceCap = -1;
/** Multiplier of damage decreased per health pierced. */
public float pierceDamageFactor = 0f;
/** If false, this bullet isn't removed after pierceCap is exceeded. Expert usage only. */ /** If false, this bullet isn't removed after pierceCap is exceeded. Expert usage only. */
public boolean removeAfterPierce = true; public boolean removeAfterPierce = true;
/** For piercing lasers, setting this to true makes it get absorbed by plastanium walls. */ /** For piercing lasers, setting this to true makes it get absorbed by plastanium walls. */
@@ -143,7 +145,7 @@ public class BulletType extends Content implements Cloneable{
public boolean fragOnHit = true; public boolean fragOnHit = true;
/** If false, this bullet will not create fraags when absorbed by a shield. */ /** If false, this bullet will not create fraags when absorbed by a shield. */
public boolean fragOnAbsorb = true; public boolean fragOnAbsorb = true;
/** If true, unit armor is ignored in damage calculations. Ignored for building armor. */ /** If true, unit armor is ignored in damage calculations. */
public boolean pierceArmor = false; public boolean pierceArmor = false;
/** Whether status and despawnHit should automatically be set. */ /** Whether status and despawnHit should automatically be set. */
public boolean setDefaults = true; public boolean setDefaults = true;
@@ -177,6 +179,8 @@ public class BulletType extends Content implements Cloneable{
public float intervalSpread = 0f; public float intervalSpread = 0f;
/** Angle offset for interval bullets. */ /** Angle offset for interval bullets. */
public float intervalAngle = 0f; public float intervalAngle = 0f;
/** Use a negative value to disable interval bullet delay. */
public float intervalDelay = -1f;
/** Color used for hit/despawn effects. */ /** Color used for hit/despawn effects. */
public Color hitColor = Color.white; public Color hitColor = Color.white;
@@ -358,6 +362,8 @@ public class BulletType extends Content implements Cloneable{
}else if(build.team != b.team && direct){ }else if(build.team != b.team && direct){
hit(b); hit(b);
} }
handlePierce(b, initialHealth, x, y);
} }
public void hitEntity(Bullet b, Hitboxc entity, float health){ public void hitEntity(Bullet b, Hitboxc entity, float health){
@@ -383,6 +389,19 @@ public class BulletType extends Content implements Cloneable{
if(!wasDead && entity instanceof Unit unit && unit.dead){ if(!wasDead && entity instanceof Unit unit && unit.dead){
Events.fire(new UnitBulletDestroyEvent(unit, b)); Events.fire(new UnitBulletDestroyEvent(unit, b));
} }
handlePierce(b, health, entity.x(), entity.y());
}
public void handlePierce(Bullet b, float initialHealth, float x, float y){
float sub = Math.max(initialHealth*pierceDamageFactor, 0);
//subtract health from each consecutive pierce
b.damage -= Math.min(b.damage, sub);
if(removeAfterPierce && b.damage <= 0){
b.hit = true;
b.remove();
}
} }
public float damageMultiplier(Bullet b){ public float damageMultiplier(Bullet b){
@@ -557,7 +576,7 @@ public class BulletType extends Content implements Cloneable{
} }
public void updateBulletInterval(Bullet b){ public void updateBulletInterval(Bullet b){
if(intervalBullet != null && b.timer.get(2, bulletInterval)){ if(intervalBullet != null && b.time >= intervalDelay && b.timer.get(2, bulletInterval)){
float ang = b.rotation(); float ang = b.rotation();
for(int i = 0; i < intervalBullets; i++){ for(int i = 0; i < intervalBullets; i++){
intervalBullet.create(b, b.x, b.y, ang + Mathf.range(intervalRandomSpread) + intervalAngle + ((i - (intervalBullets - 1f)/2f) * intervalSpread)); intervalBullet.create(b, b.x, b.y, ang + Mathf.range(intervalRandomSpread) + intervalAngle + ((i - (intervalBullets - 1f)/2f) * intervalSpread));

View File

@@ -45,6 +45,11 @@ public class PointLaserBulletType extends BulletType{
drawSize = 1000f; drawSize = 1000f;
} }
@Override
public float continuousDamage(){
return damage / damageInterval * 60f;
}
@Override @Override
public float estimateDPS(){ public float estimateDPS(){
return damage * 100f / damageInterval * 3f; return damage * 100f / damageInterval * 3f;

View File

@@ -13,8 +13,6 @@ public class RailBulletType extends BulletType{
public Effect pierceEffect = Fx.hitBulletSmall, pointEffect = Fx.none, lineEffect = Fx.none; public Effect pierceEffect = Fx.hitBulletSmall, pointEffect = Fx.none, lineEffect = Fx.none;
public Effect endEffect = Fx.none; public Effect endEffect = Fx.none;
/** Multiplier of damage decreased per health pierced. */
public float pierceDamageFactor = 1f;
public float length = 100f; public float length = 100f;
@@ -37,8 +35,9 @@ public class RailBulletType extends BulletType{
return length; return length;
} }
void handle(Bullet b, float initialHealth, float x, float y){ @Override
float sub = Math.max(initialHealth*pierceDamageFactor, 0); public void handlePierce(Bullet b, float initialHealth, float x, float y){
float sub = Math.max(initialHealth * pierceDamageFactor, 0);
if(b.damage <= 0){ if(b.damage <= 0){
b.fdata = Math.min(b.fdata, b.dst(x, y)); b.fdata = Math.min(b.fdata, b.dst(x, y));
@@ -93,14 +92,8 @@ public class RailBulletType extends BulletType{
return bullet.team != tile.team; return bullet.team != tile.team;
} }
@Override
public void hitEntity(Bullet b, Hitboxc entity, float health){
super.hitEntity(b, entity, health);
handle(b, health, entity.getX(), entity.getY());
}
@Override @Override
public void hitTile(Bullet b, Building build, float x, float y, float initialHealth, boolean direct){ public void hitTile(Bullet b, Building build, float x, float y, float initialHealth, boolean direct){
handle(b, initialHealth, x, y); handlePierce(b, initialHealth, x, y);
} }
} }

View File

@@ -144,7 +144,7 @@ abstract class BuilderComp implements Posc, Statusc, Teamc, Rotc{
} }
if(tile.build instanceof ConstructBuild && !current.initialized){ if(tile.build instanceof ConstructBuild && !current.initialized){
Core.app.post(() -> Events.fire(new BuildSelectEvent(tile, team, self(), current.breaking))); Events.fire(new BuildSelectEvent(tile, team, self(), current.breaking));
current.initialized = true; current.initialized = true;
} }

View File

@@ -48,7 +48,7 @@ import static mindustry.Vars.*;
@EntityDef(value = {Buildingc.class}, isFinal = false, genio = false, serialize = false) @EntityDef(value = {Buildingc.class}, isFinal = false, genio = false, serialize = false)
@Component(base = true) @Component(base = true)
abstract class BuildingComp implements Posc, Teamc, Healthc, Buildingc, Timerc, QuadTreeObject, Displayable, Senseable, Controllable, Sized{ abstract class BuildingComp implements Posc, Teamc, Healthc, Buildingc, Timerc, QuadTreeObject, Displayable, Sized, Senseable, Controllable, Settable{
//region vars and initialization //region vars and initialization
static final float timeToSleep = 60f * 1, recentDamageTime = 60f * 5f; static final float timeToSleep = 60f * 1, recentDamageTime = 60f * 5f;
static final ObjectSet<Building> tmpTiles = new ObjectSet<>(); static final ObjectSet<Building> tmpTiles = new ObjectSet<>();
@@ -1254,7 +1254,7 @@ abstract class BuildingComp implements Posc, Teamc, Healthc, Buildingc, Timerc,
public void placed(){ public void placed(){
if(net.client()) return; if(net.client()) return;
if((block.consumesPower || block.outputsPower) && block.hasPower){ if((block.consumesPower || block.outputsPower) && block.hasPower && block.connectedPower){
PowerNode.getNodeLinks(tile, block, team, other -> { PowerNode.getNodeLinks(tile, block, team, other -> {
if(!other.power.links.contains(pos())){ if(!other.power.links.contains(pos())){
other.configureAny(pos()); other.configureAny(pos());
@@ -1746,7 +1746,9 @@ abstract class BuildingComp implements Posc, Teamc, Healthc, Buildingc, Timerc,
public void updateConsumption(){ public void updateConsumption(){
//everything is valid when cheating //everything is valid when cheating
if(!block.hasConsumers || cheating()){ if(!block.hasConsumers || cheating()){
potentialEfficiency = efficiency = optionalEfficiency = enabled ? 1f : 0f; potentialEfficiency = enabled && productionValid() ? 1f : 0f;
efficiency = optionalEfficiency = shouldConsume() ? potentialEfficiency : 0f;
updateEfficiencyMultiplier();
return; return;
} }
@@ -1949,6 +1951,58 @@ abstract class BuildingComp implements Posc, Teamc, Healthc, Buildingc, Timerc,
} }
} }
@Override
public void setProp(LAccess prop, double value){
switch(prop){
case health -> {
health = (float)Mathf.clamp(value, 0, maxHealth);
healthChanged();
}
case team -> {
Team team = Team.get((int)value);
if(this.team != team){
changeTeam(team);
}
}
case totalPower -> {
if(power != null && block.consPower != null && block.consPower.buffered){
power.status = Mathf.clamp((float)(value / block.consPower.capacity));
}
}
}
}
@Override
public void setProp(LAccess prop, Object value){
switch(prop){
case team -> {
if(value instanceof Team team && this.team != team){
changeTeam(team);
}
}
}
}
@Override
public void setProp(UnlockableContent content, double value){
if(content instanceof Item item && items != null){
int amount = (int)value;
if(items.get(item) != amount){
if(items.get(item) < amount){
handleStack(item, acceptStack(item, amount - items.get(item), null), null);
}else if(amount >= 0){
removeStack(item, items.get(item) - amount);
}
}
}else if(content instanceof Liquid liquid && liquids != null){
float amount = Mathf.clamp((float)value, 0f, block.liquidCapacity);
//decreasing amount is always allowed
if(amount < liquids.get(liquid) || (acceptLiquid(self(), liquid) && (liquids.current() == liquid || liquids.currentAmount() <= 0.1f))){
liquids.set(liquid, amount);
}
}
}
@Replace @Replace
@Override @Override
public boolean inFogTo(Team viewer){ public boolean inFogTo(Team viewer){

View File

@@ -93,6 +93,11 @@ abstract class PlayerComp implements UnitController, Entityc, Syncc, Timerc, Dra
return isAdded(); return isAdded();
} }
@Override
public boolean isLogicControllable(){
return false;
}
@Replace @Replace
public float clipSize(){ public float clipSize(){
return unit.isNull() ? 20 : unit.type.hitSize * 2f; return unit.isNull() ? 20 : unit.type.hitSize * 2f;

View File

@@ -34,14 +34,14 @@ abstract class ShieldComp implements Healthc, Posc{
public void damagePierce(float amount, boolean withEffect){ public void damagePierce(float amount, boolean withEffect){
float pre = hitTime; float pre = hitTime;
rawDamage(amount); rawDamage(amount / healthMultiplier);
if(!withEffect){ if(!withEffect){
hitTime = pre; hitTime = pre;
} }
} }
private void rawDamage(float amount){ protected void rawDamage(float amount){
boolean hadShields = shield > 0.0001f; boolean hadShields = shield > 0.0001f;
if(hadShields){ if(hadShields){

View File

@@ -31,7 +31,7 @@ import static mindustry.Vars.*;
import static mindustry.logic.GlobalVars.*; import static mindustry.logic.GlobalVars.*;
@Component(base = true) @Component(base = true)
abstract class UnitComp implements Healthc, Physicsc, Hitboxc, Statusc, Teamc, Itemsc, Rotc, Unitc, Weaponsc, Drawc, Boundedc, Syncc, Shieldc, Displayable, Senseable, Ranged, Minerc, Builderc{ abstract class UnitComp implements Healthc, Physicsc, Hitboxc, Statusc, Teamc, Itemsc, Rotc, Unitc, Weaponsc, Drawc, Boundedc, Syncc, Shieldc, Displayable, Ranged, Minerc, Builderc, Senseable, Settable{
@Import boolean hovering, dead, disarmed; @Import boolean hovering, dead, disarmed;
@Import float x, y, rotation, elevation, maxHealth, drag, armor, hitSize, health, ammo, dragMultiplier; @Import float x, y, rotation, elevation, maxHealth, drag, armor, hitSize, health, ammo, dragMultiplier;
@@ -40,6 +40,7 @@ abstract class UnitComp implements Healthc, Physicsc, Hitboxc, Statusc, Teamc, I
@Import @Nullable Tile mineTile; @Import @Nullable Tile mineTile;
@Import Vec2 vel; @Import Vec2 vel;
@Import WeaponMount[] mounts; @Import WeaponMount[] mounts;
@Import ItemStack stack;
private UnitController controller; private UnitController controller;
Ability[] abilities = {}; Ability[] abilities = {};
@@ -64,7 +65,7 @@ abstract class UnitComp implements Healthc, Physicsc, Hitboxc, Statusc, Teamc, I
} }
public void updateBoosting(boolean boost){ public void updateBoosting(boolean boost){
if(!type.canBoost) return; if(!type.canBoost || dead) return;
elevation = Mathf.approachDelta(elevation, type.canBoost ? Mathf.num(boost || onSolid() || (isFlying() && !canLand())) : 0f, type.riseSpeed); elevation = Mathf.approachDelta(elevation, type.canBoost ? Mathf.num(boost || onSolid() || (isFlying() && !canLand())) : 0f, type.riseSpeed);
} }
@@ -257,6 +258,60 @@ abstract class UnitComp implements Healthc, Physicsc, Hitboxc, Statusc, Teamc, I
return Float.NaN; return Float.NaN;
} }
@Override
public void setProp(LAccess prop, double value){
switch(prop){
case health -> health = (float)Mathf.clamp(value, 0, maxHealth);
case x -> x = World.unconv((float)value);
case y -> y = World.unconv((float)value);
case rotation -> rotation = (float)value;
case team -> {
if(!net.client()){
Team team = Team.get((int)value);
if(controller instanceof Player p){
p.team(team);
}
this.team = team;
}
}
case flag -> flag = value;
}
}
@Override
public void setProp(LAccess prop, Object value){
switch(prop){
case team -> {
if(value instanceof Team t && !net.client()){
if(controller instanceof Player p) p.team(t);
team = t;
}
}
case payloadType -> {
//only serverside
if(((Object)this) instanceof Payloadc pay && !net.client()){
if(value instanceof Block b){
Building build = b.newBuilding().create(b, team());
if(pay.canPickup(build)) pay.addPayload(new BuildPayload(build));
}else if(value instanceof UnitType ut){
Unit unit = ut.create(team());
if(pay.canPickup(unit)) pay.addPayload(new UnitPayload(unit));
}else if(value == null && pay.payloads().size > 0){
pay.dropLastPayload();
}
}
}
}
}
@Override
public void setProp(UnlockableContent content, double value){
if(content instanceof Item item){
stack.item = item;
stack.amount = Mathf.clamp((int)value, 0, type.itemCapacity);
}
}
@Override @Override
@Replace @Replace
public boolean canDrown(){ public boolean canDrown(){

View File

@@ -1,5 +1,6 @@
package mindustry.entities.effect; package mindustry.entities.effect;
import arc.graphics.*;
import arc.math.*; import arc.math.*;
import mindustry.content.*; import mindustry.content.*;
import mindustry.entities.*; import mindustry.entities.*;
@@ -24,26 +25,14 @@ public class RadialEffect extends Effect{
} }
@Override @Override
public void init(){ public void create(float x, float y, float rotation, Color color, Object data){
effect.init(); if(!shouldCreate()) return;
clip = Math.max(clip, effect.clip);
lifetime = effect.lifetime;
}
@Override rotation += rotationOffset;
public void render(EffectContainer e){
float x = e.x, y = e.y;
e.rotation += rotationOffset;
for(int i = 0; i < amount; i++){ for(int i = 0; i < amount; i++){
e.x = x + Angles.trnsx(e.rotation, lengthOffset); effect.create(x + Angles.trnsx(rotation, lengthOffset), y + Angles.trnsy(rotation, lengthOffset), rotation, color, data);
e.y = y + Angles.trnsy(e.rotation, lengthOffset); rotation += rotationSpacing;
effect.render(e);
e.rotation += rotationSpacing;
e.id ++;
} }
clip = Math.max(clip, effect.clip);
} }
} }

View File

@@ -55,6 +55,11 @@ public class AIController implements UnitController{
return false; return false;
} }
@Override
public boolean isLogicControllable(){
return true;
}
public void stopShooting(){ public void stopShooting(){
for(var mount : unit.mounts){ for(var mount : unit.mounts){
//ignore mount controllable stats too, they should not shoot either //ignore mount controllable stats too, they should not shoot either
@@ -222,6 +227,10 @@ public class AIController implements UnitController{
return target(x, y, range, air, ground); return target(x, y, range, air, ground);
} }
public void commandTarget(Teamc moveTo){}
public void commandPosition(Vec2 pos){}
/** Called after this controller is assigned a unit. */ /** Called after this controller is assigned a unit. */
public void init(){ public void init(){

View File

@@ -14,6 +14,11 @@ public interface UnitController{
return true; return true;
} }
/** @return whether logic AI can take over */
default boolean isLogicControllable(){
return false;
}
default void updateUnit(){ default void updateUnit(){
} }

View File

@@ -162,6 +162,16 @@ public class EventType{
} }
} }
public static class ClientServerConnectEvent{
public final String ip;
public final int port;
public ClientServerConnectEvent(String ip, int port){
this.ip = ip;
this.port = port;
}
}
/** Consider using Menus.registerMenu instead. */ /** Consider using Menus.registerMenu instead. */
public static class MenuOptionChooseEvent{ public static class MenuOptionChooseEvent{
public final Player player; public final Player player;
@@ -169,8 +179,21 @@ public class EventType{
public MenuOptionChooseEvent(Player player, int menuId, int option){ public MenuOptionChooseEvent(Player player, int menuId, int option){
this.player = player; this.player = player;
this.option = option;
this.menuId = menuId; this.menuId = menuId;
this.option = option;
}
}
/** Consider using Menus.registerTextInput instead. */
public static class TextInputEvent{
public final Player player;
public final int textInputId;
public final @Nullable String text;
public TextInputEvent(Player player, int textInputId, String text){
this.player = player;
this.textInputId = textInputId;
this.text = text;
} }
} }

View File

@@ -31,6 +31,8 @@ public class Rules{
public boolean waves; public boolean waves;
/** Whether the game objective is PvP. Note that this enables automatic hosting. */ /** Whether the game objective is PvP. Note that this enables automatic hosting. */
public boolean pvp; public boolean pvp;
/** Whether is waiting for players enabled in PvP. */
public boolean pvpAutoPause = true;
/** Whether to pause the wave timer until all enemies are destroyed. */ /** Whether to pause the wave timer until all enemies are destroyed. */
public boolean waitEnemies = false; public boolean waitEnemies = false;
/** Determines if gamemode is attack mode. */ /** Determines if gamemode is attack mode. */

View File

@@ -42,7 +42,7 @@ public class Team implements Comparable<Team>{
Mathf.rand.setSeed(8); Mathf.rand.setSeed(8);
//create the whole 256 placeholder teams //create the whole 256 placeholder teams
for(int i = 6; i < all.length; i++){ for(int i = 6; i < all.length; i++){
new Team(i, "team#" + i, Color.HSVtoRGB(360f * Mathf.random(), 100f * Mathf.random(0.6f, 1f), 100f * Mathf.random(0.8f, 1f), 1f)); new Team(i, "team#" + i, Color.HSVtoRGB(360f * Mathf.random(), 100f * Mathf.random(0.4f, 1f), 100f * Mathf.random(0.6f, 1f), 1f));
} }
Mathf.rand.setSeed(new Rand().nextLong()); Mathf.rand.setSeed(new Rand().nextLong());
} }

View File

@@ -10,7 +10,7 @@ import mindustry.type.*;
import static mindustry.content.UnitTypes.*; import static mindustry.content.UnitTypes.*;
public class Waves{ public class Waves{
public static final int waveVersion = 5; public static final int waveVersion = 6;
private Seq<SpawnGroup> spawns; private Seq<SpawnGroup> spawns;

View File

@@ -12,6 +12,19 @@ public class InverseKinematics{
return solve(lengthA, lengthB, end, at1, result); return solve(lengthA, lengthB, end, at1, result);
} }
/**
inputs:
@param lengthA first line segment length
@param lengthB second line segment length
@param end length of the endpoint you want to reach
@param attractor direction you want the result to be closer to (since there are usually 2 solutions)
output:
@param result a point in-between (0, 0) and (end) such that (0, 0).dst(result) == lengthA and result.dst(end) == lengthB - or in basic terms, the position of a joint between (0, 0) and end where the two lengths of segments are lengthA and lengthB
@return whether IK succeeded (this can fail if end is too far, for example)
*/
public static boolean solve(float lengthA, float lengthB, Vec2 end, Vec2 attractor, Vec2 result){ public static boolean solve(float lengthA, float lengthB, Vec2 end, Vec2 attractor, Vec2 result){
Vec2 axis = mat2[0].set(end).nor(); Vec2 axis = mat2[0].set(end).nor();
mat2[1].set(attractor).sub(temp2.set(axis).scl(attractor.dot(axis))).nor(); mat2[1].set(attractor).sub(temp2.set(axis).scl(attractor.dot(axis))).nor();

View File

@@ -188,9 +188,10 @@ public class PlanetRenderer implements Disposable{
} }
//render sector grid //render sector grid
Mesh mesh = outline(planet.grid.size); float scaledOutlineRad = outlineRad * planet.radius;
Mesh mesh = outline(planet.grid.size, planet.radius);
Shader shader = Shaders.planetGrid; Shader shader = Shaders.planetGrid;
Vec3 tile = planet.intersect(cam.getMouseRay(), outlineRad); Vec3 tile = planet.intersect(cam.getMouseRay(), scaledOutlineRad);
Shaders.planetGrid.mouse.lerp(tile == null ? Vec3.Zero : tile.sub(planet.position).rotate(Vec3.Y, planet.getRotation()), 0.2f); Shaders.planetGrid.mouse.lerp(tile == null ? Vec3.Zero : tile.sub(planet.position).rotate(Vec3.Y, planet.getRotation()), 0.2f);
shader.bind(); shader.bind();
@@ -210,13 +211,14 @@ public class PlanetRenderer implements Disposable{
public void drawArc(Planet planet, Vec3 a, Vec3 b, Color from, Color to, float length, float timeScale, int pointCount){ public void drawArc(Planet planet, Vec3 a, Vec3 b, Color from, Color to, float length, float timeScale, int pointCount){
//increase curve height when on opposite side of planet, so it doesn't tunnel through //increase curve height when on opposite side of planet, so it doesn't tunnel through
float scaledOutlineRad = outlineRad * planet.radius;
float dot = 1f - (Tmp.v32.set(a).nor().dot(Tmp.v33.set(b).nor()) + 1f)/2f; float dot = 1f - (Tmp.v32.set(a).nor().dot(Tmp.v33.set(b).nor()) + 1f)/2f;
Vec3 avg = Tmp.v31.set(b).add(a).scl(0.5f); Vec3 avg = Tmp.v31.set(b).add(a).scl(0.5f);
avg.setLength(planet.radius*(1f+length) + dot * 1.35f); avg.setLength(planet.radius*(1f+length) + dot * 1.35f);
points.clear(); points.clear();
points.addAll(Tmp.v33.set(b).setLength(outlineRad), Tmp.v31, Tmp.v34.set(a).setLength(outlineRad)); points.addAll(Tmp.v33.set(b).setLength(scaledOutlineRad), Tmp.v31, Tmp.v34.set(a).setLength(scaledOutlineRad));
Tmp.bz3.set(points); Tmp.bz3.set(points);
for(int i = 0; i < pointCount + 1; i++){ for(int i = 0; i < pointCount + 1; i++){
@@ -231,8 +233,8 @@ public class PlanetRenderer implements Disposable{
public void drawBorders(Sector sector, Color base, float alpha){ public void drawBorders(Sector sector, Color base, float alpha){
Color color = Tmp.c1.set(base).a((base.a + 0.3f + Mathf.absin(Time.globalTime, 5f, 0.3f)) * alpha); Color color = Tmp.c1.set(base).a((base.a + 0.3f + Mathf.absin(Time.globalTime, 5f, 0.3f)) * alpha);
float r1 = 1f; float r1 = 1f * sector.planet.radius;
float r2 = outlineRad + 0.001f; float r2 = outlineRad * sector.planet.radius + 0.001f;
for(int i = 0; i < sector.tile.corners.length; i++){ for(int i = 0; i < sector.tile.corners.length; i++){
Corner c = sector.tile.corners[i], next = sector.tile.corners[(i+1) % sector.tile.corners.length]; Corner c = sector.tile.corners[i], next = sector.tile.corners[(i+1) % sector.tile.corners.length];
@@ -268,16 +270,16 @@ public class PlanetRenderer implements Disposable{
projector.setPlane( projector.setPlane(
//origin on sector position //origin on sector position
Tmp.v33.set(sector.tile.v).setLength(outlineRad + length).rotate(Vec3.Y, rotation).add(sector.planet.position), Tmp.v33.set(sector.tile.v).setLength((outlineRad + length) * sector.planet.radius).rotate(Vec3.Y, rotation).add(sector.planet.position),
//face up //face up
sector.plane.project(Tmp.v32.set(sector.tile.v).add(Vec3.Y)).sub(sector.tile.v).rotate(Vec3.Y, rotation).nor(), sector.plane.project(Tmp.v32.set(sector.tile.v).add(Vec3.Y)).sub(sector.tile.v, sector.planet.radius).rotate(Vec3.Y, rotation).nor(),
//right vector //right vector
Tmp.v31.set(Tmp.v32).rotate(Vec3.Y, -rotation).add(sector.tile.v).rotate(sector.tile.v, 90).sub(sector.tile.v).rotate(Vec3.Y, rotation).nor() Tmp.v31.set(Tmp.v32).rotate(Vec3.Y, -rotation).add(sector.tile.v).rotate(sector.tile.v, 90).sub(sector.tile.v).rotate(Vec3.Y, rotation).nor()
); );
} }
public void fill(Sector sector, Color color, float offset){ public void fill(Sector sector, Color color, float offset){
float rr = outlineRad + offset; float rr = outlineRad * sector.planet.radius + offset;
for(int i = 0; i < sector.tile.corners.length; i++){ for(int i = 0; i < sector.tile.corners.length; i++){
Corner c = sector.tile.corners[i], next = sector.tile.corners[(i+1) % sector.tile.corners.length]; Corner c = sector.tile.corners[i], next = sector.tile.corners[(i+1) % sector.tile.corners.length];
batch.tri(Tmp.v31.set(c.v).setLength(rr), Tmp.v32.set(next.v).setLength(rr), Tmp.v33.set(sector.tile.v).setLength(rr), color); batch.tri(Tmp.v31.set(c.v).setLength(rr), Tmp.v32.set(next.v).setLength(rr), Tmp.v33.set(sector.tile.v).setLength(rr), color);
@@ -289,7 +291,7 @@ public class PlanetRenderer implements Disposable{
} }
public void drawSelection(Sector sector, Color color, float stroke, float length){ public void drawSelection(Sector sector, Color color, float stroke, float length){
float arad = outlineRad + length; float arad = (outlineRad + length) * sector.planet.radius;
for(int i = 0; i < sector.tile.corners.length; i++){ for(int i = 0; i < sector.tile.corners.length; i++){
Corner next = sector.tile.corners[(i + 1) % sector.tile.corners.length]; Corner next = sector.tile.corners[(i + 1) % sector.tile.corners.length];
@@ -311,7 +313,7 @@ public class PlanetRenderer implements Disposable{
} }
} }
public Mesh outline(int size){ public Mesh outline(int size, float radiusScale){
if(outlines[size] == null){ if(outlines[size] == null){
outlines[size] = MeshBuilder.buildHex(new HexMesher(){ outlines[size] = MeshBuilder.buildHex(new HexMesher(){
@Override @Override
@@ -323,7 +325,7 @@ public class PlanetRenderer implements Disposable{
public Color getColor(Vec3 position){ public Color getColor(Vec3 position){
return outlineColor; return outlineColor;
} }
}, size, true, outlineRad, 0.2f); }, size, true, outlineRad * radiusScale, 0.2f);
} }
return outlines[size]; return outlines[size];
} }

View File

@@ -231,10 +231,13 @@ public abstract class InputHandler implements InputProcessor, GestureListener{
if(unit != null && unit.team == player.team() && unit.controller() instanceof CommandAI ai){ if(unit != null && unit.team == player.team() && unit.controller() instanceof CommandAI ai){
//implicitly order it to move //implicitly order it to move
if(ai.command == null || ai.command.switchToMove){
ai.command(UnitCommand.moveCommand); ai.command(UnitCommand.moveCommand);
}
if(teamTarget != null && teamTarget.team() != player.team()){ if(teamTarget != null && teamTarget.team() != player.team()){
ai.commandTarget(teamTarget); ai.commandTarget(teamTarget);
}else if(posTarget != null){ }else if(posTarget != null){
ai.commandPosition(posTarget); ai.commandPosition(posTarget);
} }
@@ -269,10 +272,12 @@ public abstract class InputHandler implements InputProcessor, GestureListener{
for(int id : unitIds){ for(int id : unitIds){
Unit unit = Groups.unit.getByID(id); Unit unit = Groups.unit.getByID(id);
if(unit != null && unit.team == player.team() && unit.controller() instanceof CommandAI ai){ if(unit != null && unit.team == player.team() && unit.controller() instanceof CommandAI ai){
boolean reset = command.resetTarget || ai.currentCommand().resetTarget;
ai.command(command); ai.command(command);
//reset targeting if(reset){
ai.targetPos = null; ai.targetPos = null;
ai.attackTarget = null; ai.attackTarget = null;
}
unit.lastCommanded = player.coloredName(); unit.lastCommanded = player.coloredName();
} }
} }
@@ -868,7 +873,7 @@ public abstract class InputHandler implements InputProcessor, GestureListener{
for(Unit unit : selectedUnits){ for(Unit unit : selectedUnits){
CommandAI ai = unit.command(); CommandAI ai = unit.command();
//draw target line //draw target line
if(ai.targetPos != null && ai.command == UnitCommand.moveCommand){ if(ai.targetPos != null && ai.currentCommand().drawTarget){
Position lineDest = ai.attackTarget != null ? ai.attackTarget : ai.targetPos; Position lineDest = ai.attackTarget != null ? ai.attackTarget : ai.targetPos;
Drawf.limitLine(unit, lineDest, unit.hitSize / 2f, 3.5f); Drawf.limitLine(unit, lineDest, unit.hitSize / 2f, 3.5f);
@@ -879,8 +884,7 @@ public abstract class InputHandler implements InputProcessor, GestureListener{
Drawf.square(unit.x, unit.y, unit.hitSize / 1.4f + 1f); Drawf.square(unit.x, unit.y, unit.hitSize / 1.4f + 1f);
//TODO when to draw, when to not? if(ai.attackTarget != null && ai.currentCommand().drawTarget){
if(ai.attackTarget != null && ai.command == UnitCommand.moveCommand){
Drawf.target(ai.attackTarget.getX(), ai.attackTarget.getY(), 6f, Pal.remove); Drawf.target(ai.attackTarget.getX(), ai.attackTarget.getY(), 6f, Pal.remove);
} }
} }

View File

@@ -306,7 +306,13 @@ public class MobileInput extends InputHandler implements GestureListener{
b.button(Icon.flipX, style, () -> flipPlans(selectPlans, true)); b.button(Icon.flipX, style, () -> flipPlans(selectPlans, true));
b.button(Icon.flipY, style, () -> flipPlans(selectPlans, false)); b.button(Icon.flipY, style, () -> flipPlans(selectPlans, false));
b.row(); b.row();
b.button(Icon.rotate, style, () -> rotatePlans(selectPlans, 1)); b.button(Icon.rotate, style, () -> rotatePlans(selectPlans, 1)).update(i -> {
var img = i.getCells().first().get();
img.setScale(-1f, 1f);
//why the heck doesn't setOrigin work for scaling
img.setTranslation(img.getWidth(), 0f);
});
}).margin(4f); }).margin(4f);
}); });
@@ -387,7 +393,7 @@ public class MobileInput extends InputHandler implements GestureListener{
if(!plan.breaking && plan == lastPlaced && plan.block != null){ if(!plan.breaking && plan == lastPlaced && plan.block != null){
Draw.mixcol(); Draw.mixcol();
if(plan.block.rotate) drawArrow(plan.block, tile.x, tile.y, plan.rotation); if(plan.block.rotate && plan.block.drawArrow) drawArrow(plan.block, tile.x, tile.y, plan.rotation);
} }
Draw.reset(); Draw.reset();
@@ -397,13 +403,12 @@ public class MobileInput extends InputHandler implements GestureListener{
} }
//draw last placed plan //draw last placed plan
if(!plan.breaking && plan == lastPlaced && plan.block != null && plan.block.drawArrow){ if(!plan.breaking && plan == lastPlaced && plan.block != null){
boolean valid = validPlace(tile.x, tile.y, plan.block, rotation); boolean valid = validPlace(tile.x, tile.y, plan.block, rotation);
Draw.mixcol(); Draw.mixcol();
plan.block.drawPlace(tile.x, tile.y, rotation, valid); plan.block.drawPlace(tile.x, tile.y, rotation, valid);
drawOverlapCheck(plan.block, tile.x, tile.y, valid); drawOverlapCheck(plan.block, tile.x, tile.y, valid);
} }
} }

View File

@@ -320,8 +320,6 @@ public class JsonIO{
} }
}); });
//use short names for all filter types //use short names for all filter types
for(var filter : Maps.allFilterTypes){ for(var filter : Maps.allFilterTypes){
var i = filter.get(); var i = filter.get();

View File

@@ -119,6 +119,15 @@ public class TypeIO{
}else if(object instanceof Team t){ }else if(object instanceof Team t){
write.b((byte)20); write.b((byte)20);
write.b(t.id); write.b(t.id);
}else if(object instanceof int[] i){
write.b((byte)21);
writeInts(write, i);
}else if(object instanceof Object[] objs){
write.b((byte)22);
write.i(objs.length);
for(Object obj : objs){
writeObject(write, obj);
}
}else{ }else{
throw new IllegalArgumentException("Unknown object type: " + object.getClass()); throw new IllegalArgumentException("Unknown object type: " + object.getClass());
} }
@@ -184,6 +193,13 @@ public class TypeIO{
} }
case 19 -> new Vec2(read.f(), read.f()); case 19 -> new Vec2(read.f(), read.f());
case 20 -> Team.all[read.ub()]; case 20 -> Team.all[read.ub()];
case 21 -> readInts(read);
case 22 -> {
int objlen = read.i();
Object[] objs = new Object[objlen];
for(int i = 0; i < objlen; i++) objs[i] = readObjectBoxed(read, box);
yield objs;
}
default -> throw new IllegalArgumentException("Unknown object type: " + type); default -> throw new IllegalArgumentException("Unknown object type: " + type);
}; };
} }

View File

@@ -59,7 +59,8 @@ public enum LAccess{
public static final LAccess[] public static final LAccess[]
all = values(), all = values(),
senseable = Seq.select(all, t -> t.params.length <= 1).toArray(LAccess.class), senseable = Seq.select(all, t -> t.params.length <= 1).toArray(LAccess.class),
controls = Seq.select(all, t -> t.params.length > 0).toArray(LAccess.class); controls = Seq.select(all, t -> t.params.length > 0).toArray(LAccess.class),
settable = {x, y, rotation, team, flag, health, totalPower, payloadType};
LAccess(String... params){ LAccess(String... params){
this.params = params; this.params = params;

View File

@@ -361,7 +361,7 @@ public class LExecutor{
/** Checks is a unit is valid for logic AI control, and returns the controller. */ /** Checks is a unit is valid for logic AI control, and returns the controller. */
@Nullable @Nullable
public static LogicAI checkLogicAI(LExecutor exec, Object unitObj){ public static LogicAI checkLogicAI(LExecutor exec, Object unitObj){
if(unitObj instanceof Unit unit && unit.isValid() && exec.obj(varUnit) == unit && (unit.team == exec.team || exec.privileged) && !unit.isPlayer() && !(unit.isCommandable() && unit.command().hasCommand())){ if(unitObj instanceof Unit unit && unit.isValid() && exec.obj(varUnit) == unit && (unit.team == exec.team || exec.privileged) && unit.controller().isLogicControllable()){
if(unit.controller() instanceof LogicAI la){ if(unit.controller() instanceof LogicAI la){
la.controller = exec.building(varThis); la.controller = exec.building(varThis);
return la; return la;
@@ -1695,5 +1695,37 @@ public class LExecutor{
} }
} }
public static class SetPropI implements LInstruction{
public int type, of, value;
public SetPropI(int type, int of, int value){
this.type = type;
this.of = of;
this.value = value;
}
public SetPropI(){
}
@Override
public void run(LExecutor exec){
Object target = exec.obj(of);
Object key = exec.obj(type);
if(target instanceof Settable sp){
if(key instanceof LAccess property){
Var var = exec.var(value);
if(var.isobj){
sp.setProp(property, var.objval);
}else{
sp.setProp(property, var.numval);
}
}else if(key instanceof UnlockableContent content){
sp.setProp(content, exec.num(value));
}
}
}
}
//endregion //endregion
} }

View File

@@ -1683,4 +1683,113 @@ public class LStatements{
return LCategory.world; return LCategory.world;
} }
} }
@RegisterStatement("setprop")
public static class SetPropStatement extends LStatement{
public String type = "@copper", of = "block1", value = "0";
private transient int selected = 0;
private transient TextField tfield;
@Override
public void build(Table table){
table.add(" set ");
tfield = field(table, type, str -> type = str).padRight(0f).get();
table.button(b -> {
b.image(Icon.pencilSmall);
//240
b.clicked(() -> showSelectTable(b, (t, hide) -> {
Table[] tables = {
//items
new Table(i -> {
i.left();
int c = 0;
for(Item item : Vars.content.items()){
if(item.hidden) continue;
i.button(new TextureRegionDrawable(item.uiIcon), Styles.flati, iconSmall, () -> {
stype("@" + item.name);
hide.run();
}).size(40f);
if(++c % 6 == 0) i.row();
}
}),
//liquids
new Table(i -> {
i.left();
int c = 0;
for(Liquid item : Vars.content.liquids()){
if(!item.unlockedNow() || item.hidden) continue;
i.button(new TextureRegionDrawable(item.uiIcon), Styles.flati, iconSmall, () -> {
stype("@" + item.name);
hide.run();
}).size(40f);
if(++c % 6 == 0) i.row();
}
}),
//sensors
new Table(i -> {
for(LAccess property : LAccess.settable){
i.button(property.name(), Styles.flatt, () -> {
stype("@" + property.name());
hide.run();
}).size(240f, 40f).self(c -> tooltip(c, property)).row();
}
})
};
Drawable[] icons = {Icon.box, Icon.liquid, Icon.tree};
Stack stack = new Stack(tables[selected]);
ButtonGroup<Button> group = new ButtonGroup<>();
for(int i = 0; i < tables.length; i++){
int fi = i;
t.button(icons[i], Styles.squareTogglei, () -> {
selected = fi;
stack.clearChildren();
stack.addChild(tables[selected]);
t.parent.parent.pack();
t.parent.parent.invalidateHierarchy();
}).height(50f).growX().checked(selected == fi).group(group);
}
t.row();
t.add(stack).colspan(3).width(240f).left();
}));
}, Styles.logict, () -> {}).size(40f).padLeft(-1).color(table.color);
table.add(" of ").self(this::param);
field(table, of, str -> of = str);
table.add(" to ");
field(table, value, str -> value = str);
}
private void stype(String text){
tfield.setText(text);
this.type = text;
}
@Override
public boolean privileged(){
return true;
}
@Override
public LInstruction build(LAssembler builder){
return new SetPropI(builder.var(type), builder.var(of), builder.var(value));
}
@Override
public LCategory category(){
return LCategory.world;
}
}
} }

View File

@@ -0,0 +1,9 @@
package mindustry.logic;
import mindustry.ctype.*;
public interface Settable{
void setProp(LAccess prop, double value);
void setProp(LAccess prop, Object value);
void setProp(UnlockableContent content, double value);
}

View File

@@ -192,7 +192,8 @@ public class Map implements Comparable<Map>, Publishable{
@Override @Override
public Fi createSteamPreview(String id){ public Fi createSteamPreview(String id){
return previewFile(); //I have no idea what the hell I was even thinking with this preview stuff
return Vars.mapPreviewDirectory.child((workshop && file.parent().exists() && file.parent().extEquals(".png") ? file.parent().name() : file.nameWithoutExtension()) + "_v2.png");
} }
@Override @Override

View File

@@ -448,6 +448,7 @@ public class ClassMap{
classes.put("DrawParticles", mindustry.world.draw.DrawParticles.class); classes.put("DrawParticles", mindustry.world.draw.DrawParticles.class);
classes.put("DrawPistons", mindustry.world.draw.DrawPistons.class); classes.put("DrawPistons", mindustry.world.draw.DrawPistons.class);
classes.put("DrawPlasma", mindustry.world.draw.DrawPlasma.class); classes.put("DrawPlasma", mindustry.world.draw.DrawPlasma.class);
classes.put("DrawPower", mindustry.world.draw.DrawPower.class);
classes.put("DrawPulseShape", mindustry.world.draw.DrawPulseShape.class); classes.put("DrawPulseShape", mindustry.world.draw.DrawPulseShape.class);
classes.put("DrawPumpLiquid", mindustry.world.draw.DrawPumpLiquid.class); classes.put("DrawPumpLiquid", mindustry.world.draw.DrawPumpLiquid.class);
classes.put("DrawRegion", mindustry.world.draw.DrawRegion.class); classes.put("DrawRegion", mindustry.world.draw.DrawRegion.class);

View File

@@ -79,7 +79,11 @@ public class ContentParser{
put(Interp.class, (type, data) -> field(Interp.class, data)); put(Interp.class, (type, data) -> field(Interp.class, data));
put(Blending.class, (type, data) -> field(Blending.class, data)); put(Blending.class, (type, data) -> field(Blending.class, data));
put(CacheLayer.class, (type, data) -> field(CacheLayer.class, data)); put(CacheLayer.class, (type, data) -> field(CacheLayer.class, data));
put(Attribute.class, (type, data) -> Attribute.get(data.asString())); put(Attribute.class, (type, data) -> {
String attr = data.asString();
if(Attribute.exists(attr)) return Attribute.get(attr);
return Attribute.add(attr);
});
put(BuildVisibility.class, (type, data) -> field(BuildVisibility.class, data)); put(BuildVisibility.class, (type, data) -> field(BuildVisibility.class, data));
put(Schematic.class, (type, data) -> { put(Schematic.class, (type, data) -> {
Object result = fieldOpt(Loadouts.class, data); Object result = fieldOpt(Loadouts.class, data);
@@ -461,12 +465,13 @@ public class ContentParser{
} }
var typeVal = value.get("type"); var typeVal = value.get("type");
if(unit.constructor == null || typeVal != null){
if(typeVal != null && !typeVal.isString()){ if(typeVal != null && !typeVal.isString()){
throw new RuntimeException("Unit '" + name + "' has an incorrect type. Types must be strings."); throw new RuntimeException("Unit '" + name + "' has an incorrect type. Types must be strings.");
} }
unit.constructor = unitType(typeVal); unit.constructor = unitType(typeVal);
}
}else{ }else{
unit = locate(ContentType.unit, name); unit = locate(ContentType.unit, name);
} }
@@ -594,6 +599,21 @@ public class ContentParser{
}; };
} }
if(value.has("cloudMesh")){
var mesh = value.get("cloudMesh");
if(!mesh.isObject()) throw new RuntimeException("Meshes must be objects.");
value.remove("cloudMesh");
planet.cloudMeshLoader = () -> {
//don't crash, just log an error
try{
return parseMesh(planet, mesh);
}catch(Exception e){
Log.err(e);
return null;
}
};
}
//always one sector right now... //always one sector right now...
planet.sectors.add(new Sector(planet, Ptile.empty)); planet.sectors.add(new Sector(planet, Ptile.empty));
@@ -830,6 +850,10 @@ public class ContentParser{
Color.valueOf(data.getString("color2", data.getString("color", "ffffff"))), Color.valueOf(data.getString("color2", data.getString("color", "ffffff"))),
data.getInt("colorOct", 1), data.getFloat("colorPersistence", 0.5f), data.getFloat("colorScale", 1f), data.getInt("colorOct", 1), data.getFloat("colorPersistence", 0.5f), data.getFloat("colorScale", 1f),
data.getFloat("colorThreshold", 0.5f)); data.getFloat("colorThreshold", 0.5f));
case "HexSkyMesh" -> new HexSkyMesh(planet,
data.getInt("seed", 0), data.getFloat("speed", 0), data.getFloat("radius", 1f),
data.getInt("divisions", 3), Color.valueOf(data.getString("color", "ffffff")), data.getInt("octaves", 1),
data.getFloat("persistence", 0.5f), data.getFloat("scale", 1f), data.getFloat("thresh", 0.5f));
case "MultiMesh" -> new MultiMesh(parser.readValue(GenericMesh[].class, data.get("meshes"))); case "MultiMesh" -> new MultiMesh(parser.readValue(GenericMesh[].class, data.get("meshes")));
case "MatMesh" -> new MatMesh(parser.readValue(GenericMesh.class, data.get("mesh")), parser.readValue(Mat3D.class, data.get("mat"))); case "MatMesh" -> new MatMesh(parser.readValue(GenericMesh.class, data.get("mesh")), parser.readValue(Mat3D.class, data.get("mat")));
default -> throw new RuntimeException("Unknown mesh type: " + tname); default -> throw new RuntimeException("Unknown mesh type: " + tname);

View File

@@ -32,7 +32,7 @@ import static mindustry.Vars.*;
public class Mods implements Loadable{ public class Mods implements Loadable{
private static final String[] metaFiles = {"mod.json", "mod.hjson", "plugin.json", "plugin.hjson"}; private static final String[] metaFiles = {"mod.json", "mod.hjson", "plugin.json", "plugin.hjson"};
private static final ObjectSet<String> blacklistedMods = ObjectSet.with("ui-lib"); private static final ObjectSet<String> blacklistedMods = ObjectSet.with("ui-lib", "braindustry");
private Json json = new Json(); private Json json = new Json();
private @Nullable Scripts scripts; private @Nullable Scripts scripts;
@@ -41,8 +41,12 @@ public class Mods implements Loadable{
private ObjectSet<String> specialFolders = ObjectSet.with("bundles", "sprites", "sprites-override"); private ObjectSet<String> specialFolders = ObjectSet.with("bundles", "sprites", "sprites-override");
private int totalSprites; private int totalSprites;
private static ObjectFloatMap<String> textureResize = new ObjectFloatMap<>(); private ObjectFloatMap<String> textureResize = new ObjectFloatMap<>();
private MultiPacker packer; private MultiPacker packer;
/** Ordered mods cache. Set to null to invalidate. */
private @Nullable Seq<LoadedMod> lastOrderedMods = new Seq<>();
private ModClassLoader mainLoader = new ModClassLoader(getClass().getClassLoader()); private ModClassLoader mainLoader = new ModClassLoader(getClass().getClassLoader());
Seq<LoadedMod> mods = new Seq<>(); Seq<LoadedMod> mods = new Seq<>();
@@ -103,8 +107,10 @@ public class Mods implements Loadable{
file.copyTo(dest); file.copyTo(dest);
try{ try{
var loaded = loadMod(dest, true); var loaded = loadMod(dest, true, true);
mods.add(loaded); mods.add(loaded);
//invalidate ordered mods cache
lastOrderedMods = null;
requiresReload = true; requiresReload = true;
//enable the mod on import //enable the mod on import
Core.settings.put("mod-" + loaded.name + "-enabled", true); Core.settings.put("mod-" + loaded.name + "-enabled", true);
@@ -418,19 +424,59 @@ public class Mods implements Loadable{
/** Loads all mods from the folder, but does not call any methods on them.*/ /** Loads all mods from the folder, but does not call any methods on them.*/
public void load(){ public void load(){
var files = resolveDependencies(Seq.with(modDirectory.list()).filter(f -> var candidates = new Seq<Fi>();
f.extEquals("jar") || f.extEquals("zip") || (f.isDirectory() && (f.child("mod.json").exists() || f.child("mod.hjson").exists()))
)); // Add local mods
Seq.with(modDirectory.list())
.filter(f -> f.extEquals("jar") || f.extEquals("zip") || (f.isDirectory() && Structs.contains(metaFiles, meta -> f.child(meta).exists())))
.each(candidates::add);
// Add Steam workshop mods
platform.getWorkshopContent(LoadedMod.class)
.each(candidates::add);
var mapping = new ObjectMap<String, Fi>();
var metas = new Seq<ModMeta>();
for(Fi file : candidates){
ModMeta meta = null;
try{
Fi zip = file.isDirectory() ? file : new ZipFi(file);
if(zip.list().length == 1 && zip.list()[0].isDirectory()){
zip = zip.list()[0];
}
meta = findMeta(zip);
}catch(Throwable ignored){
}
if(meta == null || meta.name == null) continue;
metas.add(meta);
mapping.put(meta.name, file);
}
var resolved = resolveDependencies(metas);
for(var entry : resolved){
var file = mapping.get(entry.key);
var steam = platform.getWorkshopContent(LoadedMod.class).contains(file);
for(Fi file : files){
Log.debug("[Mods] Loading mod @", file); Log.debug("[Mods] Loading mod @", file);
try{ try{
LoadedMod mod = loadMod(file); LoadedMod mod = loadMod(file, false, entry.value == ModState.enabled);
mod.state = entry.value;
mods.add(mod); mods.add(mod);
//invalidate ordered mods cache
lastOrderedMods = null;
if(steam) mod.addSteamID(file.name());
}catch(Throwable e){ }catch(Throwable e){
if(e instanceof ClassNotFoundException && e.getMessage().contains("mindustry.plugin.Plugin")){ if(e instanceof ClassNotFoundException && e.getMessage().contains("mindustry.plugin.Plugin")){
Log.info("Plugin '@' is outdated and needs to be ported to 6.0! Update its main class to inherit from 'mindustry.mod.Plugin'. See https://mindustrygame.github.io/wiki/modding/6-migrationv6/", file.name()); Log.info("Plugin '@' is outdated and needs to be ported to 6.0! Update its main class to inherit from 'mindustry.mod.Plugin'. See https://mindustrygame.github.io/wiki/modding/6-migrationv6/", file.name());
}else if(steam){
Log.err("Failed to load mod workshop file @. Skipping.", file);
Log.err(e);
}else{ }else{
Log.err("Failed to load mod file @. Skipping.", file); Log.err("Failed to load mod file @. Skipping.", file);
Log.err(e); Log.err(e);
@@ -438,21 +484,19 @@ public class Mods implements Loadable{
} }
} }
//load workshop mods now // Resolve the state
for(Fi file : resolveDependencies(platform.getWorkshopContent(LoadedMod.class))){ mods.each(this::updateDependencies);
try{ for(var mod : mods){
LoadedMod mod = loadMod(file); // Skip mods where the state has already been resolved
mods.add(mod); if(mod.state != ModState.enabled) continue;
mod.addSteamID(file.name()); if(!mod.isSupported()){
}catch(Throwable e){ mod.state = ModState.unsupported;
Log.err("Failed to load mod workshop file @. Skipping.", file); }else if(!mod.shouldBeEnabled()){
Log.err(e); mod.state = ModState.disabled;
} }
} }
resolveModState();
sortMods(); sortMods();
buildFiles(); buildFiles();
} }
@@ -461,18 +505,6 @@ public class Mods implements Loadable{
mods.sort(Structs.comps(Structs.comparingInt(m -> m.state.ordinal()), Structs.comparing(m -> m.name))); mods.sort(Structs.comps(Structs.comparingInt(m -> m.state.ordinal()), Structs.comparing(m -> m.name)));
} }
private void resolveModState(){
mods.each(this::updateDependencies);
for(LoadedMod mod : mods){
mod.state =
!mod.isSupported() ? ModState.unsupported :
mod.hasUnmetDependencies() ? ModState.missingDependencies :
!mod.shouldBeEnabled() ? ModState.disabled :
ModState.enabled;
}
}
private void updateDependencies(LoadedMod mod){ private void updateDependencies(LoadedMod mod){
mod.dependencies.clear(); mod.dependencies.clear();
mod.missingDependencies.clear(); mod.missingDependencies.clear();
@@ -485,22 +517,17 @@ public class Mods implements Loadable{
} }
} }
private void topoSort(LoadedMod mod, Seq<LoadedMod> stack, ObjectSet<LoadedMod> visited){
visited.add(mod);
mod.dependencies.each(m -> !visited.contains(m), m -> topoSort(m, stack, visited));
stack.add(mod);
}
/** @return mods ordered in the correct way needed for dependencies. */ /** @return mods ordered in the correct way needed for dependencies. */
private Seq<LoadedMod> orderedMods(){ public Seq<LoadedMod> orderedMods(){
ObjectSet<LoadedMod> visited = new ObjectSet<>(); //update cache if it's "dirty"/empty
Seq<LoadedMod> result = new Seq<>(); if(lastOrderedMods == null){
eachEnabled(mod -> { //only enabled mods participate; this state is resolved in load()
if(!visited.contains(mod)){ Seq<LoadedMod> enabled = mods.select(LoadedMod::enabled);
topoSort(mod, result, visited);
var mapping = enabled.asMap(m -> m.meta.name);
lastOrderedMods = resolveDependencies(enabled.map(m -> m.meta)).orderedKeys().map(mapping::get);
} }
}); return lastOrderedMods;
return result;
} }
public LoadedMod locateMod(String name){ public LoadedMod locateMod(String name){
@@ -758,12 +785,12 @@ public class Mods implements Loadable{
/** Iterates through each mod with a main class. */ /** Iterates through each mod with a main class. */
public void eachClass(Cons<Mod> cons){ public void eachClass(Cons<Mod> cons){
mods.each(p -> p.main != null, p -> contextRun(p, () -> cons.get(p.main))); orderedMods().each(p -> p.main != null, p -> contextRun(p, () -> cons.get(p.main)));
} }
/** Iterates through each enabled mod. */ /** Iterates through each enabled mod. */
public void eachEnabled(Cons<LoadedMod> cons){ public void eachEnabled(Cons<LoadedMod> cons){
mods.each(LoadedMod::enabled, cons); orderedMods().each(LoadedMod::enabled, cons);
} }
public void contextRun(LoadedMod mod, Runnable run){ public void contextRun(LoadedMod mod, Runnable run){
@@ -793,78 +820,71 @@ public class Mods implements Loadable{
return meta; return meta;
} }
/** Resolves the loading order of a list mods/plugins using their internal names. /** Resolves the loading order of a list mods/plugins using their internal names. */
* It also skips non-mods files or folders. */ public OrderedMap<String, ModState> resolveDependencies(Seq<ModMeta> metas){
public Seq<Fi> resolveDependencies(Seq<Fi> files){ var context = new ModResolutionContext();
ObjectMap<String, Fi> fileMapping = new ObjectMap<>();
ObjectMap<String, Seq<String>> dependencies = new ObjectMap<>();
for(Fi file : files){ for(var meta : metas){
ModMeta meta = null; Seq<ModDependency> dependencies = new Seq<>();
for(var dependency : meta.dependencies){
try{ dependencies.add(new ModDependency(dependency, true));
Fi zip = file.isDirectory() ? file : new ZipFi(file); }
for(var dependency : meta.softDependencies){
if(zip.list().length == 1 && zip.list()[0].isDirectory()){ dependencies.add(new ModDependency(dependency, false));
zip = zip.list()[0]; }
context.dependencies.put(meta.name, dependencies);
} }
meta = findMeta(zip); for(var key : context.dependencies.keys()){
}catch(Throwable ignored){ if (context.ordered.contains(key)) {
continue;
}
resolve(key, context);
context.visited.clear();
} }
if(meta == null || meta.name == null) continue; var result = new OrderedMap<String, ModState>();
dependencies.put(meta.name, meta.dependencies); for(var name : context.ordered){
fileMapping.put(meta.name, file); result.put(name, ModState.enabled);
}
result.putAll(context.invalid);
return result;
} }
ObjectSet<String> visited = new ObjectSet<>(); private boolean resolve(String element, ModResolutionContext context){
OrderedSet<String> ordered = new OrderedSet<>(); context.visited.add(element);
for(final var dependency : context.dependencies.get(element)){
for(String modName : dependencies.keys()){ // Circular dependencies ?
if(!ordered.contains(modName)){ if(context.visited.contains(dependency.name) && !context.ordered.contains(dependency.name)){
// Adds the loaded mods at the beginning of the list context.invalid.put(dependency.name, ModState.circularDependencies);
ordered.add(modName, 0); return false;
resolveDependencies(modName, dependencies, ordered, visited); // If dependency present, resolve it, or if it's not required, ignore it
visited.clear(); }else if(context.dependencies.containsKey(dependency.name)){
if(!context.ordered.contains(dependency.name) && !resolve(dependency.name, context) && dependency.required){
context.invalid.put(element, ModState.incompleteDependencies);
return false;
}
// The dependency is missing, but if not required, skip
}else if(dependency.required){
context.invalid.put(element, ModState.missingDependencies);
return false;
} }
} }
if(!context.ordered.contains(element)){
// Adds the invalid mods context.ordered.add(element);
for(String missingMod : dependencies.keys()){
if(!ordered.contains(missingMod)) ordered.add(missingMod, 0);
}
Seq<Fi> resolved = ordered.orderedItems().map(fileMapping::get);
// Since the resolver explores the dependencies from leaves to the root, reverse the seq
resolved.reverse();
return resolved;
}
/** Recursive search of dependencies */
public void resolveDependencies(String modName, ObjectMap<String, Seq<String>> dependencies, OrderedSet<String> ordered, ObjectSet<String> visited){
visited.add(modName);
for(String dependency : dependencies.get(modName)){
// Checks if the dependency tree isn't circular and that the dependency is not missing
if(!visited.contains(dependency) && dependencies.containsKey(dependency)){
// Skips if the dependency was already explored in a separate tree
if(ordered.contains(dependency)) continue;
ordered.add(dependency);
resolveDependencies(dependency, dependencies, ordered, visited);
}
} }
return true;
} }
/** Loads a mod file+meta, but does not add it to the list. /** Loads a mod file+meta, but does not add it to the list.
* Note that directories can be loaded as mods. */ * Note that directories can be loaded as mods. */
private LoadedMod loadMod(Fi sourceFile) throws Exception{ private LoadedMod loadMod(Fi sourceFile) throws Exception{
return loadMod(sourceFile, false); return loadMod(sourceFile, false, true);
} }
/** Loads a mod file+meta, but does not add it to the list. /** Loads a mod file+meta, but does not add it to the list.
* Note that directories can be loaded as mods. */ * Note that directories can be loaded as mods. */
private LoadedMod loadMod(Fi sourceFile, boolean overwrite) throws Exception{ private LoadedMod loadMod(Fi sourceFile, boolean overwrite, boolean initialize) throws Exception{
Time.mark(); Time.mark();
ZipFi rootZip = null; ZipFi rootZip = null;
@@ -930,7 +950,8 @@ public class Mods implements Loadable{
!skipModLoading() && !skipModLoading() &&
Core.settings.getBool("mod-" + baseName + "-enabled", true) && Core.settings.getBool("mod-" + baseName + "-enabled", true) &&
Version.isAtLeast(meta.minGameVersion) && Version.isAtLeast(meta.minGameVersion) &&
(meta.getMinMajor() >= 136 || headless) (meta.getMinMajor() >= 136 || headless) &&
initialize
){ ){
if(ios){ if(ios){
throw new ModLoadException("Java class mods are not supported on iOS."); throw new ModLoadException("Java class mods are not supported on iOS.");
@@ -1054,6 +1075,9 @@ public class Mods implements Loadable{
/** @return whether this mod is supported by the game version */ /** @return whether this mod is supported by the game version */
public boolean isSupported(){ public boolean isSupported(){
//no unsupported mods on servers
if(headless) return true;
if(isOutdated() || isBlacklisted()) return false; if(isOutdated() || isBlacklisted()) return false;
return Version.isAtLeast(meta.minGameVersion); return Version.isAtLeast(meta.minGameVersion);
@@ -1152,6 +1176,7 @@ public class Mods implements Loadable{
public String name, minGameVersion = "0"; public String name, minGameVersion = "0";
public @Nullable String displayName, author, description, subtitle, version, main, repo; public @Nullable String displayName, author, description, subtitle, version, main, repo;
public Seq<String> dependencies = Seq.with(); public Seq<String> dependencies = Seq.with();
public Seq<String> softDependencies = Seq.with();
/** Hidden mods are only server-side or client-side, and do not support adding new content. */ /** Hidden mods are only server-side or client-side, and do not support adding new content. */
public boolean hidden; public boolean hidden;
/** If true, this mod should be loaded as a Java class mod. This is technically optional, but highly recommended. */ /** If true, this mod should be loaded as a Java class mod. This is technically optional, but highly recommended. */
@@ -1173,6 +1198,7 @@ public class Mods implements Loadable{
//removes all colors //removes all colors
public void cleanup(){ public void cleanup(){
if(name != null) name = Strings.stripColors(name);
if(displayName != null) displayName = Strings.stripColors(displayName); if(displayName != null) displayName = Strings.stripColors(displayName);
if(author != null) author = Strings.stripColors(author); if(author != null) author = Strings.stripColors(author);
if(description != null) description = Strings.stripColors(description); if(description != null) description = Strings.stripColors(description);
@@ -1189,13 +1215,21 @@ public class Mods implements Loadable{
public String toString(){ public String toString(){
return "ModMeta{" + return "ModMeta{" +
"name='" + name + '\'' + "name='" + name + '\'' +
", minGameVersion='" + minGameVersion + '\'' +
", displayName='" + displayName + '\'' +
", author='" + author + '\'' + ", author='" + author + '\'' +
", description='" + description + '\'' +
", subtitle='" + subtitle + '\'' +
", version='" + version + '\'' + ", version='" + version + '\'' +
", main='" + main + '\'' + ", main='" + main + '\'' +
", minGameVersion='" + minGameVersion + '\'' + ", repo='" + repo + '\'' +
", dependencies=" + dependencies +
", softDependencies=" + softDependencies +
", hidden=" + hidden + ", hidden=" + hidden +
", repo=" + repo + ", java=" + java +
", keepOutlines=" + keepOutlines +
", texturescale=" + texturescale + ", texturescale=" + texturescale +
", pregenerated=" + pregenerated +
'}'; '}';
} }
} }
@@ -1210,7 +1244,26 @@ public class Mods implements Loadable{
enabled, enabled,
contentErrors, contentErrors,
missingDependencies, missingDependencies,
incompleteDependencies,
circularDependencies,
unsupported, unsupported,
disabled, disabled,
} }
public static class ModResolutionContext {
public final ObjectMap<String, Seq<ModDependency>> dependencies = new ObjectMap<>();
public final ObjectSet<String> visited = new ObjectSet<>();
public final OrderedSet<String> ordered = new OrderedSet<>();
public final ObjectMap<String, ModState> invalid = new OrderedMap<>();
}
public static final class ModDependency{
public final String name;
public final boolean required;
public ModDependency(String name, boolean required){
this.name = name;
this.required = required;
}
}
} }

View File

@@ -24,6 +24,8 @@ public class Administration{
public ObjectSet<String> dosBlacklist = new ObjectSet<>(); public ObjectSet<String> dosBlacklist = new ObjectSet<>();
public ObjectMap<String, Long> kickedIPs = new ObjectMap<>(); public ObjectMap<String, Long> kickedIPs = new ObjectMap<>();
private boolean modified, loaded;
/** All player info. Maps UUIDs to info. This persists throughout restarts. Do not access directly. */ /** All player info. Maps UUIDs to info. This persists throughout restarts. Do not access directly. */
private ObjectMap<String, PlayerInfo> playerInfo = new ObjectMap<>(); private ObjectMap<String, PlayerInfo> playerInfo = new ObjectMap<>();
@@ -48,8 +50,8 @@ public class Administration{
player.getInfo().messageInfractions = 0; player.getInfo().messageInfractions = 0;
} }
//prevent players from sending the same message twice in the span of 50 seconds //prevent players from sending the same message twice in the span of 10 seconds
if(message.equals(player.getInfo().lastSentMessage) && Time.timeSinceMillis(player.getInfo().lastMessageTime) < 1000 * 50){ if(message.equals(player.getInfo().lastSentMessage) && Time.timeSinceMillis(player.getInfo().lastMessageTime) < 1000 * 10){
player.sendMessage("[scarlet]You may not send the same message twice."); player.sendMessage("[scarlet]You may not send the same message twice.");
return null; return null;
} }
@@ -448,16 +450,26 @@ public class Administration{
} }
public void save(){ public void save(){
modified = true;
}
public void forceSave(){
if(modified && loaded){
Core.settings.putJson("player-data", playerInfo); Core.settings.putJson("player-data", playerInfo);
Core.settings.putJson("ip-kicks", kickedIPs);
Core.settings.putJson("ip-bans", String.class, bannedIPs); Core.settings.putJson("ip-bans", String.class, bannedIPs);
Core.settings.putJson("whitelist-ids", String.class, whitelist); Core.settings.putJson("whitelist-ids", String.class, whitelist);
Core.settings.putJson("banned-subnets", String.class, subnetBans); Core.settings.putJson("banned-subnets", String.class, subnetBans);
modified = false;
}
} }
@SuppressWarnings("unchecked") @SuppressWarnings("unchecked")
private void load(){ private void load(){
loaded = true;
//load default data //load default data
playerInfo = Core.settings.getJson("player-data", ObjectMap.class, ObjectMap::new); playerInfo = Core.settings.getJson("player-data", ObjectMap.class, ObjectMap::new);
kickedIPs = Core.settings.getJson("ip-kicks", ObjectMap.class, ObjectMap::new);
bannedIPs = Core.settings.getJson("ip-bans", Seq.class, Seq::new); bannedIPs = Core.settings.getJson("ip-bans", Seq.class, Seq::new);
whitelist = Core.settings.getJson("whitelist-ids", Seq.class, Seq::new); whitelist = Core.settings.getJson("whitelist-ids", Seq.class, Seq::new);
subnetBans = Core.settings.getJson("banned-subnets", Seq.class, Seq::new); subnetBans = Core.settings.getJson("banned-subnets", Seq.class, Seq::new);
@@ -488,7 +500,7 @@ public class Administration{
messageRateLimit = new Config("messageRateLimit", "Message rate limit in seconds. 0 to disable.", 0), messageRateLimit = new Config("messageRateLimit", "Message rate limit in seconds. 0 to disable.", 0),
messageSpamKick = new Config("messageSpamKick", "How many times a player must send a message before the cooldown to get kicked. 0 to disable.", 3), messageSpamKick = new Config("messageSpamKick", "How many times a player must send a message before the cooldown to get kicked. 0 to disable.", 3),
packetSpamLimit = new Config("packetSpamLimit", "Limit for packet count sent within 3sec that will lead to a blacklist + kick.", 300), packetSpamLimit = new Config("packetSpamLimit", "Limit for packet count sent within 3sec that will lead to a blacklist + kick.", 300),
chatSpamLimit = new Config("packetSpamLimit", "Limit for chat packet count sent within 2sec that will lead to a blacklist + kick. Not the same as a rate limit.", 20), chatSpamLimit = new Config("chatSpamLimit", "Limit for chat packet count sent within 2sec that will lead to a blacklist + kick. Not the same as a rate limit.", 20),
socketInput = new Config("socketInput", "Allows a local application to control this server through a local TCP socket.", false, "socket", () -> Events.fire(Trigger.socketConfigChanged)), socketInput = new Config("socketInput", "Allows a local application to control this server through a local TCP socket.", false, "socket", () -> Events.fire(Trigger.socketConfigChanged)),
socketInputPort = new Config("socketInputPort", "The port for socket input.", 6859, () -> Events.fire(Trigger.socketConfigChanged)), socketInputPort = new Config("socketInputPort", "The port for socket input.", 6859, () -> Events.fire(Trigger.socketConfigChanged)),
socketInputAddress = new Config("socketInputAddress", "The bind address for socket input.", "localhost", () -> Events.fire(Trigger.socketConfigChanged)), socketInputAddress = new Config("socketInputAddress", "The bind address for socket input.", "localhost", () -> Events.fire(Trigger.socketConfigChanged)),

View File

@@ -151,7 +151,7 @@ public class BeControl{
Log.info("&lcAutosaved."); Log.info("&lcAutosaved.");
netServer.kickAll(KickReason.serverRestarting); netServer.kickAll(KickReason.serverRestarting);
Threads.sleep(32); Threads.sleep(500);
Log.info("&lcVersion downloaded, exiting. Note that if you are not using a auto-restart script, the server will not restart automatically."); Log.info("&lcVersion downloaded, exiting. Note that if you are not using a auto-restart script, the server will not restart automatically.");
//replace old file with new //replace old file with new

View File

@@ -5,6 +5,7 @@ import arc.func.*;
import arc.net.*; import arc.net.*;
import arc.struct.*; import arc.struct.*;
import arc.util.*; import arc.util.*;
import mindustry.game.EventType.*;
import mindustry.gen.*; import mindustry.gen.*;
import mindustry.net.Packets.*; import mindustry.net.Packets.*;
import mindustry.net.Streamable.*; import mindustry.net.Streamable.*;
@@ -154,6 +155,7 @@ public class Net{
public void connect(String ip, int port, Runnable success){ public void connect(String ip, int port, Runnable success){
try{ try{
if(!active){ if(!active){
Events.fire(new ClientServerConnectEvent(ip, port));
provider.connectClient(ip, port, success); provider.connectClient(ip, port, success);
active = true; active = true;
server = false; server = false;

View File

@@ -1,5 +1,6 @@
package mindustry.net; package mindustry.net;
import arc.*;
import arc.struct.*; import arc.struct.*;
import arc.util.*; import arc.util.*;
import mindustry.entities.units.*; import mindustry.entities.units.*;
@@ -76,7 +77,12 @@ public abstract class NetConnection{
Call.kick(this, reason); Call.kick(this, reason);
} }
if(uuid.startsWith("steam:")){
//run with a 2-frame delay so there is time to send the kick packet, steam handles this weirdly
Core.app.post(() -> Core.app.post(this::close));
}else{
close(); close();
}
netServer.admins.save(); netServer.admins.save();
kicked = true; kicked = true;

View File

@@ -805,6 +805,10 @@ public class UnitType extends UnlockableContent{
cmds.add(UnitCommand.moveCommand); cmds.add(UnitCommand.moveCommand);
if(canBoost){
cmds.add(UnitCommand.boostCommand);
}
//healing, mining and building is only supported for flying units; pathfinding to ambiguously reachable locations is hard. //healing, mining and building is only supported for flying units; pathfinding to ambiguously reachable locations is hard.
if(flying){ if(flying){
if(canHeal){ if(canHeal){

View File

@@ -12,6 +12,7 @@ import static mindustry.Vars.*;
/** Class for handling menus and notifications across the network. Unstable API! */ /** Class for handling menus and notifications across the network. Unstable API! */
public class Menus{ public class Menus{
private static final Seq<MenuListener> menuListeners = new Seq<>(); private static final Seq<MenuListener> menuListeners = new Seq<>();
private static final Seq<TextInputListener> textInputListeners = new Seq<>();
/** Register a *global* menu listener. If no option is chosen, the option is returned as -1. */ /** Register a *global* menu listener. If no option is chosen, the option is returned as -1. */
public static int registerMenu(MenuListener listener){ public static int registerMenu(MenuListener listener){
@@ -19,6 +20,12 @@ public class Menus{
return menuListeners.size - 1; return menuListeners.size - 1;
} }
/** Register a *global* text input listener. If no text is provided, the text is returned as null. */
public static int registerTextInput(TextInputListener listener){
textInputListeners.add(listener);
return textInputListeners.size - 1;
}
//do not invoke any of the methods below directly, use Call //do not invoke any of the methods below directly, use Call
@Remote(variants = Variant.both) @Remote(variants = Variant.both)
@@ -29,6 +36,19 @@ public class Menus{
ui.showMenu(title, message, options, (option) -> Call.menuChoose(player, menuId, option)); ui.showMenu(title, message, options, (option) -> Call.menuChoose(player, menuId, option));
} }
@Remote(variants = Variant.both)
public static void followUpMenu(int menuId, String title, String message, String[][] options){
if(title == null) title = "";
if(options == null) options = new String[0][0];
ui.showFollowUpMenu(menuId, title, message, options, (option) -> Call.menuChoose(player, menuId, option));
}
@Remote(variants = Variant.both)
public static void hideFollowUpMenu(int menuId) {
ui.hideFollowUpMenu(menuId);
}
@Remote(targets = Loc.both, called = Loc.both) @Remote(targets = Loc.both, called = Loc.both)
public static void menuChoose(@Nullable Player player, int menuId, int option){ public static void menuChoose(@Nullable Player player, int menuId, int option){
if(player != null){ if(player != null){
@@ -39,6 +59,27 @@ public class Menus{
} }
} }
@Remote(variants = Variant.both)
public static void textInput(int textInputId, String title, String message, int textLength, String def, boolean numeric){
if(title == null) title = "";
ui.showTextInput(title, message, textLength, def, numeric, (text) -> {
Call.textInputResult(player, textInputId, text);
}, () -> {
Call.textInputResult(player, textInputId, null);
});
}
@Remote(targets = Loc.both, called = Loc.both)
public static void textInputResult(@Nullable Player player, int textInputId, @Nullable String text){
if(player != null){
Events.fire(new TextInputEvent(player, textInputId, text));
if(textInputId >= 0 && textInputId < textInputListeners.size){
textInputListeners.get(textInputId).get(player, text);
}
}
}
@Remote(variants = Variant.both, unreliable = true) @Remote(variants = Variant.both, unreliable = true)
public static void setHudText(String message){ public static void setHudText(String message){
if(message == null) return; if(message == null) return;
@@ -130,4 +171,8 @@ public class Menus{
public interface MenuListener{ public interface MenuListener{
void get(Player player, int option); void get(Player player, int option);
} }
public interface TextInputListener{
void get(Player player, @Nullable String text);
}
} }

View File

@@ -8,6 +8,7 @@ import arc.util.*;
import mindustry.ctype.*; import mindustry.ctype.*;
import mindustry.gen.*; import mindustry.gen.*;
import mindustry.graphics.*; import mindustry.graphics.*;
import mindustry.input.*;
import mindustry.world.meta.*; import mindustry.world.meta.*;
import static arc.Core.*; import static arc.Core.*;
@@ -19,6 +20,12 @@ public class ContentInfoDialog extends BaseDialog{
super("@info.title"); super("@info.title");
addCloseButton(); addCloseButton();
keyDown(key -> {
if(key == keybinds.get(Binding.block_info).key){
Core.app.post(this::hide);
}
});
} }
public void show(UnlockableContent content){ public void show(UnlockableContent content){

View File

@@ -38,6 +38,15 @@ public class HostDialog extends BaseDialog{
button.update(() -> button.getStyle().imageUpColor = player.color()); button.update(() -> button.getStyle().imageUpColor = player.color());
}).width(w).height(70f).pad(4).colspan(3); }).width(w).height(70f).pad(4).colspan(3);
if(steam){
cont.row();
cont.add().width(65f);
cont.check("@steam.friendsonly", !Core.settings.getBool("steampublichost"), val -> Core.settings.put("steampublichost", !val)).colspan(2).left()
.with(c -> ui.addDescTooltip(c, "@steam.friendsonly.tooltip")).padBottom(15f).row();
}
cont.row(); cont.row();
cont.add().width(65f); cont.add().width(65f);
@@ -51,7 +60,11 @@ public class HostDialog extends BaseDialog{
runHost(); runHost();
}).width(w).height(70f); }).width(w).height(70f);
if(!steam){
cont.button("?", () -> ui.showInfo("@host.info")).size(65f, 70f).padLeft(6f); cont.button("?", () -> ui.showInfo("@host.info")).size(65f, 70f).padLeft(6f);
}else{
cont.add().size(65f, 70f).padLeft(6f);
}
shown(() -> { shown(() -> {
if(!steam){ if(!steam){
@@ -68,24 +81,9 @@ public class HostDialog extends BaseDialog{
player.admin = true; player.admin = true;
Events.fire(new HostEvent()); Events.fire(new HostEvent());
if(steam){ if(steam && Core.settings.getBool("steampublichost")){
Core.app.post(() -> Core.settings.getBoolOnce("steampublic3", () -> {
ui.showCustomConfirm("@setting.publichost.name", "@public.confirm", "@yes", "@no", () -> {
ui.showCustomConfirm("@setting.publichost.name", "@public.confirm.really", "@no", "@yes", () -> {
Core.settings.put("publichost", true);
platform.updateLobby();
}, () -> {
Core.settings.put("publichost", false);
platform.updateLobby();
});
}, () -> {
Core.settings.put("publichost", false);
platform.updateLobby();
});
}));
if(Version.modifier.contains("beta") || Version.modifier.contains("alpha")){ if(Version.modifier.contains("beta") || Version.modifier.contains("alpha")){
Core.settings.put("publichost", false); Core.settings.put("steampublichost", false);
platform.updateLobby(); platform.updateLobby();
Core.settings.getBoolOnce("betapublic", () -> ui.showInfo("@public.beta")); Core.settings.getBoolOnce("betapublic", () -> ui.showInfo("@public.beta"));
} }

View File

@@ -37,7 +37,7 @@ public class JoinDialog extends BaseDialog{
TextButtonStyle style; TextButtonStyle style;
String lastIp; String lastIp;
int lastPort; int lastPort, lastColumns = -1;
Task ping; Task ping;
String serverSearch = ""; String serverSearch = "";
@@ -107,12 +107,17 @@ public class JoinDialog extends BaseDialog{
}); });
onResize(() -> { onResize(() -> {
//only refresh on resize when the minimum dimension is smaller than the maximum preferred width //only refresh on resize when the minimum dimension is smaller than the maximum preferred width
//this means that refreshes on resize will only happen for small phones that need the list to fit in portrait mode //this means that refreshes on resize will only happen for small phones that need the list to fit in portrait mode
if(Math.min(Core.graphics.getWidth(), Core.graphics.getHeight()) / Scl.scl() * 0.9f < 500f){ //also resize if number of cols changes
if(Math.min(Core.graphics.getWidth(), Core.graphics.getHeight()) / Scl.scl() * 0.9f < 500f || lastColumns != columns()){
setup(); setup();
refreshAll(); refreshAll();
} }
lastColumns = columns();
}); });
} }
@@ -140,7 +145,11 @@ public class JoinDialog extends BaseDialog{
connect(server.ip, server.port); connect(server.ip, server.port);
} }
} }
}).width(targetWidth()).pad(4f).get(); }).width(targetWidth()).growY().top().left().pad(4f).get();
if(remote.getChildren().size % columns() == 0){
remote.row();
}
Table inner = new Table(Tex.whiteui); Table inner = new Table(Tex.whiteui);
inner.setColor(Pal.gray); inner.setColor(Pal.gray);
@@ -181,8 +190,6 @@ public class JoinDialog extends BaseDialog{
button.row(); button.row();
server.content = button.table(t -> {}).grow().get(); server.content = button.table(t -> {}).grow().get();
remote.row();
} }
} }
@@ -234,6 +241,7 @@ public class JoinDialog extends BaseDialog{
} }
void buildServer(Host host, Table content){ void buildServer(Host host, Table content){
content.top().left();
String versionString; String versionString;
if(host.version == -1){ if(host.version == -1){
@@ -267,6 +275,7 @@ public class JoinDialog extends BaseDialog{
}).growX().height(36f).row(); }).growX().height(36f).row();
content.table(Tex.whitePane, t -> { content.table(Tex.whitePane, t -> {
t.top().left();
t.setColor(color); t.setColor(color);
t.left(); t.left();
@@ -295,7 +304,7 @@ public class JoinDialog extends BaseDialog{
if(host.ping > 0){ if(host.ping > 0){
t.add(Iconc.chartBar + " " + host.ping + "ms").style(Styles.outlineLabel).color(Pal.gray).left(); t.add(Iconc.chartBar + " " + host.ping + "ms").style(Styles.outlineLabel).color(Pal.gray).left();
} }
}).growX().left().bottom(); }).growY().growX().left().bottom();
} }
void setup(){ void setup(){
@@ -333,7 +342,7 @@ public class JoinDialog extends BaseDialog{
button.update(() -> button.getStyle().imageUpColor = player.color()); button.update(() -> button.getStyle().imageUpColor = player.color());
}).width(w).height(70f).pad(4); }).width(w).height(70f).pad(4);
cont.row(); cont.row();
cont.add(pane).width(w + 38).pad(0); cont.add(pane).width((w + 5) * columns() + 33).pad(0);
cont.row(); cont.row();
cont.buttonCenter("@server.add", Icon.add, () -> { cont.buttonCenter("@server.add", Icon.add, () -> {
renaming = null; renaming = null;
@@ -379,7 +388,7 @@ public class JoinDialog extends BaseDialog{
hosts.row(); hosts.row();
hosts.image().growX().pad(5).padLeft(10).padRight(10).height(3).color(Pal.accent); hosts.image().growX().pad(5).padLeft(10).padRight(10).height(3).color(Pal.accent);
hosts.row(); hosts.row();
hosts.add(coll).width(targetWidth()); hosts.add(coll).width((targetWidth() + 5f) * columns());
hosts.row(); hosts.row();
} }
@@ -404,7 +413,7 @@ public class JoinDialog extends BaseDialog{
serverSearch = text.trim().replaceAll(" +", " ").toLowerCase() serverSearch = text.trim().replaceAll(" +", " ").toLowerCase()
).grow().pad(8).get().keyDown(KeyCode.enter, this::refreshCommunity); ).grow().pad(8).get().keyDown(KeyCode.enter, this::refreshCommunity);
t.button(Icon.zoom, Styles.emptyi, this::refreshCommunity).size(54f); t.button(Icon.zoom, Styles.emptyi, this::refreshCommunity).size(54f);
}).width(targetWidth()).height(70f).pad(4).row(); }).width((targetWidth() + 5f) * columns()).height(70f).pad(4).row();
for(int i = 0; i < defaultServers.size; i ++){ for(int i = 0; i < defaultServers.size; i ++){
ServerGroup group = defaultServers.get((i + defaultServers.size/2) % defaultServers.size); ServerGroup group = defaultServers.get((i + defaultServers.size/2) % defaultServers.size);
@@ -413,7 +422,7 @@ public class JoinDialog extends BaseDialog{
continue; continue;
} }
Table[] groupTable = {null}; Table[] groupTable = {null, null};
//table containing all groups //table containing all groups
for(String address : group.addresses){ for(String address : group.addresses){
@@ -430,7 +439,7 @@ public class JoinDialog extends BaseDialog{
//add header //add header
if(groupTable[0] == null){ if(groupTable[0] == null){
global.table(t -> groupTable[0] = t).row(); global.table(t -> groupTable[0] = t).fillX().left().row();
groupTable[0].table(head -> { groupTable[0].table(head -> {
if(!group.name.isEmpty()){ if(!group.name.isEmpty()){
@@ -448,10 +457,12 @@ public class JoinDialog extends BaseDialog{
} }
}).size(40f).get(); }).size(40f).get();
image[0].addListener(new Tooltip(t -> t.background(Styles.black6).margin(4).label(() -> !group.hidden() ? "@server.shown" : "@server.hidden"))); image[0].addListener(new Tooltip(t -> t.background(Styles.black6).margin(4).label(() -> !group.hidden() ? "@server.shown" : "@server.hidden")));
}).width(targetWidth()).padBottom(-2).row(); }).width(targetWidth() * columns()).padBottom(-2).row();
groupTable[1] = groupTable[0].row().table().top().left().grow().get();
} }
addCommunityHost(res, groupTable[0]); addCommunityHost(res, groupTable[1]);
groupTable[0].margin(5f); groupTable[0].margin(5f);
groupTable[0].pack(); groupTable[0].pack();
@@ -460,11 +471,16 @@ public class JoinDialog extends BaseDialog{
} }
} }
int columns(){
return Mathf.clamp((int)((Core.graphics.getWidth() / Scl.scl() * 0.85f) / targetWidth()), 1, 3);
}
void addCommunityHost(Host host, Table container){ void addCommunityHost(Host host, Table container){
global.background(null); global.background(null);
float w = targetWidth(); float w = targetWidth();
//TODO looks bad container.left().top();
container.button(b -> buildServer(host, b), style, () -> { container.button(b -> buildServer(host, b), style, () -> {
Events.fire(new ClientPreConnectEvent(host)); Events.fire(new ClientPreConnectEvent(host));
if(!Core.settings.getBool("server-disclaimer", false)){ if(!Core.settings.getBool("server-disclaimer", false)){
@@ -477,7 +493,11 @@ public class JoinDialog extends BaseDialog{
}else{ }else{
safeConnect(host.address, host.port, host.version); safeConnect(host.address, host.port, host.version);
} }
}).width(w).padBottom(7).row(); }).width(w).padBottom(7).padRight(4f).top().left().growY().uniformY();
if((container.getChildren().size) % columns() == 0){
container.row();
}
} }
void finishLocalHosts(){ void finishLocalHosts(){
@@ -500,12 +520,14 @@ public class JoinDialog extends BaseDialog{
totalHosts++; totalHosts++;
float w = targetWidth(); float w = targetWidth();
if((local.getChildren().size) % columns() == 0){
local.row(); local.row();
}
local.button(b -> buildServer(host, b), style, () -> { local.button(b -> buildServer(host, b), style, () -> {
Events.fire(new ClientPreConnectEvent(host)); Events.fire(new ClientPreConnectEvent(host));
safeConnect(host.address, host.port, host.version); safeConnect(host.address, host.port, host.version);
}).width(w); }).width(w).top().left().growY();
} }
public void connect(String ip, int port){ public void connect(String ip, int port){
@@ -599,6 +621,7 @@ public class JoinDialog extends BaseDialog{
}); });
//modify default servers on main thread //modify default servers on main thread
Core.app.post(() -> { Core.app.post(() -> {
servers.sort(s -> s.name == null ? Integer.MAX_VALUE : s.name.hashCode());
defaultServers.addAll(servers); defaultServers.addAll(servers);
Log.info("Fetched @ community servers.", defaultServers.size); Log.info("Fetched @ community servers.", defaultServers.size);
}); });

View File

@@ -227,13 +227,11 @@ public class MapsDialog extends BaseDialog{
t.button("@custom", Styles.flatTogglet, () -> { t.button("@custom", Styles.flatTogglet, () -> {
showCustom = !showCustom; showCustom = !showCustom;
Core.settings.put("editorshowcustommaps", showCustom); Core.settings.put("editorshowcustommaps", showCustom);
Core.settings.forceSave();
rebuildMaps(); rebuildMaps();
}).size(150f, 60f).checked(showCustom); }).size(150f, 60f).checked(showCustom);
t.button("@builtin", Styles.flatTogglet, () -> { t.button("@builtin", Styles.flatTogglet, () -> {
showBuiltIn = !showBuiltIn; showBuiltIn = !showBuiltIn;
Core.settings.put("editorshowbuiltinmaps", showBuiltIn); Core.settings.put("editorshowbuiltinmaps", showBuiltIn);
Core.settings.forceSave();
rebuildMaps(); rebuildMaps();
}).size(150f, 60f).checked(showBuiltIn); }).size(150f, 60f).checked(showBuiltIn);
}).padBottom(10f); }).padBottom(10f);
@@ -244,13 +242,11 @@ public class MapsDialog extends BaseDialog{
t.button("@editor.filters.author", Styles.flatTogglet, () -> { t.button("@editor.filters.author", Styles.flatTogglet, () -> {
searchAuthor = !searchAuthor; searchAuthor = !searchAuthor;
Core.settings.put("editorsearchauthor", searchAuthor); Core.settings.put("editorsearchauthor", searchAuthor);
Core.settings.forceSave();
rebuildMaps(); rebuildMaps();
}).size(150f, 60f).checked(searchAuthor); }).size(150f, 60f).checked(searchAuthor);
t.button("@editor.filters.description", Styles.flatTogglet, () -> { t.button("@editor.filters.description", Styles.flatTogglet, () -> {
searchDescription = !searchDescription; searchDescription = !searchDescription;
Core.settings.put("editorsearchdescription", searchDescription); Core.settings.put("editorsearchdescription", searchDescription);
Core.settings.forceSave();
rebuildMaps(); rebuildMaps();
}).size(150f, 60f).checked(searchDescription); }).size(150f, 60f).checked(searchDescription);
}); });

View File

@@ -329,6 +329,10 @@ public class ModsDialog extends BaseDialog{
return "@mod.blacklisted"; return "@mod.blacklisted";
}else if(!item.isSupported()){ }else if(!item.isSupported()){
return "@mod.incompatiblegame"; return "@mod.incompatiblegame";
}else if(item.state == ModState.circularDependencies){
return "@mod.circulardependencies";
}else if(item.state == ModState.incompleteDependencies){
return "@mod.incompletedependencies";
}else if(item.hasUnmetDependencies()){ }else if(item.hasUnmetDependencies()){
return "@mod.unmetdependencies"; return "@mod.unmetdependencies";
}else if(item.hasContentErrors()){ }else if(item.hasContentErrors()){
@@ -346,6 +350,10 @@ public class ModsDialog extends BaseDialog{
return "@mod.blacklisted.details"; return "@mod.blacklisted.details";
}else if(!item.isSupported()){ }else if(!item.isSupported()){
return Core.bundle.format("mod.requiresversion.details", item.meta.minGameVersion); return Core.bundle.format("mod.requiresversion.details", item.meta.minGameVersion);
}else if(item.state == ModState.circularDependencies){
return "@mod.circulardependencies.details";
}else if(item.state == ModState.incompleteDependencies){
return Core.bundle.format("mod.incompletedependencies.details", item.missingDependencies.toString(", "));
}else if(item.hasUnmetDependencies()){ }else if(item.hasUnmetDependencies()){
return Core.bundle.format("mod.missingdependencies.details", item.missingDependencies.toString(", ")); return Core.bundle.format("mod.missingdependencies.details", item.missingDependencies.toString(", "));
}else if(item.hasContentErrors()){ }else if(item.hasContentErrors()){
@@ -407,7 +415,7 @@ public class ModsDialog extends BaseDialog{
}).width(400f); }).width(400f);
Seq<UnlockableContent> all = Seq.with(content.getContentMap()).<Content>flatten().select(c -> c.minfo.mod == mod && c instanceof UnlockableContent).as(); Seq<UnlockableContent> all = Seq.with(content.getContentMap()).<Content>flatten().select(c -> c.minfo.mod == mod && c instanceof UnlockableContent u && !u.isHidden()).as();
if(all.any()){ if(all.any()){
dialog.cont.row(); dialog.cont.row();
dialog.cont.button("@mods.viewcontent", Icon.book, () -> { dialog.cont.button("@mods.viewcontent", Icon.book, () -> {
@@ -636,7 +644,11 @@ public class ModsDialog extends BaseDialog{
Core.app.post(() -> modError(t)); Core.app.post(() -> modError(t));
} }
private void githubImportMod(String repo, boolean isJava, @Nullable String release){ public void githubImportMod(String repo, boolean isJava){
githubImportMod(repo, isJava, null);
}
public void githubImportMod(String repo, boolean isJava, @Nullable String release){
modImportProgress = 0f; modImportProgress = 0f;
ui.loadfrag.show("@downloading"); ui.loadfrag.show("@downloading");
ui.loadfrag.setProgress(() -> modImportProgress); ui.loadfrag.setProgress(() -> modImportProgress);

View File

@@ -52,13 +52,9 @@ public class PausedDialog extends BaseDialog{
cont.button("@hostserver", Icon.host, () -> { cont.button("@hostserver", Icon.host, () -> {
if(net.server() && steam){ if(net.server() && steam){
platform.inviteFriends(); platform.inviteFriends();
}else{
if(steam){
ui.host.runHost();
}else{ }else{
ui.host.show(); ui.host.show();
} }
}
}).disabled(b -> !((steam && net.server()) || !net.active())).colspan(2).width(dw * 2 + 10f).update(e -> e.setText(net.server() && steam ? "@invitefriends" : "@hostserver")); }).disabled(b -> !((steam && net.server()) || !net.active())).colspan(2).width(dw * 2 + 10f).update(e -> e.setText(net.server() && steam ? "@invitefriends" : "@hostserver"));
cont.row(); cont.row();

View File

@@ -785,7 +785,7 @@ public class PlanetDialog extends BaseDialog implements PlanetInterfaceRenderer{
hoverLabel.touchable = Touchable.disabled; hoverLabel.touchable = Touchable.disabled;
hoverLabel.color.a = state.uiAlpha; hoverLabel.color.a = state.uiAlpha;
Vec3 pos = planets.cam.project(Tmp.v31.set(hovered.tile.v).setLength(PlanetRenderer.outlineRad).rotate(Vec3.Y, -state.planet.getRotation()).add(state.planet.position)); Vec3 pos = planets.cam.project(Tmp.v31.set(hovered.tile.v).setLength(PlanetRenderer.outlineRad * state.planet.radius).rotate(Vec3.Y, -state.planet.getRotation()).add(state.planet.position));
hoverLabel.setPosition(pos.x - Core.scene.marginLeft, pos.y - Core.scene.marginBottom, Align.center); hoverLabel.setPosition(pos.x - Core.scene.marginLeft, pos.y - Core.scene.marginBottom, Align.center);
hoverLabel.getText().setLength(0); hoverLabel.getText().setLength(0);
@@ -831,7 +831,7 @@ public class PlanetDialog extends BaseDialog implements PlanetInterfaceRenderer{
} }
if(state.planet.hasGrid()){ if(state.planet.hasGrid()){
hovered = Core.scene.getDialog() == this ? state.planet.getSector(planets.cam.getMouseRay(), PlanetRenderer.outlineRad) : null; hovered = Core.scene.getDialog() == this ? state.planet.getSector(planets.cam.getMouseRay(), PlanetRenderer.outlineRad * state.planet.radius) : null;
}else if(state.planet.isLandable()){ }else if(state.planet.isLandable()){
boolean wasNull = selected == null; boolean wasNull = selected == null;
//always have the first sector selected. //always have the first sector selected.

View File

@@ -177,6 +177,15 @@ public class ResearchDialog extends BaseDialog{
}); });
} }
@Override
public Dialog show(){
if(net.client()){
ui.showInfo("@research.multiplayer");
return this;
}
return show(Core.scene);
}
void checkMargin(){ void checkMargin(){
if(Core.graphics.isPortrait() && showTechSelect){ if(Core.graphics.isPortrait() && showTechSelect){
itemDisplay.marginTop(60f); itemDisplay.marginTop(60f);

Some files were not shown because too many files have changed in this diff Show More