mirror of
https://github.com/Anuken/Mindustry.git
synced 2026-10-05 04:40:25 +03:00
Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
b88a215dc5 | ||
|
|
36e5522694 | ||
|
|
226e8b8a20 | ||
|
|
43424547f2 | ||
|
|
d2f2189441 | ||
|
|
e81cd5b68e | ||
|
|
c30cbc0f20 | ||
|
|
e79a97ed92 | ||
|
|
ac19c3f160 | ||
|
|
375837eef5 | ||
|
|
c59d3d5279 | ||
|
|
d1c506330b | ||
|
|
b81e942479 | ||
|
|
e36a70749c | ||
|
|
4db085bd07 | ||
|
|
cd7088d241 | ||
|
|
821569aafb | ||
|
|
83a059b2da | ||
|
|
0de2c95f6e | ||
|
|
fcb44e4952 | ||
|
|
af26e60a4f | ||
|
|
6b936aa7f6 | ||
|
|
f6a8c7509d | ||
|
|
deb814ce58 | ||
|
|
da4371baf8 | ||
|
|
47a2afd294 | ||
|
|
0122b735a0 | ||
|
|
9c3ddc398c | ||
|
|
0ccbe68a65 | ||
|
|
30cd6a7de6 | ||
|
|
23a2596e29 | ||
|
|
b88422b17e | ||
|
|
09a9b68331 | ||
|
|
08f63122ba | ||
|
|
355f33b0a4 | ||
|
|
90f7bbae65 | ||
|
|
4be7cf5c0e | ||
|
|
58eef49284 | ||
|
|
b030a51485 | ||
|
|
aec3e178f5 | ||
|
|
ee47d8a20a | ||
|
|
5c05c9f1d1 | ||
|
|
172f47cad6 | ||
|
|
a8b3350d61 | ||
|
|
b324194295 | ||
|
|
663fa2bd3f | ||
|
|
4ddb78e8d5 | ||
|
|
f23d203095 | ||
|
|
dfce361afc | ||
|
|
2553891c25 | ||
|
|
e4bef567b5 | ||
|
|
0daafc5ff3 | ||
|
|
d07706e039 | ||
|
|
ca2b51d4fe | ||
|
|
bae3884d96 | ||
|
|
515a6f9c8d | ||
|
|
d937af7497 | ||
|
|
a216c9c56e | ||
|
|
0e9f250e93 | ||
|
|
10e0be9d68 | ||
|
|
29d4246019 | ||
|
|
65c5d206a8 | ||
|
|
3a73a97746 | ||
|
|
a3f8ca9ca5 | ||
|
|
a046f0f11b | ||
|
|
2cc486febc | ||
|
|
3c9b3680bc | ||
|
|
0a1957eb13 | ||
|
|
75e1e6f166 | ||
|
|
327a8fc61b | ||
|
|
a857eaed74 | ||
|
|
028c189dc8 | ||
|
|
11f8e06708 | ||
|
|
0760923943 | ||
|
|
219084fe3c | ||
|
|
4f314afe21 | ||
|
|
6750cfead8 | ||
|
|
b569646310 | ||
|
|
cc207d3d7c | ||
|
|
e234ac43a6 | ||
|
|
2388091ed6 | ||
|
|
a38351d41f | ||
|
|
4d8de72a8e | ||
|
|
ab2138d8e7 | ||
|
|
46c75af9e4 | ||
|
|
8eb3c16c50 | ||
|
|
39e88ae614 |
+1
-1
@@ -25,6 +25,6 @@ For example, if your server address is `example.com:6000`, you would add a comma
|
||||
"address": "example.com:6000"
|
||||
}
|
||||
```
|
||||
> 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 modifing the weight or priority of the record.
|
||||
> 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.
|
||||
|
||||
@@ -952,7 +952,7 @@ ability.unitspawn = {0} Factory
|
||||
ability.shieldregenfield = Shield Regen Field
|
||||
ability.movelightning = Movement Lightning
|
||||
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
|
||||
|
||||
bar.onlycoredeposit = Only Core Depositing Allowed
|
||||
@@ -989,10 +989,12 @@ bar.strength = [stat]{0}[lightgray]x strength
|
||||
units.processorcontrol = [lightgray]Processor Controlled
|
||||
|
||||
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.homing = [stat]homing
|
||||
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.lightning = [stat]{0}[lightgray]x lightning ~ [stat]{1}[lightgray] damage
|
||||
bullet.buildingdamage = [stat]{0}%[lightgray] building damage
|
||||
@@ -1106,8 +1108,8 @@ setting.bridgeopacity.name = Bridge Opacity
|
||||
setting.playerchat.name = Display Player Bubble Chat
|
||||
setting.showweather.name = Show Weather Graphics
|
||||
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.
|
||||
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 = Friends Only
|
||||
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.
|
||||
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
|
||||
@@ -1159,8 +1161,8 @@ keybind.select.name = Select/Shoot
|
||||
keybind.diagonal_placement.name = Diagonal Placement
|
||||
keybind.pick.name = Pick Block
|
||||
keybind.break_block.name = Break Block
|
||||
keybind.select_all_units = Select All Units
|
||||
keybind.select_all_unit_factories = Select All Unit Factories
|
||||
keybind.select_all_units.name = Select All Units
|
||||
keybind.select_all_unit_factories.name = Select All Unit Factories
|
||||
keybind.deselect.name = Deselect
|
||||
keybind.pickupCargo.name = Pickup Cargo
|
||||
keybind.dropCargo.name = Drop Cargo
|
||||
@@ -2233,6 +2235,7 @@ lst.flushmessage = Display a message on the screen from the text buffer.\nWill w
|
||||
lst.cutscene = Manipulate the player camera.
|
||||
lst.setflag = Set a global flag that can be read by all processors.
|
||||
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.
|
||||
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -979,6 +979,8 @@ bullet.splashdamage = [stat]{0}[lightgray] щети на площ ~[stat] {1}[li
|
||||
bullet.incendiary = [stat]Подпалване
|
||||
bullet.homing = [stat]Самонасочване
|
||||
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.lightning = [stat]{0}[lightgray]x светкавица ~ [stat]{1}[lightgray] щети
|
||||
bullet.buildingdamage = [stat]{0}%[lightgray] щети на сгради
|
||||
@@ -1092,8 +1094,8 @@ setting.bridgeopacity.name = Плътност на Мостовете
|
||||
setting.playerchat.name = Показвай Мехурчета с Чат
|
||||
setting.showweather.name = Показвай Графики за Климата
|
||||
setting.hidedisplays.name = Hide Logic Displays
|
||||
public.confirm = Искате ли да направите вашата игра публична?\n[accent]Всеки ще може да се присъедини към вашата игра.\n[lightgray]Това може да бъде променено по-късно в Настройки->Игри->Видимост на Публичните Игри.
|
||||
public.confirm.really = Ако искате да играете с приятел, използвате [green]Покани Приятел[] вместо [scarlet]Публикувай Сървър[]!\nСигурни ли сте, че искате да направите вашата игра [scarlet]публична[]?
|
||||
steam.friendsonly = Friends Only
|
||||
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 = Имайте в предвид, че бета версии на играта не могат да стартират публични игри.
|
||||
uiscale.reset = Размерът на интерфейса беше променен.\nНатиснете "ОК" за да потвърдите този размер.\n[scarlet]Възстановяване и рестартиране след[accent] {0}[] секунди...
|
||||
uiscale.cancel = Отакз & Изход
|
||||
@@ -1145,8 +1147,8 @@ keybind.select.name = Избери/Стреляй
|
||||
keybind.diagonal_placement.name = Диагонално Поставяне
|
||||
keybind.pick.name = Вземи Блок
|
||||
keybind.break_block.name = Унищожи Блок
|
||||
keybind.select_all_units = Select All Units
|
||||
keybind.select_all_unit_factories = Select All Unit Factories
|
||||
keybind.select_all_units.name = Select All Units
|
||||
keybind.select_all_unit_factories.name = Select All Unit Factories
|
||||
keybind.deselect.name = Премахни избора
|
||||
keybind.pickupCargo.name = Вземи Товар
|
||||
keybind.dropCargo.name = Остави Товар
|
||||
@@ -2200,6 +2202,7 @@ lst.flushmessage = Display a message on the screen from the text buffer.\nWill w
|
||||
lst.cutscene = Manipulate the player camera.
|
||||
lst.setflag = Set a global flag that can be read by all processors.
|
||||
lst.getflag = Check if a global flag is set.
|
||||
lst.setprop = Sets a property of a unit or building.
|
||||
|
||||
logic.nounitbuild = [red]Действия за строене на единици не са позволени тук.
|
||||
|
||||
|
||||
@@ -101,7 +101,7 @@ database = Base de dades del nucli
|
||||
database.button = Base de dades
|
||||
savegame = Desa la partida
|
||||
loadgame = Carrega una partida
|
||||
joingame = Unir-se a una partida
|
||||
joingame = Uneix-me a una partida
|
||||
customgame = Partida personalitzada
|
||||
newgame = Partida nova
|
||||
none = <cap>
|
||||
@@ -149,15 +149,15 @@ mod.incompatiblemod = [red]Incompatible
|
||||
mod.blacklisted = [red]Unsupported
|
||||
mod.unmetdependencies = [red]Depèndencies sense resoldre
|
||||
mod.erroredcontent = [scarlet]Errors del contingut
|
||||
mod.circulardependencies = [red]Circular Dependencies
|
||||
mod.incompletedependencies = [red]Incomplete Dependencies
|
||||
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.outdatedv7.details = Aquest mod és incompatible amb l’última versió del joc. L’autor l’ha d’actualitzar i afegir [accent]minGameVersion: 136[] al seu fitxer [accent]mod.json[].
|
||||
mod.blacklisted.details = Aquest mod s’ha 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.erroredcontent.details = Aquesta partida ha causat errors mentre es carregava. Pregunteu a l’autor del mod si pot arreglar-ho.
|
||||
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.circulardependencies.details = Aquest mod depèn d’un 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.errors = S’han produït errors quan es carregava el contingut.
|
||||
mod.noerrorplay = [scarlet]S’executen mods amb errors.[] Desactiveu els mods afectats o arregleu les errades abans de jugar.
|
||||
@@ -335,7 +335,7 @@ command.repair = Repara
|
||||
command.rebuild = Reconstrueix
|
||||
command.assist = Assisteix al jugador
|
||||
command.move = Mou
|
||||
command.boost = Boost
|
||||
command.boost = Sobrevola
|
||||
openlink = Obre l’enllaç
|
||||
copylink = Copia l’enllaç
|
||||
back = Enrere
|
||||
@@ -983,6 +983,8 @@ bullet.splashdamage = [stat]{0}[lightgray] de dany a l’àrea ~[stat] {1}[light
|
||||
bullet.incendiary = [stat]incendiari
|
||||
bullet.homing = [stat]munició guiada
|
||||
bullet.armorpierce = [stat]perforador d’armadures
|
||||
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.lightning = [stat]{0}[lightgray]× llampec ~ [stat]{1}[lightgray] de dany
|
||||
bullet.buildingdamage = [stat]{0}%[lightgray] de dany a les estructures
|
||||
@@ -1096,8 +1098,8 @@ setting.bridgeopacity.name = Opacitat de cintes i canonades subterrànies
|
||||
setting.playerchat.name = Mostra el xat bombolla de jugadors
|
||||
setting.showweather.name = Mostra l’estat meteorològic
|
||||
setting.hidedisplays.name = Amaga els monitors lògics
|
||||
public.confirm = Voleu que la vostra partida sigui pública?\n[accent]Qualsevol jugador s’hi podrà unir.\n[lightgray]Després es pot canviar a Configuració→Partida→Visibilitat de la partida pública.
|
||||
public.confirm.really = Si voleu jugar amb els vostres amics, feu servir [green]Invita un amic[] en lloc d’emprar un [scarlet]servidor públic[]!\nEsteu segur que voleu que la partida sigui [scarlet]pública[]?
|
||||
steam.friendsonly = Friends Only
|
||||
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 d’espera.
|
||||
uiscale.reset = L’escala de la interfície ha canviat.\nPremeu «D’acord» per a confirmar-ho.\n[scarlet]Es revertiran els canvis en [accent]{0}[] segons.
|
||||
uiscale.cancel = Cancel·la i surt
|
||||
@@ -1149,8 +1151,8 @@ keybind.select.name = Selecciona/Dispara
|
||||
keybind.diagonal_placement.name = Construcció diagonal
|
||||
keybind.pick.name = Selecciona un tipus de bloc des del mapa
|
||||
keybind.break_block.name = Desmunta un bloc
|
||||
keybind.select_all_units = Selecciona totes les unitats
|
||||
keybind.select_all_unit_factories = Selecciona totes les unitats fabricadores
|
||||
keybind.select_all_units.name = Selecciona totes les unitats
|
||||
keybind.select_all_unit_factories.name = Selecciona totes les unitats fabricadores
|
||||
keybind.deselect.name = Cancel·la la selecció
|
||||
keybind.pickupCargo.name = Recull càrrega
|
||||
keybind.dropCargo.name = Deixa la càrrega
|
||||
@@ -1465,7 +1467,7 @@ block.distributor.name = Distrïbudor
|
||||
block.sorter.name = Classificador
|
||||
block.inverted-sorter.name = Classificador invers
|
||||
block.message.name = Missatge
|
||||
block.reinforced-message.name = Missatge reforçat
|
||||
block.reinforced-message.name = Missatge destacat
|
||||
block.world-message.name = Missatge mundial
|
||||
block.illuminator.name = Il·luminador
|
||||
block.overflow-gate.name = Porta de desbordament
|
||||
@@ -1877,7 +1879,7 @@ liquid.neoplasm.details = Neoplasma. Una massa incontrolable de cèl·lules sint
|
||||
block.derelict = \uf77e [lightgray]En ruïnes
|
||||
block.armored-conveyor.description = Mou objectes. Pels laterals només accepta entrades des d’altres cintes transportadores.
|
||||
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.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.
|
||||
@@ -2211,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.setflag = Estableix un senyal global que es podrà llegir en tots els processadors.
|
||||
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.
|
||||
|
||||
|
||||
@@ -981,6 +981,8 @@ bullet.splashdamage = [stat]{0}[lightgray] plošného poškození ~[stat] {1}[li
|
||||
bullet.incendiary = [stat]zápalný
|
||||
bullet.homing = [stat]samonaváděcí
|
||||
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.lightning = [stat]{0}[lightgray]x jiskření ~ [stat]{1}[lightgray] poškození
|
||||
bullet.buildingdamage = [stat]{0}%[lightgray] poškození budov
|
||||
@@ -1094,8 +1096,8 @@ setting.bridgeopacity.name = Průsvitnost přemostění
|
||||
setting.playerchat.name = Zobrazit bublinu se zprávami hráče
|
||||
setting.showweather.name = Zobrazit Grafiku Počasí
|
||||
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.
|
||||
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 = Friends Only
|
||||
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é.
|
||||
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
|
||||
@@ -1147,8 +1149,8 @@ keybind.select.name = Vybrat/Střílet
|
||||
keybind.diagonal_placement.name = Umisťovat úhlopříčně
|
||||
keybind.pick.name = Vybrat blok
|
||||
keybind.break_block.name = Rozbít blok
|
||||
keybind.select_all_units = Select All Units
|
||||
keybind.select_all_unit_factories = Select All Unit Factories
|
||||
keybind.select_all_units.name = Select All Units
|
||||
keybind.select_all_unit_factories.name = Select All Unit Factories
|
||||
keybind.deselect.name = Odznačit
|
||||
keybind.pickupCargo.name = Vyzvednout náklad
|
||||
keybind.dropCargo.name = Položit náklad
|
||||
@@ -2205,6 +2207,7 @@ lst.flushmessage = Display a message on the screen from the text buffer.\nWill w
|
||||
lst.cutscene = Manipulate the player camera.
|
||||
lst.setflag = Set a global flag that can be read by all processors.
|
||||
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é.
|
||||
|
||||
|
||||
@@ -969,6 +969,8 @@ bullet.splashdamage = [stat]{0}[lightgray] områdeskade ~[stat] {1}[lightgray] f
|
||||
bullet.incendiary = [stat]brændfarlig
|
||||
bullet.homing = [stat]målsøgende
|
||||
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.lightning = [stat]{0}[lightgray]x lightning ~ [stat]{1}[lightgray] damage
|
||||
bullet.buildingdamage = [stat]{0}%[lightgray] building damage
|
||||
@@ -1082,8 +1084,8 @@ setting.bridgeopacity.name = Bro-gennemsigtighed
|
||||
setting.playerchat.name = Vis spillers bobbel-chat
|
||||
setting.showweather.name = Show Weather Graphics
|
||||
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.
|
||||
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 = Friends Only
|
||||
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.
|
||||
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
|
||||
@@ -1135,8 +1137,8 @@ keybind.select.name = Vælg/Skyd
|
||||
keybind.diagonal_placement.name = Diagonal placering
|
||||
keybind.pick.name = Tag blok
|
||||
keybind.break_block.name = Ødelæg blok
|
||||
keybind.select_all_units = Select All Units
|
||||
keybind.select_all_unit_factories = Select All Unit Factories
|
||||
keybind.select_all_units.name = Select All Units
|
||||
keybind.select_all_unit_factories.name = Select All Unit Factories
|
||||
keybind.deselect.name = Fravælg
|
||||
keybind.pickupCargo.name = Saml last op
|
||||
keybind.dropCargo.name = Smid last
|
||||
@@ -2185,6 +2187,7 @@ lst.flushmessage = Display a message on the screen from the text buffer.\nWill w
|
||||
lst.cutscene = Manipulate the player camera.
|
||||
lst.setflag = Set a global flag that can be read by all processors.
|
||||
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.
|
||||
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.
|
||||
|
||||
@@ -992,6 +992,8 @@ bullet.splashdamage = [stat]{0}[lightgray] Flächenschaden ~[stat] {1}[lightgray
|
||||
bullet.incendiary = [stat]entzündend
|
||||
bullet.homing = [stat]zielsuchend
|
||||
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.lightning = [stat]{0}[lightgray]x Blitz ~ [stat]{1}[lightgray] Schaden
|
||||
bullet.buildingdamage = [stat]{0}%[lightgray]Blockschaden
|
||||
@@ -1105,8 +1107,8 @@ setting.bridgeopacity.name = Brücken-Deckkraft
|
||||
setting.playerchat.name = Chat im Spiel anzeigen
|
||||
setting.showweather.name = Wetter anzeigen
|
||||
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.
|
||||
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 = Friends Only
|
||||
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.
|
||||
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
|
||||
@@ -1158,8 +1160,8 @@ keybind.select.name = Auswählen/Schießen
|
||||
keybind.diagonal_placement.name = Diagonal platzieren
|
||||
keybind.pick.name = Block auswählen
|
||||
keybind.break_block.name = Block zerstören
|
||||
keybind.select_all_units = Alle Einheiten auswählen
|
||||
keybind.select_all_unit_factories = Alle Einheitenfabriken auswählen
|
||||
keybind.select_all_units.name = Alle Einheiten auswählen
|
||||
keybind.select_all_unit_factories.name = Alle Einheitenfabriken auswählen
|
||||
keybind.deselect.name = Auswahl aufheben
|
||||
keybind.pickupCargo.name = Block aufheben
|
||||
keybind.dropCargo.name = Block fallen lassen
|
||||
@@ -2233,6 +2235,7 @@ lst.flushmessage = Zeige eine Nachricht aus dem Textspeicher auf dem Bildschirm.
|
||||
lst.cutscene = Verschiebe die Spielerkamera.
|
||||
lst.setflag = Setze eine Flag, die von allen Prozessoren gelesen werden kann.
|
||||
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.
|
||||
|
||||
|
||||
@@ -989,6 +989,8 @@ bullet.splashdamage = [stat]{0}[lightgray] daño en área ~[stat] {1}[lightgray]
|
||||
bullet.incendiary = [stat]incendiaria
|
||||
bullet.homing = [stat]rastreadora
|
||||
bullet.armorpierce = [stat]perforación 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 proyectiles fragmentados:
|
||||
bullet.lightning = [stat]{0}[lightgray]x rayos ~ [stat]{1}[lightgray] daño
|
||||
bullet.buildingdamage = [stat]{0}%[lightgray] daño a estructuras
|
||||
@@ -1102,8 +1104,8 @@ setting.bridgeopacity.name = Opacidad de puentes
|
||||
setting.playerchat.name = Mostrar chat de burbuja de jugadores
|
||||
setting.showweather.name = Efectos visuales climáticos
|
||||
setting.hidedisplays.name = Ocultar monitores lógicos
|
||||
public.confirm = ¿Quieres hacer pública tu partida?\n[lightgray]Esto se puede cambiar más tarde en "Configuración->Juego->Visibilidad pública de la partida".
|
||||
public.confirm.really = ¡Si quieres jugar con amigos, usa [green]Invitar a Amigos[] en lugar de un [scarlet]Servidor Público[]!\n¿De verdad quieres hacer [scarlet]pública[] tu partida?
|
||||
steam.friendsonly = Friends Only
|
||||
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 = Recuerda que no puedes crear partidas públicas en las versiones beta del juego.
|
||||
uiscale.reset = La escala de interfaz ha sido modificada.\nPulsa "OK" para conservar esta escala.\n[scarlet]Se desharán los cambios automáticamente en [accent] {0}[] segundos...
|
||||
uiscale.cancel = Cancelar y salir
|
||||
@@ -1155,8 +1157,8 @@ keybind.select.name = Seleccionar/Disparar
|
||||
keybind.diagonal_placement.name = Construcción diagonal
|
||||
keybind.pick.name = Copiar bloque
|
||||
keybind.break_block.name = Deconstruir bloque
|
||||
keybind.select_all_units = Seleccionar todas las unidades
|
||||
keybind.select_all_unit_factories = Seleccionar todas las fábricas de unidades
|
||||
keybind.select_all_units.name = Seleccionar todas las unidades
|
||||
keybind.select_all_unit_factories.name = Seleccionar todas las fábricas de unidades
|
||||
keybind.deselect.name = Deseleccionar
|
||||
keybind.pickupCargo.name = Cargar bloque/unidad
|
||||
keybind.dropCargo.name = Soltar bloque/unidad
|
||||
@@ -2227,6 +2229,7 @@ lst.flushmessage = Muestra un mensaje en pantalla desde la lista de espera de te
|
||||
lst.cutscene = Manipula la cámara del jugador.
|
||||
lst.setflag = Establece una etiqueta global que se puede leer desde todos los procesadores.
|
||||
lst.getflag = Comprueba si se ha establecido una etiqueta global.
|
||||
lst.setprop = Sets a property of a unit or building.
|
||||
|
||||
logic.nounitbuild = [red]No se permite construir bloques de categoría lógica.
|
||||
|
||||
|
||||
@@ -969,6 +969,8 @@ bullet.splashdamage = [stat]{0}[lightgray] hävituspunkti ~[stat] {1}[lightgray]
|
||||
bullet.incendiary = [stat]süttiv
|
||||
bullet.homing = [stat]isesihtiv
|
||||
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.lightning = [stat]{0}[lightgray]x lightning ~ [stat]{1}[lightgray] damage
|
||||
bullet.buildingdamage = [stat]{0}%[lightgray] building damage
|
||||
@@ -1082,8 +1084,8 @@ setting.bridgeopacity.name = Bridge Opacity
|
||||
setting.playerchat.name = Näita mängusisest vestlusakent
|
||||
setting.showweather.name = Show Weather Graphics
|
||||
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.
|
||||
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 = Friends Only
|
||||
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.
|
||||
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
|
||||
@@ -1135,8 +1137,8 @@ keybind.select.name = Vali/Tulista
|
||||
keybind.diagonal_placement.name = Diagonaalne paigutamine
|
||||
keybind.pick.name = Vali blokk
|
||||
keybind.break_block.name = Hävita blokk
|
||||
keybind.select_all_units = Select All Units
|
||||
keybind.select_all_unit_factories = Select All Unit Factories
|
||||
keybind.select_all_units.name = Select All Units
|
||||
keybind.select_all_unit_factories.name = Select All Unit Factories
|
||||
keybind.deselect.name = Tühista valik
|
||||
keybind.pickupCargo.name = Pickup Cargo
|
||||
keybind.dropCargo.name = Drop Cargo
|
||||
@@ -2187,6 +2189,7 @@ lst.flushmessage = Display a message on the screen from the text buffer.\nWill w
|
||||
lst.cutscene = Manipulate the player camera.
|
||||
lst.setflag = Set a global flag that can be read by all processors.
|
||||
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.
|
||||
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.
|
||||
|
||||
@@ -971,6 +971,8 @@ bullet.splashdamage = [stat]{0}[lightgray] ingurune-kaltea ~[stat] {1}[lightgray
|
||||
bullet.incendiary = [stat]su-eragilea
|
||||
bullet.homing = [stat]gidatua
|
||||
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.lightning = [stat]{0}[lightgray]x lightning ~ [stat]{1}[lightgray] damage
|
||||
bullet.buildingdamage = [stat]{0}%[lightgray] building damage
|
||||
@@ -1084,8 +1086,8 @@ setting.bridgeopacity.name = Bridge Opacity
|
||||
setting.playerchat.name = Erakutsi jolas barneko txata
|
||||
setting.showweather.name = Show Weather Graphics
|
||||
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.
|
||||
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 = Friends Only
|
||||
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.
|
||||
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
|
||||
@@ -1137,8 +1139,8 @@ keybind.select.name = Hautatu/Tirokatu
|
||||
keybind.diagonal_placement.name = Kokatze diagonala
|
||||
keybind.pick.name = Jaso blokea
|
||||
keybind.break_block.name = Apurtu blokea
|
||||
keybind.select_all_units = Select All Units
|
||||
keybind.select_all_unit_factories = Select All Unit Factories
|
||||
keybind.select_all_units.name = Select All Units
|
||||
keybind.select_all_unit_factories.name = Select All Unit Factories
|
||||
keybind.deselect.name = Deshautatu
|
||||
keybind.pickupCargo.name = Pickup Cargo
|
||||
keybind.dropCargo.name = Drop Cargo
|
||||
@@ -2189,6 +2191,7 @@ lst.flushmessage = Display a message on the screen from the text buffer.\nWill w
|
||||
lst.cutscene = Manipulate the player camera.
|
||||
lst.setflag = Set a global flag that can be read by all processors.
|
||||
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.
|
||||
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.
|
||||
|
||||
@@ -968,6 +968,8 @@ bullet.splashdamage = [stat]{0}[lightgray] Aluevahinko ~[stat] {1}[lightgray] pa
|
||||
bullet.incendiary = [stat]sytyttävä
|
||||
bullet.homing = [stat]itseohjautuva
|
||||
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.lightning = [stat]{0}[lightgray]x salama ~ [stat]{1}[lightgray] vahinkoa
|
||||
bullet.buildingdamage = [stat]{0}%[lightgray] vahinko rakennuksiin
|
||||
@@ -1081,8 +1083,8 @@ setting.bridgeopacity.name = Siltojen läpinäkyvyys
|
||||
setting.playerchat.name = Näytä pelinsisäinen keskustelu
|
||||
setting.showweather.name = Näytä säägrafiikat
|
||||
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
|
||||
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 = Friends Only
|
||||
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.
|
||||
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
|
||||
@@ -1134,8 +1136,8 @@ keybind.select.name = Valitse/Ammu
|
||||
keybind.diagonal_placement.name = Vino sijoitus
|
||||
keybind.pick.name = Ota palikka
|
||||
keybind.break_block.name = Riko palikka
|
||||
keybind.select_all_units = Select All Units
|
||||
keybind.select_all_unit_factories = Select All Unit Factories
|
||||
keybind.select_all_units.name = Select All Units
|
||||
keybind.select_all_unit_factories.name = Select All Unit Factories
|
||||
keybind.deselect.name = Poista valinta
|
||||
keybind.pickupCargo.name = Nosta lastia
|
||||
keybind.dropCargo.name = Pudota lastia
|
||||
@@ -2190,6 +2192,7 @@ lst.flushmessage = Näytä näytöllä viesti tekstipuskurista.\nOdottaa, kunnes
|
||||
lst.cutscene = Hallitse pelaajan kameraa.
|
||||
lst.setflag = Aseta globaali tunniste, jonka kaikki prosessorit voivat lukea.
|
||||
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.
|
||||
lenum.type = Rakennuksen/Yksikön tyyppi.\nEsim. jokaisesta reitittimestä tämä palauttaa [accent]@router[].\nEi ole merkkijono.
|
||||
lenum.shoot = Ammu tiettyä sijaintia.
|
||||
|
||||
@@ -968,6 +968,8 @@ bullet.splashdamage = [stat]{0}[lightgray] area dmg ~[stat] {1}[lightgray] tiles
|
||||
bullet.incendiary = [stat]incendiary
|
||||
bullet.homing = [stat]homing
|
||||
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.lightning = [stat]{0}[lightgray]x lightning ~ [stat]{1}[lightgray] damage
|
||||
bullet.buildingdamage = [stat]{0}%[lightgray] building damage
|
||||
@@ -1081,8 +1083,8 @@ setting.bridgeopacity.name = Bridge Opacity
|
||||
setting.playerchat.name = Ipakita Player Bubble Chat
|
||||
setting.showweather.name = Show Weather Graphics
|
||||
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.
|
||||
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 = Friends Only
|
||||
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.
|
||||
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
|
||||
@@ -1134,8 +1136,8 @@ keybind.select.name = Select/Shoot
|
||||
keybind.diagonal_placement.name = Diagonal Placement
|
||||
keybind.pick.name = Pick Block
|
||||
keybind.break_block.name = Break Block
|
||||
keybind.select_all_units = Select All Units
|
||||
keybind.select_all_unit_factories = Select All Unit Factories
|
||||
keybind.select_all_units.name = Select All Units
|
||||
keybind.select_all_unit_factories.name = Select All Unit Factories
|
||||
keybind.deselect.name = Deselect
|
||||
keybind.pickupCargo.name = Pickup Cargo
|
||||
keybind.dropCargo.name = Drop Cargo
|
||||
@@ -2186,6 +2188,7 @@ lst.flushmessage = Display a message on the screen from the text buffer.\nWill w
|
||||
lst.cutscene = Manipulate the player camera.
|
||||
lst.setflag = Set a global flag that can be read by all processors.
|
||||
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.
|
||||
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.
|
||||
|
||||
@@ -993,6 +993,8 @@ bullet.splashdamage = [stat]{0}[lightgray] dégâts de zone ~[stat] {1}[lightgra
|
||||
bullet.incendiary = [stat]incendiaire
|
||||
bullet.homing = [stat]autoguidé
|
||||
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.lightning = [stat]{0}[lightgray]x foudre ~ [stat]{1}[lightgray] dégâts
|
||||
bullet.buildingdamage = [stat]{0}%[lightgray] des dégâts aux bâtiments
|
||||
@@ -1106,8 +1108,8 @@ setting.bridgeopacity.name = Opacité des ponts
|
||||
setting.playerchat.name = Montrer les bulles de discussion des joueurs
|
||||
setting.showweather.name = Montrer les Effets météo
|
||||
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
|
||||
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 = Friends Only
|
||||
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.
|
||||
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
|
||||
@@ -1159,8 +1161,8 @@ keybind.select.name = Sélectionner/Tirer
|
||||
keybind.diagonal_placement.name = Placement en diagonale
|
||||
keybind.pick.name = Choisir un bloc
|
||||
keybind.break_block.name = Supprimer un bloc
|
||||
keybind.select_all_units = Sélectionner toutes les Unités
|
||||
keybind.select_all_unit_factories = Sélectionner toutes les Usines d'Unités
|
||||
keybind.select_all_units.name = Sélectionner toutes les Unités
|
||||
keybind.select_all_unit_factories.name = Sélectionner toutes les Usines d'Unités
|
||||
keybind.deselect.name = Désélectionner
|
||||
keybind.pickupCargo.name = Prendre un Chargement
|
||||
keybind.dropCargo.name = Lâcher un Chargement
|
||||
@@ -2233,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.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.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.
|
||||
|
||||
|
||||
@@ -978,6 +978,8 @@ bullet.splashdamage = [stat]{0}[lightgray] területi sebzés ~[stat] {1}[lightgr
|
||||
bullet.incendiary = [stat]gyújtó
|
||||
bullet.homing = [stat]nyomkövető
|
||||
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.lightning = [stat]{0}[lightgray]x lightning ~ [stat]{1}[lightgray] damage
|
||||
bullet.buildingdamage = [stat]{0}%[lightgray] épület sebzés
|
||||
@@ -1091,8 +1093,8 @@ setting.bridgeopacity.name = Híd átlátszatlansága
|
||||
setting.playerchat.name = Játékos szóbuborékok megjelenítése
|
||||
setting.showweather.name = Időjárás grafika megjelenítése
|
||||
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.
|
||||
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 = Friends Only
|
||||
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.
|
||||
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
|
||||
@@ -1144,8 +1146,8 @@ keybind.select.name = Kiválasztás/Lövés
|
||||
keybind.diagonal_placement.name = Átlós elhelyezés
|
||||
keybind.pick.name = Blokk másolása
|
||||
keybind.break_block.name = Blokk törlése
|
||||
keybind.select_all_units = Select All Units
|
||||
keybind.select_all_unit_factories = Select All Unit Factories
|
||||
keybind.select_all_units.name = Select All Units
|
||||
keybind.select_all_unit_factories.name = Select All Unit Factories
|
||||
keybind.deselect.name = Blokk választás törlése
|
||||
keybind.pickupCargo.name = Rakomány felvétele
|
||||
keybind.dropCargo.name = Rakomány lerakása
|
||||
@@ -2198,6 +2200,7 @@ lst.flushmessage = Display a message on the screen from the text buffer.\nWill w
|
||||
lst.cutscene = Manipulate the player camera.
|
||||
lst.setflag = Set a global flag that can be read by all processors.
|
||||
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.
|
||||
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.
|
||||
|
||||
@@ -989,6 +989,8 @@ bullet.splashdamage = [stat]{0}[lightgray] kekuatan percikan~[stat] {1}[lightgra
|
||||
bullet.incendiary = [stat]membakar
|
||||
bullet.homing = [stat]mengejar
|
||||
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.lightning = [stat]{0}[lightgray]x petir ~ [stat]{1}[lightgray] kerusakan
|
||||
bullet.buildingdamage = [stat]{0}%[lightgray] kerusakan bangunan
|
||||
@@ -1102,8 +1104,8 @@ setting.bridgeopacity.name = Jelas-Beningnya Jembatan
|
||||
setting.playerchat.name = Tunjukkan Pesan dalam Permainan
|
||||
setting.showweather.name = Perlihatkan Cuaca
|
||||
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.
|
||||
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 = Friends Only
|
||||
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.
|
||||
uiscale.reset = Skala UI telah diubah.\nTekan "OK" untuk mengonfirmasi.\n[scarlet]Kembali dan keluar di[accent] {0}[] pengaturan...
|
||||
uiscale.cancel = Batal & Keluar
|
||||
@@ -1155,8 +1157,8 @@ keybind.select.name = Pilih/Tembak
|
||||
keybind.diagonal_placement.name = Penaruhan Diagonal
|
||||
keybind.pick.name = Memilih Blok
|
||||
keybind.break_block.name = Menghancurkan Blok
|
||||
keybind.select_all_units = Select All Units
|
||||
keybind.select_all_unit_factories = Select All Unit Factories
|
||||
keybind.select_all_units.name = Select All Units
|
||||
keybind.select_all_unit_factories.name = Select All Unit Factories
|
||||
keybind.deselect.name = Batal Memilih
|
||||
keybind.pickupCargo.name = Angkat Muatan
|
||||
keybind.dropCargo.name = Turunkan Muatan
|
||||
@@ -2225,6 +2227,7 @@ lst.flushmessage = Tampilkan sebuah pesan di layar dari antrian teks.\nAkan menu
|
||||
lst.cutscene = Mengendalikan kamera pemain.
|
||||
lst.setflag = Menentukan global flag yang dapat dibaca oleh semua prosesor.
|
||||
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.
|
||||
|
||||
|
||||
@@ -149,7 +149,7 @@ mod.unmetdependencies = [red]Unmet Dependencies
|
||||
mod.erroredcontent = [scarlet]Errori di Contenuto
|
||||
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 = 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.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}
|
||||
@@ -328,7 +328,7 @@ open = Apri
|
||||
customize = Personalizza
|
||||
cancel = Annulla
|
||||
command = Comando
|
||||
command.mine = Mine
|
||||
command.mine = Mina
|
||||
command.repair = Ripara
|
||||
command.rebuild = Ricostruisci
|
||||
command.assist = Aiuta giocatore
|
||||
@@ -763,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.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.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.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.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 = 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.aegis.name = Aegis
|
||||
sector.lake.name = Nome
|
||||
@@ -975,6 +975,8 @@ bullet.splashdamage = [stat]{0}[lightgray] danno ad area ~[stat] {1}[lightgray]
|
||||
bullet.incendiary = [stat]incendiario
|
||||
bullet.homing = [stat]autoguidato
|
||||
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.lightning = [stat]{0}[lightgray]x fulmine ~ [stat]{1}[lightgray] danno
|
||||
bullet.buildingdamage = [stat]{0}%[lightgray] danno alle costruzioni
|
||||
@@ -1017,7 +1019,7 @@ category.items = Oggetti
|
||||
category.crafting = Produzione
|
||||
category.function = Funzione
|
||||
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.shadows.name = Ombre
|
||||
setting.blockreplace.name = Suggerimento Blocchi Automatico
|
||||
@@ -1088,8 +1090,8 @@ setting.bridgeopacity.name = Opacità Nastri e Condotti Sopraelevati
|
||||
setting.playerchat.name = Mostra Chat
|
||||
setting.showweather.name = Mostra grafica del meteo
|
||||
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.
|
||||
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 = Friends Only
|
||||
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.
|
||||
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
|
||||
@@ -1141,8 +1143,8 @@ keybind.select.name = Seleziona/Spara
|
||||
keybind.diagonal_placement.name = Posiziona Diagonalmente
|
||||
keybind.pick.name = Scegli Blocco
|
||||
keybind.break_block.name = Rompi Blocco
|
||||
keybind.select_all_units = Select All Units
|
||||
keybind.select_all_unit_factories = Select All Unit Factories
|
||||
keybind.select_all_units.name = Select All Units
|
||||
keybind.select_all_unit_factories.name = Select All Unit Factories
|
||||
keybind.deselect.name = Deseleziona
|
||||
keybind.pickupCargo.name = Raccogli Carico
|
||||
keybind.dropCargo.name = Rilascia Carico
|
||||
@@ -2142,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.beta.description = Difende il nucleo Fondamento 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.oxynoe.description = Fires structure-repairing streams of flame at nearby enemies. Targets nearby enemy projectiles with a point defense turret.
|
||||
unit.cyerce.description = Fires seeking cluster-missiles at enemies. Repairs allied units.
|
||||
unit.aegires.description = Shocks all enemy units and structures that enter its energy field. Repairs all allies.
|
||||
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.stell.description = Fires standard bullets at enemy targets.
|
||||
unit.locus.description = Fires alternating bullets at enemy targets.
|
||||
unit.precept.description = Fires piercing cluster bullets at enemy targets.
|
||||
unit.vanquish.description = Fires large piercing splitting bullets at enemy targets.
|
||||
unit.conquer.description = Fires large piercing cascades of bullets at enemy targets.
|
||||
unit.merui.description = Fires long-range artillery at enemy ground targets. Can step over most terrain.
|
||||
unit.cleroi.description = Fires dual shells at enemy targets. Targets enemy projectiles with point defense turrets. Can step over most terrain.
|
||||
unit.anthicus.description = Fires long-range homing missiles at enemy targets. Can step over most terrain.
|
||||
unit.tecta.description = Fires homing plasma missiles at enemy targets. Protects itself with a directional shield. Can step over most terrain.
|
||||
unit.collaris.description = Fires long-range fragmenting artillery at enemy targets. Can step over most terrain.
|
||||
unit.elude.description = Fires pairs of homing bullets at enemy targets. Can float over bodies of liquid.
|
||||
unit.avert.description = Fires twisting pairs of bullets at enemy targets.
|
||||
unit.obviate.description = Fires twisting pairs of lightning orbs at enemy targets.
|
||||
unit.quell.description = Fires long-range homing missiles at enemy targets. Suppresses enemy structure repair blocks.
|
||||
unit.disrupt.description = Fires long-range homing suppression missiles at enemy targets. Suppresses enemy structure repair blocks.
|
||||
unit.evoke.description = Builds structures to defend the Bastion core. Repairs structures with a beam.
|
||||
unit.incite.description = Builds structures to defend the Citadel core. Repairs structures with a beam.
|
||||
unit.emanate.description = Builds structures to defend the Acropolis core. Repairs structures with beams.
|
||||
lst.read = Read a number from a linked memory cell.
|
||||
lst.write = Write a number to a linked memory cell.
|
||||
unit.retusa.description = Lancia siluri di puntamento contro i nemici vicini. Ripara le unità alleate.
|
||||
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 = Spara missili a grappolo contro i nemici. Ripara le unità alleate.
|
||||
unit.aegires.description = Scuote tutte le unità e le strutture nemiche che entrano nel suo campo energetico. Ripara tutti gli alleati.
|
||||
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 = Spara proiettili standard contro i bersagli nemici.
|
||||
unit.locus.description = Spara proiettili alternati contro i bersagli nemici.
|
||||
unit.precept.description = Spara proiettili a grappolo perforanti contro i bersagli nemici.
|
||||
unit.vanquish.description = Spara grandi proiettili perforanti contro i bersagli nemici.
|
||||
unit.conquer.description = Spara grandi cascate di proiettili perforanti contro i bersagli nemici.
|
||||
unit.merui.description = Spara con l'artiglieria a lungo raggio contro bersagli terrestri nemici. Può superare la maggior parte dei terreni.
|
||||
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 = Spara missili a lunga gittata contro i bersagli nemici. Può superare la maggior parte dei terreni.
|
||||
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 = Spara con l'artiglieria a frammentazione a lungo raggio contro gli obiettivi nemici. Può superare la maggior parte dei terreni.
|
||||
unit.elude.description = Spara coppie di proiettili di puntamento contro i bersagli nemici. Può galleggiare su corpi liquidi.
|
||||
unit.avert.description = Spara coppie di proiettili a spirale contro i bersagli nemici.
|
||||
unit.obviate.description = Spara coppie di fulmini a spirale contro i bersagli nemici.
|
||||
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 = Spara missili di soppressione a lungo raggio contro gli obiettivi nemici. Sopprime i blocchi di riparazione delle strutture nemiche.
|
||||
unit.evoke.description = Costruisce strutture per difendere il nucleo del Bastione. Ripara le strutture con un raggio.
|
||||
unit.incite.description = Costruisce strutture per difendere il nucleo della Cittadella. Ripara le strutture con un raggio.
|
||||
unit.emanate.description = Costruisce strutture per difendere il nucleo dell'Acropoli. Ripara le strutture con le travi.
|
||||
lst.read = Leggi un numero da una cella di memoria collegata.
|
||||
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.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.
|
||||
@@ -2200,6 +2202,7 @@ lst.flushmessage = Display a message on the screen from the text buffer.\nWill w
|
||||
lst.cutscene = Manipulate the player camera.
|
||||
lst.setflag = Set a global flag that can be read by all processors.
|
||||
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.
|
||||
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.
|
||||
|
||||
@@ -981,6 +981,8 @@ bullet.splashdamage = [stat]{0}[lightgray] 範囲ダメージ 約[stat] {1}[ligh
|
||||
bullet.incendiary = [stat]焼夷弾
|
||||
bullet.homing = [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 frag bullets:
|
||||
bullet.lightning = [stat]{0}[lightgray]x ライトニング ~ [stat]{1}[lightgray] ダメージ
|
||||
bullet.buildingdamage = [stat]{0}%[lightgray] 対物ダメージ
|
||||
@@ -1094,8 +1096,8 @@ setting.bridgeopacity.name = ブリッジの透明度
|
||||
setting.playerchat.name = ゲーム内にチャットを表示
|
||||
setting.showweather.name = 天気のグラフィックを表示
|
||||
setting.hidedisplays.name = 描画されているロジックディスプレイを非表示
|
||||
public.confirm = ゲームを公開しますか?\n[accent]誰でもゲームに参加できるようになります。\n[lightgray]あとから設定で変更できます。
|
||||
public.confirm.really = フレンドと遊びたい場合は、[scarlet]公開サーバー[] ではなく [green]フレンド招待[] を使おう!\nゲームを [scarlet]公開[]してもよろしいですか?
|
||||
steam.friendsonly = Friends Only
|
||||
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 = ベータ版では使用できません。
|
||||
uiscale.reset = UIサイズが変更されました。\nこのままでよければ「OK」を押してください。\n[scarlet][accent]{0}[] 秒で元の設定に戻ります...
|
||||
uiscale.cancel = キャンセル & 終了
|
||||
@@ -1147,8 +1149,8 @@ keybind.select.name = 選択/ショット
|
||||
keybind.diagonal_placement.name = 斜め設置
|
||||
keybind.pick.name = ブロックの選択
|
||||
keybind.break_block.name = ブロックの破壊
|
||||
keybind.select_all_units = すべてのユニットを選択
|
||||
keybind.select_all_unit_factories = すべてのユニット工場を選択
|
||||
keybind.select_all_units.name = すべてのユニットを選択
|
||||
keybind.select_all_unit_factories.name = すべてのユニット工場を選択
|
||||
keybind.deselect.name = 選択解除
|
||||
keybind.pickupCargo.name = 貨物を拾う
|
||||
keybind.dropCargo.name = 貨物を降ろす
|
||||
@@ -2204,6 +2206,7 @@ lst.flushmessage = テキストバッファから画面にメッセージを表
|
||||
lst.cutscene = プレイヤーのカメラを操作します。
|
||||
lst.setflag = 全プロセッサーから読み取れるグローバルフラグを設定します。
|
||||
lst.getflag = グローバルフラグが設定されているかどうかを確認します。
|
||||
lst.setprop = Sets a property of a unit or building.
|
||||
logic.nounitbuild = [red]ここではユニット構築ロジックは使用できません。
|
||||
lenum.type = ユニットや建物の種類を取得します。\n例:任意のルーターに対して、 [accent]@router[] を返します。\n文字列ではありません。
|
||||
lenum.shoot = 指定した座標に向かって撃ちます。
|
||||
|
||||
@@ -981,6 +981,8 @@ bullet.splashdamage = [stat]{0}[lightgray] 범위 피해량 ~ [stat]{1}[lightgra
|
||||
bullet.incendiary = [stat]방화[]
|
||||
bullet.homing = [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.lightning = [stat]{0}[lightgray]x 전격 ~ [stat]{1}[lightgray] 피해량[][][][]
|
||||
bullet.buildingdamage = [stat]{0}%[lightgray] 건물 피해량[][]
|
||||
@@ -1094,8 +1096,8 @@ setting.bridgeopacity.name = 터널 투명도
|
||||
setting.playerchat.name = 채팅 말풍선 표시
|
||||
setting.showweather.name = 날씨 그래픽 표시
|
||||
setting.hidedisplays.name = 로직 디스플레이 숨김
|
||||
public.confirm = 게임을 모두에게 공개하시겠습니까?\n[accent]모든 플레이어가 게임에 참여할 수 있습니다.\n[lightgray]설정->게임->멀티플레이 공용 서버로 표시에서 나중에 변경할 수 있습니다.\n\n[sky]번역자 추가[]\n[accent]친구끼리 하려고 이 기능을 활성화 한 뒤에, 친구 외에 다른 플레이어가 들어왔을 때\n해당 플레이어를 차단하는 행위는 비매너를 넘어서는 얌체 행위 그 자체입니다.\n정말로 [scarlet]많은 다른 플레이어들이 오길 원한다[]면 확인하세요.
|
||||
public.confirm.really = [red]친구하고 플레이 하고 싶으면 [scarlet]공용 서버[] 대신에 [green]친구 초대[] 를 사용하세요. 정말로 [scarlet]공용 서버[] 를 열겠습니까?[]
|
||||
steam.friendsonly = Friends Only
|
||||
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 = 베타 버전의 게임은 공개 서버를 만들 수 없습니다.
|
||||
uiscale.reset = UI 스케일이 변경되었습니다.\n"확인"버튼을 눌러 저장하세요.\n[accent] {0}[][scarlet]초 후에 예전 설정으로 되돌리고 게임을 종료합니다...
|
||||
uiscale.cancel = 취소 후 나가기
|
||||
@@ -1147,8 +1149,8 @@ keybind.select.name = 선택/공격
|
||||
keybind.diagonal_placement.name = 대각선 설치
|
||||
keybind.pick.name = 블록 선택
|
||||
keybind.break_block.name = 블록 파괴
|
||||
keybind.select_all_units = 전체 기체 선택
|
||||
keybind.select_all_unit_factories = 전체 기체 공장 선택
|
||||
keybind.select_all_units.name = 전체 기체 선택
|
||||
keybind.select_all_unit_factories.name = 전체 기체 공장 선택
|
||||
keybind.deselect.name = 선택해제
|
||||
keybind.pickupCargo.name = 화물 집기
|
||||
keybind.dropCargo.name = 화물 내려놓기
|
||||
@@ -2204,6 +2206,7 @@ lst.flushmessage = 텍스트 버퍼로부터 화면에 메세지를 표시\n이
|
||||
lst.cutscene = 플레이어 카메라 조작
|
||||
lst.setflag = 모든 프로세서가 읽을 수 있는 전역 플래그 설정
|
||||
lst.getflag = 전역 플래그가 설정되어 있는지 확인
|
||||
lst.setprop = Sets a property of a unit or building.
|
||||
|
||||
logic.nounitbuild = [red]기체의 건설 로직은 여기서 허용되지 않습니다.
|
||||
|
||||
|
||||
@@ -969,6 +969,8 @@ bullet.splashdamage = [stat]{0}[lightgray] zonos žalos ~[stat] {1}[lightgray] b
|
||||
bullet.incendiary = [stat]uždegantis
|
||||
bullet.homing = [stat]sekimas
|
||||
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.lightning = [stat]{0}[lightgray]x lightning ~ [stat]{1}[lightgray] damage
|
||||
bullet.buildingdamage = [stat]{0}%[lightgray] building damage
|
||||
@@ -1082,8 +1084,8 @@ setting.bridgeopacity.name = Tilto Nepermatomumas
|
||||
setting.playerchat.name = Rodyti Pokalbių Teksto Burbulus Virš Žaidėjų
|
||||
setting.showweather.name = Show Weather Graphics
|
||||
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.
|
||||
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 = Friends Only
|
||||
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ų.
|
||||
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
|
||||
@@ -1135,8 +1137,8 @@ keybind.select.name = Pasirinkti/Šauti
|
||||
keybind.diagonal_placement.name = Įstrižas Padėjimas
|
||||
keybind.pick.name = Pasirinkti Bloką
|
||||
keybind.break_block.name = Išgriauti Bloką
|
||||
keybind.select_all_units = Select All Units
|
||||
keybind.select_all_unit_factories = Select All Unit Factories
|
||||
keybind.select_all_units.name = Select All Units
|
||||
keybind.select_all_unit_factories.name = Select All Unit Factories
|
||||
keybind.deselect.name = Panaikinti Pasirinkimą
|
||||
keybind.pickupCargo.name = Pickup Cargo
|
||||
keybind.dropCargo.name = Drop Cargo
|
||||
@@ -2187,6 +2189,7 @@ lst.flushmessage = Display a message on the screen from the text buffer.\nWill w
|
||||
lst.cutscene = Manipulate the player camera.
|
||||
lst.setflag = Set a global flag that can be read by all processors.
|
||||
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.
|
||||
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.
|
||||
|
||||
@@ -981,6 +981,8 @@ bullet.splashdamage = [stat]{0}[lightgray] gebied scade ~[stat] {1}[lightgray] t
|
||||
bullet.incendiary = [stat]brandstichtend
|
||||
bullet.homing = [stat]doelzoekend
|
||||
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.lightning = [stat]{0}[lightgray]x bliksem ~ [stat]{1}[lightgray] schade
|
||||
bullet.buildingdamage = [stat]{0}%[lightgray] gebouwschade
|
||||
@@ -1094,8 +1096,8 @@ setting.bridgeopacity.name = Brug Transparantie
|
||||
setting.playerchat.name = Toon Chat
|
||||
setting.showweather.name = Toon Weer Graphics
|
||||
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.
|
||||
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 = Friends Only
|
||||
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.
|
||||
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
|
||||
@@ -1147,8 +1149,8 @@ keybind.select.name = Selecteer/Schiet
|
||||
keybind.diagonal_placement.name = Plaats Diagonaal
|
||||
keybind.pick.name = Kies Blok
|
||||
keybind.break_block.name = Breek Blok
|
||||
keybind.select_all_units = Selecteer Alle Eenheden
|
||||
keybind.select_all_unit_factories = Selecteer Alle Eenheidsfabrieken
|
||||
keybind.select_all_units.name = Selecteer Alle Eenheden
|
||||
keybind.select_all_unit_factories.name = Selecteer Alle Eenheidsfabrieken
|
||||
keybind.deselect.name = Deselecteer
|
||||
keybind.pickupCargo.name = Pak Vracht Op
|
||||
keybind.dropCargo.name = Laat Vracht Vallen
|
||||
@@ -2200,6 +2202,7 @@ lst.flushmessage = Display a message on the screen from the text buffer.\nWill w
|
||||
lst.cutscene = Manipulate the player camera.
|
||||
lst.setflag = Set a global flag that can be read by all processors.
|
||||
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.
|
||||
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.
|
||||
|
||||
@@ -969,6 +969,8 @@ bullet.splashdamage = [stat]{0}[lightgray] area dmg ~[stat] {1}[lightgray] tiles
|
||||
bullet.incendiary = [stat]incendiary
|
||||
bullet.homing = [stat]homing
|
||||
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.lightning = [stat]{0}[lightgray]x lightning ~ [stat]{1}[lightgray] damage
|
||||
bullet.buildingdamage = [stat]{0}%[lightgray] building damage
|
||||
@@ -1082,8 +1084,8 @@ setting.bridgeopacity.name = Bridge Opacity
|
||||
setting.playerchat.name = Display In-Game Chat
|
||||
setting.showweather.name = Show Weather Graphics
|
||||
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.
|
||||
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 = Friends Only
|
||||
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.
|
||||
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
|
||||
@@ -1135,8 +1137,8 @@ keybind.select.name = Select/Shoot
|
||||
keybind.diagonal_placement.name = Diagonal Placement
|
||||
keybind.pick.name = Pick Block
|
||||
keybind.break_block.name = Break Block
|
||||
keybind.select_all_units = Select All Units
|
||||
keybind.select_all_unit_factories = Select All Unit Factories
|
||||
keybind.select_all_units.name = Select All Units
|
||||
keybind.select_all_unit_factories.name = Select All Unit Factories
|
||||
keybind.deselect.name = Deselect
|
||||
keybind.pickupCargo.name = Pickup Cargo
|
||||
keybind.dropCargo.name = Drop Cargo
|
||||
@@ -2187,6 +2189,7 @@ lst.flushmessage = Display a message on the screen from the text buffer.\nWill w
|
||||
lst.cutscene = Manipulate the player camera.
|
||||
lst.setflag = Set a global flag that can be read by all processors.
|
||||
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.
|
||||
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.
|
||||
|
||||
@@ -979,6 +979,8 @@ bullet.splashdamage = [stat]{0}[lightgray] Obrażenia obszarowe ~[stat] {1}[ligh
|
||||
bullet.incendiary = [stat]zapalający
|
||||
bullet.homing = [stat]naprowadzający
|
||||
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.lightning = [stat]{0}[lightgray]x błyskawice ~ [stat]{1}[lightgray] Obrażenia
|
||||
bullet.buildingdamage = [stat]{0}%[lightgray] obrażeń budynkom
|
||||
@@ -1092,8 +1094,8 @@ setting.bridgeopacity.name = Przezroczystość mostów
|
||||
setting.playerchat.name = Wyświetlaj dymek czatu w grze
|
||||
setting.showweather.name = Pokaż pogodę
|
||||
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.
|
||||
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 = Friends Only
|
||||
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.
|
||||
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ź
|
||||
@@ -1145,8 +1147,8 @@ keybind.select.name = Zaznacz
|
||||
keybind.diagonal_placement.name = Budowa po skosie
|
||||
keybind.pick.name = Wybierz Blok
|
||||
keybind.break_block.name = Zniszcz Blok
|
||||
keybind.select_all_units = Wybierz Wszystkie Jednostki
|
||||
keybind.select_all_unit_factories = Wybierz Wszystkie Fabryki Jednostek
|
||||
keybind.select_all_units.name = Wybierz Wszystkie Jednostki
|
||||
keybind.select_all_unit_factories.name = Wybierz Wszystkie Fabryki Jednostek
|
||||
keybind.deselect.name = Odznacz
|
||||
keybind.pickupCargo.name = Podnieś Ładunek
|
||||
keybind.dropCargo.name = Opuść Ładunek
|
||||
@@ -2222,6 +2224,7 @@ lst.flushmessage = Wyświetl wiadomość na ekranie z bufora tekstowego.\nPoczek
|
||||
lst.cutscene = Manipuluj kamerą gracza.
|
||||
lst.setflag = Ustaw globalną flagę, którą mogą odczytać wszystkie procesory.
|
||||
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.
|
||||
|
||||
|
||||
@@ -990,6 +990,8 @@ bullet.splashdamage = [stat]{0}[lightgray] de dano em área ~[stat] {1}[lightgra
|
||||
bullet.incendiary = [stat]Incendiário
|
||||
bullet.homing = [stat]Guiado
|
||||
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.lightning = [stat]{0}[lightgray]x raio ~ [stat]{1}[lightgray] dano
|
||||
bullet.buildingdamage = [stat]{0}%[lightgray] dano em construção
|
||||
@@ -1103,8 +1105,8 @@ setting.bridgeopacity.name = Opacidade da ponte
|
||||
setting.playerchat.name = Mostrar chat em jogo
|
||||
setting.showweather.name = Mostrar Gráficos do Clima
|
||||
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.
|
||||
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 = Friends Only
|
||||
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.
|
||||
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
|
||||
@@ -1156,8 +1158,8 @@ keybind.select.name = Selecionar
|
||||
keybind.diagonal_placement.name = Posicionamento Diagonal
|
||||
keybind.pick.name = Pegar bloco
|
||||
keybind.break_block.name = Quebrar bloco
|
||||
keybind.select_all_units = Select All Units
|
||||
keybind.select_all_unit_factories = Select All Unit Factories
|
||||
keybind.select_all_units.name = Select All Units
|
||||
keybind.select_all_unit_factories.name = Select All Unit Factories
|
||||
keybind.deselect.name = Desmarcar
|
||||
keybind.pickupCargo.name = Pegar Carga
|
||||
keybind.dropCargo.name = Soltar Carga
|
||||
@@ -2220,6 +2222,7 @@ lst.flushmessage = Display a message on the screen from the text buffer.\nWill w
|
||||
lst.cutscene = Manipulate the player camera.
|
||||
lst.setflag = Set a global flag that can be read by all processors.
|
||||
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.
|
||||
|
||||
|
||||
@@ -969,6 +969,8 @@ bullet.splashdamage = [stat]{0}[lightgray] Dano em área ~[stat] {1}[lightgray]
|
||||
bullet.incendiary = [stat]Incendiário
|
||||
bullet.homing = [stat]Guiado
|
||||
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.lightning = [stat]{0}[lightgray]x lightning ~ [stat]{1}[lightgray] damage
|
||||
bullet.buildingdamage = [stat]{0}%[lightgray] building damage
|
||||
@@ -1082,8 +1084,8 @@ setting.bridgeopacity.name = Opacidade da Ponte
|
||||
setting.playerchat.name = Mostrar chat em jogo
|
||||
setting.showweather.name = Show Weather Graphics
|
||||
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.
|
||||
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 = Friends Only
|
||||
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.
|
||||
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
|
||||
@@ -1135,8 +1137,8 @@ keybind.select.name = Selecionar
|
||||
keybind.diagonal_placement.name = Colocação diagonal
|
||||
keybind.pick.name = Pegar bloco
|
||||
keybind.break_block.name = Quebrar bloco
|
||||
keybind.select_all_units = Select All Units
|
||||
keybind.select_all_unit_factories = Select All Unit Factories
|
||||
keybind.select_all_units.name = Select All Units
|
||||
keybind.select_all_unit_factories.name = Select All Unit Factories
|
||||
keybind.deselect.name = Deselecionar
|
||||
keybind.pickupCargo.name = Pickup Cargo
|
||||
keybind.dropCargo.name = Drop Cargo
|
||||
@@ -2187,6 +2189,7 @@ lst.flushmessage = Display a message on the screen from the text buffer.\nWill w
|
||||
lst.cutscene = Manipulate the player camera.
|
||||
lst.setflag = Set a global flag that can be read by all processors.
|
||||
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.
|
||||
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.
|
||||
|
||||
@@ -981,6 +981,8 @@ bullet.splashdamage = [stat]{0}[lightgray] forță pe raza ~[stat] {1}[lightgray
|
||||
bullet.incendiary = [stat]incendiar
|
||||
bullet.homing = [stat]cu radar
|
||||
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.lightning = [stat]{0}[lightgray]x fulgere ~ [stat]{1}[lightgray] forță
|
||||
bullet.buildingdamage = [stat]{0}%[lightgray] forță/clădire
|
||||
@@ -1094,8 +1096,8 @@ setting.bridgeopacity.name = Opacitate Poduri
|
||||
setting.playerchat.name = Vezi Chat Temporar
|
||||
setting.showweather.name = Vezi Vremea
|
||||
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.
|
||||
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 = Friends Only
|
||||
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.
|
||||
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
|
||||
@@ -1147,8 +1149,8 @@ keybind.select.name = Selectează/Trage
|
||||
keybind.diagonal_placement.name = Plasare Diagonală
|
||||
keybind.pick.name = Ia Bloc
|
||||
keybind.break_block.name = Distruge Bloc
|
||||
keybind.select_all_units = Select All Units
|
||||
keybind.select_all_unit_factories = Select All Unit Factories
|
||||
keybind.select_all_units.name = Select All Units
|
||||
keybind.select_all_unit_factories.name = Select All Unit Factories
|
||||
keybind.deselect.name = Deselectează
|
||||
keybind.pickupCargo.name = Ridică Încărcătura
|
||||
keybind.dropCargo.name = Aruncă Încărcătura
|
||||
@@ -2205,6 +2207,7 @@ lst.flushmessage = Display a message on the screen from the text buffer.\nWill w
|
||||
lst.cutscene = Manipulate the player camera.
|
||||
lst.setflag = Set a global flag that can be read by all processors.
|
||||
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.
|
||||
|
||||
|
||||
@@ -149,15 +149,15 @@ mod.incompatiblemod = [red]Несовместимый
|
||||
mod.blacklisted = [red]Неподдерживаемый
|
||||
mod.unmetdependencies = [red]Не найдены зависимости
|
||||
mod.erroredcontent = [scarlet]Ошибки содержимого
|
||||
mod.circulardependencies = [red]Circular Dependencies
|
||||
mod.incompletedependencies = [red]Incomplete Dependencies
|
||||
mod.circulardependencies = [red]Цикличные зависимости
|
||||
mod.incompletedependencies = [red]Недопустимые или отсутствующие зависимости
|
||||
mod.requiresversion.details = Требуется версия игры: [accent]{0}[]\nВаша игра устарела. Для работы этого мода требуется более новая версия игры (возможно, альфа/бета-версия).
|
||||
mod.outdatedv7.details = Этот мод несовместим с последней версией игры. Автор должен обновить его и добавить [accent]minGameVersion: 136[] в файл [accent]mod.json[].
|
||||
mod.blacklisted.details = Этот мод был вручную занесен в черный список из-за того, что он вызывал сбои или другие проблемы с текущей версией игры. Не используйте его.
|
||||
mod.missingdependencies.details = Для этого мода отсутствуют зависимости: {0}
|
||||
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.circulardependencies.details = Этот мод имеет зависимости, которые зависят друг от друга.
|
||||
mod.incompletedependencies.details = Этот мод не может быть загружен из-за недопустимых или отсутствующих зависимостей: {0}.
|
||||
|
||||
mod.requiresversion = Требуется версия игры: [red]{0}
|
||||
mod.errors = Ошибки были вызваны загружаемым содержимым.
|
||||
@@ -335,7 +335,7 @@ command.repair = Ремонтировать
|
||||
command.rebuild = Восстанавливать
|
||||
command.assist = Помогать игроку
|
||||
command.move = Двигаться
|
||||
command.boost = Boost
|
||||
command.boost = Лететь
|
||||
openlink = Открыть ссылку
|
||||
copylink = Скопировать ссылку
|
||||
back = Назад
|
||||
@@ -982,6 +982,8 @@ bullet.splashdamage = [stat]{0}[lightgray] урона в радиусе ~[stat]
|
||||
bullet.incendiary = [stat]зажигательный
|
||||
bullet.homing = [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.lightning = [stat]{0}[lightgray]x молнии ~ [stat]{1}[lightgray] урона
|
||||
bullet.buildingdamage = [stat]{0}%[lightgray] урона по постройкам
|
||||
@@ -1095,8 +1097,8 @@ setting.bridgeopacity.name = Непрозрачность мостов
|
||||
setting.playerchat.name = Отображать облака чата над игроками
|
||||
setting.showweather.name = Отображать погоду
|
||||
setting.hidedisplays.name = Скрыть логические дисплеи
|
||||
public.confirm = Вы хотите, чтобы ваша игра стала публичной?\n[accent] Любой игрок сможет присоединиться к вашим играм.\n[lightgray]Позже, это можно будет изменить в Настройки->Игра->Общедоступность игры.
|
||||
public.confirm.really = Если вы хотите поиграть с друзьями, то используйте кнопку «[green]Пригласить друзей[]» вместо создания [scarlet]публичного сервера[]!\nВы уверены, что хотите сделать свою игру [scarlet]публичной[]?
|
||||
steam.friendsonly = Friends Only
|
||||
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 = Имейте в виду, что бета-версия игры не может делать игры публичными.
|
||||
uiscale.reset = Масштаб пользовательского интерфейса был изменён.\nНажмите «ОК» для подтверждения этого масштаба.\n[scarlet]Возврат настроек и выход через[accent] {0}[] секунд…
|
||||
uiscale.cancel = Отменить & Выйти
|
||||
@@ -1148,8 +1150,8 @@ keybind.select.name = Выбор/выстрел
|
||||
keybind.diagonal_placement.name = Диагональное размещение
|
||||
keybind.pick.name = Выбрать блок
|
||||
keybind.break_block.name = Разрушить блок
|
||||
keybind.select_all_units = Выбрать все единицы
|
||||
keybind.select_all_unit_factories = Выбрать все заводы единиц
|
||||
keybind.select_all_units.name = Выбрать все единицы
|
||||
keybind.select_all_unit_factories.name = Выбрать все заводы единиц
|
||||
keybind.deselect.name = Снять выделение
|
||||
keybind.pickupCargo.name = Взять груз
|
||||
keybind.dropCargo.name = Сбросить груз
|
||||
@@ -1183,14 +1185,14 @@ mode.editor.name = Редактор
|
||||
mode.pvp.name = PvP
|
||||
mode.pvp.description = Сражайтесь против других игроков.\n[gray]Для игры требуется как минимум 2 ядра разного цвета на карте.
|
||||
mode.attack.name = Атака
|
||||
mode.attack.description = Уничтожьте вражескую базу.\n[gray]Для игры требуется красное ядро на карте.
|
||||
mode.attack.description = Уничтожьте вражескую базу.\n[gray]Для игры требуется вражеское ядро на карте.
|
||||
mode.custom = Пользовательские правила
|
||||
rules.infiniteresources = Бесконечные ресурсы
|
||||
rules.onlydepositcore = Разрешен перенос только в ядро
|
||||
rules.reactorexplosions = Взрывы реакторов
|
||||
rules.coreincinerates = Ядро сжигает избыток ресурсов
|
||||
rules.disableworldprocessors = Отключить мировые процессоры
|
||||
rules.schematic = Схемы разрешены
|
||||
rules.schematic = Разрешить схемы
|
||||
rules.wavetimer = Интервал волн
|
||||
rules.wavesending = Отправка волн
|
||||
rules.waves = Волны
|
||||
@@ -1203,7 +1205,7 @@ rules.rtsminattackweight = Минимальный вес для атаки
|
||||
rules.cleanupdeadteams = Очистка строений побежденных команд (PvP)
|
||||
rules.corecapture = Захват ядра после уничтожения
|
||||
rules.polygoncoreprotection = Полигональная защита ядер
|
||||
rules.placerangecheck = Проверка диапазона размещения
|
||||
rules.placerangecheck = Запретить размещение турелей возле вражеских построек
|
||||
rules.enemyCheat = Бесконечные ресурсы ИИ
|
||||
rules.blockhealthmultiplier = Множитель прочности блоков
|
||||
rules.blockdamagemultiplier = Множитель урона блоков
|
||||
@@ -1218,7 +1220,7 @@ rules.unitcap = Начальный лимит единиц
|
||||
rules.limitarea = Ограничить область карты
|
||||
rules.enemycorebuildradius = Радиус защиты враж. ядер:[lightgray] (блок.)
|
||||
rules.wavespacing = Интервал волн:[lightgray] (сек)
|
||||
rules.initialwavespacing = Начальное расстояние между волнами:[lightgray] (сек)
|
||||
rules.initialwavespacing = Время до первой волны:[lightgray] (сек)
|
||||
rules.buildcostmultiplier = Множитель затрат на строительство
|
||||
rules.buildspeedmultiplier = Множитель скорости строительства
|
||||
rules.deconstructrefundmultiplier = Множитель возврата ресурсов при разборке
|
||||
@@ -2180,7 +2182,7 @@ lst.getlink = Получает соединение процессора по и
|
||||
lst.control = Контролирует блок.
|
||||
lst.radar = Обнаруживает единицы вокруг постройки с заданным радиусом.
|
||||
lst.sensor = Получает данные из постройки или единицы.
|
||||
lst.set = Устанавливает переменную.
|
||||
lst.set = Задаёт значение переменной.
|
||||
lst.operation = Совершает операцию над 1-2 переменными.
|
||||
lst.end = Переходит к началу стека операций.
|
||||
lst.wait = Ждёт определённое количество секунд.
|
||||
@@ -2201,10 +2203,11 @@ lst.setrate = Устанавливает скорость выполнения
|
||||
lst.fetch = Ищет единицы, ядра, игроков или зданий по индексу.\nИндексы начинаются с 0 и заканчиваются возвращаемым числом.
|
||||
lst.packcolor = Упаковывает компоненты RGBA [0, 1] в один номер для рисования или установки правил.
|
||||
lst.setrule = Устанавливает игровое правило.
|
||||
lst.flushmessage = Отображает сообщение на экране из текстового буфера.\nБудет ожидать окончание предыдущего сообщения.
|
||||
lst.flushmessage = Отображает сообщение из текстового буфера на экране игрока.\nБудет ожидать окончание предыдущего сообщения.
|
||||
lst.cutscene = Управляет камерой игрока.
|
||||
lst.setflag = Устанавливает глобальный флаг, который может быть прочитан всеми процессорами.
|
||||
lst.getflag = Проверяет, установлен ли глобальный флаг.
|
||||
lst.setprop = Sets a property of a unit or building.
|
||||
|
||||
logic.nounitbuild = [red]Строительство с помощью процессоров здесь запрещено.
|
||||
|
||||
|
||||
@@ -983,6 +983,8 @@ bullet.splashdamage = [stat]{0}[lightgray] oblasna šteta ~[stat] {1}[lightgray]
|
||||
bullet.incendiary = [stat]zapaljiv
|
||||
bullet.homing = [stat]samonavođenje
|
||||
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.lightning = [stat]{0}[lightgray]x munja ~ [stat]{1}[lightgray] štete
|
||||
bullet.buildingdamage = [stat]{0}%[lightgray] šteta za strukture
|
||||
@@ -1096,8 +1098,8 @@ setting.bridgeopacity.name = Prozirnost Mostova
|
||||
setting.playerchat.name = Prikazuj Čet Mehure Igrača
|
||||
setting.showweather.name = Prikazuj Grafiku Vremena
|
||||
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.
|
||||
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 = Friends Only
|
||||
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.
|
||||
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
|
||||
@@ -1149,8 +1151,8 @@ keybind.select.name = Izaberi/Pucaj
|
||||
keybind.diagonal_placement.name = Diagonalo Postavljanje
|
||||
keybind.pick.name = Izaberi Blok
|
||||
keybind.break_block.name = Razori Blok
|
||||
keybind.select_all_units = Izaberi Sve Jedinice
|
||||
keybind.select_all_unit_factories = Izaberi Sve Fabrike Jedinica
|
||||
keybind.select_all_units.name = Izaberi Sve Jedinice
|
||||
keybind.select_all_unit_factories.name = Izaberi Sve Fabrike Jedinica
|
||||
keybind.deselect.name = Deselect
|
||||
keybind.pickupCargo.name = Uzmi Tovar
|
||||
keybind.dropCargo.name = Spusti Tovar
|
||||
@@ -2208,6 +2210,7 @@ lst.flushmessage = Display a message on the screen from the text buffer.\nWill w
|
||||
lst.cutscene = Manipulate the player camera.
|
||||
lst.setflag = Set a global flag that can be read by all processors.
|
||||
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.
|
||||
|
||||
|
||||
@@ -969,6 +969,8 @@ bullet.splashdamage = [stat]{0}[lightgray] area dmg ~[stat] {1}[lightgray] tiles
|
||||
bullet.incendiary = [stat]incendiary
|
||||
bullet.homing = [stat]homing
|
||||
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.lightning = [stat]{0}[lightgray]x lightning ~ [stat]{1}[lightgray] damage
|
||||
bullet.buildingdamage = [stat]{0}%[lightgray] building damage
|
||||
@@ -1082,8 +1084,8 @@ setting.bridgeopacity.name = Bridge Opacity
|
||||
setting.playerchat.name = Visa
|
||||
setting.showweather.name = Show Weather Graphics
|
||||
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.
|
||||
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 = Friends Only
|
||||
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.
|
||||
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
|
||||
@@ -1135,8 +1137,8 @@ keybind.select.name = Select/Shoot
|
||||
keybind.diagonal_placement.name = Diagonal Placement
|
||||
keybind.pick.name = Pick Block
|
||||
keybind.break_block.name = Break Block
|
||||
keybind.select_all_units = Select All Units
|
||||
keybind.select_all_unit_factories = Select All Unit Factories
|
||||
keybind.select_all_units.name = Select All Units
|
||||
keybind.select_all_unit_factories.name = Select All Unit Factories
|
||||
keybind.deselect.name = Deselect
|
||||
keybind.pickupCargo.name = Pickup Cargo
|
||||
keybind.dropCargo.name = Drop Cargo
|
||||
@@ -2187,6 +2189,7 @@ lst.flushmessage = Display a message on the screen from the text buffer.\nWill w
|
||||
lst.cutscene = Manipulate the player camera.
|
||||
lst.setflag = Set a global flag that can be read by all processors.
|
||||
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.
|
||||
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.
|
||||
|
||||
@@ -982,6 +982,8 @@ bullet.splashdamage = [stat]{0}[lightgray] ดาเมจกระจาย ~[s
|
||||
bullet.incendiary = [stat]ติดไฟ
|
||||
bullet.homing = [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.lightning = [stat]{0}[lightgray]x สายฟ้า ~ [stat]{1}[lightgray] ดาเมจ
|
||||
bullet.buildingdamage = [lightgray]ดาเมจต่อสิ่งก่อสร้าง [stat]{0}%[lightgray]
|
||||
@@ -1095,8 +1097,8 @@ setting.bridgeopacity.name = ความโปร่งแสงของสะ
|
||||
setting.playerchat.name = แสดงบับเบิ้ลแชทของผู้เล่น
|
||||
setting.showweather.name = แสดงแกรฟฟิกสภาพอากาศ
|
||||
setting.hidedisplays.name = ซ่อนหน้าจอลอจิก
|
||||
public.confirm = คุณต้องการให้เกมของคุณเปิดเป็นสาธารณะหรือไม่?\n[accent]ทุกคนจะสามารถเข้าร่วมเกมของคุณได้\n[lightgray]คุณสามารถเปลี่ยนการตั้งค่านี้ได้ที่ ตั้งค่า->เกม->การมองเห็นเซิร์ฟเวอร์สาธารณะ
|
||||
public.confirm.really = หากคุณอยากเล่นกับเล่นกับเพื่อน ใช้[green]ชวนเพื่อน[]ดีกว่า แทนที่จะใช้[scarlet]เซิร์ฟเวอร์สาธารณะ[]!\nคุณแน่ใจนะว่าจะเปลี่ยนเกมคุณเป็น[scarlet]สาธารณะ[]?
|
||||
steam.friendsonly = Friends Only
|
||||
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 = เกมเวอร์ชั่นเบต้าไม่สามารถเปิดเซิร์ฟเวอร์สาธารณะได้
|
||||
uiscale.reset = อัตราขนาดของ UI ได้มีการเปลี่ยนแปลง\nกด "โอเค" เพื่อยืนยันขนาด UI นี้\n[scarlet]จะเปลี่ยนกลับไปเป็นขนาดเดิมและออกในอีก[accent] {0}[] วินาที...
|
||||
uiscale.cancel = ยกเลิกและออก
|
||||
@@ -1148,8 +1150,8 @@ keybind.select.name = เลือก/ยิง
|
||||
keybind.diagonal_placement.name = วางเป็นแนวทแยง
|
||||
keybind.pick.name = เลือกบล็อก
|
||||
keybind.break_block.name = ทุบบล็อก
|
||||
keybind.select_all_units = Select All Units
|
||||
keybind.select_all_unit_factories = Select All Unit Factories
|
||||
keybind.select_all_units.name = Select All Units
|
||||
keybind.select_all_unit_factories.name = Select All Unit Factories
|
||||
keybind.deselect.name = ยกเลิกการเลือก
|
||||
keybind.pickupCargo.name = ยกสิ่งบรรทุกขึ้น
|
||||
keybind.dropCargo.name = วางสิ่งบรรทุกลง
|
||||
@@ -2206,6 +2208,7 @@ lst.flushmessage = แสดงข้อความบนหน้าจอจ
|
||||
lst.cutscene = ควบคุมมุมกล้องของผู้เล่น
|
||||
lst.setflag = เซ็ตธงทั่วโลกที่ตัวประมวลผลทุกตัวสามารถอ่านค่าได้
|
||||
lst.getflag = เช็กว่าธงทั่วโลกนั้นเซ็ตอยู่รึเปล่า
|
||||
lst.setprop = Sets a property of a unit or building.
|
||||
|
||||
logic.nounitbuild = [red]ไม่อนุญาตให้ใช้ลอจิกควบคุมให้ยูนิตสร้างที่นี่
|
||||
|
||||
|
||||
@@ -969,6 +969,8 @@ bullet.splashdamage = [stat]{0}[lightgray] area dmg ~[stat] {1}[lightgray] tiles
|
||||
bullet.incendiary = [stat]incendiary
|
||||
bullet.homing = [stat]homing
|
||||
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.lightning = [stat]{0}[lightgray]x lightning ~ [stat]{1}[lightgray] damage
|
||||
bullet.buildingdamage = [stat]{0}%[lightgray] building damage
|
||||
@@ -1082,8 +1084,8 @@ setting.bridgeopacity.name = Bridge Opacity
|
||||
setting.playerchat.name = Display In-Game Chat
|
||||
setting.showweather.name = Show Weather Graphics
|
||||
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.
|
||||
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 = Friends Only
|
||||
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.
|
||||
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
|
||||
@@ -1135,8 +1137,8 @@ keybind.select.name = Sec/silahi sik
|
||||
keybind.diagonal_placement.name = Diagonal Placement
|
||||
keybind.pick.name = Pick Block
|
||||
keybind.break_block.name = Break Block
|
||||
keybind.select_all_units = Select All Units
|
||||
keybind.select_all_unit_factories = Select All Unit Factories
|
||||
keybind.select_all_units.name = Select All Units
|
||||
keybind.select_all_unit_factories.name = Select All Unit Factories
|
||||
keybind.deselect.name = Eldeki yapiyi birak
|
||||
keybind.pickupCargo.name = Pickup Cargo
|
||||
keybind.dropCargo.name = Drop Cargo
|
||||
@@ -2187,6 +2189,7 @@ lst.flushmessage = Display a message on the screen from the text buffer.\nWill w
|
||||
lst.cutscene = Manipulate the player camera.
|
||||
lst.setflag = Set a global flag that can be read by all processors.
|
||||
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.
|
||||
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.
|
||||
|
||||
@@ -980,6 +980,8 @@ bullet.splashdamage = [stat]{0} [lightgray]alan hasarı ~[stat] {1} [lightgray]k
|
||||
bullet.incendiary = [stat]yakıcı
|
||||
bullet.homing = [stat]güdümlü
|
||||
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.lightning = [stat]{0}[lightgray]x elektrik ~ [stat]{1}[lightgray] hasarı
|
||||
bullet.buildingdamage = [stat]{0}%[lightgray] inşaa hasarı
|
||||
@@ -1093,8 +1095,8 @@ setting.bridgeopacity.name = Köprü Opaklığı
|
||||
setting.playerchat.name = Oyun-içi Konuşmayı Göster
|
||||
setting.showweather.name = Hava Durmu Grafiklerini Göster
|
||||
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.
|
||||
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 = Friends Only
|
||||
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.
|
||||
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
|
||||
@@ -1146,8 +1148,8 @@ keybind.select.name = Seç/Ateş Et
|
||||
keybind.diagonal_placement.name = Çapraz Yerleştirme
|
||||
keybind.pick.name = Blok Seç
|
||||
keybind.break_block.name = Blok Kır
|
||||
keybind.select_all_units = Tüm Birimleri Seç
|
||||
keybind.select_all_unit_factories = Select All Unit Factories
|
||||
keybind.select_all_units.name = Tüm Birimleri Seç
|
||||
keybind.select_all_unit_factories.name = Select All Unit Factories
|
||||
keybind.deselect.name = Seçimleri Kaldır
|
||||
keybind.pickupCargo.name = Kargoyu Al
|
||||
keybind.dropCargo.name = Kargoyu Bırak
|
||||
@@ -2206,6 +2208,7 @@ lst.flushmessage = Ekranda bir yazı göster.\nBir önceki yazı kaybolana kadar
|
||||
lst.cutscene = Oyuncu Kamerasını hareket ettir.
|
||||
lst.setflag = Tüm İşlemciler tarafından okunabilen bir Numara İşaretle.
|
||||
lst.getflag = Evrensel İşaretli Numara Oku.
|
||||
lst.setprop = Sets a property of a unit or building.
|
||||
|
||||
logic.nounitbuild = [red]Birim İnşası Yasak!
|
||||
|
||||
|
||||
@@ -990,6 +990,8 @@ bullet.splashdamage = [stat]{0}[lightgray] шкода по ділянці ~[stat
|
||||
bullet.incendiary = [stat]запальний
|
||||
bullet.homing = [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.lightning = [stat]{0}[lightgray]x блискавки ~ [stat]{1}[lightgray] шкоди
|
||||
bullet.buildingdamage = [stat]{0}%[lightgray] шкода по будівлям
|
||||
@@ -1103,8 +1105,8 @@ setting.bridgeopacity.name = Непрозорість мостів
|
||||
setting.playerchat.name = Показувати хмару чата над гравцями
|
||||
setting.showweather.name = Показувати погоду
|
||||
setting.hidedisplays.name = Приховувати логічні дисплеї
|
||||
public.confirm = Ви хочете зробити цю гру загальнодоступною?\n[accent]Будь-хто може приєднатися до вашої гри.\n[lightgray]Це можна змінити в Налаштування->Гра->Загальнодоступність гри.
|
||||
public.confirm.really = Якщо ви хочете грати з друзями, використовуйте [green]Запросити друзів[] замість [scarlet]Публічного сервера[]!\nВи справді хочете зробити свою гру [scarlet]публічною[]?
|
||||
steam.friendsonly = Friends Only
|
||||
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 = Зауважте, що в бета-версії гри ви не можете робити публічні ігри.
|
||||
uiscale.reset = Масштаб користувацького інтерфейсу було змінено.\nНатисніть «Гаразд» для підтвердження цього масштабу.\n[scarlet]Повернення налаштувань і вихід через[accent] {0}[] секунд…
|
||||
uiscale.cancel = Скасувати й вийти
|
||||
@@ -1156,8 +1158,8 @@ keybind.select.name = Вибір/Постріл
|
||||
keybind.diagonal_placement.name = Діагональне розміщення
|
||||
keybind.pick.name = Вибрати блок
|
||||
keybind.break_block.name = Зламати блок
|
||||
keybind.select_all_units = Вибрати всі одиниці
|
||||
keybind.select_all_unit_factories = Вибрати всі заводи зі створення одиниць
|
||||
keybind.select_all_units.name = Вибрати всі одиниці
|
||||
keybind.select_all_unit_factories.name = Вибрати всі заводи зі створення одиниць
|
||||
keybind.deselect.name = Скасувати
|
||||
keybind.pickupCargo.name = Взяти вантаж
|
||||
keybind.dropCargo.name = Скинути вантаж
|
||||
@@ -2230,6 +2232,7 @@ lst.flushmessage = Показує повідомлення на екрані з
|
||||
lst.cutscene = Керує камерою гравця.
|
||||
lst.setflag = Установлює глобальний прапорець, який можуть прочитати усі процесори.
|
||||
lst.getflag = Перевіряє, чи встановлено глобальний прапорець.
|
||||
lst.setprop = Sets a property of a unit or building.
|
||||
|
||||
logic.nounitbuild = [red]Будування за допомогою процесорів заборено.
|
||||
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -992,6 +992,8 @@ bullet.splashdamage = [stat]{0}[lightgray]范围伤害~[stat] {1}[lightgray]格
|
||||
bullet.incendiary = [stat]燃烧
|
||||
bullet.homing = [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.lightning = [stat]{0}[lightgray]x闪电~[stat]{1}[lightgray]伤害
|
||||
bullet.buildingdamage = [stat]{0}%[lightgray]对建筑伤害
|
||||
@@ -1105,8 +1107,8 @@ setting.bridgeopacity.name = 桥梁不透明度
|
||||
setting.playerchat.name = 显示玩家聊天气泡
|
||||
setting.showweather.name = 显示天气效果
|
||||
setting.hidedisplays.name = 不显示逻辑绘图
|
||||
public.confirm = 确定使您的游戏公开可见?\n[accent]其他人将可以加入到您的游戏。 \n[lightgray]此后可以在 设置->游戏->游戏公开可见 里面更改。
|
||||
public.confirm.really = 如果您想与好友一起游戏,可以使用[green]邀请好友[]而不是[scarlet]公开游戏[]!\n您确定要使游戏[scarlet]公开可见[]吗?
|
||||
steam.friendsonly = Friends Only
|
||||
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 = 请注意,测试版的游戏不能公开可见。
|
||||
uiscale.reset = UI缩放比例已更改。\n点击“确定”接受更改。\n[accent]{0}[]秒后[scarlet]将自动退出并还原设置。
|
||||
uiscale.cancel = 取消并退出
|
||||
@@ -1158,8 +1160,8 @@ keybind.select.name = 选择/射击
|
||||
keybind.diagonal_placement.name = 斜线建造
|
||||
keybind.pick.name = 选择建筑
|
||||
keybind.break_block.name = 拆除建筑
|
||||
keybind.select_all_units = 选择所有单位
|
||||
keybind.select_all_unit_factories = 选择所有单位工厂
|
||||
keybind.select_all_units.name = 选择所有单位
|
||||
keybind.select_all_unit_factories.name = 选择所有单位工厂
|
||||
keybind.deselect.name = 取消选择
|
||||
keybind.pickupCargo.name = 拾取载荷
|
||||
keybind.dropCargo.name = 释放载荷
|
||||
@@ -2232,6 +2234,7 @@ lst.flushmessage = 在屏幕中央投影文字缓存区的内容\n会等待上
|
||||
lst.cutscene = 控制玩家游戏视角
|
||||
lst.setflag = 设置一个可以被所有处理器读取的全局flag
|
||||
lst.getflag = 检查是否设置了全局flag
|
||||
lst.setprop = Sets a property of a unit or building.
|
||||
|
||||
logic.nounitbuild = [red]此处不允许处理器操控单位去建设
|
||||
|
||||
|
||||
@@ -988,6 +988,8 @@ bullet.splashdamage = [stat]{0}[lightgray]範圍傷害 ~[stat] {1}[lightgray]格
|
||||
bullet.incendiary = [stat]燃燒
|
||||
bullet.homing = [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.lightning = [stat]{0}[lightgray]x 電弧 ~ [stat]{1}[lightgray] 傷害
|
||||
bullet.buildingdamage = [stat]{0}%[lightgray] 建築傷害
|
||||
@@ -1101,8 +1103,8 @@ setting.bridgeopacity.name = 橋透明度
|
||||
setting.playerchat.name = 在遊戲中顯示聊天視窗
|
||||
setting.showweather.name = 顯示天氣動畫
|
||||
setting.hidedisplays.name = 隱藏邏輯顯示
|
||||
public.confirm = 您想公開遊戲嗎?\n[accent]任何人都可以加入您的遊戲。\n[lightgray]之後可以在「設定」→「遊戲」→「公開遊戲可見度」中進行更改。
|
||||
public.confirm.really = 如果你想和朋友一起遊玩,可利用[green]邀請好友[]而不是[scarlet]公開伺服器[]!\n你確定要將伺服設為[scarlet]公開[]?
|
||||
steam.friendsonly = Friends Only
|
||||
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版本無法公開遊戲大廳。
|
||||
uiscale.reset = 使用者介面縮放已變更\n按下「確定」確認這個比例\n[scarlet][accent] {0}[] 秒後退出並還原設定
|
||||
uiscale.cancel = 取消並退出
|
||||
@@ -1154,8 +1156,8 @@ keybind.select.name = 選取
|
||||
keybind.diagonal_placement.name = 對角線放置
|
||||
keybind.pick.name = 選擇方塊
|
||||
keybind.break_block.name = 移除方塊
|
||||
keybind.select_all_units = Select All Units
|
||||
keybind.select_all_unit_factories = Select All Unit Factories
|
||||
keybind.select_all_units.name = Select All Units
|
||||
keybind.select_all_unit_factories.name = Select All Unit Factories
|
||||
keybind.deselect.name = 取消選取
|
||||
keybind.pickupCargo.name = 撿起貨物
|
||||
keybind.dropCargo.name = 丟棄貨物
|
||||
@@ -2216,6 +2218,7 @@ lst.flushmessage = 从文本緩存中讀取並於屏幕上顯示一條消息\n
|
||||
lst.cutscene = 控制玩家鏡頭
|
||||
lst.setflag = 設置一個全局flag,可被所有處理器讀取
|
||||
lst.getflag = 檢查某一全局flag是否存在
|
||||
lst.setprop = Sets a property of a unit or building.
|
||||
|
||||
logic.nounitbuild = [red]單位建造邏輯已被禁止。
|
||||
|
||||
|
||||
@@ -153,3 +153,4 @@ BlackDeluxeCat
|
||||
zenonet
|
||||
AyuKo-o
|
||||
JojoFR1
|
||||
Xasmedy
|
||||
|
||||
@@ -273,7 +273,7 @@ public class ControlPathfinder{
|
||||
req.raycastTimer = 0;
|
||||
}
|
||||
|
||||
if(req.rayPathIndex < len){
|
||||
if(req.rayPathIndex < len && req.rayPathIndex >= 0){
|
||||
Tile tile = tile(items[req.rayPathIndex]);
|
||||
out.set(tile);
|
||||
|
||||
|
||||
@@ -19,7 +19,7 @@ import mindustry.world.meta.*;
|
||||
import static mindustry.Vars.*;
|
||||
|
||||
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 updateInterval = 1000 / updateFPS;
|
||||
|
||||
@@ -219,8 +219,6 @@ public class Pathfinder implements Runnable{
|
||||
public void updateTile(Tile tile){
|
||||
if(net.client()) return;
|
||||
|
||||
int x = tile.x, y = tile.y;
|
||||
|
||||
tile.getLinkedTiles(t -> {
|
||||
int pos = t.array();
|
||||
if(pos < tiles.length){
|
||||
@@ -232,15 +230,15 @@ public class Pathfinder implements Runnable{
|
||||
for(Flowfield path : mainList){
|
||||
if(path != null){
|
||||
synchronized(path.targets){
|
||||
path.targets.clear();
|
||||
path.getPositions(path.targets);
|
||||
path.updateTargetPositions();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//mark every flow field as dirty, so it updates when it's done
|
||||
queue.post(() -> {
|
||||
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
|
||||
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);
|
||||
}
|
||||
}
|
||||
@@ -306,8 +311,7 @@ public class Pathfinder implements Runnable{
|
||||
synchronized(path.targets){
|
||||
//make sure the position actually changed
|
||||
if(!(path.targets.size == 1 && tmpArray.size == 1 && path.targets.first() == tmpArray.first())){
|
||||
path.targets.clear();
|
||||
path.getPositions(path.targets);
|
||||
path.updateTargetPositions();
|
||||
|
||||
//queue an update
|
||||
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 value = values[apos];
|
||||
|
||||
@@ -341,32 +346,6 @@ public class Pathfinder implements Runnable{
|
||||
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. */
|
||||
private void updateTargets(Flowfield path){
|
||||
|
||||
@@ -386,8 +365,7 @@ public class Pathfinder implements Runnable{
|
||||
}
|
||||
|
||||
private void preloadPath(Flowfield path){
|
||||
path.targets.clear();
|
||||
path.getPositions(path.targets);
|
||||
path.updateTargetPositions();
|
||||
registerPath(path);
|
||||
updateFrontier(path, -1);
|
||||
}
|
||||
@@ -421,6 +399,7 @@ public class Pathfinder implements Runnable{
|
||||
|
||||
/** Update the frontier for a path. Pathfinding thread only. */
|
||||
private void updateFrontier(Flowfield path, long nsToRun){
|
||||
boolean hadAny = path.frontier.size > 0;
|
||||
long start = Time.nanos();
|
||||
|
||||
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{
|
||||
@@ -505,11 +490,18 @@ public class Pathfinder implements Runnable{
|
||||
protected Team team = Team.derelict;
|
||||
/** Function for calculating path cost. Set before using. */
|
||||
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 */
|
||||
public int[] weights;
|
||||
/** search IDs of each position - the highest, most recent search is prioritized and overwritten */
|
||||
public int[] searches;
|
||||
/** the last "complete" weights of this tilemap. */
|
||||
public int[] completeWeights;
|
||||
|
||||
/** search frontier, these are Pos objects */
|
||||
IntQueue frontier = new IntQueue();
|
||||
/** 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){
|
||||
this.weights = new int[length];
|
||||
this.searches = new int[length];
|
||||
this.completeWeights = new int[length];
|
||||
this.frontier.ensureCapacity((length) / 4);
|
||||
this.initialized = true;
|
||||
}
|
||||
|
||||
public void updateTargetPositions(){
|
||||
targets.clear();
|
||||
getPositions(targets);
|
||||
}
|
||||
|
||||
protected boolean passable(int pos){
|
||||
return cost.getCost(team.id, pathfinder.tiles[pos]) != impassable;
|
||||
}
|
||||
|
||||
@@ -119,7 +119,7 @@ public class BuilderAI extends AIController{
|
||||
}
|
||||
|
||||
//follow someone and help them build
|
||||
if(timer.get(timerTarget2, 60f)){
|
||||
if(timer.get(timerTarget2, 20f)){
|
||||
found = false;
|
||||
|
||||
Units.nearby(unit.team, unit.x, unit.y, buildRadius, u -> {
|
||||
|
||||
@@ -49,6 +49,11 @@ public class CommandAI extends AIController{
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isLogicControllable(){
|
||||
return !hasCommand();
|
||||
}
|
||||
|
||||
public boolean isAttacking(){
|
||||
return target != null && unit.within(target, unit.range() + 10f);
|
||||
}
|
||||
|
||||
@@ -193,7 +193,7 @@ public class Control implements ApplicationListener, Loadable{
|
||||
if(!settings.getBool("skipcoreanimation") && !state.rules.pvp){
|
||||
coreDelay = coreLandDuration;
|
||||
//delay player respawn so animation can play.
|
||||
player.deathTimer = -80f;
|
||||
player.deathTimer = Player.deathDelay - coreLandDuration;
|
||||
//TODO this sounds pretty bad due to conflict
|
||||
if(settings.getInt("musicvol") > 0){
|
||||
Musics.land.stop();
|
||||
|
||||
@@ -435,8 +435,9 @@ public class NetClient implements ApplicationListener{
|
||||
for(int j = 0; j < amount; j++){
|
||||
readSyncEntity(input, Reads.get(input));
|
||||
}
|
||||
}catch(IOException e){
|
||||
throw new RuntimeException(e);
|
||||
}catch(Exception e){
|
||||
//don't disconnect, just log it
|
||||
Log.err("Error reading entity snapshot", e);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -9,7 +9,6 @@ import arc.struct.*;
|
||||
import arc.util.*;
|
||||
import arc.util.CommandHandler.*;
|
||||
import arc.util.io.*;
|
||||
import arc.util.serialization.*;
|
||||
import mindustry.annotations.Annotations.*;
|
||||
import mindustry.content.*;
|
||||
import mindustry.core.GameState.*;
|
||||
@@ -138,15 +137,6 @@ public class NetServer implements ApplicationListener{
|
||||
con.connectTime = Time.millis();
|
||||
|
||||
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;
|
||||
|
||||
@@ -195,6 +185,7 @@ public class NetServer implements ApplicationListener{
|
||||
result.append("Unnecessary mods:[lightgray]\n").append("> ").append(extraMods.toString("\n> "));
|
||||
}
|
||||
con.kick(result.toString(), 0);
|
||||
return;
|
||||
}
|
||||
|
||||
if(!admins.isWhitelisted(packet.uuid, packet.usid)){
|
||||
|
||||
@@ -75,6 +75,8 @@ public class UI implements ApplicationListener, Loadable{
|
||||
public FullTextDialog fullText;
|
||||
public CampaignCompleteDialog campaignComplete;
|
||||
|
||||
public IntMap<Dialog> followUpMenus;
|
||||
|
||||
public Cursor drillCursor, unloadCursor, targetCursor;
|
||||
|
||||
private @Nullable Element lastAnnouncement;
|
||||
@@ -202,6 +204,7 @@ public class UI implements ApplicationListener, Loadable{
|
||||
logic = new LogicDialog();
|
||||
fullText = new FullTextDialog();
|
||||
campaignComplete = new CampaignCompleteDialog();
|
||||
followUpMenus = new IntMap<>();
|
||||
|
||||
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){
|
||||
Core.input.getTextInput(new TextInput(){{
|
||||
this.title = (titleText.startsWith("@") ? Core.bundle.get(titleText.substring(1)) : titleText);
|
||||
this.text = def;
|
||||
this.numeric = inumeric;
|
||||
this.numeric = numbers;
|
||||
this.maxLength = textLength;
|
||||
this.accepted = confirmed;
|
||||
this.allowEmpty = false;
|
||||
}});
|
||||
}else{
|
||||
new Dialog(titleText){{
|
||||
cont.margin(30).add(dtext).padRight(6f);
|
||||
TextFieldFilter filter = inumeric ? TextFieldFilter.digitsOnly : (f, c) -> true;
|
||||
cont.margin(30).add(text).padRight(6f);
|
||||
TextFieldFilter filter = numbers ? TextFieldFilter.digitsOnly : (f, c) -> true;
|
||||
TextField field = cont.field(def, t -> {}).size(330f, 50f).get();
|
||||
field.setFilter((f, c) -> field.getText().length() < textLength && filter.acceptChar(f, c));
|
||||
buttons.defaults().size(120, 54).pad(4);
|
||||
buttons.button("@cancel", this::hide);
|
||||
buttons.button("@cancel", () -> {
|
||||
closed.run();
|
||||
hide();
|
||||
});
|
||||
buttons.button("@ok", () -> {
|
||||
confirmed.get(field.getText());
|
||||
hide();
|
||||
}).disabled(b -> field.getText().isEmpty());
|
||||
|
||||
keyDown(KeyCode.enter, () -> {
|
||||
String text = field.getText();
|
||||
if(!text.isEmpty()){
|
||||
@@ -290,9 +297,10 @@ public class UI implements ApplicationListener, Loadable{
|
||||
hide();
|
||||
}
|
||||
});
|
||||
keyDown(KeyCode.escape, this::hide);
|
||||
keyDown(KeyCode.back, this::hide);
|
||||
|
||||
closeOnBack(closed);
|
||||
show();
|
||||
|
||||
Core.scene.setKeyboardFocus(field);
|
||||
field.setCursorPosition(def.length());
|
||||
}};
|
||||
@@ -303,8 +311,12 @@ public class UI implements ApplicationListener, Loadable{
|
||||
showTextInput(title, text, 32, def, confirmed);
|
||||
}
|
||||
|
||||
public void showTextInput(String titleText, String text, int textLength, String def, Cons<String> confirmed){
|
||||
showTextInput(titleText, text, textLength, def, false, confirmed);
|
||||
public void showTextInput(String title, String text, int textLength, String def, Cons<String> 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){
|
||||
@@ -322,6 +334,24 @@ public class UI implements ApplicationListener, Loadable{
|
||||
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. */
|
||||
public void showInfoToast(String info, float duration){
|
||||
var cinfo = Core.scene.find("coreinfo");
|
||||
@@ -419,6 +449,8 @@ public class UI implements ApplicationListener, Loadable{
|
||||
}
|
||||
|
||||
public void showException(String text, Throwable exc){
|
||||
if(loadfrag == null) return;
|
||||
|
||||
loadfrag.hide();
|
||||
new Dialog(""){{
|
||||
String message = Strings.getFinalMessage(exc);
|
||||
@@ -562,17 +594,12 @@ public class UI implements ApplicationListener, Loadable{
|
||||
dialog.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){
|
||||
new Dialog("[accent]" + title){{
|
||||
public Dialog newMenuDialog(String title, String message, String[][] options, Intc buttonListener, Runnable closeOnBack){
|
||||
return new Dialog(title){{
|
||||
setFillParent(true);
|
||||
removeChild(titleTable);
|
||||
cont.add(titleTable).width(400f);
|
||||
|
||||
getStyle().titleFontColor = Color.white;
|
||||
title.getStyle().fontColor = Color.white;
|
||||
title.setStyle(title.getStyle());
|
||||
|
||||
cont.row();
|
||||
cont.image().width(400f).pad(2).colspan(2).height(4f).color(Pal.accent).bottom();
|
||||
cont.row();
|
||||
@@ -592,16 +619,46 @@ public class UI implements ApplicationListener, Loadable{
|
||||
|
||||
String optionName = optionsRow[i];
|
||||
int finalOption = option;
|
||||
buttonRow.button(optionName, () -> {
|
||||
callback.get(finalOption);
|
||||
hide();
|
||||
}).size(i == optionsRow.length - 1 ? lastWidth : width, 50).pad(4);
|
||||
buttonRow.button(optionName, () -> buttonListener.get(finalOption))
|
||||
.size(i == optionsRow.length - 1 ? lastWidth : width, 50).pad(4);
|
||||
option++;
|
||||
}
|
||||
}
|
||||
}).growX();
|
||||
closeOnBack(() -> callback.get(-1));
|
||||
}}.show();
|
||||
closeOnBack(closeOnBack);
|
||||
}};
|
||||
}
|
||||
|
||||
/** 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. */
|
||||
|
||||
@@ -160,7 +160,7 @@ public class Damage{
|
||||
//add distance to list so it can be processed
|
||||
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));
|
||||
|
||||
if(b.type.laserAbsorb && build.absorbLasers()){
|
||||
@@ -237,7 +237,7 @@ public class Damage{
|
||||
seg2.set(seg1).add(vec);
|
||||
World.raycastEachWorld(x, y, seg2.x, seg2.y, (cx, cy) -> {
|
||||
Building tile = world.build(cx, cy);
|
||||
boolean collide = tile != null && hitter.checkUnderBuild(tile, cx * tilesize, cy * tilesize)
|
||||
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){
|
||||
collided.add(collidePool.obtain().set(cx * tilesize, cy * tilesize, tile));
|
||||
@@ -618,7 +618,7 @@ public class Damage{
|
||||
return Math.max(damage - armor, minArmorDamage * damage);
|
||||
}
|
||||
|
||||
public static class Collided{
|
||||
public static class Collided implements Pool.Poolable{
|
||||
public float x, y;
|
||||
public Teamc target;
|
||||
|
||||
@@ -628,5 +628,10 @@ public class Damage{
|
||||
this.target = target;
|
||||
return this;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void reset(){
|
||||
target = null;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -93,13 +93,13 @@ public class ForceFieldAbility extends Ability{
|
||||
checkRadius(unit);
|
||||
|
||||
if(unit.shield > 0){
|
||||
Draw.z(Layer.shields);
|
||||
|
||||
Draw.color(unit.team.color, Color.white, Mathf.clamp(alpha));
|
||||
|
||||
if(Vars.renderer.animateShields){
|
||||
Draw.z(Layer.shields + 0.001f * alpha);
|
||||
Fill.poly(unit.x, unit.y, sides, realRad, rotation);
|
||||
}else{
|
||||
Draw.z(Layer.shields);
|
||||
Lines.stroke(1.5f);
|
||||
Draw.alpha(0.09f);
|
||||
Fill.poly(unit.x, unit.y, sides, radius, rotation);
|
||||
|
||||
@@ -46,6 +46,8 @@ public class BulletType extends Content implements Cloneable{
|
||||
public boolean pierceBuilding;
|
||||
/** Maximum # of pierced objects. */
|
||||
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. */
|
||||
public boolean removeAfterPierce = true;
|
||||
/** 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;
|
||||
/** If false, this bullet will not create fraags when absorbed by a shield. */
|
||||
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;
|
||||
/** Whether status and despawnHit should automatically be set. */
|
||||
public boolean setDefaults = true;
|
||||
@@ -177,6 +179,8 @@ public class BulletType extends Content implements Cloneable{
|
||||
public float intervalSpread = 0f;
|
||||
/** Angle offset for interval bullets. */
|
||||
public float intervalAngle = 0f;
|
||||
/** Use a negative value to disable interval bullet delay. */
|
||||
public float intervalDelay = -1f;
|
||||
|
||||
/** Color used for hit/despawn effects. */
|
||||
public Color hitColor = Color.white;
|
||||
@@ -358,6 +362,8 @@ public class BulletType extends Content implements Cloneable{
|
||||
}else if(build.team != b.team && direct){
|
||||
hit(b);
|
||||
}
|
||||
|
||||
handlePierce(b, initialHealth, x, y);
|
||||
}
|
||||
|
||||
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){
|
||||
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){
|
||||
@@ -557,7 +576,7 @@ public class BulletType extends Content implements Cloneable{
|
||||
}
|
||||
|
||||
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();
|
||||
for(int i = 0; i < intervalBullets; i++){
|
||||
intervalBullet.create(b, b.x, b.y, ang + Mathf.range(intervalRandomSpread) + intervalAngle + ((i - (intervalBullets - 1f)/2f) * intervalSpread));
|
||||
|
||||
@@ -45,6 +45,11 @@ public class PointLaserBulletType extends BulletType{
|
||||
drawSize = 1000f;
|
||||
}
|
||||
|
||||
@Override
|
||||
public float continuousDamage(){
|
||||
return damage / damageInterval * 60f;
|
||||
}
|
||||
|
||||
@Override
|
||||
public float estimateDPS(){
|
||||
return damage * 100f / damageInterval * 3f;
|
||||
|
||||
@@ -13,8 +13,6 @@ public class RailBulletType extends BulletType{
|
||||
|
||||
public Effect pierceEffect = Fx.hitBulletSmall, pointEffect = Fx.none, lineEffect = Fx.none;
|
||||
public Effect endEffect = Fx.none;
|
||||
/** Multiplier of damage decreased per health pierced. */
|
||||
public float pierceDamageFactor = 1f;
|
||||
|
||||
public float length = 100f;
|
||||
|
||||
@@ -37,8 +35,9 @@ public class RailBulletType extends BulletType{
|
||||
return length;
|
||||
}
|
||||
|
||||
void handle(Bullet b, float initialHealth, float x, float y){
|
||||
float sub = Math.max(initialHealth*pierceDamageFactor, 0);
|
||||
@Override
|
||||
public void handlePierce(Bullet b, float initialHealth, float x, float y){
|
||||
float sub = Math.max(initialHealth * pierceDamageFactor, 0);
|
||||
|
||||
if(b.damage <= 0){
|
||||
b.fdata = Math.min(b.fdata, b.dst(x, y));
|
||||
@@ -93,14 +92,8 @@ public class RailBulletType extends BulletType{
|
||||
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
|
||||
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);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -48,7 +48,7 @@ import static mindustry.Vars.*;
|
||||
|
||||
@EntityDef(value = {Buildingc.class}, isFinal = false, genio = false, serialize = false)
|
||||
@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
|
||||
static final float timeToSleep = 60f * 1, recentDamageTime = 60f * 5f;
|
||||
static final ObjectSet<Building> tmpTiles = new ObjectSet<>();
|
||||
@@ -1951,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
|
||||
@Override
|
||||
public boolean inFogTo(Team viewer){
|
||||
|
||||
@@ -93,6 +93,11 @@ abstract class PlayerComp implements UnitController, Entityc, Syncc, Timerc, Dra
|
||||
return isAdded();
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isLogicControllable(){
|
||||
return false;
|
||||
}
|
||||
|
||||
@Replace
|
||||
public float clipSize(){
|
||||
return unit.isNull() ? 20 : unit.type.hitSize * 2f;
|
||||
|
||||
@@ -34,14 +34,14 @@ abstract class ShieldComp implements Healthc, Posc{
|
||||
public void damagePierce(float amount, boolean withEffect){
|
||||
float pre = hitTime;
|
||||
|
||||
rawDamage(amount);
|
||||
rawDamage(amount / healthMultiplier);
|
||||
|
||||
if(!withEffect){
|
||||
hitTime = pre;
|
||||
}
|
||||
}
|
||||
|
||||
private void rawDamage(float amount){
|
||||
protected void rawDamage(float amount){
|
||||
boolean hadShields = shield > 0.0001f;
|
||||
|
||||
if(hadShields){
|
||||
|
||||
@@ -31,7 +31,7 @@ import static mindustry.Vars.*;
|
||||
import static mindustry.logic.GlobalVars.*;
|
||||
|
||||
@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 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 Vec2 vel;
|
||||
@Import WeaponMount[] mounts;
|
||||
@Import ItemStack stack;
|
||||
|
||||
private UnitController controller;
|
||||
Ability[] abilities = {};
|
||||
@@ -257,6 +258,60 @@ abstract class UnitComp implements Healthc, Physicsc, Hitboxc, Statusc, Teamc, I
|
||||
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
|
||||
@Replace
|
||||
public boolean canDrown(){
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
package mindustry.entities.effect;
|
||||
|
||||
import arc.graphics.*;
|
||||
import arc.math.*;
|
||||
import mindustry.content.*;
|
||||
import mindustry.entities.*;
|
||||
@@ -24,26 +25,14 @@ public class RadialEffect extends Effect{
|
||||
}
|
||||
|
||||
@Override
|
||||
public void init(){
|
||||
effect.init();
|
||||
clip = Math.max(clip, effect.clip);
|
||||
lifetime = effect.lifetime;
|
||||
}
|
||||
public void create(float x, float y, float rotation, Color color, Object data){
|
||||
if(!shouldCreate()) return;
|
||||
|
||||
@Override
|
||||
public void render(EffectContainer e){
|
||||
float x = e.x, y = e.y;
|
||||
|
||||
e.rotation += rotationOffset;
|
||||
rotation += rotationOffset;
|
||||
|
||||
for(int i = 0; i < amount; i++){
|
||||
e.x = x + Angles.trnsx(e.rotation, lengthOffset);
|
||||
e.y = y + Angles.trnsy(e.rotation, lengthOffset);
|
||||
effect.render(e);
|
||||
e.rotation += rotationSpacing;
|
||||
e.id ++;
|
||||
effect.create(x + Angles.trnsx(rotation, lengthOffset), y + Angles.trnsy(rotation, lengthOffset), rotation, color, data);
|
||||
rotation += rotationSpacing;
|
||||
}
|
||||
|
||||
clip = Math.max(clip, effect.clip);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -55,6 +55,11 @@ public class AIController implements UnitController{
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isLogicControllable(){
|
||||
return true;
|
||||
}
|
||||
|
||||
public void stopShooting(){
|
||||
for(var mount : unit.mounts){
|
||||
//ignore mount controllable stats too, they should not shoot either
|
||||
|
||||
@@ -14,6 +14,11 @@ public interface UnitController{
|
||||
return true;
|
||||
}
|
||||
|
||||
/** @return whether logic AI can take over */
|
||||
default boolean isLogicControllable(){
|
||||
return false;
|
||||
}
|
||||
|
||||
default void updateUnit(){
|
||||
|
||||
}
|
||||
|
||||
@@ -161,7 +161,7 @@ public class EventType{
|
||||
this.host = host;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
public static class ClientServerConnectEvent{
|
||||
public final String ip;
|
||||
public final int port;
|
||||
@@ -179,8 +179,21 @@ public class EventType{
|
||||
|
||||
public MenuOptionChooseEvent(Player player, int menuId, int option){
|
||||
this.player = player;
|
||||
this.option = option;
|
||||
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;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -10,7 +10,7 @@ import mindustry.type.*;
|
||||
import static mindustry.content.UnitTypes.*;
|
||||
|
||||
public class Waves{
|
||||
public static final int waveVersion = 5;
|
||||
public static final int waveVersion = 6;
|
||||
|
||||
private Seq<SpawnGroup> spawns;
|
||||
|
||||
|
||||
@@ -12,6 +12,19 @@ public class InverseKinematics{
|
||||
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){
|
||||
Vec2 axis = mat2[0].set(end).nor();
|
||||
mat2[1].set(attractor).sub(temp2.set(axis).scl(attractor.dot(axis))).nor();
|
||||
|
||||
@@ -188,9 +188,10 @@ public class PlanetRenderer implements Disposable{
|
||||
}
|
||||
|
||||
//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;
|
||||
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);
|
||||
|
||||
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){
|
||||
//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;
|
||||
|
||||
Vec3 avg = Tmp.v31.set(b).add(a).scl(0.5f);
|
||||
avg.setLength(planet.radius*(1f+length) + dot * 1.35f);
|
||||
|
||||
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);
|
||||
|
||||
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){
|
||||
Color color = Tmp.c1.set(base).a((base.a + 0.3f + Mathf.absin(Time.globalTime, 5f, 0.3f)) * alpha);
|
||||
|
||||
float r1 = 1f;
|
||||
float r2 = outlineRad + 0.001f;
|
||||
float r1 = 1f * sector.planet.radius;
|
||||
float r2 = outlineRad * sector.planet.radius + 0.001f;
|
||||
|
||||
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];
|
||||
@@ -268,16 +270,16 @@ public class PlanetRenderer implements Disposable{
|
||||
|
||||
projector.setPlane(
|
||||
//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
|
||||
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
|
||||
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){
|
||||
float rr = outlineRad + offset;
|
||||
float rr = outlineRad * sector.planet.radius + offset;
|
||||
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];
|
||||
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){
|
||||
float arad = outlineRad + length;
|
||||
float arad = (outlineRad + length) * sector.planet.radius;
|
||||
|
||||
for(int i = 0; i < sector.tile.corners.length; i++){
|
||||
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){
|
||||
outlines[size] = MeshBuilder.buildHex(new HexMesher(){
|
||||
@Override
|
||||
@@ -323,7 +325,7 @@ public class PlanetRenderer implements Disposable{
|
||||
public Color getColor(Vec3 position){
|
||||
return outlineColor;
|
||||
}
|
||||
}, size, true, outlineRad, 0.2f);
|
||||
}, size, true, outlineRad * radiusScale, 0.2f);
|
||||
}
|
||||
return outlines[size];
|
||||
}
|
||||
|
||||
@@ -119,6 +119,15 @@ public class TypeIO{
|
||||
}else if(object instanceof Team t){
|
||||
write.b((byte)20);
|
||||
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{
|
||||
throw new IllegalArgumentException("Unknown object type: " + object.getClass());
|
||||
}
|
||||
@@ -184,6 +193,13 @@ public class TypeIO{
|
||||
}
|
||||
case 19 -> new Vec2(read.f(), read.f());
|
||||
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);
|
||||
};
|
||||
}
|
||||
|
||||
@@ -59,7 +59,8 @@ public enum LAccess{
|
||||
public static final LAccess[]
|
||||
all = values(),
|
||||
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){
|
||||
this.params = params;
|
||||
|
||||
@@ -361,7 +361,7 @@ public class LExecutor{
|
||||
/** Checks is a unit is valid for logic AI control, and returns the controller. */
|
||||
@Nullable
|
||||
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){
|
||||
la.controller = exec.building(varThis);
|
||||
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
|
||||
}
|
||||
|
||||
@@ -1683,4 +1683,113 @@ public class LStatements{
|
||||
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;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2,9 +2,8 @@ package mindustry.logic;
|
||||
|
||||
import mindustry.ctype.*;
|
||||
|
||||
//TODO
|
||||
public interface Settable{
|
||||
void setProperty(LAccess prop, double value);
|
||||
void setProperty(LAccess prop, Object value);
|
||||
void setProperty(UnlockableContent content, double value);
|
||||
void setProp(LAccess prop, double value);
|
||||
void setProp(LAccess prop, Object value);
|
||||
void setProp(UnlockableContent content, double value);
|
||||
}
|
||||
|
||||
@@ -448,6 +448,7 @@ public class ClassMap{
|
||||
classes.put("DrawParticles", mindustry.world.draw.DrawParticles.class);
|
||||
classes.put("DrawPistons", mindustry.world.draw.DrawPistons.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("DrawPumpLiquid", mindustry.world.draw.DrawPumpLiquid.class);
|
||||
classes.put("DrawRegion", mindustry.world.draw.DrawRegion.class);
|
||||
|
||||
@@ -79,7 +79,11 @@ public class ContentParser{
|
||||
put(Interp.class, (type, data) -> field(Interp.class, data));
|
||||
put(Blending.class, (type, data) -> field(Blending.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(Schematic.class, (type, data) -> {
|
||||
Object result = fieldOpt(Loadouts.class, data);
|
||||
@@ -595,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...
|
||||
planet.sectors.add(new Sector(planet, Ptile.empty));
|
||||
|
||||
@@ -831,6 +850,10 @@ public class ContentParser{
|
||||
Color.valueOf(data.getString("color2", data.getString("color", "ffffff"))),
|
||||
data.getInt("colorOct", 1), data.getFloat("colorPersistence", 0.5f), data.getFloat("colorScale", 1f),
|
||||
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 "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);
|
||||
|
||||
@@ -32,7 +32,7 @@ import static mindustry.Vars.*;
|
||||
|
||||
public class Mods implements Loadable{
|
||||
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 @Nullable Scripts scripts;
|
||||
@@ -428,7 +428,7 @@ public class Mods implements Loadable{
|
||||
|
||||
// Add local mods
|
||||
Seq.with(modDirectory.list())
|
||||
.filter(f -> f.extEquals("jar") || f.extEquals("zip") || (f.isDirectory() && (f.child("mod.json").exists() || f.child("mod.hjson").exists())))
|
||||
.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
|
||||
@@ -1075,6 +1075,9 @@ public class Mods implements Loadable{
|
||||
|
||||
/** @return whether this mod is supported by the game version */
|
||||
public boolean isSupported(){
|
||||
//no unsupported mods on servers
|
||||
if(headless) return true;
|
||||
|
||||
if(isOutdated() || isBlacklisted()) return false;
|
||||
|
||||
return Version.isAtLeast(meta.minGameVersion);
|
||||
|
||||
@@ -151,7 +151,7 @@ public class BeControl{
|
||||
Log.info("&lcAutosaved.");
|
||||
|
||||
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.");
|
||||
//replace old file with new
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
package mindustry.net;
|
||||
|
||||
import arc.*;
|
||||
import arc.struct.*;
|
||||
import arc.util.*;
|
||||
import mindustry.entities.units.*;
|
||||
@@ -76,7 +77,12 @@ public abstract class NetConnection{
|
||||
Call.kick(this, reason);
|
||||
}
|
||||
|
||||
close();
|
||||
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();
|
||||
}
|
||||
|
||||
netServer.admins.save();
|
||||
kicked = true;
|
||||
|
||||
@@ -12,6 +12,7 @@ import static mindustry.Vars.*;
|
||||
/** Class for handling menus and notifications across the network. Unstable API! */
|
||||
public class Menus{
|
||||
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. */
|
||||
public static int registerMenu(MenuListener listener){
|
||||
@@ -19,6 +20,12 @@ public class Menus{
|
||||
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
|
||||
|
||||
@Remote(variants = Variant.both)
|
||||
@@ -29,6 +36,19 @@ public class Menus{
|
||||
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)
|
||||
public static void menuChoose(@Nullable Player player, int menuId, int option){
|
||||
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)
|
||||
public static void setHudText(String message){
|
||||
if(message == null) return;
|
||||
@@ -130,4 +171,8 @@ public class Menus{
|
||||
public interface MenuListener{
|
||||
void get(Player player, int option);
|
||||
}
|
||||
|
||||
public interface TextInputListener{
|
||||
void get(Player player, @Nullable String text);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -8,6 +8,7 @@ import arc.util.*;
|
||||
import mindustry.ctype.*;
|
||||
import mindustry.gen.*;
|
||||
import mindustry.graphics.*;
|
||||
import mindustry.input.*;
|
||||
import mindustry.world.meta.*;
|
||||
|
||||
import static arc.Core.*;
|
||||
@@ -19,6 +20,12 @@ public class ContentInfoDialog extends BaseDialog{
|
||||
super("@info.title");
|
||||
|
||||
addCloseButton();
|
||||
|
||||
keyDown(key -> {
|
||||
if(key == keybinds.get(Binding.block_info).key){
|
||||
Core.app.post(this::hide);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
public void show(UnlockableContent content){
|
||||
|
||||
@@ -38,6 +38,15 @@ public class HostDialog extends BaseDialog{
|
||||
button.update(() -> button.getStyle().imageUpColor = player.color());
|
||||
}).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.add().width(65f);
|
||||
@@ -51,7 +60,11 @@ public class HostDialog extends BaseDialog{
|
||||
runHost();
|
||||
}).width(w).height(70f);
|
||||
|
||||
cont.button("?", () -> ui.showInfo("@host.info")).size(65f, 70f).padLeft(6f);
|
||||
if(!steam){
|
||||
cont.button("?", () -> ui.showInfo("@host.info")).size(65f, 70f).padLeft(6f);
|
||||
}else{
|
||||
cont.add().size(65f, 70f).padLeft(6f);
|
||||
}
|
||||
|
||||
shown(() -> {
|
||||
if(!steam){
|
||||
@@ -68,24 +81,9 @@ public class HostDialog extends BaseDialog{
|
||||
player.admin = true;
|
||||
Events.fire(new HostEvent());
|
||||
|
||||
if(steam){
|
||||
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(steam && Core.settings.getBool("steampublichost")){
|
||||
if(Version.modifier.contains("beta") || Version.modifier.contains("alpha")){
|
||||
Core.settings.put("publichost", false);
|
||||
Core.settings.put("steampublichost", false);
|
||||
platform.updateLobby();
|
||||
Core.settings.getBoolOnce("betapublic", () -> ui.showInfo("@public.beta"));
|
||||
}
|
||||
|
||||
@@ -37,7 +37,7 @@ public class JoinDialog extends BaseDialog{
|
||||
TextButtonStyle style;
|
||||
|
||||
String lastIp;
|
||||
int lastPort;
|
||||
int lastPort, lastColumns = -1;
|
||||
Task ping;
|
||||
|
||||
String serverSearch = "";
|
||||
@@ -107,12 +107,17 @@ public class JoinDialog extends BaseDialog{
|
||||
});
|
||||
|
||||
onResize(() -> {
|
||||
|
||||
|
||||
//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
|
||||
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();
|
||||
refreshAll();
|
||||
}
|
||||
|
||||
lastColumns = columns();
|
||||
});
|
||||
}
|
||||
|
||||
@@ -140,7 +145,11 @@ public class JoinDialog extends BaseDialog{
|
||||
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);
|
||||
inner.setColor(Pal.gray);
|
||||
@@ -181,8 +190,6 @@ public class JoinDialog extends BaseDialog{
|
||||
button.row();
|
||||
|
||||
server.content = button.table(t -> {}).grow().get();
|
||||
|
||||
remote.row();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -234,6 +241,7 @@ public class JoinDialog extends BaseDialog{
|
||||
}
|
||||
|
||||
void buildServer(Host host, Table content){
|
||||
content.top().left();
|
||||
String versionString;
|
||||
|
||||
if(host.version == -1){
|
||||
@@ -267,6 +275,7 @@ public class JoinDialog extends BaseDialog{
|
||||
}).growX().height(36f).row();
|
||||
|
||||
content.table(Tex.whitePane, t -> {
|
||||
t.top().left();
|
||||
t.setColor(color);
|
||||
t.left();
|
||||
|
||||
@@ -295,7 +304,7 @@ public class JoinDialog extends BaseDialog{
|
||||
if(host.ping > 0){
|
||||
t.add(Iconc.chartBar + " " + host.ping + "ms").style(Styles.outlineLabel).color(Pal.gray).left();
|
||||
}
|
||||
}).growX().left().bottom();
|
||||
}).growY().growX().left().bottom();
|
||||
}
|
||||
|
||||
void setup(){
|
||||
@@ -333,7 +342,7 @@ public class JoinDialog extends BaseDialog{
|
||||
button.update(() -> button.getStyle().imageUpColor = player.color());
|
||||
}).width(w).height(70f).pad(4);
|
||||
cont.row();
|
||||
cont.add(pane).width(w + 38).pad(0);
|
||||
cont.add(pane).width((w + 5) * columns() + 33).pad(0);
|
||||
cont.row();
|
||||
cont.buttonCenter("@server.add", Icon.add, () -> {
|
||||
renaming = null;
|
||||
@@ -379,7 +388,7 @@ public class JoinDialog extends BaseDialog{
|
||||
hosts.row();
|
||||
hosts.image().growX().pad(5).padLeft(10).padRight(10).height(3).color(Pal.accent);
|
||||
hosts.row();
|
||||
hosts.add(coll).width(targetWidth());
|
||||
hosts.add(coll).width((targetWidth() + 5f) * columns());
|
||||
hosts.row();
|
||||
}
|
||||
|
||||
@@ -404,7 +413,7 @@ public class JoinDialog extends BaseDialog{
|
||||
serverSearch = text.trim().replaceAll(" +", " ").toLowerCase()
|
||||
).grow().pad(8).get().keyDown(KeyCode.enter, this::refreshCommunity);
|
||||
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 ++){
|
||||
ServerGroup group = defaultServers.get((i + defaultServers.size/2) % defaultServers.size);
|
||||
@@ -413,7 +422,7 @@ public class JoinDialog extends BaseDialog{
|
||||
continue;
|
||||
}
|
||||
|
||||
Table[] groupTable = {null};
|
||||
Table[] groupTable = {null, null};
|
||||
|
||||
//table containing all groups
|
||||
for(String address : group.addresses){
|
||||
@@ -430,7 +439,7 @@ public class JoinDialog extends BaseDialog{
|
||||
|
||||
//add header
|
||||
if(groupTable[0] == null){
|
||||
global.table(t -> groupTable[0] = t).row();
|
||||
global.table(t -> groupTable[0] = t).fillX().left().row();
|
||||
|
||||
groupTable[0].table(head -> {
|
||||
if(!group.name.isEmpty()){
|
||||
@@ -448,10 +457,12 @@ public class JoinDialog extends BaseDialog{
|
||||
}
|
||||
}).size(40f).get();
|
||||
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].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){
|
||||
global.background(null);
|
||||
float w = targetWidth();
|
||||
|
||||
//TODO looks bad
|
||||
container.left().top();
|
||||
|
||||
container.button(b -> buildServer(host, b), style, () -> {
|
||||
Events.fire(new ClientPreConnectEvent(host));
|
||||
if(!Core.settings.getBool("server-disclaimer", false)){
|
||||
@@ -477,7 +493,11 @@ public class JoinDialog extends BaseDialog{
|
||||
}else{
|
||||
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(){
|
||||
@@ -500,12 +520,14 @@ public class JoinDialog extends BaseDialog{
|
||||
totalHosts++;
|
||||
float w = targetWidth();
|
||||
|
||||
local.row();
|
||||
if((local.getChildren().size) % columns() == 0){
|
||||
local.row();
|
||||
}
|
||||
|
||||
local.button(b -> buildServer(host, b), style, () -> {
|
||||
Events.fire(new ClientPreConnectEvent(host));
|
||||
safeConnect(host.address, host.port, host.version);
|
||||
}).width(w);
|
||||
}).width(w).top().left().growY();
|
||||
}
|
||||
|
||||
public void connect(String ip, int port){
|
||||
|
||||
@@ -53,11 +53,7 @@ public class PausedDialog extends BaseDialog{
|
||||
if(net.server() && steam){
|
||||
platform.inviteFriends();
|
||||
}else{
|
||||
if(steam){
|
||||
ui.host.runHost();
|
||||
}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"));
|
||||
|
||||
|
||||
@@ -785,7 +785,7 @@ public class PlanetDialog extends BaseDialog implements PlanetInterfaceRenderer{
|
||||
hoverLabel.touchable = Touchable.disabled;
|
||||
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.getText().setLength(0);
|
||||
@@ -831,7 +831,7 @@ public class PlanetDialog extends BaseDialog implements PlanetInterfaceRenderer{
|
||||
}
|
||||
|
||||
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()){
|
||||
boolean wasNull = selected == null;
|
||||
//always have the first sector selected.
|
||||
|
||||
@@ -6,7 +6,6 @@ import arc.func.*;
|
||||
import arc.graphics.*;
|
||||
import arc.graphics.Texture.*;
|
||||
import arc.input.*;
|
||||
import arc.math.geom.*;
|
||||
import arc.scene.*;
|
||||
import arc.scene.event.*;
|
||||
import arc.scene.style.*;
|
||||
@@ -356,7 +355,7 @@ public class SettingsMenuDialog extends BaseDialog{
|
||||
});
|
||||
|
||||
if(!Version.modifier.contains("beta")){
|
||||
game.checkPref("publichost", false, i -> {
|
||||
game.checkPref("steampublichost", false, i -> {
|
||||
platform.updateLobby();
|
||||
});
|
||||
}
|
||||
@@ -368,7 +367,7 @@ public class SettingsMenuDialog extends BaseDialog{
|
||||
|
||||
int[] lastUiScale = {settings.getInt("uiscale", 100)};
|
||||
|
||||
graphics.sliderPref("uiscale", 100, 25, 300, 25, s -> {
|
||||
graphics.sliderPref("uiscale", 100, 5, 300, 5, s -> {
|
||||
//if the user changed their UI scale, but then put it back, don't consider it 'changed'
|
||||
Core.settings.put("uiscalechanged", s != lastUiScale[0]);
|
||||
return s + "%";
|
||||
@@ -707,21 +706,7 @@ public class SettingsMenuDialog extends BaseDialog{
|
||||
public abstract void add(SettingsTable table);
|
||||
|
||||
public void addDesc(Element elem){
|
||||
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());
|
||||
}
|
||||
});
|
||||
ui.addDescTooltip(elem, description);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -781,6 +781,12 @@ public class HudFragment{
|
||||
|
||||
builder.setLength(0);
|
||||
|
||||
//mission overrides everything
|
||||
if(state.rules.mission != null && state.rules.mission.length() > 0){
|
||||
builder.append(state.rules.mission);
|
||||
return builder;
|
||||
}
|
||||
|
||||
//objectives override mission?
|
||||
if(state.rules.objectives.any()){
|
||||
boolean first = true;
|
||||
@@ -799,12 +805,6 @@ public class HudFragment{
|
||||
return builder;
|
||||
}
|
||||
|
||||
//mission overrides everything
|
||||
if(state.rules.mission != null){
|
||||
builder.append(state.rules.mission);
|
||||
return builder;
|
||||
}
|
||||
|
||||
if(!state.rules.waves && state.rules.attackMode){
|
||||
int sum = Math.max(state.teams.present.sum(t -> t.team != player.team() ? t.cores.size : 0), 1);
|
||||
builder.append(sum > 1 ? enemycsf.get(sum) : enemycf.get(sum));
|
||||
|
||||
@@ -462,9 +462,15 @@ public class PlacementFragment{
|
||||
var listener = new ClickListener();
|
||||
|
||||
//left click -> select
|
||||
b.clicked(KeyCode.mouseLeft, () -> control.input.selectedUnits.removeAll(unit -> unit.type != type));
|
||||
b.clicked(KeyCode.mouseLeft, () -> {
|
||||
control.input.selectedUnits.removeAll(unit -> unit.type != type);
|
||||
Events.fire(Trigger.unitCommandChange);
|
||||
});
|
||||
//right click -> remove
|
||||
b.clicked(KeyCode.mouseRight, () -> control.input.selectedUnits.removeAll(unit -> unit.type == type));
|
||||
b.clicked(KeyCode.mouseRight, () -> {
|
||||
control.input.selectedUnits.removeAll(unit -> unit.type == type);
|
||||
Events.fire(Trigger.unitCommandChange);
|
||||
});
|
||||
|
||||
b.addListener(listener);
|
||||
b.addListener(new HandCursorListener());
|
||||
|
||||
@@ -0,0 +1,5 @@
|
||||
package mindustry.world.blocks;
|
||||
|
||||
public interface UnitTetherBlock{
|
||||
void spawned(int id);
|
||||
}
|
||||
@@ -30,6 +30,8 @@ public class ForceProjector extends Block{
|
||||
public float phaseRadiusBoost = 80f;
|
||||
public float phaseShieldBoost = 400f;
|
||||
public float radius = 101.7f;
|
||||
public int sides = 6;
|
||||
public float shieldRotation = 0f;
|
||||
public float shieldHealth = 700f;
|
||||
public float cooldownNormal = 1.75f;
|
||||
public float cooldownLiquid = 1.5f;
|
||||
@@ -46,7 +48,7 @@ public class ForceProjector extends Block{
|
||||
protected static ForceBuild paramEntity;
|
||||
protected static Effect paramEffect;
|
||||
protected static final Cons<Bullet> shieldConsumer = bullet -> {
|
||||
if(bullet.team != paramEntity.team && bullet.type.absorbable && Intersector.isInsideHexagon(paramEntity.x, paramEntity.y, paramEntity.realRadius() * 2f, bullet.x, bullet.y)){
|
||||
if(bullet.team != paramEntity.team && bullet.type.absorbable && Intersector.isInRegularPolygon(((ForceProjector)(paramEntity.block)).sides, paramEntity.x, paramEntity.y, paramEntity.realRadius() * 2f, ((ForceProjector)(paramEntity.block)).shieldRotation, bullet.x, bullet.y)){
|
||||
bullet.absorb();
|
||||
paramEffect.at(bullet);
|
||||
paramEntity.hit = 1f;
|
||||
@@ -109,10 +111,10 @@ public class ForceProjector extends Block{
|
||||
|
||||
Draw.color(Pal.gray);
|
||||
Lines.stroke(3f);
|
||||
Lines.poly(x * tilesize + offset, y * tilesize + offset, 6, radius);
|
||||
Lines.poly(x * tilesize + offset, y * tilesize + offset, sides, radius, shieldRotation);
|
||||
Draw.color(player.team().color);
|
||||
Lines.stroke(1f);
|
||||
Lines.poly(x * tilesize + offset, y * tilesize + offset, 6, radius);
|
||||
Lines.poly(x * tilesize + offset, y * tilesize + offset, sides, radius, shieldRotation);
|
||||
Draw.color();
|
||||
}
|
||||
|
||||
@@ -241,18 +243,18 @@ public class ForceProjector extends Block{
|
||||
if(!broken){
|
||||
float radius = realRadius();
|
||||
|
||||
Draw.z(Layer.shields);
|
||||
|
||||
Draw.color(team.color, Color.white, Mathf.clamp(hit));
|
||||
|
||||
if(renderer.animateShields){
|
||||
Fill.poly(x, y, 6, radius);
|
||||
Draw.z(Layer.shields + 0.001f * hit);
|
||||
Fill.poly(x, y, sides, radius, shieldRotation);
|
||||
}else{
|
||||
Draw.z(Layer.shields);
|
||||
Lines.stroke(1.5f);
|
||||
Draw.alpha(0.09f + Mathf.clamp(0.08f * hit));
|
||||
Fill.poly(x, y, 6, radius);
|
||||
Fill.poly(x, y, sides, radius, shieldRotation);
|
||||
Draw.alpha(1f);
|
||||
Lines.poly(x, y, 6, radius);
|
||||
Lines.poly(x, y, sides, radius, shieldRotation);
|
||||
Draw.reset();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -30,6 +30,8 @@ public class Duct extends Block implements Autotiler{
|
||||
public @Load(value = "@-top-#", length = 5) TextureRegion[] topRegions;
|
||||
public @Load(value = "@-bottom-#", length = 5, fallback = "duct-bottom-#") TextureRegion[] botRegions;
|
||||
|
||||
public @Nullable Block bridgeReplacement;
|
||||
|
||||
public Duct(String name){
|
||||
super(name);
|
||||
|
||||
@@ -56,6 +58,13 @@ public class Duct extends Block implements Autotiler{
|
||||
stats.add(Stat.itemsMoved, 60f / speed, StatUnit.itemsSecond);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void init(){
|
||||
super.init();
|
||||
|
||||
if(bridgeReplacement == null || !(bridgeReplacement instanceof DuctBridge)) bridgeReplacement = Blocks.ductBridge;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void drawPlanRegion(BuildPlan plan, Eachable<BuildPlan> list){
|
||||
int[] bits = getTiling(plan, list);
|
||||
@@ -96,7 +105,9 @@ public class Duct extends Block implements Autotiler{
|
||||
|
||||
@Override
|
||||
public void handlePlacementLine(Seq<BuildPlan> plans){
|
||||
Placement.calculateBridges(plans, (DuctBridge)Blocks.ductBridge, false, b -> b instanceof Duct || b instanceof StackConveyor || b instanceof Conveyor);
|
||||
if(bridgeReplacement == null) return;
|
||||
|
||||
Placement.calculateBridges(plans, (DuctBridge)bridgeReplacement, false, b -> b instanceof Duct || b instanceof StackConveyor || b instanceof Conveyor);
|
||||
}
|
||||
|
||||
public class DuctBuild extends Building{
|
||||
|
||||
@@ -161,6 +161,8 @@ public class Floor extends Block{
|
||||
return;
|
||||
}
|
||||
|
||||
if(Core.atlas.has(name + "-edge")) return;
|
||||
|
||||
var image = Core.atlas.getPixmap(icons()[0]);
|
||||
var edge = Core.atlas.getPixmap(Core.atlas.find(name + "-edge-stencil", "edge-stencil"));
|
||||
Pixmap result = new Pixmap(edge.width, edge.height);
|
||||
|
||||
@@ -5,6 +5,7 @@ import arc.graphics.g2d.*;
|
||||
import arc.math.*;
|
||||
import arc.util.*;
|
||||
import arc.util.io.*;
|
||||
import mindustry.annotations.Annotations.*;
|
||||
import mindustry.entities.units.*;
|
||||
import mindustry.gen.*;
|
||||
import mindustry.graphics.*;
|
||||
@@ -23,6 +24,8 @@ public class PayloadLoader extends PayloadBlock{
|
||||
public float maxPowerConsumption = 40f;
|
||||
public boolean loadPowerDynamic = true;
|
||||
|
||||
public @Load("@-over") TextureRegion overRegion;
|
||||
|
||||
//initialized in init(), do not touch
|
||||
protected float basePowerUse = 0f;
|
||||
|
||||
@@ -132,6 +135,11 @@ public class PayloadLoader extends PayloadBlock{
|
||||
|
||||
Draw.z(Layer.blockOver);
|
||||
drawPayload();
|
||||
|
||||
if(overRegion.found()){
|
||||
Draw.z(Layer.blockOver + 0.1f);
|
||||
Draw.rect(overRegion, x, y);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -216,6 +224,11 @@ public class PayloadLoader extends PayloadBlock{
|
||||
return payload != null && payload.block().consPower != null && payload.block().consPower.buffered;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean shouldConsume(){
|
||||
return payload != null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public byte version(){
|
||||
return 1;
|
||||
|
||||
@@ -14,6 +14,7 @@ public class PayloadUnloader extends PayloadLoader{
|
||||
super(name);
|
||||
outputsPower = true;
|
||||
consumesPower = true;
|
||||
outputsLiquid = true;
|
||||
loadPowerDynamic = false;
|
||||
canOverdrive = false;
|
||||
}
|
||||
|
||||
@@ -4,18 +4,22 @@ import arc.graphics.*;
|
||||
import arc.graphics.g2d.*;
|
||||
import arc.math.*;
|
||||
import arc.struct.*;
|
||||
import arc.util.*;
|
||||
import mindustry.annotations.Annotations.*;
|
||||
import mindustry.entities.units.*;
|
||||
import mindustry.gen.*;
|
||||
import mindustry.world.draw.*;
|
||||
import mindustry.world.meta.*;
|
||||
|
||||
import static mindustry.Vars.*;
|
||||
|
||||
public class Battery extends PowerDistributor{
|
||||
public @Load("@-top") TextureRegion topRegion;
|
||||
public DrawBlock drawer;
|
||||
|
||||
public Color emptyLightColor = Color.valueOf("f8c266");
|
||||
public Color fullLightColor = Color.valueOf("fb9567");
|
||||
|
||||
@Deprecated
|
||||
public @Load("@-top") TextureRegion topRegion;
|
||||
|
||||
public Battery(String name){
|
||||
super(name);
|
||||
outputsPower = true;
|
||||
@@ -29,14 +33,60 @@ public class Battery extends PowerDistributor{
|
||||
update = false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void init(){
|
||||
super.init();
|
||||
|
||||
checkDrawDefault();
|
||||
}
|
||||
|
||||
void checkDrawDefault(){
|
||||
if(drawer == null){
|
||||
drawer = new DrawMulti(new DrawDefault(), new DrawPower(){{
|
||||
emptyLightColor = Battery.this.emptyLightColor;
|
||||
fullLightColor = Battery.this.fullLightColor;
|
||||
}}, new DrawRegion("-top"));
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void load(){
|
||||
checkDrawDefault();
|
||||
|
||||
super.load();
|
||||
drawer.load(this);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void drawPlanRegion(BuildPlan plan, Eachable<BuildPlan> list){
|
||||
drawer.drawPlan(this, plan, list);
|
||||
}
|
||||
|
||||
@Override
|
||||
public TextureRegion[] icons(){
|
||||
return drawer.finalIcons(this);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void getRegionsToOutline(Seq<TextureRegion> out){
|
||||
drawer.getRegionsToOutline(this, out);
|
||||
}
|
||||
|
||||
public class BatteryBuild extends Building{
|
||||
@Override
|
||||
public void draw(){
|
||||
Draw.color(emptyLightColor, fullLightColor, power.status);
|
||||
Fill.square(x, y, (tilesize * size / 2f - 1) * Draw.xscl);
|
||||
Draw.color();
|
||||
drawer.draw(this);
|
||||
}
|
||||
|
||||
Draw.rect(topRegion, x, y);
|
||||
@Override
|
||||
public void drawLight(){
|
||||
super.drawLight();
|
||||
drawer.drawLight(this);
|
||||
}
|
||||
|
||||
@Override
|
||||
public float warmup(){
|
||||
return power.status;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -16,6 +16,7 @@ public class AttributeCrafter extends GenericCrafter{
|
||||
public float minEfficiency = -1f;
|
||||
public float displayEfficiencyScale = 1f;
|
||||
public boolean displayEfficiency = true;
|
||||
public boolean scaleLiquidConsumption = false;
|
||||
|
||||
public AttributeCrafter(String name){
|
||||
super(name);
|
||||
@@ -68,6 +69,11 @@ public class AttributeCrafter extends GenericCrafter{
|
||||
public float efficiencyMultiplier(){
|
||||
return baseEfficiency + Math.min(maxBoost, boostScale * attrsum) + attribute.env();
|
||||
}
|
||||
|
||||
@Override
|
||||
public float efficiencyScale(){
|
||||
return scaleLiquidConsumption ? efficiencyMultiplier() : super.efficiencyScale();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void pickedUp(){
|
||||
|
||||
@@ -42,6 +42,9 @@ public class BeamDrill extends Block{
|
||||
/** How many times faster the drill will progress when boosted by an optional consumer. */
|
||||
public float optionalBoostIntensity = 2.5f;
|
||||
|
||||
/** Multipliers of drill speed for each item. Defaults to 1. */
|
||||
public ObjectFloatMap<Item> drillMultipliers = new ObjectFloatMap<>();
|
||||
|
||||
public Color sparkColor = Color.valueOf("fd9e81"), glowColor = Color.white;
|
||||
public float glowIntensity = 0.2f, pulseIntensity = 0.07f;
|
||||
public float glowScl = 3f;
|
||||
@@ -161,7 +164,7 @@ public class BeamDrill extends Block{
|
||||
}
|
||||
|
||||
if(item != null){
|
||||
float width = drawPlaceText(Core.bundle.formatFloat("bar.drillspeed", 60f / drillTime * count, 2), x, y, valid);
|
||||
float width = drawPlaceText(Core.bundle.formatFloat("bar.drillspeed", 60f / getDrillTime(item) * count, 2), x, y, valid);
|
||||
if(!multiple){
|
||||
float dx = x * tilesize + offset - width/2f - 4f, dy = y * tilesize + offset + size * tilesize / 2f + 5, s = iconSmall / 4f;
|
||||
Draw.mixcol(Color.darkGray, 1f);
|
||||
@@ -194,6 +197,10 @@ public class BeamDrill extends Block{
|
||||
return false;
|
||||
}
|
||||
|
||||
public float getDrillTime(Item item){
|
||||
return drillTime / drillMultipliers.get(item, 1f);
|
||||
}
|
||||
|
||||
public class BeamDrillBuild extends Building{
|
||||
public Tile[] facing = new Tile[size];
|
||||
public Point2[] lasers = new Point2[size];
|
||||
@@ -227,6 +234,7 @@ public class BeamDrill extends Block{
|
||||
updateFacing();
|
||||
|
||||
float multiplier = Mathf.lerp(1f, optionalBoostIntensity, optionalEfficiency);
|
||||
float drillTime = getDrillTime(lastItem);
|
||||
boostWarmup = Mathf.lerpDelta(boostWarmup, optionalEfficiency, 0.1f);
|
||||
lastDrillSpeed = (facingAmount * multiplier * timeScale) / drillTime;
|
||||
|
||||
|
||||
@@ -31,9 +31,6 @@ public class BurstDrill extends Drill{
|
||||
public Sound drillSound = Sounds.drillImpact;
|
||||
public float drillSoundVolume = 0.6f, drillSoundPitchRand = 0.1f;
|
||||
|
||||
/** Multipliers of drill speed for each item. Defaults to 1. */
|
||||
public ObjectFloatMap<Item> drillMultipliers = new ObjectFloatMap<>();
|
||||
|
||||
public BurstDrill(String name){
|
||||
super(name);
|
||||
|
||||
|
||||
@@ -59,6 +59,9 @@ public class Drill extends Block{
|
||||
/** Chance the update effect will appear. */
|
||||
public float updateEffectChance = 0.02f;
|
||||
|
||||
/** Multipliers of drill speed for each item. Defaults to 1. */
|
||||
public ObjectFloatMap<Item> drillMultipliers = new ObjectFloatMap<>();
|
||||
|
||||
public boolean drawRim = false;
|
||||
public boolean drawSpinSprite = true;
|
||||
public Color heatColor = Color.valueOf("ff5512");
|
||||
@@ -160,7 +163,7 @@ public class Drill extends Block{
|
||||
}
|
||||
|
||||
public float getDrillTime(Item item){
|
||||
return drillTime + hardnessDrillMultiplier * item.hardness;
|
||||
return (drillTime + hardnessDrillMultiplier * item.hardness) / drillMultipliers.get(item, 1f);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -241,6 +241,10 @@ public class GenericCrafter extends Block{
|
||||
|
||||
@Override
|
||||
public float getProgressIncrease(float baseTime){
|
||||
if(ignoreLiquidFullness){
|
||||
return super.getProgressIncrease(baseTime);
|
||||
}
|
||||
|
||||
//limit progress increase by maximum amount of liquid it can produce
|
||||
float scaling = 1f, max = 1f;
|
||||
if(outputLiquids != null){
|
||||
|
||||
@@ -66,27 +66,27 @@ public class CoreBlock extends StorageBlock{
|
||||
|
||||
@Remote(called = Loc.server)
|
||||
public static void playerSpawn(Tile tile, Player player){
|
||||
if(player == null || tile == null || !(tile.build instanceof CoreBuild entity)) return;
|
||||
if(player == null || tile == null || !(tile.build instanceof CoreBuild core)) return;
|
||||
|
||||
CoreBlock block = (CoreBlock)tile.block();
|
||||
if(entity.wasVisible){
|
||||
Fx.spawn.at(entity);
|
||||
UnitType spawnType = ((CoreBlock)core.block).unitType;
|
||||
if(core.wasVisible){
|
||||
Fx.spawn.at(core);
|
||||
}
|
||||
|
||||
player.set(entity);
|
||||
player.set(core);
|
||||
|
||||
if(!net.client()){
|
||||
Unit unit = block.unitType.create(tile.team());
|
||||
unit.set(entity);
|
||||
Unit unit = spawnType.create(tile.team());
|
||||
unit.set(core);
|
||||
unit.rotation(90f);
|
||||
unit.impulse(0f, 3f);
|
||||
unit.controller(player);
|
||||
unit.spawnedByCore(true);
|
||||
unit.controller(player);
|
||||
unit.add();
|
||||
}
|
||||
|
||||
if(state.isCampaign() && player == Vars.player){
|
||||
block.unitType.unlock();
|
||||
spawnType.unlock();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -395,7 +395,7 @@ public class CoreBlock extends StorageBlock{
|
||||
if(renderer.getLandTime() >= 1f){
|
||||
tile.getLinkedTiles(t -> {
|
||||
if(Mathf.chance(0.4f)){
|
||||
Fx.coreLandDust.at(t.worldx(), t.worldy(), angleTo(t) + Mathf.range(30f), Tmp.c1.set(t.floor().mapColor).mul(1.5f + Mathf.range(0.15f)));
|
||||
Fx.coreLandDust.at(t.worldx(), t.worldy(), angleTo(t.worldx(), t.worldy()) + Mathf.range(30f), Tmp.c1.set(t.floor().mapColor).mul(1.5f + Mathf.range(0.15f)));
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
@@ -16,6 +16,7 @@ import mindustry.graphics.*;
|
||||
import mindustry.type.*;
|
||||
import mindustry.ui.*;
|
||||
import mindustry.world.*;
|
||||
import mindustry.world.blocks.*;
|
||||
|
||||
import static mindustry.Vars.*;
|
||||
|
||||
@@ -75,12 +76,12 @@ public class UnitCargoLoader extends Block{
|
||||
}
|
||||
|
||||
@Remote(called = Loc.server)
|
||||
public static void cargoLoaderDroneSpawned(Tile tile, int id){
|
||||
if(tile == null || !(tile.build instanceof UnitTransportSourceBuild build)) return;
|
||||
public static void unitTetherBlockSpawned(Tile tile, int id){
|
||||
if(tile == null || !(tile.build instanceof UnitTetherBlock build)) return;
|
||||
build.spawned(id);
|
||||
}
|
||||
|
||||
public class UnitTransportSourceBuild extends Building{
|
||||
public class UnitTransportSourceBuild extends Building implements UnitTetherBlock{
|
||||
//needs to be "unboxed" after reading, since units are read after buildings.
|
||||
public int readUnitId = -1;
|
||||
public float buildProgress, totalProgress;
|
||||
@@ -117,7 +118,7 @@ public class UnitCargoLoader extends Block{
|
||||
unit.set(x, y);
|
||||
unit.rotation = 90f;
|
||||
unit.add();
|
||||
Call.cargoLoaderDroneSpawned(tile, unit.id);
|
||||
Call.unitTetherBlockSpawned(tile, unit.id);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,73 @@
|
||||
package mindustry.world.draw;
|
||||
|
||||
import arc.*;
|
||||
import arc.graphics.*;
|
||||
import arc.graphics.g2d.*;
|
||||
import arc.util.*;
|
||||
import mindustry.entities.units.*;
|
||||
import mindustry.gen.*;
|
||||
import mindustry.world.*;
|
||||
|
||||
import static mindustry.Vars.*;
|
||||
|
||||
public class DrawPower extends DrawBlock{
|
||||
public TextureRegion emptyRegion, fullRegion;
|
||||
public String suffix = "-power";
|
||||
|
||||
public boolean drawPlan = true;
|
||||
/** If false, fades between emptyRegion and fullRegion instead of mixcol between empty and full colors. */
|
||||
public boolean mixcol = true;
|
||||
public Color emptyLightColor = Color.valueOf("f8c266");
|
||||
public Color fullLightColor = Color.valueOf("fb9567");
|
||||
|
||||
/** Any number <=0 disables layer changes. */
|
||||
public float layer = -1;
|
||||
|
||||
public DrawPower(){
|
||||
}
|
||||
|
||||
public DrawPower(String suffix){
|
||||
this.suffix = suffix;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void draw(Building build){
|
||||
float z = Draw.z();
|
||||
if(layer > 0) Draw.z(layer);
|
||||
if(mixcol){
|
||||
Draw.color(emptyLightColor, fullLightColor, build.power.status);
|
||||
if(emptyRegion.found()){
|
||||
Draw.rect(emptyRegion, build.x, build.y);
|
||||
}else{
|
||||
Fill.square(build.x, build.y, (tilesize * build.block.size / 2f - 1) * Draw.xscl);
|
||||
}
|
||||
}else{
|
||||
Draw.rect(emptyRegion, build.x, build.y);
|
||||
Draw.alpha(build.power.status);
|
||||
Draw.rect(fullRegion, build.x, build.y);
|
||||
}
|
||||
Draw.color();
|
||||
Draw.z(z);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void drawPlan(Block block, BuildPlan plan, Eachable<BuildPlan> list){
|
||||
if(!drawPlan || mixcol || !emptyRegion.found()) return;
|
||||
Draw.rect(emptyRegion, plan.drawx(), plan.drawy());
|
||||
}
|
||||
|
||||
@Override
|
||||
public TextureRegion[] icons(Block block){
|
||||
return !mixcol && emptyRegion.found() ? new TextureRegion[]{emptyRegion} : new TextureRegion[]{};
|
||||
}
|
||||
|
||||
@Override
|
||||
public void load(Block block){
|
||||
if(mixcol){
|
||||
emptyRegion = Core.atlas.find(block.name + suffix);
|
||||
}else{
|
||||
emptyRegion = Core.atlas.find(block.name + suffix + "-empty");
|
||||
fullRegion = Core.atlas.find(block.name + suffix + "-full");
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -47,6 +47,11 @@ public class Attribute{
|
||||
return map.getThrow(name, () -> new IllegalArgumentException("Unknown Attribute type: " + name));
|
||||
}
|
||||
|
||||
/** @return Whether an attribute exists. */
|
||||
public static boolean exists(String name){
|
||||
return map.containsKey(name);
|
||||
}
|
||||
|
||||
/** Automatically registers this attribute for use. Do not call after mod init. */
|
||||
public static Attribute add(String name){
|
||||
Attribute a = new Attribute(all.length, name);
|
||||
|
||||
@@ -292,15 +292,15 @@ public class StatValues{
|
||||
continue;
|
||||
}
|
||||
|
||||
TextureRegion region = !weapon.name.equals("") && weapon.region.found() ? weapon.region : Core.atlas.find("clear");
|
||||
TextureRegion region = !weapon.name.isEmpty() ? Core.atlas.find(weapon.name + "-preview", weapon.region) : null;
|
||||
|
||||
table.image(region).size(60).scaling(Scaling.bounded).right().top();
|
||||
|
||||
table.table(Tex.underline, w -> {
|
||||
w.left().defaults().padRight(3).left();
|
||||
table.table(Styles.grayPanel, w -> {
|
||||
w.left().top().defaults().padRight(3).left();
|
||||
if(region != null && region.found()) w.image(region).size(60).scaling(Scaling.bounded).left().top();
|
||||
w.row();
|
||||
|
||||
weapon.addStats(unit, w);
|
||||
}).padTop(-9).left();
|
||||
}).growX().pad(5).margin(10);
|
||||
table.row();
|
||||
}
|
||||
};
|
||||
@@ -332,14 +332,16 @@ public class StatValues{
|
||||
continue;
|
||||
}
|
||||
|
||||
//no point in displaying unit icon twice
|
||||
if(!compact && !(t instanceof Turret)){
|
||||
table.image(icon(t)).size(3 * 8).padRight(4).right().scaling(Scaling.fit).top();
|
||||
table.add(t.localizedName).padRight(10).left().top();
|
||||
}
|
||||
|
||||
table.table(bt -> {
|
||||
bt.left().defaults().padRight(3).left();
|
||||
table.table(Styles.grayPanel, bt -> {
|
||||
bt.left().top().defaults().padRight(3).left();
|
||||
//no point in displaying unit icon twice
|
||||
if(!compact && !(t instanceof Turret)){
|
||||
bt.table(title -> {
|
||||
title.image(icon(t)).size(3 * 8).padRight(4).right().scaling(Scaling.fit).top();
|
||||
title.add(t.localizedName).padRight(10).left().top();
|
||||
});
|
||||
bt.row();
|
||||
}
|
||||
|
||||
if(type.damage > 0 && (type.collides || type.splashDamage <= 0)){
|
||||
if(type.continuousDamage() > 0){
|
||||
@@ -403,18 +405,50 @@ public class StatValues{
|
||||
sep(bt, "@bullet.armorpierce");
|
||||
}
|
||||
|
||||
if(type.suppressionRange > 0){
|
||||
sep(bt, Core.bundle.format("bullet.suppression", Strings.autoFixed(type.suppressionDuration / 60f, 2), Strings.fixed(type.suppressionRange / tilesize, 1)));
|
||||
}
|
||||
|
||||
if(type.status != StatusEffects.none){
|
||||
sep(bt, (type.status.minfo.mod == null ? type.status.emoji() : "") + "[stat]" + type.status.localizedName + (type.status.reactive ? "" : "[lightgray] ~ [stat]" + ((int)(type.statusDuration / 60f)) + "[lightgray] " + Core.bundle.get("unit.seconds")));
|
||||
}
|
||||
|
||||
if(type.fragBullet != null){
|
||||
sep(bt, Core.bundle.format("bullet.frags", type.fragBullets));
|
||||
if(type.intervalBullet != null){
|
||||
bt.row();
|
||||
|
||||
ammo(ObjectMap.of(t, type.fragBullet), indent + 1, false).display(bt);
|
||||
}
|
||||
}).padTop(compact ? 0 : -9).padLeft(indent * 8).left().get().background(compact ? null : Tex.underline);
|
||||
Table ic = new Table();
|
||||
ammo(ObjectMap.of(t, type.intervalBullet), indent + 1, false).display(ic);
|
||||
Collapser coll = new Collapser(ic, true);
|
||||
coll.setDuration(0.1f);
|
||||
|
||||
bt.table(it -> {
|
||||
it.left().defaults().left();
|
||||
|
||||
it.add(Core.bundle.format("bullet.interval", Strings.autoFixed(type.intervalBullets / type.bulletInterval * 60, 2)));
|
||||
it.button(Icon.downOpen, Styles.emptyi, () -> coll.toggle(false)).update(i -> i.getStyle().imageUp = (!coll.isCollapsed() ? Icon.upOpen : Icon.downOpen)).size(8).padLeft(16f).expandX();
|
||||
});
|
||||
bt.row();
|
||||
bt.add(coll);
|
||||
}
|
||||
|
||||
if(type.fragBullet != null){
|
||||
bt.row();
|
||||
|
||||
Table fc = new Table();
|
||||
ammo(ObjectMap.of(t, type.fragBullet), indent + 1, false).display(fc);
|
||||
Collapser coll = new Collapser(fc, true);
|
||||
coll.setDuration(0.1f);
|
||||
|
||||
bt.table(ft -> {
|
||||
ft.left().defaults().left();
|
||||
|
||||
ft.add(Core.bundle.format("bullet.frags", type.fragBullets));
|
||||
ft.button(Icon.downOpen, Styles.emptyi, () -> coll.toggle(false)).update(i -> i.getStyle().imageUp = (!coll.isCollapsed() ? Icon.upOpen : Icon.downOpen)).size(8).padLeft(16f).expandX();
|
||||
});
|
||||
bt.row();
|
||||
bt.add(coll);
|
||||
}
|
||||
}).padLeft(indent * 5).padTop(5).padBottom(compact ? 0 : 5).growX().margin(compact ? 0 : 10);
|
||||
table.row();
|
||||
}
|
||||
};
|
||||
|
||||
@@ -88,6 +88,13 @@ public class LiquidModule extends BlockModule{
|
||||
current = liquid;
|
||||
}
|
||||
|
||||
public void set(Liquid liquid, float amount){
|
||||
if(amount >= liquids[current.id]){
|
||||
current = liquid;
|
||||
}
|
||||
liquids[liquid.id] = amount;
|
||||
}
|
||||
|
||||
public float currentAmount(){
|
||||
return liquids[current.id];
|
||||
}
|
||||
|
||||
@@ -187,14 +187,14 @@ public class SNet implements SteamNetworkingCallback, SteamMatchmakingCallback,
|
||||
@Override
|
||||
public void hostServer(int port) throws IOException{
|
||||
provider.hostServer(port);
|
||||
smat.createLobby(Core.settings.getBool("publichost") ? LobbyType.Public : LobbyType.FriendsOnly, Core.settings.getInt("playerlimit"));
|
||||
smat.createLobby(Core.settings.getBool("steampublichost") ? LobbyType.Public : LobbyType.FriendsOnly, Core.settings.getInt("playerlimit"));
|
||||
|
||||
Core.app.post(() -> Core.app.post(() -> Core.app.post(() -> Log.info("Server: @\nClient: @\nActive: @", net.server(), net.client(), net.active()))));
|
||||
}
|
||||
|
||||
public void updateLobby(){
|
||||
if(currentLobby != null && net.server()){
|
||||
smat.setLobbyType(currentLobby, Core.settings.getBool("publichost") ? LobbyType.Public : LobbyType.FriendsOnly);
|
||||
smat.setLobbyType(currentLobby, Core.settings.getBool("steampublichost") ? LobbyType.Public : LobbyType.FriendsOnly);
|
||||
smat.setLobbyMemberLimit(currentLobby, Core.settings.getInt("playerlimit"));
|
||||
}
|
||||
}
|
||||
|
||||
+1
-1
@@ -25,4 +25,4 @@ org.gradle.caching=true
|
||||
#used for slow jitpack builds; TODO see if this actually works
|
||||
org.gradle.internal.http.socketTimeout=100000
|
||||
org.gradle.internal.http.connectionTimeout=100000
|
||||
archash=9de902fcfe
|
||||
archash=d62ba7f6c3
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user