Compare commits
208 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 | ||
|
|
4410f31888 | ||
|
|
df11dd7a74 | ||
|
|
804dd61cd9 | ||
|
|
b00c5b4cab | ||
|
|
e0d6cebb2e | ||
|
|
ab772dccd4 | ||
|
|
b244032328 | ||
|
|
421c5e2879 | ||
|
|
1a8c4d8d8a | ||
|
|
9efb1824af | ||
|
|
74de125700 | ||
|
|
64cea34a98 | ||
|
|
9c4bdc213d | ||
|
|
92c0552fd5 | ||
|
|
ff39e5f90d | ||
|
|
83c55fdbb4 | ||
|
|
7d300a273b | ||
|
|
29f36c1927 | ||
|
|
b65c3cd931 | ||
|
|
7401e7fe31 | ||
|
|
150215712b | ||
|
|
f7ccf3c04a | ||
|
|
ebb798cac3 | ||
|
|
348819d1ac | ||
|
|
a8a3453632 | ||
|
|
9b02a274f1 | ||
|
|
f093360565 | ||
|
|
d457901d2e | ||
|
|
460dbff7d1 | ||
|
|
e564602fd1 | ||
|
|
e029321e5b | ||
|
|
87d7089df3 | ||
|
|
e4f929a851 | ||
|
|
8726cde05d | ||
|
|
a189ac8613 | ||
|
|
652aa4c456 | ||
|
|
cc3ae2c66c | ||
|
|
359e59bbad | ||
|
|
40ec7fd6fc | ||
|
|
d17f0ebc51 | ||
|
|
5027b70f5a | ||
|
|
0b7c790777 | ||
|
|
5ac9e9f63c | ||
|
|
b08136e3ea | ||
|
|
ec8262418f | ||
|
|
946e36c66e | ||
|
|
00f3518349 | ||
|
|
29bf99fe1a | ||
|
|
e104591dec | ||
|
|
0fd26e68d4 | ||
|
|
53f410fee0 | ||
|
|
53206e4b31 | ||
|
|
3818bfffb4 | ||
|
|
e6afc6ef0b | ||
|
|
5eb1c1dffc | ||
|
|
66406806b7 | ||
|
|
3a6debfae6 | ||
|
|
a093fa5718 | ||
|
|
9c1f17fbdd | ||
|
|
ce3643f0b3 | ||
|
|
f1fb7d8098 | ||
|
|
3d01eeaf1c | ||
|
|
be39c31865 | ||
|
|
0d2dfadba7 | ||
|
|
2dcab97b6d | ||
|
|
31cb169002 | ||
|
|
c381499c58 | ||
|
|
8577a8cca4 | ||
|
|
7a18c4a580 | ||
|
|
40589eb9ff | ||
|
|
722370b57c | ||
|
|
573672622a | ||
|
|
12f747ae1d | ||
|
|
395dc99595 | ||
|
|
c945243795 | ||
|
|
c2262cc9cf | ||
|
|
411399e96f | ||
|
|
f833b9e0ce | ||
|
|
9955423e9a | ||
|
|
58b4265b31 | ||
|
|
671a62aed7 | ||
|
|
c94fe9c312 | ||
|
|
f46a9730a3 | ||
|
|
d45cd7c15e | ||
|
|
a84d52f5fe | ||
|
|
330d37b7a5 | ||
|
|
d2792a4e9d | ||
|
|
c50a69d42a | ||
|
|
ee689d1597 | ||
|
|
6ef8d64d46 | ||
|
|
0095e89673 | ||
|
|
55d97ea202 | ||
|
|
85b8868d2b | ||
|
|
65e92ab6fc | ||
|
|
478baf2532 | ||
|
|
0750348cb1 | ||
|
|
db6cbc5cc3 | ||
|
|
b4359c0489 | ||
|
|
977192bc54 | ||
|
|
d54b557a9f | ||
|
|
f6c97f4ff6 | ||
|
|
66f4118896 | ||
|
|
4a8f8c4ecf | ||
|
|
6d7c207b95 | ||
|
|
597bd31a0c | ||
|
|
98157f2852 | ||
|
|
5e324e71d4 | ||
|
|
3159ce6707 | ||
|
|
9b033532c8 | ||
|
|
0678592d59 | ||
|
|
00d6b0d483 | ||
|
|
598049265a | ||
|
|
c3209f2cdd | ||
|
|
b2b4602c91 | ||
|
|
b1e1fe4922 | ||
|
|
edcf3c4223 | ||
|
|
58315acfa3 | ||
|
|
ec9eadd660 | ||
|
|
7277892e33 | ||
|
|
54962a158d | ||
|
|
30dcbe1af3 |
2
.github/workflows/deployment.yml
vendored
2
.github/workflows/deployment.yml
vendored
@@ -23,6 +23,8 @@ jobs:
|
|||||||
run: echo "RELEASE_VERSION=${GITHUB_REF#refs/*/}" >> $GITHUB_ENV
|
run: echo "RELEASE_VERSION=${GITHUB_REF#refs/*/}" >> $GITHUB_ENV
|
||||||
- name: Add Arc release
|
- name: Add Arc release
|
||||||
run: |
|
run: |
|
||||||
|
git config --global user.email "actions@github.com"
|
||||||
|
git config --global user.name "Github Actions"
|
||||||
git clone --depth=1 --branch=master https://github.com/Anuken/Arc ../Arc
|
git clone --depth=1 --branch=master https://github.com/Anuken/Arc ../Arc
|
||||||
cd ../Arc
|
cd ../Arc
|
||||||
git tag ${RELEASE_VERSION}
|
git tag ${RELEASE_VERSION}
|
||||||
|
|||||||
@@ -9,7 +9,7 @@ You may want to add your server to this list. The steps for getting this done ar
|
|||||||
1. **Ensure your server is properly moderated.** For the most part, this applies to survival servers, but PvP servers can be affected as well.
|
1. **Ensure your server is properly moderated.** For the most part, this applies to survival servers, but PvP servers can be affected as well.
|
||||||
You'll need to either hire some moderators, or make use of (currently non-existent) anti-grief and anti-curse plugins.
|
You'll need to either hire some moderators, or make use of (currently non-existent) anti-grief and anti-curse plugins.
|
||||||
*Consider enabling a rate limit:* `config messageRateLimit 2` will make it so that players can only send messages every 2 seconds, for example.
|
*Consider enabling a rate limit:* `config messageRateLimit 2` will make it so that players can only send messages every 2 seconds, for example.
|
||||||
2. Make sure that your server is able to handle inappropriate content - this includes NSFW display/sorter art and abusive messages. **Servers that allow such content will be removed immediately.** Consider banning display blocks if it is a problem for your server: `rules add bannedBlocks ["logic-display", "large-logic-display"]`.
|
2. Make sure that your server is able to handle inappropriate content - this includes NSFW display/sorter art and abusive messages. **Servers that allow such content will be removed immediately.** Consider banning display blocks if it is a problem for your server: `rules add bannedBlocks ["canvas", "logic-display", "large-logic-display"]`.
|
||||||
3. **Set an appropriate MOTD, name and description.** This is set with `config <name/desc/motd> <value>`. "Appropriate" means that:
|
3. **Set an appropriate MOTD, name and description.** This is set with `config <name/desc/motd> <value>`. "Appropriate" means that:
|
||||||
- Your name or description must reflect the type of server you're hosting.
|
- Your name or description must reflect the type of server you're hosting.
|
||||||
Since new players may be exposed to the server list early on, put in a phrase like "Co-op survival" or "PvP" so players know what they're getting into. Yes, this is also displayed in the server mode info text, but having extra info in the name doesn't hurt.
|
Since new players may be exposed to the server list early on, put in a phrase like "Co-op survival" or "PvP" so players know what they're getting into. Yes, this is also displayed in the server mode info text, but having extra info in the name doesn't hurt.
|
||||||
@@ -19,10 +19,12 @@ You'll need to either hire some moderators, or make use of (currently non-existe
|
|||||||
5. **Check your server configuration.** *(optional)* I would recommend adding a message rate limit of 1 second (`config messageRateLimit 1`), and disabling connect/disconnect messages to reduce spam (`config showConnectMessages false`).
|
5. **Check your server configuration.** *(optional)* I would recommend adding a message rate limit of 1 second (`config messageRateLimit 1`), and disabling connect/disconnect messages to reduce spam (`config showConnectMessages false`).
|
||||||
6. Finally, **submit a pull request** to add your server's IP to the list.
|
6. Finally, **submit a pull request** to add your server's IP to the list.
|
||||||
This should be fairly straightforward: Press the edit button on the [server file](https://github.com/Anuken/Mindustry/blob/master/servers_v6.json), then add a JSON object with a single key, indicating your server address.
|
This should be fairly straightforward: Press the edit button on the [server file](https://github.com/Anuken/Mindustry/blob/master/servers_v6.json), then add a JSON object with a single key, indicating your server address.
|
||||||
For example, if your server address is `google.com`, you would add a comma after the last entry and insert:
|
For example, if your server address is `example.com:6000`, you would add a comma after the last entry and insert:
|
||||||
```json
|
```json
|
||||||
{
|
{
|
||||||
"address": "google.com"
|
"address": "example.com:6000"
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
Then, press the *'submit pull request'* button and I'll take a look at your server. If I have any issues with it, I'll let you know in the PR comments.
|
> Note that Mindustry also support SRV records. This allows you to use a subdomain for your server address instead of specifying the port. For example, if you want to use `play.example.com` instead of `example.com:6000`, in the dns settings of your domain, add an SRV record with `_mindustry` as the service, `tcp` as the protocol, `play` as the target and `6000` as the port. You can also setup fallback servers by modifying the weight or priority of the record. Although SRV records are very convenient, keep in mind they are slower than regular addresses. Avoid using them in the server list, but rather as an easy way to share your server address.
|
||||||
|
|
||||||
|
Then, press the *'submit pull request'* button and I'll take a look at your server. If I have any issues with it, I'll let you know in the PR comments.
|
||||||
|
|||||||
@@ -150,12 +150,16 @@ mod.incompatiblemod = [red]Incompatible
|
|||||||
mod.blacklisted = [red]Unsupported
|
mod.blacklisted = [red]Unsupported
|
||||||
mod.unmetdependencies = [red]Unmet Dependencies
|
mod.unmetdependencies = [red]Unmet Dependencies
|
||||||
mod.erroredcontent = [red]Content Errors
|
mod.erroredcontent = [red]Content Errors
|
||||||
|
mod.circulardependencies = [red]Circular Dependencies
|
||||||
|
mod.incompletedependencies = [red]Incomplete Dependencies
|
||||||
|
|
||||||
mod.requiresversion.details = Requires game version: [accent]{0}[]\nYour game is outdated. This mod requires a newer version of the game (possibly a beta/alpha release) to function.
|
mod.requiresversion.details = Requires game version: [accent]{0}[]\nYour game is outdated. This mod requires a newer version of the game (possibly a beta/alpha release) to function.
|
||||||
mod.outdatedv7.details = This mod is incompatible with the latest version of the game. The author must update it, and add [accent]minGameVersion: 136[] to its [accent]mod.json[] file.
|
mod.outdatedv7.details = This mod is incompatible with the latest version of the game. The author must update it, and add [accent]minGameVersion: 136[] to its [accent]mod.json[] file.
|
||||||
mod.blacklisted.details = This mod has been manually blacklisted for causing crashes or other issues with this version of the game. Do not use it.
|
mod.blacklisted.details = This mod has been manually blacklisted for causing crashes or other issues with this version of the game. Do not use it.
|
||||||
mod.missingdependencies.details = This mod is missing dependencies: {0}
|
mod.missingdependencies.details = This mod is missing dependencies: {0}
|
||||||
mod.erroredcontent.details = This mod caused errors when loading. Ask the mod author to fix them.
|
mod.erroredcontent.details = This mod caused errors when loading. Ask the mod author to fix them.
|
||||||
|
mod.circulardependencies.details = This mod has dependencies that depends on each other.
|
||||||
|
mod.incompletedependencies.details = This mod is unable to be loaded due to invalid or missing dependencies: {0}.
|
||||||
|
|
||||||
mod.requiresversion = Requires game version: [red]{0}
|
mod.requiresversion = Requires game version: [red]{0}
|
||||||
|
|
||||||
@@ -335,6 +339,7 @@ command.repair = Repair
|
|||||||
command.rebuild = Rebuild
|
command.rebuild = Rebuild
|
||||||
command.assist = Assist Player
|
command.assist = Assist Player
|
||||||
command.move = Move
|
command.move = Move
|
||||||
|
command.boost = Boost
|
||||||
openlink = Open Link
|
openlink = Open Link
|
||||||
copylink = Copy Link
|
copylink = Copy Link
|
||||||
back = Back
|
back = Back
|
||||||
@@ -947,7 +952,7 @@ ability.unitspawn = {0} Factory
|
|||||||
ability.shieldregenfield = Shield Regen Field
|
ability.shieldregenfield = Shield Regen Field
|
||||||
ability.movelightning = Movement Lightning
|
ability.movelightning = Movement Lightning
|
||||||
ability.shieldarc = Shield Arc
|
ability.shieldarc = Shield Arc
|
||||||
ability.suppressionfield = Regen Suppression Field
|
ability.suppressionfield = Repair Suppression Field
|
||||||
ability.energyfield = Energy Field: [accent]{0}[] damage ~ [accent]{1}[] blocks / [accent]{2}[] targets
|
ability.energyfield = Energy Field: [accent]{0}[] damage ~ [accent]{1}[] blocks / [accent]{2}[] targets
|
||||||
|
|
||||||
bar.onlycoredeposit = Only Core Depositing Allowed
|
bar.onlycoredeposit = Only Core Depositing Allowed
|
||||||
@@ -984,10 +989,12 @@ bar.strength = [stat]{0}[lightgray]x strength
|
|||||||
units.processorcontrol = [lightgray]Processor Controlled
|
units.processorcontrol = [lightgray]Processor Controlled
|
||||||
|
|
||||||
bullet.damage = [stat]{0}[lightgray] damage
|
bullet.damage = [stat]{0}[lightgray] damage
|
||||||
bullet.splashdamage = [stat]{0}[lightgray] area dmg ~[stat] {1}[lightgray] tiles
|
bullet.splashdamage = [stat]{0}[lightgray] area dmg ~ [stat]{1}[lightgray] tiles
|
||||||
bullet.incendiary = [stat]incendiary
|
bullet.incendiary = [stat]incendiary
|
||||||
bullet.homing = [stat]homing
|
bullet.homing = [stat]homing
|
||||||
bullet.armorpierce = [stat]armor piercing
|
bullet.armorpierce = [stat]armor piercing
|
||||||
|
bullet.suppression = [stat]{0}[lightgray] seconds of repair suppression ~ [stat]{1}[lightgray] tiles
|
||||||
|
bullet.interval = [stat]{0}/sec[lightgray] interval bullets:
|
||||||
bullet.frags = [stat]{0}[lightgray]x frag bullets:
|
bullet.frags = [stat]{0}[lightgray]x frag bullets:
|
||||||
bullet.lightning = [stat]{0}[lightgray]x lightning ~ [stat]{1}[lightgray] damage
|
bullet.lightning = [stat]{0}[lightgray]x lightning ~ [stat]{1}[lightgray] damage
|
||||||
bullet.buildingdamage = [stat]{0}%[lightgray] building damage
|
bullet.buildingdamage = [stat]{0}%[lightgray] building damage
|
||||||
@@ -1101,8 +1108,8 @@ setting.bridgeopacity.name = Bridge Opacity
|
|||||||
setting.playerchat.name = Display Player Bubble Chat
|
setting.playerchat.name = Display Player Bubble Chat
|
||||||
setting.showweather.name = Show Weather Graphics
|
setting.showweather.name = Show Weather Graphics
|
||||||
setting.hidedisplays.name = Hide Logic Displays
|
setting.hidedisplays.name = Hide Logic Displays
|
||||||
public.confirm = Do you want to make your game public?\n[accent]Anyone will be able to join your games.\n[lightgray]This can be changed later in Settings->Game->Public Game Visibility.
|
steam.friendsonly = Friends Only
|
||||||
public.confirm.really = If you want to play with friends, use [green]Invite Friend[] instead of a [scarlet]Public server[]!\nAre you sure you want to make your game [scarlet]public[]?
|
steam.friendsonly.tooltip = Whether only Steam friends will be able to join your game.\nUnchecking this box will make your game public - anyone can join.
|
||||||
public.beta = Note that beta versions of the game cannot make public lobbies.
|
public.beta = Note that beta versions of the game cannot make public lobbies.
|
||||||
uiscale.reset = UI scale has been changed.\nPress "OK" to confirm this scale.\n[scarlet]Reverting and exiting in[accent] {0}[] seconds...
|
uiscale.reset = UI scale has been changed.\nPress "OK" to confirm this scale.\n[scarlet]Reverting and exiting in[accent] {0}[] seconds...
|
||||||
uiscale.cancel = Cancel & Exit
|
uiscale.cancel = Cancel & Exit
|
||||||
@@ -1154,8 +1161,8 @@ keybind.select.name = Select/Shoot
|
|||||||
keybind.diagonal_placement.name = Diagonal Placement
|
keybind.diagonal_placement.name = Diagonal Placement
|
||||||
keybind.pick.name = Pick Block
|
keybind.pick.name = Pick Block
|
||||||
keybind.break_block.name = Break Block
|
keybind.break_block.name = Break Block
|
||||||
keybind.select_all_units = Select All Units
|
keybind.select_all_units.name = Select All Units
|
||||||
keybind.select_all_unit_factories = Select All Unit Factories
|
keybind.select_all_unit_factories.name = Select All Unit Factories
|
||||||
keybind.deselect.name = Deselect
|
keybind.deselect.name = Deselect
|
||||||
keybind.pickupCargo.name = Pickup Cargo
|
keybind.pickupCargo.name = Pickup Cargo
|
||||||
keybind.dropCargo.name = Drop Cargo
|
keybind.dropCargo.name = Drop Cargo
|
||||||
@@ -2228,6 +2235,7 @@ lst.flushmessage = Display a message on the screen from the text buffer.\nWill w
|
|||||||
lst.cutscene = Manipulate the player camera.
|
lst.cutscene = Manipulate the player camera.
|
||||||
lst.setflag = Set a global flag that can be read by all processors.
|
lst.setflag = Set a global flag that can be read by all processors.
|
||||||
lst.getflag = Check if a global flag is set.
|
lst.getflag = Check if a global flag is set.
|
||||||
|
lst.setprop = Sets a property of a unit or building.
|
||||||
|
|
||||||
logic.nounitbuild = [red]Unit building logic is not allowed here.
|
logic.nounitbuild = [red]Unit building logic is not allowed here.
|
||||||
|
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
@@ -149,11 +149,15 @@ mod.incompatiblemod = [red]Incompatible
|
|||||||
mod.blacklisted = [red]Unsupported
|
mod.blacklisted = [red]Unsupported
|
||||||
mod.unmetdependencies = [red]Unmet Dependencies
|
mod.unmetdependencies = [red]Unmet Dependencies
|
||||||
mod.erroredcontent = [scarlet]Грешки в Съдържанието
|
mod.erroredcontent = [scarlet]Грешки в Съдържанието
|
||||||
|
mod.circulardependencies = [red]Circular Dependencies
|
||||||
|
mod.incompletedependencies = [red]Incomplete Dependencies
|
||||||
mod.requiresversion.details = Requires game version: [accent]{0}[]\nYour game is outdated. This mod requires a newer version of the game (possibly a beta/alpha release) to function.
|
mod.requiresversion.details = Requires game version: [accent]{0}[]\nYour game is outdated. This mod requires a newer version of the game (possibly a beta/alpha release) to function.
|
||||||
mod.outdatedv7.details = This mod is incompatible with the latest version of the game. The author must update it, and add [accent]minGameVersion: 136[] to its [accent]mod.json[] file.
|
mod.outdatedv7.details = This mod is incompatible with the latest version of the game. The author must update it, and add [accent]minGameVersion: 136[] to its [accent]mod.json[] file.
|
||||||
mod.blacklisted.details = This mod has been manually blacklisted for causing crashes or other issues with this version of the game. Do not use it.
|
mod.blacklisted.details = This mod has been manually blacklisted for causing crashes or other issues with this version of the game. Do not use it.
|
||||||
mod.missingdependencies.details = This mod is missing dependencies: {0}
|
mod.missingdependencies.details = This mod is missing dependencies: {0}
|
||||||
mod.erroredcontent.details = This game caused errors when loading. Ask the mod author to fix them.
|
mod.erroredcontent.details = This game caused errors when loading. Ask the mod author to fix them.
|
||||||
|
mod.circulardependencies.details = This mod has dependencies that depends on each other.
|
||||||
|
mod.incompletedependencies.details = This mod is unable to be loaded due to invalid or missing dependencies: {0}.
|
||||||
mod.requiresversion = Requires game version: [red]{0}
|
mod.requiresversion = Requires game version: [red]{0}
|
||||||
mod.errors = Възникнаха грешки при зареждане на съдържанието.
|
mod.errors = Възникнаха грешки при зареждане на съдържанието.
|
||||||
mod.noerrorplay = [scarlet]Има грешки в някои от модовете, които използвате.[] Трябва да деактивирате тези модове или да поправите грешките преди да играете.
|
mod.noerrorplay = [scarlet]Има грешки в някои от модовете, които използвате.[] Трябва да деактивирате тези модове или да поправите грешките преди да играете.
|
||||||
@@ -331,6 +335,7 @@ command.repair = Repair
|
|||||||
command.rebuild = Rebuild
|
command.rebuild = Rebuild
|
||||||
command.assist = Assist Player
|
command.assist = Assist Player
|
||||||
command.move = Move
|
command.move = Move
|
||||||
|
command.boost = Boost
|
||||||
openlink = Отвори Линк
|
openlink = Отвори Линк
|
||||||
copylink = Копирай Линк
|
copylink = Копирай Линк
|
||||||
back = Назад
|
back = Назад
|
||||||
@@ -974,6 +979,8 @@ bullet.splashdamage = [stat]{0}[lightgray] щети на площ ~[stat] {1}[li
|
|||||||
bullet.incendiary = [stat]Подпалване
|
bullet.incendiary = [stat]Подпалване
|
||||||
bullet.homing = [stat]Самонасочване
|
bullet.homing = [stat]Самонасочване
|
||||||
bullet.armorpierce = [stat]armor piercing
|
bullet.armorpierce = [stat]armor piercing
|
||||||
|
bullet.suppression = [stat]{0} sec[lightgray] repair suppression ~ [stat]{1}[lightgray] tiles
|
||||||
|
bullet.interval = [stat]{0}/sec[lightgray] interval bullets:
|
||||||
bullet.frags = [stat]{0}[lightgray]x frag bullets:
|
bullet.frags = [stat]{0}[lightgray]x frag bullets:
|
||||||
bullet.lightning = [stat]{0}[lightgray]x светкавица ~ [stat]{1}[lightgray] щети
|
bullet.lightning = [stat]{0}[lightgray]x светкавица ~ [stat]{1}[lightgray] щети
|
||||||
bullet.buildingdamage = [stat]{0}%[lightgray] щети на сгради
|
bullet.buildingdamage = [stat]{0}%[lightgray] щети на сгради
|
||||||
@@ -1087,8 +1094,8 @@ setting.bridgeopacity.name = Плътност на Мостовете
|
|||||||
setting.playerchat.name = Показвай Мехурчета с Чат
|
setting.playerchat.name = Показвай Мехурчета с Чат
|
||||||
setting.showweather.name = Показвай Графики за Климата
|
setting.showweather.name = Показвай Графики за Климата
|
||||||
setting.hidedisplays.name = Hide Logic Displays
|
setting.hidedisplays.name = Hide Logic Displays
|
||||||
public.confirm = Искате ли да направите вашата игра публична?\n[accent]Всеки ще може да се присъедини към вашата игра.\n[lightgray]Това може да бъде променено по-късно в Настройки->Игри->Видимост на Публичните Игри.
|
steam.friendsonly = Friends Only
|
||||||
public.confirm.really = Ако искате да играете с приятел, използвате [green]Покани Приятел[] вместо [scarlet]Публикувай Сървър[]!\nСигурни ли сте, че искате да направите вашата игра [scarlet]публична[]?
|
steam.friendsonly.tooltip = Whether only Steam friends will be able to join your game.\nUnchecking this box will make your game public - anyone can join.
|
||||||
public.beta = Имайте в предвид, че бета версии на играта не могат да стартират публични игри.
|
public.beta = Имайте в предвид, че бета версии на играта не могат да стартират публични игри.
|
||||||
uiscale.reset = Размерът на интерфейса беше променен.\nНатиснете "ОК" за да потвърдите този размер.\n[scarlet]Възстановяване и рестартиране след[accent] {0}[] секунди...
|
uiscale.reset = Размерът на интерфейса беше променен.\nНатиснете "ОК" за да потвърдите този размер.\n[scarlet]Възстановяване и рестартиране след[accent] {0}[] секунди...
|
||||||
uiscale.cancel = Отакз & Изход
|
uiscale.cancel = Отакз & Изход
|
||||||
@@ -1140,8 +1147,8 @@ keybind.select.name = Избери/Стреляй
|
|||||||
keybind.diagonal_placement.name = Диагонално Поставяне
|
keybind.diagonal_placement.name = Диагонално Поставяне
|
||||||
keybind.pick.name = Вземи Блок
|
keybind.pick.name = Вземи Блок
|
||||||
keybind.break_block.name = Унищожи Блок
|
keybind.break_block.name = Унищожи Блок
|
||||||
keybind.select_all_units = Select All Units
|
keybind.select_all_units.name = Select All Units
|
||||||
keybind.select_all_unit_factories = Select All Unit Factories
|
keybind.select_all_unit_factories.name = Select All Unit Factories
|
||||||
keybind.deselect.name = Премахни избора
|
keybind.deselect.name = Премахни избора
|
||||||
keybind.pickupCargo.name = Вземи Товар
|
keybind.pickupCargo.name = Вземи Товар
|
||||||
keybind.dropCargo.name = Остави Товар
|
keybind.dropCargo.name = Остави Товар
|
||||||
@@ -2195,6 +2202,7 @@ lst.flushmessage = Display a message on the screen from the text buffer.\nWill w
|
|||||||
lst.cutscene = Manipulate the player camera.
|
lst.cutscene = Manipulate the player camera.
|
||||||
lst.setflag = Set a global flag that can be read by all processors.
|
lst.setflag = Set a global flag that can be read by all processors.
|
||||||
lst.getflag = Check if a global flag is set.
|
lst.getflag = Check if a global flag is set.
|
||||||
|
lst.setprop = Sets a property of a unit or building.
|
||||||
|
|
||||||
logic.nounitbuild = [red]Действия за строене на единици не са позволени тук.
|
logic.nounitbuild = [red]Действия за строене на единици не са позволени тук.
|
||||||
|
|
||||||
|
|||||||
@@ -149,11 +149,15 @@ mod.incompatiblemod = [red]Incompatible
|
|||||||
mod.blacklisted = [red]Unsupported
|
mod.blacklisted = [red]Unsupported
|
||||||
mod.unmetdependencies = [red]Depèndencies sense resoldre
|
mod.unmetdependencies = [red]Depèndencies sense resoldre
|
||||||
mod.erroredcontent = [scarlet]Errors del contingut
|
mod.erroredcontent = [scarlet]Errors del contingut
|
||||||
|
mod.circulardependencies = [red]Dependències circulars
|
||||||
|
mod.incompletedependencies = [red]Dependències incompletes
|
||||||
mod.requiresversion.details = Requereix la versió: [accent]{0}[]\nCal actualitzar la vostra versió del joc. El mod necessita una versió nova (potser una distribució alfa o beta) per a funcionar.
|
mod.requiresversion.details = Requereix la versió: [accent]{0}[]\nCal actualitzar la vostra versió del joc. El mod necessita una versió nova (potser una distribució alfa o beta) per a funcionar.
|
||||||
mod.outdatedv7.details = Aquest mod és incompatible amb l’última versió del joc. L’autor l’ha d’actualitzar i afegir [accent]minGameVersion: 136[] al seu fitxer [accent]mod.json[].
|
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.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.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.erroredcontent.details = Aquesta partida ha causat errors mentre es carregava. Pregunteu a l’autor del mod si pot arreglar-ho.
|
||||||
|
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.requiresversion = Cal la versió [red]{0}[] del joc.
|
||||||
mod.errors = S’han produït errors quan es carregava el contingut.
|
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.
|
mod.noerrorplay = [scarlet]S’executen mods amb errors.[] Desactiveu els mods afectats o arregleu les errades abans de jugar.
|
||||||
@@ -331,6 +335,7 @@ command.repair = Repara
|
|||||||
command.rebuild = Reconstrueix
|
command.rebuild = Reconstrueix
|
||||||
command.assist = Assisteix al jugador
|
command.assist = Assisteix al jugador
|
||||||
command.move = Mou
|
command.move = Mou
|
||||||
|
command.boost = Sobrevola
|
||||||
openlink = Obre l’enllaç
|
openlink = Obre l’enllaç
|
||||||
copylink = Copia l’enllaç
|
copylink = Copia l’enllaç
|
||||||
back = Enrere
|
back = Enrere
|
||||||
@@ -486,7 +491,7 @@ editor.generate = Genera
|
|||||||
editor.sectorgenerate = Generació del sector
|
editor.sectorgenerate = Generació del sector
|
||||||
editor.resize = Canvia la mida
|
editor.resize = Canvia la mida
|
||||||
editor.loadmap = Carrega un mapa
|
editor.loadmap = Carrega un mapa
|
||||||
editor.savemap = Desa un mapa
|
editor.savemap = Desa el mapa
|
||||||
editor.saved = S’ha desat.
|
editor.saved = S’ha desat.
|
||||||
editor.save.noname = El mapa no té nom! Trieu-ne un des del menú «Informació del mapa».
|
editor.save.noname = El mapa no té nom! Trieu-ne un des del menú «Informació del mapa».
|
||||||
editor.save.overwrite = El vostre mapa sobreescriu un mapa incorporat al joc! Trieu un nom diferent des del menú «Informació del mapa».
|
editor.save.overwrite = El vostre mapa sobreescriu un mapa incorporat al joc! Trieu un nom diferent des del menú «Informació del mapa».
|
||||||
@@ -978,6 +983,8 @@ bullet.splashdamage = [stat]{0}[lightgray] de dany a l’àrea ~[stat] {1}[light
|
|||||||
bullet.incendiary = [stat]incendiari
|
bullet.incendiary = [stat]incendiari
|
||||||
bullet.homing = [stat]munició guiada
|
bullet.homing = [stat]munició guiada
|
||||||
bullet.armorpierce = [stat]perforador d’armadures
|
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.frags = [stat]{0}[lightgray]× de bales de fragmentació:
|
||||||
bullet.lightning = [stat]{0}[lightgray]× llampec ~ [stat]{1}[lightgray] de dany
|
bullet.lightning = [stat]{0}[lightgray]× llampec ~ [stat]{1}[lightgray] de dany
|
||||||
bullet.buildingdamage = [stat]{0}%[lightgray] de dany a les estructures
|
bullet.buildingdamage = [stat]{0}%[lightgray] de dany a les estructures
|
||||||
@@ -1091,8 +1098,8 @@ setting.bridgeopacity.name = Opacitat de cintes i canonades subterrànies
|
|||||||
setting.playerchat.name = Mostra el xat bombolla de jugadors
|
setting.playerchat.name = Mostra el xat bombolla de jugadors
|
||||||
setting.showweather.name = Mostra l’estat meteorològic
|
setting.showweather.name = Mostra l’estat meteorològic
|
||||||
setting.hidedisplays.name = Amaga els monitors lògics
|
setting.hidedisplays.name = Amaga els monitors lògics
|
||||||
public.confirm = Voleu que la vostra partida sigui pública?\n[accent]Qualsevol jugador s’hi podrà unir.\n[lightgray]Després es pot canviar a Configuració→Partida→Visibilitat de la partida pública.
|
steam.friendsonly = Friends Only
|
||||||
public.confirm.really = Si voleu jugar amb els vostres amics, feu servir [green]Invita un amic[] en lloc d’emprar un [scarlet]servidor públic[]!\nEsteu segur que voleu que la partida sigui [scarlet]pública[]?
|
steam.friendsonly.tooltip = Whether only Steam friends will be able to join your game.\nUnchecking this box will make your game public - anyone can join.
|
||||||
public.beta = Tingueu en compte que les versions beta no disposen de sales d’espera.
|
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.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
|
uiscale.cancel = Cancel·la i surt
|
||||||
@@ -1144,8 +1151,8 @@ keybind.select.name = Selecciona/Dispara
|
|||||||
keybind.diagonal_placement.name = Construcció diagonal
|
keybind.diagonal_placement.name = Construcció diagonal
|
||||||
keybind.pick.name = Selecciona un tipus de bloc des del mapa
|
keybind.pick.name = Selecciona un tipus de bloc des del mapa
|
||||||
keybind.break_block.name = Desmunta un bloc
|
keybind.break_block.name = Desmunta un bloc
|
||||||
keybind.select_all_units = Selecciona totes les unitats
|
keybind.select_all_units.name = Selecciona totes les unitats
|
||||||
keybind.select_all_unit_factories = Selecciona totes les unitats fabricadores
|
keybind.select_all_unit_factories.name = Selecciona totes les unitats fabricadores
|
||||||
keybind.deselect.name = Cancel·la la selecció
|
keybind.deselect.name = Cancel·la la selecció
|
||||||
keybind.pickupCargo.name = Recull càrrega
|
keybind.pickupCargo.name = Recull càrrega
|
||||||
keybind.dropCargo.name = Deixa la càrrega
|
keybind.dropCargo.name = Deixa la càrrega
|
||||||
@@ -1207,7 +1214,7 @@ rules.unitbuildspeedmultiplier = Multiplicador de la velocitat de producció d
|
|||||||
rules.unitcostmultiplier = Multiplicador del cost de les unitats
|
rules.unitcostmultiplier = Multiplicador del cost de les unitats
|
||||||
rules.unithealthmultiplier = Multiplicador de la salut de les unitats
|
rules.unithealthmultiplier = Multiplicador de la salut de les unitats
|
||||||
rules.unitdamagemultiplier = Multiplicador del dany de les unitats
|
rules.unitdamagemultiplier = Multiplicador del dany de les unitats
|
||||||
rules.unitcrashdamagemultiplier = Unit Crash Damage Multiplier
|
rules.unitcrashdamagemultiplier = Multiplicador del dany de xoc de les unitats
|
||||||
rules.solarmultiplier = Multiplicador de l’energia solar
|
rules.solarmultiplier = Multiplicador de l’energia solar
|
||||||
rules.unitcapvariable = Els nuclis contribueixen al límit d’unitats
|
rules.unitcapvariable = Els nuclis contribueixen al límit d’unitats
|
||||||
rules.unitcap = Capacitat base d’unitats
|
rules.unitcap = Capacitat base d’unitats
|
||||||
@@ -1378,7 +1385,7 @@ block.scrap-wall-large.name = Mur de ferralla gros
|
|||||||
block.scrap-wall-huge.name = Mur de ferralla enorme
|
block.scrap-wall-huge.name = Mur de ferralla enorme
|
||||||
block.scrap-wall-gigantic.name = Mur de ferralla gegantí
|
block.scrap-wall-gigantic.name = Mur de ferralla gegantí
|
||||||
block.thruster.name = Propulsor
|
block.thruster.name = Propulsor
|
||||||
block.kiln.name = Kiln
|
block.kiln.name = Forn de vidre
|
||||||
block.graphite-press.name = Premsa de grafit
|
block.graphite-press.name = Premsa de grafit
|
||||||
block.multi-press.name = Premsa múltiple
|
block.multi-press.name = Premsa múltiple
|
||||||
block.constructing = {0} [lightgray](Construint)
|
block.constructing = {0} [lightgray](Construint)
|
||||||
@@ -1460,7 +1467,7 @@ block.distributor.name = Distrïbudor
|
|||||||
block.sorter.name = Classificador
|
block.sorter.name = Classificador
|
||||||
block.inverted-sorter.name = Classificador invers
|
block.inverted-sorter.name = Classificador invers
|
||||||
block.message.name = Missatge
|
block.message.name = Missatge
|
||||||
block.reinforced-message.name = Missatge remarcat
|
block.reinforced-message.name = Missatge destacat
|
||||||
block.world-message.name = Missatge mundial
|
block.world-message.name = Missatge mundial
|
||||||
block.illuminator.name = Il·luminador
|
block.illuminator.name = Il·luminador
|
||||||
block.overflow-gate.name = Porta de desbordament
|
block.overflow-gate.name = Porta de desbordament
|
||||||
@@ -1872,7 +1879,7 @@ liquid.neoplasm.details = Neoplasma. Una massa incontrolable de cèl·lules sint
|
|||||||
block.derelict = \uf77e [lightgray]En ruïnes
|
block.derelict = \uf77e [lightgray]En ruïnes
|
||||||
block.armored-conveyor.description = Mou objectes. Pels laterals només accepta entrades des d’altres cintes transportadores.
|
block.armored-conveyor.description = Mou objectes. Pels laterals només accepta entrades des d’altres cintes transportadores.
|
||||||
block.illuminator.description = Emet llum.
|
block.illuminator.description = Emet llum.
|
||||||
block.message.description = Emmagatzema un missatge. Els aliats ho poden fer servir per a comunicar-se.
|
block.message.description = Emmagatzema un missatge. Els aliats el poden fer servir per a comunicar-se.
|
||||||
block.reinforced-message.description = Emmagatzema un missatge que serveix per a què els aliats es puguin comunicar.
|
block.reinforced-message.description = Emmagatzema un missatge que serveix per a què els aliats es puguin comunicar.
|
||||||
block.world-message.description = Un bloc de missatge que es far servir per a fer mapes. No es pot destruir.
|
block.world-message.description = Un bloc de missatge que es far servir per a fer mapes. No es pot destruir.
|
||||||
block.graphite-press.description = Comprimeix carbó fins obtenir-ne grafit.
|
block.graphite-press.description = Comprimeix carbó fins obtenir-ne grafit.
|
||||||
@@ -2206,6 +2213,7 @@ lst.flushmessage = Mostra un missatge a la pantalla a partir dels continguts de
|
|||||||
lst.cutscene = Manipula la càmera del jugador.
|
lst.cutscene = Manipula la càmera del jugador.
|
||||||
lst.setflag = Estableix un senyal global que es podrà llegir en tots els processadors.
|
lst.setflag = Estableix un senyal global que es podrà llegir en tots els processadors.
|
||||||
lst.getflag = Obtén un senyal global.
|
lst.getflag = Obtén un senyal global.
|
||||||
|
lst.setprop = Sets a property of a unit or building.
|
||||||
|
|
||||||
logic.nounitbuild = [red]Aquí no es permet construir blocs de tipus lògic.
|
logic.nounitbuild = [red]Aquí no es permet construir blocs de tipus lògic.
|
||||||
|
|
||||||
|
|||||||
@@ -149,11 +149,15 @@ mod.incompatiblemod = [red]Incompatible
|
|||||||
mod.blacklisted = [red]Unsupported
|
mod.blacklisted = [red]Unsupported
|
||||||
mod.unmetdependencies = [red]Unmet Dependencies
|
mod.unmetdependencies = [red]Unmet Dependencies
|
||||||
mod.erroredcontent = [scarlet]V obsahu jsou chyby[]
|
mod.erroredcontent = [scarlet]V obsahu jsou chyby[]
|
||||||
|
mod.circulardependencies = [red]Circular Dependencies
|
||||||
|
mod.incompletedependencies = [red]Incomplete Dependencies
|
||||||
mod.requiresversion.details = Requires game version: [accent]{0}[]\nYour game is outdated. This mod requires a newer version of the game (possibly a beta/alpha release) to function.
|
mod.requiresversion.details = Requires game version: [accent]{0}[]\nYour game is outdated. This mod requires a newer version of the game (possibly a beta/alpha release) to function.
|
||||||
mod.outdatedv7.details = This mod is incompatible with the latest version of the game. The author must update it, and add [accent]minGameVersion: 136[] to its [accent]mod.json[] file.
|
mod.outdatedv7.details = This mod is incompatible with the latest version of the game. The author must update it, and add [accent]minGameVersion: 136[] to its [accent]mod.json[] file.
|
||||||
mod.blacklisted.details = This mod has been manually blacklisted for causing crashes or other issues with this version of the game. Do not use it.
|
mod.blacklisted.details = This mod has been manually blacklisted for causing crashes or other issues with this version of the game. Do not use it.
|
||||||
mod.missingdependencies.details = This mod is missing dependencies: {0}
|
mod.missingdependencies.details = This mod is missing dependencies: {0}
|
||||||
mod.erroredcontent.details = This game caused errors when loading. Ask the mod author to fix them.
|
mod.erroredcontent.details = This game caused errors when loading. Ask the mod author to fix them.
|
||||||
|
mod.circulardependencies.details = This mod has dependencies that depends on each other.
|
||||||
|
mod.incompletedependencies.details = This mod is unable to be loaded due to invalid or missing dependencies: {0}.
|
||||||
mod.requiresversion = Requires game version: [red]{0}
|
mod.requiresversion = Requires game version: [red]{0}
|
||||||
mod.errors = Při načítání obsahu hry se vyskytly problémy.
|
mod.errors = Při načítání obsahu hry se vyskytly problémy.
|
||||||
mod.noerrorplay = [scarlet]Máš modifikace s chybami.[] Buď zakaž dotčené modifikace, nebo oprav chyby před tím, než začneš hrát.
|
mod.noerrorplay = [scarlet]Máš modifikace s chybami.[] Buď zakaž dotčené modifikace, nebo oprav chyby před tím, než začneš hrát.
|
||||||
@@ -331,6 +335,7 @@ command.repair = Repair
|
|||||||
command.rebuild = Rebuild
|
command.rebuild = Rebuild
|
||||||
command.assist = Assist Player
|
command.assist = Assist Player
|
||||||
command.move = Move
|
command.move = Move
|
||||||
|
command.boost = Boost
|
||||||
openlink = Otevřít odkaz
|
openlink = Otevřít odkaz
|
||||||
copylink = Zkopírovat odkaz
|
copylink = Zkopírovat odkaz
|
||||||
back = Zpět
|
back = Zpět
|
||||||
@@ -976,6 +981,8 @@ bullet.splashdamage = [stat]{0}[lightgray] plošného poškození ~[stat] {1}[li
|
|||||||
bullet.incendiary = [stat]zápalný
|
bullet.incendiary = [stat]zápalný
|
||||||
bullet.homing = [stat]samonaváděcí
|
bullet.homing = [stat]samonaváděcí
|
||||||
bullet.armorpierce = [stat]armor piercing
|
bullet.armorpierce = [stat]armor piercing
|
||||||
|
bullet.suppression = [stat]{0} sec[lightgray] repair suppression ~ [stat]{1}[lightgray] tiles
|
||||||
|
bullet.interval = [stat]{0}/sec[lightgray] interval bullets:
|
||||||
bullet.frags = [stat]{0}[lightgray]x frag střel:
|
bullet.frags = [stat]{0}[lightgray]x frag střel:
|
||||||
bullet.lightning = [stat]{0}[lightgray]x jiskření ~ [stat]{1}[lightgray] poškození
|
bullet.lightning = [stat]{0}[lightgray]x jiskření ~ [stat]{1}[lightgray] poškození
|
||||||
bullet.buildingdamage = [stat]{0}%[lightgray] poškození budov
|
bullet.buildingdamage = [stat]{0}%[lightgray] poškození budov
|
||||||
@@ -1089,8 +1096,8 @@ setting.bridgeopacity.name = Průsvitnost přemostění
|
|||||||
setting.playerchat.name = Zobrazit bublinu se zprávami hráče
|
setting.playerchat.name = Zobrazit bublinu se zprávami hráče
|
||||||
setting.showweather.name = Zobrazit Grafiku Počasí
|
setting.showweather.name = Zobrazit Grafiku Počasí
|
||||||
setting.hidedisplays.name = Hide Logic Displays
|
setting.hidedisplays.name = Hide Logic Displays
|
||||||
public.confirm = Chceš Tvoji hru zpřístupnit veřejnosti?\n[accent]Kdokoli se bude moci připojit ke tvé hře.[]\n[lightgray]Toto se dá později změnit v nabídce Volby->Hra->Veřejná viditelnost hry.
|
steam.friendsonly = Friends Only
|
||||||
public.confirm.really = Pokud chceš hrát s přáteli, použij [green]Pozvat Přítele[] místo [scarlet]Zvěřejnit server[]!\nJseš si jist, že chceš udělat svou hru [scarlet]veřejnou[]?
|
steam.friendsonly.tooltip = Whether only Steam friends will be able to join your game.\nUnchecking this box will make your game public - anyone can join.
|
||||||
public.beta = Poznámka: nevydané verze her nemůžou být veřejné.
|
public.beta = Poznámka: nevydané verze her nemůžou být veřejné.
|
||||||
uiscale.reset = Škálování uživatelskho rozhraní se změnilo.\nZmáčkni "OK", abys potvrdil toto nastavení.\n[scarlet]Návrat k původním hodnotám proběhne za [accent]{0}[] vteřin...[]
|
uiscale.reset = Škálování uživatelskho rozhraní se změnilo.\nZmáčkni "OK", abys potvrdil toto nastavení.\n[scarlet]Návrat k původním hodnotám proběhne za [accent]{0}[] vteřin...[]
|
||||||
uiscale.cancel = Ukončit a odejít
|
uiscale.cancel = Ukončit a odejít
|
||||||
@@ -1142,8 +1149,8 @@ keybind.select.name = Vybrat/Střílet
|
|||||||
keybind.diagonal_placement.name = Umisťovat úhlopříčně
|
keybind.diagonal_placement.name = Umisťovat úhlopříčně
|
||||||
keybind.pick.name = Vybrat blok
|
keybind.pick.name = Vybrat blok
|
||||||
keybind.break_block.name = Rozbít blok
|
keybind.break_block.name = Rozbít blok
|
||||||
keybind.select_all_units = Select All Units
|
keybind.select_all_units.name = Select All Units
|
||||||
keybind.select_all_unit_factories = Select All Unit Factories
|
keybind.select_all_unit_factories.name = Select All Unit Factories
|
||||||
keybind.deselect.name = Odznačit
|
keybind.deselect.name = Odznačit
|
||||||
keybind.pickupCargo.name = Vyzvednout náklad
|
keybind.pickupCargo.name = Vyzvednout náklad
|
||||||
keybind.dropCargo.name = Položit náklad
|
keybind.dropCargo.name = Položit náklad
|
||||||
@@ -2200,6 +2207,7 @@ lst.flushmessage = Display a message on the screen from the text buffer.\nWill w
|
|||||||
lst.cutscene = Manipulate the player camera.
|
lst.cutscene = Manipulate the player camera.
|
||||||
lst.setflag = Set a global flag that can be read by all processors.
|
lst.setflag = Set a global flag that can be read by all processors.
|
||||||
lst.getflag = Check if a global flag is set.
|
lst.getflag = Check if a global flag is set.
|
||||||
|
lst.setprop = Sets a property of a unit or building.
|
||||||
|
|
||||||
logic.nounitbuild = [red]Stavba budov pomoci jednotek kontrolované procesorem neni povolené.
|
logic.nounitbuild = [red]Stavba budov pomoci jednotek kontrolované procesorem neni povolené.
|
||||||
|
|
||||||
|
|||||||
@@ -146,11 +146,15 @@ mod.incompatiblemod = [red]Incompatible
|
|||||||
mod.blacklisted = [red]Unsupported
|
mod.blacklisted = [red]Unsupported
|
||||||
mod.unmetdependencies = [red]Unmet Dependencies
|
mod.unmetdependencies = [red]Unmet Dependencies
|
||||||
mod.erroredcontent = [scarlet]Indholds fejl
|
mod.erroredcontent = [scarlet]Indholds fejl
|
||||||
|
mod.circulardependencies = [red]Circular Dependencies
|
||||||
|
mod.incompletedependencies = [red]Incomplete Dependencies
|
||||||
mod.requiresversion.details = Requires game version: [accent]{0}[]\nYour game is outdated. This mod requires a newer version of the game (possibly a beta/alpha release) to function.
|
mod.requiresversion.details = Requires game version: [accent]{0}[]\nYour game is outdated. This mod requires a newer version of the game (possibly a beta/alpha release) to function.
|
||||||
mod.outdatedv7.details = This mod is incompatible with the latest version of the game. The author must update it, and add [accent]minGameVersion: 136[] to its [accent]mod.json[] file.
|
mod.outdatedv7.details = This mod is incompatible with the latest version of the game. The author must update it, and add [accent]minGameVersion: 136[] to its [accent]mod.json[] file.
|
||||||
mod.blacklisted.details = This mod has been manually blacklisted for causing crashes or other issues with this version of the game. Do not use it.
|
mod.blacklisted.details = This mod has been manually blacklisted for causing crashes or other issues with this version of the game. Do not use it.
|
||||||
mod.missingdependencies.details = This mod is missing dependencies: {0}
|
mod.missingdependencies.details = This mod is missing dependencies: {0}
|
||||||
mod.erroredcontent.details = This game caused errors when loading. Ask the mod author to fix them.
|
mod.erroredcontent.details = This game caused errors when loading. Ask the mod author to fix them.
|
||||||
|
mod.circulardependencies.details = This mod has dependencies that depends on each other.
|
||||||
|
mod.incompletedependencies.details = This mod is unable to be loaded due to invalid or missing dependencies: {0}.
|
||||||
mod.requiresversion = Requires game version: [red]{0}
|
mod.requiresversion = Requires game version: [red]{0}
|
||||||
mod.errors = Fejl ved afhentning af indhold.
|
mod.errors = Fejl ved afhentning af indhold.
|
||||||
mod.noerrorplay = [scarlet]Du har mods med fejl.[] Deaktiver det eller løs fejl før du starter spillet.
|
mod.noerrorplay = [scarlet]Du har mods med fejl.[] Deaktiver det eller løs fejl før du starter spillet.
|
||||||
@@ -327,6 +331,7 @@ command.repair = Repair
|
|||||||
command.rebuild = Rebuild
|
command.rebuild = Rebuild
|
||||||
command.assist = Assist Player
|
command.assist = Assist Player
|
||||||
command.move = Move
|
command.move = Move
|
||||||
|
command.boost = Boost
|
||||||
openlink = Åben Link
|
openlink = Åben Link
|
||||||
copylink = Kopier Link
|
copylink = Kopier Link
|
||||||
back = Tilbage
|
back = Tilbage
|
||||||
@@ -964,6 +969,8 @@ bullet.splashdamage = [stat]{0}[lightgray] områdeskade ~[stat] {1}[lightgray] f
|
|||||||
bullet.incendiary = [stat]brændfarlig
|
bullet.incendiary = [stat]brændfarlig
|
||||||
bullet.homing = [stat]målsøgende
|
bullet.homing = [stat]målsøgende
|
||||||
bullet.armorpierce = [stat]armor piercing
|
bullet.armorpierce = [stat]armor piercing
|
||||||
|
bullet.suppression = [stat]{0} sec[lightgray] repair suppression ~ [stat]{1}[lightgray] tiles
|
||||||
|
bullet.interval = [stat]{0}/sec[lightgray] interval bullets:
|
||||||
bullet.frags = [stat]{0}[lightgray]x frag bullets:
|
bullet.frags = [stat]{0}[lightgray]x frag bullets:
|
||||||
bullet.lightning = [stat]{0}[lightgray]x lightning ~ [stat]{1}[lightgray] damage
|
bullet.lightning = [stat]{0}[lightgray]x lightning ~ [stat]{1}[lightgray] damage
|
||||||
bullet.buildingdamage = [stat]{0}%[lightgray] building damage
|
bullet.buildingdamage = [stat]{0}%[lightgray] building damage
|
||||||
@@ -1077,8 +1084,8 @@ setting.bridgeopacity.name = Bro-gennemsigtighed
|
|||||||
setting.playerchat.name = Vis spillers bobbel-chat
|
setting.playerchat.name = Vis spillers bobbel-chat
|
||||||
setting.showweather.name = Show Weather Graphics
|
setting.showweather.name = Show Weather Graphics
|
||||||
setting.hidedisplays.name = Hide Logic Displays
|
setting.hidedisplays.name = Hide Logic Displays
|
||||||
public.confirm = Vil du gøre dit spil offentligt?\n[accent]Alle og enhver vil kunne tilslutte.\n[lightgray]Dette kan ændres senere i Indstillinger->Spil->Synlighed af offentlige spil.
|
steam.friendsonly = Friends Only
|
||||||
public.confirm.really = If you want to play with friends, use [green]Invite Friend[] instead of a [scarlet]Public server[]!\nAre you sure you want to make your game [scarlet]public[]?
|
steam.friendsonly.tooltip = Whether only Steam friends will be able to join your game.\nUnchecking this box will make your game public - anyone can join.
|
||||||
public.beta = Bemærk at beta-versioner af spillet ikke kan tilslutte sig offentlige spil.
|
public.beta = Bemærk at beta-versioner af spillet ikke kan tilslutte sig offentlige spil.
|
||||||
uiscale.reset = UI-størrelsen har ændret sig.\nTryk "OK" for at bekræfte størrelsen.\n[scarlet]Omgør og afslutter om[accent] {0}[] sekunder...
|
uiscale.reset = UI-størrelsen har ændret sig.\nTryk "OK" for at bekræfte størrelsen.\n[scarlet]Omgør og afslutter om[accent] {0}[] sekunder...
|
||||||
uiscale.cancel = Afblæs & Afslut
|
uiscale.cancel = Afblæs & Afslut
|
||||||
@@ -1130,8 +1137,8 @@ keybind.select.name = Vælg/Skyd
|
|||||||
keybind.diagonal_placement.name = Diagonal placering
|
keybind.diagonal_placement.name = Diagonal placering
|
||||||
keybind.pick.name = Tag blok
|
keybind.pick.name = Tag blok
|
||||||
keybind.break_block.name = Ødelæg blok
|
keybind.break_block.name = Ødelæg blok
|
||||||
keybind.select_all_units = Select All Units
|
keybind.select_all_units.name = Select All Units
|
||||||
keybind.select_all_unit_factories = Select All Unit Factories
|
keybind.select_all_unit_factories.name = Select All Unit Factories
|
||||||
keybind.deselect.name = Fravælg
|
keybind.deselect.name = Fravælg
|
||||||
keybind.pickupCargo.name = Saml last op
|
keybind.pickupCargo.name = Saml last op
|
||||||
keybind.dropCargo.name = Smid last
|
keybind.dropCargo.name = Smid last
|
||||||
@@ -2180,6 +2187,7 @@ lst.flushmessage = Display a message on the screen from the text buffer.\nWill w
|
|||||||
lst.cutscene = Manipulate the player camera.
|
lst.cutscene = Manipulate the player camera.
|
||||||
lst.setflag = Set a global flag that can be read by all processors.
|
lst.setflag = Set a global flag that can be read by all processors.
|
||||||
lst.getflag = Check if a global flag is set.
|
lst.getflag = Check if a global flag is set.
|
||||||
|
lst.setprop = Sets a property of a unit or building.
|
||||||
logic.nounitbuild = [red]Unit building logic is not allowed here.
|
logic.nounitbuild = [red]Unit building logic is not allowed here.
|
||||||
lenum.type = Type of building/unit.\ne.g. for any router, this will return [accent]@router[].\nNot a string.
|
lenum.type = Type of building/unit.\ne.g. for any router, this will return [accent]@router[].\nNot a string.
|
||||||
lenum.shoot = Shoot at a position.
|
lenum.shoot = Shoot at a position.
|
||||||
|
|||||||
@@ -150,12 +150,16 @@ mod.incompatiblemod = [red]Inkompatibel
|
|||||||
mod.blacklisted = [red]Nicht unterstützt
|
mod.blacklisted = [red]Nicht unterstützt
|
||||||
mod.unmetdependencies = [red]Fehlende Abhängigkeiten
|
mod.unmetdependencies = [red]Fehlende Abhängigkeiten
|
||||||
mod.erroredcontent = [scarlet]Inhalt-Fehler
|
mod.erroredcontent = [scarlet]Inhalt-Fehler
|
||||||
|
mod.circulardependencies = [red]Circular Dependencies
|
||||||
|
mod.incompletedependencies = [red]Incomplete Dependencies
|
||||||
|
|
||||||
mod.requiresversion.details = Benötigt Spielversion [accent]{0}[]\nDein Spiel ist veraltet. Diese Mod benötigt eine neuere (möglicherweise Alpha- oder Beta-) Spielversion.
|
mod.requiresversion.details = Benötigt Spielversion [accent]{0}[]\nDein Spiel ist veraltet. Diese Mod benötigt eine neuere (möglicherweise Alpha- oder Beta-) Spielversion.
|
||||||
mod.outdatedv7.details = Diese Mod ist nicht mit der neuesten Version von Mindustry kompatibel. Der Autor muss diesen aktualisieren und [accent]minGameVersion: 136[] in der [accent]mod.json[]-Datei hinzufügen.
|
mod.outdatedv7.details = Diese Mod ist nicht mit der neuesten Version von Mindustry kompatibel. Der Autor muss diesen aktualisieren und [accent]minGameVersion: 136[] in der [accent]mod.json[]-Datei hinzufügen.
|
||||||
mod.blacklisted.details = Diese Mod würde manuell gesperrt, weil er diese Spielversion zum Abstürzen bringt oder andere Fehler verursacht. Benutze diese Mod nicht.
|
mod.blacklisted.details = Diese Mod würde manuell gesperrt, weil er diese Spielversion zum Abstürzen bringt oder andere Fehler verursacht. Benutze diese Mod nicht.
|
||||||
mod.missingdependencies.details = Dieser Mod fehlen folgende Abhängigkeiten: {0}
|
mod.missingdependencies.details = Dieser Mod fehlen folgende Abhängigkeiten: {0}
|
||||||
mod.erroredcontent.details = Diese Mod hat beim Laden Fehler verursacht. Bitte den Mod-Autor, diese zu beheben.
|
mod.erroredcontent.details = Diese Mod hat beim Laden Fehler verursacht. Bitte den Mod-Autor, diese zu beheben.
|
||||||
|
mod.circulardependencies.details = This mod has dependencies that depends on each other.
|
||||||
|
mod.incompletedependencies.details = This mod is unable to be loaded due to invalid or missing dependencies: {0}.
|
||||||
mod.requiresversion = Requires game version: [red]{0}
|
mod.requiresversion = Requires game version: [red]{0}
|
||||||
|
|
||||||
mod.errors = Beim Laden von Inhalt sind Fehler aufgetreten.
|
mod.errors = Beim Laden von Inhalt sind Fehler aufgetreten.
|
||||||
@@ -334,6 +338,7 @@ command.repair = Reparieren
|
|||||||
command.rebuild = Wiederaufbauen
|
command.rebuild = Wiederaufbauen
|
||||||
command.assist = Spieler unterstützen
|
command.assist = Spieler unterstützen
|
||||||
command.move = Bewegen
|
command.move = Bewegen
|
||||||
|
command.boost = Boost
|
||||||
openlink = Link öffnen
|
openlink = Link öffnen
|
||||||
copylink = Link kopieren
|
copylink = Link kopieren
|
||||||
back = Zurück
|
back = Zurück
|
||||||
@@ -987,6 +992,8 @@ bullet.splashdamage = [stat]{0}[lightgray] Flächenschaden ~[stat] {1}[lightgray
|
|||||||
bullet.incendiary = [stat]entzündend
|
bullet.incendiary = [stat]entzündend
|
||||||
bullet.homing = [stat]zielsuchend
|
bullet.homing = [stat]zielsuchend
|
||||||
bullet.armorpierce = [stat]panzerbrechend
|
bullet.armorpierce = [stat]panzerbrechend
|
||||||
|
bullet.suppression = [stat]{0} sec[lightgray] repair suppression ~ [stat]{1}[lightgray] tiles
|
||||||
|
bullet.interval = [stat]{0}/sec[lightgray] interval bullets:
|
||||||
bullet.frags = [stat]{0}[lightgray]x Splittergeschosse:
|
bullet.frags = [stat]{0}[lightgray]x Splittergeschosse:
|
||||||
bullet.lightning = [stat]{0}[lightgray]x Blitz ~ [stat]{1}[lightgray] Schaden
|
bullet.lightning = [stat]{0}[lightgray]x Blitz ~ [stat]{1}[lightgray] Schaden
|
||||||
bullet.buildingdamage = [stat]{0}%[lightgray]Blockschaden
|
bullet.buildingdamage = [stat]{0}%[lightgray]Blockschaden
|
||||||
@@ -1100,8 +1107,8 @@ setting.bridgeopacity.name = Brücken-Deckkraft
|
|||||||
setting.playerchat.name = Chat im Spiel anzeigen
|
setting.playerchat.name = Chat im Spiel anzeigen
|
||||||
setting.showweather.name = Wetter anzeigen
|
setting.showweather.name = Wetter anzeigen
|
||||||
setting.hidedisplays.name = Logik-Bildschirme verdecken
|
setting.hidedisplays.name = Logik-Bildschirme verdecken
|
||||||
public.confirm = Willst du dein Spiel öffentlich zugänglich machen?\n[accent]Jeder kann deinem Spiel beitreten.\n[lightgray]Dies kann später in den Einstellungen->Spiel->Öffentliches Spiel geändert werden.
|
steam.friendsonly = Friends Only
|
||||||
public.confirm.really = Wenn du mit Freunden spielen willst, drücke [green]Freunde einladen[] statt einen [scarlet]öffentlichen Server[] zu erstellen!\nBist du dir sicher, dass du dein Spiel [scarlet]öffentlich[] machen möchtest?
|
steam.friendsonly.tooltip = Whether only Steam friends will be able to join your game.\nUnchecking this box will make your game public - anyone can join.
|
||||||
public.beta = Bemerke: Beta-Versionen des Spiels können keine öffentlichen Spiele machen.
|
public.beta = Bemerke: Beta-Versionen des Spiels können keine öffentlichen Spiele machen.
|
||||||
uiscale.reset = UI-Skalierung wurde geändert.\nDrücke "OK", um diese Skalierung zu bestätigen.\n[scarlet]Zurückkehren und Beenden in[accent] {0}[] Einstellungen...
|
uiscale.reset = UI-Skalierung wurde geändert.\nDrücke "OK", um diese Skalierung zu bestätigen.\n[scarlet]Zurückkehren und Beenden in[accent] {0}[] Einstellungen...
|
||||||
uiscale.cancel = Abbrechen & Beenden
|
uiscale.cancel = Abbrechen & Beenden
|
||||||
@@ -1153,8 +1160,8 @@ keybind.select.name = Auswählen/Schießen
|
|||||||
keybind.diagonal_placement.name = Diagonal platzieren
|
keybind.diagonal_placement.name = Diagonal platzieren
|
||||||
keybind.pick.name = Block auswählen
|
keybind.pick.name = Block auswählen
|
||||||
keybind.break_block.name = Block zerstören
|
keybind.break_block.name = Block zerstören
|
||||||
keybind.select_all_units = Alle Einheiten auswählen
|
keybind.select_all_units.name = Alle Einheiten auswählen
|
||||||
keybind.select_all_unit_factories = Alle Einheitenfabriken auswählen
|
keybind.select_all_unit_factories.name = Alle Einheitenfabriken auswählen
|
||||||
keybind.deselect.name = Auswahl aufheben
|
keybind.deselect.name = Auswahl aufheben
|
||||||
keybind.pickupCargo.name = Block aufheben
|
keybind.pickupCargo.name = Block aufheben
|
||||||
keybind.dropCargo.name = Block fallen lassen
|
keybind.dropCargo.name = Block fallen lassen
|
||||||
@@ -1759,7 +1766,7 @@ hint.skip = Fertig
|
|||||||
hint.desktopMove = Drücke [accent][[WASD][], um dich zu bewegen.
|
hint.desktopMove = Drücke [accent][[WASD][], um dich zu bewegen.
|
||||||
hint.zoom = [accent]Scrolle[], um rein oder raus zu zoomen.
|
hint.zoom = [accent]Scrolle[], um rein oder raus zu zoomen.
|
||||||
hint.desktopShoot = Benutze [accent][[Linksklick][], um zu schießen.
|
hint.desktopShoot = Benutze [accent][[Linksklick][], um zu schießen.
|
||||||
hint.depositItems = Um Materialien in den Kern zu tun, ziehe sie von dir zum Kern.
|
hint.depositItems = Um Materialien in den Kern zu verschieben, ziehe sie von dir zum Kern.
|
||||||
hint.respawn = Um im Kern zu respawnen, drücke [accent][[V][].
|
hint.respawn = Um im Kern zu respawnen, drücke [accent][[V][].
|
||||||
hint.respawn.mobile = Du steuerst nun eine Einheit oder einen Block. Um wieder zur normalen Einheit zu werden, [accent]drücke die Abbildung von dir oben links[].
|
hint.respawn.mobile = Du steuerst nun eine Einheit oder einen Block. Um wieder zur normalen Einheit zu werden, [accent]drücke die Abbildung von dir oben links[].
|
||||||
hint.desktopPause = Benutze [accent][[Leertaste][], um das Spiel zu pausieren oder entpausieren.
|
hint.desktopPause = Benutze [accent][[Leertaste][], um das Spiel zu pausieren oder entpausieren.
|
||||||
@@ -2228,6 +2235,7 @@ lst.flushmessage = Zeige eine Nachricht aus dem Textspeicher auf dem Bildschirm.
|
|||||||
lst.cutscene = Verschiebe die Spielerkamera.
|
lst.cutscene = Verschiebe die Spielerkamera.
|
||||||
lst.setflag = Setze eine Flag, die von allen Prozessoren gelesen werden kann.
|
lst.setflag = Setze eine Flag, die von allen Prozessoren gelesen werden kann.
|
||||||
lst.getflag = Überprüfe, ob eine Flag gesetzt ist.
|
lst.getflag = Überprüfe, ob eine Flag gesetzt ist.
|
||||||
|
lst.setprop = Sets a property of a unit or building.
|
||||||
|
|
||||||
logic.nounitbuild = [red]Logik, die Blöcke baut, ist hier nicht erlaubt.
|
logic.nounitbuild = [red]Logik, die Blöcke baut, ist hier nicht erlaubt.
|
||||||
|
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
@@ -146,11 +146,15 @@ mod.incompatiblemod = [red]Incompatible
|
|||||||
mod.blacklisted = [red]Unsupported
|
mod.blacklisted = [red]Unsupported
|
||||||
mod.unmetdependencies = [red]Unmet Dependencies
|
mod.unmetdependencies = [red]Unmet Dependencies
|
||||||
mod.erroredcontent = [scarlet]Content Errors
|
mod.erroredcontent = [scarlet]Content Errors
|
||||||
|
mod.circulardependencies = [red]Circular Dependencies
|
||||||
|
mod.incompletedependencies = [red]Incomplete Dependencies
|
||||||
mod.requiresversion.details = Requires game version: [accent]{0}[]\nYour game is outdated. This mod requires a newer version of the game (possibly a beta/alpha release) to function.
|
mod.requiresversion.details = Requires game version: [accent]{0}[]\nYour game is outdated. This mod requires a newer version of the game (possibly a beta/alpha release) to function.
|
||||||
mod.outdatedv7.details = This mod is incompatible with the latest version of the game. The author must update it, and add [accent]minGameVersion: 136[] to its [accent]mod.json[] file.
|
mod.outdatedv7.details = This mod is incompatible with the latest version of the game. The author must update it, and add [accent]minGameVersion: 136[] to its [accent]mod.json[] file.
|
||||||
mod.blacklisted.details = This mod has been manually blacklisted for causing crashes or other issues with this version of the game. Do not use it.
|
mod.blacklisted.details = This mod has been manually blacklisted for causing crashes or other issues with this version of the game. Do not use it.
|
||||||
mod.missingdependencies.details = This mod is missing dependencies: {0}
|
mod.missingdependencies.details = This mod is missing dependencies: {0}
|
||||||
mod.erroredcontent.details = This game caused errors when loading. Ask the mod author to fix them.
|
mod.erroredcontent.details = This game caused errors when loading. Ask the mod author to fix them.
|
||||||
|
mod.circulardependencies.details = This mod has dependencies that depends on each other.
|
||||||
|
mod.incompletedependencies.details = This mod is unable to be loaded due to invalid or missing dependencies: {0}.
|
||||||
mod.requiresversion = Requires game version: [red]{0}
|
mod.requiresversion = Requires game version: [red]{0}
|
||||||
mod.errors = Errors have occurred loading content.
|
mod.errors = Errors have occurred loading content.
|
||||||
mod.noerrorplay = [scarlet]You have mods with errors.[] Either disable the affected mods or fix the errors before playing.
|
mod.noerrorplay = [scarlet]You have mods with errors.[] Either disable the affected mods or fix the errors before playing.
|
||||||
@@ -327,6 +331,7 @@ command.repair = Repair
|
|||||||
command.rebuild = Rebuild
|
command.rebuild = Rebuild
|
||||||
command.assist = Assist Player
|
command.assist = Assist Player
|
||||||
command.move = Move
|
command.move = Move
|
||||||
|
command.boost = Boost
|
||||||
openlink = Ava link
|
openlink = Ava link
|
||||||
copylink = Kopeeri link
|
copylink = Kopeeri link
|
||||||
back = Tagasi
|
back = Tagasi
|
||||||
@@ -964,6 +969,8 @@ bullet.splashdamage = [stat]{0}[lightgray] hävituspunkti ~[stat] {1}[lightgray]
|
|||||||
bullet.incendiary = [stat]süttiv
|
bullet.incendiary = [stat]süttiv
|
||||||
bullet.homing = [stat]isesihtiv
|
bullet.homing = [stat]isesihtiv
|
||||||
bullet.armorpierce = [stat]armor piercing
|
bullet.armorpierce = [stat]armor piercing
|
||||||
|
bullet.suppression = [stat]{0} sec[lightgray] repair suppression ~ [stat]{1}[lightgray] tiles
|
||||||
|
bullet.interval = [stat]{0}/sec[lightgray] interval bullets:
|
||||||
bullet.frags = [stat]{0}[lightgray]x frag bullets:
|
bullet.frags = [stat]{0}[lightgray]x frag bullets:
|
||||||
bullet.lightning = [stat]{0}[lightgray]x lightning ~ [stat]{1}[lightgray] damage
|
bullet.lightning = [stat]{0}[lightgray]x lightning ~ [stat]{1}[lightgray] damage
|
||||||
bullet.buildingdamage = [stat]{0}%[lightgray] building damage
|
bullet.buildingdamage = [stat]{0}%[lightgray] building damage
|
||||||
@@ -1077,8 +1084,8 @@ setting.bridgeopacity.name = Bridge Opacity
|
|||||||
setting.playerchat.name = Näita mängusisest vestlusakent
|
setting.playerchat.name = Näita mängusisest vestlusakent
|
||||||
setting.showweather.name = Show Weather Graphics
|
setting.showweather.name = Show Weather Graphics
|
||||||
setting.hidedisplays.name = Hide Logic Displays
|
setting.hidedisplays.name = Hide Logic Displays
|
||||||
public.confirm = Do you want to make your game public?\n[accent]Anyone will be able to join your games.\n[lightgray]This can be changed later in Settings->Game->Public Game Visibility.
|
steam.friendsonly = Friends Only
|
||||||
public.confirm.really = If you want to play with friends, use [green]Invite Friend[] instead of a [scarlet]Public server[]!\nAre you sure you want to make your game [scarlet]public[]?
|
steam.friendsonly.tooltip = Whether only Steam friends will be able to join your game.\nUnchecking this box will make your game public - anyone can join.
|
||||||
public.beta = Note that beta versions of the game cannot make public lobbies.
|
public.beta = Note that beta versions of the game cannot make public lobbies.
|
||||||
uiscale.reset = Kasutajaliidese suurust on muudetud.\nVajuta nupule "OK", et uus suurus kinnitada.\n[scarlet]Esialgne suurus taastatakse[accent] {0}[] sekundi pärast...
|
uiscale.reset = Kasutajaliidese suurust on muudetud.\nVajuta nupule "OK", et uus suurus kinnitada.\n[scarlet]Esialgne suurus taastatakse[accent] {0}[] sekundi pärast...
|
||||||
uiscale.cancel = Tühista ja välju
|
uiscale.cancel = Tühista ja välju
|
||||||
@@ -1130,8 +1137,8 @@ keybind.select.name = Vali/Tulista
|
|||||||
keybind.diagonal_placement.name = Diagonaalne paigutamine
|
keybind.diagonal_placement.name = Diagonaalne paigutamine
|
||||||
keybind.pick.name = Vali blokk
|
keybind.pick.name = Vali blokk
|
||||||
keybind.break_block.name = Hävita blokk
|
keybind.break_block.name = Hävita blokk
|
||||||
keybind.select_all_units = Select All Units
|
keybind.select_all_units.name = Select All Units
|
||||||
keybind.select_all_unit_factories = Select All Unit Factories
|
keybind.select_all_unit_factories.name = Select All Unit Factories
|
||||||
keybind.deselect.name = Tühista valik
|
keybind.deselect.name = Tühista valik
|
||||||
keybind.pickupCargo.name = Pickup Cargo
|
keybind.pickupCargo.name = Pickup Cargo
|
||||||
keybind.dropCargo.name = Drop Cargo
|
keybind.dropCargo.name = Drop Cargo
|
||||||
@@ -2182,6 +2189,7 @@ lst.flushmessage = Display a message on the screen from the text buffer.\nWill w
|
|||||||
lst.cutscene = Manipulate the player camera.
|
lst.cutscene = Manipulate the player camera.
|
||||||
lst.setflag = Set a global flag that can be read by all processors.
|
lst.setflag = Set a global flag that can be read by all processors.
|
||||||
lst.getflag = Check if a global flag is set.
|
lst.getflag = Check if a global flag is set.
|
||||||
|
lst.setprop = Sets a property of a unit or building.
|
||||||
logic.nounitbuild = [red]Unit building logic is not allowed here.
|
logic.nounitbuild = [red]Unit building logic is not allowed here.
|
||||||
lenum.type = Type of building/unit.\ne.g. for any router, this will return [accent]@router[].\nNot a string.
|
lenum.type = Type of building/unit.\ne.g. for any router, this will return [accent]@router[].\nNot a string.
|
||||||
lenum.shoot = Shoot at a position.
|
lenum.shoot = Shoot at a position.
|
||||||
|
|||||||
@@ -146,11 +146,15 @@ mod.incompatiblemod = [red]Incompatible
|
|||||||
mod.blacklisted = [red]Unsupported
|
mod.blacklisted = [red]Unsupported
|
||||||
mod.unmetdependencies = [red]Unmet Dependencies
|
mod.unmetdependencies = [red]Unmet Dependencies
|
||||||
mod.erroredcontent = [scarlet]Edukiaren erroreak
|
mod.erroredcontent = [scarlet]Edukiaren erroreak
|
||||||
|
mod.circulardependencies = [red]Circular Dependencies
|
||||||
|
mod.incompletedependencies = [red]Incomplete Dependencies
|
||||||
mod.requiresversion.details = Requires game version: [accent]{0}[]\nYour game is outdated. This mod requires a newer version of the game (possibly a beta/alpha release) to function.
|
mod.requiresversion.details = Requires game version: [accent]{0}[]\nYour game is outdated. This mod requires a newer version of the game (possibly a beta/alpha release) to function.
|
||||||
mod.outdatedv7.details = This mod is incompatible with the latest version of the game. The author must update it, and add [accent]minGameVersion: 136[] to its [accent]mod.json[] file.
|
mod.outdatedv7.details = This mod is incompatible with the latest version of the game. The author must update it, and add [accent]minGameVersion: 136[] to its [accent]mod.json[] file.
|
||||||
mod.blacklisted.details = This mod has been manually blacklisted for causing crashes or other issues with this version of the game. Do not use it.
|
mod.blacklisted.details = This mod has been manually blacklisted for causing crashes or other issues with this version of the game. Do not use it.
|
||||||
mod.missingdependencies.details = This mod is missing dependencies: {0}
|
mod.missingdependencies.details = This mod is missing dependencies: {0}
|
||||||
mod.erroredcontent.details = This mod caused errors when loading. Ask the mod author to fix them.
|
mod.erroredcontent.details = This mod caused errors when loading. Ask the mod author to fix them.
|
||||||
|
mod.circulardependencies.details = This mod has dependencies that depends on each other.
|
||||||
|
mod.incompletedependencies.details = This mod is unable to be loaded due to invalid or missing dependencies: {0}.
|
||||||
mod.requiresversion = Requires game version: [red]{0}
|
mod.requiresversion = Requires game version: [red]{0}
|
||||||
mod.errors = Erroreak gertatu dira edukia kargatzean.
|
mod.errors = Erroreak gertatu dira edukia kargatzean.
|
||||||
mod.noerrorplay = [scarlet]Erroreak dituzten mod-ak dituzu.[] Desgaitu kaltetutako mod-ak edo konpondu erroreak jolastu aurretik.
|
mod.noerrorplay = [scarlet]Erroreak dituzten mod-ak dituzu.[] Desgaitu kaltetutako mod-ak edo konpondu erroreak jolastu aurretik.
|
||||||
@@ -329,6 +333,7 @@ command.repair = Repair
|
|||||||
command.rebuild = Rebuild
|
command.rebuild = Rebuild
|
||||||
command.assist = Assist Player
|
command.assist = Assist Player
|
||||||
command.move = Move
|
command.move = Move
|
||||||
|
command.boost = Boost
|
||||||
openlink = Ireki esteka
|
openlink = Ireki esteka
|
||||||
copylink = Kopiatu esteka
|
copylink = Kopiatu esteka
|
||||||
back = Atzera
|
back = Atzera
|
||||||
@@ -966,6 +971,8 @@ bullet.splashdamage = [stat]{0}[lightgray] ingurune-kaltea ~[stat] {1}[lightgray
|
|||||||
bullet.incendiary = [stat]su-eragilea
|
bullet.incendiary = [stat]su-eragilea
|
||||||
bullet.homing = [stat]gidatua
|
bullet.homing = [stat]gidatua
|
||||||
bullet.armorpierce = [stat]armor piercing
|
bullet.armorpierce = [stat]armor piercing
|
||||||
|
bullet.suppression = [stat]{0} sec[lightgray] repair suppression ~ [stat]{1}[lightgray] tiles
|
||||||
|
bullet.interval = [stat]{0}/sec[lightgray] interval bullets:
|
||||||
bullet.frags = [stat]{0}[lightgray]x frag bullets:
|
bullet.frags = [stat]{0}[lightgray]x frag bullets:
|
||||||
bullet.lightning = [stat]{0}[lightgray]x lightning ~ [stat]{1}[lightgray] damage
|
bullet.lightning = [stat]{0}[lightgray]x lightning ~ [stat]{1}[lightgray] damage
|
||||||
bullet.buildingdamage = [stat]{0}%[lightgray] building damage
|
bullet.buildingdamage = [stat]{0}%[lightgray] building damage
|
||||||
@@ -1079,8 +1086,8 @@ setting.bridgeopacity.name = Bridge Opacity
|
|||||||
setting.playerchat.name = Erakutsi jolas barneko txata
|
setting.playerchat.name = Erakutsi jolas barneko txata
|
||||||
setting.showweather.name = Show Weather Graphics
|
setting.showweather.name = Show Weather Graphics
|
||||||
setting.hidedisplays.name = Hide Logic Displays
|
setting.hidedisplays.name = Hide Logic Displays
|
||||||
public.confirm = Zure jolasa publikoa egin nahi duzu?\n[accent]Edonor elkartu ahal izango da zure partidetara.\n[lightgray]Hau gero ere aldatu dauteke, Ezarpenak->Partida->Partida publikoaren ikusgaitasuna.
|
steam.friendsonly = Friends Only
|
||||||
public.confirm.really = If you want to play with friends, use [green]Invite Friend[] instead of a [scarlet]Public server[]!\nAre you sure you want to make your game [scarlet]public[]?
|
steam.friendsonly.tooltip = Whether only Steam friends will be able to join your game.\nUnchecking this box will make your game public - anyone can join.
|
||||||
public.beta = Kontuan izan jolasaren beta bertsioek ezin dituztela jokalarien gela publokoak sortu.
|
public.beta = Kontuan izan jolasaren beta bertsioek ezin dituztela jokalarien gela publokoak sortu.
|
||||||
uiscale.reset = Interfazearen eskala aldatu da.\nSakatu "Ados" eskala hau berresteko.\n[scarlet][accent] {0}[] segundo atzera egin eta irteteko...
|
uiscale.reset = Interfazearen eskala aldatu da.\nSakatu "Ados" eskala hau berresteko.\n[scarlet][accent] {0}[] segundo atzera egin eta irteteko...
|
||||||
uiscale.cancel = Utzi eta irten
|
uiscale.cancel = Utzi eta irten
|
||||||
@@ -1132,8 +1139,8 @@ keybind.select.name = Hautatu/Tirokatu
|
|||||||
keybind.diagonal_placement.name = Kokatze diagonala
|
keybind.diagonal_placement.name = Kokatze diagonala
|
||||||
keybind.pick.name = Jaso blokea
|
keybind.pick.name = Jaso blokea
|
||||||
keybind.break_block.name = Apurtu blokea
|
keybind.break_block.name = Apurtu blokea
|
||||||
keybind.select_all_units = Select All Units
|
keybind.select_all_units.name = Select All Units
|
||||||
keybind.select_all_unit_factories = Select All Unit Factories
|
keybind.select_all_unit_factories.name = Select All Unit Factories
|
||||||
keybind.deselect.name = Deshautatu
|
keybind.deselect.name = Deshautatu
|
||||||
keybind.pickupCargo.name = Pickup Cargo
|
keybind.pickupCargo.name = Pickup Cargo
|
||||||
keybind.dropCargo.name = Drop Cargo
|
keybind.dropCargo.name = Drop Cargo
|
||||||
@@ -2184,6 +2191,7 @@ lst.flushmessage = Display a message on the screen from the text buffer.\nWill w
|
|||||||
lst.cutscene = Manipulate the player camera.
|
lst.cutscene = Manipulate the player camera.
|
||||||
lst.setflag = Set a global flag that can be read by all processors.
|
lst.setflag = Set a global flag that can be read by all processors.
|
||||||
lst.getflag = Check if a global flag is set.
|
lst.getflag = Check if a global flag is set.
|
||||||
|
lst.setprop = Sets a property of a unit or building.
|
||||||
logic.nounitbuild = [red]Unit building logic is not allowed here.
|
logic.nounitbuild = [red]Unit building logic is not allowed here.
|
||||||
lenum.type = Type of building/unit.\ne.g. for any router, this will return [accent]@router[].\nNot a string.
|
lenum.type = Type of building/unit.\ne.g. for any router, this will return [accent]@router[].\nNot a string.
|
||||||
lenum.shoot = Shoot at a position.
|
lenum.shoot = Shoot at a position.
|
||||||
|
|||||||
@@ -146,11 +146,15 @@ mod.incompatiblemod = [red]Incompatible
|
|||||||
mod.blacklisted = [red]Unsupported
|
mod.blacklisted = [red]Unsupported
|
||||||
mod.unmetdependencies = [red]Unmet Dependencies
|
mod.unmetdependencies = [red]Unmet Dependencies
|
||||||
mod.erroredcontent = [scarlet]Sisältövirheet
|
mod.erroredcontent = [scarlet]Sisältövirheet
|
||||||
|
mod.circulardependencies = [red]Circular Dependencies
|
||||||
|
mod.incompletedependencies = [red]Incomplete Dependencies
|
||||||
mod.requiresversion.details = Requires game version: [accent]{0}[]\nYour game is outdated. This mod requires a newer version of the game (possibly a beta/alpha release) to function.
|
mod.requiresversion.details = Requires game version: [accent]{0}[]\nYour game is outdated. This mod requires a newer version of the game (possibly a beta/alpha release) to function.
|
||||||
mod.outdatedv7.details = This mod is incompatible with the latest version of the game. The author must update it, and add [accent]minGameVersion: 136[] to its [accent]mod.json[] file.
|
mod.outdatedv7.details = This mod is incompatible with the latest version of the game. The author must update it, and add [accent]minGameVersion: 136[] to its [accent]mod.json[] file.
|
||||||
mod.blacklisted.details = This mod has been manually blacklisted for causing crashes or other issues with this version of the game. Do not use it.
|
mod.blacklisted.details = This mod has been manually blacklisted for causing crashes or other issues with this version of the game. Do not use it.
|
||||||
mod.missingdependencies.details = This mod is missing dependencies: {0}
|
mod.missingdependencies.details = This mod is missing dependencies: {0}
|
||||||
mod.erroredcontent.details = This game caused errors when loading. Ask the mod author to fix them.
|
mod.erroredcontent.details = This game caused errors when loading. Ask the mod author to fix them.
|
||||||
|
mod.circulardependencies.details = This mod has dependencies that depends on each other.
|
||||||
|
mod.incompletedependencies.details = This mod is unable to be loaded due to invalid or missing dependencies: {0}.
|
||||||
mod.requiresversion = Requires game version: [red]{0}
|
mod.requiresversion = Requires game version: [red]{0}
|
||||||
mod.errors = Virheitä on tapahtunut pelin ladatessa.
|
mod.errors = Virheitä on tapahtunut pelin ladatessa.
|
||||||
mod.noerrorplay = [scarlet]Sinulla on virheellisiä modeja.[] Joko poista ne käytöstä tai korjaa virheet.
|
mod.noerrorplay = [scarlet]Sinulla on virheellisiä modeja.[] Joko poista ne käytöstä tai korjaa virheet.
|
||||||
@@ -327,6 +331,7 @@ command.repair = Repair
|
|||||||
command.rebuild = Rebuild
|
command.rebuild = Rebuild
|
||||||
command.assist = Assist Player
|
command.assist = Assist Player
|
||||||
command.move = Move
|
command.move = Move
|
||||||
|
command.boost = Boost
|
||||||
openlink = Avaa linkki
|
openlink = Avaa linkki
|
||||||
copylink = Kopioi linkki
|
copylink = Kopioi linkki
|
||||||
back = Takaisin
|
back = Takaisin
|
||||||
@@ -963,6 +968,8 @@ bullet.splashdamage = [stat]{0}[lightgray] Aluevahinko ~[stat] {1}[lightgray] pa
|
|||||||
bullet.incendiary = [stat]sytyttävä
|
bullet.incendiary = [stat]sytyttävä
|
||||||
bullet.homing = [stat]itseohjautuva
|
bullet.homing = [stat]itseohjautuva
|
||||||
bullet.armorpierce = [stat]haarniskan läpäisevä
|
bullet.armorpierce = [stat]haarniskan läpäisevä
|
||||||
|
bullet.suppression = [stat]{0} sec[lightgray] repair suppression ~ [stat]{1}[lightgray] tiles
|
||||||
|
bullet.interval = [stat]{0}/sec[lightgray] interval bullets:
|
||||||
bullet.frags = [stat]{0}[lightgray]x sirpaleammuksia:
|
bullet.frags = [stat]{0}[lightgray]x sirpaleammuksia:
|
||||||
bullet.lightning = [stat]{0}[lightgray]x salama ~ [stat]{1}[lightgray] vahinkoa
|
bullet.lightning = [stat]{0}[lightgray]x salama ~ [stat]{1}[lightgray] vahinkoa
|
||||||
bullet.buildingdamage = [stat]{0}%[lightgray] vahinko rakennuksiin
|
bullet.buildingdamage = [stat]{0}%[lightgray] vahinko rakennuksiin
|
||||||
@@ -1076,8 +1083,8 @@ setting.bridgeopacity.name = Siltojen läpinäkyvyys
|
|||||||
setting.playerchat.name = Näytä pelinsisäinen keskustelu
|
setting.playerchat.name = Näytä pelinsisäinen keskustelu
|
||||||
setting.showweather.name = Näytä säägrafiikat
|
setting.showweather.name = Näytä säägrafiikat
|
||||||
setting.hidedisplays.name = Piilota logiikkanäytöt
|
setting.hidedisplays.name = Piilota logiikkanäytöt
|
||||||
public.confirm = Haluatko tehdä pelistäsi julkisen?\n[accent]Kuka tahansa voi liittyä peliisi.\n[lightgray]Tämä voidaan muuttaa myöhemmin: Asetukset->Peli->Julkisen pelin näkyvyys
|
steam.friendsonly = Friends Only
|
||||||
public.confirm.really = Jos halat pelata kaverien kanssa, käytä [green]Kutsu kaveri[] -toimintoa, älä [scarlet]Julkinen palvelin[] -toimintoa!\nOletko varma, että haluat tehdä pelistäsi [scarlet]julkisen[]?
|
steam.friendsonly.tooltip = Whether only Steam friends will be able to join your game.\nUnchecking this box will make your game public - anyone can join.
|
||||||
public.beta = Huomaa, että pelin betaversiot eivät voi luoda julkisia auloja.
|
public.beta = Huomaa, että pelin betaversiot eivät voi luoda julkisia auloja.
|
||||||
uiscale.reset = UI:n skaalaa on muutettu.\nPaina "OK" hyväksyäksesi tämän skaalan.\n[scarlet]Palautetaan ja poistutaan[accent] {0}[] sekunnissa...
|
uiscale.reset = UI:n skaalaa on muutettu.\nPaina "OK" hyväksyäksesi tämän skaalan.\n[scarlet]Palautetaan ja poistutaan[accent] {0}[] sekunnissa...
|
||||||
uiscale.cancel = Peruuta ja poistu
|
uiscale.cancel = Peruuta ja poistu
|
||||||
@@ -1129,8 +1136,8 @@ keybind.select.name = Valitse/Ammu
|
|||||||
keybind.diagonal_placement.name = Vino sijoitus
|
keybind.diagonal_placement.name = Vino sijoitus
|
||||||
keybind.pick.name = Ota palikka
|
keybind.pick.name = Ota palikka
|
||||||
keybind.break_block.name = Riko palikka
|
keybind.break_block.name = Riko palikka
|
||||||
keybind.select_all_units = Select All Units
|
keybind.select_all_units.name = Select All Units
|
||||||
keybind.select_all_unit_factories = Select All Unit Factories
|
keybind.select_all_unit_factories.name = Select All Unit Factories
|
||||||
keybind.deselect.name = Poista valinta
|
keybind.deselect.name = Poista valinta
|
||||||
keybind.pickupCargo.name = Nosta lastia
|
keybind.pickupCargo.name = Nosta lastia
|
||||||
keybind.dropCargo.name = Pudota lastia
|
keybind.dropCargo.name = Pudota lastia
|
||||||
@@ -2185,6 +2192,7 @@ lst.flushmessage = Näytä näytöllä viesti tekstipuskurista.\nOdottaa, kunnes
|
|||||||
lst.cutscene = Hallitse pelaajan kameraa.
|
lst.cutscene = Hallitse pelaajan kameraa.
|
||||||
lst.setflag = Aseta globaali tunniste, jonka kaikki prosessorit voivat lukea.
|
lst.setflag = Aseta globaali tunniste, jonka kaikki prosessorit voivat lukea.
|
||||||
lst.getflag = Tarkista, onko globaali tunniste asetettu.
|
lst.getflag = Tarkista, onko globaali tunniste asetettu.
|
||||||
|
lst.setprop = Sets a property of a unit or building.
|
||||||
logic.nounitbuild = [red]Logiikan käyttö ei täällä ole sallittu yksikköjen tuottamisessa.
|
logic.nounitbuild = [red]Logiikan käyttö ei täällä ole sallittu yksikköjen tuottamisessa.
|
||||||
lenum.type = Rakennuksen/Yksikön tyyppi.\nEsim. jokaisesta reitittimestä tämä palauttaa [accent]@router[].\nEi ole merkkijono.
|
lenum.type = Rakennuksen/Yksikön tyyppi.\nEsim. jokaisesta reitittimestä tämä palauttaa [accent]@router[].\nEi ole merkkijono.
|
||||||
lenum.shoot = Ammu tiettyä sijaintia.
|
lenum.shoot = Ammu tiettyä sijaintia.
|
||||||
|
|||||||
@@ -146,11 +146,15 @@ mod.incompatiblemod = [red]Incompatible
|
|||||||
mod.blacklisted = [red]Unsupported
|
mod.blacklisted = [red]Unsupported
|
||||||
mod.unmetdependencies = [red]Unmet Dependencies
|
mod.unmetdependencies = [red]Unmet Dependencies
|
||||||
mod.erroredcontent = [scarlet]Mga Error sa Nilalaman
|
mod.erroredcontent = [scarlet]Mga Error sa Nilalaman
|
||||||
|
mod.circulardependencies = [red]Circular Dependencies
|
||||||
|
mod.incompletedependencies = [red]Incomplete Dependencies
|
||||||
mod.requiresversion.details = Requires game version: [accent]{0}[]\nYour game is outdated. This mod requires a newer version of the game (possibly a beta/alpha release) to function.
|
mod.requiresversion.details = Requires game version: [accent]{0}[]\nYour game is outdated. This mod requires a newer version of the game (possibly a beta/alpha release) to function.
|
||||||
mod.outdatedv7.details = This mod is incompatible with the latest version of the game. The author must update it, and add [accent]minGameVersion: 136[] to its [accent]mod.json[] file.
|
mod.outdatedv7.details = This mod is incompatible with the latest version of the game. The author must update it, and add [accent]minGameVersion: 136[] to its [accent]mod.json[] file.
|
||||||
mod.blacklisted.details = This mod has been manually blacklisted for causing crashes or other issues with this version of the game. Do not use it.
|
mod.blacklisted.details = This mod has been manually blacklisted for causing crashes or other issues with this version of the game. Do not use it.
|
||||||
mod.missingdependencies.details = This mod is missing dependencies: {0}
|
mod.missingdependencies.details = This mod is missing dependencies: {0}
|
||||||
mod.erroredcontent.details = This game caused errors when loading. Ask the mod author to fix them.
|
mod.erroredcontent.details = This game caused errors when loading. Ask the mod author to fix them.
|
||||||
|
mod.circulardependencies.details = This mod has dependencies that depends on each other.
|
||||||
|
mod.incompletedependencies.details = This mod is unable to be loaded due to invalid or missing dependencies: {0}.
|
||||||
mod.requiresversion = Requires game version: [red]{0}
|
mod.requiresversion = Requires game version: [red]{0}
|
||||||
mod.errors = May mga error na naitala habang ni-lo-load ang nilalaman.
|
mod.errors = May mga error na naitala habang ni-lo-load ang nilalaman.
|
||||||
mod.noerrorplay = [scarlet]May mga mod kang may error.[] Maaaring 'wag munang paganahin ang mga apektadong mod o 'di kaya'y ayusin ang mga error bago maglaro.
|
mod.noerrorplay = [scarlet]May mga mod kang may error.[] Maaaring 'wag munang paganahin ang mga apektadong mod o 'di kaya'y ayusin ang mga error bago maglaro.
|
||||||
@@ -327,6 +331,7 @@ command.repair = Repair
|
|||||||
command.rebuild = Rebuild
|
command.rebuild = Rebuild
|
||||||
command.assist = Assist Player
|
command.assist = Assist Player
|
||||||
command.move = Move
|
command.move = Move
|
||||||
|
command.boost = Boost
|
||||||
openlink = Open Link
|
openlink = Open Link
|
||||||
copylink = Copy Link
|
copylink = Copy Link
|
||||||
back = Back
|
back = Back
|
||||||
@@ -963,6 +968,8 @@ bullet.splashdamage = [stat]{0}[lightgray] area dmg ~[stat] {1}[lightgray] tiles
|
|||||||
bullet.incendiary = [stat]incendiary
|
bullet.incendiary = [stat]incendiary
|
||||||
bullet.homing = [stat]homing
|
bullet.homing = [stat]homing
|
||||||
bullet.armorpierce = [stat]armor piercing
|
bullet.armorpierce = [stat]armor piercing
|
||||||
|
bullet.suppression = [stat]{0} sec[lightgray] repair suppression ~ [stat]{1}[lightgray] tiles
|
||||||
|
bullet.interval = [stat]{0}/sec[lightgray] interval bullets:
|
||||||
bullet.frags = [stat]{0}[lightgray]x frag bullets:
|
bullet.frags = [stat]{0}[lightgray]x frag bullets:
|
||||||
bullet.lightning = [stat]{0}[lightgray]x lightning ~ [stat]{1}[lightgray] damage
|
bullet.lightning = [stat]{0}[lightgray]x lightning ~ [stat]{1}[lightgray] damage
|
||||||
bullet.buildingdamage = [stat]{0}%[lightgray] building damage
|
bullet.buildingdamage = [stat]{0}%[lightgray] building damage
|
||||||
@@ -1076,8 +1083,8 @@ setting.bridgeopacity.name = Bridge Opacity
|
|||||||
setting.playerchat.name = Ipakita Player Bubble Chat
|
setting.playerchat.name = Ipakita Player Bubble Chat
|
||||||
setting.showweather.name = Show Weather Graphics
|
setting.showweather.name = Show Weather Graphics
|
||||||
setting.hidedisplays.name = Hide Logic Displays
|
setting.hidedisplays.name = Hide Logic Displays
|
||||||
public.confirm = Do you want to make your game public?\n[accent]Anyone will be able to join your games.\n[lightgray]This can be changed later in Settings->Game->Public Game Visibility.
|
steam.friendsonly = Friends Only
|
||||||
public.confirm.really = If you want to play with friends, use [green]Invite Friend[] instead of a [scarlet]Public server[]!\nAre you sure you want to make your game [scarlet]public[]?
|
steam.friendsonly.tooltip = Whether only Steam friends will be able to join your game.\nUnchecking this box will make your game public - anyone can join.
|
||||||
public.beta = Tandaan na ang mga beta na bersyon ng laro ay hindi maaaring gumawa ng mga pampublikong lobby.
|
public.beta = Tandaan na ang mga beta na bersyon ng laro ay hindi maaaring gumawa ng mga pampublikong lobby.
|
||||||
uiscale.reset = Nabago ang sukat ng UI.\nPindutin ang "OK" upang kumpirmahin ang sukat na ito.\n[scarlet]Binabalik at lalabas sa dating anyo ng[accent] {0}[] segundo...
|
uiscale.reset = Nabago ang sukat ng UI.\nPindutin ang "OK" upang kumpirmahin ang sukat na ito.\n[scarlet]Binabalik at lalabas sa dating anyo ng[accent] {0}[] segundo...
|
||||||
uiscale.cancel = I-Cancel & Exit
|
uiscale.cancel = I-Cancel & Exit
|
||||||
@@ -1129,8 +1136,8 @@ keybind.select.name = Select/Shoot
|
|||||||
keybind.diagonal_placement.name = Diagonal Placement
|
keybind.diagonal_placement.name = Diagonal Placement
|
||||||
keybind.pick.name = Pick Block
|
keybind.pick.name = Pick Block
|
||||||
keybind.break_block.name = Break Block
|
keybind.break_block.name = Break Block
|
||||||
keybind.select_all_units = Select All Units
|
keybind.select_all_units.name = Select All Units
|
||||||
keybind.select_all_unit_factories = Select All Unit Factories
|
keybind.select_all_unit_factories.name = Select All Unit Factories
|
||||||
keybind.deselect.name = Deselect
|
keybind.deselect.name = Deselect
|
||||||
keybind.pickupCargo.name = Pickup Cargo
|
keybind.pickupCargo.name = Pickup Cargo
|
||||||
keybind.dropCargo.name = Drop Cargo
|
keybind.dropCargo.name = Drop Cargo
|
||||||
@@ -2181,6 +2188,7 @@ lst.flushmessage = Display a message on the screen from the text buffer.\nWill w
|
|||||||
lst.cutscene = Manipulate the player camera.
|
lst.cutscene = Manipulate the player camera.
|
||||||
lst.setflag = Set a global flag that can be read by all processors.
|
lst.setflag = Set a global flag that can be read by all processors.
|
||||||
lst.getflag = Check if a global flag is set.
|
lst.getflag = Check if a global flag is set.
|
||||||
|
lst.setprop = Sets a property of a unit or building.
|
||||||
logic.nounitbuild = [red]Unit building logic is not allowed here.
|
logic.nounitbuild = [red]Unit building logic is not allowed here.
|
||||||
lenum.type = Type of building/unit.\ne.g. for any router, this will return [accent]@router[].\nNot a string.
|
lenum.type = Type of building/unit.\ne.g. for any router, this will return [accent]@router[].\nNot a string.
|
||||||
lenum.shoot = Shoot at a position.
|
lenum.shoot = Shoot at a position.
|
||||||
|
|||||||
@@ -150,12 +150,16 @@ mod.incompatiblemod = [red]Incompatible
|
|||||||
mod.blacklisted = [red]Non supporté
|
mod.blacklisted = [red]Non supporté
|
||||||
mod.unmetdependencies = [red]Dépendances manquantes
|
mod.unmetdependencies = [red]Dépendances manquantes
|
||||||
mod.erroredcontent = [scarlet]Erreurs dans le contenu !
|
mod.erroredcontent = [scarlet]Erreurs dans le contenu !
|
||||||
|
mod.circulardependencies = [red]Circular Dependencies
|
||||||
|
mod.incompletedependencies = [red]Incomplete Dependencies
|
||||||
|
|
||||||
mod.requiresversion.details = Requiert la version: [accent]{0}[]\nVotre jeu n'est pas à jour. Ce mod a besoin d'une version récente du jeu (la beta ou l'alpha) pour fonctionner.
|
mod.requiresversion.details = Requiert la version: [accent]{0}[]\nVotre jeu n'est pas à jour. Ce mod a besoin d'une version récente du jeu (la beta ou l'alpha) pour fonctionner.
|
||||||
mod.outdatedv7.details = Ce mod est incompatible avec la version la plus récente du jeu. L'auteur doit le mettre à jour et ajouter [accent]minGameVersion: 136[] dans le fichier [accent]mod.json[].
|
mod.outdatedv7.details = Ce mod est incompatible avec la version la plus récente du jeu. L'auteur doit le mettre à jour et ajouter [accent]minGameVersion: 136[] dans le fichier [accent]mod.json[].
|
||||||
mod.blacklisted.details = Ce mod à été manuellement mis sur liste noire car il cause des crashs ou d'autres problèmes avec la version actuelle du jeu. Ne l'utilisez pas.
|
mod.blacklisted.details = Ce mod à été manuellement mis sur liste noire car il cause des crashs ou d'autres problèmes avec la version actuelle du jeu. Ne l'utilisez pas.
|
||||||
mod.missingdependencies.details = Ce mod à des dépendances manquantes: {0}
|
mod.missingdependencies.details = Ce mod à des dépendances manquantes: {0}
|
||||||
mod.erroredcontent.details = Ce mod cause des erreurs lors du chargement. Demandez à l'autheur de les régler.
|
mod.erroredcontent.details = Ce mod cause des erreurs lors du chargement. Demandez à l'autheur de les régler.
|
||||||
|
mod.circulardependencies.details = This mod has dependencies that depends on each other.
|
||||||
|
mod.incompletedependencies.details = This mod is unable to be loaded due to invalid or missing dependencies: {0}.
|
||||||
|
|
||||||
mod.requiresversion = Requiert la version: [red]{0}
|
mod.requiresversion = Requiert la version: [red]{0}
|
||||||
|
|
||||||
@@ -335,6 +339,7 @@ command.repair = Réparer
|
|||||||
command.rebuild = Reconstruire
|
command.rebuild = Reconstruire
|
||||||
command.assist = Assister
|
command.assist = Assister
|
||||||
command.move = Bouger
|
command.move = Bouger
|
||||||
|
command.boost = Boost
|
||||||
openlink = Ouvrir le lien
|
openlink = Ouvrir le lien
|
||||||
copylink = Copier le lien
|
copylink = Copier le lien
|
||||||
back = Retour
|
back = Retour
|
||||||
@@ -988,6 +993,8 @@ bullet.splashdamage = [stat]{0}[lightgray] dégâts de zone ~[stat] {1}[lightgra
|
|||||||
bullet.incendiary = [stat]incendiaire
|
bullet.incendiary = [stat]incendiaire
|
||||||
bullet.homing = [stat]autoguidé
|
bullet.homing = [stat]autoguidé
|
||||||
bullet.armorpierce = [stat]perceur d'armure
|
bullet.armorpierce = [stat]perceur d'armure
|
||||||
|
bullet.suppression = [stat]{0} sec[lightgray] repair suppression ~ [stat]{1}[lightgray] tiles
|
||||||
|
bullet.interval = [stat]{0}/sec[lightgray] interval bullets:
|
||||||
bullet.frags = [stat]{0}[lightgray]x Balle à fragmentation :
|
bullet.frags = [stat]{0}[lightgray]x Balle à fragmentation :
|
||||||
bullet.lightning = [stat]{0}[lightgray]x foudre ~ [stat]{1}[lightgray] dégâts
|
bullet.lightning = [stat]{0}[lightgray]x foudre ~ [stat]{1}[lightgray] dégâts
|
||||||
bullet.buildingdamage = [stat]{0}%[lightgray] des dégâts aux bâtiments
|
bullet.buildingdamage = [stat]{0}%[lightgray] des dégâts aux bâtiments
|
||||||
@@ -1101,8 +1108,8 @@ setting.bridgeopacity.name = Opacité des ponts
|
|||||||
setting.playerchat.name = Montrer les bulles de discussion des joueurs
|
setting.playerchat.name = Montrer les bulles de discussion des joueurs
|
||||||
setting.showweather.name = Montrer les Effets météo
|
setting.showweather.name = Montrer les Effets météo
|
||||||
setting.hidedisplays.name = Cacher les Écrans
|
setting.hidedisplays.name = Cacher les Écrans
|
||||||
public.confirm = Voulez-vous rendre votre partie publique ?\n[accent]N'importe qui pourra rejoindre vos parties.\n[lightgray]Ce paramètre peut être changé plus tard dans Paramètres->Jeu->Visibilité de la Partie Publique
|
steam.friendsonly = Friends Only
|
||||||
public.confirm.really = Si vous voulez jouer avec des amis, utilisez [green]Inviter un Ami[] Au lieu [scarlet]d'un Serveur Public[] !\nÊtes-vous sûrs de vouloir rendre votre partie [scarlet]publique[] ?
|
steam.friendsonly.tooltip = Whether only Steam friends will be able to join your game.\nUnchecking this box will make your game public - anyone can join.
|
||||||
public.beta = Notez que les versions bêta du jeu ne peuvent pas créer de salons publics.
|
public.beta = Notez que les versions bêta du jeu ne peuvent pas créer de salons publics.
|
||||||
uiscale.reset = L'échelle de l'interface a été modifiée.\nAppuyez sur "OK" pour confirmer.\n[scarlet]Rétablissement des anciens paramètres et fermeture du jeu dans [accent] {0}[] secondes...
|
uiscale.reset = L'échelle de l'interface a été modifiée.\nAppuyez sur "OK" pour confirmer.\n[scarlet]Rétablissement des anciens paramètres et fermeture du jeu dans [accent] {0}[] secondes...
|
||||||
uiscale.cancel = Annuler & Quitter
|
uiscale.cancel = Annuler & Quitter
|
||||||
@@ -1154,8 +1161,8 @@ keybind.select.name = Sélectionner/Tirer
|
|||||||
keybind.diagonal_placement.name = Placement en diagonale
|
keybind.diagonal_placement.name = Placement en diagonale
|
||||||
keybind.pick.name = Choisir un bloc
|
keybind.pick.name = Choisir un bloc
|
||||||
keybind.break_block.name = Supprimer un bloc
|
keybind.break_block.name = Supprimer un bloc
|
||||||
keybind.select_all_units = Sélectionner toutes les Unités
|
keybind.select_all_units.name = Sélectionner toutes les Unités
|
||||||
keybind.select_all_unit_factories = Sélectionner toutes les Usines d'Unités
|
keybind.select_all_unit_factories.name = Sélectionner toutes les Usines d'Unités
|
||||||
keybind.deselect.name = Désélectionner
|
keybind.deselect.name = Désélectionner
|
||||||
keybind.pickupCargo.name = Prendre un Chargement
|
keybind.pickupCargo.name = Prendre un Chargement
|
||||||
keybind.dropCargo.name = Lâcher un Chargement
|
keybind.dropCargo.name = Lâcher un Chargement
|
||||||
@@ -2228,6 +2235,7 @@ lst.flushmessage = Affiche un message sur l'écran depuis la mémoire tampon de
|
|||||||
lst.cutscene = Manipule la caméra du joueur.
|
lst.cutscene = Manipule la caméra du joueur.
|
||||||
lst.setflag = Définit un drapeau global qui peut être lu par tous les processeurs.
|
lst.setflag = Définit un drapeau global qui peut être lu par tous les processeurs.
|
||||||
lst.getflag = Vérifie si un drapeau global est présent.
|
lst.getflag = Vérifie si un drapeau global est présent.
|
||||||
|
lst.setprop = Sets a property of a unit or building.
|
||||||
|
|
||||||
logic.nounitbuild = [red]Les unités contrôlées par des processeurs ne peuvent pas construire ici.
|
logic.nounitbuild = [red]Les unités contrôlées par des processeurs ne peuvent pas construire ici.
|
||||||
|
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
#A fordításban közreműködött: Vajda Simon, Polgár Sándor és Erdélyi Nimród
|
#A fordításban közreműködött: Vajda Simon, Polgár Sándor, Erdélyi Nimród és Halász Gergő
|
||||||
credits.text = Készítette: [royal]Anuken[] - [sky]anukendev@gmail.com[]
|
credits.text = Készítette: [royal]Anuken[] - [sky]anukendev@gmail.com[]
|
||||||
credits = Credits
|
credits = Creditek
|
||||||
contributors = Fordítok és készítők
|
contributors = Fordítok és készítők
|
||||||
discord = Csatlakozz a Mindustry Discord szerverhez!
|
discord = Csatlakozz a Mindustry Discord szerverhez!
|
||||||
link.discord.description = Az eredeti Mindustry Discord chatszoba
|
link.discord.description = Az eredeti Mindustry Discord chatszoba
|
||||||
@@ -15,10 +15,10 @@ link.f-droid.description = F-Droid katalógus listázás
|
|||||||
link.wiki.description = Hivatalos Mindustry wiki
|
link.wiki.description = Hivatalos Mindustry wiki
|
||||||
link.suggestions.description = Új funkciók ajánlása
|
link.suggestions.description = Új funkciók ajánlása
|
||||||
link.bug.description = Találtál szoftver hibá-t? Jelentsd itt
|
link.bug.description = Találtál szoftver hibá-t? Jelentsd itt
|
||||||
linkopen = This server has sent you a link. Are you sure you want to open it?\n\n[sky]{0}
|
linkopen = Ez a szerber egy linket küldött neked. Biztos vagy benne, hogy megnyitod?\n\n[sky]{0}
|
||||||
linkfail = Nem sikerült megnyitni a linket!\nAz URL a vágólapra lett másolva.
|
linkfail = Nem sikerült megnyitni a linket!\nAz URL a vágólapra lett másolva.
|
||||||
screenshot = Képernyőkép mentve ide: {0}
|
screenshot = Képernyőkép mentve ide: {0}
|
||||||
screenshot.invalid = Túl nagy a térkép, nincsen elég memória a képernyőképhez.
|
screenshot.invalid = Túl nagy a map, nincsen elég memória a képernyőképhez.
|
||||||
gameover = Játék vége
|
gameover = Játék vége
|
||||||
gameover.disconnect = Kapcsolat megszakadt
|
gameover.disconnect = Kapcsolat megszakadt
|
||||||
gameover.pvp = A[accent] {0}[] csapat nyert!
|
gameover.pvp = A[accent] {0}[] csapat nyert!
|
||||||
@@ -41,22 +41,22 @@ be.updating = Frissítés...
|
|||||||
be.ignore = Most nem
|
be.ignore = Most nem
|
||||||
be.noupdates = Nem találtunk frissítést.
|
be.noupdates = Nem találtunk frissítést.
|
||||||
be.check = Frissítések keresése.
|
be.check = Frissítések keresése.
|
||||||
mods.browser = Mod Browser
|
mods.browser = Mod választó
|
||||||
mods.browser.selected = Mod kiválasztása
|
mods.browser.selected = Mod kiválasztása
|
||||||
mods.browser.add = Letöltés
|
mods.browser.add = Letöltés
|
||||||
mods.browser.reinstall = Reinstall
|
mods.browser.reinstall = Reinstall
|
||||||
mods.browser.view-releases = View Releases
|
mods.browser.view-releases = Kiadások megtekintése
|
||||||
mods.browser.noreleases = [scarlet]No Releases Found\n[accent]Couldn't find any releases for this mod. Check if the mod's repository has any releases published.
|
mods.browser.noreleases = [scarlet]Nincsenek kiadások.\n[accent]Nem lehet kiadásokat találni ehhez a modhoz. Nézd meg a repository-ját, hogy vannak -e kiadásai.
|
||||||
mods.browser.latest = <Latest>
|
mods.browser.latest = <Latest>
|
||||||
mods.browser.releases = Releases
|
mods.browser.releases = Kiadások
|
||||||
mods.github.open = Megtekintés
|
mods.github.open = Megtekintés
|
||||||
mods.github.open-release = Release Page
|
mods.github.open-release = Kiadások oldala
|
||||||
mods.browser.sortdate = Rendezés dátum szerint
|
mods.browser.sortdate = Rendezés dátum szerint
|
||||||
mods.browser.sortstars = Rendezés értékelés szerint
|
mods.browser.sortstars = Rendezés értékelés szerint
|
||||||
|
|
||||||
schematic = Schematic
|
schematic = Schematic
|
||||||
schematic.add = Schematic mentése...
|
schematic.add = Schematic mentése...
|
||||||
schematics = Schematicok
|
schematics = Schematic-ok
|
||||||
schematic.replace = Már van ilyen nevű schematic. Lecseréled?
|
schematic.replace = Már van ilyen nevű schematic. Lecseréled?
|
||||||
schematic.exists = Már van ilyen nevű schematic.
|
schematic.exists = Már van ilyen nevű schematic.
|
||||||
schematic.import = Schematic importálása...
|
schematic.import = Schematic importálása...
|
||||||
@@ -72,23 +72,23 @@ schematic.delete.confirm = Ez a Schematic törölve lesz.
|
|||||||
schematic.rename = Schematic átnevezése
|
schematic.rename = Schematic átnevezése
|
||||||
schematic.info = {0}x{1}, {2} blokk
|
schematic.info = {0}x{1}, {2} blokk
|
||||||
schematic.disabled = [scarlet]Schematicok letiltva[]\nNem használhat Schematicot ezen a [accent]mapon[] vagy [accent] szerveren.
|
schematic.disabled = [scarlet]Schematicok letiltva[]\nNem használhat Schematicot ezen a [accent]mapon[] vagy [accent] szerveren.
|
||||||
schematic.tags = Tags:
|
schematic.tags = Címkék:
|
||||||
schematic.edittags = Edit Tags
|
schematic.edittags = Címkék szerkesztése
|
||||||
schematic.addtag = Add Tag
|
schematic.addtag = Címke hozzáadása
|
||||||
schematic.texttag = Text Tag
|
schematic.texttag = Következő címke
|
||||||
schematic.icontag = Icon Tag
|
schematic.icontag = Icon címke
|
||||||
schematic.renametag = Rename Tag
|
schematic.renametag = Címke átnevezése
|
||||||
schematic.tagdelconfirm = Delete this tag completely?
|
schematic.tagdelconfirm = Teljesen törlöd ezt a címkét?
|
||||||
schematic.tagexists = That tag already exists.
|
schematic.tagexists = Ez a címke már létezik.
|
||||||
|
|
||||||
stats = Statisztika
|
stats = Statisztika
|
||||||
stats.wave = Waves Defeated
|
stats.wave = Hullámok legyőzve
|
||||||
stats.unitsCreated = Units Created
|
stats.unitsCreated = Egységek létrehozva
|
||||||
stats.enemiesDestroyed = Enemies Destroyed
|
stats.enemiesDestroyed = Ellenségek megsemmisítve
|
||||||
stats.built = Buildings Built
|
stats.built = Építmények építve
|
||||||
stats.destroyed = Buildings Destroyed
|
stats.destroyed = Építmények elpusztítva
|
||||||
stats.deconstructed = Buildings Deconstructed
|
stats.deconstructed = Építmények lebontva
|
||||||
stats.playtime = Time Played
|
stats.playtime = Játszott idő
|
||||||
|
|
||||||
globalitems = [accent]Összes nyersanyag
|
globalitems = [accent]Összes nyersanyag
|
||||||
map.delete = Biztosan akkarod törlölni a "[accent]{0}[]" mapot?
|
map.delete = Biztosan akkarod törlölni a "[accent]{0}[]" mapot?
|
||||||
@@ -98,7 +98,7 @@ level.mode = Játékmód:
|
|||||||
coreattack = < A mag támadás alatt van! >
|
coreattack = < A mag támadás alatt van! >
|
||||||
nearpoint = [[ [scarlet]AZONNAL HAGYD EL A LEDOBÁSI PONTOT[] ]\nveszélyes zóna
|
nearpoint = [[ [scarlet]AZONNAL HAGYD EL A LEDOBÁSI PONTOT[] ]\nveszélyes zóna
|
||||||
database = Mag adatbázis
|
database = Mag adatbázis
|
||||||
database.button = Database
|
database.button = Adatbázis
|
||||||
savegame = Játék mentése
|
savegame = Játék mentése
|
||||||
loadgame = Játék betöltése
|
loadgame = Játék betöltése
|
||||||
joingame = Csatlakozás játékhoz
|
joingame = Csatlakozás játékhoz
|
||||||
@@ -112,7 +112,7 @@ position = Pozíció
|
|||||||
close = Bezárás
|
close = Bezárás
|
||||||
website = Weboldal
|
website = Weboldal
|
||||||
quit = Kilépés
|
quit = Kilépés
|
||||||
save.quit = Mentés & Kilépés
|
save.quit = Mentés és kilépés
|
||||||
maps = Mapok
|
maps = Mapok
|
||||||
maps.browse = Mapok keresése
|
maps.browse = Mapok keresése
|
||||||
continue = Folytatás
|
continue = Folytatás
|
||||||
@@ -126,36 +126,40 @@ uploadingpreviewfile = Előnézet feltöltése
|
|||||||
committingchanges = Változások mentése
|
committingchanges = Változások mentése
|
||||||
done = Kész
|
done = Kész
|
||||||
feature.unsupported = Az eszköz nem támogatja ezt a funkciót.
|
feature.unsupported = Az eszköz nem támogatja ezt a funkciót.
|
||||||
mods.initfailed = [red]⚠[] The previous Mindustry instance failed to initialize. This was likely caused by misbehaving mods.\n\nTo prevent a crash loop, [red]all mods have been disabled.[]
|
mods.initfailed = [red]⚠[] Az előző Mindustry munkamenet nem tudott inícializálódni. Ez valószínű egy rosszúl működő mod miatt történt.\n\nA crash loop elkerülése érdekében, [red]minden mod le lett tiltva.[]
|
||||||
mods = Modok
|
mods = Modok
|
||||||
mods.none = [lightgray]Nincsen mod!
|
mods.none = [lightgray]Nincsen mod!
|
||||||
mods.guide = Mod készítési útmutató
|
mods.guide = Mod készítési útmutató
|
||||||
mods.report = Hiba jelentése
|
mods.report = Hiba jelentése
|
||||||
mods.openfolder = Megnyitás mappából
|
mods.openfolder = Megnyitás mappából
|
||||||
mods.viewcontent = View Content
|
mods.viewcontent = Tartalom megtekintése
|
||||||
mods.reload = Újratöltés
|
mods.reload = Újratöltés
|
||||||
mods.reloadexit = Indítsd újra a játékot, hogy betöltődjenek a modok.
|
mods.reloadexit = Indítsd újra a játékot, hogy betöltődjenek a modok.
|
||||||
mod.installed = [[Installed]
|
mod.installed = [[Installed]
|
||||||
mod.display = [gray]Mod:[orange] {0}
|
mod.display = [gray]Mod:[orange] {0}
|
||||||
mod.enabled = [lightgray]Aktív
|
mod.enabled = [lightgray]Aktív
|
||||||
mod.disabled = [scarlet]Inaktív
|
mod.disabled = [scarlet]Inaktív
|
||||||
mod.multiplayer.compatible = [gray]Multiplayer Compatible
|
mod.multiplayer.compatible = [gray]Többjátékos kompatibilis
|
||||||
mod.disable = Letiltás
|
mod.disable = Letiltás
|
||||||
mod.content = Tartalom:
|
mod.content = Tartalom:
|
||||||
mod.delete.error = Nem lehet törölni a Modot. Lehet, hogy egy másik folyamat használja.
|
mod.delete.error = Nem lehet törölni a Modot. Lehet, hogy egy másik folyamat használja.
|
||||||
mod.incompatiblegame = [red]Outdated Game
|
mod.incompatiblegame = [red]Elavúlt játék
|
||||||
mod.incompatiblemod = [red]Incompatible
|
mod.incompatiblemod = [red]Nem kompatibilis
|
||||||
mod.blacklisted = [red]Unsupported
|
mod.blacklisted = [red]Nem támogatott
|
||||||
mod.unmetdependencies = [red]Unmet Dependencies
|
mod.unmetdependencies = [red]Összeférhetetlen függőségek
|
||||||
mod.erroredcontent = [scarlet]Tartalom hiba
|
mod.erroredcontent = [scarlet]Tartalom hiba
|
||||||
mod.requiresversion.details = Requires game version: [accent]{0}[]\nYour game is outdated. This mod requires a newer version of the game (possibly a beta/alpha release) to function.
|
mod.circulardependencies = [red]Körkörös függőségek
|
||||||
mod.outdatedv7.details = This mod is incompatible with the latest version of the game. The author must update it, and add [accent]minGameVersion: 136[] to its [accent]mod.json[] file.
|
mod.incompletedependencies = [red]Befejezetlen függőségek
|
||||||
mod.blacklisted.details = This mod has been manually blacklisted for causing crashes or other issues with this version of the game. Do not use it.
|
mod.requiresversion.details = [accent]{0}[] játékverzió szükséges.\nA letöltésed elavúlt. Ez a mod egy újabb verziót kíván (velószínű, egy beta/alpha kiadást) a működéshez.
|
||||||
mod.missingdependencies.details = This mod is missing dependencies: {0}
|
mod.outdatedv7.details = Ez a mod nem kompatibilis a játék legújabb berziójával. A készítőjének frissítenie kell azt, és hozzá kell adnia a [accent]minGameVersion: 136[] -t a [accent]mod.json[] fájlhoz.
|
||||||
mod.erroredcontent.details = This game caused errors when loading. Ask the mod author to fix them.
|
mod.blacklisted.details = Ez a mod manuálisan a feketelistára került, mert a játék összeomlott tőle, vagy más probléma miatt. Ne használd!
|
||||||
mod.requiresversion = Requires game version: [red]{0}
|
mod.missingdependencies.details = Ez a mod hiányol függőségeket: {0}
|
||||||
|
mod.erroredcontent.details = Ez a játék hibákat okozott betöltésnél. Kérd meg a mod készítőjét hogy kijavítsa őket!
|
||||||
|
mod.circulardependencies.details = Ennek a modnak egymástól függő föggőségai vannak.
|
||||||
|
mod.incompletedependencies.details = Ez a mod nem tudott betölteni hiányzó, vagy rossz függőségek miatt: {0}.
|
||||||
|
mod.requiresversion = [red]{0}[] játékverzió szükséges.
|
||||||
mod.errors = Hiba történt a tartalom betöltése közben.
|
mod.errors = Hiba történt a tartalom betöltése közben.
|
||||||
mod.noerrorplay = [scarlet]Vannak hibás Modok.[] Kapcsold ki vagy javítsd ki őket a játék előtt.
|
mod.noerrorplay = [scarlet]Vannak hibás Modok.[] Kapcsold ki, vagy javítsd ki őket a játék előtt.
|
||||||
mod.nowdisabled = [scarlet]A '{0}' Modnak nincsen megfelelő függősége:[accent] {1}\n[lightgray]Ezeket előbb le kell tölteni.\nEz a Mod automatikusan törölve lesz.
|
mod.nowdisabled = [scarlet]A '{0}' Modnak nincsen megfelelő függősége:[accent] {1}\n[lightgray]Ezeket előbb le kell tölteni.\nEz a Mod automatikusan törölve lesz.
|
||||||
mod.enable = Engedélyezés
|
mod.enable = Engedélyezés
|
||||||
mod.requiresrestart = A játék kilép a módosítások alkalmazásához.
|
mod.requiresrestart = A játék kilép a módosítások alkalmazásához.
|
||||||
@@ -164,7 +168,7 @@ mod.import = Mod importálása
|
|||||||
mod.import.file = Fájl importálása
|
mod.import.file = Fájl importálása
|
||||||
mod.import.github = GitHub Mod importálása
|
mod.import.github = GitHub Mod importálása
|
||||||
mod.jarwarn = [scarlet]A JAR modok eredendően nem biztonságosak.[]\nGyőződj meg arról, hogy ezt a modot megbízható forrásból importálod!
|
mod.jarwarn = [scarlet]A JAR modok eredendően nem biztonságosak.[]\nGyőződj meg arról, hogy ezt a modot megbízható forrásból importálod!
|
||||||
mod.item.remove = Ez az elem része a [accent] '{0}'[] Modnak. A törléshez távolítsd el a Modot.
|
mod.item.remove = Ez az elem része a(z) [accent] '{0}'[] Modnak. A törléshez távolítsd el a Modot.
|
||||||
mod.remove.confirm = Ez a Mod törölve lesz.
|
mod.remove.confirm = Ez a Mod törölve lesz.
|
||||||
mod.author = [LIGHT_GRAY]Készítő:[] {0}
|
mod.author = [LIGHT_GRAY]Készítő:[] {0}
|
||||||
mod.missing = Ez a mentés nemrég törölt vagy frissített Modokat tartalmaz. Elképzelhető, hogy nem fog működni. Biztosan betöltöd?\n[lightgray]Modok:\n{0}
|
mod.missing = Ez a mentés nemrég törölt vagy frissített Modokat tartalmaz. Elképzelhető, hogy nem fog működni. Biztosan betöltöd?\n[lightgray]Modok:\n{0}
|
||||||
@@ -181,14 +185,14 @@ launchcore = Mag kilövése
|
|||||||
filename = Fájl név:
|
filename = Fájl név:
|
||||||
unlocked = Új tartalom kinyitva!
|
unlocked = Új tartalom kinyitva!
|
||||||
available = Új kutatás áll rendelkezésre!
|
available = Új kutatás áll rendelkezésre!
|
||||||
unlock.incampaign = < Unlock in campaign for details >
|
unlock.incampaign = < Oldd fel kampány módban a részletekért >
|
||||||
campaign.select = Select Starting Campaign
|
campaign.select = Válassz kezdő kampányt!
|
||||||
campaign.none = [lightgray]Select a planet to start on.\nThis can be switched at any time.
|
campaign.none = [lightgray]Válassz egy bolygót a kezdéshez.\nEzt bármikor megváltoztathatod.
|
||||||
campaign.erekir = Newer, more polished content. Mostly linear campaign progression.\n\nHigher quality maps and overall experience.
|
campaign.erekir = Újabb, csiszoltabb tartalom. Általában lineáris kampány.\n\nMagasabb minőségű mapok és élmények.
|
||||||
campaign.serpulo = Older content; the classic experience. More open-ended.\n\nPotentially unbalanced maps and campaign mechanics. Less polished.
|
campaign.serpulo = Régebbi tartalom. A klasszikus élmények. Nyíltabb végű.\n\nPotenciálisan kiegyensúlyozatlan mapok és kampány. Kevésbé csiszolt.
|
||||||
completed = [accent]Kész
|
completed = [accent]Kész
|
||||||
techtree = Tech Tree
|
techtree = Fejlődési fa
|
||||||
techtree.select = Tech Tree Selection
|
techtree.select = Fejlődési fa kiválasztás
|
||||||
techtree.serpulo = Serpulo
|
techtree.serpulo = Serpulo
|
||||||
techtree.erekir = Erekir
|
techtree.erekir = Erekir
|
||||||
research.load = Betöltés
|
research.load = Betöltés
|
||||||
@@ -234,7 +238,7 @@ hosts.none = [lightgray]Nincs helyi játék!
|
|||||||
host.invalid = [scarlet]Nem sikerült csatlakozni.
|
host.invalid = [scarlet]Nem sikerült csatlakozni.
|
||||||
|
|
||||||
servers.local = Helyi Szerverek
|
servers.local = Helyi Szerverek
|
||||||
servers.local.steam = Open Games & Local Servers
|
servers.local.steam = Nyitott játékok és helyi szerverek
|
||||||
servers.remote = Távoli Szerverek
|
servers.remote = Távoli Szerverek
|
||||||
servers.global = Közösségi szerverek
|
servers.global = Közösségi szerverek
|
||||||
|
|
||||||
@@ -250,8 +254,8 @@ trace.ip = IP: [accent]{0}
|
|||||||
trace.id = Azonosító: [accent]{0}
|
trace.id = Azonosító: [accent]{0}
|
||||||
trace.mobile = Mobil kliens: [accent]{0}
|
trace.mobile = Mobil kliens: [accent]{0}
|
||||||
trace.modclient = Nem hivatalos kliens: [accent]{0}
|
trace.modclient = Nem hivatalos kliens: [accent]{0}
|
||||||
trace.times.joined = Times Joined: [accent]{0}
|
trace.times.joined = Csatlakotások száma: [accent]{0}
|
||||||
trace.times.kicked = Times Kicked: [accent]{0}
|
trace.times.kicked = Kirúgások száma: [accent]{0}
|
||||||
invalidid = Érvénytelen kliens ID! Küldj hibajelentést.
|
invalidid = Érvénytelen kliens ID! Küldj hibajelentést.
|
||||||
server.bans = Tiltások
|
server.bans = Tiltások
|
||||||
server.bans.none = Nincsenek tiltott játékosok!
|
server.bans.none = Nincsenek tiltott játékosok!
|
||||||
@@ -287,7 +291,7 @@ server.invalidport = Érvénytelen port!
|
|||||||
server.error = [crimson]Nem sikerült megnyitni a szervert.
|
server.error = [crimson]Nem sikerült megnyitni a szervert.
|
||||||
save.new = Új mentés
|
save.new = Új mentés
|
||||||
save.overwrite = Biztosan felülírod\nezt a mentést?
|
save.overwrite = Biztosan felülírod\nezt a mentést?
|
||||||
save.nocampaign = Individual save files from the campaign cannot be imported.
|
save.nocampaign = Nem lehet importálni különálló kampány mentés fájlokat.
|
||||||
overwrite = Felülírás
|
overwrite = Felülírás
|
||||||
save.none = Nem található mentés!
|
save.none = Nem található mentés!
|
||||||
savefail = Nem sikerült menteni!
|
savefail = Nem sikerült menteni!
|
||||||
@@ -308,7 +312,7 @@ save.corrupted = Érvénytelen fájl!
|
|||||||
empty = <üres>
|
empty = <üres>
|
||||||
on = Be
|
on = Be
|
||||||
off = Ki
|
off = Ki
|
||||||
save.search = Search saved games...
|
save.search = Keresés a mentett játékok között...
|
||||||
save.autosave = Automatikus mentés: {0}
|
save.autosave = Automatikus mentés: {0}
|
||||||
save.map = Térkép: {0}
|
save.map = Térkép: {0}
|
||||||
save.wave = Hullám: {0}
|
save.wave = Hullám: {0}
|
||||||
@@ -324,17 +328,18 @@ ok = OK
|
|||||||
open = Megnyitás
|
open = Megnyitás
|
||||||
customize = Szabályok módosítása
|
customize = Szabályok módosítása
|
||||||
cancel = Mégse
|
cancel = Mégse
|
||||||
command = Command
|
command = Parancs
|
||||||
command.mine = Mine
|
command.mine = Bányászás
|
||||||
command.repair = Repair
|
command.repair = Javítás
|
||||||
command.rebuild = Rebuild
|
command.rebuild = Újraépítés
|
||||||
command.assist = Assist Player
|
command.assist = Segítség játékosnak
|
||||||
command.move = Move
|
command.move = Mozgás
|
||||||
|
command.boost = Boost-olás
|
||||||
openlink = Link megnyitása
|
openlink = Link megnyitása
|
||||||
copylink = Link másolása
|
copylink = Link másolása
|
||||||
back = Vissza
|
back = Vissza
|
||||||
max = Max
|
max = Max
|
||||||
objective = Map Objective
|
objective = Map célja
|
||||||
crash.export = Összeomlási napló exportálása
|
crash.export = Összeomlási napló exportálása
|
||||||
crash.none = Nem található összeomlási napló.
|
crash.none = Nem található összeomlási napló.
|
||||||
crash.exported = Összeomlási napló exportálva.
|
crash.exported = Összeomlási napló exportálva.
|
||||||
@@ -346,7 +351,7 @@ data.invalid = Érvénytelen adatok.
|
|||||||
data.import.confirm = Külső adat importálása felülírja[scarlet] minden[] jelenlegi adatodat.\n[accent]Nem lehet visszavonni![]\n\nAmint kész az importálás, kilép a játék.
|
data.import.confirm = Külső adat importálása felülírja[scarlet] minden[] jelenlegi adatodat.\n[accent]Nem lehet visszavonni![]\n\nAmint kész az importálás, kilép a játék.
|
||||||
quit.confirm = Biztos kilépsz?
|
quit.confirm = Biztos kilépsz?
|
||||||
loading = [accent]Betöltés...
|
loading = [accent]Betöltés...
|
||||||
downloading = [accent]Downloading...
|
downloading = [accent]Letöltés...
|
||||||
saving = [accent]Mentés...
|
saving = [accent]Mentés...
|
||||||
respawn = Nyomd meg a(z) [accent][[{0}][] gombot, hogy újraéledj a magban.
|
respawn = Nyomd meg a(z) [accent][[{0}][] gombot, hogy újraéledj a magban.
|
||||||
cancelbuilding = Használd a(z) [accent][[{0}][] gombot, hogy töröld a tervrajzot.
|
cancelbuilding = Használd a(z) [accent][[{0}][] gombot, hogy töröld a tervrajzot.
|
||||||
@@ -355,7 +360,7 @@ pausebuilding = Használd a(z) [accent][[{0}][] gombot, hogy megállítsd az ép
|
|||||||
resumebuilding = Használd a(z) [scarlet][[{0}][] gombot, hogy folytasd az építkezést.
|
resumebuilding = Használd a(z) [scarlet][[{0}][] gombot, hogy folytasd az építkezést.
|
||||||
enablebuilding = [scarlet][[{0}][] to enable building
|
enablebuilding = [scarlet][[{0}][] to enable building
|
||||||
showui = A kezelőfelület elrejtve.\nNyomd meg a(z) [accent][[{0}][] gombot a megjelenítéséhez.
|
showui = A kezelőfelület elrejtve.\nNyomd meg a(z) [accent][[{0}][] gombot a megjelenítéséhez.
|
||||||
commandmode.name = [accent]Command Mode
|
commandmode.name = [accent]Parancs mód
|
||||||
commandmode.nounits = [no units]
|
commandmode.nounits = [no units]
|
||||||
wave = [accent]{0}. hullám
|
wave = [accent]{0}. hullám
|
||||||
wave.cap = [accent]{0}./{1} hullám
|
wave.cap = [accent]{0}./{1} hullám
|
||||||
@@ -386,17 +391,17 @@ map.publish.confirm = Biztos, hogy közzéteszed ezt a mapot?\n\n[lightgray] Gy
|
|||||||
workshop.menu = Válaszd ki, mit szeretnél csinálni ezzel az itemmel.
|
workshop.menu = Válaszd ki, mit szeretnél csinálni ezzel az itemmel.
|
||||||
workshop.info = Item Infó
|
workshop.info = Item Infó
|
||||||
changelog = Változtatási napló (opcionális):
|
changelog = Változtatási napló (opcionális):
|
||||||
updatedesc = Overwrite Title & Description
|
updatedesc = Cím és leírás felülírása
|
||||||
eula = Steam EULA
|
eula = Steam EULA
|
||||||
missing = Ezt az elemet törölték vagy áthelyezték.\n[lightgray] A workshop adatait automatikusan leválasztották.
|
missing = Ezt az elemet törölték vagy áthelyezték.\n[lightgray] A workshop adatait automatikusan leválasztották.
|
||||||
publishing = [accent]Publikálás...
|
publishing = [accent]Publikálás...
|
||||||
publish.confirm = Biztosan közzéteszed?\n\n[lightgray] Győződj meg róla, hogy elfogadtad a Workshop EULA-t, különben az itemjeid nem jelennek meg!
|
publish.confirm = Biztosan közzéteszed?\n\n[lightgray] Győződj meg róla, hogy elfogadtad a Workshop EULA-t, különben az itemjeid nem jelennek meg!
|
||||||
publish.error = Hiba az item publikálásakor: {0}
|
publish.error = Hiba az item publikálásakor: {0}
|
||||||
steam.error = Nem sikerült inicializálni a Steam szolgáltatásokat.\nHiba: {0}
|
steam.error = Nem sikerült inicializálni a Steam szolgáltatásokat.\nHiba: {0}
|
||||||
editor.planet = Planet:
|
editor.planet = Bolygó:
|
||||||
editor.sector = Sector:
|
editor.sector = Szektor:
|
||||||
editor.seed = Seed:
|
editor.seed = Seed:
|
||||||
editor.cliffs = Walls To Cliffs
|
editor.cliffs = Falak sziklákká
|
||||||
|
|
||||||
editor.brush = Méret
|
editor.brush = Méret
|
||||||
editor.openin = Megnyitás a szerkesztőben
|
editor.openin = Megnyitás a szerkesztőben
|
||||||
@@ -409,35 +414,35 @@ editor.nodescription = A mapnak rendelkeznie kell egy legalább 4 karakter hossz
|
|||||||
editor.waves = Hullámok:
|
editor.waves = Hullámok:
|
||||||
editor.rules = Szabályok:
|
editor.rules = Szabályok:
|
||||||
editor.generation = generálás:
|
editor.generation = generálás:
|
||||||
editor.objectives = Objectives
|
editor.objectives = Célok
|
||||||
editor.ingame = Szerkesztés játékban
|
editor.ingame = Szerkesztés játékban
|
||||||
editor.playtest = Playtest
|
editor.playtest = Teszt játékban
|
||||||
editor.publish.workshop = Közzététel workshopon
|
editor.publish.workshop = Közzététel workshopon
|
||||||
editor.newmap = Új Map
|
editor.newmap = Új Map
|
||||||
editor.center = Ugrás középre
|
editor.center = Ugrás középre
|
||||||
editor.search = Search maps...
|
editor.search = Mapok keresése...
|
||||||
editor.filters = Filter Maps
|
editor.filters = Mapok szűrése
|
||||||
editor.filters.mode = Gamemodes:
|
editor.filters.mode = Játékmódok:
|
||||||
editor.filters.type = Map Type:
|
editor.filters.type = Map típus:
|
||||||
editor.filters.search = Search In:
|
editor.filters.search = Keresés ebben:
|
||||||
editor.filters.author = Author
|
editor.filters.author = Készítő
|
||||||
editor.filters.description = Description
|
editor.filters.description = Leírás
|
||||||
editor.shiftx = Shift X
|
editor.shiftx = X eltolás
|
||||||
editor.shifty = Shift Y
|
editor.shifty = Y eltolás
|
||||||
workshop = Workshop
|
workshop = Workshop
|
||||||
waves.title = Hullámok
|
waves.title = Hullámok
|
||||||
waves.remove = Eltávolítás
|
waves.remove = Eltávolítás
|
||||||
waves.every = every
|
waves.every = minden
|
||||||
waves.waves = hullámonként
|
waves.waves = hullámonként
|
||||||
waves.health = health: {0}%
|
waves.health = élet: {0}%
|
||||||
waves.perspawn = per spawn
|
waves.perspawn = per spawn
|
||||||
waves.shields = pajzs/hullám
|
waves.shields = pajzs/hullám
|
||||||
waves.to = -
|
waves.to = -
|
||||||
waves.spawn = spawn:
|
waves.spawn = spawn:
|
||||||
waves.spawn.all = <all>
|
waves.spawn.all = <mind>
|
||||||
waves.spawn.select = Spawn Select
|
waves.spawn.select = Kezdőhely kiválasztása
|
||||||
waves.spawn.none = [scarlet]no spawns found in map
|
waves.spawn.none = [scarlet]Nem lehet kezdőhelyet találni
|
||||||
waves.max = max units
|
waves.max = max egységek
|
||||||
waves.guardian = őrző
|
waves.guardian = őrző
|
||||||
waves.preview = Előnézet
|
waves.preview = Előnézet
|
||||||
waves.edit = Szerksztés...
|
waves.edit = Szerksztés...
|
||||||
@@ -447,11 +452,11 @@ waves.load = Másolás a vágólapról
|
|||||||
waves.invalid = Nem lehet beilleszteni a vágólapról.
|
waves.invalid = Nem lehet beilleszteni a vágólapról.
|
||||||
waves.copied = Hullámok másolva.
|
waves.copied = Hullámok másolva.
|
||||||
waves.none = Nincs ellenség megadva.\nAz üresen hagyott tervek automatikusan lecserélődnek az alapbeállításra.
|
waves.none = Nincs ellenség megadva.\nAz üresen hagyott tervek automatikusan lecserélődnek az alapbeállításra.
|
||||||
waves.sort = Sort By
|
waves.sort = Rendezési szempont
|
||||||
waves.sort.reverse = Reverse Sort
|
waves.sort.reverse = Rendezés visszafelé
|
||||||
waves.sort.begin = Begin
|
waves.sort.begin = Begin
|
||||||
waves.sort.health = Health
|
waves.sort.health = Élet
|
||||||
waves.sort.type = Type
|
waves.sort.type = Típus
|
||||||
waves.units.hide = Hide All
|
waves.units.hide = Hide All
|
||||||
waves.units.show = Show All
|
waves.units.show = Show All
|
||||||
|
|
||||||
@@ -463,10 +468,10 @@ wavemode.health = életpontok
|
|||||||
editor.default = [lightgray]<Alapbeállítás>
|
editor.default = [lightgray]<Alapbeállítás>
|
||||||
details = Részletek...
|
details = Részletek...
|
||||||
edit = Szerkesztés...
|
edit = Szerkesztés...
|
||||||
variables = Vars
|
variables = Változók
|
||||||
editor.name = Név:
|
editor.name = Név:
|
||||||
editor.spawn = Spawn Unit
|
editor.spawn = Egység megidézése
|
||||||
editor.removeunit = Remove Unit
|
editor.removeunit = Egység eltávolítása
|
||||||
editor.teams = Csapatok
|
editor.teams = Csapatok
|
||||||
editor.errorload = Hiba a fájl betöltése közben.
|
editor.errorload = Hiba a fájl betöltése közben.
|
||||||
editor.errorsave = Hiba a fájl mentése közben.
|
editor.errorsave = Hiba a fájl mentése közben.
|
||||||
@@ -477,12 +482,12 @@ editor.errorheader = Ez a map fájl vagy érvénytelen vagy sérült.
|
|||||||
editor.errorname = A Mapnak nincs neve. Mentést próbálsz betölteni?
|
editor.errorname = A Mapnak nincs neve. Mentést próbálsz betölteni?
|
||||||
editor.update = Frissítés
|
editor.update = Frissítés
|
||||||
editor.randomize = Véletlenszerű
|
editor.randomize = Véletlenszerű
|
||||||
editor.moveup = Move Up
|
editor.moveup = Mozgás fel
|
||||||
editor.movedown = Move Down
|
editor.movedown = Mozgás le
|
||||||
editor.copy = Copy
|
editor.copy = Másolás
|
||||||
editor.apply = Alkalmazás
|
editor.apply = Alkalmazás
|
||||||
editor.generate = Haladó funkciók
|
editor.generate = Haladó funkciók
|
||||||
editor.sectorgenerate = Sector Generate
|
editor.sectorgenerate = Szektor generálása
|
||||||
editor.resize = Átméretezés
|
editor.resize = Átméretezés
|
||||||
editor.loadmap = Map betöltése
|
editor.loadmap = Map betöltése
|
||||||
editor.savemap = Mentés
|
editor.savemap = Mentés
|
||||||
@@ -526,8 +531,8 @@ toolmode.fillteams = Fill Teams
|
|||||||
toolmode.fillteams.description = Fill teams instead of blocks.
|
toolmode.fillteams.description = Fill teams instead of blocks.
|
||||||
toolmode.drawteams = Draw Teams
|
toolmode.drawteams = Draw Teams
|
||||||
toolmode.drawteams.description = Draw teams instead of blocks.
|
toolmode.drawteams.description = Draw teams instead of blocks.
|
||||||
toolmode.underliquid = Under Liquids
|
toolmode.underliquid = Folyadékok alá
|
||||||
toolmode.underliquid.description = Draw floors under liquid tiles.
|
toolmode.underliquid.description = Padlók folyadék blokkok alá rajzolása.
|
||||||
|
|
||||||
filters.empty = [lightgray]Még nincs filter! Adj hozzá egyet a lenti gombra kattintva!
|
filters.empty = [lightgray]Még nincs filter! Adj hozzá egyet a lenti gombra kattintva!
|
||||||
filter.distort = Distort
|
filter.distort = Distort
|
||||||
@@ -973,6 +978,8 @@ bullet.splashdamage = [stat]{0}[lightgray] területi sebzés ~[stat] {1}[lightgr
|
|||||||
bullet.incendiary = [stat]gyújtó
|
bullet.incendiary = [stat]gyújtó
|
||||||
bullet.homing = [stat]nyomkövető
|
bullet.homing = [stat]nyomkövető
|
||||||
bullet.armorpierce = [stat]armor piercing
|
bullet.armorpierce = [stat]armor piercing
|
||||||
|
bullet.suppression = [stat]{0} sec[lightgray] repair suppression ~ [stat]{1}[lightgray] tiles
|
||||||
|
bullet.interval = [stat]{0}/sec[lightgray] interval bullets:
|
||||||
bullet.frags = [stat]{0}[lightgray]x frag bullets:
|
bullet.frags = [stat]{0}[lightgray]x frag bullets:
|
||||||
bullet.lightning = [stat]{0}[lightgray]x lightning ~ [stat]{1}[lightgray] damage
|
bullet.lightning = [stat]{0}[lightgray]x lightning ~ [stat]{1}[lightgray] damage
|
||||||
bullet.buildingdamage = [stat]{0}%[lightgray] épület sebzés
|
bullet.buildingdamage = [stat]{0}%[lightgray] épület sebzés
|
||||||
@@ -1086,8 +1093,8 @@ setting.bridgeopacity.name = Híd átlátszatlansága
|
|||||||
setting.playerchat.name = Játékos szóbuborékok megjelenítése
|
setting.playerchat.name = Játékos szóbuborékok megjelenítése
|
||||||
setting.showweather.name = Időjárás grafika megjelenítése
|
setting.showweather.name = Időjárás grafika megjelenítése
|
||||||
setting.hidedisplays.name = Hide Logic Displays
|
setting.hidedisplays.name = Hide Logic Displays
|
||||||
public.confirm = Szeretnéd a játékot nyilvánossá tenni?\n[accent]Bárki beléphet a játékaidba.\n[lightgray]Ezt később megváltoztathatod a Beállítások->Játék->Nyilvános játék láthatósága menüpontban.
|
steam.friendsonly = Friends Only
|
||||||
public.confirm.really = Ha a barátaiddal szeretnél játszani, használd a [green]Barátok meghívása[] funkciót [scarlet]Nyilvános szerver[] helyett!\nBiztosan szeretnéd, hogy a játékod [scarlet]nyilvános[] legyen?
|
steam.friendsonly.tooltip = Whether only Steam friends will be able to join your game.\nUnchecking this box will make your game public - anyone can join.
|
||||||
public.beta = Ne feledd, hogy a játék béta verziójában nem tudsz nyilvános szobát nyitni.
|
public.beta = Ne feledd, hogy a játék béta verziójában nem tudsz nyilvános szobát nyitni.
|
||||||
uiscale.reset = Az UI mérete megváltozott.\nAz "OK" gombbal megerősítheted ezt a méretet.\n[scarlet]Visszavonás és kilépés [accent] {0}[] másodperc múlva...
|
uiscale.reset = Az UI mérete megváltozott.\nAz "OK" gombbal megerősítheted ezt a méretet.\n[scarlet]Visszavonás és kilépés [accent] {0}[] másodperc múlva...
|
||||||
uiscale.cancel = Mégse és Kilépés
|
uiscale.cancel = Mégse és Kilépés
|
||||||
@@ -1139,8 +1146,8 @@ keybind.select.name = Kiválasztás/Lövés
|
|||||||
keybind.diagonal_placement.name = Átlós elhelyezés
|
keybind.diagonal_placement.name = Átlós elhelyezés
|
||||||
keybind.pick.name = Blokk másolása
|
keybind.pick.name = Blokk másolása
|
||||||
keybind.break_block.name = Blokk törlése
|
keybind.break_block.name = Blokk törlése
|
||||||
keybind.select_all_units = Select All Units
|
keybind.select_all_units.name = Select All Units
|
||||||
keybind.select_all_unit_factories = Select All Unit Factories
|
keybind.select_all_unit_factories.name = Select All Unit Factories
|
||||||
keybind.deselect.name = Blokk választás törlése
|
keybind.deselect.name = Blokk választás törlése
|
||||||
keybind.pickupCargo.name = Rakomány felvétele
|
keybind.pickupCargo.name = Rakomány felvétele
|
||||||
keybind.dropCargo.name = Rakomány lerakása
|
keybind.dropCargo.name = Rakomány lerakása
|
||||||
@@ -2193,6 +2200,7 @@ lst.flushmessage = Display a message on the screen from the text buffer.\nWill w
|
|||||||
lst.cutscene = Manipulate the player camera.
|
lst.cutscene = Manipulate the player camera.
|
||||||
lst.setflag = Set a global flag that can be read by all processors.
|
lst.setflag = Set a global flag that can be read by all processors.
|
||||||
lst.getflag = Check if a global flag is set.
|
lst.getflag = Check if a global flag is set.
|
||||||
|
lst.setprop = Sets a property of a unit or building.
|
||||||
logic.nounitbuild = [red]Unit building logic is not allowed here.
|
logic.nounitbuild = [red]Unit building logic is not allowed here.
|
||||||
lenum.type = Type of building/unit.\ne.g. for any router, this will return [accent]@router[].\nNot a string.
|
lenum.type = Type of building/unit.\ne.g. for any router, this will return [accent]@router[].\nNot a string.
|
||||||
lenum.shoot = Shoot at a position.
|
lenum.shoot = Shoot at a position.
|
||||||
|
|||||||
@@ -149,11 +149,15 @@ mod.incompatiblemod = [red]Incompatible
|
|||||||
mod.blacklisted = [red]Unsupported
|
mod.blacklisted = [red]Unsupported
|
||||||
mod.unmetdependencies = [red]Unmet Dependencies
|
mod.unmetdependencies = [red]Unmet Dependencies
|
||||||
mod.erroredcontent = [scarlet]Konten Mengalami Kesalahan
|
mod.erroredcontent = [scarlet]Konten Mengalami Kesalahan
|
||||||
|
mod.circulardependencies = [red]Circular Dependencies
|
||||||
|
mod.incompletedependencies = [red]Incomplete Dependencies
|
||||||
mod.requiresversion.details = Requires game version: [accent]{0}[]\nYour game is outdated. This mod requires a newer version of the game (possibly a beta/alpha release) to function.
|
mod.requiresversion.details = Requires game version: [accent]{0}[]\nYour game is outdated. This mod requires a newer version of the game (possibly a beta/alpha release) to function.
|
||||||
mod.outdatedv7.details = This mod is incompatible with the latest version of the game. The author must update it, and add [accent]minGameVersion: 136[] to its [accent]mod.json[] file.
|
mod.outdatedv7.details = This mod is incompatible with the latest version of the game. The author must update it, and add [accent]minGameVersion: 136[] to its [accent]mod.json[] file.
|
||||||
mod.blacklisted.details = This mod has been manually blacklisted for causing crashes or other issues with this version of the game. Do not use it.
|
mod.blacklisted.details = This mod has been manually blacklisted for causing crashes or other issues with this version of the game. Do not use it.
|
||||||
mod.missingdependencies.details = This mod is missing dependencies: {0}
|
mod.missingdependencies.details = This mod is missing dependencies: {0}
|
||||||
mod.erroredcontent.details = This game caused errors when loading. Ask the mod author to fix them.
|
mod.erroredcontent.details = This game caused errors when loading. Ask the mod author to fix them.
|
||||||
|
mod.circulardependencies.details = This mod has dependencies that depends on each other.
|
||||||
|
mod.incompletedependencies.details = This mod is unable to be loaded due to invalid or missing dependencies: {0}.
|
||||||
mod.requiresversion = Requires game version: [red]{0}
|
mod.requiresversion = Requires game version: [red]{0}
|
||||||
mod.errors = Terjadi kesalahan saat memuat konten.
|
mod.errors = Terjadi kesalahan saat memuat konten.
|
||||||
mod.noerrorplay = [scarlet]Anda memiliki mod dengan suatu kesalahan.[] Nonaktifkan mod yang bersangkutan atau perbaiki kesalahan tersebut sebelum bermain.
|
mod.noerrorplay = [scarlet]Anda memiliki mod dengan suatu kesalahan.[] Nonaktifkan mod yang bersangkutan atau perbaiki kesalahan tersebut sebelum bermain.
|
||||||
@@ -331,6 +335,7 @@ command.repair = Perbaiki
|
|||||||
command.rebuild = Bangun Kembali
|
command.rebuild = Bangun Kembali
|
||||||
command.assist = Bantu Pemain
|
command.assist = Bantu Pemain
|
||||||
command.move = Maju
|
command.move = Maju
|
||||||
|
command.boost = Boost
|
||||||
openlink = Buka Tautan
|
openlink = Buka Tautan
|
||||||
copylink = Salin Tautan
|
copylink = Salin Tautan
|
||||||
back = Kembali
|
back = Kembali
|
||||||
@@ -984,6 +989,8 @@ bullet.splashdamage = [stat]{0}[lightgray] kekuatan percikan~[stat] {1}[lightgra
|
|||||||
bullet.incendiary = [stat]membakar
|
bullet.incendiary = [stat]membakar
|
||||||
bullet.homing = [stat]mengejar
|
bullet.homing = [stat]mengejar
|
||||||
bullet.armorpierce = [stat]menembus baju besi
|
bullet.armorpierce = [stat]menembus baju besi
|
||||||
|
bullet.suppression = [stat]{0} sec[lightgray] repair suppression ~ [stat]{1}[lightgray] tiles
|
||||||
|
bullet.interval = [stat]{0}/sec[lightgray] interval bullets:
|
||||||
bullet.frags = [stat]{0}[lightgray]x pecahan:
|
bullet.frags = [stat]{0}[lightgray]x pecahan:
|
||||||
bullet.lightning = [stat]{0}[lightgray]x petir ~ [stat]{1}[lightgray] kerusakan
|
bullet.lightning = [stat]{0}[lightgray]x petir ~ [stat]{1}[lightgray] kerusakan
|
||||||
bullet.buildingdamage = [stat]{0}%[lightgray] kerusakan bangunan
|
bullet.buildingdamage = [stat]{0}%[lightgray] kerusakan bangunan
|
||||||
@@ -1097,8 +1104,8 @@ setting.bridgeopacity.name = Jelas-Beningnya Jembatan
|
|||||||
setting.playerchat.name = Tunjukkan Pesan dalam Permainan
|
setting.playerchat.name = Tunjukkan Pesan dalam Permainan
|
||||||
setting.showweather.name = Perlihatkan Cuaca
|
setting.showweather.name = Perlihatkan Cuaca
|
||||||
setting.hidedisplays.name = Sembunyikan Tampilan Logika
|
setting.hidedisplays.name = Sembunyikan Tampilan Logika
|
||||||
public.confirm = Apakah kamu ingin mempublikasi permainanmu?\n[accent]Siapa saja bisa masuk ke permainanmu.\n[lightgray]Ini bisa diganti di Peraturan->Permainan->Visibilitas Game Publik.
|
steam.friendsonly = Friends Only
|
||||||
public.confirm.really = Jika kamu ingin bermain dengan temanmu, gunakan [green]Undang Teman[] daripada [scarlet]server publik[]!\nApakah kamu yakin ingin membuat permainanmu [scarlet]publik[]?
|
steam.friendsonly.tooltip = Whether only Steam friends will be able to join your game.\nUnchecking this box will make your game public - anyone can join.
|
||||||
public.beta = Ingat bahwa game versi beta tidak dapat membuat lobi publik.
|
public.beta = Ingat bahwa game versi beta tidak dapat membuat lobi publik.
|
||||||
uiscale.reset = Skala UI telah diubah.\nTekan "OK" untuk mengonfirmasi.\n[scarlet]Kembali dan keluar di[accent] {0}[] pengaturan...
|
uiscale.reset = Skala UI telah diubah.\nTekan "OK" untuk mengonfirmasi.\n[scarlet]Kembali dan keluar di[accent] {0}[] pengaturan...
|
||||||
uiscale.cancel = Batal & Keluar
|
uiscale.cancel = Batal & Keluar
|
||||||
@@ -1150,8 +1157,8 @@ keybind.select.name = Pilih/Tembak
|
|||||||
keybind.diagonal_placement.name = Penaruhan Diagonal
|
keybind.diagonal_placement.name = Penaruhan Diagonal
|
||||||
keybind.pick.name = Memilih Blok
|
keybind.pick.name = Memilih Blok
|
||||||
keybind.break_block.name = Menghancurkan Blok
|
keybind.break_block.name = Menghancurkan Blok
|
||||||
keybind.select_all_units = Select All Units
|
keybind.select_all_units.name = Select All Units
|
||||||
keybind.select_all_unit_factories = Select All Unit Factories
|
keybind.select_all_unit_factories.name = Select All Unit Factories
|
||||||
keybind.deselect.name = Batal Memilih
|
keybind.deselect.name = Batal Memilih
|
||||||
keybind.pickupCargo.name = Angkat Muatan
|
keybind.pickupCargo.name = Angkat Muatan
|
||||||
keybind.dropCargo.name = Turunkan Muatan
|
keybind.dropCargo.name = Turunkan Muatan
|
||||||
@@ -2220,6 +2227,7 @@ lst.flushmessage = Tampilkan sebuah pesan di layar dari antrian teks.\nAkan menu
|
|||||||
lst.cutscene = Mengendalikan kamera pemain.
|
lst.cutscene = Mengendalikan kamera pemain.
|
||||||
lst.setflag = Menentukan global flag yang dapat dibaca oleh semua prosesor.
|
lst.setflag = Menentukan global flag yang dapat dibaca oleh semua prosesor.
|
||||||
lst.getflag = Periksa apakah ada global flag yang ditentukan.
|
lst.getflag = Periksa apakah ada global flag yang ditentukan.
|
||||||
|
lst.setprop = Sets a property of a unit or building.
|
||||||
|
|
||||||
logic.nounitbuild = [red]Logika unit membangun tidak diperbolehkan di sini.
|
logic.nounitbuild = [red]Logika unit membangun tidak diperbolehkan di sini.
|
||||||
|
|
||||||
|
|||||||
@@ -147,11 +147,15 @@ mod.incompatiblemod = [red]Incompatible
|
|||||||
mod.blacklisted = [red]Unsupported
|
mod.blacklisted = [red]Unsupported
|
||||||
mod.unmetdependencies = [red]Unmet Dependencies
|
mod.unmetdependencies = [red]Unmet Dependencies
|
||||||
mod.erroredcontent = [scarlet]Errori di Contenuto
|
mod.erroredcontent = [scarlet]Errori di Contenuto
|
||||||
mod.requiresversion.details = Requires game version: [accent]{0}[]\nYour game is outdated. This mod requires a newer version of the game (possibly a beta/alpha release) to function.
|
mod.circulardependencies = [red]Circular Dependencies
|
||||||
|
mod.incompletedependencies = [red]Incomplete Dependencies
|
||||||
|
mod.requiresversion.details = Richiede la versione del gioco: [accent]{0}[]\nIl tuo gioco è obsoleto. Questa mod richiede una versione più recente del gioco (possibilmente una versione beta/alpha) per funzionare.
|
||||||
mod.outdatedv7.details = This mod is incompatible with the latest version of the game. The author must update it, and add [accent]minGameVersion: 136[] to its [accent]mod.json[] file.
|
mod.outdatedv7.details = This mod is incompatible with the latest version of the game. The author must update it, and add [accent]minGameVersion: 136[] to its [accent]mod.json[] file.
|
||||||
mod.blacklisted.details = This mod has been manually blacklisted for causing crashes or other issues with this version of the game. Do not use it.
|
mod.blacklisted.details = This mod has been manually blacklisted for causing crashes or other issues with this version of the game. Do not use it.
|
||||||
mod.missingdependencies.details = This mod is missing dependencies: {0}
|
mod.missingdependencies.details = This mod is missing dependencies: {0}
|
||||||
mod.erroredcontent.details = This game caused errors when loading. Ask the mod author to fix them.
|
mod.erroredcontent.details = This game caused errors when loading. Ask the mod author to fix them.
|
||||||
|
mod.circulardependencies.details = This mod has dependencies that depends on each other.
|
||||||
|
mod.incompletedependencies.details = This mod is unable to be loaded due to invalid or missing dependencies: {0}.
|
||||||
mod.requiresversion = Requires game version: [red]{0}
|
mod.requiresversion = Requires game version: [red]{0}
|
||||||
mod.errors = Si sono verificati degli errori durante il caricamento del contenuto.
|
mod.errors = Si sono verificati degli errori durante il caricamento del contenuto.
|
||||||
mod.noerrorplay = [scarlet]Sono presenti delle mod con errori.[] Puoi disabilitare le mod affette oppure sistemarle prima di giocare.
|
mod.noerrorplay = [scarlet]Sono presenti delle mod con errori.[] Puoi disabilitare le mod affette oppure sistemarle prima di giocare.
|
||||||
@@ -324,11 +328,12 @@ open = Apri
|
|||||||
customize = Personalizza
|
customize = Personalizza
|
||||||
cancel = Annulla
|
cancel = Annulla
|
||||||
command = Comando
|
command = Comando
|
||||||
command.mine = Mine
|
command.mine = Mina
|
||||||
command.repair = Ripara
|
command.repair = Ripara
|
||||||
command.rebuild = Ricostruisci
|
command.rebuild = Ricostruisci
|
||||||
command.assist = Aiuta giocatore
|
command.assist = Aiuta giocatore
|
||||||
command.move = Muovi
|
command.move = Muovi
|
||||||
|
command.boost = Boost
|
||||||
openlink = Apri Link
|
openlink = Apri Link
|
||||||
copylink = Copia link
|
copylink = Copia link
|
||||||
back = Indietro
|
back = Indietro
|
||||||
@@ -758,8 +763,8 @@ sector.windsweptIslands.description = Oltre la fascia costiera si trova questo r
|
|||||||
sector.extractionOutpost.description = Un avamposto remoto, costruito dai nemici con l'obiettivo di lanciare risorse in altri settori.\n\nLa tecnologia di trasposto a settori-incrociati è essenziale per un ulteriore conquista. Distruggi la base. scopri la loro Rampa di Lancio.
|
sector.extractionOutpost.description = Un avamposto remoto, costruito dai nemici con l'obiettivo di lanciare risorse in altri settori.\n\nLa tecnologia di trasposto a settori-incrociati è essenziale per un ulteriore conquista. Distruggi la base. scopri la loro Rampa di Lancio.
|
||||||
sector.impact0078.description = Qui giaciono i resti della nave da trasporto interstellare che fu la prima ad entrare in questo sistema.\n\nRecupera per quanto possibile dal relitto. Scopri qualsiasi tecnologia intatta.
|
sector.impact0078.description = Qui giaciono i resti della nave da trasporto interstellare che fu la prima ad entrare in questo sistema.\n\nRecupera per quanto possibile dal relitto. Scopri qualsiasi tecnologia intatta.
|
||||||
sector.planetaryTerminal.description = Il bersaglio finale.\n\nQuesta base costiera contiene una struttura capace di lanciare Nuclei ai pianeti locali. È estremamente protetto.\n\nProduci unità navali. Elimina il nemico il più rapidamente possibile. Scopri la struttura di lancio.
|
sector.planetaryTerminal.description = Il bersaglio finale.\n\nQuesta base costiera contiene una struttura capace di lanciare Nuclei ai pianeti locali. È estremamente protetto.\n\nProduci unità navali. Elimina il nemico il più rapidamente possibile. Scopri la struttura di lancio.
|
||||||
sector.coastline.description = Remnants of naval unit technology have been detected at this location. Repel the enemy attacks, capture this sector, and acquire the technology.
|
sector.coastline.description = In questo settore sono stati rilevati resti di tecnologia di unità navali. Respingi gli attacchi nemici, cattura il settore e acquisisci la tecnologia.
|
||||||
sector.navalFortress.description = The enemy has established a base on a remote, naturally-fortified island. Destroy this outpost. Acquire their advanced naval craft technology, and research it.
|
sector.navalFortress.description = Il nemico ha stabilito una base su un'isola remota e fortificata naturalmente. Distruggi questo avamposto. Acquisisci la loro tecnologia navale avanzata e fate ricerche.
|
||||||
sector.onset.name = The Onset
|
sector.onset.name = The Onset
|
||||||
sector.aegis.name = Aegis
|
sector.aegis.name = Aegis
|
||||||
sector.lake.name = Nome
|
sector.lake.name = Nome
|
||||||
@@ -970,6 +975,8 @@ bullet.splashdamage = [stat]{0}[lightgray] danno ad area ~[stat] {1}[lightgray]
|
|||||||
bullet.incendiary = [stat]incendiario
|
bullet.incendiary = [stat]incendiario
|
||||||
bullet.homing = [stat]autoguidato
|
bullet.homing = [stat]autoguidato
|
||||||
bullet.armorpierce = [stat]perforazione alle armature
|
bullet.armorpierce = [stat]perforazione alle armature
|
||||||
|
bullet.suppression = [stat]{0} sec[lightgray] repair suppression ~ [stat]{1}[lightgray] tiles
|
||||||
|
bullet.interval = [stat]{0}/sec[lightgray] interval bullets:
|
||||||
bullet.frags = [stat]{0}[lightgray]x frammentazione:
|
bullet.frags = [stat]{0}[lightgray]x frammentazione:
|
||||||
bullet.lightning = [stat]{0}[lightgray]x fulmine ~ [stat]{1}[lightgray] danno
|
bullet.lightning = [stat]{0}[lightgray]x fulmine ~ [stat]{1}[lightgray] danno
|
||||||
bullet.buildingdamage = [stat]{0}%[lightgray] danno alle costruzioni
|
bullet.buildingdamage = [stat]{0}%[lightgray] danno alle costruzioni
|
||||||
@@ -1012,7 +1019,7 @@ category.items = Oggetti
|
|||||||
category.crafting = Produzione
|
category.crafting = Produzione
|
||||||
category.function = Funzione
|
category.function = Funzione
|
||||||
category.optional = Miglioramenti Opzionali
|
category.optional = Miglioramenti Opzionali
|
||||||
setting.skipcoreanimation.name = Salta il lancio del nucleo/Animazionw
|
setting.skipcoreanimation.name = Salta il lancio del nucleo/Animazione
|
||||||
setting.landscape.name = Visuale Orizontale
|
setting.landscape.name = Visuale Orizontale
|
||||||
setting.shadows.name = Ombre
|
setting.shadows.name = Ombre
|
||||||
setting.blockreplace.name = Suggerimento Blocchi Automatico
|
setting.blockreplace.name = Suggerimento Blocchi Automatico
|
||||||
@@ -1083,8 +1090,8 @@ setting.bridgeopacity.name = Opacità Nastri e Condotti Sopraelevati
|
|||||||
setting.playerchat.name = Mostra Chat
|
setting.playerchat.name = Mostra Chat
|
||||||
setting.showweather.name = Mostra grafica del meteo
|
setting.showweather.name = Mostra grafica del meteo
|
||||||
setting.hidedisplays.name = Nascondi display logici
|
setting.hidedisplays.name = Nascondi display logici
|
||||||
public.confirm = Vuoi rendere la tua partita pubblica?\n[accent]Chiunque sarà in grado di accedere alle tue partite.\n[lightgray]Questo può essere modificato più tardi in Impostazioni->Gioco->Partite Pubbliche.
|
steam.friendsonly = Friends Only
|
||||||
public.confirm.really = Se vuoi giocare con gli amici, usa [green]Invita Amico[] Al posto di un [scarlet]server pubblico[]!\nSicuro di voler rendere [scarlet]pubblica[] la tua partita?
|
steam.friendsonly.tooltip = Whether only Steam friends will be able to join your game.\nUnchecking this box will make your game public - anyone can join.
|
||||||
public.beta = Nota che le versioni beta del gioco non possono creare lobby pubbliche.
|
public.beta = Nota che le versioni beta del gioco non possono creare lobby pubbliche.
|
||||||
uiscale.reset = La scala dell'interfaccia utente è stata modificata.\nPremere 'OK' per confermare questa scala.\n[scarlet]Ripristina ed esci in [accent] {0}[] secondi...
|
uiscale.reset = La scala dell'interfaccia utente è stata modificata.\nPremere 'OK' per confermare questa scala.\n[scarlet]Ripristina ed esci in [accent] {0}[] secondi...
|
||||||
uiscale.cancel = Annulla ed Esci
|
uiscale.cancel = Annulla ed Esci
|
||||||
@@ -1136,8 +1143,8 @@ keybind.select.name = Seleziona/Spara
|
|||||||
keybind.diagonal_placement.name = Posiziona Diagonalmente
|
keybind.diagonal_placement.name = Posiziona Diagonalmente
|
||||||
keybind.pick.name = Scegli Blocco
|
keybind.pick.name = Scegli Blocco
|
||||||
keybind.break_block.name = Rompi Blocco
|
keybind.break_block.name = Rompi Blocco
|
||||||
keybind.select_all_units = Select All Units
|
keybind.select_all_units.name = Select All Units
|
||||||
keybind.select_all_unit_factories = Select All Unit Factories
|
keybind.select_all_unit_factories.name = Select All Unit Factories
|
||||||
keybind.deselect.name = Deseleziona
|
keybind.deselect.name = Deseleziona
|
||||||
keybind.pickupCargo.name = Raccogli Carico
|
keybind.pickupCargo.name = Raccogli Carico
|
||||||
keybind.dropCargo.name = Rilascia Carico
|
keybind.dropCargo.name = Rilascia Carico
|
||||||
@@ -2137,31 +2144,31 @@ unit.omura.description = Utilizza un bullone sparatato grazie a due binari a sco
|
|||||||
unit.alpha.description = Difende il nucleo Frammento dai nemici. Costruisce strutture.
|
unit.alpha.description = Difende il nucleo Frammento dai nemici. Costruisce strutture.
|
||||||
unit.beta.description = Difende il nucleo Fondamento dai nemici. Costruisce strutture.
|
unit.beta.description = Difende il nucleo Fondamento dai nemici. Costruisce strutture.
|
||||||
unit.gamma.description = Difende il nucleo Kernel dai nemici. Costruisce strutture.
|
unit.gamma.description = Difende il nucleo Kernel dai nemici. Costruisce strutture.
|
||||||
unit.retusa.description = Fires homing torpedoes at nearby enemies. Repairs allied units.
|
unit.retusa.description = Lancia siluri di puntamento contro i nemici vicini. Ripara le unità alleate.
|
||||||
unit.oxynoe.description = Fires structure-repairing streams of flame at nearby enemies. Targets nearby enemy projectiles with a point defense turret.
|
unit.oxynoe.description = Spara flussi di fiamme che riparano le strutture ai nemici vicini. Bersaglia i proiettili nemici nelle vicinanze con una torretta di difesa.
|
||||||
unit.cyerce.description = Fires seeking cluster-missiles at enemies. Repairs allied units.
|
unit.cyerce.description = Spara missili a grappolo contro i nemici. Ripara le unità alleate.
|
||||||
unit.aegires.description = Shocks all enemy units and structures that enter its energy field. Repairs all allies.
|
unit.aegires.description = Scuote tutte le unità e le strutture nemiche che entrano nel suo campo energetico. Ripara tutti gli alleati.
|
||||||
unit.navanax.description = Fires explosive EMP projectiles, dealing significant damage to enemy power networks and repairing allied structures. Melts nearby enemies with 4 autonomous laser turrets.
|
unit.navanax.description = Spara proiettili EMP esplosivi, infliggendo danni significativi alle reti elettriche nemiche e riparando le strutture alleate. Scioglie i nemici vicini con 4 torrette laser autonome.
|
||||||
unit.stell.description = Fires standard bullets at enemy targets.
|
unit.stell.description = Spara proiettili standard contro i bersagli nemici.
|
||||||
unit.locus.description = Fires alternating bullets at enemy targets.
|
unit.locus.description = Spara proiettili alternati contro i bersagli nemici.
|
||||||
unit.precept.description = Fires piercing cluster bullets at enemy targets.
|
unit.precept.description = Spara proiettili a grappolo perforanti contro i bersagli nemici.
|
||||||
unit.vanquish.description = Fires large piercing splitting bullets at enemy targets.
|
unit.vanquish.description = Spara grandi proiettili perforanti contro i bersagli nemici.
|
||||||
unit.conquer.description = Fires large piercing cascades of bullets at enemy targets.
|
unit.conquer.description = Spara grandi cascate di proiettili perforanti contro i bersagli nemici.
|
||||||
unit.merui.description = Fires long-range artillery at enemy ground targets. Can step over most terrain.
|
unit.merui.description = Spara con l'artiglieria a lungo raggio contro bersagli terrestri nemici. Può superare la maggior parte dei terreni.
|
||||||
unit.cleroi.description = Fires dual shells at enemy targets. Targets enemy projectiles with point defense turrets. Can step over most terrain.
|
unit.cleroi.description = Spara proiettili doppi contro i bersagli nemici. Bersaglia i proiettili nemici con le torrette di difesa. Può superare la maggior parte dei terreni.
|
||||||
unit.anthicus.description = Fires long-range homing missiles at enemy targets. Can step over most terrain.
|
unit.anthicus.description = Spara missili a lunga gittata contro i bersagli nemici. Può superare la maggior parte dei terreni.
|
||||||
unit.tecta.description = Fires homing plasma missiles at enemy targets. Protects itself with a directional shield. Can step over most terrain.
|
unit.tecta.description = Spara missili al plasma a puntamento interno contro i bersagli nemici. Si protegge con uno scudo direzionale. Può superare la maggior parte dei terreni.
|
||||||
unit.collaris.description = Fires long-range fragmenting artillery at enemy targets. Can step over most terrain.
|
unit.collaris.description = Spara con l'artiglieria a frammentazione a lungo raggio contro gli obiettivi nemici. Può superare la maggior parte dei terreni.
|
||||||
unit.elude.description = Fires pairs of homing bullets at enemy targets. Can float over bodies of liquid.
|
unit.elude.description = Spara coppie di proiettili di puntamento contro i bersagli nemici. Può galleggiare su corpi liquidi.
|
||||||
unit.avert.description = Fires twisting pairs of bullets at enemy targets.
|
unit.avert.description = Spara coppie di proiettili a spirale contro i bersagli nemici.
|
||||||
unit.obviate.description = Fires twisting pairs of lightning orbs at enemy targets.
|
unit.obviate.description = Spara coppie di fulmini a spirale contro i bersagli nemici.
|
||||||
unit.quell.description = Fires long-range homing missiles at enemy targets. Suppresses enemy structure repair blocks.
|
unit.quell.description = Spara missili di puntamento a lungo raggio contro gli obiettivi nemici. Sopprime i blocchi di riparazione delle strutture nemiche.
|
||||||
unit.disrupt.description = Fires long-range homing suppression missiles at enemy targets. Suppresses enemy structure repair blocks.
|
unit.disrupt.description = Spara missili di soppressione a lungo raggio contro gli obiettivi nemici. Sopprime i blocchi di riparazione delle strutture nemiche.
|
||||||
unit.evoke.description = Builds structures to defend the Bastion core. Repairs structures with a beam.
|
unit.evoke.description = Costruisce strutture per difendere il nucleo del Bastione. Ripara le strutture con un raggio.
|
||||||
unit.incite.description = Builds structures to defend the Citadel core. Repairs structures with a beam.
|
unit.incite.description = Costruisce strutture per difendere il nucleo della Cittadella. Ripara le strutture con un raggio.
|
||||||
unit.emanate.description = Builds structures to defend the Acropolis core. Repairs structures with beams.
|
unit.emanate.description = Costruisce strutture per difendere il nucleo dell'Acropoli. Ripara le strutture con le travi.
|
||||||
lst.read = Read a number from a linked memory cell.
|
lst.read = Leggi un numero da una cella di memoria collegata.
|
||||||
lst.write = Write a number to a linked memory cell.
|
lst.write = Scrivi un numero in una cella di memoria collegata.
|
||||||
lst.print = Add text to the print buffer.\nDoes not display anything until [accent]Print Flush[] is used.
|
lst.print = Add text to the print buffer.\nDoes not display anything until [accent]Print Flush[] is used.
|
||||||
lst.draw = Add an operation to the drawing buffer.\nDoes not display anything until [accent]Draw Flush[] is used.
|
lst.draw = Add an operation to the drawing buffer.\nDoes not display anything until [accent]Draw Flush[] is used.
|
||||||
lst.drawflush = Flush queued [accent]Draw[] operations to a display.
|
lst.drawflush = Flush queued [accent]Draw[] operations to a display.
|
||||||
@@ -2195,6 +2202,7 @@ lst.flushmessage = Display a message on the screen from the text buffer.\nWill w
|
|||||||
lst.cutscene = Manipulate the player camera.
|
lst.cutscene = Manipulate the player camera.
|
||||||
lst.setflag = Set a global flag that can be read by all processors.
|
lst.setflag = Set a global flag that can be read by all processors.
|
||||||
lst.getflag = Check if a global flag is set.
|
lst.getflag = Check if a global flag is set.
|
||||||
|
lst.setprop = Sets a property of a unit or building.
|
||||||
logic.nounitbuild = [red]Unit building logic is not allowed here.
|
logic.nounitbuild = [red]Unit building logic is not allowed here.
|
||||||
lenum.type = Type of building/unit.\ne.g. for any router, this will return [accent]@router[].\nNot a string.
|
lenum.type = Type of building/unit.\ne.g. for any router, this will return [accent]@router[].\nNot a string.
|
||||||
lenum.shoot = Shoot at a position.
|
lenum.shoot = Shoot at a position.
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
@@ -149,11 +149,15 @@ mod.incompatiblemod = [red]호환되지 않음
|
|||||||
mod.blacklisted = [red]지원하지 않음
|
mod.blacklisted = [red]지원하지 않음
|
||||||
mod.unmetdependencies = [red]충촉되지 않은 종속성
|
mod.unmetdependencies = [red]충촉되지 않은 종속성
|
||||||
mod.erroredcontent = [scarlet]콘텐츠 오류
|
mod.erroredcontent = [scarlet]콘텐츠 오류
|
||||||
|
mod.circulardependencies = [red]Circular Dependencies
|
||||||
|
mod.incompletedependencies = [red]Incomplete Dependencies
|
||||||
mod.requiresversion.details = 게임 버전 요구: [accent]{0}[]\n당신의 게임은 구버전입니다. 이 모드가 작동하려면 최신 버전의 게임이 필요합니다. (베타/알파 릴리즈일 가능성이 있음).
|
mod.requiresversion.details = 게임 버전 요구: [accent]{0}[]\n당신의 게임은 구버전입니다. 이 모드가 작동하려면 최신 버전의 게임이 필요합니다. (베타/알파 릴리즈일 가능성이 있음).
|
||||||
mod.outdatedv7.details = 이 모드는 최신 버전의 게임과 호환되지 않습니다. 반드시 작성자가 업데이트해야 하고, [accent]mod.json[] 파일에 [accent]최소게임버전: 136[]을 추가해야 합니다.
|
mod.outdatedv7.details = 이 모드는 최신 버전의 게임과 호환되지 않습니다. 반드시 작성자가 업데이트해야 하고, [accent]mod.json[] 파일에 [accent]최소게임버전: 136[]을 추가해야 합니다.
|
||||||
mod.blacklisted.details = 이 모드는 이 버전의 게임에서 충돌 또는 기타 문제를 일으키는 것으로 인해 수동으로 블랙리스트에 올라와 있습니다. 사용하지 마세요.
|
mod.blacklisted.details = 이 모드는 이 버전의 게임에서 충돌 또는 기타 문제를 일으키는 것으로 인해 수동으로 블랙리스트에 올라와 있습니다. 사용하지 마세요.
|
||||||
mod.missingdependencies.details = 이 모드에는 종속성이 없음: {0}
|
mod.missingdependencies.details = 이 모드에는 종속성이 없음: {0}
|
||||||
mod.erroredcontent.details = 이 게임은 로딩하는 동안 오류가 발생했습니다. 모드 작성자에게 수정하도록 요청하세요.
|
mod.erroredcontent.details = 이 게임은 로딩하는 동안 오류가 발생했습니다. 모드 작성자에게 수정하도록 요청하세요.
|
||||||
|
mod.circulardependencies.details = This mod has dependencies that depends on each other.
|
||||||
|
mod.incompletedependencies.details = This mod is unable to be loaded due to invalid or missing dependencies: {0}.
|
||||||
mod.requiresversion = 필요한 게임 버전: [red]{0}
|
mod.requiresversion = 필요한 게임 버전: [red]{0}
|
||||||
mod.errors = 콘텐츠를 불러오는 중에 오류가 발생함
|
mod.errors = 콘텐츠를 불러오는 중에 오류가 발생함
|
||||||
mod.noerrorplay = [scarlet]오류가 있는 모드가 있습니다.[] 영향을 받는 모드를 비활성화하거나 플레이하기 전에 오류를 수정하세요.
|
mod.noerrorplay = [scarlet]오류가 있는 모드가 있습니다.[] 영향을 받는 모드를 비활성화하거나 플레이하기 전에 오류를 수정하세요.
|
||||||
@@ -288,7 +292,7 @@ server.invalidport = 잘못된 포트 번호입니다!
|
|||||||
server.error = [scarlet]서버 호스팅 오류
|
server.error = [scarlet]서버 호스팅 오류
|
||||||
save.new = 새로 저장
|
save.new = 새로 저장
|
||||||
save.overwrite = 저장된 슬롯을 덮어쓰시겠습니까?
|
save.overwrite = 저장된 슬롯을 덮어쓰시겠습니까?
|
||||||
save.nocampaign = Individual save files from the campaign cannot be imported.
|
save.nocampaign = 캠페인의 개별 저장 파일을 가져올 수 없습니다.
|
||||||
overwrite = 덮어쓰기
|
overwrite = 덮어쓰기
|
||||||
save.none = 저장된 파일을 찾을 수 없습니다!
|
save.none = 저장된 파일을 찾을 수 없습니다!
|
||||||
savefail = 게임을 저장하지 못했습니다!
|
savefail = 게임을 저장하지 못했습니다!
|
||||||
@@ -331,6 +335,7 @@ command.repair = 수리
|
|||||||
command.rebuild = 재건
|
command.rebuild = 재건
|
||||||
command.assist = 플레이어 지원
|
command.assist = 플레이어 지원
|
||||||
command.move = 이동
|
command.move = 이동
|
||||||
|
command.boost = Boost
|
||||||
openlink = 링크 열기
|
openlink = 링크 열기
|
||||||
copylink = 링크 복사
|
copylink = 링크 복사
|
||||||
back = 뒤로가기
|
back = 뒤로가기
|
||||||
@@ -356,8 +361,8 @@ pausebuilding = [accent][[{0}][] 키를 눌러 건설을 일시중지
|
|||||||
resumebuilding = [scarlet][[{0}][] 키를 눌러 건설을 재개
|
resumebuilding = [scarlet][[{0}][] 키를 눌러 건설을 재개
|
||||||
enablebuilding = [scarlet][[{0}][] 키를 눌러 건설을 활성
|
enablebuilding = [scarlet][[{0}][] 키를 눌러 건설을 활성
|
||||||
showui = UI가 숨겨졌습니다. [accent][[{0}][] 키를 눌러 UI를 활성화하세요.
|
showui = UI가 숨겨졌습니다. [accent][[{0}][] 키를 눌러 UI를 활성화하세요.
|
||||||
commandmode.name = [accent]Command Mode
|
commandmode.name = [accent]명령 모드
|
||||||
commandmode.nounits = [no units]
|
commandmode.nounits = [기체 없음]
|
||||||
wave = [accent]{0}단계
|
wave = [accent]{0}단계
|
||||||
wave.cap = [accent]단계 {0}/{1}
|
wave.cap = [accent]단계 {0}/{1}
|
||||||
wave.waiting = 다음 단계까지[lightgray] {0}초
|
wave.waiting = 다음 단계까지[lightgray] {0}초
|
||||||
@@ -441,7 +446,7 @@ waves.max = 기까지
|
|||||||
waves.guardian = 수호자
|
waves.guardian = 수호자
|
||||||
waves.preview = 미리보기
|
waves.preview = 미리보기
|
||||||
waves.edit = 편집
|
waves.edit = 편집
|
||||||
waves.random = Random
|
waves.random = 무작위
|
||||||
waves.copy = 클립보드로 복사하기
|
waves.copy = 클립보드로 복사하기
|
||||||
waves.load = 클립보드에서 불러오기
|
waves.load = 클립보드에서 불러오기
|
||||||
waves.invalid = 클립보드에 잘못된 단계 데이터가 있습니다.
|
waves.invalid = 클립보드에 잘못된 단계 데이터가 있습니다.
|
||||||
@@ -700,7 +705,7 @@ sectors.enemybase = [scarlet]적 기지[]
|
|||||||
sectors.vulnerable = [scarlet]취약함[]
|
sectors.vulnerable = [scarlet]취약함[]
|
||||||
sectors.underattack = [scarlet]공격받고 있습니다! [accent]{0}% 손상됨[]
|
sectors.underattack = [scarlet]공격받고 있습니다! [accent]{0}% 손상됨[]
|
||||||
sectors.underattack.nodamage = [scarlet]점령되지 않음
|
sectors.underattack.nodamage = [scarlet]점령되지 않음
|
||||||
sectors.survives = [accent]{0} 단계 이상 버티세요.[]
|
sectors.survives = [accent]{0} 단계 버팀[]
|
||||||
sectors.go = 진입
|
sectors.go = 진입
|
||||||
sector.abandon = 포기
|
sector.abandon = 포기
|
||||||
sector.abandon.confirm = 이 지역의 코어가 자폭합니다.\n계속하시겠습니까?
|
sector.abandon.confirm = 이 지역의 코어가 자폭합니다.\n계속하시겠습니까?
|
||||||
@@ -976,6 +981,8 @@ bullet.splashdamage = [stat]{0}[lightgray] 범위 피해량 ~ [stat]{1}[lightgra
|
|||||||
bullet.incendiary = [stat]방화[]
|
bullet.incendiary = [stat]방화[]
|
||||||
bullet.homing = [stat]유도[]
|
bullet.homing = [stat]유도[]
|
||||||
bullet.armorpierce = [stat]방어 관통
|
bullet.armorpierce = [stat]방어 관통
|
||||||
|
bullet.suppression = [stat]{0} sec[lightgray] repair suppression ~ [stat]{1}[lightgray] tiles
|
||||||
|
bullet.interval = [stat]{0}/sec[lightgray] interval bullets:
|
||||||
bullet.frags = [stat]{0}[lightgray]개 파편 탄환:[][]
|
bullet.frags = [stat]{0}[lightgray]개 파편 탄환:[][]
|
||||||
bullet.lightning = [stat]{0}[lightgray]x 전격 ~ [stat]{1}[lightgray] 피해량[][][][]
|
bullet.lightning = [stat]{0}[lightgray]x 전격 ~ [stat]{1}[lightgray] 피해량[][][][]
|
||||||
bullet.buildingdamage = [stat]{0}%[lightgray] 건물 피해량[][]
|
bullet.buildingdamage = [stat]{0}%[lightgray] 건물 피해량[][]
|
||||||
@@ -1089,8 +1096,8 @@ setting.bridgeopacity.name = 터널 투명도
|
|||||||
setting.playerchat.name = 채팅 말풍선 표시
|
setting.playerchat.name = 채팅 말풍선 표시
|
||||||
setting.showweather.name = 날씨 그래픽 표시
|
setting.showweather.name = 날씨 그래픽 표시
|
||||||
setting.hidedisplays.name = 로직 디스플레이 숨김
|
setting.hidedisplays.name = 로직 디스플레이 숨김
|
||||||
public.confirm = 게임을 모두에게 공개하시겠습니까?\n[accent]모든 플레이어가 게임에 참여할 수 있습니다.\n[lightgray]설정->게임->멀티플레이 공용 서버로 표시에서 나중에 변경할 수 있습니다.\n\n[sky]번역자 추가[]\n[accent]친구끼리 하려고 이 기능을 활성화 한 뒤에, 친구 외에 다른 플레이어가 들어왔을 때\n해당 플레이어를 차단하는 행위는 비매너를 넘어서는 얌체 행위 그 자체입니다.\n정말로 [scarlet]많은 다른 플레이어들이 오길 원한다[]면 확인하세요.
|
steam.friendsonly = Friends Only
|
||||||
public.confirm.really = [red]친구하고 플레이 하고 싶으면 [scarlet]공용 서버[] 대신에 [green]친구 초대[] 를 사용하세요. 정말로 [scarlet]공용 서버[] 를 열겠습니까?[]
|
steam.friendsonly.tooltip = Whether only Steam friends will be able to join your game.\nUnchecking this box will make your game public - anyone can join.
|
||||||
public.beta = 베타 버전의 게임은 공개 서버를 만들 수 없습니다.
|
public.beta = 베타 버전의 게임은 공개 서버를 만들 수 없습니다.
|
||||||
uiscale.reset = UI 스케일이 변경되었습니다.\n"확인"버튼을 눌러 저장하세요.\n[accent] {0}[][scarlet]초 후에 예전 설정으로 되돌리고 게임을 종료합니다...
|
uiscale.reset = UI 스케일이 변경되었습니다.\n"확인"버튼을 눌러 저장하세요.\n[accent] {0}[][scarlet]초 후에 예전 설정으로 되돌리고 게임을 종료합니다...
|
||||||
uiscale.cancel = 취소 후 나가기
|
uiscale.cancel = 취소 후 나가기
|
||||||
@@ -1142,8 +1149,8 @@ keybind.select.name = 선택/공격
|
|||||||
keybind.diagonal_placement.name = 대각선 설치
|
keybind.diagonal_placement.name = 대각선 설치
|
||||||
keybind.pick.name = 블록 선택
|
keybind.pick.name = 블록 선택
|
||||||
keybind.break_block.name = 블록 파괴
|
keybind.break_block.name = 블록 파괴
|
||||||
keybind.select_all_units = 전체 기체 선택
|
keybind.select_all_units.name = 전체 기체 선택
|
||||||
keybind.select_all_unit_factories = 전체 기체 공장 선택
|
keybind.select_all_unit_factories.name = 전체 기체 공장 선택
|
||||||
keybind.deselect.name = 선택해제
|
keybind.deselect.name = 선택해제
|
||||||
keybind.pickupCargo.name = 화물 집기
|
keybind.pickupCargo.name = 화물 집기
|
||||||
keybind.dropCargo.name = 화물 내려놓기
|
keybind.dropCargo.name = 화물 내려놓기
|
||||||
@@ -1205,7 +1212,7 @@ rules.unitbuildspeedmultiplier = 기체 생산속도 배수
|
|||||||
rules.unitcostmultiplier = 기체 비용 배수
|
rules.unitcostmultiplier = 기체 비용 배수
|
||||||
rules.unithealthmultiplier = 기체 체력 배수
|
rules.unithealthmultiplier = 기체 체력 배수
|
||||||
rules.unitdamagemultiplier = 기체 피해량 배수
|
rules.unitdamagemultiplier = 기체 피해량 배수
|
||||||
rules.unitcrashdamagemultiplier = Unit Crash Damage Multiplier
|
rules.unitcrashdamagemultiplier = 기체 파손 피해량 배수
|
||||||
rules.solarmultiplier = 태양광 전력 배수
|
rules.solarmultiplier = 태양광 전력 배수
|
||||||
rules.unitcapvariable = 코어 기체수 제한 추가
|
rules.unitcapvariable = 코어 기체수 제한 추가
|
||||||
rules.unitcap = 기본 기체 제한
|
rules.unitcap = 기본 기체 제한
|
||||||
@@ -2199,6 +2206,7 @@ lst.flushmessage = 텍스트 버퍼로부터 화면에 메세지를 표시\n이
|
|||||||
lst.cutscene = 플레이어 카메라 조작
|
lst.cutscene = 플레이어 카메라 조작
|
||||||
lst.setflag = 모든 프로세서가 읽을 수 있는 전역 플래그 설정
|
lst.setflag = 모든 프로세서가 읽을 수 있는 전역 플래그 설정
|
||||||
lst.getflag = 전역 플래그가 설정되어 있는지 확인
|
lst.getflag = 전역 플래그가 설정되어 있는지 확인
|
||||||
|
lst.setprop = Sets a property of a unit or building.
|
||||||
|
|
||||||
logic.nounitbuild = [red]기체의 건설 로직은 여기서 허용되지 않습니다.
|
logic.nounitbuild = [red]기체의 건설 로직은 여기서 허용되지 않습니다.
|
||||||
|
|
||||||
|
|||||||
@@ -146,11 +146,15 @@ mod.incompatiblemod = [red]Incompatible
|
|||||||
mod.blacklisted = [red]Unsupported
|
mod.blacklisted = [red]Unsupported
|
||||||
mod.unmetdependencies = [red]Unmet Dependencies
|
mod.unmetdependencies = [red]Unmet Dependencies
|
||||||
mod.erroredcontent = [scarlet]Turinio klaidos.
|
mod.erroredcontent = [scarlet]Turinio klaidos.
|
||||||
|
mod.circulardependencies = [red]Circular Dependencies
|
||||||
|
mod.incompletedependencies = [red]Incomplete Dependencies
|
||||||
mod.requiresversion.details = Requires game version: [accent]{0}[]\nYour game is outdated. This mod requires a newer version of the game (possibly a beta/alpha release) to function.
|
mod.requiresversion.details = Requires game version: [accent]{0}[]\nYour game is outdated. This mod requires a newer version of the game (possibly a beta/alpha release) to function.
|
||||||
mod.outdatedv7.details = This mod is incompatible with the latest version of the game. The author must update it, and add [accent]minGameVersion: 136[] to its [accent]mod.json[] file.
|
mod.outdatedv7.details = This mod is incompatible with the latest version of the game. The author must update it, and add [accent]minGameVersion: 136[] to its [accent]mod.json[] file.
|
||||||
mod.blacklisted.details = This mod has been manually blacklisted for causing crashes or other issues with this version of the game. Do not use it.
|
mod.blacklisted.details = This mod has been manually blacklisted for causing crashes or other issues with this version of the game. Do not use it.
|
||||||
mod.missingdependencies.details = This mod is missing dependencies: {0}
|
mod.missingdependencies.details = This mod is missing dependencies: {0}
|
||||||
mod.erroredcontent.details = This game caused errors when loading. Ask the mod author to fix them.
|
mod.erroredcontent.details = This game caused errors when loading. Ask the mod author to fix them.
|
||||||
|
mod.circulardependencies.details = This mod has dependencies that depends on each other.
|
||||||
|
mod.incompletedependencies.details = This mod is unable to be loaded due to invalid or missing dependencies: {0}.
|
||||||
mod.requiresversion = Requires game version: [red]{0}
|
mod.requiresversion = Requires game version: [red]{0}
|
||||||
mod.errors = Įvyko klaida kraunant turinį.
|
mod.errors = Įvyko klaida kraunant turinį.
|
||||||
mod.noerrorplay = [scarlet]Turite modifikacijas su klaidomis.[] Išjunkite modifikacijas su klaidomis arba patasykite jas prieš žaidžiant.
|
mod.noerrorplay = [scarlet]Turite modifikacijas su klaidomis.[] Išjunkite modifikacijas su klaidomis arba patasykite jas prieš žaidžiant.
|
||||||
@@ -327,6 +331,7 @@ command.repair = Repair
|
|||||||
command.rebuild = Rebuild
|
command.rebuild = Rebuild
|
||||||
command.assist = Assist Player
|
command.assist = Assist Player
|
||||||
command.move = Move
|
command.move = Move
|
||||||
|
command.boost = Boost
|
||||||
openlink = Atidaryti Nuorodą
|
openlink = Atidaryti Nuorodą
|
||||||
copylink = Kopijuoti Nuorodą
|
copylink = Kopijuoti Nuorodą
|
||||||
back = Sugrįžti
|
back = Sugrįžti
|
||||||
@@ -964,6 +969,8 @@ bullet.splashdamage = [stat]{0}[lightgray] zonos žalos ~[stat] {1}[lightgray] b
|
|||||||
bullet.incendiary = [stat]uždegantis
|
bullet.incendiary = [stat]uždegantis
|
||||||
bullet.homing = [stat]sekimas
|
bullet.homing = [stat]sekimas
|
||||||
bullet.armorpierce = [stat]armor piercing
|
bullet.armorpierce = [stat]armor piercing
|
||||||
|
bullet.suppression = [stat]{0} sec[lightgray] repair suppression ~ [stat]{1}[lightgray] tiles
|
||||||
|
bullet.interval = [stat]{0}/sec[lightgray] interval bullets:
|
||||||
bullet.frags = [stat]{0}[lightgray]x frag bullets:
|
bullet.frags = [stat]{0}[lightgray]x frag bullets:
|
||||||
bullet.lightning = [stat]{0}[lightgray]x lightning ~ [stat]{1}[lightgray] damage
|
bullet.lightning = [stat]{0}[lightgray]x lightning ~ [stat]{1}[lightgray] damage
|
||||||
bullet.buildingdamage = [stat]{0}%[lightgray] building damage
|
bullet.buildingdamage = [stat]{0}%[lightgray] building damage
|
||||||
@@ -1077,8 +1084,8 @@ setting.bridgeopacity.name = Tilto Nepermatomumas
|
|||||||
setting.playerchat.name = Rodyti Pokalbių Teksto Burbulus Virš Žaidėjų
|
setting.playerchat.name = Rodyti Pokalbių Teksto Burbulus Virš Žaidėjų
|
||||||
setting.showweather.name = Show Weather Graphics
|
setting.showweather.name = Show Weather Graphics
|
||||||
setting.hidedisplays.name = Hide Logic Displays
|
setting.hidedisplays.name = Hide Logic Displays
|
||||||
public.confirm = Ar norite savo žaidimą paversti viešu?\n[accent]Bet kas galės įeiti į jūsų žaidimą.\n[lightgray]Tai gali būti pakeista nuėjus į Nustatymai->Žaidimas->Viešojo Žaidimo Matomumas.
|
steam.friendsonly = Friends Only
|
||||||
public.confirm.really = If you want to play with friends, use [green]Invite Friend[] instead of a [scarlet]Public server[]!\nAre you sure you want to make your game [scarlet]public[]?
|
steam.friendsonly.tooltip = Whether only Steam friends will be able to join your game.\nUnchecking this box will make your game public - anyone can join.
|
||||||
public.beta = Įsiminkite, jog beta versijoje negalima sukrti viešų kambarių.
|
public.beta = Įsiminkite, jog beta versijoje negalima sukrti viešų kambarių.
|
||||||
uiscale.reset = UI mastelis buvo pakeistas.\nSpauskite "GERAI", norėdami palikti šį mastelį.\n[scarlet]Atšaukiama ir išeinama po[accent] {0}[] sekundžių...
|
uiscale.reset = UI mastelis buvo pakeistas.\nSpauskite "GERAI", norėdami palikti šį mastelį.\n[scarlet]Atšaukiama ir išeinama po[accent] {0}[] sekundžių...
|
||||||
uiscale.cancel = Atšaukti ir Išeiti
|
uiscale.cancel = Atšaukti ir Išeiti
|
||||||
@@ -1130,8 +1137,8 @@ keybind.select.name = Pasirinkti/Šauti
|
|||||||
keybind.diagonal_placement.name = Įstrižas Padėjimas
|
keybind.diagonal_placement.name = Įstrižas Padėjimas
|
||||||
keybind.pick.name = Pasirinkti Bloką
|
keybind.pick.name = Pasirinkti Bloką
|
||||||
keybind.break_block.name = Išgriauti Bloką
|
keybind.break_block.name = Išgriauti Bloką
|
||||||
keybind.select_all_units = Select All Units
|
keybind.select_all_units.name = Select All Units
|
||||||
keybind.select_all_unit_factories = Select All Unit Factories
|
keybind.select_all_unit_factories.name = Select All Unit Factories
|
||||||
keybind.deselect.name = Panaikinti Pasirinkimą
|
keybind.deselect.name = Panaikinti Pasirinkimą
|
||||||
keybind.pickupCargo.name = Pickup Cargo
|
keybind.pickupCargo.name = Pickup Cargo
|
||||||
keybind.dropCargo.name = Drop Cargo
|
keybind.dropCargo.name = Drop Cargo
|
||||||
@@ -2182,6 +2189,7 @@ lst.flushmessage = Display a message on the screen from the text buffer.\nWill w
|
|||||||
lst.cutscene = Manipulate the player camera.
|
lst.cutscene = Manipulate the player camera.
|
||||||
lst.setflag = Set a global flag that can be read by all processors.
|
lst.setflag = Set a global flag that can be read by all processors.
|
||||||
lst.getflag = Check if a global flag is set.
|
lst.getflag = Check if a global flag is set.
|
||||||
|
lst.setprop = Sets a property of a unit or building.
|
||||||
logic.nounitbuild = [red]Unit building logic is not allowed here.
|
logic.nounitbuild = [red]Unit building logic is not allowed here.
|
||||||
lenum.type = Type of building/unit.\ne.g. for any router, this will return [accent]@router[].\nNot a string.
|
lenum.type = Type of building/unit.\ne.g. for any router, this will return [accent]@router[].\nNot a string.
|
||||||
lenum.shoot = Shoot at a position.
|
lenum.shoot = Shoot at a position.
|
||||||
|
|||||||
@@ -150,12 +150,16 @@ mod.incompatiblemod = [red]Onverenigbaar
|
|||||||
mod.blacklisted = [red]Niet Ondersteund
|
mod.blacklisted = [red]Niet Ondersteund
|
||||||
mod.unmetdependencies = [red]Onbevredigde Afhankelijkheden
|
mod.unmetdependencies = [red]Onbevredigde Afhankelijkheden
|
||||||
mod.erroredcontent = [scarlet]Fouten in de inhoud
|
mod.erroredcontent = [scarlet]Fouten in de inhoud
|
||||||
|
mod.circulardependencies = [red]Circular Dependencies
|
||||||
|
mod.incompletedependencies = [red]Incomplete Dependencies
|
||||||
|
|
||||||
mod.requiresversion.details = Vereist spelversie: [accent]{0}[]\nJouw spel is verouderd. Deze mod heeft een nieuwere versie van de game nodig (mogelijk een beta/alpha release) om te functioneren.
|
mod.requiresversion.details = Vereist spelversie: [accent]{0}[]\nJouw spel is verouderd. Deze mod heeft een nieuwere versie van de game nodig (mogelijk een beta/alpha release) om te functioneren.
|
||||||
mod.outdatedv7.details = Deze mod is onverenigbaar met de nieuwste versie van het spel. De auteur moet het updaten en [accent]minGameVersion: 136[] toevoegen aan zijn/haar [accent]mod.json[] bestand.
|
mod.outdatedv7.details = Deze mod is onverenigbaar met de nieuwste versie van het spel. De auteur moet het updaten en [accent]minGameVersion: 136[] toevoegen aan zijn/haar [accent]mod.json[] bestand.
|
||||||
mod.blacklisted.details = Deze mod is handmatig op de zwarte lijst gezet wegens het veroorzaken van crashes of andere problemen met deze versie van het spel. Gebruik het niet.
|
mod.blacklisted.details = Deze mod is handmatig op de zwarte lijst gezet wegens het veroorzaken van crashes of andere problemen met deze versie van het spel. Gebruik het niet.
|
||||||
mod.missingdependencies.details = Deze mod mist afhankelijkheden: {0}
|
mod.missingdependencies.details = Deze mod mist afhankelijkheden: {0}
|
||||||
mod.erroredcontent.details = Deze mod veroorzaakte fouten tijdens het laden. Vraag de auteur van de mod om ze te op te lossen.
|
mod.erroredcontent.details = Deze mod veroorzaakte fouten tijdens het laden. Vraag de auteur van de mod om ze te op te lossen.
|
||||||
|
mod.circulardependencies.details = This mod has dependencies that depends on each other.
|
||||||
|
mod.incompletedependencies.details = This mod is unable to be loaded due to invalid or missing dependencies: {0}.
|
||||||
|
|
||||||
mod.requiresversion = Vereist spelversie: [red]{0}
|
mod.requiresversion = Vereist spelversie: [red]{0}
|
||||||
|
|
||||||
@@ -335,6 +339,7 @@ command.repair = Repareer
|
|||||||
command.rebuild = Herbouw
|
command.rebuild = Herbouw
|
||||||
command.assist = Assist Speler
|
command.assist = Assist Speler
|
||||||
command.move = Beweeg
|
command.move = Beweeg
|
||||||
|
command.boost = Boost
|
||||||
openlink = Open Link
|
openlink = Open Link
|
||||||
copylink = Kopieer Link
|
copylink = Kopieer Link
|
||||||
back = Terug
|
back = Terug
|
||||||
@@ -976,6 +981,8 @@ bullet.splashdamage = [stat]{0}[lightgray] gebied scade ~[stat] {1}[lightgray] t
|
|||||||
bullet.incendiary = [stat]brandstichtend
|
bullet.incendiary = [stat]brandstichtend
|
||||||
bullet.homing = [stat]doelzoekend
|
bullet.homing = [stat]doelzoekend
|
||||||
bullet.armorpierce = [stat]pantserdoorborend
|
bullet.armorpierce = [stat]pantserdoorborend
|
||||||
|
bullet.suppression = [stat]{0} sec[lightgray] repair suppression ~ [stat]{1}[lightgray] tiles
|
||||||
|
bullet.interval = [stat]{0}/sec[lightgray] interval bullets:
|
||||||
bullet.frags = [stat]{0}[lightgray]x fragment kogels:
|
bullet.frags = [stat]{0}[lightgray]x fragment kogels:
|
||||||
bullet.lightning = [stat]{0}[lightgray]x bliksem ~ [stat]{1}[lightgray] schade
|
bullet.lightning = [stat]{0}[lightgray]x bliksem ~ [stat]{1}[lightgray] schade
|
||||||
bullet.buildingdamage = [stat]{0}%[lightgray] gebouwschade
|
bullet.buildingdamage = [stat]{0}%[lightgray] gebouwschade
|
||||||
@@ -1089,8 +1096,8 @@ setting.bridgeopacity.name = Brug Transparantie
|
|||||||
setting.playerchat.name = Toon Chat
|
setting.playerchat.name = Toon Chat
|
||||||
setting.showweather.name = Toon Weer Graphics
|
setting.showweather.name = Toon Weer Graphics
|
||||||
setting.hidedisplays.name = Verberg Logische Displays
|
setting.hidedisplays.name = Verberg Logische Displays
|
||||||
public.confirm = Wil je je game publiek maken?\n[accent]Iedereen kan je spel dan joinen.\n[lightgray]Dit kan je later veranderen in Instellingen->Spel->Publieke Server Zichtbaarheid.
|
steam.friendsonly = Friends Only
|
||||||
public.confirm.really = Als je met een vriend wilt spelen, gebruik dan de optie [green]Nodig Vriend Uit[] in plaats van [scarlet]Publieke Server[]!\nWeet je zeker dat je je server [scarlet]public[] wilt maken?
|
steam.friendsonly.tooltip = Whether only Steam friends will be able to join your game.\nUnchecking this box will make your game public - anyone can join.
|
||||||
public.beta = Onthoud dat b<>ta versies geen publieke lobby's kunnen maken.
|
public.beta = Onthoud dat b<>ta versies geen publieke lobby's kunnen maken.
|
||||||
uiscale.reset = UI formaat is geweizigd.\nKlik op "OK" om het te bevestigen.\n[scarlet]Anders word het in[accent] {0}[] seconden ongedaan gemaakt...
|
uiscale.reset = UI formaat is geweizigd.\nKlik op "OK" om het te bevestigen.\n[scarlet]Anders word het in[accent] {0}[] seconden ongedaan gemaakt...
|
||||||
uiscale.cancel = Annuleer & Sluit
|
uiscale.cancel = Annuleer & Sluit
|
||||||
@@ -1142,8 +1149,8 @@ keybind.select.name = Selecteer/Schiet
|
|||||||
keybind.diagonal_placement.name = Plaats Diagonaal
|
keybind.diagonal_placement.name = Plaats Diagonaal
|
||||||
keybind.pick.name = Kies Blok
|
keybind.pick.name = Kies Blok
|
||||||
keybind.break_block.name = Breek Blok
|
keybind.break_block.name = Breek Blok
|
||||||
keybind.select_all_units = Selecteer Alle Eenheden
|
keybind.select_all_units.name = Selecteer Alle Eenheden
|
||||||
keybind.select_all_unit_factories = Selecteer Alle Eenheidsfabrieken
|
keybind.select_all_unit_factories.name = Selecteer Alle Eenheidsfabrieken
|
||||||
keybind.deselect.name = Deselecteer
|
keybind.deselect.name = Deselecteer
|
||||||
keybind.pickupCargo.name = Pak Vracht Op
|
keybind.pickupCargo.name = Pak Vracht Op
|
||||||
keybind.dropCargo.name = Laat Vracht Vallen
|
keybind.dropCargo.name = Laat Vracht Vallen
|
||||||
@@ -2195,6 +2202,7 @@ lst.flushmessage = Display a message on the screen from the text buffer.\nWill w
|
|||||||
lst.cutscene = Manipulate the player camera.
|
lst.cutscene = Manipulate the player camera.
|
||||||
lst.setflag = Set a global flag that can be read by all processors.
|
lst.setflag = Set a global flag that can be read by all processors.
|
||||||
lst.getflag = Check if a global flag is set.
|
lst.getflag = Check if a global flag is set.
|
||||||
|
lst.setprop = Sets a property of a unit or building.
|
||||||
logic.nounitbuild = [red]Unit building logic is not allowed here.
|
logic.nounitbuild = [red]Unit building logic is not allowed here.
|
||||||
lenum.type = Type of building/unit.\ne.g. for any router, this will return [accent]@router[].\nNot a string.
|
lenum.type = Type of building/unit.\ne.g. for any router, this will return [accent]@router[].\nNot a string.
|
||||||
lenum.shoot = Shoot at a position.
|
lenum.shoot = Shoot at a position.
|
||||||
|
|||||||
@@ -146,11 +146,15 @@ mod.incompatiblemod = [red]Incompatible
|
|||||||
mod.blacklisted = [red]Unsupported
|
mod.blacklisted = [red]Unsupported
|
||||||
mod.unmetdependencies = [red]Unmet Dependencies
|
mod.unmetdependencies = [red]Unmet Dependencies
|
||||||
mod.erroredcontent = [scarlet]Content Errors
|
mod.erroredcontent = [scarlet]Content Errors
|
||||||
|
mod.circulardependencies = [red]Circular Dependencies
|
||||||
|
mod.incompletedependencies = [red]Incomplete Dependencies
|
||||||
mod.requiresversion.details = Requires game version: [accent]{0}[]\nYour game is outdated. This mod requires a newer version of the game (possibly a beta/alpha release) to function.
|
mod.requiresversion.details = Requires game version: [accent]{0}[]\nYour game is outdated. This mod requires a newer version of the game (possibly a beta/alpha release) to function.
|
||||||
mod.outdatedv7.details = This mod is incompatible with the latest version of the game. The author must update it, and add [accent]minGameVersion: 136[] to its [accent]mod.json[] file.
|
mod.outdatedv7.details = This mod is incompatible with the latest version of the game. The author must update it, and add [accent]minGameVersion: 136[] to its [accent]mod.json[] file.
|
||||||
mod.blacklisted.details = This mod has been manually blacklisted for causing crashes or other issues with this version of the game. Do not use it.
|
mod.blacklisted.details = This mod has been manually blacklisted for causing crashes or other issues with this version of the game. Do not use it.
|
||||||
mod.missingdependencies.details = This mod is missing dependencies: {0}
|
mod.missingdependencies.details = This mod is missing dependencies: {0}
|
||||||
mod.erroredcontent.details = This game caused errors when loading. Ask the mod author to fix them.
|
mod.erroredcontent.details = This game caused errors when loading. Ask the mod author to fix them.
|
||||||
|
mod.circulardependencies.details = This mod has dependencies that depends on each other.
|
||||||
|
mod.incompletedependencies.details = This mod is unable to be loaded due to invalid or missing dependencies: {0}.
|
||||||
mod.requiresversion = Requires game version: [red]{0}
|
mod.requiresversion = Requires game version: [red]{0}
|
||||||
mod.errors = Errors have occurred loading content.
|
mod.errors = Errors have occurred loading content.
|
||||||
mod.noerrorplay = [scarlet]You have mods with errors.[] Either disable the affected mods or fix the errors before playing.
|
mod.noerrorplay = [scarlet]You have mods with errors.[] Either disable the affected mods or fix the errors before playing.
|
||||||
@@ -327,6 +331,7 @@ command.repair = Repair
|
|||||||
command.rebuild = Rebuild
|
command.rebuild = Rebuild
|
||||||
command.assist = Assist Player
|
command.assist = Assist Player
|
||||||
command.move = Move
|
command.move = Move
|
||||||
|
command.boost = Boost
|
||||||
openlink = Open Link
|
openlink = Open Link
|
||||||
copylink = Kopiëer Link
|
copylink = Kopiëer Link
|
||||||
back = Terug
|
back = Terug
|
||||||
@@ -964,6 +969,8 @@ bullet.splashdamage = [stat]{0}[lightgray] area dmg ~[stat] {1}[lightgray] tiles
|
|||||||
bullet.incendiary = [stat]incendiary
|
bullet.incendiary = [stat]incendiary
|
||||||
bullet.homing = [stat]homing
|
bullet.homing = [stat]homing
|
||||||
bullet.armorpierce = [stat]armor piercing
|
bullet.armorpierce = [stat]armor piercing
|
||||||
|
bullet.suppression = [stat]{0} sec[lightgray] repair suppression ~ [stat]{1}[lightgray] tiles
|
||||||
|
bullet.interval = [stat]{0}/sec[lightgray] interval bullets:
|
||||||
bullet.frags = [stat]{0}[lightgray]x frag bullets:
|
bullet.frags = [stat]{0}[lightgray]x frag bullets:
|
||||||
bullet.lightning = [stat]{0}[lightgray]x lightning ~ [stat]{1}[lightgray] damage
|
bullet.lightning = [stat]{0}[lightgray]x lightning ~ [stat]{1}[lightgray] damage
|
||||||
bullet.buildingdamage = [stat]{0}%[lightgray] building damage
|
bullet.buildingdamage = [stat]{0}%[lightgray] building damage
|
||||||
@@ -1077,8 +1084,8 @@ setting.bridgeopacity.name = Bridge Opacity
|
|||||||
setting.playerchat.name = Display In-Game Chat
|
setting.playerchat.name = Display In-Game Chat
|
||||||
setting.showweather.name = Show Weather Graphics
|
setting.showweather.name = Show Weather Graphics
|
||||||
setting.hidedisplays.name = Hide Logic Displays
|
setting.hidedisplays.name = Hide Logic Displays
|
||||||
public.confirm = Do you want to make your game public?\n[accent]Anyone will be able to join your games.\n[lightgray]This can be changed later in Settings->Game->Public Game Visibility.
|
steam.friendsonly = Friends Only
|
||||||
public.confirm.really = If you want to play with friends, use [green]Invite Friend[] instead of a [scarlet]Public server[]!\nAre you sure you want to make your game [scarlet]public[]?
|
steam.friendsonly.tooltip = Whether only Steam friends will be able to join your game.\nUnchecking this box will make your game public - anyone can join.
|
||||||
public.beta = Note that beta versions of the game cannot make public lobbies.
|
public.beta = Note that beta versions of the game cannot make public lobbies.
|
||||||
uiscale.reset = UI scale has been changed.\nPress "OK" to confirm this scale.\n[scarlet]Reverting and exiting in[accent] {0}[] settings...
|
uiscale.reset = UI scale has been changed.\nPress "OK" to confirm this scale.\n[scarlet]Reverting and exiting in[accent] {0}[] settings...
|
||||||
uiscale.cancel = Cancel & Exit
|
uiscale.cancel = Cancel & Exit
|
||||||
@@ -1130,8 +1137,8 @@ keybind.select.name = Select/Shoot
|
|||||||
keybind.diagonal_placement.name = Diagonal Placement
|
keybind.diagonal_placement.name = Diagonal Placement
|
||||||
keybind.pick.name = Pick Block
|
keybind.pick.name = Pick Block
|
||||||
keybind.break_block.name = Break Block
|
keybind.break_block.name = Break Block
|
||||||
keybind.select_all_units = Select All Units
|
keybind.select_all_units.name = Select All Units
|
||||||
keybind.select_all_unit_factories = Select All Unit Factories
|
keybind.select_all_unit_factories.name = Select All Unit Factories
|
||||||
keybind.deselect.name = Deselect
|
keybind.deselect.name = Deselect
|
||||||
keybind.pickupCargo.name = Pickup Cargo
|
keybind.pickupCargo.name = Pickup Cargo
|
||||||
keybind.dropCargo.name = Drop Cargo
|
keybind.dropCargo.name = Drop Cargo
|
||||||
@@ -2182,6 +2189,7 @@ lst.flushmessage = Display a message on the screen from the text buffer.\nWill w
|
|||||||
lst.cutscene = Manipulate the player camera.
|
lst.cutscene = Manipulate the player camera.
|
||||||
lst.setflag = Set a global flag that can be read by all processors.
|
lst.setflag = Set a global flag that can be read by all processors.
|
||||||
lst.getflag = Check if a global flag is set.
|
lst.getflag = Check if a global flag is set.
|
||||||
|
lst.setprop = Sets a property of a unit or building.
|
||||||
logic.nounitbuild = [red]Unit building logic is not allowed here.
|
logic.nounitbuild = [red]Unit building logic is not allowed here.
|
||||||
lenum.type = Type of building/unit.\ne.g. for any router, this will return [accent]@router[].\nNot a string.
|
lenum.type = Type of building/unit.\ne.g. for any router, this will return [accent]@router[].\nNot a string.
|
||||||
lenum.shoot = Shoot at a position.
|
lenum.shoot = Shoot at a position.
|
||||||
|
|||||||
@@ -149,11 +149,15 @@ mod.incompatiblemod = [red]Niekompatybilne
|
|||||||
mod.blacklisted = [red]Niewspierane
|
mod.blacklisted = [red]Niewspierane
|
||||||
mod.unmetdependencies = [red]Niespełnione Zależnośći
|
mod.unmetdependencies = [red]Niespełnione Zależnośći
|
||||||
mod.erroredcontent = [scarlet]Błędy Zawartości
|
mod.erroredcontent = [scarlet]Błędy Zawartości
|
||||||
|
mod.circulardependencies = [red]Circular Dependencies
|
||||||
|
mod.incompletedependencies = [red]Incomplete Dependencies
|
||||||
mod.requiresversion.details = Wymaga wersji gry: [accent]{0}[]\nTwoja gra jest przestarzała. Ten mod potrzebuje nowszej wersji gry (możliwe, że wersji w fazie alfa/beta) aby mógł funkcjonować.
|
mod.requiresversion.details = Wymaga wersji gry: [accent]{0}[]\nTwoja gra jest przestarzała. Ten mod potrzebuje nowszej wersji gry (możliwe, że wersji w fazie alfa/beta) aby mógł funkcjonować.
|
||||||
mod.outdatedv7.details = Ten mod jest niekompatybilny z najnowszą wersją gry. Autor musi go zaktualizować, i dodać [accent]minGameVersion: 136[] w pliku [accent]mod.json[].
|
mod.outdatedv7.details = Ten mod jest niekompatybilny z najnowszą wersją gry. Autor musi go zaktualizować, i dodać [accent]minGameVersion: 136[] w pliku [accent]mod.json[].
|
||||||
mod.blacklisted.details = Ten mod został ręczenie przeniesiony na czarną listę, ponieważ powodował wyłączenia gry i inne problemy na tej wersji. Nie używaj go.
|
mod.blacklisted.details = Ten mod został ręczenie przeniesiony na czarną listę, ponieważ powodował wyłączenia gry i inne problemy na tej wersji. Nie używaj go.
|
||||||
mod.missingdependencies.details = W tym modzie brakuje zależnośći: {0}
|
mod.missingdependencies.details = W tym modzie brakuje zależnośći: {0}
|
||||||
mod.erroredcontent.details = Ten mod spowodował błędy przy uruchomianu. Poproś autora moda o ich naprawienie.
|
mod.erroredcontent.details = Ten mod spowodował błędy przy uruchomianu. Poproś autora moda o ich naprawienie.
|
||||||
|
mod.circulardependencies.details = This mod has dependencies that depends on each other.
|
||||||
|
mod.incompletedependencies.details = This mod is unable to be loaded due to invalid or missing dependencies: {0}.
|
||||||
mod.requiresversion = Requires game version: [red]{0}
|
mod.requiresversion = Requires game version: [red]{0}
|
||||||
mod.errors = Wystąpił błąd podczas ładowania treści.
|
mod.errors = Wystąpił błąd podczas ładowania treści.
|
||||||
mod.noerrorplay = [scarlet]Twoje mody zawierają błędy.[] Wyłącz je lub napraw błędy przed rozpoczęciem gry.
|
mod.noerrorplay = [scarlet]Twoje mody zawierają błędy.[] Wyłącz je lub napraw błędy przed rozpoczęciem gry.
|
||||||
@@ -331,6 +335,7 @@ command.repair = Naprawiaj
|
|||||||
command.rebuild = Odbudowywuj
|
command.rebuild = Odbudowywuj
|
||||||
command.assist = Asystuj Graczowi
|
command.assist = Asystuj Graczowi
|
||||||
command.move = Przemieść
|
command.move = Przemieść
|
||||||
|
command.boost = Boost
|
||||||
openlink = Otwórz Link
|
openlink = Otwórz Link
|
||||||
copylink = Kopiuj Link
|
copylink = Kopiuj Link
|
||||||
back = Wróć
|
back = Wróć
|
||||||
@@ -974,6 +979,8 @@ bullet.splashdamage = [stat]{0}[lightgray] Obrażenia obszarowe ~[stat] {1}[ligh
|
|||||||
bullet.incendiary = [stat]zapalający
|
bullet.incendiary = [stat]zapalający
|
||||||
bullet.homing = [stat]naprowadzający
|
bullet.homing = [stat]naprowadzający
|
||||||
bullet.armorpierce = [stat]przebijający pancerz
|
bullet.armorpierce = [stat]przebijający pancerz
|
||||||
|
bullet.suppression = [stat]{0} sec[lightgray] repair suppression ~ [stat]{1}[lightgray] tiles
|
||||||
|
bullet.interval = [stat]{0}/sec[lightgray] interval bullets:
|
||||||
bullet.frags = [stat]{0}[lightgray]x pociski odłamkowe:
|
bullet.frags = [stat]{0}[lightgray]x pociski odłamkowe:
|
||||||
bullet.lightning = [stat]{0}[lightgray]x błyskawice ~ [stat]{1}[lightgray] Obrażenia
|
bullet.lightning = [stat]{0}[lightgray]x błyskawice ~ [stat]{1}[lightgray] Obrażenia
|
||||||
bullet.buildingdamage = [stat]{0}%[lightgray] obrażeń budynkom
|
bullet.buildingdamage = [stat]{0}%[lightgray] obrażeń budynkom
|
||||||
@@ -1087,8 +1094,8 @@ setting.bridgeopacity.name = Przezroczystość mostów
|
|||||||
setting.playerchat.name = Wyświetlaj dymek czatu w grze
|
setting.playerchat.name = Wyświetlaj dymek czatu w grze
|
||||||
setting.showweather.name = Pokaż pogodę
|
setting.showweather.name = Pokaż pogodę
|
||||||
setting.hidedisplays.name = Ukryj wyświetlacze logiczne
|
setting.hidedisplays.name = Ukryj wyświetlacze logiczne
|
||||||
public.confirm = Czy chcesz ustawić swoją grę jako publiczną?\n[accent]Każdy będzie mógł dołączyć do Twojej gry.\n[lightgray]Można to później zmienić w Ustawienia->Gra->Widoczność Gry Publicznej.
|
steam.friendsonly = Friends Only
|
||||||
public.confirm.really = Jeśli chcesz zagrać ze znajomymi, użyj opcji [green]Zaproś Znajomych[] zamiast [scarlet]Publiczny serwer[]!\nJesteś pewny że chcesz rozpocząć grę [scarlet]publiczną[]?
|
steam.friendsonly.tooltip = Whether only Steam friends will be able to join your game.\nUnchecking this box will make your game public - anyone can join.
|
||||||
public.beta = Wersje beta gry nie mogą tworzyć publicznych pokoi.
|
public.beta = Wersje beta gry nie mogą tworzyć publicznych pokoi.
|
||||||
uiscale.reset = Skala interfejsu uległa zmianie.\nNaciśnij "OK" by potwierdzić zmiany.\n[scarlet]Cofanie zmian i wyjście z gry za[accent] {0}[]
|
uiscale.reset = Skala interfejsu uległa zmianie.\nNaciśnij "OK" by potwierdzić zmiany.\n[scarlet]Cofanie zmian i wyjście z gry za[accent] {0}[]
|
||||||
uiscale.cancel = Anuluj i wyjdź
|
uiscale.cancel = Anuluj i wyjdź
|
||||||
@@ -1140,8 +1147,8 @@ keybind.select.name = Zaznacz
|
|||||||
keybind.diagonal_placement.name = Budowa po skosie
|
keybind.diagonal_placement.name = Budowa po skosie
|
||||||
keybind.pick.name = Wybierz Blok
|
keybind.pick.name = Wybierz Blok
|
||||||
keybind.break_block.name = Zniszcz Blok
|
keybind.break_block.name = Zniszcz Blok
|
||||||
keybind.select_all_units = Wybierz Wszystkie Jednostki
|
keybind.select_all_units.name = Wybierz Wszystkie Jednostki
|
||||||
keybind.select_all_unit_factories = Wybierz Wszystkie Fabryki Jednostek
|
keybind.select_all_unit_factories.name = Wybierz Wszystkie Fabryki Jednostek
|
||||||
keybind.deselect.name = Odznacz
|
keybind.deselect.name = Odznacz
|
||||||
keybind.pickupCargo.name = Podnieś Ładunek
|
keybind.pickupCargo.name = Podnieś Ładunek
|
||||||
keybind.dropCargo.name = Opuść Ładunek
|
keybind.dropCargo.name = Opuść Ładunek
|
||||||
@@ -2217,6 +2224,7 @@ lst.flushmessage = Wyświetl wiadomość na ekranie z bufora tekstowego.\nPoczek
|
|||||||
lst.cutscene = Manipuluj kamerą gracza.
|
lst.cutscene = Manipuluj kamerą gracza.
|
||||||
lst.setflag = Ustaw globalną flagę, którą mogą odczytać wszystkie procesory.
|
lst.setflag = Ustaw globalną flagę, którą mogą odczytać wszystkie procesory.
|
||||||
lst.getflag = Sprawdź, czy ustawiona jest flaga globalna.
|
lst.getflag = Sprawdź, czy ustawiona jest flaga globalna.
|
||||||
|
lst.setprop = Sets a property of a unit or building.
|
||||||
|
|
||||||
logic.nounitbuild = [red]Logika budowania jednostek nie jest tu dozwolona.
|
logic.nounitbuild = [red]Logika budowania jednostek nie jest tu dozwolona.
|
||||||
|
|
||||||
|
|||||||
@@ -149,11 +149,15 @@ mod.incompatiblemod = [red]Incompatible
|
|||||||
mod.blacklisted = [red]Unsupported
|
mod.blacklisted = [red]Unsupported
|
||||||
mod.unmetdependencies = [red]Unmet Dependencies
|
mod.unmetdependencies = [red]Unmet Dependencies
|
||||||
mod.erroredcontent = [scarlet]Erros no conteúdo
|
mod.erroredcontent = [scarlet]Erros no conteúdo
|
||||||
|
mod.circulardependencies = [red]Circular Dependencies
|
||||||
|
mod.incompletedependencies = [red]Incomplete Dependencies
|
||||||
mod.requiresversion.details = Requires game version: [accent]{0}[]\nYour game is outdated. This mod requires a newer version of the game (possibly a beta/alpha release) to function.
|
mod.requiresversion.details = Requires game version: [accent]{0}[]\nYour game is outdated. This mod requires a newer version of the game (possibly a beta/alpha release) to function.
|
||||||
mod.outdatedv7.details = This mod is incompatible with the latest version of the game. The author must update it, and add [accent]minGameVersion: 136[] to its [accent]mod.json[] file.
|
mod.outdatedv7.details = This mod is incompatible with the latest version of the game. The author must update it, and add [accent]minGameVersion: 136[] to its [accent]mod.json[] file.
|
||||||
mod.blacklisted.details = This mod has been manually blacklisted for causing crashes or other issues with this version of the game. Do not use it.
|
mod.blacklisted.details = This mod has been manually blacklisted for causing crashes or other issues with this version of the game. Do not use it.
|
||||||
mod.missingdependencies.details = This mod is missing dependencies: {0}
|
mod.missingdependencies.details = This mod is missing dependencies: {0}
|
||||||
mod.erroredcontent.details = This game caused errors when loading. Ask the mod author to fix them.
|
mod.erroredcontent.details = This game caused errors when loading. Ask the mod author to fix them.
|
||||||
|
mod.circulardependencies.details = This mod has dependencies that depends on each other.
|
||||||
|
mod.incompletedependencies.details = This mod is unable to be loaded due to invalid or missing dependencies: {0}.
|
||||||
mod.requiresversion = Requires game version: [red]{0}
|
mod.requiresversion = Requires game version: [red]{0}
|
||||||
mod.errors = Ocorreram erros ao carregar o conteúdo.
|
mod.errors = Ocorreram erros ao carregar o conteúdo.
|
||||||
mod.noerrorplay = [scarlet]Você tem mods com erros.[] Desative os mods afetados ou conserte os erros antes de jogar.
|
mod.noerrorplay = [scarlet]Você tem mods com erros.[] Desative os mods afetados ou conserte os erros antes de jogar.
|
||||||
@@ -331,6 +335,7 @@ command.repair = Reparar
|
|||||||
command.rebuild = Reconstruir
|
command.rebuild = Reconstruir
|
||||||
command.assist = Assist Player
|
command.assist = Assist Player
|
||||||
command.move = Mover
|
command.move = Mover
|
||||||
|
command.boost = Boost
|
||||||
openlink = Abrir Link
|
openlink = Abrir Link
|
||||||
copylink = Copiar link
|
copylink = Copiar link
|
||||||
back = Voltar
|
back = Voltar
|
||||||
@@ -985,6 +990,8 @@ bullet.splashdamage = [stat]{0}[lightgray] de dano em área ~[stat] {1}[lightgra
|
|||||||
bullet.incendiary = [stat]Incendiário
|
bullet.incendiary = [stat]Incendiário
|
||||||
bullet.homing = [stat]Guiado
|
bullet.homing = [stat]Guiado
|
||||||
bullet.armorpierce = [stat]pentração de armadura
|
bullet.armorpierce = [stat]pentração de armadura
|
||||||
|
bullet.suppression = [stat]{0} sec[lightgray] repair suppression ~ [stat]{1}[lightgray] tiles
|
||||||
|
bullet.interval = [stat]{0}/sec[lightgray] interval bullets:
|
||||||
bullet.frags = [stat]{0}[lightgray]x balas de fragmentação:
|
bullet.frags = [stat]{0}[lightgray]x balas de fragmentação:
|
||||||
bullet.lightning = [stat]{0}[lightgray]x raio ~ [stat]{1}[lightgray] dano
|
bullet.lightning = [stat]{0}[lightgray]x raio ~ [stat]{1}[lightgray] dano
|
||||||
bullet.buildingdamage = [stat]{0}%[lightgray] dano em construção
|
bullet.buildingdamage = [stat]{0}%[lightgray] dano em construção
|
||||||
@@ -1098,8 +1105,8 @@ setting.bridgeopacity.name = Opacidade da ponte
|
|||||||
setting.playerchat.name = Mostrar chat em jogo
|
setting.playerchat.name = Mostrar chat em jogo
|
||||||
setting.showweather.name = Mostrar Gráficos do Clima
|
setting.showweather.name = Mostrar Gráficos do Clima
|
||||||
setting.hidedisplays.name = Ocultar Displays de Lógicos
|
setting.hidedisplays.name = Ocultar Displays de Lógicos
|
||||||
public.confirm = Você quer fazer sua partida pública?\n[accent]Qualquer um será capaz de entrar na sua partida.\n[lightgray]Isso pode ser mudado depois em Configurações->Jogo->Visibilidade da partida pública.
|
steam.friendsonly = Friends Only
|
||||||
public.confirm.really = Se você quer jogar com amigos, use [green]Convidar Amigos[] ao invés de um [scarlet]Server Público[]!\nTem certeza que quer tornar seu jogo[scarlet]público[]?
|
steam.friendsonly.tooltip = Whether only Steam friends will be able to join your game.\nUnchecking this box will make your game public - anyone can join.
|
||||||
public.beta = Note que as versões beta do jogo não podem fazer salas públicas.
|
public.beta = Note que as versões beta do jogo não podem fazer salas públicas.
|
||||||
uiscale.reset = A escala da interface foi mudada.\nPressione "OK" para confirmar esta escala.\n[scarlet]Revertendo e saindo em[accent] {0}[] segundos...
|
uiscale.reset = A escala da interface foi mudada.\nPressione "OK" para confirmar esta escala.\n[scarlet]Revertendo e saindo em[accent] {0}[] segundos...
|
||||||
uiscale.cancel = Cancelar e sair
|
uiscale.cancel = Cancelar e sair
|
||||||
@@ -1151,8 +1158,8 @@ keybind.select.name = Selecionar
|
|||||||
keybind.diagonal_placement.name = Posicionamento Diagonal
|
keybind.diagonal_placement.name = Posicionamento Diagonal
|
||||||
keybind.pick.name = Pegar bloco
|
keybind.pick.name = Pegar bloco
|
||||||
keybind.break_block.name = Quebrar bloco
|
keybind.break_block.name = Quebrar bloco
|
||||||
keybind.select_all_units = Select All Units
|
keybind.select_all_units.name = Select All Units
|
||||||
keybind.select_all_unit_factories = Select All Unit Factories
|
keybind.select_all_unit_factories.name = Select All Unit Factories
|
||||||
keybind.deselect.name = Desmarcar
|
keybind.deselect.name = Desmarcar
|
||||||
keybind.pickupCargo.name = Pegar Carga
|
keybind.pickupCargo.name = Pegar Carga
|
||||||
keybind.dropCargo.name = Soltar Carga
|
keybind.dropCargo.name = Soltar Carga
|
||||||
@@ -2215,6 +2222,7 @@ lst.flushmessage = Display a message on the screen from the text buffer.\nWill w
|
|||||||
lst.cutscene = Manipulate the player camera.
|
lst.cutscene = Manipulate the player camera.
|
||||||
lst.setflag = Set a global flag that can be read by all processors.
|
lst.setflag = Set a global flag that can be read by all processors.
|
||||||
lst.getflag = Check if a global flag is set.
|
lst.getflag = Check if a global flag is set.
|
||||||
|
lst.setprop = Sets a property of a unit or building.
|
||||||
|
|
||||||
logic.nounitbuild = [red]Unit building logic is not allowed here.
|
logic.nounitbuild = [red]Unit building logic is not allowed here.
|
||||||
|
|
||||||
|
|||||||
@@ -146,11 +146,15 @@ mod.incompatiblemod = [red]Incompatible
|
|||||||
mod.blacklisted = [red]Unsupported
|
mod.blacklisted = [red]Unsupported
|
||||||
mod.unmetdependencies = [red]Unmet Dependencies
|
mod.unmetdependencies = [red]Unmet Dependencies
|
||||||
mod.erroredcontent = [scarlet]Erros de conteudo
|
mod.erroredcontent = [scarlet]Erros de conteudo
|
||||||
|
mod.circulardependencies = [red]Circular Dependencies
|
||||||
|
mod.incompletedependencies = [red]Incomplete Dependencies
|
||||||
mod.requiresversion.details = Requires game version: [accent]{0}[]\nYour game is outdated. This mod requires a newer version of the game (possibly a beta/alpha release) to function.
|
mod.requiresversion.details = Requires game version: [accent]{0}[]\nYour game is outdated. This mod requires a newer version of the game (possibly a beta/alpha release) to function.
|
||||||
mod.outdatedv7.details = This mod is incompatible with the latest version of the game. The author must update it, and add [accent]minGameVersion: 136[] to its [accent]mod.json[] file.
|
mod.outdatedv7.details = This mod is incompatible with the latest version of the game. The author must update it, and add [accent]minGameVersion: 136[] to its [accent]mod.json[] file.
|
||||||
mod.blacklisted.details = This mod has been manually blacklisted for causing crashes or other issues with this version of the game. Do not use it.
|
mod.blacklisted.details = This mod has been manually blacklisted for causing crashes or other issues with this version of the game. Do not use it.
|
||||||
mod.missingdependencies.details = This mod is missing dependencies: {0}
|
mod.missingdependencies.details = This mod is missing dependencies: {0}
|
||||||
mod.erroredcontent.details = This game caused errors when loading. Ask the mod author to fix them.
|
mod.erroredcontent.details = This game caused errors when loading. Ask the mod author to fix them.
|
||||||
|
mod.circulardependencies.details = This mod has dependencies that depends on each other.
|
||||||
|
mod.incompletedependencies.details = This mod is unable to be loaded due to invalid or missing dependencies: {0}.
|
||||||
mod.requiresversion = Requires game version: [red]{0}
|
mod.requiresversion = Requires game version: [red]{0}
|
||||||
mod.errors = Ocorreram erros ao carregar o conteúdo.
|
mod.errors = Ocorreram erros ao carregar o conteúdo.
|
||||||
mod.noerrorplay = [scarlet]Tens mods com erros.[] Desative os mods afetados ou corrija os erros antes de jogar.
|
mod.noerrorplay = [scarlet]Tens mods com erros.[] Desative os mods afetados ou corrija os erros antes de jogar.
|
||||||
@@ -327,6 +331,7 @@ command.repair = Repair
|
|||||||
command.rebuild = Rebuild
|
command.rebuild = Rebuild
|
||||||
command.assist = Assist Player
|
command.assist = Assist Player
|
||||||
command.move = Move
|
command.move = Move
|
||||||
|
command.boost = Boost
|
||||||
openlink = Abrir Ligação
|
openlink = Abrir Ligação
|
||||||
copylink = Copiar ligação
|
copylink = Copiar ligação
|
||||||
back = Voltar
|
back = Voltar
|
||||||
@@ -964,6 +969,8 @@ bullet.splashdamage = [stat]{0}[lightgray] Dano em área ~[stat] {1}[lightgray]
|
|||||||
bullet.incendiary = [stat]Incendiário
|
bullet.incendiary = [stat]Incendiário
|
||||||
bullet.homing = [stat]Guiado
|
bullet.homing = [stat]Guiado
|
||||||
bullet.armorpierce = [stat]armor piercing
|
bullet.armorpierce = [stat]armor piercing
|
||||||
|
bullet.suppression = [stat]{0} sec[lightgray] repair suppression ~ [stat]{1}[lightgray] tiles
|
||||||
|
bullet.interval = [stat]{0}/sec[lightgray] interval bullets:
|
||||||
bullet.frags = [stat]{0}[lightgray]x frag bullets:
|
bullet.frags = [stat]{0}[lightgray]x frag bullets:
|
||||||
bullet.lightning = [stat]{0}[lightgray]x lightning ~ [stat]{1}[lightgray] damage
|
bullet.lightning = [stat]{0}[lightgray]x lightning ~ [stat]{1}[lightgray] damage
|
||||||
bullet.buildingdamage = [stat]{0}%[lightgray] building damage
|
bullet.buildingdamage = [stat]{0}%[lightgray] building damage
|
||||||
@@ -1077,8 +1084,8 @@ setting.bridgeopacity.name = Opacidade da Ponte
|
|||||||
setting.playerchat.name = Mostrar chat em jogo
|
setting.playerchat.name = Mostrar chat em jogo
|
||||||
setting.showweather.name = Show Weather Graphics
|
setting.showweather.name = Show Weather Graphics
|
||||||
setting.hidedisplays.name = Hide Logic Displays
|
setting.hidedisplays.name = Hide Logic Displays
|
||||||
public.confirm = Queres que o teu jogo fique publico?\n[accent]Qualquer jogador vai conseguir juntar-se ao teu jogo.\n[lightgray]Isto pode ser alterado mais tarde in Settings->Game->Public Game Visibility.
|
steam.friendsonly = Friends Only
|
||||||
public.confirm.really = If you want to play with friends, use [green]Invite Friend[] instead of a [scarlet]Public server[]!\nAre you sure you want to make your game [scarlet]public[]?
|
steam.friendsonly.tooltip = Whether only Steam friends will be able to join your game.\nUnchecking this box will make your game public - anyone can join.
|
||||||
public.beta = Observe que as versões beta do jogo não podem criar lobbies públicos.
|
public.beta = Observe que as versões beta do jogo não podem criar lobbies públicos.
|
||||||
uiscale.reset = A escala da IU foi mudada.\nPressione "OK" para confirmar esta escala.\n[scarlet]Revertendo e saindo em[accent] {0}[] settings...
|
uiscale.reset = A escala da IU foi mudada.\nPressione "OK" para confirmar esta escala.\n[scarlet]Revertendo e saindo em[accent] {0}[] settings...
|
||||||
uiscale.cancel = Cancelar e sair
|
uiscale.cancel = Cancelar e sair
|
||||||
@@ -1130,8 +1137,8 @@ keybind.select.name = Selecionar
|
|||||||
keybind.diagonal_placement.name = Colocação diagonal
|
keybind.diagonal_placement.name = Colocação diagonal
|
||||||
keybind.pick.name = Pegar bloco
|
keybind.pick.name = Pegar bloco
|
||||||
keybind.break_block.name = Quebrar bloco
|
keybind.break_block.name = Quebrar bloco
|
||||||
keybind.select_all_units = Select All Units
|
keybind.select_all_units.name = Select All Units
|
||||||
keybind.select_all_unit_factories = Select All Unit Factories
|
keybind.select_all_unit_factories.name = Select All Unit Factories
|
||||||
keybind.deselect.name = Deselecionar
|
keybind.deselect.name = Deselecionar
|
||||||
keybind.pickupCargo.name = Pickup Cargo
|
keybind.pickupCargo.name = Pickup Cargo
|
||||||
keybind.dropCargo.name = Drop Cargo
|
keybind.dropCargo.name = Drop Cargo
|
||||||
@@ -2182,6 +2189,7 @@ lst.flushmessage = Display a message on the screen from the text buffer.\nWill w
|
|||||||
lst.cutscene = Manipulate the player camera.
|
lst.cutscene = Manipulate the player camera.
|
||||||
lst.setflag = Set a global flag that can be read by all processors.
|
lst.setflag = Set a global flag that can be read by all processors.
|
||||||
lst.getflag = Check if a global flag is set.
|
lst.getflag = Check if a global flag is set.
|
||||||
|
lst.setprop = Sets a property of a unit or building.
|
||||||
logic.nounitbuild = [red]Unit building logic is not allowed here.
|
logic.nounitbuild = [red]Unit building logic is not allowed here.
|
||||||
lenum.type = Type of building/unit.\ne.g. for any router, this will return [accent]@router[].\nNot a string.
|
lenum.type = Type of building/unit.\ne.g. for any router, this will return [accent]@router[].\nNot a string.
|
||||||
lenum.shoot = Shoot at a position.
|
lenum.shoot = Shoot at a position.
|
||||||
|
|||||||
@@ -149,11 +149,15 @@ mod.incompatiblemod = [red]Incompatible
|
|||||||
mod.blacklisted = [red]Unsupported
|
mod.blacklisted = [red]Unsupported
|
||||||
mod.unmetdependencies = [red]Unmet Dependencies
|
mod.unmetdependencies = [red]Unmet Dependencies
|
||||||
mod.erroredcontent = [scarlet]Erori de Conținut
|
mod.erroredcontent = [scarlet]Erori de Conținut
|
||||||
|
mod.circulardependencies = [red]Circular Dependencies
|
||||||
|
mod.incompletedependencies = [red]Incomplete Dependencies
|
||||||
mod.requiresversion.details = Requires game version: [accent]{0}[]\nYour game is outdated. This mod requires a newer version of the game (possibly a beta/alpha release) to function.
|
mod.requiresversion.details = Requires game version: [accent]{0}[]\nYour game is outdated. This mod requires a newer version of the game (possibly a beta/alpha release) to function.
|
||||||
mod.outdatedv7.details = This mod is incompatible with the latest version of the game. The author must update it, and add [accent]minGameVersion: 136[] to its [accent]mod.json[] file.
|
mod.outdatedv7.details = This mod is incompatible with the latest version of the game. The author must update it, and add [accent]minGameVersion: 136[] to its [accent]mod.json[] file.
|
||||||
mod.blacklisted.details = This mod has been manually blacklisted for causing crashes or other issues with this version of the game. Do not use it.
|
mod.blacklisted.details = This mod has been manually blacklisted for causing crashes or other issues with this version of the game. Do not use it.
|
||||||
mod.missingdependencies.details = This mod is missing dependencies: {0}
|
mod.missingdependencies.details = This mod is missing dependencies: {0}
|
||||||
mod.erroredcontent.details = This game caused errors when loading. Ask the mod author to fix them.
|
mod.erroredcontent.details = This game caused errors when loading. Ask the mod author to fix them.
|
||||||
|
mod.circulardependencies.details = This mod has dependencies that depends on each other.
|
||||||
|
mod.incompletedependencies.details = This mod is unable to be loaded due to invalid or missing dependencies: {0}.
|
||||||
mod.requiresversion = Requires game version: [red]{0}
|
mod.requiresversion = Requires game version: [red]{0}
|
||||||
mod.errors = Au apărut erori la încărcarea conținutului.
|
mod.errors = Au apărut erori la încărcarea conținutului.
|
||||||
mod.noerrorplay = [scarlet]Modurile tale au erori.[] Dezactivează modurile afectate sau repară erorile înainte să joci.
|
mod.noerrorplay = [scarlet]Modurile tale au erori.[] Dezactivează modurile afectate sau repară erorile înainte să joci.
|
||||||
@@ -331,6 +335,7 @@ command.repair = Repair
|
|||||||
command.rebuild = Rebuild
|
command.rebuild = Rebuild
|
||||||
command.assist = Assist Player
|
command.assist = Assist Player
|
||||||
command.move = Move
|
command.move = Move
|
||||||
|
command.boost = Boost
|
||||||
openlink = Deschide Linkul
|
openlink = Deschide Linkul
|
||||||
copylink = Copiază Linkul
|
copylink = Copiază Linkul
|
||||||
back = Înapoi
|
back = Înapoi
|
||||||
@@ -976,6 +981,8 @@ bullet.splashdamage = [stat]{0}[lightgray] forță pe raza ~[stat] {1}[lightgray
|
|||||||
bullet.incendiary = [stat]incendiar
|
bullet.incendiary = [stat]incendiar
|
||||||
bullet.homing = [stat]cu radar
|
bullet.homing = [stat]cu radar
|
||||||
bullet.armorpierce = [stat]armor piercing
|
bullet.armorpierce = [stat]armor piercing
|
||||||
|
bullet.suppression = [stat]{0} sec[lightgray] repair suppression ~ [stat]{1}[lightgray] tiles
|
||||||
|
bullet.interval = [stat]{0}/sec[lightgray] interval bullets:
|
||||||
bullet.frags = [stat]{0}[lightgray]x fragmente:
|
bullet.frags = [stat]{0}[lightgray]x fragmente:
|
||||||
bullet.lightning = [stat]{0}[lightgray]x fulgere ~ [stat]{1}[lightgray] forță
|
bullet.lightning = [stat]{0}[lightgray]x fulgere ~ [stat]{1}[lightgray] forță
|
||||||
bullet.buildingdamage = [stat]{0}%[lightgray] forță/clădire
|
bullet.buildingdamage = [stat]{0}%[lightgray] forță/clădire
|
||||||
@@ -1089,8 +1096,8 @@ setting.bridgeopacity.name = Opacitate Poduri
|
|||||||
setting.playerchat.name = Vezi Chat Temporar
|
setting.playerchat.name = Vezi Chat Temporar
|
||||||
setting.showweather.name = Vezi Vremea
|
setting.showweather.name = Vezi Vremea
|
||||||
setting.hidedisplays.name = Hide Logic Displays
|
setting.hidedisplays.name = Hide Logic Displays
|
||||||
public.confirm = Vrei să îți faci jocul public?\n[accent]Oricine va putea intra în jocurile tale.\n[lightgray]Poți schimba asta mai târziu din Setări->Joc->Vizibilitatea Jocurilor Publice.
|
steam.friendsonly = Friends Only
|
||||||
public.confirm.really = Dacă vrei să joci cu prietenii, folosește butonul [green]Invită Prieteni[] în loc de un [scarlet]Server Public[]!\nSigur vrei să-ți faci jocul [scarlet]public[]?
|
steam.friendsonly.tooltip = Whether only Steam friends will be able to join your game.\nUnchecking this box will make your game public - anyone can join.
|
||||||
public.beta = De reținut că versiunile beta ale jocului nu poate face servere publice.
|
public.beta = De reținut că versiunile beta ale jocului nu poate face servere publice.
|
||||||
uiscale.reset = Scara interfeței a fost schimbată.\nApasă "OK" pt a confirma această scară.\n[scarlet]Revin setările și se iese în [accent] {0}[] secunde...
|
uiscale.reset = Scara interfeței a fost schimbată.\nApasă "OK" pt a confirma această scară.\n[scarlet]Revin setările și se iese în [accent] {0}[] secunde...
|
||||||
uiscale.cancel = Anulare și ieșire
|
uiscale.cancel = Anulare și ieșire
|
||||||
@@ -1142,8 +1149,8 @@ keybind.select.name = Selectează/Trage
|
|||||||
keybind.diagonal_placement.name = Plasare Diagonală
|
keybind.diagonal_placement.name = Plasare Diagonală
|
||||||
keybind.pick.name = Ia Bloc
|
keybind.pick.name = Ia Bloc
|
||||||
keybind.break_block.name = Distruge Bloc
|
keybind.break_block.name = Distruge Bloc
|
||||||
keybind.select_all_units = Select All Units
|
keybind.select_all_units.name = Select All Units
|
||||||
keybind.select_all_unit_factories = Select All Unit Factories
|
keybind.select_all_unit_factories.name = Select All Unit Factories
|
||||||
keybind.deselect.name = Deselectează
|
keybind.deselect.name = Deselectează
|
||||||
keybind.pickupCargo.name = Ridică Încărcătura
|
keybind.pickupCargo.name = Ridică Încărcătura
|
||||||
keybind.dropCargo.name = Aruncă Încărcătura
|
keybind.dropCargo.name = Aruncă Încărcătura
|
||||||
@@ -2200,6 +2207,7 @@ lst.flushmessage = Display a message on the screen from the text buffer.\nWill w
|
|||||||
lst.cutscene = Manipulate the player camera.
|
lst.cutscene = Manipulate the player camera.
|
||||||
lst.setflag = Set a global flag that can be read by all processors.
|
lst.setflag = Set a global flag that can be read by all processors.
|
||||||
lst.getflag = Check if a global flag is set.
|
lst.getflag = Check if a global flag is set.
|
||||||
|
lst.setprop = Sets a property of a unit or building.
|
||||||
|
|
||||||
logic.nounitbuild = [red]Nu ai voie să construiești cu unitățile folosind procesoare.
|
logic.nounitbuild = [red]Nu ai voie să construiești cu unitățile folosind procesoare.
|
||||||
|
|
||||||
|
|||||||
@@ -149,11 +149,15 @@ mod.incompatiblemod = [red]Несовместимый
|
|||||||
mod.blacklisted = [red]Неподдерживаемый
|
mod.blacklisted = [red]Неподдерживаемый
|
||||||
mod.unmetdependencies = [red]Не найдены зависимости
|
mod.unmetdependencies = [red]Не найдены зависимости
|
||||||
mod.erroredcontent = [scarlet]Ошибки содержимого
|
mod.erroredcontent = [scarlet]Ошибки содержимого
|
||||||
|
mod.circulardependencies = [red]Цикличные зависимости
|
||||||
|
mod.incompletedependencies = [red]Недопустимые или отсутствующие зависимости
|
||||||
mod.requiresversion.details = Требуется версия игры: [accent]{0}[]\nВаша игра устарела. Для работы этого мода требуется более новая версия игры (возможно, альфа/бета-версия).
|
mod.requiresversion.details = Требуется версия игры: [accent]{0}[]\nВаша игра устарела. Для работы этого мода требуется более новая версия игры (возможно, альфа/бета-версия).
|
||||||
mod.outdatedv7.details = Этот мод несовместим с последней версией игры. Автор должен обновить его и добавить [accent]minGameVersion: 136[] в файл [accent]mod.json[].
|
mod.outdatedv7.details = Этот мод несовместим с последней версией игры. Автор должен обновить его и добавить [accent]minGameVersion: 136[] в файл [accent]mod.json[].
|
||||||
mod.blacklisted.details = Этот мод был вручную занесен в черный список из-за того, что он вызывал сбои или другие проблемы с текущей версией игры. Не используйте его.
|
mod.blacklisted.details = Этот мод был вручную занесен в черный список из-за того, что он вызывал сбои или другие проблемы с текущей версией игры. Не используйте его.
|
||||||
mod.missingdependencies.details = Для этого мода отсутствуют зависимости: {0}
|
mod.missingdependencies.details = Для этого мода отсутствуют зависимости: {0}
|
||||||
mod.erroredcontent.details = Этот мод вызвал ошибки при загрузке. Попросите автора мода исправить их.
|
mod.erroredcontent.details = Этот мод вызвал ошибки при загрузке. Попросите автора мода исправить их.
|
||||||
|
mod.circulardependencies.details = Этот мод имеет зависимости, которые зависят друг от друга.
|
||||||
|
mod.incompletedependencies.details = Этот мод не может быть загружен из-за недопустимых или отсутствующих зависимостей: {0}.
|
||||||
|
|
||||||
mod.requiresversion = Требуется версия игры: [red]{0}
|
mod.requiresversion = Требуется версия игры: [red]{0}
|
||||||
mod.errors = Ошибки были вызваны загружаемым содержимым.
|
mod.errors = Ошибки были вызваны загружаемым содержимым.
|
||||||
@@ -331,6 +335,7 @@ command.repair = Ремонтировать
|
|||||||
command.rebuild = Восстанавливать
|
command.rebuild = Восстанавливать
|
||||||
command.assist = Помогать игроку
|
command.assist = Помогать игроку
|
||||||
command.move = Двигаться
|
command.move = Двигаться
|
||||||
|
command.boost = Лететь
|
||||||
openlink = Открыть ссылку
|
openlink = Открыть ссылку
|
||||||
copylink = Скопировать ссылку
|
copylink = Скопировать ссылку
|
||||||
back = Назад
|
back = Назад
|
||||||
@@ -977,6 +982,8 @@ bullet.splashdamage = [stat]{0}[lightgray] урона в радиусе ~[stat]
|
|||||||
bullet.incendiary = [stat]зажигательный
|
bullet.incendiary = [stat]зажигательный
|
||||||
bullet.homing = [stat]самонаводящийся
|
bullet.homing = [stat]самонаводящийся
|
||||||
bullet.armorpierce = [stat]бронебойный
|
bullet.armorpierce = [stat]бронебойный
|
||||||
|
bullet.suppression = [stat]{0} sec[lightgray] repair suppression ~ [stat]{1}[lightgray] tiles
|
||||||
|
bullet.interval = [stat]{0}/sec[lightgray] interval bullets:
|
||||||
bullet.frags = [stat]{0}[lightgray]x осколочный(ых) снаряд(ов):
|
bullet.frags = [stat]{0}[lightgray]x осколочный(ых) снаряд(ов):
|
||||||
bullet.lightning = [stat]{0}[lightgray]x молнии ~ [stat]{1}[lightgray] урона
|
bullet.lightning = [stat]{0}[lightgray]x молнии ~ [stat]{1}[lightgray] урона
|
||||||
bullet.buildingdamage = [stat]{0}%[lightgray] урона по постройкам
|
bullet.buildingdamage = [stat]{0}%[lightgray] урона по постройкам
|
||||||
@@ -1090,8 +1097,8 @@ setting.bridgeopacity.name = Непрозрачность мостов
|
|||||||
setting.playerchat.name = Отображать облака чата над игроками
|
setting.playerchat.name = Отображать облака чата над игроками
|
||||||
setting.showweather.name = Отображать погоду
|
setting.showweather.name = Отображать погоду
|
||||||
setting.hidedisplays.name = Скрыть логические дисплеи
|
setting.hidedisplays.name = Скрыть логические дисплеи
|
||||||
public.confirm = Вы хотите, чтобы ваша игра стала публичной?\n[accent] Любой игрок сможет присоединиться к вашим играм.\n[lightgray]Позже, это можно будет изменить в Настройки->Игра->Общедоступность игры.
|
steam.friendsonly = Friends Only
|
||||||
public.confirm.really = Если вы хотите поиграть с друзьями, то используйте кнопку «[green]Пригласить друзей[]» вместо создания [scarlet]публичного сервера[]!\nВы уверены, что хотите сделать свою игру [scarlet]публичной[]?
|
steam.friendsonly.tooltip = Whether only Steam friends will be able to join your game.\nUnchecking this box will make your game public - anyone can join.
|
||||||
public.beta = Имейте в виду, что бета-версия игры не может делать игры публичными.
|
public.beta = Имейте в виду, что бета-версия игры не может делать игры публичными.
|
||||||
uiscale.reset = Масштаб пользовательского интерфейса был изменён.\nНажмите «ОК» для подтверждения этого масштаба.\n[scarlet]Возврат настроек и выход через[accent] {0}[] секунд…
|
uiscale.reset = Масштаб пользовательского интерфейса был изменён.\nНажмите «ОК» для подтверждения этого масштаба.\n[scarlet]Возврат настроек и выход через[accent] {0}[] секунд…
|
||||||
uiscale.cancel = Отменить & Выйти
|
uiscale.cancel = Отменить & Выйти
|
||||||
@@ -1143,8 +1150,8 @@ keybind.select.name = Выбор/выстрел
|
|||||||
keybind.diagonal_placement.name = Диагональное размещение
|
keybind.diagonal_placement.name = Диагональное размещение
|
||||||
keybind.pick.name = Выбрать блок
|
keybind.pick.name = Выбрать блок
|
||||||
keybind.break_block.name = Разрушить блок
|
keybind.break_block.name = Разрушить блок
|
||||||
keybind.select_all_units = Выбрать все единицы
|
keybind.select_all_units.name = Выбрать все единицы
|
||||||
keybind.select_all_unit_factories = Выбрать все заводы единиц
|
keybind.select_all_unit_factories.name = Выбрать все заводы единиц
|
||||||
keybind.deselect.name = Снять выделение
|
keybind.deselect.name = Снять выделение
|
||||||
keybind.pickupCargo.name = Взять груз
|
keybind.pickupCargo.name = Взять груз
|
||||||
keybind.dropCargo.name = Сбросить груз
|
keybind.dropCargo.name = Сбросить груз
|
||||||
@@ -1178,14 +1185,14 @@ mode.editor.name = Редактор
|
|||||||
mode.pvp.name = PvP
|
mode.pvp.name = PvP
|
||||||
mode.pvp.description = Сражайтесь против других игроков.\n[gray]Для игры требуется как минимум 2 ядра разного цвета на карте.
|
mode.pvp.description = Сражайтесь против других игроков.\n[gray]Для игры требуется как минимум 2 ядра разного цвета на карте.
|
||||||
mode.attack.name = Атака
|
mode.attack.name = Атака
|
||||||
mode.attack.description = Уничтожьте вражескую базу.\n[gray]Для игры требуется красное ядро на карте.
|
mode.attack.description = Уничтожьте вражескую базу.\n[gray]Для игры требуется вражеское ядро на карте.
|
||||||
mode.custom = Пользовательские правила
|
mode.custom = Пользовательские правила
|
||||||
rules.infiniteresources = Бесконечные ресурсы
|
rules.infiniteresources = Бесконечные ресурсы
|
||||||
rules.onlydepositcore = Разрешен перенос только в ядро
|
rules.onlydepositcore = Разрешен перенос только в ядро
|
||||||
rules.reactorexplosions = Взрывы реакторов
|
rules.reactorexplosions = Взрывы реакторов
|
||||||
rules.coreincinerates = Ядро сжигает избыток ресурсов
|
rules.coreincinerates = Ядро сжигает избыток ресурсов
|
||||||
rules.disableworldprocessors = Отключить мировые процессоры
|
rules.disableworldprocessors = Отключить мировые процессоры
|
||||||
rules.schematic = Схемы разрешены
|
rules.schematic = Разрешить схемы
|
||||||
rules.wavetimer = Интервал волн
|
rules.wavetimer = Интервал волн
|
||||||
rules.wavesending = Отправка волн
|
rules.wavesending = Отправка волн
|
||||||
rules.waves = Волны
|
rules.waves = Волны
|
||||||
@@ -1198,7 +1205,7 @@ rules.rtsminattackweight = Минимальный вес для атаки
|
|||||||
rules.cleanupdeadteams = Очистка строений побежденных команд (PvP)
|
rules.cleanupdeadteams = Очистка строений побежденных команд (PvP)
|
||||||
rules.corecapture = Захват ядра после уничтожения
|
rules.corecapture = Захват ядра после уничтожения
|
||||||
rules.polygoncoreprotection = Полигональная защита ядер
|
rules.polygoncoreprotection = Полигональная защита ядер
|
||||||
rules.placerangecheck = Проверка диапазона размещения
|
rules.placerangecheck = Запретить размещение турелей возле вражеских построек
|
||||||
rules.enemyCheat = Бесконечные ресурсы ИИ
|
rules.enemyCheat = Бесконечные ресурсы ИИ
|
||||||
rules.blockhealthmultiplier = Множитель прочности блоков
|
rules.blockhealthmultiplier = Множитель прочности блоков
|
||||||
rules.blockdamagemultiplier = Множитель урона блоков
|
rules.blockdamagemultiplier = Множитель урона блоков
|
||||||
@@ -1213,7 +1220,7 @@ rules.unitcap = Начальный лимит единиц
|
|||||||
rules.limitarea = Ограничить область карты
|
rules.limitarea = Ограничить область карты
|
||||||
rules.enemycorebuildradius = Радиус защиты враж. ядер:[lightgray] (блок.)
|
rules.enemycorebuildradius = Радиус защиты враж. ядер:[lightgray] (блок.)
|
||||||
rules.wavespacing = Интервал волн:[lightgray] (сек)
|
rules.wavespacing = Интервал волн:[lightgray] (сек)
|
||||||
rules.initialwavespacing = Начальное расстояние между волнами:[lightgray] (сек)
|
rules.initialwavespacing = Время до первой волны:[lightgray] (сек)
|
||||||
rules.buildcostmultiplier = Множитель затрат на строительство
|
rules.buildcostmultiplier = Множитель затрат на строительство
|
||||||
rules.buildspeedmultiplier = Множитель скорости строительства
|
rules.buildspeedmultiplier = Множитель скорости строительства
|
||||||
rules.deconstructrefundmultiplier = Множитель возврата ресурсов при разборке
|
rules.deconstructrefundmultiplier = Множитель возврата ресурсов при разборке
|
||||||
@@ -2175,7 +2182,7 @@ lst.getlink = Получает соединение процессора по и
|
|||||||
lst.control = Контролирует блок.
|
lst.control = Контролирует блок.
|
||||||
lst.radar = Обнаруживает единицы вокруг постройки с заданным радиусом.
|
lst.radar = Обнаруживает единицы вокруг постройки с заданным радиусом.
|
||||||
lst.sensor = Получает данные из постройки или единицы.
|
lst.sensor = Получает данные из постройки или единицы.
|
||||||
lst.set = Устанавливает переменную.
|
lst.set = Задаёт значение переменной.
|
||||||
lst.operation = Совершает операцию над 1-2 переменными.
|
lst.operation = Совершает операцию над 1-2 переменными.
|
||||||
lst.end = Переходит к началу стека операций.
|
lst.end = Переходит к началу стека операций.
|
||||||
lst.wait = Ждёт определённое количество секунд.
|
lst.wait = Ждёт определённое количество секунд.
|
||||||
@@ -2196,10 +2203,11 @@ lst.setrate = Устанавливает скорость выполнения
|
|||||||
lst.fetch = Ищет единицы, ядра, игроков или зданий по индексу.\nИндексы начинаются с 0 и заканчиваются возвращаемым числом.
|
lst.fetch = Ищет единицы, ядра, игроков или зданий по индексу.\nИндексы начинаются с 0 и заканчиваются возвращаемым числом.
|
||||||
lst.packcolor = Упаковывает компоненты RGBA [0, 1] в один номер для рисования или установки правил.
|
lst.packcolor = Упаковывает компоненты RGBA [0, 1] в один номер для рисования или установки правил.
|
||||||
lst.setrule = Устанавливает игровое правило.
|
lst.setrule = Устанавливает игровое правило.
|
||||||
lst.flushmessage = Отображает сообщение на экране из текстового буфера.\nБудет ожидать окончание предыдущего сообщения.
|
lst.flushmessage = Отображает сообщение из текстового буфера на экране игрока.\nБудет ожидать окончание предыдущего сообщения.
|
||||||
lst.cutscene = Управляет камерой игрока.
|
lst.cutscene = Управляет камерой игрока.
|
||||||
lst.setflag = Устанавливает глобальный флаг, который может быть прочитан всеми процессорами.
|
lst.setflag = Устанавливает глобальный флаг, который может быть прочитан всеми процессорами.
|
||||||
lst.getflag = Проверяет, установлен ли глобальный флаг.
|
lst.getflag = Проверяет, установлен ли глобальный флаг.
|
||||||
|
lst.setprop = Sets a property of a unit or building.
|
||||||
|
|
||||||
logic.nounitbuild = [red]Строительство с помощью процессоров здесь запрещено.
|
logic.nounitbuild = [red]Строительство с помощью процессоров здесь запрещено.
|
||||||
|
|
||||||
|
|||||||
@@ -149,11 +149,15 @@ mod.incompatiblemod = [red]Nije Podesan
|
|||||||
mod.blacklisted = [red]Nema Podršku
|
mod.blacklisted = [red]Nema Podršku
|
||||||
mod.unmetdependencies = [red]Nedostaju Zavisni Modovi
|
mod.unmetdependencies = [red]Nedostaju Zavisni Modovi
|
||||||
mod.erroredcontent = [scarlet]Greška u sadržaju
|
mod.erroredcontent = [scarlet]Greška u sadržaju
|
||||||
|
mod.circulardependencies = [red]Circular Dependencies
|
||||||
|
mod.incompletedependencies = [red]Incomplete Dependencies
|
||||||
mod.requiresversion.details = Zahteva verziju igre: [accent]{0}[]\nVaša igra je zastarela. Ovaj mod zahteva novu verziju igre (po mogućstvu alfa/beta izdanje) da bi funkcionisala.
|
mod.requiresversion.details = Zahteva verziju igre: [accent]{0}[]\nVaša igra je zastarela. Ovaj mod zahteva novu verziju igre (po mogućstvu alfa/beta izdanje) da bi funkcionisala.
|
||||||
mod.outdatedv7.details = Ovaj mod nije podesan sa novijom verzijom igre. Autor mora da ga ažurira, i da doda [accent]minGameVersion: 136[] u [accent]mod.json[] datoteku.
|
mod.outdatedv7.details = Ovaj mod nije podesan sa novijom verzijom igre. Autor mora da ga ažurira, i da doda [accent]minGameVersion: 136[] u [accent]mod.json[] datoteku.
|
||||||
mod.blacklisted.details = Ovaj mod nema podršku zato što stalno ispada ili prave razne greške u ovoj verziji igre. Ne koristi te ga.
|
mod.blacklisted.details = Ovaj mod nema podršku zato što stalno ispada ili prave razne greške u ovoj verziji igre. Ne koristi te ga.
|
||||||
mod.missingdependencies.details = Ovaj mod nema sledeće zavisne modove: {0}
|
mod.missingdependencies.details = Ovaj mod nema sledeće zavisne modove: {0}
|
||||||
mod.erroredcontent.details = Ova igra sadrži greške. Pitajte autora moda da ih popravi.
|
mod.erroredcontent.details = Ova igra sadrži greške. Pitajte autora moda da ih popravi.
|
||||||
|
mod.circulardependencies.details = This mod has dependencies that depends on each other.
|
||||||
|
mod.incompletedependencies.details = This mod is unable to be loaded due to invalid or missing dependencies: {0}.
|
||||||
mod.requiresversion = Requires game version: [red]{0}
|
mod.requiresversion = Requires game version: [red]{0}
|
||||||
mod.errors = Greške su nastale tokom učitavanja sadržaja.
|
mod.errors = Greške su nastale tokom učitavanja sadržaja.
|
||||||
mod.noerrorplay = [scarlet]Imate modove sa greškama.[] Onemogućite te modove, ili ispravite greške.
|
mod.noerrorplay = [scarlet]Imate modove sa greškama.[] Onemogućite te modove, ili ispravite greške.
|
||||||
@@ -331,6 +335,7 @@ command.repair = Popravljaj
|
|||||||
command.rebuild = Ponovna Gradnja
|
command.rebuild = Ponovna Gradnja
|
||||||
command.assist = Pomoć Igraču
|
command.assist = Pomoć Igraču
|
||||||
command.move = Kretanje
|
command.move = Kretanje
|
||||||
|
command.boost = Boost
|
||||||
openlink = Otvori Link
|
openlink = Otvori Link
|
||||||
copylink = Iskopiraj Link
|
copylink = Iskopiraj Link
|
||||||
back = Nazad
|
back = Nazad
|
||||||
@@ -978,6 +983,8 @@ bullet.splashdamage = [stat]{0}[lightgray] oblasna šteta ~[stat] {1}[lightgray]
|
|||||||
bullet.incendiary = [stat]zapaljiv
|
bullet.incendiary = [stat]zapaljiv
|
||||||
bullet.homing = [stat]samonavođenje
|
bullet.homing = [stat]samonavođenje
|
||||||
bullet.armorpierce = [stat]proboj oklopa
|
bullet.armorpierce = [stat]proboj oklopa
|
||||||
|
bullet.suppression = [stat]{0} sec[lightgray] repair suppression ~ [stat]{1}[lightgray] tiles
|
||||||
|
bullet.interval = [stat]{0}/sec[lightgray] interval bullets:
|
||||||
bullet.frags = [stat]{0}[lightgray]x šrapnela:
|
bullet.frags = [stat]{0}[lightgray]x šrapnela:
|
||||||
bullet.lightning = [stat]{0}[lightgray]x munja ~ [stat]{1}[lightgray] štete
|
bullet.lightning = [stat]{0}[lightgray]x munja ~ [stat]{1}[lightgray] štete
|
||||||
bullet.buildingdamage = [stat]{0}%[lightgray] šteta za strukture
|
bullet.buildingdamage = [stat]{0}%[lightgray] šteta za strukture
|
||||||
@@ -1091,8 +1098,8 @@ setting.bridgeopacity.name = Prozirnost Mostova
|
|||||||
setting.playerchat.name = Prikazuj Čet Mehure Igrača
|
setting.playerchat.name = Prikazuj Čet Mehure Igrača
|
||||||
setting.showweather.name = Prikazuj Grafiku Vremena
|
setting.showweather.name = Prikazuj Grafiku Vremena
|
||||||
setting.hidedisplays.name = Sakrij Logičke Displeje
|
setting.hidedisplays.name = Sakrij Logičke Displeje
|
||||||
public.confirm = Da li ste sigurni da želite da vam igra bude javna?\n[accent]Svako će moći se pridruži vašoj igri.\n[lightgray]Ovo se može posle promeniti u Podešavanja->Igra->Vidljivost Javne Igre.
|
steam.friendsonly = Friends Only
|
||||||
public.confirm.really = Ako hoćete da igrate sa prijateljima, koristite [green]Pozovi Prijatelje[] umesto [scarlet]Javnog servera[]!\nDa li ste sigurni da želite da vam igra bude [scarlet]javna[]?
|
steam.friendsonly.tooltip = Whether only Steam friends will be able to join your game.\nUnchecking this box will make your game public - anyone can join.
|
||||||
public.beta = Note that beta versions of the game cannot make public lobbies.
|
public.beta = Note that beta versions of the game cannot make public lobbies.
|
||||||
uiscale.reset = UI skala se promenija.\nPritisnite "OK" da porvdite ovu skali.\n[scarlet]Vraćanje i izlazak za[accent] {0}[] sekundi...
|
uiscale.reset = UI skala se promenija.\nPritisnite "OK" da porvdite ovu skali.\n[scarlet]Vraćanje i izlazak za[accent] {0}[] sekundi...
|
||||||
uiscale.cancel = Obustavi i Izađi
|
uiscale.cancel = Obustavi i Izađi
|
||||||
@@ -1144,8 +1151,8 @@ keybind.select.name = Izaberi/Pucaj
|
|||||||
keybind.diagonal_placement.name = Diagonalo Postavljanje
|
keybind.diagonal_placement.name = Diagonalo Postavljanje
|
||||||
keybind.pick.name = Izaberi Blok
|
keybind.pick.name = Izaberi Blok
|
||||||
keybind.break_block.name = Razori Blok
|
keybind.break_block.name = Razori Blok
|
||||||
keybind.select_all_units = Izaberi Sve Jedinice
|
keybind.select_all_units.name = Izaberi Sve Jedinice
|
||||||
keybind.select_all_unit_factories = Izaberi Sve Fabrike Jedinica
|
keybind.select_all_unit_factories.name = Izaberi Sve Fabrike Jedinica
|
||||||
keybind.deselect.name = Deselect
|
keybind.deselect.name = Deselect
|
||||||
keybind.pickupCargo.name = Uzmi Tovar
|
keybind.pickupCargo.name = Uzmi Tovar
|
||||||
keybind.dropCargo.name = Spusti Tovar
|
keybind.dropCargo.name = Spusti Tovar
|
||||||
@@ -2203,6 +2210,7 @@ lst.flushmessage = Display a message on the screen from the text buffer.\nWill w
|
|||||||
lst.cutscene = Manipulate the player camera.
|
lst.cutscene = Manipulate the player camera.
|
||||||
lst.setflag = Set a global flag that can be read by all processors.
|
lst.setflag = Set a global flag that can be read by all processors.
|
||||||
lst.getflag = Check if a global flag is set.
|
lst.getflag = Check if a global flag is set.
|
||||||
|
lst.setprop = Sets a property of a unit or building.
|
||||||
|
|
||||||
logic.nounitbuild = [red]Unit building logic is not allowed here.
|
logic.nounitbuild = [red]Unit building logic is not allowed here.
|
||||||
|
|
||||||
|
|||||||
@@ -146,11 +146,15 @@ mod.incompatiblemod = [red]Incompatible
|
|||||||
mod.blacklisted = [red]Unsupported
|
mod.blacklisted = [red]Unsupported
|
||||||
mod.unmetdependencies = [red]Unmet Dependencies
|
mod.unmetdependencies = [red]Unmet Dependencies
|
||||||
mod.erroredcontent = [scarlet]Innehålls Fel
|
mod.erroredcontent = [scarlet]Innehålls Fel
|
||||||
|
mod.circulardependencies = [red]Circular Dependencies
|
||||||
|
mod.incompletedependencies = [red]Incomplete Dependencies
|
||||||
mod.requiresversion.details = Requires game version: [accent]{0}[]\nYour game is outdated. This mod requires a newer version of the game (possibly a beta/alpha release) to function.
|
mod.requiresversion.details = Requires game version: [accent]{0}[]\nYour game is outdated. This mod requires a newer version of the game (possibly a beta/alpha release) to function.
|
||||||
mod.outdatedv7.details = This mod is incompatible with the latest version of the game. The author must update it, and add [accent]minGameVersion: 136[] to its [accent]mod.json[] file.
|
mod.outdatedv7.details = This mod is incompatible with the latest version of the game. The author must update it, and add [accent]minGameVersion: 136[] to its [accent]mod.json[] file.
|
||||||
mod.blacklisted.details = This mod has been manually blacklisted for causing crashes or other issues with this version of the game. Do not use it.
|
mod.blacklisted.details = This mod has been manually blacklisted for causing crashes or other issues with this version of the game. Do not use it.
|
||||||
mod.missingdependencies.details = This mod is missing dependencies: {0}
|
mod.missingdependencies.details = This mod is missing dependencies: {0}
|
||||||
mod.erroredcontent.details = This game caused errors when loading. Ask the mod author to fix them.
|
mod.erroredcontent.details = This game caused errors when loading. Ask the mod author to fix them.
|
||||||
|
mod.circulardependencies.details = This mod has dependencies that depends on each other.
|
||||||
|
mod.incompletedependencies.details = This mod is unable to be loaded due to invalid or missing dependencies: {0}.
|
||||||
mod.requiresversion = Requires game version: [red]{0}
|
mod.requiresversion = Requires game version: [red]{0}
|
||||||
mod.errors = Fel har inträffat under laddning av innehåll.
|
mod.errors = Fel har inträffat under laddning av innehåll.
|
||||||
mod.noerrorplay = [scarlet]Du har moddar med fel.[] Stäng antingen av de drabbade moddarna eller fixa felen innan du spelar.
|
mod.noerrorplay = [scarlet]Du har moddar med fel.[] Stäng antingen av de drabbade moddarna eller fixa felen innan du spelar.
|
||||||
@@ -327,6 +331,7 @@ command.repair = Repair
|
|||||||
command.rebuild = Rebuild
|
command.rebuild = Rebuild
|
||||||
command.assist = Assist Player
|
command.assist = Assist Player
|
||||||
command.move = Move
|
command.move = Move
|
||||||
|
command.boost = Boost
|
||||||
openlink = Öppna Länk
|
openlink = Öppna Länk
|
||||||
copylink = Kopiera Länk
|
copylink = Kopiera Länk
|
||||||
back = Tillbaka
|
back = Tillbaka
|
||||||
@@ -964,6 +969,8 @@ bullet.splashdamage = [stat]{0}[lightgray] area dmg ~[stat] {1}[lightgray] tiles
|
|||||||
bullet.incendiary = [stat]incendiary
|
bullet.incendiary = [stat]incendiary
|
||||||
bullet.homing = [stat]homing
|
bullet.homing = [stat]homing
|
||||||
bullet.armorpierce = [stat]armor piercing
|
bullet.armorpierce = [stat]armor piercing
|
||||||
|
bullet.suppression = [stat]{0} sec[lightgray] repair suppression ~ [stat]{1}[lightgray] tiles
|
||||||
|
bullet.interval = [stat]{0}/sec[lightgray] interval bullets:
|
||||||
bullet.frags = [stat]{0}[lightgray]x frag bullets:
|
bullet.frags = [stat]{0}[lightgray]x frag bullets:
|
||||||
bullet.lightning = [stat]{0}[lightgray]x lightning ~ [stat]{1}[lightgray] damage
|
bullet.lightning = [stat]{0}[lightgray]x lightning ~ [stat]{1}[lightgray] damage
|
||||||
bullet.buildingdamage = [stat]{0}%[lightgray] building damage
|
bullet.buildingdamage = [stat]{0}%[lightgray] building damage
|
||||||
@@ -1077,8 +1084,8 @@ setting.bridgeopacity.name = Bridge Opacity
|
|||||||
setting.playerchat.name = Visa
|
setting.playerchat.name = Visa
|
||||||
setting.showweather.name = Show Weather Graphics
|
setting.showweather.name = Show Weather Graphics
|
||||||
setting.hidedisplays.name = Hide Logic Displays
|
setting.hidedisplays.name = Hide Logic Displays
|
||||||
public.confirm = Do you want to make your game public?\n[accent]Anyone will be able to join your games.\n[lightgray]This can be changed later in Settings->Game->Public Game Visibility.
|
steam.friendsonly = Friends Only
|
||||||
public.confirm.really = If you want to play with friends, use [green]Invite Friend[] instead of a [scarlet]Public server[]!\nAre you sure you want to make your game [scarlet]public[]?
|
steam.friendsonly.tooltip = Whether only Steam friends will be able to join your game.\nUnchecking this box will make your game public - anyone can join.
|
||||||
public.beta = Note that beta versions of the game cannot make public lobbies.
|
public.beta = Note that beta versions of the game cannot make public lobbies.
|
||||||
uiscale.reset = UI-skalan har ändrats.\nTryck "OK" för att använda den här skalan.\n[scarlet]Avslutar och återställer om[accent] {0}[] sekunder...
|
uiscale.reset = UI-skalan har ändrats.\nTryck "OK" för att använda den här skalan.\n[scarlet]Avslutar och återställer om[accent] {0}[] sekunder...
|
||||||
uiscale.cancel = Avbryt och Avsluta
|
uiscale.cancel = Avbryt och Avsluta
|
||||||
@@ -1130,8 +1137,8 @@ keybind.select.name = Select/Shoot
|
|||||||
keybind.diagonal_placement.name = Diagonal Placement
|
keybind.diagonal_placement.name = Diagonal Placement
|
||||||
keybind.pick.name = Pick Block
|
keybind.pick.name = Pick Block
|
||||||
keybind.break_block.name = Break Block
|
keybind.break_block.name = Break Block
|
||||||
keybind.select_all_units = Select All Units
|
keybind.select_all_units.name = Select All Units
|
||||||
keybind.select_all_unit_factories = Select All Unit Factories
|
keybind.select_all_unit_factories.name = Select All Unit Factories
|
||||||
keybind.deselect.name = Deselect
|
keybind.deselect.name = Deselect
|
||||||
keybind.pickupCargo.name = Pickup Cargo
|
keybind.pickupCargo.name = Pickup Cargo
|
||||||
keybind.dropCargo.name = Drop Cargo
|
keybind.dropCargo.name = Drop Cargo
|
||||||
@@ -2182,6 +2189,7 @@ lst.flushmessage = Display a message on the screen from the text buffer.\nWill w
|
|||||||
lst.cutscene = Manipulate the player camera.
|
lst.cutscene = Manipulate the player camera.
|
||||||
lst.setflag = Set a global flag that can be read by all processors.
|
lst.setflag = Set a global flag that can be read by all processors.
|
||||||
lst.getflag = Check if a global flag is set.
|
lst.getflag = Check if a global flag is set.
|
||||||
|
lst.setprop = Sets a property of a unit or building.
|
||||||
logic.nounitbuild = [red]Unit building logic is not allowed here.
|
logic.nounitbuild = [red]Unit building logic is not allowed here.
|
||||||
lenum.type = Type of building/unit.\ne.g. for any router, this will return [accent]@router[].\nNot a string.
|
lenum.type = Type of building/unit.\ne.g. for any router, this will return [accent]@router[].\nNot a string.
|
||||||
lenum.shoot = Shoot at a position.
|
lenum.shoot = Shoot at a position.
|
||||||
|
|||||||
@@ -149,11 +149,15 @@ mod.incompatiblemod = [red]Incompatible
|
|||||||
mod.blacklisted = [red]Unsupported
|
mod.blacklisted = [red]Unsupported
|
||||||
mod.unmetdependencies = [red]Unmet Dependencies
|
mod.unmetdependencies = [red]Unmet Dependencies
|
||||||
mod.erroredcontent = [scarlet]เนื้อหาผิดพลาด
|
mod.erroredcontent = [scarlet]เนื้อหาผิดพลาด
|
||||||
|
mod.circulardependencies = [red]Circular Dependencies
|
||||||
|
mod.incompletedependencies = [red]Incomplete Dependencies
|
||||||
mod.requiresversion.details = Requires game version: [accent]{0}[]\nYour game is outdated. This mod requires a newer version of the game (possibly a beta/alpha release) to function.
|
mod.requiresversion.details = Requires game version: [accent]{0}[]\nYour game is outdated. This mod requires a newer version of the game (possibly a beta/alpha release) to function.
|
||||||
mod.outdatedv7.details = This mod is incompatible with the latest version of the game. The author must update it, and add [accent]minGameVersion: 136[] to its [accent]mod.json[] file.
|
mod.outdatedv7.details = This mod is incompatible with the latest version of the game. The author must update it, and add [accent]minGameVersion: 136[] to its [accent]mod.json[] file.
|
||||||
mod.blacklisted.details = This mod has been manually blacklisted for causing crashes or other issues with this version of the game. Do not use it.
|
mod.blacklisted.details = This mod has been manually blacklisted for causing crashes or other issues with this version of the game. Do not use it.
|
||||||
mod.missingdependencies.details = This mod is missing dependencies: {0}
|
mod.missingdependencies.details = This mod is missing dependencies: {0}
|
||||||
mod.erroredcontent.details = This game caused errors when loading. Ask the mod author to fix them.
|
mod.erroredcontent.details = This game caused errors when loading. Ask the mod author to fix them.
|
||||||
|
mod.circulardependencies.details = This mod has dependencies that depends on each other.
|
||||||
|
mod.incompletedependencies.details = This mod is unable to be loaded due to invalid or missing dependencies: {0}.
|
||||||
mod.requiresversion = Requires game version: [red]{0}
|
mod.requiresversion = Requires game version: [red]{0}
|
||||||
mod.errors = มีข้อผิดพลาดเกิดขึ้นระหว่างโหลดเนื้อหา
|
mod.errors = มีข้อผิดพลาดเกิดขึ้นระหว่างโหลดเนื้อหา
|
||||||
mod.noerrorplay = [scarlet]คุณมีม็อดที่มีข้อผิดพลาด[] กรุณาปิดม็อดนั้นๆ หรือแก้ไขข้อผิดพลาดก่อนที่จะเล่น
|
mod.noerrorplay = [scarlet]คุณมีม็อดที่มีข้อผิดพลาด[] กรุณาปิดม็อดนั้นๆ หรือแก้ไขข้อผิดพลาดก่อนที่จะเล่น
|
||||||
@@ -331,6 +335,7 @@ command.repair = Repair
|
|||||||
command.rebuild = Rebuild
|
command.rebuild = Rebuild
|
||||||
command.assist = Assist Player
|
command.assist = Assist Player
|
||||||
command.move = Move
|
command.move = Move
|
||||||
|
command.boost = Boost
|
||||||
openlink = เปิดลิ้งค์
|
openlink = เปิดลิ้งค์
|
||||||
copylink = คัดลอกลิ้งค์
|
copylink = คัดลอกลิ้งค์
|
||||||
back = กลับ
|
back = กลับ
|
||||||
@@ -977,6 +982,8 @@ bullet.splashdamage = [stat]{0}[lightgray] ดาเมจกระจาย ~[s
|
|||||||
bullet.incendiary = [stat]ติดไฟ
|
bullet.incendiary = [stat]ติดไฟ
|
||||||
bullet.homing = [stat]ติดตามตัว
|
bullet.homing = [stat]ติดตามตัว
|
||||||
bullet.armorpierce = [stat]เจาะเกราะ
|
bullet.armorpierce = [stat]เจาะเกราะ
|
||||||
|
bullet.suppression = [stat]{0} sec[lightgray] repair suppression ~ [stat]{1}[lightgray] tiles
|
||||||
|
bullet.interval = [stat]{0}/sec[lightgray] interval bullets:
|
||||||
bullet.frags = [stat]{0}[lightgray]x กระจาย กระสุน:
|
bullet.frags = [stat]{0}[lightgray]x กระจาย กระสุน:
|
||||||
bullet.lightning = [stat]{0}[lightgray]x สายฟ้า ~ [stat]{1}[lightgray] ดาเมจ
|
bullet.lightning = [stat]{0}[lightgray]x สายฟ้า ~ [stat]{1}[lightgray] ดาเมจ
|
||||||
bullet.buildingdamage = [lightgray]ดาเมจต่อสิ่งก่อสร้าง [stat]{0}%[lightgray]
|
bullet.buildingdamage = [lightgray]ดาเมจต่อสิ่งก่อสร้าง [stat]{0}%[lightgray]
|
||||||
@@ -1090,8 +1097,8 @@ setting.bridgeopacity.name = ความโปร่งแสงของสะ
|
|||||||
setting.playerchat.name = แสดงบับเบิ้ลแชทของผู้เล่น
|
setting.playerchat.name = แสดงบับเบิ้ลแชทของผู้เล่น
|
||||||
setting.showweather.name = แสดงแกรฟฟิกสภาพอากาศ
|
setting.showweather.name = แสดงแกรฟฟิกสภาพอากาศ
|
||||||
setting.hidedisplays.name = ซ่อนหน้าจอลอจิก
|
setting.hidedisplays.name = ซ่อนหน้าจอลอจิก
|
||||||
public.confirm = คุณต้องการให้เกมของคุณเปิดเป็นสาธารณะหรือไม่?\n[accent]ทุกคนจะสามารถเข้าร่วมเกมของคุณได้\n[lightgray]คุณสามารถเปลี่ยนการตั้งค่านี้ได้ที่ ตั้งค่า->เกม->การมองเห็นเซิร์ฟเวอร์สาธารณะ
|
steam.friendsonly = Friends Only
|
||||||
public.confirm.really = หากคุณอยากเล่นกับเล่นกับเพื่อน ใช้[green]ชวนเพื่อน[]ดีกว่า แทนที่จะใช้[scarlet]เซิร์ฟเวอร์สาธารณะ[]!\nคุณแน่ใจนะว่าจะเปลี่ยนเกมคุณเป็น[scarlet]สาธารณะ[]?
|
steam.friendsonly.tooltip = Whether only Steam friends will be able to join your game.\nUnchecking this box will make your game public - anyone can join.
|
||||||
public.beta = เกมเวอร์ชั่นเบต้าไม่สามารถเปิดเซิร์ฟเวอร์สาธารณะได้
|
public.beta = เกมเวอร์ชั่นเบต้าไม่สามารถเปิดเซิร์ฟเวอร์สาธารณะได้
|
||||||
uiscale.reset = อัตราขนาดของ UI ได้มีการเปลี่ยนแปลง\nกด "โอเค" เพื่อยืนยันขนาด UI นี้\n[scarlet]จะเปลี่ยนกลับไปเป็นขนาดเดิมและออกในอีก[accent] {0}[] วินาที...
|
uiscale.reset = อัตราขนาดของ UI ได้มีการเปลี่ยนแปลง\nกด "โอเค" เพื่อยืนยันขนาด UI นี้\n[scarlet]จะเปลี่ยนกลับไปเป็นขนาดเดิมและออกในอีก[accent] {0}[] วินาที...
|
||||||
uiscale.cancel = ยกเลิกและออก
|
uiscale.cancel = ยกเลิกและออก
|
||||||
@@ -1143,8 +1150,8 @@ keybind.select.name = เลือก/ยิง
|
|||||||
keybind.diagonal_placement.name = วางเป็นแนวทแยง
|
keybind.diagonal_placement.name = วางเป็นแนวทแยง
|
||||||
keybind.pick.name = เลือกบล็อก
|
keybind.pick.name = เลือกบล็อก
|
||||||
keybind.break_block.name = ทุบบล็อก
|
keybind.break_block.name = ทุบบล็อก
|
||||||
keybind.select_all_units = Select All Units
|
keybind.select_all_units.name = Select All Units
|
||||||
keybind.select_all_unit_factories = Select All Unit Factories
|
keybind.select_all_unit_factories.name = Select All Unit Factories
|
||||||
keybind.deselect.name = ยกเลิกการเลือก
|
keybind.deselect.name = ยกเลิกการเลือก
|
||||||
keybind.pickupCargo.name = ยกสิ่งบรรทุกขึ้น
|
keybind.pickupCargo.name = ยกสิ่งบรรทุกขึ้น
|
||||||
keybind.dropCargo.name = วางสิ่งบรรทุกลง
|
keybind.dropCargo.name = วางสิ่งบรรทุกลง
|
||||||
@@ -2201,6 +2208,7 @@ lst.flushmessage = แสดงข้อความบนหน้าจอจ
|
|||||||
lst.cutscene = ควบคุมมุมกล้องของผู้เล่น
|
lst.cutscene = ควบคุมมุมกล้องของผู้เล่น
|
||||||
lst.setflag = เซ็ตธงทั่วโลกที่ตัวประมวลผลทุกตัวสามารถอ่านค่าได้
|
lst.setflag = เซ็ตธงทั่วโลกที่ตัวประมวลผลทุกตัวสามารถอ่านค่าได้
|
||||||
lst.getflag = เช็กว่าธงทั่วโลกนั้นเซ็ตอยู่รึเปล่า
|
lst.getflag = เช็กว่าธงทั่วโลกนั้นเซ็ตอยู่รึเปล่า
|
||||||
|
lst.setprop = Sets a property of a unit or building.
|
||||||
|
|
||||||
logic.nounitbuild = [red]ไม่อนุญาตให้ใช้ลอจิกควบคุมให้ยูนิตสร้างที่นี่
|
logic.nounitbuild = [red]ไม่อนุญาตให้ใช้ลอจิกควบคุมให้ยูนิตสร้างที่นี่
|
||||||
|
|
||||||
|
|||||||
@@ -146,11 +146,15 @@ mod.incompatiblemod = [red]Incompatible
|
|||||||
mod.blacklisted = [red]Unsupported
|
mod.blacklisted = [red]Unsupported
|
||||||
mod.unmetdependencies = [red]Unmet Dependencies
|
mod.unmetdependencies = [red]Unmet Dependencies
|
||||||
mod.erroredcontent = [scarlet]Content Errors
|
mod.erroredcontent = [scarlet]Content Errors
|
||||||
|
mod.circulardependencies = [red]Circular Dependencies
|
||||||
|
mod.incompletedependencies = [red]Incomplete Dependencies
|
||||||
mod.requiresversion.details = Requires game version: [accent]{0}[]\nYour game is outdated. This mod requires a newer version of the game (possibly a beta/alpha release) to function.
|
mod.requiresversion.details = Requires game version: [accent]{0}[]\nYour game is outdated. This mod requires a newer version of the game (possibly a beta/alpha release) to function.
|
||||||
mod.outdatedv7.details = This mod is incompatible with the latest version of the game. The author must update it, and add [accent]minGameVersion: 136[] to its [accent]mod.json[] file.
|
mod.outdatedv7.details = This mod is incompatible with the latest version of the game. The author must update it, and add [accent]minGameVersion: 136[] to its [accent]mod.json[] file.
|
||||||
mod.blacklisted.details = This mod has been manually blacklisted for causing crashes or other issues with this version of the game. Do not use it.
|
mod.blacklisted.details = This mod has been manually blacklisted for causing crashes or other issues with this version of the game. Do not use it.
|
||||||
mod.missingdependencies.details = This mod is missing dependencies: {0}
|
mod.missingdependencies.details = This mod is missing dependencies: {0}
|
||||||
mod.erroredcontent.details = This game caused errors when loading. Ask the mod author to fix them.
|
mod.erroredcontent.details = This game caused errors when loading. Ask the mod author to fix them.
|
||||||
|
mod.circulardependencies.details = This mod has dependencies that depends on each other.
|
||||||
|
mod.incompletedependencies.details = This mod is unable to be loaded due to invalid or missing dependencies: {0}.
|
||||||
mod.requiresversion = Requires game version: [red]{0}
|
mod.requiresversion = Requires game version: [red]{0}
|
||||||
mod.errors = Errors have occurred loading content.
|
mod.errors = Errors have occurred loading content.
|
||||||
mod.noerrorplay = [scarlet]You have mods with errors.[] Either disable the affected mods or fix the errors before playing.
|
mod.noerrorplay = [scarlet]You have mods with errors.[] Either disable the affected mods or fix the errors before playing.
|
||||||
@@ -327,6 +331,7 @@ command.repair = Repair
|
|||||||
command.rebuild = Rebuild
|
command.rebuild = Rebuild
|
||||||
command.assist = Assist Player
|
command.assist = Assist Player
|
||||||
command.move = Move
|
command.move = Move
|
||||||
|
command.boost = Boost
|
||||||
openlink = Linki ac
|
openlink = Linki ac
|
||||||
copylink = Linki kopyala
|
copylink = Linki kopyala
|
||||||
back = Geri don
|
back = Geri don
|
||||||
@@ -964,6 +969,8 @@ bullet.splashdamage = [stat]{0}[lightgray] area dmg ~[stat] {1}[lightgray] tiles
|
|||||||
bullet.incendiary = [stat]incendiary
|
bullet.incendiary = [stat]incendiary
|
||||||
bullet.homing = [stat]homing
|
bullet.homing = [stat]homing
|
||||||
bullet.armorpierce = [stat]armor piercing
|
bullet.armorpierce = [stat]armor piercing
|
||||||
|
bullet.suppression = [stat]{0} sec[lightgray] repair suppression ~ [stat]{1}[lightgray] tiles
|
||||||
|
bullet.interval = [stat]{0}/sec[lightgray] interval bullets:
|
||||||
bullet.frags = [stat]{0}[lightgray]x frag bullets:
|
bullet.frags = [stat]{0}[lightgray]x frag bullets:
|
||||||
bullet.lightning = [stat]{0}[lightgray]x lightning ~ [stat]{1}[lightgray] damage
|
bullet.lightning = [stat]{0}[lightgray]x lightning ~ [stat]{1}[lightgray] damage
|
||||||
bullet.buildingdamage = [stat]{0}%[lightgray] building damage
|
bullet.buildingdamage = [stat]{0}%[lightgray] building damage
|
||||||
@@ -1077,8 +1084,8 @@ setting.bridgeopacity.name = Bridge Opacity
|
|||||||
setting.playerchat.name = Display In-Game Chat
|
setting.playerchat.name = Display In-Game Chat
|
||||||
setting.showweather.name = Show Weather Graphics
|
setting.showweather.name = Show Weather Graphics
|
||||||
setting.hidedisplays.name = Hide Logic Displays
|
setting.hidedisplays.name = Hide Logic Displays
|
||||||
public.confirm = Do you want to make your game public?\n[accent]Anyone will be able to join your games.\n[lightgray]This can be changed later in Settings->Game->Public Game Visibility.
|
steam.friendsonly = Friends Only
|
||||||
public.confirm.really = If you want to play with friends, use [green]Invite Friend[] instead of a [scarlet]Public server[]!\nAre you sure you want to make your game [scarlet]public[]?
|
steam.friendsonly.tooltip = Whether only Steam friends will be able to join your game.\nUnchecking this box will make your game public - anyone can join.
|
||||||
public.beta = Note that beta versions of the game cannot make public lobbies.
|
public.beta = Note that beta versions of the game cannot make public lobbies.
|
||||||
uiscale.reset = UI scale has been changed.\nPress "OK" to confirm this scale.\n[scarlet]Reverting and exiting in[accent] {0}[] settings...
|
uiscale.reset = UI scale has been changed.\nPress "OK" to confirm this scale.\n[scarlet]Reverting and exiting in[accent] {0}[] settings...
|
||||||
uiscale.cancel = Cancel & Exit
|
uiscale.cancel = Cancel & Exit
|
||||||
@@ -1130,8 +1137,8 @@ keybind.select.name = Sec/silahi sik
|
|||||||
keybind.diagonal_placement.name = Diagonal Placement
|
keybind.diagonal_placement.name = Diagonal Placement
|
||||||
keybind.pick.name = Pick Block
|
keybind.pick.name = Pick Block
|
||||||
keybind.break_block.name = Break Block
|
keybind.break_block.name = Break Block
|
||||||
keybind.select_all_units = Select All Units
|
keybind.select_all_units.name = Select All Units
|
||||||
keybind.select_all_unit_factories = Select All Unit Factories
|
keybind.select_all_unit_factories.name = Select All Unit Factories
|
||||||
keybind.deselect.name = Eldeki yapiyi birak
|
keybind.deselect.name = Eldeki yapiyi birak
|
||||||
keybind.pickupCargo.name = Pickup Cargo
|
keybind.pickupCargo.name = Pickup Cargo
|
||||||
keybind.dropCargo.name = Drop Cargo
|
keybind.dropCargo.name = Drop Cargo
|
||||||
@@ -2182,6 +2189,7 @@ lst.flushmessage = Display a message on the screen from the text buffer.\nWill w
|
|||||||
lst.cutscene = Manipulate the player camera.
|
lst.cutscene = Manipulate the player camera.
|
||||||
lst.setflag = Set a global flag that can be read by all processors.
|
lst.setflag = Set a global flag that can be read by all processors.
|
||||||
lst.getflag = Check if a global flag is set.
|
lst.getflag = Check if a global flag is set.
|
||||||
|
lst.setprop = Sets a property of a unit or building.
|
||||||
logic.nounitbuild = [red]Unit building logic is not allowed here.
|
logic.nounitbuild = [red]Unit building logic is not allowed here.
|
||||||
lenum.type = Type of building/unit.\ne.g. for any router, this will return [accent]@router[].\nNot a string.
|
lenum.type = Type of building/unit.\ne.g. for any router, this will return [accent]@router[].\nNot a string.
|
||||||
lenum.shoot = Shoot at a position.
|
lenum.shoot = Shoot at a position.
|
||||||
|
|||||||
@@ -149,11 +149,15 @@ mod.incompatiblemod = [red]Sürüm Uyuşmazlığı
|
|||||||
mod.blacklisted = [red]Desteklenmeyen Sürüm
|
mod.blacklisted = [red]Desteklenmeyen Sürüm
|
||||||
mod.unmetdependencies = [red]Uyuşmayan Modlar.
|
mod.unmetdependencies = [red]Uyuşmayan Modlar.
|
||||||
mod.erroredcontent = [scarlet]İçerik hatası.
|
mod.erroredcontent = [scarlet]İçerik hatası.
|
||||||
|
mod.circulardependencies = [red]Circular Dependencies
|
||||||
|
mod.incompletedependencies = [red]Incomplete Dependencies
|
||||||
mod.requiresversion.details = [accent]{0}[] oyun sürümü gerekiyor.\nSürümün eski. Bu mod, çalışmak için oyunun daha yeni bir sürümünü gerektiriyor (büyük ihtimal alpha/beta).
|
mod.requiresversion.details = [accent]{0}[] oyun sürümü gerekiyor.\nSürümün eski. Bu mod, çalışmak için oyunun daha yeni bir sürümünü gerektiriyor (büyük ihtimal alpha/beta).
|
||||||
mod.outdatedv7.details = Bu mod, oyunun en son sürümüyle uyumsuz. Modun yapmıcısının [accent]mod.json[] dosyasına, [accent]minGameVersion: 136[] eklemesi gerekiyor.
|
mod.outdatedv7.details = Bu mod, oyunun en son sürümüyle uyumsuz. Modun yapmıcısının [accent]mod.json[] dosyasına, [accent]minGameVersion: 136[] eklemesi gerekiyor.
|
||||||
mod.blacklisted.details = Bu mod, oyunun bu sürümüyle hata verdiğinden veya başka sorunlar ötürü kara listeye alınmıştır. [#ff]KULLANMAYINIZ!
|
mod.blacklisted.details = Bu mod, oyunun bu sürümüyle hata verdiğinden veya başka sorunlar ötürü kara listeye alınmıştır. [#ff]KULLANMAYINIZ!
|
||||||
mod.missingdependencies.details = Bu Mod, şu ek modları gerektiriyor: {0}
|
mod.missingdependencies.details = Bu Mod, şu ek modları gerektiriyor: {0}
|
||||||
mod.erroredcontent.details = Bu mod yüklenirken hata veriyor, yapımcıdan hataları düzeltmesini isteyin.
|
mod.erroredcontent.details = Bu mod yüklenirken hata veriyor, yapımcıdan hataları düzeltmesini isteyin.
|
||||||
|
mod.circulardependencies.details = This mod has dependencies that depends on each other.
|
||||||
|
mod.incompletedependencies.details = This mod is unable to be loaded due to invalid or missing dependencies: {0}.
|
||||||
mod.requiresversion = Requires game version: [red]{0}
|
mod.requiresversion = Requires game version: [red]{0}
|
||||||
mod.errors = İçerik yüklenirken bir hata oluştu.
|
mod.errors = İçerik yüklenirken bir hata oluştu.
|
||||||
mod.noerrorplay = [scarlet]Hatalı modlarınız var.[] Oynamadan önce bu modları devre dışı bırakın veya dosyadaki hataları düzeltin.
|
mod.noerrorplay = [scarlet]Hatalı modlarınız var.[] Oynamadan önce bu modları devre dışı bırakın veya dosyadaki hataları düzeltin.
|
||||||
@@ -331,6 +335,7 @@ command.repair = Tamir Et
|
|||||||
command.rebuild = Yeniden İnşaa Et
|
command.rebuild = Yeniden İnşaa Et
|
||||||
command.assist = Oyuncuya Yardım Et
|
command.assist = Oyuncuya Yardım Et
|
||||||
command.move = Hareket Et
|
command.move = Hareket Et
|
||||||
|
command.boost = Boost
|
||||||
openlink = Bağlantıyı Aç
|
openlink = Bağlantıyı Aç
|
||||||
copylink = Bağlantıyı Kopyala
|
copylink = Bağlantıyı Kopyala
|
||||||
back = Geri
|
back = Geri
|
||||||
@@ -975,6 +980,8 @@ bullet.splashdamage = [stat]{0} [lightgray]alan hasarı ~[stat] {1} [lightgray]k
|
|||||||
bullet.incendiary = [stat]yakıcı
|
bullet.incendiary = [stat]yakıcı
|
||||||
bullet.homing = [stat]güdümlü
|
bullet.homing = [stat]güdümlü
|
||||||
bullet.armorpierce = [stat]zırh delici
|
bullet.armorpierce = [stat]zırh delici
|
||||||
|
bullet.suppression = [stat]{0} sec[lightgray] repair suppression ~ [stat]{1}[lightgray] tiles
|
||||||
|
bullet.interval = [stat]{0}/sec[lightgray] interval bullets:
|
||||||
bullet.frags = [stat]{0}[lightgray]x parçalı mermiler:
|
bullet.frags = [stat]{0}[lightgray]x parçalı mermiler:
|
||||||
bullet.lightning = [stat]{0}[lightgray]x elektrik ~ [stat]{1}[lightgray] hasarı
|
bullet.lightning = [stat]{0}[lightgray]x elektrik ~ [stat]{1}[lightgray] hasarı
|
||||||
bullet.buildingdamage = [stat]{0}%[lightgray] inşaa hasarı
|
bullet.buildingdamage = [stat]{0}%[lightgray] inşaa hasarı
|
||||||
@@ -1088,8 +1095,8 @@ setting.bridgeopacity.name = Köprü Opaklığı
|
|||||||
setting.playerchat.name = Oyun-içi Konuşmayı Göster
|
setting.playerchat.name = Oyun-içi Konuşmayı Göster
|
||||||
setting.showweather.name = Hava Durmu Grafiklerini Göster
|
setting.showweather.name = Hava Durmu Grafiklerini Göster
|
||||||
setting.hidedisplays.name = İşlemci İpuçlarını Gizle
|
setting.hidedisplays.name = İşlemci İpuçlarını Gizle
|
||||||
public.confirm = Oyununuzu halka açık yapmak ister misiniz?\n[accent]Oyunlarınıza herkes katılabilecektir.\n[lightgray]Bu seçenek daha sonra Ayarlar->Oyun->Halka Açık Oyunlar'dan değiştirilebilir.
|
steam.friendsonly = Friends Only
|
||||||
public.confirm.really = Eğer Arkadaşlarınla oynamak istiyorsan [green]Arkadaş Davet Et[] e bas. [scarlet]Halka Açık Sunucuya Değil[]!\nOyununu Gerçekten Halka açık yapmak istediğine [scarlet]Emin Misin[]?
|
steam.friendsonly.tooltip = Whether only Steam friends will be able to join your game.\nUnchecking this box will make your game public - anyone can join.
|
||||||
public.beta = Oyunun beta sürümlerinin halka açık lobiler yapamayacağını unutmayın.
|
public.beta = Oyunun beta sürümlerinin halka açık lobiler yapamayacağını unutmayın.
|
||||||
uiscale.reset = Arayüz ölçeği değiştirildi.\nBu ölçeği onaylamak için "Tamam" butonuna basın.\n[accent] {0}[] [scarlet]saniye içinde eski ayarlara geri dönülüp oyundan çıkılıyor…[]
|
uiscale.reset = Arayüz ölçeği değiştirildi.\nBu ölçeği onaylamak için "Tamam" butonuna basın.\n[accent] {0}[] [scarlet]saniye içinde eski ayarlara geri dönülüp oyundan çıkılıyor…[]
|
||||||
uiscale.cancel = İptal Et ve Çık
|
uiscale.cancel = İptal Et ve Çık
|
||||||
@@ -1141,8 +1148,8 @@ keybind.select.name = Seç/Ateş Et
|
|||||||
keybind.diagonal_placement.name = Çapraz Yerleştirme
|
keybind.diagonal_placement.name = Çapraz Yerleştirme
|
||||||
keybind.pick.name = Blok Seç
|
keybind.pick.name = Blok Seç
|
||||||
keybind.break_block.name = Blok Kır
|
keybind.break_block.name = Blok Kır
|
||||||
keybind.select_all_units = Tüm Birimleri Seç
|
keybind.select_all_units.name = Tüm Birimleri Seç
|
||||||
keybind.select_all_unit_factories = Select All Unit Factories
|
keybind.select_all_unit_factories.name = Select All Unit Factories
|
||||||
keybind.deselect.name = Seçimleri Kaldır
|
keybind.deselect.name = Seçimleri Kaldır
|
||||||
keybind.pickupCargo.name = Kargoyu Al
|
keybind.pickupCargo.name = Kargoyu Al
|
||||||
keybind.dropCargo.name = Kargoyu Bırak
|
keybind.dropCargo.name = Kargoyu Bırak
|
||||||
@@ -2201,6 +2208,7 @@ lst.flushmessage = Ekranda bir yazı göster.\nBir önceki yazı kaybolana kadar
|
|||||||
lst.cutscene = Oyuncu Kamerasını hareket ettir.
|
lst.cutscene = Oyuncu Kamerasını hareket ettir.
|
||||||
lst.setflag = Tüm İşlemciler tarafından okunabilen bir Numara İşaretle.
|
lst.setflag = Tüm İşlemciler tarafından okunabilen bir Numara İşaretle.
|
||||||
lst.getflag = Evrensel İşaretli Numara Oku.
|
lst.getflag = Evrensel İşaretli Numara Oku.
|
||||||
|
lst.setprop = Sets a property of a unit or building.
|
||||||
|
|
||||||
logic.nounitbuild = [red]Birim İnşası Yasak!
|
logic.nounitbuild = [red]Birim İnşası Yasak!
|
||||||
|
|
||||||
|
|||||||
@@ -150,11 +150,15 @@ mod.incompatiblemod = [red]Несумісно
|
|||||||
mod.blacklisted = [red]Не підтримується
|
mod.blacklisted = [red]Не підтримується
|
||||||
mod.unmetdependencies = [red]Відсутні залежності
|
mod.unmetdependencies = [red]Відсутні залежності
|
||||||
mod.erroredcontent = [scarlet]Помилки під час завантаження
|
mod.erroredcontent = [scarlet]Помилки під час завантаження
|
||||||
|
mod.circulardependencies = [red]Circular Dependencies
|
||||||
|
mod.incompletedependencies = [red]Incomplete Dependencies
|
||||||
mod.requiresversion.details = Необхідна версія гри: [accent]{0}[]\nВаша гра застаріла. Мод потребує новішу версію гри (можливо бета- чи альфа-версію) для роботи.mod.outdatedv7.details = Ця модифікація не сумісна з останньою версією гри. Розробник модифікації має оновити її та додати [accent]minGameVersion: 136[] у свій [accent]mod.json[] файл.
|
mod.requiresversion.details = Необхідна версія гри: [accent]{0}[]\nВаша гра застаріла. Мод потребує новішу версію гри (можливо бета- чи альфа-версію) для роботи.mod.outdatedv7.details = Ця модифікація не сумісна з останньою версією гри. Розробник модифікації має оновити її та додати [accent]minGameVersion: 136[] у свій [accent]mod.json[] файл.
|
||||||
mod.outdatedv7.details = This mod is incompatible with the latest version of the game. The author must update it, and add [accent]minGameVersion: 136[] to its [accent]mod.json[] file.
|
mod.outdatedv7.details = This mod is incompatible with the latest version of the game. The author must update it, and add [accent]minGameVersion: 136[] to its [accent]mod.json[] file.
|
||||||
mod.blacklisted.details = Цю модифікацію було вручну внесено у чорний список за постійні збої або інші проблеми з цією версією гри. Не використовуйте її.
|
mod.blacklisted.details = Цю модифікацію було вручну внесено у чорний список за постійні збої або інші проблеми з цією версією гри. Не використовуйте її.
|
||||||
mod.missingdependencies.details = This mod is missing dependencies: {0}
|
mod.missingdependencies.details = This mod is missing dependencies: {0}
|
||||||
mod.erroredcontent.details = Ця модифікація спричинила помилки при завантаженні. Попросіть автора виправити їх.
|
mod.erroredcontent.details = Ця модифікація спричинила помилки при завантаженні. Попросіть автора виправити їх.
|
||||||
|
mod.circulardependencies.details = This mod has dependencies that depends on each other.
|
||||||
|
mod.incompletedependencies.details = This mod is unable to be loaded due to invalid or missing dependencies: {0}.
|
||||||
mod.requiresversion = Необхідна версія гри: [red]{0}
|
mod.requiresversion = Необхідна версія гри: [red]{0}
|
||||||
mod.errors = Виникли помилки під час завантаження змісту.
|
mod.errors = Виникли помилки під час завантаження змісту.
|
||||||
mod.noerrorplay = [red]Ви маєте модифікації з помилками.[] Або вимкніть проблемні модифікації, або виправте їх.
|
mod.noerrorplay = [red]Ви маєте модифікації з помилками.[] Або вимкніть проблемні модифікації, або виправте їх.
|
||||||
@@ -332,6 +336,7 @@ command.repair = Ремонтувати
|
|||||||
command.rebuild = Відбудовувати
|
command.rebuild = Відбудовувати
|
||||||
command.assist = Допомагати гравцеві
|
command.assist = Допомагати гравцеві
|
||||||
command.move = Рухатися
|
command.move = Рухатися
|
||||||
|
command.boost = Boost
|
||||||
openlink = Перейти за посиланням
|
openlink = Перейти за посиланням
|
||||||
copylink = Скопіювати посилання
|
copylink = Скопіювати посилання
|
||||||
back = Назад
|
back = Назад
|
||||||
@@ -985,6 +990,8 @@ bullet.splashdamage = [stat]{0}[lightgray] шкода по ділянці ~[stat
|
|||||||
bullet.incendiary = [stat]запальний
|
bullet.incendiary = [stat]запальний
|
||||||
bullet.homing = [stat]самонаведення
|
bullet.homing = [stat]самонаведення
|
||||||
bullet.armorpierce = [stat]бронебійність
|
bullet.armorpierce = [stat]бронебійність
|
||||||
|
bullet.suppression = [stat]{0} sec[lightgray] repair suppression ~ [stat]{1}[lightgray] tiles
|
||||||
|
bullet.interval = [stat]{0}/sec[lightgray] interval bullets:
|
||||||
bullet.frags = [stat]{0}[lightgray]x шкода по ділянці від снарядів:
|
bullet.frags = [stat]{0}[lightgray]x шкода по ділянці від снарядів:
|
||||||
bullet.lightning = [stat]{0}[lightgray]x блискавки ~ [stat]{1}[lightgray] шкоди
|
bullet.lightning = [stat]{0}[lightgray]x блискавки ~ [stat]{1}[lightgray] шкоди
|
||||||
bullet.buildingdamage = [stat]{0}%[lightgray] шкода по будівлям
|
bullet.buildingdamage = [stat]{0}%[lightgray] шкода по будівлям
|
||||||
@@ -1098,8 +1105,8 @@ setting.bridgeopacity.name = Непрозорість мостів
|
|||||||
setting.playerchat.name = Показувати хмару чата над гравцями
|
setting.playerchat.name = Показувати хмару чата над гравцями
|
||||||
setting.showweather.name = Показувати погоду
|
setting.showweather.name = Показувати погоду
|
||||||
setting.hidedisplays.name = Приховувати логічні дисплеї
|
setting.hidedisplays.name = Приховувати логічні дисплеї
|
||||||
public.confirm = Ви хочете зробити цю гру загальнодоступною?\n[accent]Будь-хто може приєднатися до вашої гри.\n[lightgray]Це можна змінити в Налаштування->Гра->Загальнодоступність гри.
|
steam.friendsonly = Friends Only
|
||||||
public.confirm.really = Якщо ви хочете грати з друзями, використовуйте [green]Запросити друзів[] замість [scarlet]Публічного сервера[]!\nВи справді хочете зробити свою гру [scarlet]публічною[]?
|
steam.friendsonly.tooltip = Whether only Steam friends will be able to join your game.\nUnchecking this box will make your game public - anyone can join.
|
||||||
public.beta = Зауважте, що в бета-версії гри ви не можете робити публічні ігри.
|
public.beta = Зауважте, що в бета-версії гри ви не можете робити публічні ігри.
|
||||||
uiscale.reset = Масштаб користувацького інтерфейсу було змінено.\nНатисніть «Гаразд» для підтвердження цього масштабу.\n[scarlet]Повернення налаштувань і вихід через[accent] {0}[] секунд…
|
uiscale.reset = Масштаб користувацького інтерфейсу було змінено.\nНатисніть «Гаразд» для підтвердження цього масштабу.\n[scarlet]Повернення налаштувань і вихід через[accent] {0}[] секунд…
|
||||||
uiscale.cancel = Скасувати й вийти
|
uiscale.cancel = Скасувати й вийти
|
||||||
@@ -1151,8 +1158,8 @@ keybind.select.name = Вибір/Постріл
|
|||||||
keybind.diagonal_placement.name = Діагональне розміщення
|
keybind.diagonal_placement.name = Діагональне розміщення
|
||||||
keybind.pick.name = Вибрати блок
|
keybind.pick.name = Вибрати блок
|
||||||
keybind.break_block.name = Зламати блок
|
keybind.break_block.name = Зламати блок
|
||||||
keybind.select_all_units = Вибрати всі одиниці
|
keybind.select_all_units.name = Вибрати всі одиниці
|
||||||
keybind.select_all_unit_factories = Вибрати всі заводи зі створення одиниць
|
keybind.select_all_unit_factories.name = Вибрати всі заводи зі створення одиниць
|
||||||
keybind.deselect.name = Скасувати
|
keybind.deselect.name = Скасувати
|
||||||
keybind.pickupCargo.name = Взяти вантаж
|
keybind.pickupCargo.name = Взяти вантаж
|
||||||
keybind.dropCargo.name = Скинути вантаж
|
keybind.dropCargo.name = Скинути вантаж
|
||||||
@@ -2225,6 +2232,7 @@ lst.flushmessage = Показує повідомлення на екрані з
|
|||||||
lst.cutscene = Керує камерою гравця.
|
lst.cutscene = Керує камерою гравця.
|
||||||
lst.setflag = Установлює глобальний прапорець, який можуть прочитати усі процесори.
|
lst.setflag = Установлює глобальний прапорець, який можуть прочитати усі процесори.
|
||||||
lst.getflag = Перевіряє, чи встановлено глобальний прапорець.
|
lst.getflag = Перевіряє, чи встановлено глобальний прапорець.
|
||||||
|
lst.setprop = Sets a property of a unit or building.
|
||||||
|
|
||||||
logic.nounitbuild = [red]Будування за допомогою процесорів заборено.
|
logic.nounitbuild = [red]Будування за допомогою процесорів заборено.
|
||||||
|
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
@@ -150,12 +150,16 @@ mod.incompatiblemod = [red]不兼容
|
|||||||
mod.blacklisted = [red]不支持
|
mod.blacklisted = [red]不支持
|
||||||
mod.unmetdependencies = [red]缺少前置模组
|
mod.unmetdependencies = [red]缺少前置模组
|
||||||
mod.erroredcontent = [scarlet]内容错误
|
mod.erroredcontent = [scarlet]内容错误
|
||||||
|
mod.circulardependencies = [red]Circular Dependencies
|
||||||
|
mod.incompletedependencies = [red]Incomplete Dependencies
|
||||||
|
|
||||||
mod.requiresversion.details = 所需的最低游戏版本:[accent]{0}[]\n您的游戏版本过低。 这个模组需要更新的游戏版本(通常是beta/alpha版本)才能工作。
|
mod.requiresversion.details = 所需的最低游戏版本:[accent]{0}[]\n您的游戏版本过低。 这个模组需要更新的游戏版本(通常是beta/alpha版本)才能工作。
|
||||||
mod.outdatedv7.details = 这个模组与最新版游戏不兼容。 作者必须更新它,并在[accent]mod.json[]文件中写入[accent]minGameVersion: 136[]。
|
mod.outdatedv7.details = 这个模组与最新版游戏不兼容。 作者必须更新它,并在[accent]mod.json[]文件中写入[accent]minGameVersion: 136[]。
|
||||||
mod.blacklisted.details = 这个模组由于造成该版本游戏崩溃或其他原因被手动禁用了。 不要使用它。
|
mod.blacklisted.details = 这个模组由于造成该版本游戏崩溃或其他原因被手动禁用了。 不要使用它。
|
||||||
mod.missingdependencies.details = 缺少前置模组:{0}
|
mod.missingdependencies.details = 缺少前置模组:{0}
|
||||||
mod.erroredcontent.details = 这个模组在游戏加载时发生了错误。 请通知模组作者修复它。
|
mod.erroredcontent.details = 这个模组在游戏加载时发生了错误。 请通知模组作者修复它。
|
||||||
|
mod.circulardependencies.details = This mod has dependencies that depends on each other.
|
||||||
|
mod.incompletedependencies.details = This mod is unable to be loaded due to invalid or missing dependencies: {0}.
|
||||||
mod.requiresversion = Requires game version: [red]{0}
|
mod.requiresversion = Requires game version: [red]{0}
|
||||||
|
|
||||||
mod.errors = 读取内容时发生错误。
|
mod.errors = 读取内容时发生错误。
|
||||||
@@ -334,6 +338,7 @@ command.repair = 维修
|
|||||||
command.rebuild = 重建
|
command.rebuild = 重建
|
||||||
command.assist = 协助建造
|
command.assist = 协助建造
|
||||||
command.move = 移动
|
command.move = 移动
|
||||||
|
command.boost = Boost
|
||||||
openlink = 打开链接
|
openlink = 打开链接
|
||||||
copylink = 复制链接
|
copylink = 复制链接
|
||||||
back = 返回
|
back = 返回
|
||||||
@@ -987,6 +992,8 @@ bullet.splashdamage = [stat]{0}[lightgray]范围伤害~[stat] {1}[lightgray]格
|
|||||||
bullet.incendiary = [stat]燃烧
|
bullet.incendiary = [stat]燃烧
|
||||||
bullet.homing = [stat]追踪
|
bullet.homing = [stat]追踪
|
||||||
bullet.armorpierce = [stat]穿甲
|
bullet.armorpierce = [stat]穿甲
|
||||||
|
bullet.suppression = [stat]{0} sec[lightgray] repair suppression ~ [stat]{1}[lightgray] tiles
|
||||||
|
bullet.interval = [stat]{0}/sec[lightgray] interval bullets:
|
||||||
bullet.frags = [stat]{0}[lightgray]x分裂子弹:
|
bullet.frags = [stat]{0}[lightgray]x分裂子弹:
|
||||||
bullet.lightning = [stat]{0}[lightgray]x闪电~[stat]{1}[lightgray]伤害
|
bullet.lightning = [stat]{0}[lightgray]x闪电~[stat]{1}[lightgray]伤害
|
||||||
bullet.buildingdamage = [stat]{0}%[lightgray]对建筑伤害
|
bullet.buildingdamage = [stat]{0}%[lightgray]对建筑伤害
|
||||||
@@ -1100,8 +1107,8 @@ setting.bridgeopacity.name = 桥梁不透明度
|
|||||||
setting.playerchat.name = 显示玩家聊天气泡
|
setting.playerchat.name = 显示玩家聊天气泡
|
||||||
setting.showweather.name = 显示天气效果
|
setting.showweather.name = 显示天气效果
|
||||||
setting.hidedisplays.name = 不显示逻辑绘图
|
setting.hidedisplays.name = 不显示逻辑绘图
|
||||||
public.confirm = 确定使您的游戏公开可见?\n[accent]其他人将可以加入到您的游戏。 \n[lightgray]此后可以在 设置->游戏->游戏公开可见 里面更改。
|
steam.friendsonly = Friends Only
|
||||||
public.confirm.really = 如果您想与好友一起游戏,可以使用[green]邀请好友[]而不是[scarlet]公开游戏[]!\n您确定要使游戏[scarlet]公开可见[]吗?
|
steam.friendsonly.tooltip = Whether only Steam friends will be able to join your game.\nUnchecking this box will make your game public - anyone can join.
|
||||||
public.beta = 请注意,测试版的游戏不能公开可见。
|
public.beta = 请注意,测试版的游戏不能公开可见。
|
||||||
uiscale.reset = UI缩放比例已更改。\n点击“确定”接受更改。\n[accent]{0}[]秒后[scarlet]将自动退出并还原设置。
|
uiscale.reset = UI缩放比例已更改。\n点击“确定”接受更改。\n[accent]{0}[]秒后[scarlet]将自动退出并还原设置。
|
||||||
uiscale.cancel = 取消并退出
|
uiscale.cancel = 取消并退出
|
||||||
@@ -1153,8 +1160,8 @@ keybind.select.name = 选择/射击
|
|||||||
keybind.diagonal_placement.name = 斜线建造
|
keybind.diagonal_placement.name = 斜线建造
|
||||||
keybind.pick.name = 选择建筑
|
keybind.pick.name = 选择建筑
|
||||||
keybind.break_block.name = 拆除建筑
|
keybind.break_block.name = 拆除建筑
|
||||||
keybind.select_all_units = 选择所有单位
|
keybind.select_all_units.name = 选择所有单位
|
||||||
keybind.select_all_unit_factories = 选择所有单位工厂
|
keybind.select_all_unit_factories.name = 选择所有单位工厂
|
||||||
keybind.deselect.name = 取消选择
|
keybind.deselect.name = 取消选择
|
||||||
keybind.pickupCargo.name = 拾取载荷
|
keybind.pickupCargo.name = 拾取载荷
|
||||||
keybind.dropCargo.name = 释放载荷
|
keybind.dropCargo.name = 释放载荷
|
||||||
@@ -2227,6 +2234,7 @@ lst.flushmessage = 在屏幕中央投影文字缓存区的内容\n会等待上
|
|||||||
lst.cutscene = 控制玩家游戏视角
|
lst.cutscene = 控制玩家游戏视角
|
||||||
lst.setflag = 设置一个可以被所有处理器读取的全局flag
|
lst.setflag = 设置一个可以被所有处理器读取的全局flag
|
||||||
lst.getflag = 检查是否设置了全局flag
|
lst.getflag = 检查是否设置了全局flag
|
||||||
|
lst.setprop = Sets a property of a unit or building.
|
||||||
|
|
||||||
logic.nounitbuild = [red]此处不允许处理器操控单位去建设
|
logic.nounitbuild = [red]此处不允许处理器操控单位去建设
|
||||||
|
|
||||||
|
|||||||
@@ -149,11 +149,15 @@ mod.incompatiblemod = [red]Incompatible
|
|||||||
mod.blacklisted = [red]Unsupported
|
mod.blacklisted = [red]Unsupported
|
||||||
mod.unmetdependencies = [red]Unmet Dependencies
|
mod.unmetdependencies = [red]Unmet Dependencies
|
||||||
mod.erroredcontent = [scarlet]內容錯誤
|
mod.erroredcontent = [scarlet]內容錯誤
|
||||||
|
mod.circulardependencies = [red]Circular Dependencies
|
||||||
|
mod.incompletedependencies = [red]Incomplete Dependencies
|
||||||
mod.requiresversion.details = Requires game version: [accent]{0}[]\nYour game is outdated. This mod requires a newer version of the game (possibly a beta/alpha release) to function.
|
mod.requiresversion.details = Requires game version: [accent]{0}[]\nYour game is outdated. This mod requires a newer version of the game (possibly a beta/alpha release) to function.
|
||||||
mod.outdatedv7.details = This mod is incompatible with the latest version of the game. The author must update it, and add [accent]minGameVersion: 136[] to its [accent]mod.json[] file.
|
mod.outdatedv7.details = This mod is incompatible with the latest version of the game. The author must update it, and add [accent]minGameVersion: 136[] to its [accent]mod.json[] file.
|
||||||
mod.blacklisted.details = This mod has been manually blacklisted for causing crashes or other issues with this version of the game. Do not use it.
|
mod.blacklisted.details = This mod has been manually blacklisted for causing crashes or other issues with this version of the game. Do not use it.
|
||||||
mod.missingdependencies.details = This mod is missing dependencies: {0}
|
mod.missingdependencies.details = This mod is missing dependencies: {0}
|
||||||
mod.erroredcontent.details = This game caused errors when loading. Ask the mod author to fix them.
|
mod.erroredcontent.details = This game caused errors when loading. Ask the mod author to fix them.
|
||||||
|
mod.circulardependencies.details = This mod has dependencies that depends on each other.
|
||||||
|
mod.incompletedependencies.details = This mod is unable to be loaded due to invalid or missing dependencies: {0}.
|
||||||
mod.requiresversion = Requires game version: [red]{0}
|
mod.requiresversion = Requires game version: [red]{0}
|
||||||
mod.errors = 載入內容時發生錯誤
|
mod.errors = 載入內容時發生錯誤
|
||||||
mod.noerrorplay = [scarlet]你使用了有問題的模組。[] 遊戲前請先停用相關模組或修正問題。
|
mod.noerrorplay = [scarlet]你使用了有問題的模組。[] 遊戲前請先停用相關模組或修正問題。
|
||||||
@@ -331,6 +335,7 @@ command.repair = 修復
|
|||||||
command.rebuild = 重建
|
command.rebuild = 重建
|
||||||
command.assist = 協助玩家
|
command.assist = 協助玩家
|
||||||
command.move = 移動
|
command.move = 移動
|
||||||
|
command.boost = Boost
|
||||||
openlink = 開啟連結
|
openlink = 開啟連結
|
||||||
copylink = 複製連結
|
copylink = 複製連結
|
||||||
back = 返回
|
back = 返回
|
||||||
@@ -983,6 +988,8 @@ bullet.splashdamage = [stat]{0}[lightgray]範圍傷害 ~[stat] {1}[lightgray]格
|
|||||||
bullet.incendiary = [stat]燃燒
|
bullet.incendiary = [stat]燃燒
|
||||||
bullet.homing = [stat]追蹤
|
bullet.homing = [stat]追蹤
|
||||||
bullet.armorpierce = [stat]穿甲
|
bullet.armorpierce = [stat]穿甲
|
||||||
|
bullet.suppression = [stat]{0} sec[lightgray] repair suppression ~ [stat]{1}[lightgray] tiles
|
||||||
|
bullet.interval = [stat]{0}/sec[lightgray] interval bullets:
|
||||||
bullet.frags = [stat]{0}[lightgray]x 集束子彈:
|
bullet.frags = [stat]{0}[lightgray]x 集束子彈:
|
||||||
bullet.lightning = [stat]{0}[lightgray]x 電弧 ~ [stat]{1}[lightgray] 傷害
|
bullet.lightning = [stat]{0}[lightgray]x 電弧 ~ [stat]{1}[lightgray] 傷害
|
||||||
bullet.buildingdamage = [stat]{0}%[lightgray] 建築傷害
|
bullet.buildingdamage = [stat]{0}%[lightgray] 建築傷害
|
||||||
@@ -1096,8 +1103,8 @@ setting.bridgeopacity.name = 橋透明度
|
|||||||
setting.playerchat.name = 在遊戲中顯示聊天視窗
|
setting.playerchat.name = 在遊戲中顯示聊天視窗
|
||||||
setting.showweather.name = 顯示天氣動畫
|
setting.showweather.name = 顯示天氣動畫
|
||||||
setting.hidedisplays.name = 隱藏邏輯顯示
|
setting.hidedisplays.name = 隱藏邏輯顯示
|
||||||
public.confirm = 您想公開遊戲嗎?\n[accent]任何人都可以加入您的遊戲。\n[lightgray]之後可以在「設定」→「遊戲」→「公開遊戲可見度」中進行更改。
|
steam.friendsonly = Friends Only
|
||||||
public.confirm.really = 如果你想和朋友一起遊玩,可利用[green]邀請好友[]而不是[scarlet]公開伺服器[]!\n你確定要將伺服設為[scarlet]公開[]?
|
steam.friendsonly.tooltip = Whether only Steam friends will be able to join your game.\nUnchecking this box will make your game public - anyone can join.
|
||||||
public.beta = 請注意,該遊戲的Beta版本無法公開遊戲大廳。
|
public.beta = 請注意,該遊戲的Beta版本無法公開遊戲大廳。
|
||||||
uiscale.reset = 使用者介面縮放已變更\n按下「確定」確認這個比例\n[scarlet][accent] {0}[] 秒後退出並還原設定
|
uiscale.reset = 使用者介面縮放已變更\n按下「確定」確認這個比例\n[scarlet][accent] {0}[] 秒後退出並還原設定
|
||||||
uiscale.cancel = 取消並退出
|
uiscale.cancel = 取消並退出
|
||||||
@@ -1149,8 +1156,8 @@ keybind.select.name = 選取
|
|||||||
keybind.diagonal_placement.name = 對角線放置
|
keybind.diagonal_placement.name = 對角線放置
|
||||||
keybind.pick.name = 選擇方塊
|
keybind.pick.name = 選擇方塊
|
||||||
keybind.break_block.name = 移除方塊
|
keybind.break_block.name = 移除方塊
|
||||||
keybind.select_all_units = Select All Units
|
keybind.select_all_units.name = Select All Units
|
||||||
keybind.select_all_unit_factories = Select All Unit Factories
|
keybind.select_all_unit_factories.name = Select All Unit Factories
|
||||||
keybind.deselect.name = 取消選取
|
keybind.deselect.name = 取消選取
|
||||||
keybind.pickupCargo.name = 撿起貨物
|
keybind.pickupCargo.name = 撿起貨物
|
||||||
keybind.dropCargo.name = 丟棄貨物
|
keybind.dropCargo.name = 丟棄貨物
|
||||||
@@ -2211,6 +2218,7 @@ lst.flushmessage = 从文本緩存中讀取並於屏幕上顯示一條消息\n
|
|||||||
lst.cutscene = 控制玩家鏡頭
|
lst.cutscene = 控制玩家鏡頭
|
||||||
lst.setflag = 設置一個全局flag,可被所有處理器讀取
|
lst.setflag = 設置一個全局flag,可被所有處理器讀取
|
||||||
lst.getflag = 檢查某一全局flag是否存在
|
lst.getflag = 檢查某一全局flag是否存在
|
||||||
|
lst.setprop = Sets a property of a unit or building.
|
||||||
|
|
||||||
logic.nounitbuild = [red]單位建造邏輯已被禁止。
|
logic.nounitbuild = [red]單位建造邏輯已被禁止。
|
||||||
|
|
||||||
|
|||||||
@@ -153,3 +153,4 @@ BlackDeluxeCat
|
|||||||
zenonet
|
zenonet
|
||||||
AyuKo-o
|
AyuKo-o
|
||||||
JojoFR1
|
JojoFR1
|
||||||
|
Xasmedy
|
||||||
|
|||||||
@@ -102,9 +102,7 @@ public abstract class ClientLauncher extends ApplicationCore implements Platform
|
|||||||
});
|
});
|
||||||
assets.setLoader(Music.class, new MusicLoader(tree){
|
assets.setLoader(Music.class, new MusicLoader(tree){
|
||||||
@Override
|
@Override
|
||||||
public void loadAsync(AssetManager manager, String fileName, Fi file, MusicParameter parameter){
|
public void loadAsync(AssetManager manager, String fileName, Fi file, MusicParameter parameter){}
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Music loadSync(AssetManager manager, String fileName, Fi file, MusicParameter parameter){
|
public Music loadSync(AssetManager manager, String fileName, Fi file, MusicParameter parameter){
|
||||||
|
|||||||
@@ -273,7 +273,7 @@ public class ControlPathfinder{
|
|||||||
req.raycastTimer = 0;
|
req.raycastTimer = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(req.rayPathIndex < len){
|
if(req.rayPathIndex < len && req.rayPathIndex >= 0){
|
||||||
Tile tile = tile(items[req.rayPathIndex]);
|
Tile tile = tile(items[req.rayPathIndex]);
|
||||||
out.set(tile);
|
out.set(tile);
|
||||||
|
|
||||||
|
|||||||
@@ -19,7 +19,7 @@ import mindustry.world.meta.*;
|
|||||||
import static mindustry.Vars.*;
|
import static mindustry.Vars.*;
|
||||||
|
|
||||||
public class Pathfinder implements Runnable{
|
public class Pathfinder implements Runnable{
|
||||||
private static final long maxUpdate = Time.millisToNanos(7);
|
private static final long maxUpdate = Time.millisToNanos(8);
|
||||||
private static final int updateFPS = 60;
|
private static final int updateFPS = 60;
|
||||||
private static final int updateInterval = 1000 / updateFPS;
|
private static final int updateInterval = 1000 / updateFPS;
|
||||||
|
|
||||||
@@ -219,8 +219,6 @@ public class Pathfinder implements Runnable{
|
|||||||
public void updateTile(Tile tile){
|
public void updateTile(Tile tile){
|
||||||
if(net.client()) return;
|
if(net.client()) return;
|
||||||
|
|
||||||
int x = tile.x, y = tile.y;
|
|
||||||
|
|
||||||
tile.getLinkedTiles(t -> {
|
tile.getLinkedTiles(t -> {
|
||||||
int pos = t.array();
|
int pos = t.array();
|
||||||
if(pos < tiles.length){
|
if(pos < tiles.length){
|
||||||
@@ -232,15 +230,15 @@ public class Pathfinder implements Runnable{
|
|||||||
for(Flowfield path : mainList){
|
for(Flowfield path : mainList){
|
||||||
if(path != null){
|
if(path != null){
|
||||||
synchronized(path.targets){
|
synchronized(path.targets){
|
||||||
path.targets.clear();
|
path.updateTargetPositions();
|
||||||
path.getPositions(path.targets);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//mark every flow field as dirty, so it updates when it's done
|
||||||
queue.post(() -> {
|
queue.post(() -> {
|
||||||
for(Flowfield data : threadList){
|
for(Flowfield data : threadList){
|
||||||
updateTargets(data, x, y);
|
data.dirty = true;
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@@ -257,6 +255,13 @@ public class Pathfinder implements Runnable{
|
|||||||
|
|
||||||
//each update time (not total!) no longer than maxUpdate
|
//each update time (not total!) no longer than maxUpdate
|
||||||
for(Flowfield data : threadList){
|
for(Flowfield data : threadList){
|
||||||
|
|
||||||
|
//if it's dirty and there is nothing to update, begin updating once more
|
||||||
|
if(data.dirty && data.frontier.size == 0){
|
||||||
|
updateTargets(data);
|
||||||
|
data.dirty = false;
|
||||||
|
}
|
||||||
|
|
||||||
updateFrontier(data, maxUpdate);
|
updateFrontier(data, maxUpdate);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -306,8 +311,7 @@ public class Pathfinder implements Runnable{
|
|||||||
synchronized(path.targets){
|
synchronized(path.targets){
|
||||||
//make sure the position actually changed
|
//make sure the position actually changed
|
||||||
if(!(path.targets.size == 1 && tmpArray.size == 1 && path.targets.first() == tmpArray.first())){
|
if(!(path.targets.size == 1 && tmpArray.size == 1 && path.targets.first() == tmpArray.first())){
|
||||||
path.targets.clear();
|
path.updateTargetPositions();
|
||||||
path.getPositions(path.targets);
|
|
||||||
|
|
||||||
//queue an update
|
//queue an update
|
||||||
queue.post(() -> updateTargets(path));
|
queue.post(() -> updateTargets(path));
|
||||||
@@ -315,7 +319,8 @@ public class Pathfinder implements Runnable{
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
int[] values = path.weights;
|
//use complete weights if possible; these contain a complete flow field that is not being updated
|
||||||
|
int[] values = path.hasComplete ? path.completeWeights : path.weights;
|
||||||
int apos = tile.array();
|
int apos = tile.array();
|
||||||
int value = values[apos];
|
int value = values[apos];
|
||||||
|
|
||||||
@@ -341,32 +346,6 @@ public class Pathfinder implements Runnable{
|
|||||||
return current;
|
return current;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Clears the frontier, increments the search and sets up all flow sources.
|
|
||||||
* This only occurs for active teams.
|
|
||||||
*/
|
|
||||||
private void updateTargets(Flowfield path, int x, int y){
|
|
||||||
int packed = world.packArray(x, y);
|
|
||||||
|
|
||||||
if(packed > path.weights.length) return;
|
|
||||||
|
|
||||||
if(path.weights[packed] == 0){
|
|
||||||
//this was a previous target
|
|
||||||
path.frontier.clear();
|
|
||||||
}else if(!path.frontier.isEmpty()){
|
|
||||||
//skip if this path is processing
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
//update cost of the tile TODO maybe only update the cost when it's not passable
|
|
||||||
path.weights[packed] = path.cost.getCost(path.team.id, tiles[packed]);
|
|
||||||
|
|
||||||
//clear frontier to prevent contamination
|
|
||||||
path.frontier.clear();
|
|
||||||
|
|
||||||
updateTargets(path);
|
|
||||||
}
|
|
||||||
|
|
||||||
/** Increments the search and sets up flow sources. Does not change the frontier. */
|
/** Increments the search and sets up flow sources. Does not change the frontier. */
|
||||||
private void updateTargets(Flowfield path){
|
private void updateTargets(Flowfield path){
|
||||||
|
|
||||||
@@ -386,8 +365,7 @@ public class Pathfinder implements Runnable{
|
|||||||
}
|
}
|
||||||
|
|
||||||
private void preloadPath(Flowfield path){
|
private void preloadPath(Flowfield path){
|
||||||
path.targets.clear();
|
path.updateTargetPositions();
|
||||||
path.getPositions(path.targets);
|
|
||||||
registerPath(path);
|
registerPath(path);
|
||||||
updateFrontier(path, -1);
|
updateFrontier(path, -1);
|
||||||
}
|
}
|
||||||
@@ -421,6 +399,7 @@ public class Pathfinder implements Runnable{
|
|||||||
|
|
||||||
/** Update the frontier for a path. Pathfinding thread only. */
|
/** Update the frontier for a path. Pathfinding thread only. */
|
||||||
private void updateFrontier(Flowfield path, long nsToRun){
|
private void updateFrontier(Flowfield path, long nsToRun){
|
||||||
|
boolean hadAny = path.frontier.size > 0;
|
||||||
long start = Time.nanos();
|
long start = Time.nanos();
|
||||||
|
|
||||||
int counter = 0;
|
int counter = 0;
|
||||||
@@ -462,6 +441,12 @@ public class Pathfinder implements Runnable{
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//there WERE some things in the frontier, but now they are gone, so the path is done; copy over latest data
|
||||||
|
if(hadAny && path.frontier.size == 0){
|
||||||
|
System.arraycopy(path.weights, 0, path.completeWeights, 0, path.weights.length);
|
||||||
|
path.hasComplete = true;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public static class EnemyCoreField extends Flowfield{
|
public static class EnemyCoreField extends Flowfield{
|
||||||
@@ -505,11 +490,18 @@ public class Pathfinder implements Runnable{
|
|||||||
protected Team team = Team.derelict;
|
protected Team team = Team.derelict;
|
||||||
/** Function for calculating path cost. Set before using. */
|
/** Function for calculating path cost. Set before using. */
|
||||||
protected PathCost cost = costTypes.get(costGround);
|
protected PathCost cost = costTypes.get(costGround);
|
||||||
|
/** Whether there are valid weights in the complete array. */
|
||||||
|
protected volatile boolean hasComplete;
|
||||||
|
/** If true, this flow field needs updating. This flag is only set to false once the flow field finishes and the weights are copied over. */
|
||||||
|
protected boolean dirty = false;
|
||||||
|
|
||||||
/** costs of getting to a specific tile */
|
/** costs of getting to a specific tile */
|
||||||
public int[] weights;
|
public int[] weights;
|
||||||
/** search IDs of each position - the highest, most recent search is prioritized and overwritten */
|
/** search IDs of each position - the highest, most recent search is prioritized and overwritten */
|
||||||
public int[] searches;
|
public int[] searches;
|
||||||
|
/** the last "complete" weights of this tilemap. */
|
||||||
|
public int[] completeWeights;
|
||||||
|
|
||||||
/** search frontier, these are Pos objects */
|
/** search frontier, these are Pos objects */
|
||||||
IntQueue frontier = new IntQueue();
|
IntQueue frontier = new IntQueue();
|
||||||
/** all target positions; these positions have a cost of 0, and must be synchronized on! */
|
/** all target positions; these positions have a cost of 0, and must be synchronized on! */
|
||||||
@@ -524,10 +516,16 @@ public class Pathfinder implements Runnable{
|
|||||||
void setup(int length){
|
void setup(int length){
|
||||||
this.weights = new int[length];
|
this.weights = new int[length];
|
||||||
this.searches = new int[length];
|
this.searches = new int[length];
|
||||||
|
this.completeWeights = new int[length];
|
||||||
this.frontier.ensureCapacity((length) / 4);
|
this.frontier.ensureCapacity((length) / 4);
|
||||||
this.initialized = true;
|
this.initialized = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void updateTargetPositions(){
|
||||||
|
targets.clear();
|
||||||
|
getPositions(targets);
|
||||||
|
}
|
||||||
|
|
||||||
protected boolean passable(int pos){
|
protected boolean passable(int pos){
|
||||||
return cost.getCost(team.id, pathfinder.tiles[pos]) != impassable;
|
return cost.getCost(team.id, pathfinder.tiles[pos]) != impassable;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -14,7 +14,10 @@ public class UnitCommand{
|
|||||||
|
|
||||||
public static final UnitCommand
|
public static final UnitCommand
|
||||||
|
|
||||||
moveCommand = new UnitCommand("move", "right", u -> null),
|
moveCommand = new UnitCommand("move", "right", u -> null){{
|
||||||
|
drawTarget = true;
|
||||||
|
resetTarget = false;
|
||||||
|
}},
|
||||||
repairCommand = new UnitCommand("repair", "modeSurvival", u -> new RepairAI()),
|
repairCommand = new UnitCommand("repair", "modeSurvival", u -> new RepairAI()),
|
||||||
rebuildCommand = new UnitCommand("rebuild", "hammer", u -> new BuilderAI()),
|
rebuildCommand = new UnitCommand("rebuild", "hammer", u -> new BuilderAI()),
|
||||||
assistCommand = new UnitCommand("assist", "players", u -> {
|
assistCommand = new UnitCommand("assist", "players", u -> {
|
||||||
@@ -22,7 +25,12 @@ public class UnitCommand{
|
|||||||
ai.onlyAssist = true;
|
ai.onlyAssist = true;
|
||||||
return ai;
|
return ai;
|
||||||
}),
|
}),
|
||||||
mineCommand = new UnitCommand("mine", "production", u -> new MinerAI());
|
mineCommand = new UnitCommand("mine", "production", u -> new MinerAI()),
|
||||||
|
boostCommand = new UnitCommand("boost", "up", u -> new BoostAI()){{
|
||||||
|
switchToMove = false;
|
||||||
|
drawTarget = true;
|
||||||
|
resetTarget = false;
|
||||||
|
}};
|
||||||
|
|
||||||
/** Unique ID number. */
|
/** Unique ID number. */
|
||||||
public final int id;
|
public final int id;
|
||||||
@@ -32,6 +40,12 @@ public class UnitCommand{
|
|||||||
public final String icon;
|
public final String icon;
|
||||||
/** Controller that this unit will use when this command is used. Return null for "default" behavior. */
|
/** Controller that this unit will use when this command is used. Return null for "default" behavior. */
|
||||||
public final Func<Unit, AIController> controller;
|
public final Func<Unit, AIController> controller;
|
||||||
|
/** If true, this unit will automatically switch away to the move command when given a position. */
|
||||||
|
public boolean switchToMove = true;
|
||||||
|
/** Whether to draw the movement/attack target. */
|
||||||
|
public boolean drawTarget = false;
|
||||||
|
/** Whether to reset targets when switching to or from this command. */
|
||||||
|
public boolean resetTarget = true;
|
||||||
|
|
||||||
public UnitCommand(String name, String icon, Func<Unit, AIController> controller){
|
public UnitCommand(String name, String icon, Func<Unit, AIController> controller){
|
||||||
this.name = name;
|
this.name = name;
|
||||||
@@ -45,4 +59,9 @@ public class UnitCommand{
|
|||||||
public String localized(){
|
public String localized(){
|
||||||
return Core.bundle.get("command." + name);
|
return Core.bundle.get("command." + name);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String toString(){
|
||||||
|
return "UnitCommand:" + name;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
21
core/src/mindustry/ai/types/BoostAI.java
Normal file
21
core/src/mindustry/ai/types/BoostAI.java
Normal file
@@ -0,0 +1,21 @@
|
|||||||
|
package mindustry.ai.types;
|
||||||
|
|
||||||
|
import mindustry.ai.*;
|
||||||
|
import mindustry.entities.units.*;
|
||||||
|
|
||||||
|
//not meant to be used outside RTS-AI-controlled units
|
||||||
|
public class BoostAI extends AIController{
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void updateUnit(){
|
||||||
|
if(unit.controller() instanceof CommandAI ai){
|
||||||
|
ai.defaultBehavior();
|
||||||
|
unit.updateBoosting(true);
|
||||||
|
|
||||||
|
//auto land when near target
|
||||||
|
if(ai.attackTarget != null && unit.within(ai.attackTarget, unit.range())){
|
||||||
|
unit.command().command(UnitCommand.moveCommand);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -119,7 +119,7 @@ public class BuilderAI extends AIController{
|
|||||||
}
|
}
|
||||||
|
|
||||||
//follow someone and help them build
|
//follow someone and help them build
|
||||||
if(timer.get(timerTarget2, 60f)){
|
if(timer.get(timerTarget2, 20f)){
|
||||||
found = false;
|
found = false;
|
||||||
|
|
||||||
Units.nearby(unit.team, unit.x, unit.y, buildRadius, u -> {
|
Units.nearby(unit.team, unit.x, unit.y, buildRadius, u -> {
|
||||||
|
|||||||
@@ -35,8 +35,8 @@ public class CommandAI extends AIController{
|
|||||||
/** Last command type assigned. Used for detecting command changes. */
|
/** Last command type assigned. Used for detecting command changes. */
|
||||||
protected @Nullable UnitCommand lastCommand;
|
protected @Nullable UnitCommand lastCommand;
|
||||||
|
|
||||||
public @Nullable UnitCommand currentCommand(){
|
public UnitCommand currentCommand(){
|
||||||
return command;
|
return command == null ? UnitCommand.moveCommand : command;
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Attempts to assign a command to this unit. If not supported by the unit type, does nothing. */
|
/** Attempts to assign a command to this unit. If not supported by the unit type, does nothing. */
|
||||||
@@ -49,6 +49,11 @@ public class CommandAI extends AIController{
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean isLogicControllable(){
|
||||||
|
return !hasCommand();
|
||||||
|
}
|
||||||
|
|
||||||
public boolean isAttacking(){
|
public boolean isAttacking(){
|
||||||
return target != null && unit.within(target, unit.range() + 10f);
|
return target != null && unit.within(target, unit.range() + 10f);
|
||||||
}
|
}
|
||||||
@@ -62,7 +67,7 @@ public class CommandAI extends AIController{
|
|||||||
}
|
}
|
||||||
|
|
||||||
//update command controller based on index.
|
//update command controller based on index.
|
||||||
var curCommand = currentCommand();
|
var curCommand = command;
|
||||||
if(lastCommand != curCommand){
|
if(lastCommand != curCommand){
|
||||||
lastCommand = curCommand;
|
lastCommand = curCommand;
|
||||||
commandController = (curCommand == null ? null : curCommand.controller.get(unit));
|
commandController = (curCommand == null ? null : curCommand.controller.get(unit));
|
||||||
@@ -72,8 +77,14 @@ public class CommandAI extends AIController{
|
|||||||
if(commandController != null){
|
if(commandController != null){
|
||||||
if(commandController.unit() != unit) commandController.unit(unit);
|
if(commandController.unit() != unit) commandController.unit(unit);
|
||||||
commandController.updateUnit();
|
commandController.updateUnit();
|
||||||
return;
|
}else{
|
||||||
|
defaultBehavior();
|
||||||
|
//boosting control is not supported, so just don't.
|
||||||
|
unit.updateBoosting(false);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void defaultBehavior(){
|
||||||
|
|
||||||
//acquiring naval targets isn't supported yet, so use the fallback dumb AI
|
//acquiring naval targets isn't supported yet, so use the fallback dumb AI
|
||||||
if(unit.team.isAI() && unit.team.rules().rtsAi && unit.type.naval){
|
if(unit.team.isAI() && unit.team.rules().rtsAi && unit.type.naval){
|
||||||
@@ -207,9 +218,6 @@ public class CommandAI extends AIController{
|
|||||||
}else if(target != null){
|
}else if(target != null){
|
||||||
faceTarget();
|
faceTarget();
|
||||||
}
|
}
|
||||||
|
|
||||||
//boosting control is not supported, so just don't.
|
|
||||||
unit.updateBoosting(false);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -249,8 +257,12 @@ public class CommandAI extends AIController{
|
|||||||
lastTargetPos = targetPos;
|
lastTargetPos = targetPos;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
public void commandPosition(Vec2 pos){
|
public void commandPosition(Vec2 pos){
|
||||||
commandPosition(pos, false);
|
commandPosition(pos, false);
|
||||||
|
if(commandController != null){
|
||||||
|
commandController.commandPosition(pos);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void commandPosition(Vec2 pos, boolean stopWhenInRange){
|
public void commandPosition(Vec2 pos, boolean stopWhenInRange){
|
||||||
@@ -261,8 +273,12 @@ public class CommandAI extends AIController{
|
|||||||
this.stopWhenInRange = stopWhenInRange;
|
this.stopWhenInRange = stopWhenInRange;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
public void commandTarget(Teamc moveTo){
|
public void commandTarget(Teamc moveTo){
|
||||||
commandTarget(moveTo, false);
|
commandTarget(moveTo, false);
|
||||||
|
if(commandController != null){
|
||||||
|
commandController.commandTarget(moveTo);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void commandTarget(Teamc moveTo, boolean stopAtTarget){
|
public void commandTarget(Teamc moveTo, boolean stopAtTarget){
|
||||||
|
|||||||
@@ -1277,6 +1277,7 @@ public class Blocks{
|
|||||||
heatOutput = 3f;
|
heatOutput = 3f;
|
||||||
regionRotated1 = 1;
|
regionRotated1 = 1;
|
||||||
ambientSound = Sounds.hum;
|
ambientSound = Sounds.hum;
|
||||||
|
itemCapacity = 0;
|
||||||
consumePower(100f / 60f);
|
consumePower(100f / 60f);
|
||||||
}};
|
}};
|
||||||
|
|
||||||
@@ -1287,6 +1288,7 @@ public class Blocks{
|
|||||||
|
|
||||||
drawer = new DrawMulti(new DrawRegion("-bottom"), new DrawLiquidTile(Liquids.slag), new DrawDefault(), new DrawHeatOutput());
|
drawer = new DrawMulti(new DrawRegion("-bottom"), new DrawLiquidTile(Liquids.slag), new DrawDefault(), new DrawHeatOutput());
|
||||||
size = 3;
|
size = 3;
|
||||||
|
itemCapacity = 0;
|
||||||
liquidCapacity = 40f;
|
liquidCapacity = 40f;
|
||||||
rotateDraw = false;
|
rotateDraw = false;
|
||||||
regionRotated1 = 1;
|
regionRotated1 = 1;
|
||||||
@@ -3402,6 +3404,7 @@ public class Blocks{
|
|||||||
reload = 30f;
|
reload = 30f;
|
||||||
inaccuracy = 10f;
|
inaccuracy = 10f;
|
||||||
range = 240f;
|
range = 240f;
|
||||||
|
consumeAmmoOnce = false;
|
||||||
size = 2;
|
size = 2;
|
||||||
scaledHealth = 300;
|
scaledHealth = 300;
|
||||||
shootSound = Sounds.missile;
|
shootSound = Sounds.missile;
|
||||||
@@ -3464,6 +3467,7 @@ public class Blocks{
|
|||||||
size = 2;
|
size = 2;
|
||||||
range = 190f;
|
range = 190f;
|
||||||
reload = 31f;
|
reload = 31f;
|
||||||
|
consumeAmmoOnce = false;
|
||||||
ammoEjectBack = 3f;
|
ammoEjectBack = 3f;
|
||||||
recoil = 3f;
|
recoil = 3f;
|
||||||
shake = 1f;
|
shake = 1f;
|
||||||
@@ -4079,6 +4083,7 @@ public class Blocks{
|
|||||||
|
|
||||||
liquidConsumed = 10f / 60f;
|
liquidConsumed = 10f / 60f;
|
||||||
targetInterval = 5f;
|
targetInterval = 5f;
|
||||||
|
targetUnderBlocks = false;
|
||||||
|
|
||||||
float r = range = 130f;
|
float r = range = 130f;
|
||||||
|
|
||||||
|
|||||||
@@ -8,6 +8,7 @@ import arc.math.geom.*;
|
|||||||
import arc.struct.*;
|
import arc.struct.*;
|
||||||
import arc.util.*;
|
import arc.util.*;
|
||||||
import mindustry.entities.*;
|
import mindustry.entities.*;
|
||||||
|
import mindustry.entities.abilities.*;
|
||||||
import mindustry.gen.*;
|
import mindustry.gen.*;
|
||||||
import mindustry.graphics.*;
|
import mindustry.graphics.*;
|
||||||
import mindustry.type.*;
|
import mindustry.type.*;
|
||||||
@@ -2404,6 +2405,14 @@ public class Fx{
|
|||||||
shieldBreak = new Effect(40, e -> {
|
shieldBreak = new Effect(40, e -> {
|
||||||
color(e.color);
|
color(e.color);
|
||||||
stroke(3f * e.fout());
|
stroke(3f * e.fout());
|
||||||
|
if(e.data instanceof Unit u){
|
||||||
|
var ab = (ForceFieldAbility)Structs.find(u.abilities, a -> a instanceof ForceFieldAbility);
|
||||||
|
if(ab != null){
|
||||||
|
Lines.poly(e.x, e.y, ab.sides, e.rotation + e.fin(), ab.rotation);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
Lines.poly(e.x, e.y, 6, e.rotation + e.fin());
|
Lines.poly(e.x, e.y, 6, e.rotation + e.fin());
|
||||||
}).followParent(true),
|
}).followParent(true),
|
||||||
|
|
||||||
|
|||||||
@@ -2751,7 +2751,7 @@ public class UnitTypes{
|
|||||||
weapons.add(new Weapon("conquer-weapon"){{
|
weapons.add(new Weapon("conquer-weapon"){{
|
||||||
shootSound = Sounds.largeCannon;
|
shootSound = Sounds.largeCannon;
|
||||||
layerOffset = 0.1f;
|
layerOffset = 0.1f;
|
||||||
reload = 110f;
|
reload = 100f;
|
||||||
shootY = 32.5f;
|
shootY = 32.5f;
|
||||||
shake = 5f;
|
shake = 5f;
|
||||||
recoil = 5f;
|
recoil = 5f;
|
||||||
@@ -2823,7 +2823,7 @@ public class UnitTypes{
|
|||||||
}});
|
}});
|
||||||
}
|
}
|
||||||
|
|
||||||
bullet = new BasicBulletType(8f, 330f){{
|
bullet = new BasicBulletType(8f, 360f){{
|
||||||
sprite = "missile-large";
|
sprite = "missile-large";
|
||||||
width = 12f;
|
width = 12f;
|
||||||
height = 20f;
|
height = 20f;
|
||||||
@@ -2862,7 +2862,7 @@ public class UnitTypes{
|
|||||||
float fin = 0.05f + (j + 1) / (float)count;
|
float fin = 0.05f + (j + 1) / (float)count;
|
||||||
float spd = speed;
|
float spd = speed;
|
||||||
float life = lifetime / Mathf.lerp(fin, 1f, 0.5f);
|
float life = lifetime / Mathf.lerp(fin, 1f, 0.5f);
|
||||||
spawnBullets.add(new BasicBulletType(spd * fin, 55){{
|
spawnBullets.add(new BasicBulletType(spd * fin, 60){{
|
||||||
drag = 0.002f;
|
drag = 0.002f;
|
||||||
width = 12f;
|
width = 12f;
|
||||||
height = 11f;
|
height = 11f;
|
||||||
@@ -2879,7 +2879,7 @@ public class UnitTypes{
|
|||||||
weaveScale = (3f + s/2f) / 1.2f;
|
weaveScale = (3f + s/2f) / 1.2f;
|
||||||
weaveMag = i * (4f - fin * 2f);
|
weaveMag = i * (4f - fin * 2f);
|
||||||
|
|
||||||
splashDamage = 60f;
|
splashDamage = 65f;
|
||||||
splashDamageRadius = 30f;
|
splashDamageRadius = 30f;
|
||||||
despawnEffect = new ExplosionEffect(){{
|
despawnEffect = new ExplosionEffect(){{
|
||||||
lifetime = 50f;
|
lifetime = 50f;
|
||||||
@@ -3434,9 +3434,9 @@ public class UnitTypes{
|
|||||||
}});
|
}});
|
||||||
}
|
}
|
||||||
|
|
||||||
bullet = new ArtilleryBulletType(5.5f, 280){{
|
bullet = new ArtilleryBulletType(5.5f, 260){{
|
||||||
collidesTiles = collides = true;
|
collidesTiles = collides = true;
|
||||||
lifetime = 75f;
|
lifetime = 70f;
|
||||||
shootEffect = Fx.shootBigColor;
|
shootEffect = Fx.shootBigColor;
|
||||||
smokeEffect = Fx.shootSmokeSquareBig;
|
smokeEffect = Fx.shootSmokeSquareBig;
|
||||||
frontColor = Color.white;
|
frontColor = Color.white;
|
||||||
@@ -3769,11 +3769,12 @@ public class UnitTypes{
|
|||||||
speed = 1.1f;
|
speed = 1.1f;
|
||||||
rotateSpeed = 3.2f;
|
rotateSpeed = 3.2f;
|
||||||
accel = 0.1f;
|
accel = 0.1f;
|
||||||
health = 8000f;
|
health = 6000f;
|
||||||
armor = 5f;
|
armor = 4f;
|
||||||
hitSize = 36f;
|
hitSize = 36f;
|
||||||
payloadCapacity = Mathf.sqr(3f) * tilePayload;
|
payloadCapacity = Mathf.sqr(3f) * tilePayload;
|
||||||
researchCostMultiplier = 0f;
|
researchCostMultiplier = 0f;
|
||||||
|
targetAir = false;
|
||||||
|
|
||||||
engineSize = 4.8f;
|
engineSize = 4.8f;
|
||||||
engineOffset = 61 / 4f;
|
engineOffset = 61 / 4f;
|
||||||
@@ -3800,11 +3801,13 @@ public class UnitTypes{
|
|||||||
shake = 1f;
|
shake = 1f;
|
||||||
speed = 0f;
|
speed = 0f;
|
||||||
keepVelocity = false;
|
keepVelocity = false;
|
||||||
|
collidesAir = false;
|
||||||
|
|
||||||
spawnUnit = new MissileUnitType("quell-missile"){{
|
spawnUnit = new MissileUnitType("quell-missile"){{
|
||||||
|
targetAir = false;
|
||||||
speed = 4.3f;
|
speed = 4.3f;
|
||||||
maxRange = 6f;
|
maxRange = 6f;
|
||||||
lifetime = 60f * 1.6f;
|
lifetime = 60f * 1.4f;
|
||||||
outlineColor = Pal.darkOutline;
|
outlineColor = Pal.darkOutline;
|
||||||
engineColor = trailColor = Pal.sapBulletBack;
|
engineColor = trailColor = Pal.sapBulletBack;
|
||||||
engineLayer = Layer.effect;
|
engineLayer = Layer.effect;
|
||||||
@@ -3818,6 +3821,7 @@ public class UnitTypes{
|
|||||||
shootOnDeath = true;
|
shootOnDeath = true;
|
||||||
bullet = new ExplosionBulletType(110f, 25f){{
|
bullet = new ExplosionBulletType(110f, 25f){{
|
||||||
shootEffect = Fx.massiveExplosion;
|
shootEffect = Fx.massiveExplosion;
|
||||||
|
collidesAir = false;
|
||||||
}};
|
}};
|
||||||
}});
|
}});
|
||||||
}};
|
}};
|
||||||
@@ -3844,6 +3848,7 @@ public class UnitTypes{
|
|||||||
armor = 9f;
|
armor = 9f;
|
||||||
hitSize = 46f;
|
hitSize = 46f;
|
||||||
payloadCapacity = Mathf.sqr(6f) * tilePayload;
|
payloadCapacity = Mathf.sqr(6f) * tilePayload;
|
||||||
|
targetAir = false;
|
||||||
|
|
||||||
engineSize = 6f;
|
engineSize = 6f;
|
||||||
engineOffset = 25.25f;
|
engineOffset = 25.25f;
|
||||||
@@ -3909,8 +3914,10 @@ public class UnitTypes{
|
|||||||
shake = 1f;
|
shake = 1f;
|
||||||
speed = 0f;
|
speed = 0f;
|
||||||
keepVelocity = false;
|
keepVelocity = false;
|
||||||
|
collidesAir = false;
|
||||||
|
|
||||||
spawnUnit = new MissileUnitType("disrupt-missile"){{
|
spawnUnit = new MissileUnitType("disrupt-missile"){{
|
||||||
|
targetAir = false;
|
||||||
speed = 4.6f;
|
speed = 4.6f;
|
||||||
maxRange = 5f;
|
maxRange = 5f;
|
||||||
outlineColor = Pal.darkOutline;
|
outlineColor = Pal.darkOutline;
|
||||||
@@ -3949,6 +3956,7 @@ public class UnitTypes{
|
|||||||
reload = 1f;
|
reload = 1f;
|
||||||
shootOnDeath = true;
|
shootOnDeath = true;
|
||||||
bullet = new ExplosionBulletType(140f, 25f){{
|
bullet = new ExplosionBulletType(140f, 25f){{
|
||||||
|
collidesAir = false;
|
||||||
suppressionRange = 140f;
|
suppressionRange = 140f;
|
||||||
shootEffect = new ExplosionEffect(){{
|
shootEffect = new ExplosionEffect(){{
|
||||||
lifetime = 50f;
|
lifetime = 50f;
|
||||||
|
|||||||
@@ -193,7 +193,7 @@ public class Control implements ApplicationListener, Loadable{
|
|||||||
if(!settings.getBool("skipcoreanimation") && !state.rules.pvp){
|
if(!settings.getBool("skipcoreanimation") && !state.rules.pvp){
|
||||||
coreDelay = coreLandDuration;
|
coreDelay = coreLandDuration;
|
||||||
//delay player respawn so animation can play.
|
//delay player respawn so animation can play.
|
||||||
player.deathTimer = -80f;
|
player.deathTimer = Player.deathDelay - coreLandDuration;
|
||||||
//TODO this sounds pretty bad due to conflict
|
//TODO this sounds pretty bad due to conflict
|
||||||
if(settings.getInt("musicvol") > 0){
|
if(settings.getInt("musicvol") > 0){
|
||||||
Musics.land.stop();
|
Musics.land.stop();
|
||||||
|
|||||||
@@ -383,12 +383,18 @@ public class Logic implements ApplicationListener{
|
|||||||
public static void researched(Content content){
|
public static void researched(Content content){
|
||||||
if(!(content instanceof UnlockableContent u)) return;
|
if(!(content instanceof UnlockableContent u)) return;
|
||||||
|
|
||||||
|
boolean was = u.unlockedNow();
|
||||||
state.rules.researched.add(u.name);
|
state.rules.researched.add(u.name);
|
||||||
|
|
||||||
|
if(!was){
|
||||||
|
Events.fire(new UnlockEvent(u));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void dispose(){
|
public void dispose(){
|
||||||
//save the settings before quitting
|
//save the settings before quitting
|
||||||
|
netServer.admins.forceSave();
|
||||||
Core.settings.manualSave();
|
Core.settings.manualSave();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -398,9 +404,12 @@ public class Logic implements ApplicationListener{
|
|||||||
universe.updateGlobal();
|
universe.updateGlobal();
|
||||||
|
|
||||||
if(Core.settings.modified() && !state.isPlaying()){
|
if(Core.settings.modified() && !state.isPlaying()){
|
||||||
|
netServer.admins.forceSave();
|
||||||
Core.settings.forceSave();
|
Core.settings.forceSave();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
boolean runStateCheck = !net.client() && !world.isInvalidMap() && !state.isEditor() && state.rules.canGameOver;
|
||||||
|
|
||||||
if(state.isGame()){
|
if(state.isGame()){
|
||||||
if(!net.client()){
|
if(!net.client()){
|
||||||
state.enemies = Groups.unit.count(u -> u.team() == state.rules.waveTeam && u.isEnemy());
|
state.enemies = Groups.unit.count(u -> u.team() == state.rules.waveTeam && u.isEnemy());
|
||||||
@@ -466,9 +475,11 @@ public class Logic implements ApplicationListener{
|
|||||||
Groups.update();
|
Groups.update();
|
||||||
}
|
}
|
||||||
|
|
||||||
if(!net.client() && !world.isInvalidMap() && !state.isEditor() && state.rules.canGameOver){
|
if(runStateCheck){
|
||||||
checkGameState();
|
checkGameState();
|
||||||
}
|
}
|
||||||
|
}else if(netServer.isWaitingForPlayers() && runStateCheck){
|
||||||
|
checkGameState();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -435,8 +435,9 @@ public class NetClient implements ApplicationListener{
|
|||||||
for(int j = 0; j < amount; j++){
|
for(int j = 0; j < amount; j++){
|
||||||
readSyncEntity(input, Reads.get(input));
|
readSyncEntity(input, Reads.get(input));
|
||||||
}
|
}
|
||||||
}catch(IOException e){
|
}catch(Exception e){
|
||||||
throw new RuntimeException(e);
|
//don't disconnect, just log it
|
||||||
|
Log.err("Error reading entity snapshot", e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -9,7 +9,6 @@ import arc.struct.*;
|
|||||||
import arc.util.*;
|
import arc.util.*;
|
||||||
import arc.util.CommandHandler.*;
|
import arc.util.CommandHandler.*;
|
||||||
import arc.util.io.*;
|
import arc.util.io.*;
|
||||||
import arc.util.serialization.*;
|
|
||||||
import mindustry.annotations.Annotations.*;
|
import mindustry.annotations.Annotations.*;
|
||||||
import mindustry.content.*;
|
import mindustry.content.*;
|
||||||
import mindustry.core.GameState.*;
|
import mindustry.core.GameState.*;
|
||||||
@@ -138,15 +137,6 @@ public class NetServer implements ApplicationListener{
|
|||||||
con.connectTime = Time.millis();
|
con.connectTime = Time.millis();
|
||||||
|
|
||||||
String uuid = packet.uuid;
|
String uuid = packet.uuid;
|
||||||
byte[] buuid = Base64Coder.decode(uuid);
|
|
||||||
CRC32 crc = new CRC32();
|
|
||||||
crc.update(buuid, 0, 8);
|
|
||||||
ByteBuffer buff = ByteBuffer.allocate(8);
|
|
||||||
buff.put(buuid, 8, 8);
|
|
||||||
if(crc.getValue() != buff.getLong(0)){
|
|
||||||
con.kick(KickReason.clientOutdated);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
if(admins.isIPBanned(con.address) || admins.isSubnetBanned(con.address)) return;
|
if(admins.isIPBanned(con.address) || admins.isSubnetBanned(con.address)) return;
|
||||||
|
|
||||||
@@ -195,6 +185,7 @@ public class NetServer implements ApplicationListener{
|
|||||||
result.append("Unnecessary mods:[lightgray]\n").append("> ").append(extraMods.toString("\n> "));
|
result.append("Unnecessary mods:[lightgray]\n").append("> ").append(extraMods.toString("\n> "));
|
||||||
}
|
}
|
||||||
con.kick(result.toString(), 0);
|
con.kick(result.toString(), 0);
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(!admins.isWhitelisted(packet.uuid, packet.usid)){
|
if(!admins.isWhitelisted(packet.uuid, packet.usid)){
|
||||||
@@ -869,7 +860,7 @@ public class NetServer implements ApplicationListener{
|
|||||||
}
|
}
|
||||||
|
|
||||||
if(state.isGame() && net.server()){
|
if(state.isGame() && net.server()){
|
||||||
if(state.rules.pvp){
|
if(state.rules.pvp && state.rules.pvpAutoPause){
|
||||||
boolean waiting = isWaitingForPlayers(), paused = state.isPaused();
|
boolean waiting = isWaitingForPlayers(), paused = state.isPaused();
|
||||||
if(waiting != paused){
|
if(waiting != paused){
|
||||||
if(waiting){
|
if(waiting){
|
||||||
@@ -1003,7 +994,7 @@ public class NetServer implements ApplicationListener{
|
|||||||
player.con.snapshotsSent++;
|
player.con.snapshotsSent++;
|
||||||
}
|
}
|
||||||
|
|
||||||
String fixName(String name){
|
public String fixName(String name){
|
||||||
name = name.trim().replace("\n", "").replace("\t", "");
|
name = name.trim().replace("\n", "").replace("\t", "");
|
||||||
if(name.equals("[") || name.equals("]")){
|
if(name.equals("[") || name.equals("]")){
|
||||||
return "";
|
return "";
|
||||||
@@ -1027,7 +1018,7 @@ public class NetServer implements ApplicationListener{
|
|||||||
return result.toString();
|
return result.toString();
|
||||||
}
|
}
|
||||||
|
|
||||||
static String checkColor(String str){
|
public String checkColor(String str){
|
||||||
for(int i = 1; i < str.length(); i++){
|
for(int i = 1; i < str.length(); i++){
|
||||||
if(str.charAt(i) == ']'){
|
if(str.charAt(i) == ']'){
|
||||||
String color = str.substring(1, i);
|
String color = str.substring(1, i);
|
||||||
|
|||||||
@@ -32,7 +32,6 @@ public class Renderer implements ApplicationListener{
|
|||||||
private static final float cloudScaling = 1700f, cfinScl = -2f, cfinOffset = 0.3f, calphaFinOffset = 0.25f;
|
private static final float cloudScaling = 1700f, cfinScl = -2f, cfinOffset = 0.3f, calphaFinOffset = 0.25f;
|
||||||
private static final float[] cloudAlphas = {0, 0.5f, 1f, 0.1f, 0, 0f};
|
private static final float[] cloudAlphas = {0, 0.5f, 1f, 0.1f, 0, 0f};
|
||||||
private static final float cloudAlpha = 0.81f;
|
private static final float cloudAlpha = 0.81f;
|
||||||
private static final float[] thrusterSizes = {0f, 0f, 0f, 0f, 0.3f, 1f, 1f, 1f, 1f, 1f, 1f, 1f, 1f, 0f};
|
|
||||||
private static final Interp landInterp = Interp.pow3;
|
private static final Interp landInterp = Interp.pow3;
|
||||||
|
|
||||||
public final BlockRenderer blocks = new BlockRenderer();
|
public final BlockRenderer blocks = new BlockRenderer();
|
||||||
@@ -174,13 +173,14 @@ public class Renderer implements ApplicationListener{
|
|||||||
laserOpacity = settings.getInt("lasersopacity") / 100f;
|
laserOpacity = settings.getInt("lasersopacity") / 100f;
|
||||||
bridgeOpacity = settings.getInt("bridgeopacity") / 100f;
|
bridgeOpacity = settings.getInt("bridgeopacity") / 100f;
|
||||||
animateShields = settings.getBool("animatedshields");
|
animateShields = settings.getBool("animatedshields");
|
||||||
drawStatus = Core.settings.getBool("blockstatus");
|
drawStatus = settings.getBool("blockstatus");
|
||||||
enableEffects = settings.getBool("effects");
|
enableEffects = settings.getBool("effects");
|
||||||
drawDisplays = !settings.getBool("hidedisplays");
|
drawDisplays = !settings.getBool("hidedisplays");
|
||||||
|
|
||||||
if(landTime > 0){
|
if(landTime > 0){
|
||||||
if(!state.isPaused()){
|
if(!state.isPaused()){
|
||||||
updateLandParticles();
|
CoreBuild build = landCore == null ? player.bestCore() : landCore;
|
||||||
|
build.updateLandParticles();
|
||||||
}
|
}
|
||||||
|
|
||||||
if(!state.isPaused()){
|
if(!state.isPaused()){
|
||||||
@@ -453,63 +453,26 @@ public class Renderer implements ApplicationListener{
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void updateLandParticles(){
|
|
||||||
float time = launching ? coreLandDuration - landTime : landTime;
|
|
||||||
float tsize = Mathf.sample(thrusterSizes, (time + 35f) / coreLandDuration);
|
|
||||||
|
|
||||||
landPTimer += tsize * Time.delta;
|
|
||||||
if(landCore != null && landPTimer >= 1f){
|
|
||||||
landCore.tile.getLinkedTiles(t -> {
|
|
||||||
if(Mathf.chance(0.4f)){
|
|
||||||
Fx.coreLandDust.at(t.worldx(), t.worldy(), landCore.angleTo(t) + Mathf.range(30f), Tmp.c1.set(t.floor().mapColor).mul(1.5f + Mathf.range(0.15f)));
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
landPTimer = 0f;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void drawLanding(){
|
void drawLanding(){
|
||||||
CoreBuild build = landCore == null ? player.bestCore() : landCore;
|
CoreBuild build = landCore == null ? player.bestCore() : landCore;
|
||||||
var clouds = assets.get("sprites/clouds.png", Texture.class);
|
var clouds = assets.get("sprites/clouds.png", Texture.class);
|
||||||
if(landTime > 0 && build != null){
|
if(landTime > 0 && build != null){
|
||||||
float fout = landTime / coreLandDuration;
|
float fout = landTime / coreLandDuration;
|
||||||
|
|
||||||
if(launching) fout = 1f - fout;
|
if(launching) fout = 1f - fout;
|
||||||
|
|
||||||
float fin = 1f - fout;
|
float fin = 1f - fout;
|
||||||
|
|
||||||
//draw core
|
|
||||||
var block = launching && launchCoreType != null ? launchCoreType : (CoreBlock)build.block;
|
|
||||||
TextureRegion reg = block.fullIcon;
|
|
||||||
float scl = Scl.scl(4f) / camerascale;
|
float scl = Scl.scl(4f) / camerascale;
|
||||||
float shake = 0f;
|
|
||||||
float s = reg.width * reg.scl() * scl * 3.6f * Interp.pow2Out.apply(fout);
|
|
||||||
float rotation = Interp.pow2In.apply(fout) * 135f, x = build.x + Mathf.range(shake), y = build.y + Mathf.range(shake);
|
|
||||||
float thrustOpen = 0.25f;
|
|
||||||
float thrusterFrame = fin >= thrustOpen ? 1f : fin / thrustOpen;
|
|
||||||
float thrusterSize = Mathf.sample(thrusterSizes, fin);
|
|
||||||
|
|
||||||
//when launching, thrusters stay out the entire time.
|
|
||||||
if(launching){
|
|
||||||
Interp i = Interp.pow2Out;
|
|
||||||
thrusterFrame = i.apply(Mathf.clamp(fout*13f));
|
|
||||||
thrusterSize = i.apply(Mathf.clamp(fout*9f));
|
|
||||||
}
|
|
||||||
|
|
||||||
Draw.color(Pal.lightTrail);
|
|
||||||
//TODO spikier heat
|
|
||||||
Draw.rect("circle-shadow", x, y, s, s);
|
|
||||||
|
|
||||||
Draw.color(Pal.lightTrail);
|
|
||||||
|
|
||||||
float pfin = Interp.pow3Out.apply(fin), pf = Interp.pow2In.apply(fout);
|
float pfin = Interp.pow3Out.apply(fin), pf = Interp.pow2In.apply(fout);
|
||||||
|
|
||||||
//draw particles
|
//draw particles
|
||||||
|
Draw.color(Pal.lightTrail);
|
||||||
Angles.randLenVectors(1, pfin, 100, 800f * scl * pfin, (ax, ay, ffin, ffout) -> {
|
Angles.randLenVectors(1, pfin, 100, 800f * scl * pfin, (ax, ay, ffin, ffout) -> {
|
||||||
Lines.stroke(scl * ffin * pf * 3f);
|
Lines.stroke(scl * ffin * pf * 3f);
|
||||||
Lines.lineAngle(build.x + ax, build.y + ay, Mathf.angle(ax, ay), (ffin * 20 + 1f) * scl);
|
Lines.lineAngle(build.x + ax, build.y + ay, Mathf.angle(ax, ay), (ffin * 20 + 1f) * scl);
|
||||||
});
|
});
|
||||||
|
Draw.color();
|
||||||
|
|
||||||
|
CoreBlock block = launching && launchCoreType != null ? launchCoreType : (CoreBlock)build.block;
|
||||||
|
block.drawLanding(build, build.x, build.y);
|
||||||
|
|
||||||
Draw.color();
|
Draw.color();
|
||||||
Draw.mixcol(Color.white, Interp.pow5In.apply(fout));
|
Draw.mixcol(Color.white, Interp.pow5In.apply(fout));
|
||||||
@@ -522,44 +485,6 @@ public class Renderer implements ApplicationListener{
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Draw.scl(scl);
|
|
||||||
|
|
||||||
Draw.alpha(1f);
|
|
||||||
|
|
||||||
//draw thruster flame
|
|
||||||
float strength = (1f + (block.size - 3)/2.5f) * scl * thrusterSize * (0.95f + Mathf.absin(2f, 0.1f));
|
|
||||||
float offset = (block.size - 3) * 3f * scl;
|
|
||||||
|
|
||||||
for(int i = 0; i < 4; i++){
|
|
||||||
Tmp.v1.trns(i * 90 + rotation, 1f);
|
|
||||||
|
|
||||||
Tmp.v1.setLength((block.size * tilesize/2f + 1f)*scl + strength*2f + offset);
|
|
||||||
Draw.color(build.team.color);
|
|
||||||
Fill.circle(Tmp.v1.x + x, Tmp.v1.y + y, 6f * strength);
|
|
||||||
|
|
||||||
Tmp.v1.setLength((block.size * tilesize/2f + 1f)*scl + strength*0.5f + offset);
|
|
||||||
Draw.color(Color.white);
|
|
||||||
Fill.circle(Tmp.v1.x + x, Tmp.v1.y + y, 3.5f * strength);
|
|
||||||
}
|
|
||||||
|
|
||||||
drawThrusters(block, x, y, rotation, thrusterFrame);
|
|
||||||
|
|
||||||
Drawf.spinSprite(block.region, x, y, rotation);
|
|
||||||
|
|
||||||
Draw.alpha(Interp.pow4In.apply(thrusterFrame));
|
|
||||||
drawThrusters(block, x, y, rotation, thrusterFrame);
|
|
||||||
Draw.alpha(1f);
|
|
||||||
|
|
||||||
if(block.teamRegions[build.team.id] == block.teamRegion) Draw.color(build.team.color);
|
|
||||||
|
|
||||||
Drawf.spinSprite(block.teamRegions[build.team.id], x, y, rotation);
|
|
||||||
|
|
||||||
Draw.color();
|
|
||||||
|
|
||||||
Draw.scl();
|
|
||||||
|
|
||||||
Draw.reset();
|
|
||||||
|
|
||||||
//draw clouds
|
//draw clouds
|
||||||
if(state.rules.cloudColor.a > 0.0001f){
|
if(state.rules.cloudColor.a > 0.0001f){
|
||||||
float scaling = cloudScaling;
|
float scaling = cloudScaling;
|
||||||
@@ -582,32 +507,6 @@ public class Renderer implements ApplicationListener{
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void drawThrusters(CoreBlock block, float x, float y, float rotation, float frame){
|
|
||||||
float length = block.thrusterLength * (frame - 1f) - 1f/4f;
|
|
||||||
float alpha = Draw.getColor().a;
|
|
||||||
|
|
||||||
//two passes for consistent lighting
|
|
||||||
for(int j = 0; j < 2; j++){
|
|
||||||
for(int i = 0; i < 4; i++){
|
|
||||||
var reg = i >= 2 ? block.thruster2 : block.thruster1;
|
|
||||||
float rot = (i * 90) + rotation % 90f;
|
|
||||||
Tmp.v1.trns(rot, length * Draw.xscl);
|
|
||||||
|
|
||||||
//second pass applies extra layer of shading
|
|
||||||
if(j == 1){
|
|
||||||
Tmp.v1.rotate(-90f);
|
|
||||||
Draw.alpha((rotation % 90f) / 90f * alpha);
|
|
||||||
rot -= 90f;
|
|
||||||
Draw.rect(reg, x + Tmp.v1.x, y + Tmp.v1.y, rot);
|
|
||||||
}else{
|
|
||||||
Draw.alpha(alpha);
|
|
||||||
Draw.rect(reg, x + Tmp.v1.x, y + Tmp.v1.y, rot);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
Draw.alpha(1f);
|
|
||||||
}
|
|
||||||
|
|
||||||
public void scaleCamera(float amount){
|
public void scaleCamera(float amount){
|
||||||
targetscale *= (amount / 4) + 1;
|
targetscale *= (amount / 4) + 1;
|
||||||
clampScale();
|
clampScale();
|
||||||
@@ -638,6 +537,26 @@ public class Renderer implements ApplicationListener{
|
|||||||
clampScale();
|
clampScale();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public boolean isLaunching(){
|
||||||
|
return launching;
|
||||||
|
}
|
||||||
|
|
||||||
|
public CoreBlock getLaunchCoreType(){
|
||||||
|
return launchCoreType;
|
||||||
|
}
|
||||||
|
|
||||||
|
public float getLandTime(){
|
||||||
|
return landTime;
|
||||||
|
}
|
||||||
|
|
||||||
|
public float getLandPTimer(){
|
||||||
|
return landPTimer;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setLandPTimer(float landPTimer){
|
||||||
|
this.landPTimer = landPTimer;
|
||||||
|
}
|
||||||
|
|
||||||
public void showLanding(){
|
public void showLanding(){
|
||||||
launching = false;
|
launching = false;
|
||||||
camerascale = minZoomScl;
|
camerascale = minZoomScl;
|
||||||
|
|||||||
@@ -75,6 +75,8 @@ public class UI implements ApplicationListener, Loadable{
|
|||||||
public FullTextDialog fullText;
|
public FullTextDialog fullText;
|
||||||
public CampaignCompleteDialog campaignComplete;
|
public CampaignCompleteDialog campaignComplete;
|
||||||
|
|
||||||
|
public IntMap<Dialog> followUpMenus;
|
||||||
|
|
||||||
public Cursor drillCursor, unloadCursor, targetCursor;
|
public Cursor drillCursor, unloadCursor, targetCursor;
|
||||||
|
|
||||||
private @Nullable Element lastAnnouncement;
|
private @Nullable Element lastAnnouncement;
|
||||||
@@ -202,6 +204,7 @@ public class UI implements ApplicationListener, Loadable{
|
|||||||
logic = new LogicDialog();
|
logic = new LogicDialog();
|
||||||
fullText = new FullTextDialog();
|
fullText = new FullTextDialog();
|
||||||
campaignComplete = new CampaignCompleteDialog();
|
campaignComplete = new CampaignCompleteDialog();
|
||||||
|
followUpMenus = new IntMap<>();
|
||||||
|
|
||||||
Group group = Core.scene.root;
|
Group group = Core.scene.root;
|
||||||
|
|
||||||
@@ -261,28 +264,32 @@ public class UI implements ApplicationListener, Loadable{
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
public void showTextInput(String titleText, String dtext, int textLength, String def, boolean inumeric, Cons<String> confirmed){
|
public void showTextInput(String titleText, String text, int textLength, String def, boolean numbers, Cons<String> confirmed, Runnable closed){
|
||||||
if(mobile){
|
if(mobile){
|
||||||
Core.input.getTextInput(new TextInput(){{
|
Core.input.getTextInput(new TextInput(){{
|
||||||
this.title = (titleText.startsWith("@") ? Core.bundle.get(titleText.substring(1)) : titleText);
|
this.title = (titleText.startsWith("@") ? Core.bundle.get(titleText.substring(1)) : titleText);
|
||||||
this.text = def;
|
this.text = def;
|
||||||
this.numeric = inumeric;
|
this.numeric = numbers;
|
||||||
this.maxLength = textLength;
|
this.maxLength = textLength;
|
||||||
this.accepted = confirmed;
|
this.accepted = confirmed;
|
||||||
this.allowEmpty = false;
|
this.allowEmpty = false;
|
||||||
}});
|
}});
|
||||||
}else{
|
}else{
|
||||||
new Dialog(titleText){{
|
new Dialog(titleText){{
|
||||||
cont.margin(30).add(dtext).padRight(6f);
|
cont.margin(30).add(text).padRight(6f);
|
||||||
TextFieldFilter filter = inumeric ? TextFieldFilter.digitsOnly : (f, c) -> true;
|
TextFieldFilter filter = numbers ? TextFieldFilter.digitsOnly : (f, c) -> true;
|
||||||
TextField field = cont.field(def, t -> {}).size(330f, 50f).get();
|
TextField field = cont.field(def, t -> {}).size(330f, 50f).get();
|
||||||
field.setFilter((f, c) -> field.getText().length() < textLength && filter.acceptChar(f, c));
|
field.setFilter((f, c) -> field.getText().length() < textLength && filter.acceptChar(f, c));
|
||||||
buttons.defaults().size(120, 54).pad(4);
|
buttons.defaults().size(120, 54).pad(4);
|
||||||
buttons.button("@cancel", this::hide);
|
buttons.button("@cancel", () -> {
|
||||||
|
closed.run();
|
||||||
|
hide();
|
||||||
|
});
|
||||||
buttons.button("@ok", () -> {
|
buttons.button("@ok", () -> {
|
||||||
confirmed.get(field.getText());
|
confirmed.get(field.getText());
|
||||||
hide();
|
hide();
|
||||||
}).disabled(b -> field.getText().isEmpty());
|
}).disabled(b -> field.getText().isEmpty());
|
||||||
|
|
||||||
keyDown(KeyCode.enter, () -> {
|
keyDown(KeyCode.enter, () -> {
|
||||||
String text = field.getText();
|
String text = field.getText();
|
||||||
if(!text.isEmpty()){
|
if(!text.isEmpty()){
|
||||||
@@ -290,9 +297,10 @@ public class UI implements ApplicationListener, Loadable{
|
|||||||
hide();
|
hide();
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
keyDown(KeyCode.escape, this::hide);
|
|
||||||
keyDown(KeyCode.back, this::hide);
|
closeOnBack(closed);
|
||||||
show();
|
show();
|
||||||
|
|
||||||
Core.scene.setKeyboardFocus(field);
|
Core.scene.setKeyboardFocus(field);
|
||||||
field.setCursorPosition(def.length());
|
field.setCursorPosition(def.length());
|
||||||
}};
|
}};
|
||||||
@@ -303,8 +311,12 @@ public class UI implements ApplicationListener, Loadable{
|
|||||||
showTextInput(title, text, 32, def, confirmed);
|
showTextInput(title, text, 32, def, confirmed);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void showTextInput(String titleText, String text, int textLength, String def, Cons<String> confirmed){
|
public void showTextInput(String title, String text, int textLength, String def, Cons<String> confirmed){
|
||||||
showTextInput(titleText, text, textLength, def, false, confirmed);
|
showTextInput(title, text, textLength, def, false, confirmed);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void showTextInput(String title, String text, int textLength, String def, boolean numeric, Cons<String> confirmed){
|
||||||
|
showTextInput(title, text, textLength, def, numeric, confirmed, () -> {});
|
||||||
}
|
}
|
||||||
|
|
||||||
public void showInfoFade(String info){
|
public void showInfoFade(String info){
|
||||||
@@ -322,6 +334,24 @@ public class UI implements ApplicationListener, Loadable{
|
|||||||
Core.scene.add(table);
|
Core.scene.add(table);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void addDescTooltip(Element elem, String description){
|
||||||
|
if(description == null) return;
|
||||||
|
|
||||||
|
elem.addListener(new Tooltip(t -> t.background(Styles.black8).margin(4f).add(description).color(Color.lightGray)){
|
||||||
|
{
|
||||||
|
allowMobile = true;
|
||||||
|
}
|
||||||
|
@Override
|
||||||
|
protected void setContainerPosition(Element element, float x, float y){
|
||||||
|
this.targetActor = element;
|
||||||
|
Vec2 pos = element.localToStageCoordinates(Tmp.v1.set(0, 0));
|
||||||
|
container.pack();
|
||||||
|
container.setPosition(pos.x, pos.y, Align.topLeft);
|
||||||
|
container.setOrigin(0, element.getHeight());
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
/** Shows a fading label at the top of the screen. */
|
/** Shows a fading label at the top of the screen. */
|
||||||
public void showInfoToast(String info, float duration){
|
public void showInfoToast(String info, float duration){
|
||||||
var cinfo = Core.scene.find("coreinfo");
|
var cinfo = Core.scene.find("coreinfo");
|
||||||
@@ -419,6 +449,8 @@ public class UI implements ApplicationListener, Loadable{
|
|||||||
}
|
}
|
||||||
|
|
||||||
public void showException(String text, Throwable exc){
|
public void showException(String text, Throwable exc){
|
||||||
|
if(loadfrag == null) return;
|
||||||
|
|
||||||
loadfrag.hide();
|
loadfrag.hide();
|
||||||
new Dialog(""){{
|
new Dialog(""){{
|
||||||
String message = Strings.getFinalMessage(exc);
|
String message = Strings.getFinalMessage(exc);
|
||||||
@@ -562,17 +594,12 @@ public class UI implements ApplicationListener, Loadable{
|
|||||||
dialog.show();
|
dialog.show();
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Shows a menu that fires a callback when an option is selected. If nothing is selected, -1 is returned. */
|
public Dialog newMenuDialog(String title, String message, String[][] options, Intc buttonListener, Runnable closeOnBack){
|
||||||
public void showMenu(String title, String message, String[][] options, Intc callback){
|
return new Dialog(title){{
|
||||||
new Dialog("[accent]" + title){{
|
|
||||||
setFillParent(true);
|
setFillParent(true);
|
||||||
removeChild(titleTable);
|
removeChild(titleTable);
|
||||||
cont.add(titleTable).width(400f);
|
cont.add(titleTable).width(400f);
|
||||||
|
|
||||||
getStyle().titleFontColor = Color.white;
|
|
||||||
title.getStyle().fontColor = Color.white;
|
|
||||||
title.setStyle(title.getStyle());
|
|
||||||
|
|
||||||
cont.row();
|
cont.row();
|
||||||
cont.image().width(400f).pad(2).colspan(2).height(4f).color(Pal.accent).bottom();
|
cont.image().width(400f).pad(2).colspan(2).height(4f).color(Pal.accent).bottom();
|
||||||
cont.row();
|
cont.row();
|
||||||
@@ -592,16 +619,46 @@ public class UI implements ApplicationListener, Loadable{
|
|||||||
|
|
||||||
String optionName = optionsRow[i];
|
String optionName = optionsRow[i];
|
||||||
int finalOption = option;
|
int finalOption = option;
|
||||||
buttonRow.button(optionName, () -> {
|
buttonRow.button(optionName, () -> buttonListener.get(finalOption))
|
||||||
callback.get(finalOption);
|
.size(i == optionsRow.length - 1 ? lastWidth : width, 50).pad(4);
|
||||||
hide();
|
|
||||||
}).size(i == optionsRow.length - 1 ? lastWidth : width, 50).pad(4);
|
|
||||||
option++;
|
option++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}).growX();
|
}).growX();
|
||||||
closeOnBack(() -> callback.get(-1));
|
closeOnBack(closeOnBack);
|
||||||
}}.show();
|
}};
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Shows a menu that fires a callback when an option is selected. If nothing is selected, -1 is returned. */
|
||||||
|
public void showMenu(String title, String message, String[][] options, Intc callback){
|
||||||
|
newMenuDialog(title, message, options, option -> {
|
||||||
|
callback.get(option);
|
||||||
|
hide();
|
||||||
|
}, () -> callback.get(-1)).show();
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Shows a menu that hides when another followUp-menu is shown or when nothing is selected.
|
||||||
|
* @see UI#showMenu(String, String, String[][], Intc) */
|
||||||
|
public void showFollowUpMenu(int menuId, String title, String message, String[][] options, Intc callback) {
|
||||||
|
|
||||||
|
Dialog dialog = newMenuDialog(title, message, options, callback, () -> {
|
||||||
|
followUpMenus.remove(menuId);
|
||||||
|
callback.get(-1);
|
||||||
|
});
|
||||||
|
|
||||||
|
Dialog oldDialog = followUpMenus.remove(menuId);
|
||||||
|
if(oldDialog != null){
|
||||||
|
dialog.show(Core.scene, null);
|
||||||
|
oldDialog.hide(null);
|
||||||
|
}else{
|
||||||
|
dialog.show();
|
||||||
|
}
|
||||||
|
followUpMenus.put(menuId, dialog);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void hideFollowUpMenu(int menuId) {
|
||||||
|
if(!followUpMenus.containsKey(menuId)) return;
|
||||||
|
followUpMenus.remove(menuId).hide();
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Formats time with hours:minutes:seconds. */
|
/** Formats time with hours:minutes:seconds. */
|
||||||
|
|||||||
@@ -160,7 +160,7 @@ public class Damage{
|
|||||||
//add distance to list so it can be processed
|
//add distance to list so it can be processed
|
||||||
var build = world.build(x, y);
|
var build = world.build(x, y);
|
||||||
|
|
||||||
if(build != null && build.team != b.team && b.checkUnderBuild(build, x * tilesize, y * tilesize)){
|
if(build != null && build.team != b.team && build.collide(b) && b.checkUnderBuild(build, x * tilesize, y * tilesize)){
|
||||||
distances.add(b.dst(build));
|
distances.add(b.dst(build));
|
||||||
|
|
||||||
if(b.type.laserAbsorb && build.absorbLasers()){
|
if(b.type.laserAbsorb && build.absorbLasers()){
|
||||||
@@ -237,7 +237,8 @@ public class Damage{
|
|||||||
seg2.set(seg1).add(vec);
|
seg2.set(seg1).add(vec);
|
||||||
World.raycastEachWorld(x, y, seg2.x, seg2.y, (cx, cy) -> {
|
World.raycastEachWorld(x, y, seg2.x, seg2.y, (cx, cy) -> {
|
||||||
Building tile = world.build(cx, cy);
|
Building tile = world.build(cx, cy);
|
||||||
boolean collide = tile != null && hitter.checkUnderBuild(tile, cx * tilesize, cy * tilesize) && collidedBlocks.add(tile.pos());
|
boolean collide = tile != null && tile.collide(hitter) && hitter.checkUnderBuild(tile, cx * tilesize, cy * tilesize)
|
||||||
|
&& ((tile.team != team && tile.collide(hitter)) || hitter.type.testCollision(hitter, tile)) && collidedBlocks.add(tile.pos());
|
||||||
if(collide){
|
if(collide){
|
||||||
collided.add(collidePool.obtain().set(cx * tilesize, cy * tilesize, tile));
|
collided.add(collidePool.obtain().set(cx * tilesize, cy * tilesize, tile));
|
||||||
|
|
||||||
@@ -275,17 +276,19 @@ public class Damage{
|
|||||||
int[] collideCount = {0};
|
int[] collideCount = {0};
|
||||||
collided.sort(c -> hitter.dst2(c.x, c.y));
|
collided.sort(c -> hitter.dst2(c.x, c.y));
|
||||||
collided.each(c -> {
|
collided.each(c -> {
|
||||||
if(hitter.damage > 0 && (pierceCap <= 0 || collideCount[0]++ < pierceCap)){
|
if(hitter.damage > 0 && (pierceCap <= 0 || collideCount[0] < pierceCap)){
|
||||||
if(c.target instanceof Unit u){
|
if(c.target instanceof Unit u){
|
||||||
effect.at(c.x, c.y);
|
effect.at(c.x, c.y);
|
||||||
u.collision(hitter, c.x, c.y);
|
u.collision(hitter, c.x, c.y);
|
||||||
hitter.collision(u, c.x, c.y);
|
hitter.collision(u, c.x, c.y);
|
||||||
|
collideCount[0]++;
|
||||||
}else if(c.target instanceof Building tile){
|
}else if(c.target instanceof Building tile){
|
||||||
float health = tile.health;
|
float health = tile.health;
|
||||||
|
|
||||||
if(tile.team != team && tile.collide(hitter)){
|
if(tile.team != team && tile.collide(hitter)){
|
||||||
tile.collision(hitter);
|
tile.collision(hitter);
|
||||||
hitter.type.hit(hitter, c.x, c.y);
|
hitter.type.hit(hitter, c.x, c.y);
|
||||||
|
collideCount[0]++;
|
||||||
}
|
}
|
||||||
|
|
||||||
//try to heal the tile
|
//try to heal the tile
|
||||||
@@ -615,7 +618,7 @@ public class Damage{
|
|||||||
return Math.max(damage - armor, minArmorDamage * damage);
|
return Math.max(damage - armor, minArmorDamage * damage);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static class Collided{
|
public static class Collided implements Pool.Poolable{
|
||||||
public float x, y;
|
public float x, y;
|
||||||
public Teamc target;
|
public Teamc target;
|
||||||
|
|
||||||
@@ -625,5 +628,10 @@ public class Damage{
|
|||||||
this.target = target;
|
this.target = target;
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void reset(){
|
||||||
|
target = null;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -206,7 +206,7 @@ public class EntityGroup<T extends Entityc> implements Iterable<T>{
|
|||||||
//fix incorrect HEAD index since it was swapped
|
//fix incorrect HEAD index since it was swapped
|
||||||
if(array.size > 0 && idx != array.size){
|
if(array.size > 0 && idx != array.size){
|
||||||
var swapped = array.items[idx];
|
var swapped = array.items[idx];
|
||||||
indexer.change(swapped, idx);
|
if(indexer != null) indexer.change(swapped, idx);
|
||||||
}
|
}
|
||||||
|
|
||||||
if(map != null){
|
if(map != null){
|
||||||
@@ -228,7 +228,7 @@ public class EntityGroup<T extends Entityc> implements Iterable<T>{
|
|||||||
//swap head with current
|
//swap head with current
|
||||||
if(array.size > 1){
|
if(array.size > 1){
|
||||||
var head = array.items[array.size - 1];
|
var head = array.items[array.size - 1];
|
||||||
indexer.change(head, position);
|
if(indexer != null) indexer.change(head, position);
|
||||||
array.items[position] = head;
|
array.items[position] = head;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -93,13 +93,13 @@ public class ForceFieldAbility extends Ability{
|
|||||||
checkRadius(unit);
|
checkRadius(unit);
|
||||||
|
|
||||||
if(unit.shield > 0){
|
if(unit.shield > 0){
|
||||||
Draw.z(Layer.shields);
|
|
||||||
|
|
||||||
Draw.color(unit.team.color, Color.white, Mathf.clamp(alpha));
|
Draw.color(unit.team.color, Color.white, Mathf.clamp(alpha));
|
||||||
|
|
||||||
if(Vars.renderer.animateShields){
|
if(Vars.renderer.animateShields){
|
||||||
|
Draw.z(Layer.shields + 0.001f * alpha);
|
||||||
Fill.poly(unit.x, unit.y, sides, realRad, rotation);
|
Fill.poly(unit.x, unit.y, sides, realRad, rotation);
|
||||||
}else{
|
}else{
|
||||||
|
Draw.z(Layer.shields);
|
||||||
Lines.stroke(1.5f);
|
Lines.stroke(1.5f);
|
||||||
Draw.alpha(0.09f);
|
Draw.alpha(0.09f);
|
||||||
Fill.poly(unit.x, unit.y, sides, radius, rotation);
|
Fill.poly(unit.x, unit.y, sides, radius, rotation);
|
||||||
|
|||||||
@@ -46,6 +46,8 @@ public class BulletType extends Content implements Cloneable{
|
|||||||
public boolean pierceBuilding;
|
public boolean pierceBuilding;
|
||||||
/** Maximum # of pierced objects. */
|
/** Maximum # of pierced objects. */
|
||||||
public int pierceCap = -1;
|
public int pierceCap = -1;
|
||||||
|
/** Multiplier of damage decreased per health pierced. */
|
||||||
|
public float pierceDamageFactor = 0f;
|
||||||
/** If false, this bullet isn't removed after pierceCap is exceeded. Expert usage only. */
|
/** If false, this bullet isn't removed after pierceCap is exceeded. Expert usage only. */
|
||||||
public boolean removeAfterPierce = true;
|
public boolean removeAfterPierce = true;
|
||||||
/** For piercing lasers, setting this to true makes it get absorbed by plastanium walls. */
|
/** For piercing lasers, setting this to true makes it get absorbed by plastanium walls. */
|
||||||
@@ -143,7 +145,7 @@ public class BulletType extends Content implements Cloneable{
|
|||||||
public boolean fragOnHit = true;
|
public boolean fragOnHit = true;
|
||||||
/** If false, this bullet will not create fraags when absorbed by a shield. */
|
/** If false, this bullet will not create fraags when absorbed by a shield. */
|
||||||
public boolean fragOnAbsorb = true;
|
public boolean fragOnAbsorb = true;
|
||||||
/** If true, unit armor is ignored in damage calculations. Ignored for building armor. */
|
/** If true, unit armor is ignored in damage calculations. */
|
||||||
public boolean pierceArmor = false;
|
public boolean pierceArmor = false;
|
||||||
/** Whether status and despawnHit should automatically be set. */
|
/** Whether status and despawnHit should automatically be set. */
|
||||||
public boolean setDefaults = true;
|
public boolean setDefaults = true;
|
||||||
@@ -177,6 +179,8 @@ public class BulletType extends Content implements Cloneable{
|
|||||||
public float intervalSpread = 0f;
|
public float intervalSpread = 0f;
|
||||||
/** Angle offset for interval bullets. */
|
/** Angle offset for interval bullets. */
|
||||||
public float intervalAngle = 0f;
|
public float intervalAngle = 0f;
|
||||||
|
/** Use a negative value to disable interval bullet delay. */
|
||||||
|
public float intervalDelay = -1f;
|
||||||
|
|
||||||
/** Color used for hit/despawn effects. */
|
/** Color used for hit/despawn effects. */
|
||||||
public Color hitColor = Color.white;
|
public Color hitColor = Color.white;
|
||||||
@@ -358,6 +362,8 @@ public class BulletType extends Content implements Cloneable{
|
|||||||
}else if(build.team != b.team && direct){
|
}else if(build.team != b.team && direct){
|
||||||
hit(b);
|
hit(b);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
handlePierce(b, initialHealth, x, y);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void hitEntity(Bullet b, Hitboxc entity, float health){
|
public void hitEntity(Bullet b, Hitboxc entity, float health){
|
||||||
@@ -383,6 +389,19 @@ public class BulletType extends Content implements Cloneable{
|
|||||||
if(!wasDead && entity instanceof Unit unit && unit.dead){
|
if(!wasDead && entity instanceof Unit unit && unit.dead){
|
||||||
Events.fire(new UnitBulletDestroyEvent(unit, b));
|
Events.fire(new UnitBulletDestroyEvent(unit, b));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
handlePierce(b, health, entity.x(), entity.y());
|
||||||
|
}
|
||||||
|
|
||||||
|
public void handlePierce(Bullet b, float initialHealth, float x, float y){
|
||||||
|
float sub = Math.max(initialHealth*pierceDamageFactor, 0);
|
||||||
|
//subtract health from each consecutive pierce
|
||||||
|
b.damage -= Math.min(b.damage, sub);
|
||||||
|
|
||||||
|
if(removeAfterPierce && b.damage <= 0){
|
||||||
|
b.hit = true;
|
||||||
|
b.remove();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public float damageMultiplier(Bullet b){
|
public float damageMultiplier(Bullet b){
|
||||||
@@ -557,7 +576,7 @@ public class BulletType extends Content implements Cloneable{
|
|||||||
}
|
}
|
||||||
|
|
||||||
public void updateBulletInterval(Bullet b){
|
public void updateBulletInterval(Bullet b){
|
||||||
if(intervalBullet != null && b.timer.get(2, bulletInterval)){
|
if(intervalBullet != null && b.time >= intervalDelay && b.timer.get(2, bulletInterval)){
|
||||||
float ang = b.rotation();
|
float ang = b.rotation();
|
||||||
for(int i = 0; i < intervalBullets; i++){
|
for(int i = 0; i < intervalBullets; i++){
|
||||||
intervalBullet.create(b, b.x, b.y, ang + Mathf.range(intervalRandomSpread) + intervalAngle + ((i - (intervalBullets - 1f)/2f) * intervalSpread));
|
intervalBullet.create(b, b.x, b.y, ang + Mathf.range(intervalRandomSpread) + intervalAngle + ((i - (intervalBullets - 1f)/2f) * intervalSpread));
|
||||||
|
|||||||
@@ -45,6 +45,11 @@ public class PointLaserBulletType extends BulletType{
|
|||||||
drawSize = 1000f;
|
drawSize = 1000f;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public float continuousDamage(){
|
||||||
|
return damage / damageInterval * 60f;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public float estimateDPS(){
|
public float estimateDPS(){
|
||||||
return damage * 100f / damageInterval * 3f;
|
return damage * 100f / damageInterval * 3f;
|
||||||
|
|||||||
@@ -13,8 +13,6 @@ public class RailBulletType extends BulletType{
|
|||||||
|
|
||||||
public Effect pierceEffect = Fx.hitBulletSmall, pointEffect = Fx.none, lineEffect = Fx.none;
|
public Effect pierceEffect = Fx.hitBulletSmall, pointEffect = Fx.none, lineEffect = Fx.none;
|
||||||
public Effect endEffect = Fx.none;
|
public Effect endEffect = Fx.none;
|
||||||
/** Multiplier of damage decreased per health pierced. */
|
|
||||||
public float pierceDamageFactor = 1f;
|
|
||||||
|
|
||||||
public float length = 100f;
|
public float length = 100f;
|
||||||
|
|
||||||
@@ -37,8 +35,9 @@ public class RailBulletType extends BulletType{
|
|||||||
return length;
|
return length;
|
||||||
}
|
}
|
||||||
|
|
||||||
void handle(Bullet b, float initialHealth, float x, float y){
|
@Override
|
||||||
float sub = Math.max(initialHealth*pierceDamageFactor, 0);
|
public void handlePierce(Bullet b, float initialHealth, float x, float y){
|
||||||
|
float sub = Math.max(initialHealth * pierceDamageFactor, 0);
|
||||||
|
|
||||||
if(b.damage <= 0){
|
if(b.damage <= 0){
|
||||||
b.fdata = Math.min(b.fdata, b.dst(x, y));
|
b.fdata = Math.min(b.fdata, b.dst(x, y));
|
||||||
@@ -93,14 +92,8 @@ public class RailBulletType extends BulletType{
|
|||||||
return bullet.team != tile.team;
|
return bullet.team != tile.team;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public void hitEntity(Bullet b, Hitboxc entity, float health){
|
|
||||||
super.hitEntity(b, entity, health);
|
|
||||||
handle(b, health, entity.getX(), entity.getY());
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void hitTile(Bullet b, Building build, float x, float y, float initialHealth, boolean direct){
|
public void hitTile(Bullet b, Building build, float x, float y, float initialHealth, boolean direct){
|
||||||
handle(b, initialHealth, x, y);
|
handlePierce(b, initialHealth, x, y);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -144,7 +144,7 @@ abstract class BuilderComp implements Posc, Statusc, Teamc, Rotc{
|
|||||||
}
|
}
|
||||||
|
|
||||||
if(tile.build instanceof ConstructBuild && !current.initialized){
|
if(tile.build instanceof ConstructBuild && !current.initialized){
|
||||||
Core.app.post(() -> Events.fire(new BuildSelectEvent(tile, team, self(), current.breaking)));
|
Events.fire(new BuildSelectEvent(tile, team, self(), current.breaking));
|
||||||
current.initialized = true;
|
current.initialized = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -48,7 +48,7 @@ import static mindustry.Vars.*;
|
|||||||
|
|
||||||
@EntityDef(value = {Buildingc.class}, isFinal = false, genio = false, serialize = false)
|
@EntityDef(value = {Buildingc.class}, isFinal = false, genio = false, serialize = false)
|
||||||
@Component(base = true)
|
@Component(base = true)
|
||||||
abstract class BuildingComp implements Posc, Teamc, Healthc, Buildingc, Timerc, QuadTreeObject, Displayable, Senseable, Controllable, Sized{
|
abstract class BuildingComp implements Posc, Teamc, Healthc, Buildingc, Timerc, QuadTreeObject, Displayable, Sized, Senseable, Controllable, Settable{
|
||||||
//region vars and initialization
|
//region vars and initialization
|
||||||
static final float timeToSleep = 60f * 1, recentDamageTime = 60f * 5f;
|
static final float timeToSleep = 60f * 1, recentDamageTime = 60f * 5f;
|
||||||
static final ObjectSet<Building> tmpTiles = new ObjectSet<>();
|
static final ObjectSet<Building> tmpTiles = new ObjectSet<>();
|
||||||
@@ -1254,7 +1254,7 @@ abstract class BuildingComp implements Posc, Teamc, Healthc, Buildingc, Timerc,
|
|||||||
public void placed(){
|
public void placed(){
|
||||||
if(net.client()) return;
|
if(net.client()) return;
|
||||||
|
|
||||||
if((block.consumesPower || block.outputsPower) && block.hasPower){
|
if((block.consumesPower || block.outputsPower) && block.hasPower && block.connectedPower){
|
||||||
PowerNode.getNodeLinks(tile, block, team, other -> {
|
PowerNode.getNodeLinks(tile, block, team, other -> {
|
||||||
if(!other.power.links.contains(pos())){
|
if(!other.power.links.contains(pos())){
|
||||||
other.configureAny(pos());
|
other.configureAny(pos());
|
||||||
@@ -1746,7 +1746,9 @@ abstract class BuildingComp implements Posc, Teamc, Healthc, Buildingc, Timerc,
|
|||||||
public void updateConsumption(){
|
public void updateConsumption(){
|
||||||
//everything is valid when cheating
|
//everything is valid when cheating
|
||||||
if(!block.hasConsumers || cheating()){
|
if(!block.hasConsumers || cheating()){
|
||||||
potentialEfficiency = efficiency = optionalEfficiency = enabled ? 1f : 0f;
|
potentialEfficiency = enabled && productionValid() ? 1f : 0f;
|
||||||
|
efficiency = optionalEfficiency = shouldConsume() ? potentialEfficiency : 0f;
|
||||||
|
updateEfficiencyMultiplier();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1949,6 +1951,58 @@ abstract class BuildingComp implements Posc, Teamc, Healthc, Buildingc, Timerc,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void setProp(LAccess prop, double value){
|
||||||
|
switch(prop){
|
||||||
|
case health -> {
|
||||||
|
health = (float)Mathf.clamp(value, 0, maxHealth);
|
||||||
|
healthChanged();
|
||||||
|
}
|
||||||
|
case team -> {
|
||||||
|
Team team = Team.get((int)value);
|
||||||
|
if(this.team != team){
|
||||||
|
changeTeam(team);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
case totalPower -> {
|
||||||
|
if(power != null && block.consPower != null && block.consPower.buffered){
|
||||||
|
power.status = Mathf.clamp((float)(value / block.consPower.capacity));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void setProp(LAccess prop, Object value){
|
||||||
|
switch(prop){
|
||||||
|
case team -> {
|
||||||
|
if(value instanceof Team team && this.team != team){
|
||||||
|
changeTeam(team);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void setProp(UnlockableContent content, double value){
|
||||||
|
if(content instanceof Item item && items != null){
|
||||||
|
int amount = (int)value;
|
||||||
|
if(items.get(item) != amount){
|
||||||
|
if(items.get(item) < amount){
|
||||||
|
handleStack(item, acceptStack(item, amount - items.get(item), null), null);
|
||||||
|
}else if(amount >= 0){
|
||||||
|
removeStack(item, items.get(item) - amount);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}else if(content instanceof Liquid liquid && liquids != null){
|
||||||
|
float amount = Mathf.clamp((float)value, 0f, block.liquidCapacity);
|
||||||
|
//decreasing amount is always allowed
|
||||||
|
if(amount < liquids.get(liquid) || (acceptLiquid(self(), liquid) && (liquids.current() == liquid || liquids.currentAmount() <= 0.1f))){
|
||||||
|
liquids.set(liquid, amount);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@Replace
|
@Replace
|
||||||
@Override
|
@Override
|
||||||
public boolean inFogTo(Team viewer){
|
public boolean inFogTo(Team viewer){
|
||||||
|
|||||||
@@ -93,6 +93,11 @@ abstract class PlayerComp implements UnitController, Entityc, Syncc, Timerc, Dra
|
|||||||
return isAdded();
|
return isAdded();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean isLogicControllable(){
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
@Replace
|
@Replace
|
||||||
public float clipSize(){
|
public float clipSize(){
|
||||||
return unit.isNull() ? 20 : unit.type.hitSize * 2f;
|
return unit.isNull() ? 20 : unit.type.hitSize * 2f;
|
||||||
|
|||||||
@@ -34,14 +34,14 @@ abstract class ShieldComp implements Healthc, Posc{
|
|||||||
public void damagePierce(float amount, boolean withEffect){
|
public void damagePierce(float amount, boolean withEffect){
|
||||||
float pre = hitTime;
|
float pre = hitTime;
|
||||||
|
|
||||||
rawDamage(amount);
|
rawDamage(amount / healthMultiplier);
|
||||||
|
|
||||||
if(!withEffect){
|
if(!withEffect){
|
||||||
hitTime = pre;
|
hitTime = pre;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void rawDamage(float amount){
|
protected void rawDamage(float amount){
|
||||||
boolean hadShields = shield > 0.0001f;
|
boolean hadShields = shield > 0.0001f;
|
||||||
|
|
||||||
if(hadShields){
|
if(hadShields){
|
||||||
|
|||||||
@@ -31,7 +31,7 @@ import static mindustry.Vars.*;
|
|||||||
import static mindustry.logic.GlobalVars.*;
|
import static mindustry.logic.GlobalVars.*;
|
||||||
|
|
||||||
@Component(base = true)
|
@Component(base = true)
|
||||||
abstract class UnitComp implements Healthc, Physicsc, Hitboxc, Statusc, Teamc, Itemsc, Rotc, Unitc, Weaponsc, Drawc, Boundedc, Syncc, Shieldc, Displayable, Senseable, Ranged, Minerc, Builderc{
|
abstract class UnitComp implements Healthc, Physicsc, Hitboxc, Statusc, Teamc, Itemsc, Rotc, Unitc, Weaponsc, Drawc, Boundedc, Syncc, Shieldc, Displayable, Ranged, Minerc, Builderc, Senseable, Settable{
|
||||||
|
|
||||||
@Import boolean hovering, dead, disarmed;
|
@Import boolean hovering, dead, disarmed;
|
||||||
@Import float x, y, rotation, elevation, maxHealth, drag, armor, hitSize, health, ammo, dragMultiplier;
|
@Import float x, y, rotation, elevation, maxHealth, drag, armor, hitSize, health, ammo, dragMultiplier;
|
||||||
@@ -40,6 +40,7 @@ abstract class UnitComp implements Healthc, Physicsc, Hitboxc, Statusc, Teamc, I
|
|||||||
@Import @Nullable Tile mineTile;
|
@Import @Nullable Tile mineTile;
|
||||||
@Import Vec2 vel;
|
@Import Vec2 vel;
|
||||||
@Import WeaponMount[] mounts;
|
@Import WeaponMount[] mounts;
|
||||||
|
@Import ItemStack stack;
|
||||||
|
|
||||||
private UnitController controller;
|
private UnitController controller;
|
||||||
Ability[] abilities = {};
|
Ability[] abilities = {};
|
||||||
@@ -64,7 +65,7 @@ abstract class UnitComp implements Healthc, Physicsc, Hitboxc, Statusc, Teamc, I
|
|||||||
}
|
}
|
||||||
|
|
||||||
public void updateBoosting(boolean boost){
|
public void updateBoosting(boolean boost){
|
||||||
if(!type.canBoost) return;
|
if(!type.canBoost || dead) return;
|
||||||
|
|
||||||
elevation = Mathf.approachDelta(elevation, type.canBoost ? Mathf.num(boost || onSolid() || (isFlying() && !canLand())) : 0f, type.riseSpeed);
|
elevation = Mathf.approachDelta(elevation, type.canBoost ? Mathf.num(boost || onSolid() || (isFlying() && !canLand())) : 0f, type.riseSpeed);
|
||||||
}
|
}
|
||||||
@@ -257,6 +258,60 @@ abstract class UnitComp implements Healthc, Physicsc, Hitboxc, Statusc, Teamc, I
|
|||||||
return Float.NaN;
|
return Float.NaN;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void setProp(LAccess prop, double value){
|
||||||
|
switch(prop){
|
||||||
|
case health -> health = (float)Mathf.clamp(value, 0, maxHealth);
|
||||||
|
case x -> x = World.unconv((float)value);
|
||||||
|
case y -> y = World.unconv((float)value);
|
||||||
|
case rotation -> rotation = (float)value;
|
||||||
|
case team -> {
|
||||||
|
if(!net.client()){
|
||||||
|
Team team = Team.get((int)value);
|
||||||
|
if(controller instanceof Player p){
|
||||||
|
p.team(team);
|
||||||
|
}
|
||||||
|
this.team = team;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
case flag -> flag = value;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void setProp(LAccess prop, Object value){
|
||||||
|
switch(prop){
|
||||||
|
case team -> {
|
||||||
|
if(value instanceof Team t && !net.client()){
|
||||||
|
if(controller instanceof Player p) p.team(t);
|
||||||
|
team = t;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
case payloadType -> {
|
||||||
|
//only serverside
|
||||||
|
if(((Object)this) instanceof Payloadc pay && !net.client()){
|
||||||
|
if(value instanceof Block b){
|
||||||
|
Building build = b.newBuilding().create(b, team());
|
||||||
|
if(pay.canPickup(build)) pay.addPayload(new BuildPayload(build));
|
||||||
|
}else if(value instanceof UnitType ut){
|
||||||
|
Unit unit = ut.create(team());
|
||||||
|
if(pay.canPickup(unit)) pay.addPayload(new UnitPayload(unit));
|
||||||
|
}else if(value == null && pay.payloads().size > 0){
|
||||||
|
pay.dropLastPayload();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void setProp(UnlockableContent content, double value){
|
||||||
|
if(content instanceof Item item){
|
||||||
|
stack.item = item;
|
||||||
|
stack.amount = Mathf.clamp((int)value, 0, type.itemCapacity);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@Replace
|
@Replace
|
||||||
public boolean canDrown(){
|
public boolean canDrown(){
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
package mindustry.entities.effect;
|
package mindustry.entities.effect;
|
||||||
|
|
||||||
|
import arc.graphics.*;
|
||||||
import arc.math.*;
|
import arc.math.*;
|
||||||
import mindustry.content.*;
|
import mindustry.content.*;
|
||||||
import mindustry.entities.*;
|
import mindustry.entities.*;
|
||||||
@@ -24,26 +25,14 @@ public class RadialEffect extends Effect{
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void init(){
|
public void create(float x, float y, float rotation, Color color, Object data){
|
||||||
effect.init();
|
if(!shouldCreate()) return;
|
||||||
clip = Math.max(clip, effect.clip);
|
|
||||||
lifetime = effect.lifetime;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
rotation += rotationOffset;
|
||||||
public void render(EffectContainer e){
|
|
||||||
float x = e.x, y = e.y;
|
|
||||||
|
|
||||||
e.rotation += rotationOffset;
|
|
||||||
|
|
||||||
for(int i = 0; i < amount; i++){
|
for(int i = 0; i < amount; i++){
|
||||||
e.x = x + Angles.trnsx(e.rotation, lengthOffset);
|
effect.create(x + Angles.trnsx(rotation, lengthOffset), y + Angles.trnsy(rotation, lengthOffset), rotation, color, data);
|
||||||
e.y = y + Angles.trnsy(e.rotation, lengthOffset);
|
rotation += rotationSpacing;
|
||||||
effect.render(e);
|
|
||||||
e.rotation += rotationSpacing;
|
|
||||||
e.id ++;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
clip = Math.max(clip, effect.clip);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -55,6 +55,11 @@ public class AIController implements UnitController{
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean isLogicControllable(){
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
public void stopShooting(){
|
public void stopShooting(){
|
||||||
for(var mount : unit.mounts){
|
for(var mount : unit.mounts){
|
||||||
//ignore mount controllable stats too, they should not shoot either
|
//ignore mount controllable stats too, they should not shoot either
|
||||||
@@ -222,6 +227,10 @@ public class AIController implements UnitController{
|
|||||||
return target(x, y, range, air, ground);
|
return target(x, y, range, air, ground);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void commandTarget(Teamc moveTo){}
|
||||||
|
|
||||||
|
public void commandPosition(Vec2 pos){}
|
||||||
|
|
||||||
/** Called after this controller is assigned a unit. */
|
/** Called after this controller is assigned a unit. */
|
||||||
public void init(){
|
public void init(){
|
||||||
|
|
||||||
|
|||||||
@@ -14,6 +14,11 @@ public interface UnitController{
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/** @return whether logic AI can take over */
|
||||||
|
default boolean isLogicControllable(){
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
default void updateUnit(){
|
default void updateUnit(){
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -162,6 +162,16 @@ public class EventType{
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static class ClientServerConnectEvent{
|
||||||
|
public final String ip;
|
||||||
|
public final int port;
|
||||||
|
|
||||||
|
public ClientServerConnectEvent(String ip, int port){
|
||||||
|
this.ip = ip;
|
||||||
|
this.port = port;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/** Consider using Menus.registerMenu instead. */
|
/** Consider using Menus.registerMenu instead. */
|
||||||
public static class MenuOptionChooseEvent{
|
public static class MenuOptionChooseEvent{
|
||||||
public final Player player;
|
public final Player player;
|
||||||
@@ -169,8 +179,21 @@ public class EventType{
|
|||||||
|
|
||||||
public MenuOptionChooseEvent(Player player, int menuId, int option){
|
public MenuOptionChooseEvent(Player player, int menuId, int option){
|
||||||
this.player = player;
|
this.player = player;
|
||||||
this.option = option;
|
|
||||||
this.menuId = menuId;
|
this.menuId = menuId;
|
||||||
|
this.option = option;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Consider using Menus.registerTextInput instead. */
|
||||||
|
public static class TextInputEvent{
|
||||||
|
public final Player player;
|
||||||
|
public final int textInputId;
|
||||||
|
public final @Nullable String text;
|
||||||
|
|
||||||
|
public TextInputEvent(Player player, int textInputId, String text){
|
||||||
|
this.player = player;
|
||||||
|
this.textInputId = textInputId;
|
||||||
|
this.text = text;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -31,6 +31,8 @@ public class Rules{
|
|||||||
public boolean waves;
|
public boolean waves;
|
||||||
/** Whether the game objective is PvP. Note that this enables automatic hosting. */
|
/** Whether the game objective is PvP. Note that this enables automatic hosting. */
|
||||||
public boolean pvp;
|
public boolean pvp;
|
||||||
|
/** Whether is waiting for players enabled in PvP. */
|
||||||
|
public boolean pvpAutoPause = true;
|
||||||
/** Whether to pause the wave timer until all enemies are destroyed. */
|
/** Whether to pause the wave timer until all enemies are destroyed. */
|
||||||
public boolean waitEnemies = false;
|
public boolean waitEnemies = false;
|
||||||
/** Determines if gamemode is attack mode. */
|
/** Determines if gamemode is attack mode. */
|
||||||
|
|||||||
@@ -42,7 +42,7 @@ public class Team implements Comparable<Team>{
|
|||||||
Mathf.rand.setSeed(8);
|
Mathf.rand.setSeed(8);
|
||||||
//create the whole 256 placeholder teams
|
//create the whole 256 placeholder teams
|
||||||
for(int i = 6; i < all.length; i++){
|
for(int i = 6; i < all.length; i++){
|
||||||
new Team(i, "team#" + i, Color.HSVtoRGB(360f * Mathf.random(), 100f * Mathf.random(0.6f, 1f), 100f * Mathf.random(0.8f, 1f), 1f));
|
new Team(i, "team#" + i, Color.HSVtoRGB(360f * Mathf.random(), 100f * Mathf.random(0.4f, 1f), 100f * Mathf.random(0.6f, 1f), 1f));
|
||||||
}
|
}
|
||||||
Mathf.rand.setSeed(new Rand().nextLong());
|
Mathf.rand.setSeed(new Rand().nextLong());
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -10,7 +10,7 @@ import mindustry.type.*;
|
|||||||
import static mindustry.content.UnitTypes.*;
|
import static mindustry.content.UnitTypes.*;
|
||||||
|
|
||||||
public class Waves{
|
public class Waves{
|
||||||
public static final int waveVersion = 5;
|
public static final int waveVersion = 6;
|
||||||
|
|
||||||
private Seq<SpawnGroup> spawns;
|
private Seq<SpawnGroup> spawns;
|
||||||
|
|
||||||
|
|||||||
@@ -12,6 +12,19 @@ public class InverseKinematics{
|
|||||||
return solve(lengthA, lengthB, end, at1, result);
|
return solve(lengthA, lengthB, end, at1, result);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
inputs:
|
||||||
|
|
||||||
|
@param lengthA first line segment length
|
||||||
|
@param lengthB second line segment length
|
||||||
|
@param end length of the endpoint you want to reach
|
||||||
|
@param attractor direction you want the result to be closer to (since there are usually 2 solutions)
|
||||||
|
|
||||||
|
output:
|
||||||
|
|
||||||
|
@param result a point in-between (0, 0) and (end) such that (0, 0).dst(result) == lengthA and result.dst(end) == lengthB - or in basic terms, the position of a joint between (0, 0) and end where the two lengths of segments are lengthA and lengthB
|
||||||
|
@return whether IK succeeded (this can fail if end is too far, for example)
|
||||||
|
*/
|
||||||
public static boolean solve(float lengthA, float lengthB, Vec2 end, Vec2 attractor, Vec2 result){
|
public static boolean solve(float lengthA, float lengthB, Vec2 end, Vec2 attractor, Vec2 result){
|
||||||
Vec2 axis = mat2[0].set(end).nor();
|
Vec2 axis = mat2[0].set(end).nor();
|
||||||
mat2[1].set(attractor).sub(temp2.set(axis).scl(attractor.dot(axis))).nor();
|
mat2[1].set(attractor).sub(temp2.set(axis).scl(attractor.dot(axis))).nor();
|
||||||
|
|||||||
@@ -188,9 +188,10 @@ public class PlanetRenderer implements Disposable{
|
|||||||
}
|
}
|
||||||
|
|
||||||
//render sector grid
|
//render sector grid
|
||||||
Mesh mesh = outline(planet.grid.size);
|
float scaledOutlineRad = outlineRad * planet.radius;
|
||||||
|
Mesh mesh = outline(planet.grid.size, planet.radius);
|
||||||
Shader shader = Shaders.planetGrid;
|
Shader shader = Shaders.planetGrid;
|
||||||
Vec3 tile = planet.intersect(cam.getMouseRay(), outlineRad);
|
Vec3 tile = planet.intersect(cam.getMouseRay(), scaledOutlineRad);
|
||||||
Shaders.planetGrid.mouse.lerp(tile == null ? Vec3.Zero : tile.sub(planet.position).rotate(Vec3.Y, planet.getRotation()), 0.2f);
|
Shaders.planetGrid.mouse.lerp(tile == null ? Vec3.Zero : tile.sub(planet.position).rotate(Vec3.Y, planet.getRotation()), 0.2f);
|
||||||
|
|
||||||
shader.bind();
|
shader.bind();
|
||||||
@@ -210,13 +211,14 @@ public class PlanetRenderer implements Disposable{
|
|||||||
|
|
||||||
public void drawArc(Planet planet, Vec3 a, Vec3 b, Color from, Color to, float length, float timeScale, int pointCount){
|
public void drawArc(Planet planet, Vec3 a, Vec3 b, Color from, Color to, float length, float timeScale, int pointCount){
|
||||||
//increase curve height when on opposite side of planet, so it doesn't tunnel through
|
//increase curve height when on opposite side of planet, so it doesn't tunnel through
|
||||||
|
float scaledOutlineRad = outlineRad * planet.radius;
|
||||||
float dot = 1f - (Tmp.v32.set(a).nor().dot(Tmp.v33.set(b).nor()) + 1f)/2f;
|
float dot = 1f - (Tmp.v32.set(a).nor().dot(Tmp.v33.set(b).nor()) + 1f)/2f;
|
||||||
|
|
||||||
Vec3 avg = Tmp.v31.set(b).add(a).scl(0.5f);
|
Vec3 avg = Tmp.v31.set(b).add(a).scl(0.5f);
|
||||||
avg.setLength(planet.radius*(1f+length) + dot * 1.35f);
|
avg.setLength(planet.radius*(1f+length) + dot * 1.35f);
|
||||||
|
|
||||||
points.clear();
|
points.clear();
|
||||||
points.addAll(Tmp.v33.set(b).setLength(outlineRad), Tmp.v31, Tmp.v34.set(a).setLength(outlineRad));
|
points.addAll(Tmp.v33.set(b).setLength(scaledOutlineRad), Tmp.v31, Tmp.v34.set(a).setLength(scaledOutlineRad));
|
||||||
Tmp.bz3.set(points);
|
Tmp.bz3.set(points);
|
||||||
|
|
||||||
for(int i = 0; i < pointCount + 1; i++){
|
for(int i = 0; i < pointCount + 1; i++){
|
||||||
@@ -231,8 +233,8 @@ public class PlanetRenderer implements Disposable{
|
|||||||
public void drawBorders(Sector sector, Color base, float alpha){
|
public void drawBorders(Sector sector, Color base, float alpha){
|
||||||
Color color = Tmp.c1.set(base).a((base.a + 0.3f + Mathf.absin(Time.globalTime, 5f, 0.3f)) * alpha);
|
Color color = Tmp.c1.set(base).a((base.a + 0.3f + Mathf.absin(Time.globalTime, 5f, 0.3f)) * alpha);
|
||||||
|
|
||||||
float r1 = 1f;
|
float r1 = 1f * sector.planet.radius;
|
||||||
float r2 = outlineRad + 0.001f;
|
float r2 = outlineRad * sector.planet.radius + 0.001f;
|
||||||
|
|
||||||
for(int i = 0; i < sector.tile.corners.length; i++){
|
for(int i = 0; i < sector.tile.corners.length; i++){
|
||||||
Corner c = sector.tile.corners[i], next = sector.tile.corners[(i+1) % sector.tile.corners.length];
|
Corner c = sector.tile.corners[i], next = sector.tile.corners[(i+1) % sector.tile.corners.length];
|
||||||
@@ -268,16 +270,16 @@ public class PlanetRenderer implements Disposable{
|
|||||||
|
|
||||||
projector.setPlane(
|
projector.setPlane(
|
||||||
//origin on sector position
|
//origin on sector position
|
||||||
Tmp.v33.set(sector.tile.v).setLength(outlineRad + length).rotate(Vec3.Y, rotation).add(sector.planet.position),
|
Tmp.v33.set(sector.tile.v).setLength((outlineRad + length) * sector.planet.radius).rotate(Vec3.Y, rotation).add(sector.planet.position),
|
||||||
//face up
|
//face up
|
||||||
sector.plane.project(Tmp.v32.set(sector.tile.v).add(Vec3.Y)).sub(sector.tile.v).rotate(Vec3.Y, rotation).nor(),
|
sector.plane.project(Tmp.v32.set(sector.tile.v).add(Vec3.Y)).sub(sector.tile.v, sector.planet.radius).rotate(Vec3.Y, rotation).nor(),
|
||||||
//right vector
|
//right vector
|
||||||
Tmp.v31.set(Tmp.v32).rotate(Vec3.Y, -rotation).add(sector.tile.v).rotate(sector.tile.v, 90).sub(sector.tile.v).rotate(Vec3.Y, rotation).nor()
|
Tmp.v31.set(Tmp.v32).rotate(Vec3.Y, -rotation).add(sector.tile.v).rotate(sector.tile.v, 90).sub(sector.tile.v).rotate(Vec3.Y, rotation).nor()
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void fill(Sector sector, Color color, float offset){
|
public void fill(Sector sector, Color color, float offset){
|
||||||
float rr = outlineRad + offset;
|
float rr = outlineRad * sector.planet.radius + offset;
|
||||||
for(int i = 0; i < sector.tile.corners.length; i++){
|
for(int i = 0; i < sector.tile.corners.length; i++){
|
||||||
Corner c = sector.tile.corners[i], next = sector.tile.corners[(i+1) % sector.tile.corners.length];
|
Corner c = sector.tile.corners[i], next = sector.tile.corners[(i+1) % sector.tile.corners.length];
|
||||||
batch.tri(Tmp.v31.set(c.v).setLength(rr), Tmp.v32.set(next.v).setLength(rr), Tmp.v33.set(sector.tile.v).setLength(rr), color);
|
batch.tri(Tmp.v31.set(c.v).setLength(rr), Tmp.v32.set(next.v).setLength(rr), Tmp.v33.set(sector.tile.v).setLength(rr), color);
|
||||||
@@ -289,7 +291,7 @@ public class PlanetRenderer implements Disposable{
|
|||||||
}
|
}
|
||||||
|
|
||||||
public void drawSelection(Sector sector, Color color, float stroke, float length){
|
public void drawSelection(Sector sector, Color color, float stroke, float length){
|
||||||
float arad = outlineRad + length;
|
float arad = (outlineRad + length) * sector.planet.radius;
|
||||||
|
|
||||||
for(int i = 0; i < sector.tile.corners.length; i++){
|
for(int i = 0; i < sector.tile.corners.length; i++){
|
||||||
Corner next = sector.tile.corners[(i + 1) % sector.tile.corners.length];
|
Corner next = sector.tile.corners[(i + 1) % sector.tile.corners.length];
|
||||||
@@ -311,7 +313,7 @@ public class PlanetRenderer implements Disposable{
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public Mesh outline(int size){
|
public Mesh outline(int size, float radiusScale){
|
||||||
if(outlines[size] == null){
|
if(outlines[size] == null){
|
||||||
outlines[size] = MeshBuilder.buildHex(new HexMesher(){
|
outlines[size] = MeshBuilder.buildHex(new HexMesher(){
|
||||||
@Override
|
@Override
|
||||||
@@ -323,7 +325,7 @@ public class PlanetRenderer implements Disposable{
|
|||||||
public Color getColor(Vec3 position){
|
public Color getColor(Vec3 position){
|
||||||
return outlineColor;
|
return outlineColor;
|
||||||
}
|
}
|
||||||
}, size, true, outlineRad, 0.2f);
|
}, size, true, outlineRad * radiusScale, 0.2f);
|
||||||
}
|
}
|
||||||
return outlines[size];
|
return outlines[size];
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -231,10 +231,13 @@ public abstract class InputHandler implements InputProcessor, GestureListener{
|
|||||||
if(unit != null && unit.team == player.team() && unit.controller() instanceof CommandAI ai){
|
if(unit != null && unit.team == player.team() && unit.controller() instanceof CommandAI ai){
|
||||||
|
|
||||||
//implicitly order it to move
|
//implicitly order it to move
|
||||||
|
if(ai.command == null || ai.command.switchToMove){
|
||||||
ai.command(UnitCommand.moveCommand);
|
ai.command(UnitCommand.moveCommand);
|
||||||
|
}
|
||||||
|
|
||||||
if(teamTarget != null && teamTarget.team() != player.team()){
|
if(teamTarget != null && teamTarget.team() != player.team()){
|
||||||
ai.commandTarget(teamTarget);
|
ai.commandTarget(teamTarget);
|
||||||
|
|
||||||
}else if(posTarget != null){
|
}else if(posTarget != null){
|
||||||
ai.commandPosition(posTarget);
|
ai.commandPosition(posTarget);
|
||||||
}
|
}
|
||||||
@@ -269,10 +272,12 @@ public abstract class InputHandler implements InputProcessor, GestureListener{
|
|||||||
for(int id : unitIds){
|
for(int id : unitIds){
|
||||||
Unit unit = Groups.unit.getByID(id);
|
Unit unit = Groups.unit.getByID(id);
|
||||||
if(unit != null && unit.team == player.team() && unit.controller() instanceof CommandAI ai){
|
if(unit != null && unit.team == player.team() && unit.controller() instanceof CommandAI ai){
|
||||||
|
boolean reset = command.resetTarget || ai.currentCommand().resetTarget;
|
||||||
ai.command(command);
|
ai.command(command);
|
||||||
//reset targeting
|
if(reset){
|
||||||
ai.targetPos = null;
|
ai.targetPos = null;
|
||||||
ai.attackTarget = null;
|
ai.attackTarget = null;
|
||||||
|
}
|
||||||
unit.lastCommanded = player.coloredName();
|
unit.lastCommanded = player.coloredName();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -868,7 +873,7 @@ public abstract class InputHandler implements InputProcessor, GestureListener{
|
|||||||
for(Unit unit : selectedUnits){
|
for(Unit unit : selectedUnits){
|
||||||
CommandAI ai = unit.command();
|
CommandAI ai = unit.command();
|
||||||
//draw target line
|
//draw target line
|
||||||
if(ai.targetPos != null && ai.command == UnitCommand.moveCommand){
|
if(ai.targetPos != null && ai.currentCommand().drawTarget){
|
||||||
Position lineDest = ai.attackTarget != null ? ai.attackTarget : ai.targetPos;
|
Position lineDest = ai.attackTarget != null ? ai.attackTarget : ai.targetPos;
|
||||||
Drawf.limitLine(unit, lineDest, unit.hitSize / 2f, 3.5f);
|
Drawf.limitLine(unit, lineDest, unit.hitSize / 2f, 3.5f);
|
||||||
|
|
||||||
@@ -879,8 +884,7 @@ public abstract class InputHandler implements InputProcessor, GestureListener{
|
|||||||
|
|
||||||
Drawf.square(unit.x, unit.y, unit.hitSize / 1.4f + 1f);
|
Drawf.square(unit.x, unit.y, unit.hitSize / 1.4f + 1f);
|
||||||
|
|
||||||
//TODO when to draw, when to not?
|
if(ai.attackTarget != null && ai.currentCommand().drawTarget){
|
||||||
if(ai.attackTarget != null && ai.command == UnitCommand.moveCommand){
|
|
||||||
Drawf.target(ai.attackTarget.getX(), ai.attackTarget.getY(), 6f, Pal.remove);
|
Drawf.target(ai.attackTarget.getX(), ai.attackTarget.getY(), 6f, Pal.remove);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -306,7 +306,13 @@ public class MobileInput extends InputHandler implements GestureListener{
|
|||||||
b.button(Icon.flipX, style, () -> flipPlans(selectPlans, true));
|
b.button(Icon.flipX, style, () -> flipPlans(selectPlans, true));
|
||||||
b.button(Icon.flipY, style, () -> flipPlans(selectPlans, false));
|
b.button(Icon.flipY, style, () -> flipPlans(selectPlans, false));
|
||||||
b.row();
|
b.row();
|
||||||
b.button(Icon.rotate, style, () -> rotatePlans(selectPlans, 1));
|
b.button(Icon.rotate, style, () -> rotatePlans(selectPlans, 1)).update(i -> {
|
||||||
|
var img = i.getCells().first().get();
|
||||||
|
|
||||||
|
img.setScale(-1f, 1f);
|
||||||
|
//why the heck doesn't setOrigin work for scaling
|
||||||
|
img.setTranslation(img.getWidth(), 0f);
|
||||||
|
});
|
||||||
|
|
||||||
}).margin(4f);
|
}).margin(4f);
|
||||||
});
|
});
|
||||||
@@ -387,7 +393,7 @@ public class MobileInput extends InputHandler implements GestureListener{
|
|||||||
|
|
||||||
if(!plan.breaking && plan == lastPlaced && plan.block != null){
|
if(!plan.breaking && plan == lastPlaced && plan.block != null){
|
||||||
Draw.mixcol();
|
Draw.mixcol();
|
||||||
if(plan.block.rotate) drawArrow(plan.block, tile.x, tile.y, plan.rotation);
|
if(plan.block.rotate && plan.block.drawArrow) drawArrow(plan.block, tile.x, tile.y, plan.rotation);
|
||||||
}
|
}
|
||||||
|
|
||||||
Draw.reset();
|
Draw.reset();
|
||||||
@@ -397,13 +403,12 @@ public class MobileInput extends InputHandler implements GestureListener{
|
|||||||
}
|
}
|
||||||
|
|
||||||
//draw last placed plan
|
//draw last placed plan
|
||||||
if(!plan.breaking && plan == lastPlaced && plan.block != null && plan.block.drawArrow){
|
if(!plan.breaking && plan == lastPlaced && plan.block != null){
|
||||||
boolean valid = validPlace(tile.x, tile.y, plan.block, rotation);
|
boolean valid = validPlace(tile.x, tile.y, plan.block, rotation);
|
||||||
Draw.mixcol();
|
Draw.mixcol();
|
||||||
plan.block.drawPlace(tile.x, tile.y, rotation, valid);
|
plan.block.drawPlace(tile.x, tile.y, rotation, valid);
|
||||||
|
|
||||||
drawOverlapCheck(plan.block, tile.x, tile.y, valid);
|
drawOverlapCheck(plan.block, tile.x, tile.y, valid);
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -320,8 +320,6 @@ public class JsonIO{
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
//use short names for all filter types
|
//use short names for all filter types
|
||||||
for(var filter : Maps.allFilterTypes){
|
for(var filter : Maps.allFilterTypes){
|
||||||
var i = filter.get();
|
var i = filter.get();
|
||||||
|
|||||||
@@ -119,6 +119,15 @@ public class TypeIO{
|
|||||||
}else if(object instanceof Team t){
|
}else if(object instanceof Team t){
|
||||||
write.b((byte)20);
|
write.b((byte)20);
|
||||||
write.b(t.id);
|
write.b(t.id);
|
||||||
|
}else if(object instanceof int[] i){
|
||||||
|
write.b((byte)21);
|
||||||
|
writeInts(write, i);
|
||||||
|
}else if(object instanceof Object[] objs){
|
||||||
|
write.b((byte)22);
|
||||||
|
write.i(objs.length);
|
||||||
|
for(Object obj : objs){
|
||||||
|
writeObject(write, obj);
|
||||||
|
}
|
||||||
}else{
|
}else{
|
||||||
throw new IllegalArgumentException("Unknown object type: " + object.getClass());
|
throw new IllegalArgumentException("Unknown object type: " + object.getClass());
|
||||||
}
|
}
|
||||||
@@ -184,6 +193,13 @@ public class TypeIO{
|
|||||||
}
|
}
|
||||||
case 19 -> new Vec2(read.f(), read.f());
|
case 19 -> new Vec2(read.f(), read.f());
|
||||||
case 20 -> Team.all[read.ub()];
|
case 20 -> Team.all[read.ub()];
|
||||||
|
case 21 -> readInts(read);
|
||||||
|
case 22 -> {
|
||||||
|
int objlen = read.i();
|
||||||
|
Object[] objs = new Object[objlen];
|
||||||
|
for(int i = 0; i < objlen; i++) objs[i] = readObjectBoxed(read, box);
|
||||||
|
yield objs;
|
||||||
|
}
|
||||||
default -> throw new IllegalArgumentException("Unknown object type: " + type);
|
default -> throw new IllegalArgumentException("Unknown object type: " + type);
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -59,7 +59,8 @@ public enum LAccess{
|
|||||||
public static final LAccess[]
|
public static final LAccess[]
|
||||||
all = values(),
|
all = values(),
|
||||||
senseable = Seq.select(all, t -> t.params.length <= 1).toArray(LAccess.class),
|
senseable = Seq.select(all, t -> t.params.length <= 1).toArray(LAccess.class),
|
||||||
controls = Seq.select(all, t -> t.params.length > 0).toArray(LAccess.class);
|
controls = Seq.select(all, t -> t.params.length > 0).toArray(LAccess.class),
|
||||||
|
settable = {x, y, rotation, team, flag, health, totalPower, payloadType};
|
||||||
|
|
||||||
LAccess(String... params){
|
LAccess(String... params){
|
||||||
this.params = params;
|
this.params = params;
|
||||||
|
|||||||
@@ -361,7 +361,7 @@ public class LExecutor{
|
|||||||
/** Checks is a unit is valid for logic AI control, and returns the controller. */
|
/** Checks is a unit is valid for logic AI control, and returns the controller. */
|
||||||
@Nullable
|
@Nullable
|
||||||
public static LogicAI checkLogicAI(LExecutor exec, Object unitObj){
|
public static LogicAI checkLogicAI(LExecutor exec, Object unitObj){
|
||||||
if(unitObj instanceof Unit unit && unit.isValid() && exec.obj(varUnit) == unit && (unit.team == exec.team || exec.privileged) && !unit.isPlayer() && !(unit.isCommandable() && unit.command().hasCommand())){
|
if(unitObj instanceof Unit unit && unit.isValid() && exec.obj(varUnit) == unit && (unit.team == exec.team || exec.privileged) && unit.controller().isLogicControllable()){
|
||||||
if(unit.controller() instanceof LogicAI la){
|
if(unit.controller() instanceof LogicAI la){
|
||||||
la.controller = exec.building(varThis);
|
la.controller = exec.building(varThis);
|
||||||
return la;
|
return la;
|
||||||
@@ -1695,5 +1695,37 @@ public class LExecutor{
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static class SetPropI implements LInstruction{
|
||||||
|
public int type, of, value;
|
||||||
|
|
||||||
|
public SetPropI(int type, int of, int value){
|
||||||
|
this.type = type;
|
||||||
|
this.of = of;
|
||||||
|
this.value = value;
|
||||||
|
}
|
||||||
|
|
||||||
|
public SetPropI(){
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void run(LExecutor exec){
|
||||||
|
Object target = exec.obj(of);
|
||||||
|
Object key = exec.obj(type);
|
||||||
|
|
||||||
|
if(target instanceof Settable sp){
|
||||||
|
if(key instanceof LAccess property){
|
||||||
|
Var var = exec.var(value);
|
||||||
|
if(var.isobj){
|
||||||
|
sp.setProp(property, var.objval);
|
||||||
|
}else{
|
||||||
|
sp.setProp(property, var.numval);
|
||||||
|
}
|
||||||
|
}else if(key instanceof UnlockableContent content){
|
||||||
|
sp.setProp(content, exec.num(value));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
//endregion
|
//endregion
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1683,4 +1683,113 @@ public class LStatements{
|
|||||||
return LCategory.world;
|
return LCategory.world;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@RegisterStatement("setprop")
|
||||||
|
public static class SetPropStatement extends LStatement{
|
||||||
|
public String type = "@copper", of = "block1", value = "0";
|
||||||
|
|
||||||
|
private transient int selected = 0;
|
||||||
|
private transient TextField tfield;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void build(Table table){
|
||||||
|
table.add(" set ");
|
||||||
|
|
||||||
|
tfield = field(table, type, str -> type = str).padRight(0f).get();
|
||||||
|
|
||||||
|
table.button(b -> {
|
||||||
|
b.image(Icon.pencilSmall);
|
||||||
|
//240
|
||||||
|
b.clicked(() -> showSelectTable(b, (t, hide) -> {
|
||||||
|
Table[] tables = {
|
||||||
|
//items
|
||||||
|
new Table(i -> {
|
||||||
|
i.left();
|
||||||
|
int c = 0;
|
||||||
|
for(Item item : Vars.content.items()){
|
||||||
|
if(item.hidden) continue;
|
||||||
|
i.button(new TextureRegionDrawable(item.uiIcon), Styles.flati, iconSmall, () -> {
|
||||||
|
stype("@" + item.name);
|
||||||
|
hide.run();
|
||||||
|
}).size(40f);
|
||||||
|
|
||||||
|
if(++c % 6 == 0) i.row();
|
||||||
|
}
|
||||||
|
}),
|
||||||
|
//liquids
|
||||||
|
new Table(i -> {
|
||||||
|
i.left();
|
||||||
|
int c = 0;
|
||||||
|
for(Liquid item : Vars.content.liquids()){
|
||||||
|
if(!item.unlockedNow() || item.hidden) continue;
|
||||||
|
i.button(new TextureRegionDrawable(item.uiIcon), Styles.flati, iconSmall, () -> {
|
||||||
|
stype("@" + item.name);
|
||||||
|
hide.run();
|
||||||
|
}).size(40f);
|
||||||
|
|
||||||
|
if(++c % 6 == 0) i.row();
|
||||||
|
}
|
||||||
|
}),
|
||||||
|
//sensors
|
||||||
|
new Table(i -> {
|
||||||
|
for(LAccess property : LAccess.settable){
|
||||||
|
i.button(property.name(), Styles.flatt, () -> {
|
||||||
|
stype("@" + property.name());
|
||||||
|
hide.run();
|
||||||
|
}).size(240f, 40f).self(c -> tooltip(c, property)).row();
|
||||||
|
}
|
||||||
|
})
|
||||||
|
};
|
||||||
|
|
||||||
|
Drawable[] icons = {Icon.box, Icon.liquid, Icon.tree};
|
||||||
|
Stack stack = new Stack(tables[selected]);
|
||||||
|
ButtonGroup<Button> group = new ButtonGroup<>();
|
||||||
|
|
||||||
|
for(int i = 0; i < tables.length; i++){
|
||||||
|
int fi = i;
|
||||||
|
|
||||||
|
t.button(icons[i], Styles.squareTogglei, () -> {
|
||||||
|
selected = fi;
|
||||||
|
|
||||||
|
stack.clearChildren();
|
||||||
|
stack.addChild(tables[selected]);
|
||||||
|
|
||||||
|
t.parent.parent.pack();
|
||||||
|
t.parent.parent.invalidateHierarchy();
|
||||||
|
}).height(50f).growX().checked(selected == fi).group(group);
|
||||||
|
}
|
||||||
|
t.row();
|
||||||
|
t.add(stack).colspan(3).width(240f).left();
|
||||||
|
}));
|
||||||
|
}, Styles.logict, () -> {}).size(40f).padLeft(-1).color(table.color);
|
||||||
|
|
||||||
|
table.add(" of ").self(this::param);
|
||||||
|
|
||||||
|
field(table, of, str -> of = str);
|
||||||
|
|
||||||
|
table.add(" to ");
|
||||||
|
|
||||||
|
field(table, value, str -> value = str);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void stype(String text){
|
||||||
|
tfield.setText(text);
|
||||||
|
this.type = text;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean privileged(){
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public LInstruction build(LAssembler builder){
|
||||||
|
return new SetPropI(builder.var(type), builder.var(of), builder.var(value));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public LCategory category(){
|
||||||
|
return LCategory.world;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
9
core/src/mindustry/logic/Settable.java
Normal file
9
core/src/mindustry/logic/Settable.java
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
package mindustry.logic;
|
||||||
|
|
||||||
|
import mindustry.ctype.*;
|
||||||
|
|
||||||
|
public interface Settable{
|
||||||
|
void setProp(LAccess prop, double value);
|
||||||
|
void setProp(LAccess prop, Object value);
|
||||||
|
void setProp(UnlockableContent content, double value);
|
||||||
|
}
|
||||||
@@ -192,7 +192,8 @@ public class Map implements Comparable<Map>, Publishable{
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Fi createSteamPreview(String id){
|
public Fi createSteamPreview(String id){
|
||||||
return previewFile();
|
//I have no idea what the hell I was even thinking with this preview stuff
|
||||||
|
return Vars.mapPreviewDirectory.child((workshop && file.parent().exists() && file.parent().extEquals(".png") ? file.parent().name() : file.nameWithoutExtension()) + "_v2.png");
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@@ -448,6 +448,7 @@ public class ClassMap{
|
|||||||
classes.put("DrawParticles", mindustry.world.draw.DrawParticles.class);
|
classes.put("DrawParticles", mindustry.world.draw.DrawParticles.class);
|
||||||
classes.put("DrawPistons", mindustry.world.draw.DrawPistons.class);
|
classes.put("DrawPistons", mindustry.world.draw.DrawPistons.class);
|
||||||
classes.put("DrawPlasma", mindustry.world.draw.DrawPlasma.class);
|
classes.put("DrawPlasma", mindustry.world.draw.DrawPlasma.class);
|
||||||
|
classes.put("DrawPower", mindustry.world.draw.DrawPower.class);
|
||||||
classes.put("DrawPulseShape", mindustry.world.draw.DrawPulseShape.class);
|
classes.put("DrawPulseShape", mindustry.world.draw.DrawPulseShape.class);
|
||||||
classes.put("DrawPumpLiquid", mindustry.world.draw.DrawPumpLiquid.class);
|
classes.put("DrawPumpLiquid", mindustry.world.draw.DrawPumpLiquid.class);
|
||||||
classes.put("DrawRegion", mindustry.world.draw.DrawRegion.class);
|
classes.put("DrawRegion", mindustry.world.draw.DrawRegion.class);
|
||||||
|
|||||||
@@ -79,7 +79,11 @@ public class ContentParser{
|
|||||||
put(Interp.class, (type, data) -> field(Interp.class, data));
|
put(Interp.class, (type, data) -> field(Interp.class, data));
|
||||||
put(Blending.class, (type, data) -> field(Blending.class, data));
|
put(Blending.class, (type, data) -> field(Blending.class, data));
|
||||||
put(CacheLayer.class, (type, data) -> field(CacheLayer.class, data));
|
put(CacheLayer.class, (type, data) -> field(CacheLayer.class, data));
|
||||||
put(Attribute.class, (type, data) -> Attribute.get(data.asString()));
|
put(Attribute.class, (type, data) -> {
|
||||||
|
String attr = data.asString();
|
||||||
|
if(Attribute.exists(attr)) return Attribute.get(attr);
|
||||||
|
return Attribute.add(attr);
|
||||||
|
});
|
||||||
put(BuildVisibility.class, (type, data) -> field(BuildVisibility.class, data));
|
put(BuildVisibility.class, (type, data) -> field(BuildVisibility.class, data));
|
||||||
put(Schematic.class, (type, data) -> {
|
put(Schematic.class, (type, data) -> {
|
||||||
Object result = fieldOpt(Loadouts.class, data);
|
Object result = fieldOpt(Loadouts.class, data);
|
||||||
@@ -461,12 +465,13 @@ public class ContentParser{
|
|||||||
}
|
}
|
||||||
|
|
||||||
var typeVal = value.get("type");
|
var typeVal = value.get("type");
|
||||||
|
if(unit.constructor == null || typeVal != null){
|
||||||
if(typeVal != null && !typeVal.isString()){
|
if(typeVal != null && !typeVal.isString()){
|
||||||
throw new RuntimeException("Unit '" + name + "' has an incorrect type. Types must be strings.");
|
throw new RuntimeException("Unit '" + name + "' has an incorrect type. Types must be strings.");
|
||||||
}
|
}
|
||||||
|
|
||||||
unit.constructor = unitType(typeVal);
|
unit.constructor = unitType(typeVal);
|
||||||
|
}
|
||||||
}else{
|
}else{
|
||||||
unit = locate(ContentType.unit, name);
|
unit = locate(ContentType.unit, name);
|
||||||
}
|
}
|
||||||
@@ -594,6 +599,21 @@ public class ContentParser{
|
|||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if(value.has("cloudMesh")){
|
||||||
|
var mesh = value.get("cloudMesh");
|
||||||
|
if(!mesh.isObject()) throw new RuntimeException("Meshes must be objects.");
|
||||||
|
value.remove("cloudMesh");
|
||||||
|
planet.cloudMeshLoader = () -> {
|
||||||
|
//don't crash, just log an error
|
||||||
|
try{
|
||||||
|
return parseMesh(planet, mesh);
|
||||||
|
}catch(Exception e){
|
||||||
|
Log.err(e);
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
//always one sector right now...
|
//always one sector right now...
|
||||||
planet.sectors.add(new Sector(planet, Ptile.empty));
|
planet.sectors.add(new Sector(planet, Ptile.empty));
|
||||||
|
|
||||||
@@ -830,6 +850,10 @@ public class ContentParser{
|
|||||||
Color.valueOf(data.getString("color2", data.getString("color", "ffffff"))),
|
Color.valueOf(data.getString("color2", data.getString("color", "ffffff"))),
|
||||||
data.getInt("colorOct", 1), data.getFloat("colorPersistence", 0.5f), data.getFloat("colorScale", 1f),
|
data.getInt("colorOct", 1), data.getFloat("colorPersistence", 0.5f), data.getFloat("colorScale", 1f),
|
||||||
data.getFloat("colorThreshold", 0.5f));
|
data.getFloat("colorThreshold", 0.5f));
|
||||||
|
case "HexSkyMesh" -> new HexSkyMesh(planet,
|
||||||
|
data.getInt("seed", 0), data.getFloat("speed", 0), data.getFloat("radius", 1f),
|
||||||
|
data.getInt("divisions", 3), Color.valueOf(data.getString("color", "ffffff")), data.getInt("octaves", 1),
|
||||||
|
data.getFloat("persistence", 0.5f), data.getFloat("scale", 1f), data.getFloat("thresh", 0.5f));
|
||||||
case "MultiMesh" -> new MultiMesh(parser.readValue(GenericMesh[].class, data.get("meshes")));
|
case "MultiMesh" -> new MultiMesh(parser.readValue(GenericMesh[].class, data.get("meshes")));
|
||||||
case "MatMesh" -> new MatMesh(parser.readValue(GenericMesh.class, data.get("mesh")), parser.readValue(Mat3D.class, data.get("mat")));
|
case "MatMesh" -> new MatMesh(parser.readValue(GenericMesh.class, data.get("mesh")), parser.readValue(Mat3D.class, data.get("mat")));
|
||||||
default -> throw new RuntimeException("Unknown mesh type: " + tname);
|
default -> throw new RuntimeException("Unknown mesh type: " + tname);
|
||||||
|
|||||||
@@ -32,7 +32,7 @@ import static mindustry.Vars.*;
|
|||||||
|
|
||||||
public class Mods implements Loadable{
|
public class Mods implements Loadable{
|
||||||
private static final String[] metaFiles = {"mod.json", "mod.hjson", "plugin.json", "plugin.hjson"};
|
private static final String[] metaFiles = {"mod.json", "mod.hjson", "plugin.json", "plugin.hjson"};
|
||||||
private static final ObjectSet<String> blacklistedMods = ObjectSet.with("ui-lib");
|
private static final ObjectSet<String> blacklistedMods = ObjectSet.with("ui-lib", "braindustry");
|
||||||
|
|
||||||
private Json json = new Json();
|
private Json json = new Json();
|
||||||
private @Nullable Scripts scripts;
|
private @Nullable Scripts scripts;
|
||||||
@@ -41,8 +41,12 @@ public class Mods implements Loadable{
|
|||||||
private ObjectSet<String> specialFolders = ObjectSet.with("bundles", "sprites", "sprites-override");
|
private ObjectSet<String> specialFolders = ObjectSet.with("bundles", "sprites", "sprites-override");
|
||||||
|
|
||||||
private int totalSprites;
|
private int totalSprites;
|
||||||
private static ObjectFloatMap<String> textureResize = new ObjectFloatMap<>();
|
private ObjectFloatMap<String> textureResize = new ObjectFloatMap<>();
|
||||||
private MultiPacker packer;
|
private MultiPacker packer;
|
||||||
|
|
||||||
|
/** Ordered mods cache. Set to null to invalidate. */
|
||||||
|
private @Nullable Seq<LoadedMod> lastOrderedMods = new Seq<>();
|
||||||
|
|
||||||
private ModClassLoader mainLoader = new ModClassLoader(getClass().getClassLoader());
|
private ModClassLoader mainLoader = new ModClassLoader(getClass().getClassLoader());
|
||||||
|
|
||||||
Seq<LoadedMod> mods = new Seq<>();
|
Seq<LoadedMod> mods = new Seq<>();
|
||||||
@@ -103,8 +107,10 @@ public class Mods implements Loadable{
|
|||||||
|
|
||||||
file.copyTo(dest);
|
file.copyTo(dest);
|
||||||
try{
|
try{
|
||||||
var loaded = loadMod(dest, true);
|
var loaded = loadMod(dest, true, true);
|
||||||
mods.add(loaded);
|
mods.add(loaded);
|
||||||
|
//invalidate ordered mods cache
|
||||||
|
lastOrderedMods = null;
|
||||||
requiresReload = true;
|
requiresReload = true;
|
||||||
//enable the mod on import
|
//enable the mod on import
|
||||||
Core.settings.put("mod-" + loaded.name + "-enabled", true);
|
Core.settings.put("mod-" + loaded.name + "-enabled", true);
|
||||||
@@ -418,19 +424,59 @@ public class Mods implements Loadable{
|
|||||||
|
|
||||||
/** Loads all mods from the folder, but does not call any methods on them.*/
|
/** Loads all mods from the folder, but does not call any methods on them.*/
|
||||||
public void load(){
|
public void load(){
|
||||||
var files = resolveDependencies(Seq.with(modDirectory.list()).filter(f ->
|
var candidates = new Seq<Fi>();
|
||||||
f.extEquals("jar") || f.extEquals("zip") || (f.isDirectory() && (f.child("mod.json").exists() || f.child("mod.hjson").exists()))
|
|
||||||
));
|
// Add local mods
|
||||||
|
Seq.with(modDirectory.list())
|
||||||
|
.filter(f -> f.extEquals("jar") || f.extEquals("zip") || (f.isDirectory() && Structs.contains(metaFiles, meta -> f.child(meta).exists())))
|
||||||
|
.each(candidates::add);
|
||||||
|
|
||||||
|
// Add Steam workshop mods
|
||||||
|
platform.getWorkshopContent(LoadedMod.class)
|
||||||
|
.each(candidates::add);
|
||||||
|
|
||||||
|
var mapping = new ObjectMap<String, Fi>();
|
||||||
|
var metas = new Seq<ModMeta>();
|
||||||
|
|
||||||
|
for(Fi file : candidates){
|
||||||
|
ModMeta meta = null;
|
||||||
|
|
||||||
|
try{
|
||||||
|
Fi zip = file.isDirectory() ? file : new ZipFi(file);
|
||||||
|
|
||||||
|
if(zip.list().length == 1 && zip.list()[0].isDirectory()){
|
||||||
|
zip = zip.list()[0];
|
||||||
|
}
|
||||||
|
|
||||||
|
meta = findMeta(zip);
|
||||||
|
}catch(Throwable ignored){
|
||||||
|
}
|
||||||
|
|
||||||
|
if(meta == null || meta.name == null) continue;
|
||||||
|
metas.add(meta);
|
||||||
|
mapping.put(meta.name, file);
|
||||||
|
}
|
||||||
|
|
||||||
|
var resolved = resolveDependencies(metas);
|
||||||
|
for(var entry : resolved){
|
||||||
|
var file = mapping.get(entry.key);
|
||||||
|
var steam = platform.getWorkshopContent(LoadedMod.class).contains(file);
|
||||||
|
|
||||||
for(Fi file : files){
|
|
||||||
Log.debug("[Mods] Loading mod @", file);
|
Log.debug("[Mods] Loading mod @", file);
|
||||||
|
|
||||||
try{
|
try{
|
||||||
LoadedMod mod = loadMod(file);
|
LoadedMod mod = loadMod(file, false, entry.value == ModState.enabled);
|
||||||
|
mod.state = entry.value;
|
||||||
mods.add(mod);
|
mods.add(mod);
|
||||||
|
//invalidate ordered mods cache
|
||||||
|
lastOrderedMods = null;
|
||||||
|
if(steam) mod.addSteamID(file.name());
|
||||||
}catch(Throwable e){
|
}catch(Throwable e){
|
||||||
if(e instanceof ClassNotFoundException && e.getMessage().contains("mindustry.plugin.Plugin")){
|
if(e instanceof ClassNotFoundException && e.getMessage().contains("mindustry.plugin.Plugin")){
|
||||||
Log.info("Plugin '@' is outdated and needs to be ported to 6.0! Update its main class to inherit from 'mindustry.mod.Plugin'. See https://mindustrygame.github.io/wiki/modding/6-migrationv6/", file.name());
|
Log.info("Plugin '@' is outdated and needs to be ported to 6.0! Update its main class to inherit from 'mindustry.mod.Plugin'. See https://mindustrygame.github.io/wiki/modding/6-migrationv6/", file.name());
|
||||||
|
}else if(steam){
|
||||||
|
Log.err("Failed to load mod workshop file @. Skipping.", file);
|
||||||
|
Log.err(e);
|
||||||
}else{
|
}else{
|
||||||
Log.err("Failed to load mod file @. Skipping.", file);
|
Log.err("Failed to load mod file @. Skipping.", file);
|
||||||
Log.err(e);
|
Log.err(e);
|
||||||
@@ -438,21 +484,19 @@ public class Mods implements Loadable{
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//load workshop mods now
|
// Resolve the state
|
||||||
for(Fi file : resolveDependencies(platform.getWorkshopContent(LoadedMod.class))){
|
mods.each(this::updateDependencies);
|
||||||
try{
|
for(var mod : mods){
|
||||||
LoadedMod mod = loadMod(file);
|
// Skip mods where the state has already been resolved
|
||||||
mods.add(mod);
|
if(mod.state != ModState.enabled) continue;
|
||||||
mod.addSteamID(file.name());
|
if(!mod.isSupported()){
|
||||||
}catch(Throwable e){
|
mod.state = ModState.unsupported;
|
||||||
Log.err("Failed to load mod workshop file @. Skipping.", file);
|
}else if(!mod.shouldBeEnabled()){
|
||||||
Log.err(e);
|
mod.state = ModState.disabled;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
resolveModState();
|
|
||||||
sortMods();
|
sortMods();
|
||||||
|
|
||||||
buildFiles();
|
buildFiles();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -461,18 +505,6 @@ public class Mods implements Loadable{
|
|||||||
mods.sort(Structs.comps(Structs.comparingInt(m -> m.state.ordinal()), Structs.comparing(m -> m.name)));
|
mods.sort(Structs.comps(Structs.comparingInt(m -> m.state.ordinal()), Structs.comparing(m -> m.name)));
|
||||||
}
|
}
|
||||||
|
|
||||||
private void resolveModState(){
|
|
||||||
mods.each(this::updateDependencies);
|
|
||||||
|
|
||||||
for(LoadedMod mod : mods){
|
|
||||||
mod.state =
|
|
||||||
!mod.isSupported() ? ModState.unsupported :
|
|
||||||
mod.hasUnmetDependencies() ? ModState.missingDependencies :
|
|
||||||
!mod.shouldBeEnabled() ? ModState.disabled :
|
|
||||||
ModState.enabled;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private void updateDependencies(LoadedMod mod){
|
private void updateDependencies(LoadedMod mod){
|
||||||
mod.dependencies.clear();
|
mod.dependencies.clear();
|
||||||
mod.missingDependencies.clear();
|
mod.missingDependencies.clear();
|
||||||
@@ -485,22 +517,17 @@ public class Mods implements Loadable{
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void topoSort(LoadedMod mod, Seq<LoadedMod> stack, ObjectSet<LoadedMod> visited){
|
|
||||||
visited.add(mod);
|
|
||||||
mod.dependencies.each(m -> !visited.contains(m), m -> topoSort(m, stack, visited));
|
|
||||||
stack.add(mod);
|
|
||||||
}
|
|
||||||
|
|
||||||
/** @return mods ordered in the correct way needed for dependencies. */
|
/** @return mods ordered in the correct way needed for dependencies. */
|
||||||
private Seq<LoadedMod> orderedMods(){
|
public Seq<LoadedMod> orderedMods(){
|
||||||
ObjectSet<LoadedMod> visited = new ObjectSet<>();
|
//update cache if it's "dirty"/empty
|
||||||
Seq<LoadedMod> result = new Seq<>();
|
if(lastOrderedMods == null){
|
||||||
eachEnabled(mod -> {
|
//only enabled mods participate; this state is resolved in load()
|
||||||
if(!visited.contains(mod)){
|
Seq<LoadedMod> enabled = mods.select(LoadedMod::enabled);
|
||||||
topoSort(mod, result, visited);
|
|
||||||
|
var mapping = enabled.asMap(m -> m.meta.name);
|
||||||
|
lastOrderedMods = resolveDependencies(enabled.map(m -> m.meta)).orderedKeys().map(mapping::get);
|
||||||
}
|
}
|
||||||
});
|
return lastOrderedMods;
|
||||||
return result;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public LoadedMod locateMod(String name){
|
public LoadedMod locateMod(String name){
|
||||||
@@ -758,12 +785,12 @@ public class Mods implements Loadable{
|
|||||||
|
|
||||||
/** Iterates through each mod with a main class. */
|
/** Iterates through each mod with a main class. */
|
||||||
public void eachClass(Cons<Mod> cons){
|
public void eachClass(Cons<Mod> cons){
|
||||||
mods.each(p -> p.main != null, p -> contextRun(p, () -> cons.get(p.main)));
|
orderedMods().each(p -> p.main != null, p -> contextRun(p, () -> cons.get(p.main)));
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Iterates through each enabled mod. */
|
/** Iterates through each enabled mod. */
|
||||||
public void eachEnabled(Cons<LoadedMod> cons){
|
public void eachEnabled(Cons<LoadedMod> cons){
|
||||||
mods.each(LoadedMod::enabled, cons);
|
orderedMods().each(LoadedMod::enabled, cons);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void contextRun(LoadedMod mod, Runnable run){
|
public void contextRun(LoadedMod mod, Runnable run){
|
||||||
@@ -793,78 +820,71 @@ public class Mods implements Loadable{
|
|||||||
return meta;
|
return meta;
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Resolves the loading order of a list mods/plugins using their internal names.
|
/** Resolves the loading order of a list mods/plugins using their internal names. */
|
||||||
* It also skips non-mods files or folders. */
|
public OrderedMap<String, ModState> resolveDependencies(Seq<ModMeta> metas){
|
||||||
public Seq<Fi> resolveDependencies(Seq<Fi> files){
|
var context = new ModResolutionContext();
|
||||||
ObjectMap<String, Fi> fileMapping = new ObjectMap<>();
|
|
||||||
ObjectMap<String, Seq<String>> dependencies = new ObjectMap<>();
|
|
||||||
|
|
||||||
for(Fi file : files){
|
for(var meta : metas){
|
||||||
ModMeta meta = null;
|
Seq<ModDependency> dependencies = new Seq<>();
|
||||||
|
for(var dependency : meta.dependencies){
|
||||||
try{
|
dependencies.add(new ModDependency(dependency, true));
|
||||||
Fi zip = file.isDirectory() ? file : new ZipFi(file);
|
}
|
||||||
|
for(var dependency : meta.softDependencies){
|
||||||
if(zip.list().length == 1 && zip.list()[0].isDirectory()){
|
dependencies.add(new ModDependency(dependency, false));
|
||||||
zip = zip.list()[0];
|
}
|
||||||
|
context.dependencies.put(meta.name, dependencies);
|
||||||
}
|
}
|
||||||
|
|
||||||
meta = findMeta(zip);
|
for(var key : context.dependencies.keys()){
|
||||||
}catch(Throwable ignored){
|
if (context.ordered.contains(key)) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
resolve(key, context);
|
||||||
|
context.visited.clear();
|
||||||
}
|
}
|
||||||
|
|
||||||
if(meta == null || meta.name == null) continue;
|
var result = new OrderedMap<String, ModState>();
|
||||||
dependencies.put(meta.name, meta.dependencies);
|
for(var name : context.ordered){
|
||||||
fileMapping.put(meta.name, file);
|
result.put(name, ModState.enabled);
|
||||||
|
}
|
||||||
|
result.putAll(context.invalid);
|
||||||
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
ObjectSet<String> visited = new ObjectSet<>();
|
private boolean resolve(String element, ModResolutionContext context){
|
||||||
OrderedSet<String> ordered = new OrderedSet<>();
|
context.visited.add(element);
|
||||||
|
for(final var dependency : context.dependencies.get(element)){
|
||||||
for(String modName : dependencies.keys()){
|
// Circular dependencies ?
|
||||||
if(!ordered.contains(modName)){
|
if(context.visited.contains(dependency.name) && !context.ordered.contains(dependency.name)){
|
||||||
// Adds the loaded mods at the beginning of the list
|
context.invalid.put(dependency.name, ModState.circularDependencies);
|
||||||
ordered.add(modName, 0);
|
return false;
|
||||||
resolveDependencies(modName, dependencies, ordered, visited);
|
// If dependency present, resolve it, or if it's not required, ignore it
|
||||||
visited.clear();
|
}else if(context.dependencies.containsKey(dependency.name)){
|
||||||
|
if(!context.ordered.contains(dependency.name) && !resolve(dependency.name, context) && dependency.required){
|
||||||
|
context.invalid.put(element, ModState.incompleteDependencies);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
// The dependency is missing, but if not required, skip
|
||||||
|
}else if(dependency.required){
|
||||||
|
context.invalid.put(element, ModState.missingDependencies);
|
||||||
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if(!context.ordered.contains(element)){
|
||||||
// Adds the invalid mods
|
context.ordered.add(element);
|
||||||
for(String missingMod : dependencies.keys()){
|
|
||||||
if(!ordered.contains(missingMod)) ordered.add(missingMod, 0);
|
|
||||||
}
|
|
||||||
|
|
||||||
Seq<Fi> resolved = ordered.orderedItems().map(fileMapping::get);
|
|
||||||
// Since the resolver explores the dependencies from leaves to the root, reverse the seq
|
|
||||||
resolved.reverse();
|
|
||||||
return resolved;
|
|
||||||
}
|
|
||||||
|
|
||||||
/** Recursive search of dependencies */
|
|
||||||
public void resolveDependencies(String modName, ObjectMap<String, Seq<String>> dependencies, OrderedSet<String> ordered, ObjectSet<String> visited){
|
|
||||||
visited.add(modName);
|
|
||||||
|
|
||||||
for(String dependency : dependencies.get(modName)){
|
|
||||||
// Checks if the dependency tree isn't circular and that the dependency is not missing
|
|
||||||
if(!visited.contains(dependency) && dependencies.containsKey(dependency)){
|
|
||||||
// Skips if the dependency was already explored in a separate tree
|
|
||||||
if(ordered.contains(dependency)) continue;
|
|
||||||
ordered.add(dependency);
|
|
||||||
resolveDependencies(dependency, dependencies, ordered, visited);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Loads a mod file+meta, but does not add it to the list.
|
/** Loads a mod file+meta, but does not add it to the list.
|
||||||
* Note that directories can be loaded as mods. */
|
* Note that directories can be loaded as mods. */
|
||||||
private LoadedMod loadMod(Fi sourceFile) throws Exception{
|
private LoadedMod loadMod(Fi sourceFile) throws Exception{
|
||||||
return loadMod(sourceFile, false);
|
return loadMod(sourceFile, false, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Loads a mod file+meta, but does not add it to the list.
|
/** Loads a mod file+meta, but does not add it to the list.
|
||||||
* Note that directories can be loaded as mods. */
|
* Note that directories can be loaded as mods. */
|
||||||
private LoadedMod loadMod(Fi sourceFile, boolean overwrite) throws Exception{
|
private LoadedMod loadMod(Fi sourceFile, boolean overwrite, boolean initialize) throws Exception{
|
||||||
Time.mark();
|
Time.mark();
|
||||||
|
|
||||||
ZipFi rootZip = null;
|
ZipFi rootZip = null;
|
||||||
@@ -930,7 +950,8 @@ public class Mods implements Loadable{
|
|||||||
!skipModLoading() &&
|
!skipModLoading() &&
|
||||||
Core.settings.getBool("mod-" + baseName + "-enabled", true) &&
|
Core.settings.getBool("mod-" + baseName + "-enabled", true) &&
|
||||||
Version.isAtLeast(meta.minGameVersion) &&
|
Version.isAtLeast(meta.minGameVersion) &&
|
||||||
(meta.getMinMajor() >= 136 || headless)
|
(meta.getMinMajor() >= 136 || headless) &&
|
||||||
|
initialize
|
||||||
){
|
){
|
||||||
if(ios){
|
if(ios){
|
||||||
throw new ModLoadException("Java class mods are not supported on iOS.");
|
throw new ModLoadException("Java class mods are not supported on iOS.");
|
||||||
@@ -1054,6 +1075,9 @@ public class Mods implements Loadable{
|
|||||||
|
|
||||||
/** @return whether this mod is supported by the game version */
|
/** @return whether this mod is supported by the game version */
|
||||||
public boolean isSupported(){
|
public boolean isSupported(){
|
||||||
|
//no unsupported mods on servers
|
||||||
|
if(headless) return true;
|
||||||
|
|
||||||
if(isOutdated() || isBlacklisted()) return false;
|
if(isOutdated() || isBlacklisted()) return false;
|
||||||
|
|
||||||
return Version.isAtLeast(meta.minGameVersion);
|
return Version.isAtLeast(meta.minGameVersion);
|
||||||
@@ -1152,6 +1176,7 @@ public class Mods implements Loadable{
|
|||||||
public String name, minGameVersion = "0";
|
public String name, minGameVersion = "0";
|
||||||
public @Nullable String displayName, author, description, subtitle, version, main, repo;
|
public @Nullable String displayName, author, description, subtitle, version, main, repo;
|
||||||
public Seq<String> dependencies = Seq.with();
|
public Seq<String> dependencies = Seq.with();
|
||||||
|
public Seq<String> softDependencies = Seq.with();
|
||||||
/** Hidden mods are only server-side or client-side, and do not support adding new content. */
|
/** Hidden mods are only server-side or client-side, and do not support adding new content. */
|
||||||
public boolean hidden;
|
public boolean hidden;
|
||||||
/** If true, this mod should be loaded as a Java class mod. This is technically optional, but highly recommended. */
|
/** If true, this mod should be loaded as a Java class mod. This is technically optional, but highly recommended. */
|
||||||
@@ -1173,6 +1198,7 @@ public class Mods implements Loadable{
|
|||||||
|
|
||||||
//removes all colors
|
//removes all colors
|
||||||
public void cleanup(){
|
public void cleanup(){
|
||||||
|
if(name != null) name = Strings.stripColors(name);
|
||||||
if(displayName != null) displayName = Strings.stripColors(displayName);
|
if(displayName != null) displayName = Strings.stripColors(displayName);
|
||||||
if(author != null) author = Strings.stripColors(author);
|
if(author != null) author = Strings.stripColors(author);
|
||||||
if(description != null) description = Strings.stripColors(description);
|
if(description != null) description = Strings.stripColors(description);
|
||||||
@@ -1189,13 +1215,21 @@ public class Mods implements Loadable{
|
|||||||
public String toString(){
|
public String toString(){
|
||||||
return "ModMeta{" +
|
return "ModMeta{" +
|
||||||
"name='" + name + '\'' +
|
"name='" + name + '\'' +
|
||||||
|
", minGameVersion='" + minGameVersion + '\'' +
|
||||||
|
", displayName='" + displayName + '\'' +
|
||||||
", author='" + author + '\'' +
|
", author='" + author + '\'' +
|
||||||
|
", description='" + description + '\'' +
|
||||||
|
", subtitle='" + subtitle + '\'' +
|
||||||
", version='" + version + '\'' +
|
", version='" + version + '\'' +
|
||||||
", main='" + main + '\'' +
|
", main='" + main + '\'' +
|
||||||
", minGameVersion='" + minGameVersion + '\'' +
|
", repo='" + repo + '\'' +
|
||||||
|
", dependencies=" + dependencies +
|
||||||
|
", softDependencies=" + softDependencies +
|
||||||
", hidden=" + hidden +
|
", hidden=" + hidden +
|
||||||
", repo=" + repo +
|
", java=" + java +
|
||||||
|
", keepOutlines=" + keepOutlines +
|
||||||
", texturescale=" + texturescale +
|
", texturescale=" + texturescale +
|
||||||
|
", pregenerated=" + pregenerated +
|
||||||
'}';
|
'}';
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1210,7 +1244,26 @@ public class Mods implements Loadable{
|
|||||||
enabled,
|
enabled,
|
||||||
contentErrors,
|
contentErrors,
|
||||||
missingDependencies,
|
missingDependencies,
|
||||||
|
incompleteDependencies,
|
||||||
|
circularDependencies,
|
||||||
unsupported,
|
unsupported,
|
||||||
disabled,
|
disabled,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static class ModResolutionContext {
|
||||||
|
public final ObjectMap<String, Seq<ModDependency>> dependencies = new ObjectMap<>();
|
||||||
|
public final ObjectSet<String> visited = new ObjectSet<>();
|
||||||
|
public final OrderedSet<String> ordered = new OrderedSet<>();
|
||||||
|
public final ObjectMap<String, ModState> invalid = new OrderedMap<>();
|
||||||
|
}
|
||||||
|
|
||||||
|
public static final class ModDependency{
|
||||||
|
public final String name;
|
||||||
|
public final boolean required;
|
||||||
|
|
||||||
|
public ModDependency(String name, boolean required){
|
||||||
|
this.name = name;
|
||||||
|
this.required = required;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -24,6 +24,8 @@ public class Administration{
|
|||||||
public ObjectSet<String> dosBlacklist = new ObjectSet<>();
|
public ObjectSet<String> dosBlacklist = new ObjectSet<>();
|
||||||
public ObjectMap<String, Long> kickedIPs = new ObjectMap<>();
|
public ObjectMap<String, Long> kickedIPs = new ObjectMap<>();
|
||||||
|
|
||||||
|
|
||||||
|
private boolean modified, loaded;
|
||||||
/** All player info. Maps UUIDs to info. This persists throughout restarts. Do not access directly. */
|
/** All player info. Maps UUIDs to info. This persists throughout restarts. Do not access directly. */
|
||||||
private ObjectMap<String, PlayerInfo> playerInfo = new ObjectMap<>();
|
private ObjectMap<String, PlayerInfo> playerInfo = new ObjectMap<>();
|
||||||
|
|
||||||
@@ -48,8 +50,8 @@ public class Administration{
|
|||||||
player.getInfo().messageInfractions = 0;
|
player.getInfo().messageInfractions = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
//prevent players from sending the same message twice in the span of 50 seconds
|
//prevent players from sending the same message twice in the span of 10 seconds
|
||||||
if(message.equals(player.getInfo().lastSentMessage) && Time.timeSinceMillis(player.getInfo().lastMessageTime) < 1000 * 50){
|
if(message.equals(player.getInfo().lastSentMessage) && Time.timeSinceMillis(player.getInfo().lastMessageTime) < 1000 * 10){
|
||||||
player.sendMessage("[scarlet]You may not send the same message twice.");
|
player.sendMessage("[scarlet]You may not send the same message twice.");
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
@@ -448,16 +450,26 @@ public class Administration{
|
|||||||
}
|
}
|
||||||
|
|
||||||
public void save(){
|
public void save(){
|
||||||
|
modified = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void forceSave(){
|
||||||
|
if(modified && loaded){
|
||||||
Core.settings.putJson("player-data", playerInfo);
|
Core.settings.putJson("player-data", playerInfo);
|
||||||
|
Core.settings.putJson("ip-kicks", kickedIPs);
|
||||||
Core.settings.putJson("ip-bans", String.class, bannedIPs);
|
Core.settings.putJson("ip-bans", String.class, bannedIPs);
|
||||||
Core.settings.putJson("whitelist-ids", String.class, whitelist);
|
Core.settings.putJson("whitelist-ids", String.class, whitelist);
|
||||||
Core.settings.putJson("banned-subnets", String.class, subnetBans);
|
Core.settings.putJson("banned-subnets", String.class, subnetBans);
|
||||||
|
modified = false;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@SuppressWarnings("unchecked")
|
@SuppressWarnings("unchecked")
|
||||||
private void load(){
|
private void load(){
|
||||||
|
loaded = true;
|
||||||
//load default data
|
//load default data
|
||||||
playerInfo = Core.settings.getJson("player-data", ObjectMap.class, ObjectMap::new);
|
playerInfo = Core.settings.getJson("player-data", ObjectMap.class, ObjectMap::new);
|
||||||
|
kickedIPs = Core.settings.getJson("ip-kicks", ObjectMap.class, ObjectMap::new);
|
||||||
bannedIPs = Core.settings.getJson("ip-bans", Seq.class, Seq::new);
|
bannedIPs = Core.settings.getJson("ip-bans", Seq.class, Seq::new);
|
||||||
whitelist = Core.settings.getJson("whitelist-ids", Seq.class, Seq::new);
|
whitelist = Core.settings.getJson("whitelist-ids", Seq.class, Seq::new);
|
||||||
subnetBans = Core.settings.getJson("banned-subnets", Seq.class, Seq::new);
|
subnetBans = Core.settings.getJson("banned-subnets", Seq.class, Seq::new);
|
||||||
@@ -488,7 +500,7 @@ public class Administration{
|
|||||||
messageRateLimit = new Config("messageRateLimit", "Message rate limit in seconds. 0 to disable.", 0),
|
messageRateLimit = new Config("messageRateLimit", "Message rate limit in seconds. 0 to disable.", 0),
|
||||||
messageSpamKick = new Config("messageSpamKick", "How many times a player must send a message before the cooldown to get kicked. 0 to disable.", 3),
|
messageSpamKick = new Config("messageSpamKick", "How many times a player must send a message before the cooldown to get kicked. 0 to disable.", 3),
|
||||||
packetSpamLimit = new Config("packetSpamLimit", "Limit for packet count sent within 3sec that will lead to a blacklist + kick.", 300),
|
packetSpamLimit = new Config("packetSpamLimit", "Limit for packet count sent within 3sec that will lead to a blacklist + kick.", 300),
|
||||||
chatSpamLimit = new Config("packetSpamLimit", "Limit for chat packet count sent within 2sec that will lead to a blacklist + kick. Not the same as a rate limit.", 20),
|
chatSpamLimit = new Config("chatSpamLimit", "Limit for chat packet count sent within 2sec that will lead to a blacklist + kick. Not the same as a rate limit.", 20),
|
||||||
socketInput = new Config("socketInput", "Allows a local application to control this server through a local TCP socket.", false, "socket", () -> Events.fire(Trigger.socketConfigChanged)),
|
socketInput = new Config("socketInput", "Allows a local application to control this server through a local TCP socket.", false, "socket", () -> Events.fire(Trigger.socketConfigChanged)),
|
||||||
socketInputPort = new Config("socketInputPort", "The port for socket input.", 6859, () -> Events.fire(Trigger.socketConfigChanged)),
|
socketInputPort = new Config("socketInputPort", "The port for socket input.", 6859, () -> Events.fire(Trigger.socketConfigChanged)),
|
||||||
socketInputAddress = new Config("socketInputAddress", "The bind address for socket input.", "localhost", () -> Events.fire(Trigger.socketConfigChanged)),
|
socketInputAddress = new Config("socketInputAddress", "The bind address for socket input.", "localhost", () -> Events.fire(Trigger.socketConfigChanged)),
|
||||||
|
|||||||
@@ -151,7 +151,7 @@ public class BeControl{
|
|||||||
Log.info("&lcAutosaved.");
|
Log.info("&lcAutosaved.");
|
||||||
|
|
||||||
netServer.kickAll(KickReason.serverRestarting);
|
netServer.kickAll(KickReason.serverRestarting);
|
||||||
Threads.sleep(32);
|
Threads.sleep(500);
|
||||||
|
|
||||||
Log.info("&lcVersion downloaded, exiting. Note that if you are not using a auto-restart script, the server will not restart automatically.");
|
Log.info("&lcVersion downloaded, exiting. Note that if you are not using a auto-restart script, the server will not restart automatically.");
|
||||||
//replace old file with new
|
//replace old file with new
|
||||||
|
|||||||
@@ -5,6 +5,7 @@ import arc.func.*;
|
|||||||
import arc.net.*;
|
import arc.net.*;
|
||||||
import arc.struct.*;
|
import arc.struct.*;
|
||||||
import arc.util.*;
|
import arc.util.*;
|
||||||
|
import mindustry.game.EventType.*;
|
||||||
import mindustry.gen.*;
|
import mindustry.gen.*;
|
||||||
import mindustry.net.Packets.*;
|
import mindustry.net.Packets.*;
|
||||||
import mindustry.net.Streamable.*;
|
import mindustry.net.Streamable.*;
|
||||||
@@ -154,6 +155,7 @@ public class Net{
|
|||||||
public void connect(String ip, int port, Runnable success){
|
public void connect(String ip, int port, Runnable success){
|
||||||
try{
|
try{
|
||||||
if(!active){
|
if(!active){
|
||||||
|
Events.fire(new ClientServerConnectEvent(ip, port));
|
||||||
provider.connectClient(ip, port, success);
|
provider.connectClient(ip, port, success);
|
||||||
active = true;
|
active = true;
|
||||||
server = false;
|
server = false;
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
package mindustry.net;
|
package mindustry.net;
|
||||||
|
|
||||||
|
import arc.*;
|
||||||
import arc.struct.*;
|
import arc.struct.*;
|
||||||
import arc.util.*;
|
import arc.util.*;
|
||||||
import mindustry.entities.units.*;
|
import mindustry.entities.units.*;
|
||||||
@@ -76,7 +77,12 @@ public abstract class NetConnection{
|
|||||||
Call.kick(this, reason);
|
Call.kick(this, reason);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if(uuid.startsWith("steam:")){
|
||||||
|
//run with a 2-frame delay so there is time to send the kick packet, steam handles this weirdly
|
||||||
|
Core.app.post(() -> Core.app.post(this::close));
|
||||||
|
}else{
|
||||||
close();
|
close();
|
||||||
|
}
|
||||||
|
|
||||||
netServer.admins.save();
|
netServer.admins.save();
|
||||||
kicked = true;
|
kicked = true;
|
||||||
|
|||||||
@@ -805,6 +805,10 @@ public class UnitType extends UnlockableContent{
|
|||||||
|
|
||||||
cmds.add(UnitCommand.moveCommand);
|
cmds.add(UnitCommand.moveCommand);
|
||||||
|
|
||||||
|
if(canBoost){
|
||||||
|
cmds.add(UnitCommand.boostCommand);
|
||||||
|
}
|
||||||
|
|
||||||
//healing, mining and building is only supported for flying units; pathfinding to ambiguously reachable locations is hard.
|
//healing, mining and building is only supported for flying units; pathfinding to ambiguously reachable locations is hard.
|
||||||
if(flying){
|
if(flying){
|
||||||
if(canHeal){
|
if(canHeal){
|
||||||
|
|||||||
@@ -12,6 +12,7 @@ import static mindustry.Vars.*;
|
|||||||
/** Class for handling menus and notifications across the network. Unstable API! */
|
/** Class for handling menus and notifications across the network. Unstable API! */
|
||||||
public class Menus{
|
public class Menus{
|
||||||
private static final Seq<MenuListener> menuListeners = new Seq<>();
|
private static final Seq<MenuListener> menuListeners = new Seq<>();
|
||||||
|
private static final Seq<TextInputListener> textInputListeners = new Seq<>();
|
||||||
|
|
||||||
/** Register a *global* menu listener. If no option is chosen, the option is returned as -1. */
|
/** Register a *global* menu listener. If no option is chosen, the option is returned as -1. */
|
||||||
public static int registerMenu(MenuListener listener){
|
public static int registerMenu(MenuListener listener){
|
||||||
@@ -19,6 +20,12 @@ public class Menus{
|
|||||||
return menuListeners.size - 1;
|
return menuListeners.size - 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/** Register a *global* text input listener. If no text is provided, the text is returned as null. */
|
||||||
|
public static int registerTextInput(TextInputListener listener){
|
||||||
|
textInputListeners.add(listener);
|
||||||
|
return textInputListeners.size - 1;
|
||||||
|
}
|
||||||
|
|
||||||
//do not invoke any of the methods below directly, use Call
|
//do not invoke any of the methods below directly, use Call
|
||||||
|
|
||||||
@Remote(variants = Variant.both)
|
@Remote(variants = Variant.both)
|
||||||
@@ -29,6 +36,19 @@ public class Menus{
|
|||||||
ui.showMenu(title, message, options, (option) -> Call.menuChoose(player, menuId, option));
|
ui.showMenu(title, message, options, (option) -> Call.menuChoose(player, menuId, option));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Remote(variants = Variant.both)
|
||||||
|
public static void followUpMenu(int menuId, String title, String message, String[][] options){
|
||||||
|
if(title == null) title = "";
|
||||||
|
if(options == null) options = new String[0][0];
|
||||||
|
|
||||||
|
ui.showFollowUpMenu(menuId, title, message, options, (option) -> Call.menuChoose(player, menuId, option));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Remote(variants = Variant.both)
|
||||||
|
public static void hideFollowUpMenu(int menuId) {
|
||||||
|
ui.hideFollowUpMenu(menuId);
|
||||||
|
}
|
||||||
|
|
||||||
@Remote(targets = Loc.both, called = Loc.both)
|
@Remote(targets = Loc.both, called = Loc.both)
|
||||||
public static void menuChoose(@Nullable Player player, int menuId, int option){
|
public static void menuChoose(@Nullable Player player, int menuId, int option){
|
||||||
if(player != null){
|
if(player != null){
|
||||||
@@ -39,6 +59,27 @@ public class Menus{
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Remote(variants = Variant.both)
|
||||||
|
public static void textInput(int textInputId, String title, String message, int textLength, String def, boolean numeric){
|
||||||
|
if(title == null) title = "";
|
||||||
|
|
||||||
|
ui.showTextInput(title, message, textLength, def, numeric, (text) -> {
|
||||||
|
Call.textInputResult(player, textInputId, text);
|
||||||
|
}, () -> {
|
||||||
|
Call.textInputResult(player, textInputId, null);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
@Remote(targets = Loc.both, called = Loc.both)
|
||||||
|
public static void textInputResult(@Nullable Player player, int textInputId, @Nullable String text){
|
||||||
|
if(player != null){
|
||||||
|
Events.fire(new TextInputEvent(player, textInputId, text));
|
||||||
|
if(textInputId >= 0 && textInputId < textInputListeners.size){
|
||||||
|
textInputListeners.get(textInputId).get(player, text);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@Remote(variants = Variant.both, unreliable = true)
|
@Remote(variants = Variant.both, unreliable = true)
|
||||||
public static void setHudText(String message){
|
public static void setHudText(String message){
|
||||||
if(message == null) return;
|
if(message == null) return;
|
||||||
@@ -130,4 +171,8 @@ public class Menus{
|
|||||||
public interface MenuListener{
|
public interface MenuListener{
|
||||||
void get(Player player, int option);
|
void get(Player player, int option);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public interface TextInputListener{
|
||||||
|
void get(Player player, @Nullable String text);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -8,6 +8,7 @@ import arc.util.*;
|
|||||||
import mindustry.ctype.*;
|
import mindustry.ctype.*;
|
||||||
import mindustry.gen.*;
|
import mindustry.gen.*;
|
||||||
import mindustry.graphics.*;
|
import mindustry.graphics.*;
|
||||||
|
import mindustry.input.*;
|
||||||
import mindustry.world.meta.*;
|
import mindustry.world.meta.*;
|
||||||
|
|
||||||
import static arc.Core.*;
|
import static arc.Core.*;
|
||||||
@@ -19,6 +20,12 @@ public class ContentInfoDialog extends BaseDialog{
|
|||||||
super("@info.title");
|
super("@info.title");
|
||||||
|
|
||||||
addCloseButton();
|
addCloseButton();
|
||||||
|
|
||||||
|
keyDown(key -> {
|
||||||
|
if(key == keybinds.get(Binding.block_info).key){
|
||||||
|
Core.app.post(this::hide);
|
||||||
|
}
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
public void show(UnlockableContent content){
|
public void show(UnlockableContent content){
|
||||||
|
|||||||
@@ -38,6 +38,15 @@ public class HostDialog extends BaseDialog{
|
|||||||
button.update(() -> button.getStyle().imageUpColor = player.color());
|
button.update(() -> button.getStyle().imageUpColor = player.color());
|
||||||
}).width(w).height(70f).pad(4).colspan(3);
|
}).width(w).height(70f).pad(4).colspan(3);
|
||||||
|
|
||||||
|
if(steam){
|
||||||
|
cont.row();
|
||||||
|
|
||||||
|
cont.add().width(65f);
|
||||||
|
|
||||||
|
cont.check("@steam.friendsonly", !Core.settings.getBool("steampublichost"), val -> Core.settings.put("steampublichost", !val)).colspan(2).left()
|
||||||
|
.with(c -> ui.addDescTooltip(c, "@steam.friendsonly.tooltip")).padBottom(15f).row();
|
||||||
|
}
|
||||||
|
|
||||||
cont.row();
|
cont.row();
|
||||||
|
|
||||||
cont.add().width(65f);
|
cont.add().width(65f);
|
||||||
@@ -51,7 +60,11 @@ public class HostDialog extends BaseDialog{
|
|||||||
runHost();
|
runHost();
|
||||||
}).width(w).height(70f);
|
}).width(w).height(70f);
|
||||||
|
|
||||||
|
if(!steam){
|
||||||
cont.button("?", () -> ui.showInfo("@host.info")).size(65f, 70f).padLeft(6f);
|
cont.button("?", () -> ui.showInfo("@host.info")).size(65f, 70f).padLeft(6f);
|
||||||
|
}else{
|
||||||
|
cont.add().size(65f, 70f).padLeft(6f);
|
||||||
|
}
|
||||||
|
|
||||||
shown(() -> {
|
shown(() -> {
|
||||||
if(!steam){
|
if(!steam){
|
||||||
@@ -68,24 +81,9 @@ public class HostDialog extends BaseDialog{
|
|||||||
player.admin = true;
|
player.admin = true;
|
||||||
Events.fire(new HostEvent());
|
Events.fire(new HostEvent());
|
||||||
|
|
||||||
if(steam){
|
if(steam && Core.settings.getBool("steampublichost")){
|
||||||
Core.app.post(() -> Core.settings.getBoolOnce("steampublic3", () -> {
|
|
||||||
ui.showCustomConfirm("@setting.publichost.name", "@public.confirm", "@yes", "@no", () -> {
|
|
||||||
ui.showCustomConfirm("@setting.publichost.name", "@public.confirm.really", "@no", "@yes", () -> {
|
|
||||||
Core.settings.put("publichost", true);
|
|
||||||
platform.updateLobby();
|
|
||||||
}, () -> {
|
|
||||||
Core.settings.put("publichost", false);
|
|
||||||
platform.updateLobby();
|
|
||||||
});
|
|
||||||
}, () -> {
|
|
||||||
Core.settings.put("publichost", false);
|
|
||||||
platform.updateLobby();
|
|
||||||
});
|
|
||||||
}));
|
|
||||||
|
|
||||||
if(Version.modifier.contains("beta") || Version.modifier.contains("alpha")){
|
if(Version.modifier.contains("beta") || Version.modifier.contains("alpha")){
|
||||||
Core.settings.put("publichost", false);
|
Core.settings.put("steampublichost", false);
|
||||||
platform.updateLobby();
|
platform.updateLobby();
|
||||||
Core.settings.getBoolOnce("betapublic", () -> ui.showInfo("@public.beta"));
|
Core.settings.getBoolOnce("betapublic", () -> ui.showInfo("@public.beta"));
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -37,7 +37,7 @@ public class JoinDialog extends BaseDialog{
|
|||||||
TextButtonStyle style;
|
TextButtonStyle style;
|
||||||
|
|
||||||
String lastIp;
|
String lastIp;
|
||||||
int lastPort;
|
int lastPort, lastColumns = -1;
|
||||||
Task ping;
|
Task ping;
|
||||||
|
|
||||||
String serverSearch = "";
|
String serverSearch = "";
|
||||||
@@ -107,12 +107,17 @@ public class JoinDialog extends BaseDialog{
|
|||||||
});
|
});
|
||||||
|
|
||||||
onResize(() -> {
|
onResize(() -> {
|
||||||
|
|
||||||
|
|
||||||
//only refresh on resize when the minimum dimension is smaller than the maximum preferred width
|
//only refresh on resize when the minimum dimension is smaller than the maximum preferred width
|
||||||
//this means that refreshes on resize will only happen for small phones that need the list to fit in portrait mode
|
//this means that refreshes on resize will only happen for small phones that need the list to fit in portrait mode
|
||||||
if(Math.min(Core.graphics.getWidth(), Core.graphics.getHeight()) / Scl.scl() * 0.9f < 500f){
|
//also resize if number of cols changes
|
||||||
|
if(Math.min(Core.graphics.getWidth(), Core.graphics.getHeight()) / Scl.scl() * 0.9f < 500f || lastColumns != columns()){
|
||||||
setup();
|
setup();
|
||||||
refreshAll();
|
refreshAll();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
lastColumns = columns();
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -140,7 +145,11 @@ public class JoinDialog extends BaseDialog{
|
|||||||
connect(server.ip, server.port);
|
connect(server.ip, server.port);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}).width(targetWidth()).pad(4f).get();
|
}).width(targetWidth()).growY().top().left().pad(4f).get();
|
||||||
|
|
||||||
|
if(remote.getChildren().size % columns() == 0){
|
||||||
|
remote.row();
|
||||||
|
}
|
||||||
|
|
||||||
Table inner = new Table(Tex.whiteui);
|
Table inner = new Table(Tex.whiteui);
|
||||||
inner.setColor(Pal.gray);
|
inner.setColor(Pal.gray);
|
||||||
@@ -181,8 +190,6 @@ public class JoinDialog extends BaseDialog{
|
|||||||
button.row();
|
button.row();
|
||||||
|
|
||||||
server.content = button.table(t -> {}).grow().get();
|
server.content = button.table(t -> {}).grow().get();
|
||||||
|
|
||||||
remote.row();
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -234,6 +241,7 @@ public class JoinDialog extends BaseDialog{
|
|||||||
}
|
}
|
||||||
|
|
||||||
void buildServer(Host host, Table content){
|
void buildServer(Host host, Table content){
|
||||||
|
content.top().left();
|
||||||
String versionString;
|
String versionString;
|
||||||
|
|
||||||
if(host.version == -1){
|
if(host.version == -1){
|
||||||
@@ -267,6 +275,7 @@ public class JoinDialog extends BaseDialog{
|
|||||||
}).growX().height(36f).row();
|
}).growX().height(36f).row();
|
||||||
|
|
||||||
content.table(Tex.whitePane, t -> {
|
content.table(Tex.whitePane, t -> {
|
||||||
|
t.top().left();
|
||||||
t.setColor(color);
|
t.setColor(color);
|
||||||
t.left();
|
t.left();
|
||||||
|
|
||||||
@@ -295,7 +304,7 @@ public class JoinDialog extends BaseDialog{
|
|||||||
if(host.ping > 0){
|
if(host.ping > 0){
|
||||||
t.add(Iconc.chartBar + " " + host.ping + "ms").style(Styles.outlineLabel).color(Pal.gray).left();
|
t.add(Iconc.chartBar + " " + host.ping + "ms").style(Styles.outlineLabel).color(Pal.gray).left();
|
||||||
}
|
}
|
||||||
}).growX().left().bottom();
|
}).growY().growX().left().bottom();
|
||||||
}
|
}
|
||||||
|
|
||||||
void setup(){
|
void setup(){
|
||||||
@@ -333,7 +342,7 @@ public class JoinDialog extends BaseDialog{
|
|||||||
button.update(() -> button.getStyle().imageUpColor = player.color());
|
button.update(() -> button.getStyle().imageUpColor = player.color());
|
||||||
}).width(w).height(70f).pad(4);
|
}).width(w).height(70f).pad(4);
|
||||||
cont.row();
|
cont.row();
|
||||||
cont.add(pane).width(w + 38).pad(0);
|
cont.add(pane).width((w + 5) * columns() + 33).pad(0);
|
||||||
cont.row();
|
cont.row();
|
||||||
cont.buttonCenter("@server.add", Icon.add, () -> {
|
cont.buttonCenter("@server.add", Icon.add, () -> {
|
||||||
renaming = null;
|
renaming = null;
|
||||||
@@ -379,7 +388,7 @@ public class JoinDialog extends BaseDialog{
|
|||||||
hosts.row();
|
hosts.row();
|
||||||
hosts.image().growX().pad(5).padLeft(10).padRight(10).height(3).color(Pal.accent);
|
hosts.image().growX().pad(5).padLeft(10).padRight(10).height(3).color(Pal.accent);
|
||||||
hosts.row();
|
hosts.row();
|
||||||
hosts.add(coll).width(targetWidth());
|
hosts.add(coll).width((targetWidth() + 5f) * columns());
|
||||||
hosts.row();
|
hosts.row();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -404,7 +413,7 @@ public class JoinDialog extends BaseDialog{
|
|||||||
serverSearch = text.trim().replaceAll(" +", " ").toLowerCase()
|
serverSearch = text.trim().replaceAll(" +", " ").toLowerCase()
|
||||||
).grow().pad(8).get().keyDown(KeyCode.enter, this::refreshCommunity);
|
).grow().pad(8).get().keyDown(KeyCode.enter, this::refreshCommunity);
|
||||||
t.button(Icon.zoom, Styles.emptyi, this::refreshCommunity).size(54f);
|
t.button(Icon.zoom, Styles.emptyi, this::refreshCommunity).size(54f);
|
||||||
}).width(targetWidth()).height(70f).pad(4).row();
|
}).width((targetWidth() + 5f) * columns()).height(70f).pad(4).row();
|
||||||
|
|
||||||
for(int i = 0; i < defaultServers.size; i ++){
|
for(int i = 0; i < defaultServers.size; i ++){
|
||||||
ServerGroup group = defaultServers.get((i + defaultServers.size/2) % defaultServers.size);
|
ServerGroup group = defaultServers.get((i + defaultServers.size/2) % defaultServers.size);
|
||||||
@@ -413,7 +422,7 @@ public class JoinDialog extends BaseDialog{
|
|||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
Table[] groupTable = {null};
|
Table[] groupTable = {null, null};
|
||||||
|
|
||||||
//table containing all groups
|
//table containing all groups
|
||||||
for(String address : group.addresses){
|
for(String address : group.addresses){
|
||||||
@@ -430,7 +439,7 @@ public class JoinDialog extends BaseDialog{
|
|||||||
|
|
||||||
//add header
|
//add header
|
||||||
if(groupTable[0] == null){
|
if(groupTable[0] == null){
|
||||||
global.table(t -> groupTable[0] = t).row();
|
global.table(t -> groupTable[0] = t).fillX().left().row();
|
||||||
|
|
||||||
groupTable[0].table(head -> {
|
groupTable[0].table(head -> {
|
||||||
if(!group.name.isEmpty()){
|
if(!group.name.isEmpty()){
|
||||||
@@ -448,10 +457,12 @@ public class JoinDialog extends BaseDialog{
|
|||||||
}
|
}
|
||||||
}).size(40f).get();
|
}).size(40f).get();
|
||||||
image[0].addListener(new Tooltip(t -> t.background(Styles.black6).margin(4).label(() -> !group.hidden() ? "@server.shown" : "@server.hidden")));
|
image[0].addListener(new Tooltip(t -> t.background(Styles.black6).margin(4).label(() -> !group.hidden() ? "@server.shown" : "@server.hidden")));
|
||||||
}).width(targetWidth()).padBottom(-2).row();
|
}).width(targetWidth() * columns()).padBottom(-2).row();
|
||||||
|
|
||||||
|
groupTable[1] = groupTable[0].row().table().top().left().grow().get();
|
||||||
}
|
}
|
||||||
|
|
||||||
addCommunityHost(res, groupTable[0]);
|
addCommunityHost(res, groupTable[1]);
|
||||||
|
|
||||||
groupTable[0].margin(5f);
|
groupTable[0].margin(5f);
|
||||||
groupTable[0].pack();
|
groupTable[0].pack();
|
||||||
@@ -460,11 +471,16 @@ public class JoinDialog extends BaseDialog{
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int columns(){
|
||||||
|
return Mathf.clamp((int)((Core.graphics.getWidth() / Scl.scl() * 0.85f) / targetWidth()), 1, 3);
|
||||||
|
}
|
||||||
|
|
||||||
void addCommunityHost(Host host, Table container){
|
void addCommunityHost(Host host, Table container){
|
||||||
global.background(null);
|
global.background(null);
|
||||||
float w = targetWidth();
|
float w = targetWidth();
|
||||||
|
|
||||||
//TODO looks bad
|
container.left().top();
|
||||||
|
|
||||||
container.button(b -> buildServer(host, b), style, () -> {
|
container.button(b -> buildServer(host, b), style, () -> {
|
||||||
Events.fire(new ClientPreConnectEvent(host));
|
Events.fire(new ClientPreConnectEvent(host));
|
||||||
if(!Core.settings.getBool("server-disclaimer", false)){
|
if(!Core.settings.getBool("server-disclaimer", false)){
|
||||||
@@ -477,7 +493,11 @@ public class JoinDialog extends BaseDialog{
|
|||||||
}else{
|
}else{
|
||||||
safeConnect(host.address, host.port, host.version);
|
safeConnect(host.address, host.port, host.version);
|
||||||
}
|
}
|
||||||
}).width(w).padBottom(7).row();
|
}).width(w).padBottom(7).padRight(4f).top().left().growY().uniformY();
|
||||||
|
|
||||||
|
if((container.getChildren().size) % columns() == 0){
|
||||||
|
container.row();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void finishLocalHosts(){
|
void finishLocalHosts(){
|
||||||
@@ -500,12 +520,14 @@ public class JoinDialog extends BaseDialog{
|
|||||||
totalHosts++;
|
totalHosts++;
|
||||||
float w = targetWidth();
|
float w = targetWidth();
|
||||||
|
|
||||||
|
if((local.getChildren().size) % columns() == 0){
|
||||||
local.row();
|
local.row();
|
||||||
|
}
|
||||||
|
|
||||||
local.button(b -> buildServer(host, b), style, () -> {
|
local.button(b -> buildServer(host, b), style, () -> {
|
||||||
Events.fire(new ClientPreConnectEvent(host));
|
Events.fire(new ClientPreConnectEvent(host));
|
||||||
safeConnect(host.address, host.port, host.version);
|
safeConnect(host.address, host.port, host.version);
|
||||||
}).width(w);
|
}).width(w).top().left().growY();
|
||||||
}
|
}
|
||||||
|
|
||||||
public void connect(String ip, int port){
|
public void connect(String ip, int port){
|
||||||
@@ -599,6 +621,7 @@ public class JoinDialog extends BaseDialog{
|
|||||||
});
|
});
|
||||||
//modify default servers on main thread
|
//modify default servers on main thread
|
||||||
Core.app.post(() -> {
|
Core.app.post(() -> {
|
||||||
|
servers.sort(s -> s.name == null ? Integer.MAX_VALUE : s.name.hashCode());
|
||||||
defaultServers.addAll(servers);
|
defaultServers.addAll(servers);
|
||||||
Log.info("Fetched @ community servers.", defaultServers.size);
|
Log.info("Fetched @ community servers.", defaultServers.size);
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -227,13 +227,11 @@ public class MapsDialog extends BaseDialog{
|
|||||||
t.button("@custom", Styles.flatTogglet, () -> {
|
t.button("@custom", Styles.flatTogglet, () -> {
|
||||||
showCustom = !showCustom;
|
showCustom = !showCustom;
|
||||||
Core.settings.put("editorshowcustommaps", showCustom);
|
Core.settings.put("editorshowcustommaps", showCustom);
|
||||||
Core.settings.forceSave();
|
|
||||||
rebuildMaps();
|
rebuildMaps();
|
||||||
}).size(150f, 60f).checked(showCustom);
|
}).size(150f, 60f).checked(showCustom);
|
||||||
t.button("@builtin", Styles.flatTogglet, () -> {
|
t.button("@builtin", Styles.flatTogglet, () -> {
|
||||||
showBuiltIn = !showBuiltIn;
|
showBuiltIn = !showBuiltIn;
|
||||||
Core.settings.put("editorshowbuiltinmaps", showBuiltIn);
|
Core.settings.put("editorshowbuiltinmaps", showBuiltIn);
|
||||||
Core.settings.forceSave();
|
|
||||||
rebuildMaps();
|
rebuildMaps();
|
||||||
}).size(150f, 60f).checked(showBuiltIn);
|
}).size(150f, 60f).checked(showBuiltIn);
|
||||||
}).padBottom(10f);
|
}).padBottom(10f);
|
||||||
@@ -244,13 +242,11 @@ public class MapsDialog extends BaseDialog{
|
|||||||
t.button("@editor.filters.author", Styles.flatTogglet, () -> {
|
t.button("@editor.filters.author", Styles.flatTogglet, () -> {
|
||||||
searchAuthor = !searchAuthor;
|
searchAuthor = !searchAuthor;
|
||||||
Core.settings.put("editorsearchauthor", searchAuthor);
|
Core.settings.put("editorsearchauthor", searchAuthor);
|
||||||
Core.settings.forceSave();
|
|
||||||
rebuildMaps();
|
rebuildMaps();
|
||||||
}).size(150f, 60f).checked(searchAuthor);
|
}).size(150f, 60f).checked(searchAuthor);
|
||||||
t.button("@editor.filters.description", Styles.flatTogglet, () -> {
|
t.button("@editor.filters.description", Styles.flatTogglet, () -> {
|
||||||
searchDescription = !searchDescription;
|
searchDescription = !searchDescription;
|
||||||
Core.settings.put("editorsearchdescription", searchDescription);
|
Core.settings.put("editorsearchdescription", searchDescription);
|
||||||
Core.settings.forceSave();
|
|
||||||
rebuildMaps();
|
rebuildMaps();
|
||||||
}).size(150f, 60f).checked(searchDescription);
|
}).size(150f, 60f).checked(searchDescription);
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -329,6 +329,10 @@ public class ModsDialog extends BaseDialog{
|
|||||||
return "@mod.blacklisted";
|
return "@mod.blacklisted";
|
||||||
}else if(!item.isSupported()){
|
}else if(!item.isSupported()){
|
||||||
return "@mod.incompatiblegame";
|
return "@mod.incompatiblegame";
|
||||||
|
}else if(item.state == ModState.circularDependencies){
|
||||||
|
return "@mod.circulardependencies";
|
||||||
|
}else if(item.state == ModState.incompleteDependencies){
|
||||||
|
return "@mod.incompletedependencies";
|
||||||
}else if(item.hasUnmetDependencies()){
|
}else if(item.hasUnmetDependencies()){
|
||||||
return "@mod.unmetdependencies";
|
return "@mod.unmetdependencies";
|
||||||
}else if(item.hasContentErrors()){
|
}else if(item.hasContentErrors()){
|
||||||
@@ -346,6 +350,10 @@ public class ModsDialog extends BaseDialog{
|
|||||||
return "@mod.blacklisted.details";
|
return "@mod.blacklisted.details";
|
||||||
}else if(!item.isSupported()){
|
}else if(!item.isSupported()){
|
||||||
return Core.bundle.format("mod.requiresversion.details", item.meta.minGameVersion);
|
return Core.bundle.format("mod.requiresversion.details", item.meta.minGameVersion);
|
||||||
|
}else if(item.state == ModState.circularDependencies){
|
||||||
|
return "@mod.circulardependencies.details";
|
||||||
|
}else if(item.state == ModState.incompleteDependencies){
|
||||||
|
return Core.bundle.format("mod.incompletedependencies.details", item.missingDependencies.toString(", "));
|
||||||
}else if(item.hasUnmetDependencies()){
|
}else if(item.hasUnmetDependencies()){
|
||||||
return Core.bundle.format("mod.missingdependencies.details", item.missingDependencies.toString(", "));
|
return Core.bundle.format("mod.missingdependencies.details", item.missingDependencies.toString(", "));
|
||||||
}else if(item.hasContentErrors()){
|
}else if(item.hasContentErrors()){
|
||||||
@@ -407,7 +415,7 @@ public class ModsDialog extends BaseDialog{
|
|||||||
|
|
||||||
}).width(400f);
|
}).width(400f);
|
||||||
|
|
||||||
Seq<UnlockableContent> all = Seq.with(content.getContentMap()).<Content>flatten().select(c -> c.minfo.mod == mod && c instanceof UnlockableContent).as();
|
Seq<UnlockableContent> all = Seq.with(content.getContentMap()).<Content>flatten().select(c -> c.minfo.mod == mod && c instanceof UnlockableContent u && !u.isHidden()).as();
|
||||||
if(all.any()){
|
if(all.any()){
|
||||||
dialog.cont.row();
|
dialog.cont.row();
|
||||||
dialog.cont.button("@mods.viewcontent", Icon.book, () -> {
|
dialog.cont.button("@mods.viewcontent", Icon.book, () -> {
|
||||||
@@ -636,7 +644,11 @@ public class ModsDialog extends BaseDialog{
|
|||||||
Core.app.post(() -> modError(t));
|
Core.app.post(() -> modError(t));
|
||||||
}
|
}
|
||||||
|
|
||||||
private void githubImportMod(String repo, boolean isJava, @Nullable String release){
|
public void githubImportMod(String repo, boolean isJava){
|
||||||
|
githubImportMod(repo, isJava, null);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void githubImportMod(String repo, boolean isJava, @Nullable String release){
|
||||||
modImportProgress = 0f;
|
modImportProgress = 0f;
|
||||||
ui.loadfrag.show("@downloading");
|
ui.loadfrag.show("@downloading");
|
||||||
ui.loadfrag.setProgress(() -> modImportProgress);
|
ui.loadfrag.setProgress(() -> modImportProgress);
|
||||||
|
|||||||
@@ -52,13 +52,9 @@ public class PausedDialog extends BaseDialog{
|
|||||||
cont.button("@hostserver", Icon.host, () -> {
|
cont.button("@hostserver", Icon.host, () -> {
|
||||||
if(net.server() && steam){
|
if(net.server() && steam){
|
||||||
platform.inviteFriends();
|
platform.inviteFriends();
|
||||||
}else{
|
|
||||||
if(steam){
|
|
||||||
ui.host.runHost();
|
|
||||||
}else{
|
}else{
|
||||||
ui.host.show();
|
ui.host.show();
|
||||||
}
|
}
|
||||||
}
|
|
||||||
}).disabled(b -> !((steam && net.server()) || !net.active())).colspan(2).width(dw * 2 + 10f).update(e -> e.setText(net.server() && steam ? "@invitefriends" : "@hostserver"));
|
}).disabled(b -> !((steam && net.server()) || !net.active())).colspan(2).width(dw * 2 + 10f).update(e -> e.setText(net.server() && steam ? "@invitefriends" : "@hostserver"));
|
||||||
|
|
||||||
cont.row();
|
cont.row();
|
||||||
|
|||||||
@@ -785,7 +785,7 @@ public class PlanetDialog extends BaseDialog implements PlanetInterfaceRenderer{
|
|||||||
hoverLabel.touchable = Touchable.disabled;
|
hoverLabel.touchable = Touchable.disabled;
|
||||||
hoverLabel.color.a = state.uiAlpha;
|
hoverLabel.color.a = state.uiAlpha;
|
||||||
|
|
||||||
Vec3 pos = planets.cam.project(Tmp.v31.set(hovered.tile.v).setLength(PlanetRenderer.outlineRad).rotate(Vec3.Y, -state.planet.getRotation()).add(state.planet.position));
|
Vec3 pos = planets.cam.project(Tmp.v31.set(hovered.tile.v).setLength(PlanetRenderer.outlineRad * state.planet.radius).rotate(Vec3.Y, -state.planet.getRotation()).add(state.planet.position));
|
||||||
hoverLabel.setPosition(pos.x - Core.scene.marginLeft, pos.y - Core.scene.marginBottom, Align.center);
|
hoverLabel.setPosition(pos.x - Core.scene.marginLeft, pos.y - Core.scene.marginBottom, Align.center);
|
||||||
|
|
||||||
hoverLabel.getText().setLength(0);
|
hoverLabel.getText().setLength(0);
|
||||||
@@ -831,7 +831,7 @@ public class PlanetDialog extends BaseDialog implements PlanetInterfaceRenderer{
|
|||||||
}
|
}
|
||||||
|
|
||||||
if(state.planet.hasGrid()){
|
if(state.planet.hasGrid()){
|
||||||
hovered = Core.scene.getDialog() == this ? state.planet.getSector(planets.cam.getMouseRay(), PlanetRenderer.outlineRad) : null;
|
hovered = Core.scene.getDialog() == this ? state.planet.getSector(planets.cam.getMouseRay(), PlanetRenderer.outlineRad * state.planet.radius) : null;
|
||||||
}else if(state.planet.isLandable()){
|
}else if(state.planet.isLandable()){
|
||||||
boolean wasNull = selected == null;
|
boolean wasNull = selected == null;
|
||||||
//always have the first sector selected.
|
//always have the first sector selected.
|
||||||
|
|||||||
@@ -177,6 +177,15 @@ public class ResearchDialog extends BaseDialog{
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Dialog show(){
|
||||||
|
if(net.client()){
|
||||||
|
ui.showInfo("@research.multiplayer");
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
return show(Core.scene);
|
||||||
|
}
|
||||||
|
|
||||||
void checkMargin(){
|
void checkMargin(){
|
||||||
if(Core.graphics.isPortrait() && showTechSelect){
|
if(Core.graphics.isPortrait() && showTechSelect){
|
||||||
itemDisplay.marginTop(60f);
|
itemDisplay.marginTop(60f);
|
||||||
|
|||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user