diff --git a/core/assets/bundles/bundle.properties b/core/assets/bundles/bundle.properties index f1493656ff06..ba40e7f99b07 100644 --- a/core/assets/bundles/bundle.properties +++ b/core/assets/bundles/bundle.properties @@ -2237,7 +2237,7 @@ lst.operation = Perform an operation on 1-2 variables. lst.end = Jump to the top of the instruction stack. lst.wait = Wait a certain number of seconds. lst.stop = Halt execution of this processor. -lst.lookup = Look up an item/liquid/unit/block type by ID.\nTotal counts of each type can be accessed with:\n[accent]@unitCount[] / [accent]@itemCount[] / [accent]@liquidCount[] / [accent]@blockCount[] +lst.lookup = Look up an item/liquid/unit/block type by ID.\nTotal counts of each type can be accessed with:\n[accent]@unitCount[] / [accent]@itemCount[] / [accent]@liquidCount[] / [accent]@blockCount[]\nFor the inverse operation, sense [accent]@id[] of the object. lst.jump = Conditionally jump to another statement. lst.unitbind = Bind to the next unit of a type, and store it in [accent]@unit[]. lst.unitcontrol = Control the currently bound unit. @@ -2259,7 +2259,7 @@ lst.setflag = Set a global flag that can be read by all processors. lst.getflag = Check if a global flag is set. lst.setprop = Sets a property of a unit or building. lst.effect = Create a particle effect. -lst.sync = Sync a variable across the network.\nOnly invoked 60 times a second at most. +lst.sync = Sync a variable across the network.\nLimited to 60 times a second per variable. logic.nounitbuild = [red]Unit building logic is not allowed here. @@ -2275,6 +2275,7 @@ laccess.dead = Whether a unit/building is dead or no longer valid. laccess.controlled = Returns:\n[accent]@ctrlProcessor[] if unit controller is processor\n[accent]@ctrlPlayer[] if unit/building controller is player\n[accent]@ctrlCommand[] if unit controller is a player command\nOtherwise, 0. laccess.progress = Action progress, 0 to 1.\nReturns production, turret reload or construction progress. laccess.speed = Top speed of a unit, in tiles/sec. +laccess.id = ID of a unit/block/item/liquid.\nThis is the inverse of the lookup operation. lcategory.unknown = Unknown lcategory.unknown.description = Uncategorized instructions. @@ -2396,6 +2397,7 @@ lenum.unbind = Completely disable logic control.\nResume standard AI. lenum.move = Move to exact position. lenum.approach = Approach a position with a radius. lenum.pathfind = Pathfind to the specified position. +lenum.autopathfind = Automatically pathfinds to the nearest enemy core or drop point.\nThis is the same as standard wave enemy pathfinding. lenum.target = Shoot a position. lenum.targetp = Shoot a target with velocity prediction. lenum.itemdrop = Drop an item. diff --git a/core/assets/bundles/bundle_be.properties b/core/assets/bundles/bundle_be.properties index e215eca06689..69e256c8cf94 100644 --- a/core/assets/bundles/bundle_be.properties +++ b/core/assets/bundles/bundle_be.properties @@ -2224,6 +2224,7 @@ laccess.dead = Whether a unit/building is dead or no longer valid. laccess.controlled = Returns:\n[accent]@ctrlProcessor[] if unit controller is processor\n[accent]@ctrlPlayer[] if unit/building controller is player\n[accent]@ctrlFormation[] if unit is in formation\nOtherwise, 0. laccess.progress = Action progress, 0 to 1.\nReturns production, turret reload or construction progress. laccess.speed = Top speed of a unit, in tiles/sec. +laccess.id = ID of a unit/block/item/liquid.\nThis is the inverse of the lookup operation. lcategory.unknown = Unknown lcategory.unknown.description = Uncategorized instructions. lcategory.io = Input & Output @@ -2328,6 +2329,7 @@ lenum.unbind = Поўнасццю адключыць кантраляванне lenum.move = Рухацца да канкрэтнай каардынаты. lenum.approach = Падысці да каардынаты з радыюсам. lenum.pathfind = Найці шлях да варожай кропкі з'яўлення. +lenum.autopathfind = Automatically pathfinds to the nearest enemy core or drop point.\nThis is the same as standard wave enemy pathfinding. lenum.target = Атакаваць каардынату. lenum.targetp = Атакаваць мэту з прадвылічэннем скорасці. lenum.itemdrop = Апусціць прадмет. diff --git a/core/assets/bundles/bundle_bg.properties b/core/assets/bundles/bundle_bg.properties index d58ba435f80a..007a96db2504 100644 --- a/core/assets/bundles/bundle_bg.properties +++ b/core/assets/bundles/bundle_bg.properties @@ -2241,6 +2241,7 @@ laccess.dead = Дали дадена единица/сграда е била у laccess.controlled = Връща:\n[accent]@ctrlProcessor[] ако единицата е контролирана от процесор\n[accent]@ctrlPlayer[] ако единицата/сградата е контролирана от играч\n[accent]@ctrlFormation[] ако единицата участва във формация\nИначе, връща 0. laccess.progress = Action progress, 0 to 1.\nReturns production, turret reload or construction progress. laccess.speed = Top speed of a unit, in tiles/sec. +laccess.id = ID of a unit/block/item/liquid.\nThis is the inverse of the lookup operation. lcategory.unknown = Unknown lcategory.unknown.description = Uncategorized instructions. lcategory.io = Input & Output @@ -2358,6 +2359,7 @@ lenum.unbind = Completely disable logic control.\nResume standard AI. lenum.move = Премести се на конкретна позиция. lenum.approach = Доближи се до позиция на определено разстояние. lenum.pathfind = Намери пътека до вражеската начална точка. +lenum.autopathfind = Automatically pathfinds to the nearest enemy core or drop point.\nThis is the same as standard wave enemy pathfinding. lenum.target = Стреляй към позиция. lenum.targetp = Стреляй към цел, изчислявайки нейната скорост. lenum.itemdrop = Разтовари предмет(и). diff --git a/core/assets/bundles/bundle_ca.properties b/core/assets/bundles/bundle_ca.properties index 709483e64a79..6eeae6dc5710 100644 --- a/core/assets/bundles/bundle_ca.properties +++ b/core/assets/bundles/bundle_ca.properties @@ -2252,6 +2252,7 @@ laccess.dead = Retorna si una unitat o bloc està destruïda o si ja no és vàl laccess.controlled = Returna:\n[accent]@ctrlProcessor[] si el controlador de la unitat és un processador;\n[accent]@ctrlPlayer[] si el controlador de la unitat és un jugador;\n[accent]@ctrlCommand[] si el controlador és un comandament del jugador;\naltrament, és 0. laccess.progress = Progrés de l’acció, entre 0 i 1.\nRetorna la producció, la recàrrega de la torreta o el progrés de la construcció. laccess.speed = Velocitat màxima de la unitat, en caselles/s. +laccess.id = ID of a unit/block/item/liquid.\nThis is the inverse of the lookup operation. lcategory.unknown = Desconegut lcategory.unknown.description = Instruccions sense categoria. lcategory.io = Entrada i sortida @@ -2372,6 +2373,7 @@ lenum.unbind = Desactiva del tot el control lògic.\nContinua amb la IA estànda lenum.move = Mou a una posició exacta. lenum.approach = Aproxima a una zona determinada amb una posició i un radi. lenum.pathfind = Troba un camí i segueix una ruta fins al punt d’aparició d’enemics. +lenum.autopathfind = Automatically pathfinds to the nearest enemy core or drop point.\nThis is the same as standard wave enemy pathfinding. lenum.target = Dispara a una posició. lenum.targetp = Dispara a un objectiu tenint en compte la seva velocitat a l’hora d’apuntar. lenum.itemdrop = Deixa un element. diff --git a/core/assets/bundles/bundle_cs.properties b/core/assets/bundles/bundle_cs.properties index ce73e66e7067..960a56c4dab5 100644 --- a/core/assets/bundles/bundle_cs.properties +++ b/core/assets/bundles/bundle_cs.properties @@ -2245,6 +2245,7 @@ laccess.dead = Zda jednotka/budova je mrtvá/zničená nebo již neplatná. laccess.controlled = Vrací:\n[accent]@ctrlProcessor[] pokud kontroler jednotky je procesor\n[accent]@ctrlPlayer[] pokud kontroloer jednotky/budovy je hráč\n[accent]@ctrlFormation[] pokud jednotka je ve formaci\nJiank, 0. laccess.progress = Průběh akce, 0 do 1.\nVrací průběh výroby, přebití věže nebo stavby. laccess.speed = Top speed of a unit, in tiles/sec. +laccess.id = ID of a unit/block/item/liquid.\nThis is the inverse of the lookup operation. lcategory.unknown = Neznámé lcategory.unknown.description = Nezařazené instrukce. lcategory.io = Vstup a Výstup @@ -2365,6 +2366,7 @@ lenum.unbind = Completely disable logic control.\nResume standard AI. lenum.move = Pohnout se na určité místo. lenum.approach = Přiblížit se k určité pozici s určitou vzdálenosti. lenum.pathfind = Nalézt cestu k nepřátelskému spawnu/bodu zrození +lenum.autopathfind = Automatically pathfinds to the nearest enemy core or drop point.\nThis is the same as standard wave enemy pathfinding. lenum.target = Střelit na pozici. lenum.targetp = Vystřelí na jednotku/budovu s rychlostní předpovědí lenum.itemdrop = Zahodit věc. diff --git a/core/assets/bundles/bundle_da.properties b/core/assets/bundles/bundle_da.properties index 1364715671d0..812436b08506 100644 --- a/core/assets/bundles/bundle_da.properties +++ b/core/assets/bundles/bundle_da.properties @@ -2223,6 +2223,7 @@ laccess.dead = Whether a unit/building is dead or no longer valid. laccess.controlled = Returns:\n[accent]@ctrlProcessor[] if unit controller is processor\n[accent]@ctrlPlayer[] if unit/building controller is player\n[accent]@ctrlFormation[] if unit is in formation\nOtherwise, 0. laccess.progress = Action progress, 0 to 1.\nReturns production, turret reload or construction progress. laccess.speed = Top speed of a unit, in tiles/sec. +laccess.id = ID of a unit/block/item/liquid.\nThis is the inverse of the lookup operation. lcategory.unknown = Unknown lcategory.unknown.description = Uncategorized instructions. lcategory.io = Input & Output @@ -2327,6 +2328,7 @@ lenum.unbind = Completely disable logic control.\nResume standard AI. lenum.move = Move to exact position. lenum.approach = Approach a position with a radius. lenum.pathfind = Pathfind to the enemy spawn. +lenum.autopathfind = Automatically pathfinds to the nearest enemy core or drop point.\nThis is the same as standard wave enemy pathfinding. lenum.target = Shoot a position. lenum.targetp = Shoot a target with velocity prediction. lenum.itemdrop = Drop an item. diff --git a/core/assets/bundles/bundle_de.properties b/core/assets/bundles/bundle_de.properties index fcc2e3e68695..c3635f41c979 100644 --- a/core/assets/bundles/bundle_de.properties +++ b/core/assets/bundles/bundle_de.properties @@ -2274,6 +2274,7 @@ laccess.dead = Ob ein Block / eine Einheit tot oder nicht mehr gültig ist. laccess.controlled = Gibt zurück:\n[accent]@ctrlProcessor[] wenn die Einheit prozessorgesteuert ist\n[accent]@ctrlPlayer[] wenn die Einheit / der Block von einem Spieler gesteuert wird\n[accent]@ctrlFormation[] wenn die Einheit Teil einer Formation ist\nSonst 0. laccess.progress = Fortschritt, von 0 bis 1.\nGibt Produktion, Nachladestatus or Baufortschritt zurück. laccess.speed = Höchstgeschwindigkeit einer Einheit, gemessen in Blöcke/Sekunde. +laccess.id = ID of a unit/block/item/liquid.\nThis is the inverse of the lookup operation. lcategory.unknown = Unbekannt lcategory.unknown.description = Unbekannte Anweisungen @@ -2395,6 +2396,7 @@ lenum.unbind = Logiksteuerung deaktivieren.\nNormale KI übernimmt. lenum.move = Geht zu diese Position. lenum.approach = Geht auf einen Punkt mit einem bestimmten Radius zu. lenum.pathfind = Geht zum gegnerischen Spawnpunkt. +lenum.autopathfind = Automatically pathfinds to the nearest enemy core or drop point.\nThis is the same as standard wave enemy pathfinding. lenum.target = Schießt auf eine Position. lenum.targetp = Schießt auf eine Einheit und sagt deren Position voraus. lenum.itemdrop = Materialien abwerfen. diff --git a/core/assets/bundles/bundle_es.properties b/core/assets/bundles/bundle_es.properties index 534c73dc9c05..6e6aba732b46 100644 --- a/core/assets/bundles/bundle_es.properties +++ b/core/assets/bundles/bundle_es.properties @@ -2268,6 +2268,7 @@ laccess.dead = Si una unidad/bloque es destruída o inválida. laccess.controlled = Devuelve:\n[accent]@ctrlProcessor[] si el control de la unidad lo tiene un procesador\n[accent]@ctrlPlayer[] si el control de la unidad/bloque lo tiene un jugador\n[accent]@ctrlFormation[] si la unidad está en formación\nDe otra forma, devuelve 0. laccess.progress = Progreso de una acción, 0 a 1.\nDevuelve el valor de una producción, la recarga de una torreta o el progreso de una construcción. laccess.speed = Velocidad máxima de una unidad, en bloques/segundo. +laccess.id = ID of a unit/block/item/liquid.\nThis is the inverse of the lookup operation. lcategory.unknown = Desconocido lcategory.unknown.description = Instrucciones no clasificadas. @@ -2389,6 +2390,7 @@ lenum.unbind = Desactiva el control externo de la unidad enlazada.\nLa unidad re lenum.move = Moverse a una posición exacta. lenum.approach = Aproximarse al radio establecido de una posición concreta. lenum.pathfind = Establece y sigue una ruta hasta el punto de aterrizaje enemigo. +lenum.autopathfind = Automatically pathfinds to the nearest enemy core or drop point.\nThis is the same as standard wave enemy pathfinding. lenum.target = Dispara a una posición. lenum.targetp = Dispara a un objetivo con predicción de velocidad. lenum.itemdrop = Suelta los objetos en la estructura especificacda. diff --git a/core/assets/bundles/bundle_et.properties b/core/assets/bundles/bundle_et.properties index f71199d5093a..6a8446bff75f 100644 --- a/core/assets/bundles/bundle_et.properties +++ b/core/assets/bundles/bundle_et.properties @@ -2225,6 +2225,7 @@ laccess.dead = Whether a unit/building is dead or no longer valid. laccess.controlled = Returns:\n[accent]@ctrlProcessor[] if unit controller is processor\n[accent]@ctrlPlayer[] if unit/building controller is player\n[accent]@ctrlFormation[] if unit is in formation\nOtherwise, 0. laccess.progress = Action progress, 0 to 1.\nReturns production, turret reload or construction progress. laccess.speed = Top speed of a unit, in tiles/sec. +laccess.id = ID of a unit/block/item/liquid.\nThis is the inverse of the lookup operation. lcategory.unknown = Unknown lcategory.unknown.description = Uncategorized instructions. lcategory.io = Input & Output @@ -2329,6 +2330,7 @@ lenum.unbind = Completely disable logic control.\nResume standard AI. lenum.move = Move to exact position. lenum.approach = Approach a position with a radius. lenum.pathfind = Pathfind to the enemy spawn. +lenum.autopathfind = Automatically pathfinds to the nearest enemy core or drop point.\nThis is the same as standard wave enemy pathfinding. lenum.target = Shoot a position. lenum.targetp = Shoot a target with velocity prediction. lenum.itemdrop = Drop an item. diff --git a/core/assets/bundles/bundle_eu.properties b/core/assets/bundles/bundle_eu.properties index 2b3756b3f1b1..3dc999cb0907 100644 --- a/core/assets/bundles/bundle_eu.properties +++ b/core/assets/bundles/bundle_eu.properties @@ -2227,6 +2227,7 @@ laccess.dead = Whether a unit/building is dead or no longer valid. laccess.controlled = Returns:\n[accent]@ctrlProcessor[] if unit controller is processor\n[accent]@ctrlPlayer[] if unit/building controller is player\n[accent]@ctrlFormation[] if unit is in formation\nOtherwise, 0. laccess.progress = Action progress, 0 to 1.\nReturns production, turret reload or construction progress. laccess.speed = Top speed of a unit, in tiles/sec. +laccess.id = ID of a unit/block/item/liquid.\nThis is the inverse of the lookup operation. lcategory.unknown = Unknown lcategory.unknown.description = Uncategorized instructions. lcategory.io = Input & Output @@ -2331,6 +2332,7 @@ lenum.unbind = Completely disable logic control.\nResume standard AI. lenum.move = Move to exact position. lenum.approach = Approach a position with a radius. lenum.pathfind = Pathfind to the enemy spawn. +lenum.autopathfind = Automatically pathfinds to the nearest enemy core or drop point.\nThis is the same as standard wave enemy pathfinding. lenum.target = Shoot a position. lenum.targetp = Shoot a target with velocity prediction. lenum.itemdrop = Drop an item. diff --git a/core/assets/bundles/bundle_fi.properties b/core/assets/bundles/bundle_fi.properties index 4c7dd8316f18..3f6dfae1c03f 100644 --- a/core/assets/bundles/bundle_fi.properties +++ b/core/assets/bundles/bundle_fi.properties @@ -2228,6 +2228,7 @@ laccess.dead = Selvitä, onko yksikkö/rakennus tuhoutunut tai ei enää kelvoll laccess.controlled = Palauttaa:\n[accent]@ctrlProcessor[], jos yksikön hallitsija on prosessori.\n[accent]@ctrlPlayer[], jos yksikön/rakennuksen hallitsija on pelaaja.\n[accent]@ctrlFormation[], jos yksikkö on muodostelmassa\nMuussa tapauksessa palauttaa 0. laccess.progress = Toiminnon edistys asteikolla nollasta yhteen.\nPalauttaa tuotannon, tykin latauksen tai rakennuksen edistymisen. laccess.speed = Yksikön huippunopeus laattoina/sekunti. +laccess.id = ID of a unit/block/item/liquid.\nThis is the inverse of the lookup operation. lcategory.unknown = Tuntematon lcategory.unknown.description = Luokittelemattomat ohjeet. lcategory.io = Sisään- ja ulostulo @@ -2332,6 +2333,7 @@ lenum.unbind = Poista logiikkahallinta kokonaan.\nAnna hallinta tavalliselle AI: lenum.move = Liiku tarkkaan sijaintiin. lenum.approach = Lähesty sijaintia tietylle säteelle. lenum.pathfind = Etsi polku vihollisen syntypisteelle. +lenum.autopathfind = Automatically pathfinds to the nearest enemy core or drop point.\nThis is the same as standard wave enemy pathfinding. lenum.target = Ammu tiettyä sijaintia. lenum.targetp = Ammu kohdetta nopeudenennustuksen ollessa päällä. lenum.itemdrop = Pudota tavaroita. diff --git a/core/assets/bundles/bundle_fil.properties b/core/assets/bundles/bundle_fil.properties index 42c3f5281283..40ffc931a8ab 100644 --- a/core/assets/bundles/bundle_fil.properties +++ b/core/assets/bundles/bundle_fil.properties @@ -2224,6 +2224,7 @@ laccess.dead = Whether a unit/building is dead or no longer valid. laccess.controlled = Returns:\n[accent]@ctrlProcessor[] if unit controller is processor\n[accent]@ctrlPlayer[] if unit/building controller is player\n[accent]@ctrlFormation[] if unit is in formation\nOtherwise, 0. laccess.progress = Action progress, 0 to 1.\nReturns production, turret reload or construction progress. laccess.speed = Top speed of a unit, in tiles/sec. +laccess.id = ID of a unit/block/item/liquid.\nThis is the inverse of the lookup operation. lcategory.unknown = Unknown lcategory.unknown.description = Uncategorized instructions. lcategory.io = Input & Output @@ -2328,6 +2329,7 @@ lenum.unbind = Completely disable logic control.\nResume standard AI. lenum.move = Move to exact position. lenum.approach = Approach a position with a radius. lenum.pathfind = Pathfind to the enemy spawn. +lenum.autopathfind = Automatically pathfinds to the nearest enemy core or drop point.\nThis is the same as standard wave enemy pathfinding. lenum.target = Shoot a position. lenum.targetp = Shoot a target with velocity prediction. lenum.itemdrop = Drop an item. diff --git a/core/assets/bundles/bundle_fr.properties b/core/assets/bundles/bundle_fr.properties index 5f7f445661fb..aee944884b95 100644 --- a/core/assets/bundles/bundle_fr.properties +++ b/core/assets/bundles/bundle_fr.properties @@ -2275,6 +2275,7 @@ laccess.dead = Retourne si l'Unité/Bâtiment est morte/détruit ou plus valide. laccess.controlled = Retourne:\n[accent]@ctrlProcessor[] si le contrôleur de l'Unité est un processeur\n[accent]@ctrlPlayer[] si l'Unité/Bâtiment est contrôlé par un joueur\n[accent]@ctrlFormation[] si l'Unité est en formation\nSinon, retourne 0. laccess.progress = Progression de l'action, 0 à 1.\nRenvoie la progression de la production, du rechargement de la tourelle ou de la construction. laccess.speed = La vitesse maximale d'une unité, en blocs/sec. +laccess.id = ID of a unit/block/item/liquid.\nThis is the inverse of the lookup operation. lcategory.unknown = Inconnu lcategory.unknown.description = Instructions sans catégorie. @@ -2396,6 +2397,7 @@ lenum.unbind = Désactive complètement le contrôle par processeur.\nL'unité r lenum.move = Bouge vers la position exacte. lenum.approach = Approche une position avec un rayon. lenum.pathfind = Détermine un itinéraire et bouge vers le point d'apparition ennemi. +lenum.autopathfind = Automatically pathfinds to the nearest enemy core or drop point.\nThis is the same as standard wave enemy pathfinding. lenum.target = Tire vers la position donnée. lenum.targetp = Tire sur une cible avec la prédiction de mouvement. lenum.itemdrop = Lâche un objet. diff --git a/core/assets/bundles/bundle_hu.properties b/core/assets/bundles/bundle_hu.properties index b77b40b085fa..dc123cd3e011 100644 --- a/core/assets/bundles/bundle_hu.properties +++ b/core/assets/bundles/bundle_hu.properties @@ -2236,6 +2236,7 @@ laccess.dead = Whether a unit/building is dead or no longer valid. laccess.controlled = Returns:\n[accent]@ctrlProcessor[] if unit controller is processor\n[accent]@ctrlPlayer[] if unit/building controller is player\n[accent]@ctrlFormation[] if unit is in formation\nOtherwise, 0. laccess.progress = Action progress, 0 to 1.\nReturns production, turret reload or construction progress. laccess.speed = Top speed of a unit, in tiles/sec. +laccess.id = ID of a unit/block/item/liquid.\nThis is the inverse of the lookup operation. lcategory.unknown = Unknown lcategory.unknown.description = Uncategorized instructions. lcategory.io = Input & Output @@ -2340,6 +2341,7 @@ lenum.unbind = Completely disable logic control.\nResume standard AI. lenum.move = Move to exact position. lenum.approach = Approach a position with a radius. lenum.pathfind = Pathfind to the enemy spawn. +lenum.autopathfind = Automatically pathfinds to the nearest enemy core or drop point.\nThis is the same as standard wave enemy pathfinding. lenum.target = Shoot a position. lenum.targetp = Shoot a target with velocity prediction. lenum.itemdrop = Drop an item. diff --git a/core/assets/bundles/bundle_id_ID.properties b/core/assets/bundles/bundle_id_ID.properties index 141e6cf09a8c..3bad8e869670 100644 --- a/core/assets/bundles/bundle_id_ID.properties +++ b/core/assets/bundles/bundle_id_ID.properties @@ -2266,6 +2266,7 @@ laccess.dead = Menentukan apakah unit/bangunan itu hancur atau tidak ada lagi. laccess.controlled = Mengembalikan:\n[accent]@ctrlProcessor[] bila pengendali unit adalah prosesor\n[accent]@ctrlPlayer[] bila pengendali unit/bangunan adalah pemain\n[accent]@ctrlFormation[] bila unit dalam formasi\nSebaliknya, 0. laccess.progress = Memeriksa hasil kemajuan, 0 sampai 1.\nMengembalikan hasil laju produksi, pengisian ulang menara atau pembangunan. laccess.speed = Kecepatan tertinggi dari suatu unit, dalam petak/detik. +laccess.id = ID of a unit/block/item/liquid.\nThis is the inverse of the lookup operation. lcategory.unknown = Tak Diketahui lcategory.unknown.description = Instruksi tanpa kategori. @@ -2387,6 +2388,7 @@ lenum.unbind = Mematikan kendali logika.\nLanjutkan A.I. standar. lenum.move = Bergerak ke posisi yang ditentukan. lenum.approach = Mendekati posisi dalam radius. lenum.pathfind = Mencari arah ke tempat munculnya musuh. +lenum.autopathfind = Automatically pathfinds to the nearest enemy core or drop point.\nThis is the same as standard wave enemy pathfinding. lenum.target = Menembak pada posisi. lenum.targetp = Menembak target dengan perkiraan kecepatan. lenum.itemdrop = Menjatuhkan bahan. diff --git a/core/assets/bundles/bundle_it.properties b/core/assets/bundles/bundle_it.properties index f0f52c3670ed..0201cc88bc53 100644 --- a/core/assets/bundles/bundle_it.properties +++ b/core/assets/bundles/bundle_it.properties @@ -2238,6 +2238,7 @@ laccess.dead = Whether a unit/building is dead or no longer valid. laccess.controlled = Returns:\n[accent]@ctrlProcessor[] if unit controller is processor\n[accent]@ctrlPlayer[] if unit/building controller is player\n[accent]@ctrlFormation[] if unit is in formation\nOtherwise, 0. laccess.progress = Action progress, 0 to 1.\nReturns production, turret reload or construction progress. laccess.speed = Top speed of a unit, in tiles/sec. +laccess.id = ID of a unit/block/item/liquid.\nThis is the inverse of the lookup operation. lcategory.unknown = Unknown lcategory.unknown.description = Uncategorized instructions. lcategory.io = Input & Output @@ -2342,6 +2343,7 @@ lenum.unbind = Completely disable logic control.\nResume standard AI. lenum.move = Move to exact position. lenum.approach = Approach a position with a radius. lenum.pathfind = Pathfind to the enemy spawn. +lenum.autopathfind = Automatically pathfinds to the nearest enemy core or drop point.\nThis is the same as standard wave enemy pathfinding. lenum.target = Shoot a position. lenum.targetp = Shoot a target with velocity prediction. lenum.itemdrop = Drop an item. diff --git a/core/assets/bundles/bundle_ja.properties b/core/assets/bundles/bundle_ja.properties index 49228059e8cd..1ddf9fbd308f 100644 --- a/core/assets/bundles/bundle_ja.properties +++ b/core/assets/bundles/bundle_ja.properties @@ -1730,8 +1730,8 @@ block.tank-refabricator.name = 戦車再加工工場 block.mech-refabricator.name = メカ再加工工場 block.ship-refabricator.name = 戦艦再加工工場 block.tank-assembler.name = 戦車組立工場 -block.ship-assembler.name = メカ組立工場 -block.mech-assembler.name = 戦艦組立工場 +block.ship-assembler.name = 戦艦組立工場 +block.mech-assembler.name = メカ組立工場 block.reinforced-payload-conveyor.name = 強化ペイロードコンベアー block.reinforced-payload-router.name = 強化ペイロードルーター block.payload-mass-driver.name = ペイロードマスドライバー @@ -2242,6 +2242,7 @@ laccess.dead = ユニットや建物が機能しているかどうか、また laccess.controlled = ユニットや建物がどのように制御されているのかを取得します。\nプロセッサ制御の場合、 [accent]@ctrlProcessor[] を返します。\nプレイヤー制御の場合、 [accent]@ctrlPlayer[] を返します。\n隊列を組んでいる場合、 [accent]@ctrlFormation[] を返します。\nそれ以外は 0 を返します。 laccess.progress = アクションの進行状況を0〜1で取得します。\n生産、リロード、または建設の進捗状況を返します。 laccess.speed = ユニットの最高速度を返します。(単位:タイル/秒) +laccess.id = ID of a unit/block/item/liquid.\nThis is the inverse of the lookup operation. lcategory.unknown = 不明 lcategory.unknown.description = 未分類の指示です。 lcategory.io = 入出力 @@ -2346,6 +2347,7 @@ lenum.unbind = ロジック制御を完全に無効にします。\n標準的な lenum.move = 正確にある座標に移動します。 lenum.approach = ある座標に近づきます。 lenum.pathfind = 敵のスポーンまでの道を探します。 +lenum.autopathfind = Automatically pathfinds to the nearest enemy core or drop point.\nThis is the same as standard wave enemy pathfinding. lenum.target = 指定した座標に向かって撃ちます。 lenum.targetp = 任意のユニットや建物を撃ちます。 lenum.itemdrop = アイテムをドロップします。 diff --git a/core/assets/bundles/bundle_ko.properties b/core/assets/bundles/bundle_ko.properties index b1daef2e08a2..9584cb3ff5d9 100644 --- a/core/assets/bundles/bundle_ko.properties +++ b/core/assets/bundles/bundle_ko.properties @@ -2245,6 +2245,7 @@ laccess.dead = 기체 또는 건물 사망/무효 여부 laccess.controlled = 만약 기체 제어자가 프로세서라면 [accent]@ctrlProcessor[]를 반환합니다.\n만약 기체/건물 제어자가 플레이어라면 [accent]@ctrlPlayer[]를 반환합니다.\n만약 기체가 다른 기체에 의해 지휘되면(G키)[accent]@ctrlFormation[]를 반환합니다.\n그 외에는 0을 반환합니다. laccess.progress = 작업 진행률, 0 에서 1 로 감.\n포탑 재장전이나 구조물 진행률을 반환합니다. laccess.speed = 기체의 최대 속도, 타일/초 +laccess.id = ID of a unit/block/item/liquid.\nThis is the inverse of the lookup operation. lcategory.unknown = 알 수 없음 lcategory.unknown.description = 분류되지 않은 설명 lcategory.io = 입력 & 출력 @@ -2365,6 +2366,7 @@ lenum.unbind = 로직 컨트롤 완전 비활성화\n표준 AI를 다시 따릅 lenum.move = 특정 위치로 이동 lenum.approach = 특정 위치로 반지름만큼 접근 lenum.pathfind = 적 스폰 지점으로 길찾기 +lenum.autopathfind = Automatically pathfinds to the nearest enemy core or drop point.\nThis is the same as standard wave enemy pathfinding. lenum.target = 특정 위치에 발사 lenum.targetp = 목표물 속도를 예측하여 발사 lenum.itemdrop = 아이템 투하 diff --git a/core/assets/bundles/bundle_lt.properties b/core/assets/bundles/bundle_lt.properties index dfad07c17c47..d9e92dd2c2d7 100644 --- a/core/assets/bundles/bundle_lt.properties +++ b/core/assets/bundles/bundle_lt.properties @@ -2225,6 +2225,7 @@ laccess.dead = Whether a unit/building is dead or no longer valid. laccess.controlled = Returns:\n[accent]@ctrlProcessor[] if unit controller is processor\n[accent]@ctrlPlayer[] if unit/building controller is player\n[accent]@ctrlFormation[] if unit is in formation\nOtherwise, 0. laccess.progress = Action progress, 0 to 1.\nReturns production, turret reload or construction progress. laccess.speed = Top speed of a unit, in tiles/sec. +laccess.id = ID of a unit/block/item/liquid.\nThis is the inverse of the lookup operation. lcategory.unknown = Unknown lcategory.unknown.description = Uncategorized instructions. lcategory.io = Input & Output @@ -2329,6 +2330,7 @@ lenum.unbind = Completely disable logic control.\nResume standard AI. lenum.move = Move to exact position. lenum.approach = Approach a position with a radius. lenum.pathfind = Pathfind to the enemy spawn. +lenum.autopathfind = Automatically pathfinds to the nearest enemy core or drop point.\nThis is the same as standard wave enemy pathfinding. lenum.target = Shoot a position. lenum.targetp = Shoot a target with velocity prediction. lenum.itemdrop = Drop an item. diff --git a/core/assets/bundles/bundle_nl.properties b/core/assets/bundles/bundle_nl.properties index 1916daee561e..4b3373eef883 100644 --- a/core/assets/bundles/bundle_nl.properties +++ b/core/assets/bundles/bundle_nl.properties @@ -2238,6 +2238,7 @@ laccess.dead = Whether a unit/building is dead or no longer valid. laccess.controlled = Returns:\n[accent]@ctrlProcessor[] if unit controller is processor\n[accent]@ctrlPlayer[] if unit/building controller is player\n[accent]@ctrlFormation[] if unit is in formation\nOtherwise, 0. laccess.progress = Action progress, 0 to 1.\nReturns production, turret reload or construction progress. laccess.speed = Top speed of a unit, in tiles/sec. +laccess.id = ID of a unit/block/item/liquid.\nThis is the inverse of the lookup operation. lcategory.unknown = Unknown lcategory.unknown.description = Uncategorized instructions. lcategory.io = Input & Output @@ -2342,6 +2343,7 @@ lenum.unbind = Completely disable logic control.\nResume standard AI. lenum.move = Move to exact position. lenum.approach = Approach a position with a radius. lenum.pathfind = Pathfind to the enemy spawn. +lenum.autopathfind = Automatically pathfinds to the nearest enemy core or drop point.\nThis is the same as standard wave enemy pathfinding. lenum.target = Shoot a position. lenum.targetp = Shoot a target with velocity prediction. lenum.itemdrop = Drop an item. diff --git a/core/assets/bundles/bundle_nl_BE.properties b/core/assets/bundles/bundle_nl_BE.properties index 42d272eadd12..179de84859b9 100644 --- a/core/assets/bundles/bundle_nl_BE.properties +++ b/core/assets/bundles/bundle_nl_BE.properties @@ -2225,6 +2225,7 @@ laccess.dead = Whether a unit/building is dead or no longer valid. laccess.controlled = Returns:\n[accent]@ctrlProcessor[] if unit controller is processor\n[accent]@ctrlPlayer[] if unit/building controller is player\n[accent]@ctrlFormation[] if unit is in formation\nOtherwise, 0. laccess.progress = Action progress, 0 to 1.\nReturns production, turret reload or construction progress. laccess.speed = Top speed of a unit, in tiles/sec. +laccess.id = ID of a unit/block/item/liquid.\nThis is the inverse of the lookup operation. lcategory.unknown = Unknown lcategory.unknown.description = Uncategorized instructions. lcategory.io = Input & Output @@ -2329,6 +2330,7 @@ lenum.unbind = Completely disable logic control.\nResume standard AI. lenum.move = Move to exact position. lenum.approach = Approach a position with a radius. lenum.pathfind = Pathfind to the enemy spawn. +lenum.autopathfind = Automatically pathfinds to the nearest enemy core or drop point.\nThis is the same as standard wave enemy pathfinding. lenum.target = Shoot a position. lenum.targetp = Shoot a target with velocity prediction. lenum.itemdrop = Drop an item. diff --git a/core/assets/bundles/bundle_pl.properties b/core/assets/bundles/bundle_pl.properties index f3d9e61120c6..bd00ab2228a4 100644 --- a/core/assets/bundles/bundle_pl.properties +++ b/core/assets/bundles/bundle_pl.properties @@ -2263,6 +2263,7 @@ laccess.dead = Sprawdza czy jednostka/budynek jest zniszczony lub już nie istni laccess.controlled = Zwraca:\n[accent]@ctrlProcessor[] jeśli kontrolerem jednostki jest procesor\n[accent]@ctrlPlayer[] jeśli kontrolerem jednostki/budynku jest gracz\n[accent]@ctrlFormation[] jeśli jednostka jest w formacji\nW innym wypadku 0. laccess.progress = Postęp akcji, od 0 do 1.\nZwraca produkcję, przeładowanie wieżyczki lub postęp konstrukcji. laccess.speed = Top speed of a unit, in tiles/sec. +laccess.id = ID of a unit/block/item/liquid.\nThis is the inverse of the lookup operation. lcategory.unknown = Inne lcategory.unknown.description = Niezkategoryzowane instrukcje. @@ -2383,6 +2384,7 @@ lenum.unbind = Kompletnie wyłącza kontrolę za pomocą logiki.\nWznawia domyś lenum.move = Przemieść się do określonej pozycji. lenum.approach = Zbliż się do pozycji w promieniu. lenum.pathfind = Odnajdź ścieżkę do punktu zrzutu przeciwników. +lenum.autopathfind = Automatically pathfinds to the nearest enemy core or drop point.\nThis is the same as standard wave enemy pathfinding. lenum.target = Strzel w określoną pozycję. lenum.targetp = Strzel w jednostkę/budynek z zachowaniem trajektorii. lenum.itemdrop = Upuść przedmiot. diff --git a/core/assets/bundles/bundle_pt_BR.properties b/core/assets/bundles/bundle_pt_BR.properties index ced19c1b9c19..ed2d2a6447ed 100644 --- a/core/assets/bundles/bundle_pt_BR.properties +++ b/core/assets/bundles/bundle_pt_BR.properties @@ -2261,6 +2261,7 @@ laccess.dead = Se uma unidade/edifício está morta ou não é mais válida. laccess.controlled = Retorna:\n[accent]@ctrlProcessor[] se o controlador da unidade for o processador\n[accent]@ctrlPlayer[] se o controlador da unidade/edifício for o player\n[accent]@ctrlCommand[] se o controlador da unidade for um comando do player\nCaso contrário , 0. laccess.progress = Progresso da ação, 0 a 1.\nRetorna a produção, a recarga da torre ou o progresso da construção. laccess.speed = Velocidade máxima de uma unidade, em ladrilhos/seg. +laccess.id = ID of a unit/block/item/liquid.\nThis is the inverse of the lookup operation. lcategory.unknown = Desconhecido lcategory.unknown.description = Instruções não categorizadas. @@ -2380,6 +2381,7 @@ lenum.unbind = Desabilite completamente o controle lógico.\nRetome AI padrão. lenum.move = Mover para a posição exata. lenum.approach = Aproxime-se de uma posição com um raio. lenum.pathfind = Pathfind para o spawn inimigo. +lenum.autopathfind = Automatically pathfinds to the nearest enemy core or drop point.\nThis is the same as standard wave enemy pathfinding. lenum.target = Atire em uma posição. lenum.targetp = Atire em um alvo com previsão de velocidade. lenum.itemdrop = Solte um item. diff --git a/core/assets/bundles/bundle_pt_PT.properties b/core/assets/bundles/bundle_pt_PT.properties index b85a6152fce3..3b354083506f 100644 --- a/core/assets/bundles/bundle_pt_PT.properties +++ b/core/assets/bundles/bundle_pt_PT.properties @@ -2225,6 +2225,7 @@ laccess.dead = Whether a unit/building is dead or no longer valid. laccess.controlled = Returns:\n[accent]@ctrlProcessor[] if unit controller is processor\n[accent]@ctrlPlayer[] if unit/building controller is player\n[accent]@ctrlFormation[] if unit is in formation\nOtherwise, 0. laccess.progress = Action progress, 0 to 1.\nReturns production, turret reload or construction progress. laccess.speed = Top speed of a unit, in tiles/sec. +laccess.id = ID of a unit/block/item/liquid.\nThis is the inverse of the lookup operation. lcategory.unknown = Unknown lcategory.unknown.description = Uncategorized instructions. lcategory.io = Input & Output @@ -2329,6 +2330,7 @@ lenum.unbind = Completely disable logic control.\nResume standard AI. lenum.move = Move to exact position. lenum.approach = Approach a position with a radius. lenum.pathfind = Pathfind to the enemy spawn. +lenum.autopathfind = Automatically pathfinds to the nearest enemy core or drop point.\nThis is the same as standard wave enemy pathfinding. lenum.target = Shoot a position. lenum.targetp = Shoot a target with velocity prediction. lenum.itemdrop = Drop an item. diff --git a/core/assets/bundles/bundle_ro.properties b/core/assets/bundles/bundle_ro.properties index 4f628c4a3933..1a55b8784ab2 100644 --- a/core/assets/bundles/bundle_ro.properties +++ b/core/assets/bundles/bundle_ro.properties @@ -2246,6 +2246,7 @@ laccess.dead = Specifică dacă o unitate sau clădire a murit/nu mai e validă. laccess.controlled = Returnează:\n[accent]@ctrlProcessor[] dacă controlorul unității e procesor\n[accent]@ctrlPlayer[] dacă controlorul unității/clădirii e jucător\n[accent]@ctrlFormation[] dacă unitatea e într-o formație\nAltfel dă 0. laccess.progress = Progresul acțiunii, de la 0 la 1.\nReturnează progresul producției, al construcției sau reîncărcarea armelor. laccess.speed = Top speed of a unit, in tiles/sec. +laccess.id = ID of a unit/block/item/liquid.\nThis is the inverse of the lookup operation. lcategory.unknown = Unknown lcategory.unknown.description = Uncategorized instructions. lcategory.io = Input & Output @@ -2366,6 +2367,7 @@ lenum.unbind = Completely disable logic control.\nResume standard AI. lenum.move = Mergi la această poziție. lenum.approach = Apropie-te la o anumită distanță de poziție. lenum.pathfind = Găsește ruta către punctul de lansare inamic. Poate fi un nucleu. +lenum.autopathfind = Automatically pathfinds to the nearest enemy core or drop point.\nThis is the same as standard wave enemy pathfinding. lenum.target = Lovește către o poziție. lenum.targetp = Lovește o țintă. Anticipează viteza țintei și a proiectilului. lenum.itemdrop = Descarcă o bucată de material. diff --git a/core/assets/bundles/bundle_ru.properties b/core/assets/bundles/bundle_ru.properties index 88d25e0f66c2..bf6b63cd3379 100644 --- a/core/assets/bundles/bundle_ru.properties +++ b/core/assets/bundles/bundle_ru.properties @@ -2249,6 +2249,7 @@ laccess.dead = Является ли единица/постройка нера laccess.controlled = Возвращает:\n[accent]@ctrlProcessor[] если единица управляется процессором\n[accent]@ctrlPlayer[] если единица/постройка управляется игроком\n[accent]@ctrlFormation[] если единица в строю\nВ противном случае — 0. laccess.progress = Прогресс действия от 0 до 1. Возвращает прогресс производства, перезарядку турели или прогресс постройки. laccess.speed = Максимальная скорость единицы, в тайлах/сек. +laccess.id = ID of a unit/block/item/liquid.\nThis is the inverse of the lookup operation. lcategory.unknown = Неизвестно lcategory.unknown.description = Нет категории. lcategory.io = Ввод и вывод @@ -2369,6 +2370,7 @@ lenum.unbind = Полностью отключает управление лог lenum.move = Перемещение в определённую позицию. lenum.approach = Приближение к позиции с указанным радиусом. lenum.pathfind = Перемещение к точке появления врагов. +lenum.autopathfind = Automatically pathfinds to the nearest enemy core or drop point.\nThis is the same as standard wave enemy pathfinding. lenum.target = Стрельба в определённую позицию. lenum.targetp = Стрельба в единицу/постройку с расчётом скорости. lenum.itemdrop = Сбрасывание предметов. diff --git a/core/assets/bundles/bundle_sr.properties b/core/assets/bundles/bundle_sr.properties index 6959e47c17fa..94e3577b448a 100644 --- a/core/assets/bundles/bundle_sr.properties +++ b/core/assets/bundles/bundle_sr.properties @@ -2249,6 +2249,7 @@ laccess.dead = Da li je građevina/jedinica mrtva, ili više ne radi. laccess.controlled = Returns:\n[accent]@ctrlProcessor[] if unit controller is processor\n[accent]@ctrlPlayer[] if unit/building controller is player\n[accent]@ctrlFormation[] if unit is in formation\nOtherwise, 0. laccess.progress = Action progress, 0 to 1.\nReturns production, turret reload or construction progress. laccess.speed = Maksimalna brzina jedinice, u polja/sekundi. +laccess.id = ID of a unit/block/item/liquid.\nThis is the inverse of the lookup operation. lcategory.unknown = Nepoznato lcategory.unknown.description = Uncategorized instructions. lcategory.io = Input & Output @@ -2369,6 +2370,7 @@ lenum.unbind = Completely disable logic control.\nResume standard AI. lenum.move = Idi do tačnog mesta. lenum.approach = Approach a position with a radius. lenum.pathfind = Pathfind to the enemy spawn. +lenum.autopathfind = Automatically pathfinds to the nearest enemy core or drop point.\nThis is the same as standard wave enemy pathfinding. lenum.target = Pucaj na mesto. lenum.targetp = Shoot a target with velocity prediction. lenum.itemdrop = Drop an item. diff --git a/core/assets/bundles/bundle_sv.properties b/core/assets/bundles/bundle_sv.properties index 97cc02c93636..774dd74ed374 100644 --- a/core/assets/bundles/bundle_sv.properties +++ b/core/assets/bundles/bundle_sv.properties @@ -2225,6 +2225,7 @@ laccess.dead = Whether a unit/building is dead or no longer valid. laccess.controlled = Returns:\n[accent]@ctrlProcessor[] if unit controller is processor\n[accent]@ctrlPlayer[] if unit/building controller is player\n[accent]@ctrlFormation[] if unit is in formation\nOtherwise, 0. laccess.progress = Action progress, 0 to 1.\nReturns production, turret reload or construction progress. laccess.speed = Top speed of a unit, in tiles/sec. +laccess.id = ID of a unit/block/item/liquid.\nThis is the inverse of the lookup operation. lcategory.unknown = Unknown lcategory.unknown.description = Uncategorized instructions. lcategory.io = Input & Output @@ -2329,6 +2330,7 @@ lenum.unbind = Completely disable logic control.\nResume standard AI. lenum.move = Move to exact position. lenum.approach = Approach a position with a radius. lenum.pathfind = Pathfind to the enemy spawn. +lenum.autopathfind = Automatically pathfinds to the nearest enemy core or drop point.\nThis is the same as standard wave enemy pathfinding. lenum.target = Shoot a position. lenum.targetp = Shoot a target with velocity prediction. lenum.itemdrop = Drop an item. diff --git a/core/assets/bundles/bundle_th.properties b/core/assets/bundles/bundle_th.properties index 991d5eaf4a90..8cd43fdda870 100644 --- a/core/assets/bundles/bundle_th.properties +++ b/core/assets/bundles/bundle_th.properties @@ -2265,6 +2265,7 @@ laccess.dead = ว่าสิ่งก่อสร้าง/ยูนิตน laccess.controlled = จะส่งกลับ:\n[accent]@ctrlProcessor[] ถ้าผู้ควบคุมคือตัวประมวลผลลอจิก\n[accent]@ctrlPlayer[] ถ้าสิ่งก่อสร้าง/ยูนิตถูกควบคุมโดยผู้เล่น\n[accent]@ctrlCommand[] ถ้ายูนิตถูกสั่งการโดยผู้เล่นอยู่\nนอกนั้นจะเป็น 0 laccess.progress = ความคืบหน้าการดำเนินการจาก 0 ถึง 1\nจะส่งกลับค่าการผลิต การรีโหลดของป้อมปืน หรือความคืบหน้าในการสร้างสิ่งก่อสร้าง laccess.speed = ความเร็วสูงสุดของยูนิตในหน่วย ช่อง/วินาที +laccess.id = ID of a unit/block/item/liquid.\nThis is the inverse of the lookup operation. lcategory.unknown = ไม่ทราบ lcategory.unknown.description = คำสั่งที่ไม่อยู่ในหมวดหมู่ใดๆเลย @@ -2386,6 +2387,7 @@ lenum.unbind = ยกเลิกการควบคุมลอจิกท lenum.move = ขยับไปที่ตำแหน่งที่กำหนดไว้ lenum.approach = เข้าใกล้ตำแหน่งโดยกำหนดระยะห่าง lenum.pathfind = ขยับไปที่ตำแหน่งที่กำหนดไว้ โดยมีการคำนวณเพื่อเลี่ยงสิ่งกีดขวาง +lenum.autopathfind = Automatically pathfinds to the nearest enemy core or drop point.\nThis is the same as standard wave enemy pathfinding. lenum.target = ยิงไปที่ตำแหน่งเป้าหมาย lenum.targetp = ยิงไปที่เป้าหมาย โดยมีการคำนวณความเร็ว lenum.itemdrop = ปล่อยไอเท็ม diff --git a/core/assets/bundles/bundle_tk.properties b/core/assets/bundles/bundle_tk.properties index a7bbdcbfae98..35cd670d8376 100644 --- a/core/assets/bundles/bundle_tk.properties +++ b/core/assets/bundles/bundle_tk.properties @@ -2225,6 +2225,7 @@ laccess.dead = Whether a unit/building is dead or no longer valid. laccess.controlled = Returns:\n[accent]@ctrlProcessor[] if unit controller is processor\n[accent]@ctrlPlayer[] if unit/building controller is player\n[accent]@ctrlFormation[] if unit is in formation\nOtherwise, 0. laccess.progress = Action progress, 0 to 1.\nReturns production, turret reload or construction progress. laccess.speed = Top speed of a unit, in tiles/sec. +laccess.id = ID of a unit/block/item/liquid.\nThis is the inverse of the lookup operation. lcategory.unknown = Unknown lcategory.unknown.description = Uncategorized instructions. lcategory.io = Input & Output @@ -2329,6 +2330,7 @@ lenum.unbind = Completely disable logic control.\nResume standard AI. lenum.move = Move to exact position. lenum.approach = Approach a position with a radius. lenum.pathfind = Pathfind to the enemy spawn. +lenum.autopathfind = Automatically pathfinds to the nearest enemy core or drop point.\nThis is the same as standard wave enemy pathfinding. lenum.target = Shoot a position. lenum.targetp = Shoot a target with velocity prediction. lenum.itemdrop = Drop an item. diff --git a/core/assets/bundles/bundle_tr.properties b/core/assets/bundles/bundle_tr.properties index 4ad73f004920..a5baff59b28a 100644 --- a/core/assets/bundles/bundle_tr.properties +++ b/core/assets/bundles/bundle_tr.properties @@ -2247,6 +2247,7 @@ laccess.dead = Bir bina veya birim hala var mı? laccess.controlled = Bir birim ne tarafından kontrol ediliyor? laccess.progress = Bir şeyin oluş aşaması, örnek: bir turetin yeniden doldurma süresindeki aşama. laccess.speed = Bir Birimin Maks hızı, blok/sn. +laccess.id = ID of a unit/block/item/liquid.\nThis is the inverse of the lookup operation. lcategory.unknown = ??? lcategory.unknown.description = Kategorilenmemiş Talimatlar lcategory.io = Giriş & Çıkış @@ -2367,6 +2368,7 @@ lenum.unbind = Logic Kontrolü tamaman devre dışı bırak.\nNormal AI ı devre lenum.move = Tam konuma git. lenum.approach = Bir Konuma yaklaş. lenum.pathfind = Düşman Doğuş noktasına git. +lenum.autopathfind = Automatically pathfinds to the nearest enemy core or drop point.\nThis is the same as standard wave enemy pathfinding. lenum.target = Bir alana ateş et. lenum.targetp = Bir cisme ateş et. lenum.itemdrop = Bir itemi bırak. diff --git a/core/assets/bundles/bundle_uk_UA.properties b/core/assets/bundles/bundle_uk_UA.properties index 288fcd4561bc..39887c990fda 100644 --- a/core/assets/bundles/bundle_uk_UA.properties +++ b/core/assets/bundles/bundle_uk_UA.properties @@ -2272,6 +2272,7 @@ laccess.dead = Чи є одиниця або будівля мертвою аб laccess.controlled = Повертає \n[accent]@ctrlProcessor[] якщо одиниця контролюється процесором;\n[accent]@ctrlPlayer[] якщо одиниця чи будівля контролюєть гравцем\n[accent]@ctrlFormation[] якщо одиниця у загоні (формуванні)\nІнакше — 0. laccess.progress = Прогрес дії, від 0 до 1.\nПовертає виробництво, перезавантаження башти або хід будівництва. laccess.speed = Максимальна швидкість одиниці, у плитках за секунду. +laccess.id = ID of a unit/block/item/liquid.\nThis is the inverse of the lookup operation. lcategory.unknown = Невідома категорія lcategory.unknown.description = Команди без категорії. @@ -2393,6 +2394,7 @@ lenum.unbind = Повністю вимикає усю логіку.\nПродо lenum.move = Перемістити в точне положення. lenum.approach = Наближення до позиції із зазначеним радіусом. lenum.pathfind = Знайдення шляху до точки появи ворогів. +lenum.autopathfind = Automatically pathfinds to the nearest enemy core or drop point.\nThis is the same as standard wave enemy pathfinding. lenum.target = Стрільба в задану позицію. lenum.targetp = Стріляти в ціль із передбаченням швидкості. lenum.itemdrop = Викинути предмет. diff --git a/core/assets/bundles/bundle_vi.properties b/core/assets/bundles/bundle_vi.properties index 90cca2efb538..cb95da373580 100644 --- a/core/assets/bundles/bundle_vi.properties +++ b/core/assets/bundles/bundle_vi.properties @@ -2248,6 +2248,7 @@ laccess.dead = Đơn vị/công trình đã chết hoặc không còn hợp lệ laccess.controlled = Trả về:\n[accent]@ctrlProcessor[] nếu điều khiển là khối xử lý\n[accent]@ctrlPlayer[] nếu người điều khiển đơn vị/công trình là người chơi\n[accent]@ctrlFormation[] nếu đơn vị trọng đội hình\nNgược lại, 0. laccess.progress = Tiến trình thực hiện, 0 đến 1.\n Trả về tiến trình sản xuất, nạp đạn bệ súng hoặc xây dựng. laccess.speed = Tốc độ của đơn vị, tính bằng ô/giây. +laccess.id = ID of a unit/block/item/liquid.\nThis is the inverse of the lookup operation. lcategory.unknown = Không xác định lcategory.unknown.description = Chỉ thị không được phân loại. lcategory.io = Đầu Vào & Ra @@ -2368,6 +2369,7 @@ lenum.unbind = Vô hiệu hóa hoàn toàn điều khiển lô-gíc.\n Khôi ph lenum.move = Di chuyển đến vị trí xác định. lenum.approach = Tiếp cận một vị trí với bán kính. lenum.pathfind = Tìm đường đến nơi tạo ra kẻ địch. +lenum.autopathfind = Automatically pathfinds to the nearest enemy core or drop point.\nThis is the same as standard wave enemy pathfinding. lenum.target = Bắn vào vị trí xác định. lenum.targetp = Bắn vào một mục tiêu với tốc độ dự đoán lenum.itemdrop = Thả vật phẩm. diff --git a/core/assets/bundles/bundle_zh_CN.properties b/core/assets/bundles/bundle_zh_CN.properties index f6a35f804210..e05fecb58981 100644 --- a/core/assets/bundles/bundle_zh_CN.properties +++ b/core/assets/bundles/bundle_zh_CN.properties @@ -2273,6 +2273,7 @@ laccess.dead = 单位或建筑是否已被摧毁或者已失效 laccess.controlled = 若单位的控制方是处理器,返回[accent]@ctrlProcessor[]\n若单位/建筑由玩家控制,返回[accent]@ctrlPlayer[]\n若单位在编队中,返回[accent]@ctrlFormation[]\n其他情况,返回0 laccess.progress = 进度,0到1之间的数值。 \n返回工厂生产、 炮塔装填,或者建筑建造的进度 laccess.speed = 单位的最高速度(格/秒) +laccess.id = ID of a unit/block/item/liquid.\nThis is the inverse of the lookup operation. lcategory.unknown = 未知 lcategory.unknown.description = 未分类的指令 @@ -2394,6 +2395,7 @@ lenum.unbind = 停用单位的逻辑控制\n恢复常规AI lenum.move = 移动到某个位置 lenum.approach = 靠近某个位置至一定的距离内 lenum.pathfind = 寻路移动至敌人出生点 +lenum.autopathfind = Automatically pathfinds to the nearest enemy core or drop point.\nThis is the same as standard wave enemy pathfinding. lenum.target = 向某个位置瞄准/射击 lenum.targetp = 根据提前量向某个目标瞄准/射击 lenum.itemdrop = 将携带的物品放入一座建筑 diff --git a/core/assets/bundles/bundle_zh_TW.properties b/core/assets/bundles/bundle_zh_TW.properties index fbf4117c1374..5e6733ca011b 100644 --- a/core/assets/bundles/bundle_zh_TW.properties +++ b/core/assets/bundles/bundle_zh_TW.properties @@ -2257,6 +2257,7 @@ laccess.dead = 單位或建築是否已死亡或不存在。 laccess.controlled = 將回傳:\n處理器控制:[accent]@ctrlProcessor[]\n玩家控制:[accent]@ctrlPlayer[]\n在隊形中:[accent]@ctrlFormation[]\n其他:[accent]0[]。 laccess.progress = 建造、生產進度。以 0 到 1 表示。以及砲台裝填。 laccess.speed = 單位最快速度(格子/秒) +laccess.id = ID of a unit/block/item/liquid.\nThis is the inverse of the lookup operation. lcategory.unknown = 未知 lcategory.unknown.description = Uncategorized instructions. @@ -2378,6 +2379,7 @@ lenum.unbind = 完全停用邏輯控制\n恢復爲原始AI lenum.move = 移動到指定位置 lenum.approach = 移動到距離指定位置一段距離的地方 lenum.pathfind = 由內建AI前往敵方重生點 +lenum.autopathfind = Automatically pathfinds to the nearest enemy core or drop point.\nThis is the same as standard wave enemy pathfinding. lenum.target = 射擊指定區域 lenum.targetp = 帶自瞄射擊指定的目標 lenum.itemdrop = 放下物品 diff --git a/core/src/mindustry/ai/ControlPathfinder.java b/core/src/mindustry/ai/ControlPathfinder.java index dcfe370f9acf..4ff9f7e384f5 100644 --- a/core/src/mindustry/ai/ControlPathfinder.java +++ b/core/src/mindustry/ai/ControlPathfinder.java @@ -233,7 +233,7 @@ public boolean getPathPosition(Unit unit, int pathId, Vec2 destination, Vec2 out req.curId = pathId; //check for the unit getting stuck every N seconds - if((req.stuckTimer += Time.delta) >= 60f * 1.5f){ + if(req.done && (req.stuckTimer += Time.delta) >= 60f * 1.5f){ req.stuckTimer = 0f; //force recalculate if(req.lastPos.within(unit, 1.5f)){ diff --git a/core/src/mindustry/ai/types/LogicAI.java b/core/src/mindustry/ai/types/LogicAI.java index 5987dc2bc7e4..d334f9dec173 100644 --- a/core/src/mindustry/ai/types/LogicAI.java +++ b/core/src/mindustry/ai/types/LogicAI.java @@ -4,9 +4,13 @@ import arc.struct.*; import arc.util.*; import mindustry.*; +import mindustry.ai.*; import mindustry.entities.units.*; import mindustry.gen.*; import mindustry.logic.*; +import mindustry.world.*; + +import static mindustry.Vars.*; public class LogicAI extends AIController{ /** Minimum delay between item transfers. */ @@ -40,6 +44,12 @@ public class LogicAI extends AIController{ private float lastMoveX, lastMoveY; private int lastPathId = 0; + // LogicAI state should not be reset after reading. + @Override + public boolean keepState(){ + return true; + } + @Override public void updateMovement(){ if(control == LUnitControl.pathfind){ @@ -81,6 +91,30 @@ public void updateMovement(){ } } } + case autoPathfind -> { + Building core = unit.closestEnemyCore(); + + if((core == null || !unit.within(core, unit.range() * 0.5f))){ + boolean move = true; + Tile spawner = null; + + if(state.rules.waves && unit.team == state.rules.defaultTeam){ + spawner = getClosestSpawner(); + if(spawner != null && unit.within(spawner, state.rules.dropZoneRadius + 120f)) move = false; + } + + if(move){ + if(unit.isFlying()){ + var target = core == null ? spawner : core; + if(target != null){ + moveTo(target, unit.range() * 0.5f); + } + }else{ + pathfind(Pathfinder.fieldCore); + } + } + } + } case stop -> { unit.clearBuilding(); } diff --git a/core/src/mindustry/content/Blocks.java b/core/src/mindustry/content/Blocks.java index 08a157dd9bbb..2f3e16659208 100644 --- a/core/src/mindustry/content/Blocks.java +++ b/core/src/mindustry/content/Blocks.java @@ -4537,7 +4537,7 @@ Items.thorium, new ArtilleryBulletType(2.5f, 350, "shell"){{ }}; scathe = new ItemTurret("scathe"){{ - requirements(Category.turret, with(Items.silicon, 450, Items.graphite, 400, Items.tungsten, 500, Items.carbide, 300)); + requirements(Category.turret, with(Items.silicon, 450, Items.graphite, 400, Items.tungsten, 500, Items.oxide, 100, Items.carbide, 200)); ammo( Items.carbide, new BasicBulletType(0f, 1){{ @@ -4680,7 +4680,7 @@ Items.carbide, new BasicBulletType(0f, 1){{ targetUnderBlocks = false; shake = 6f; - ammoPerShot = 20; + ammoPerShot = 15; maxAmmo = 30; shootY = -1; outlineColor = Pal.darkOutline; diff --git a/core/src/mindustry/content/UnitTypes.java b/core/src/mindustry/content/UnitTypes.java index 04465631feaf..328b019d26e1 100644 --- a/core/src/mindustry/content/UnitTypes.java +++ b/core/src/mindustry/content/UnitTypes.java @@ -2153,13 +2153,15 @@ public static void load(){ abilities.add(new EnergyFieldAbility(40f, 65f, 180f){{ statusDuration = 60f * 6f; maxTargets = 25; + healPercent = 1.5f; + sameTypeHealMult = 0.5f; }}); for(float mountY : new float[]{-18f, 14}){ weapons.add(new PointDefenseWeapon("point-defense-mount"){{ x = 12.5f; y = mountY; - reload = 6f; + reload = 4f; targetInterval = 8f; targetSwitchInterval = 8f; @@ -2167,7 +2169,7 @@ public static void load(){ shootEffect = Fx.sparkShoot; hitEffect = Fx.pointHit; maxRange = 180f; - damage = 25f; + damage = 30f; }}; }}); } @@ -2628,7 +2630,10 @@ public static void load(){ width = 5f; height = 7f; lifetime = 15f; - hitSize = 4f; + hitSize = 4f; + pierceCap = 3; + pierce = true; + pierceBuilding = true; hitColor = backColor = trailColor = Color.valueOf("feb380"); frontColor = Color.white; trailWidth = 1.7f; diff --git a/core/src/mindustry/core/Renderer.java b/core/src/mindustry/core/Renderer.java index a1223a38563e..528b25bee0a0 100644 --- a/core/src/mindustry/core/Renderer.java +++ b/core/src/mindustry/core/Renderer.java @@ -18,6 +18,7 @@ import mindustry.gen.*; import mindustry.graphics.*; import mindustry.graphics.g3d.*; +import mindustry.maps.*; import mindustry.type.*; import mindustry.world.blocks.storage.*; import mindustry.world.blocks.storage.CoreBlock.*; @@ -288,6 +289,7 @@ public void toggleBloom(boolean enabled){ public void draw(){ Events.fire(Trigger.preDraw); + MapPreviewLoader.checkPreviews(); camera.update(); @@ -311,6 +313,7 @@ public void draw(){ Draw.sort(true); Events.fire(Trigger.draw); + MapPreviewLoader.checkPreviews(); if(pixelator.enabled()){ pixelator.register(); diff --git a/core/src/mindustry/ctype/UnlockableContent.java b/core/src/mindustry/ctype/UnlockableContent.java index 844f28aefd34..bab283dc93d9 100644 --- a/core/src/mindustry/ctype/UnlockableContent.java +++ b/core/src/mindustry/ctype/UnlockableContent.java @@ -68,6 +68,10 @@ public void loadIcon(){ uiIcon = Core.atlas.find(getContentType().name() + "-" + name + "-ui", fullIcon); } + public int getLogicId(){ + return logicVars.lookupLogicId(this); + } + public String displayDescription(){ return minfo.mod == null ? description : description + "\n" + Core.bundle.format("mod.display", minfo.mod.meta.displayName); } diff --git a/core/src/mindustry/entities/Puddles.java b/core/src/mindustry/entities/Puddles.java index d878c7f28e7d..40526baf0583 100644 --- a/core/src/mindustry/entities/Puddles.java +++ b/core/src/mindustry/entities/Puddles.java @@ -70,13 +70,16 @@ public static void deposit(Tile tile, Tile source, Liquid liquid, float amount, Puddle p = map.get(tile.pos()); if(p == null || p.liquid == null){ - Puddle puddle = Puddle.create(); - puddle.tile = tile; - puddle.liquid = liquid; - puddle.amount = amount; - puddle.set(ax, ay); - map.put(tile.pos(), puddle); - puddle.add(); + if(!Vars.net.client()){ + //do not create puddles clientside as that destroys syncing + Puddle puddle = Puddle.create(); + puddle.tile = tile; + puddle.liquid = liquid; + puddle.amount = amount; + puddle.set(ax, ay); + map.put(tile.pos(), puddle); + puddle.add(); + } }else if(p.liquid == liquid){ p.accepting = Math.max(amount, p.accepting); diff --git a/core/src/mindustry/entities/abilities/EnergyFieldAbility.java b/core/src/mindustry/entities/abilities/EnergyFieldAbility.java index c8b2452fc305..e12a5959d0fd 100644 --- a/core/src/mindustry/entities/abilities/EnergyFieldAbility.java +++ b/core/src/mindustry/entities/abilities/EnergyFieldAbility.java @@ -29,6 +29,8 @@ public class EnergyFieldAbility extends Ability{ public boolean targetGround = true, targetAir = true, hitBuildings = true, hitUnits = true; public int maxTargets = 25; public float healPercent = 3f; + /** Multiplies healing to units of the same type by this amount. */ + public float sameTypeHealMult = 1f; public float layer = Layer.bullet - 0.001f, blinkScl = 20f, blinkSize = 0.1f; public float effectRadius = 5f, sectorRad = 0.14f, rotateSpeed = 0.5f; @@ -129,7 +131,8 @@ public void update(Unit unit){ if(((Teamc)other).team() == unit.team){ if(other.damaged()){ anyNearby = true; - other.heal(healPercent / 100f * other.maxHealth()); + float healMult = (other instanceof Unit u && u.type == unit.type) ? sameTypeHealMult : 1f; + other.heal(healPercent / 100f * other.maxHealth() * healMult); healEffect.at(other); damageEffect.at(rx, ry, 0f, color, other); hitEffect.at(rx, ry, unit.angleTo(other), color); diff --git a/core/src/mindustry/entities/comp/BuildingComp.java b/core/src/mindustry/entities/comp/BuildingComp.java index baae1f6a8362..663123ac80ac 100644 --- a/core/src/mindustry/entities/comp/BuildingComp.java +++ b/core/src/mindustry/entities/comp/BuildingComp.java @@ -1999,7 +1999,7 @@ public void setProp(UnlockableContent content, double value){ }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))){ + if(amount < liquids.get(liquid) || (acceptLiquid(self(), liquid) && (liquids.current() == liquid || liquids.currentAmount() <= 0.1f || block.consumesLiquid(liquid)))){ liquids.set(liquid, amount); } } diff --git a/core/src/mindustry/game/SectorInfo.java b/core/src/mindustry/game/SectorInfo.java index 16e51f39a991..c4ee046c6cc8 100644 --- a/core/src/mindustry/game/SectorInfo.java +++ b/core/src/mindustry/game/SectorInfo.java @@ -150,11 +150,6 @@ public void write(){ state.rules.winWave = winWave; state.rules.attackMode = attack; - //assign new wave patterns when the version changes - if(waveVersion != Waves.waveVersion && state.rules.sector.preset == null){ - state.rules.spawns = Waves.generate(state.rules.sector.threat); - } - CoreBuild entity = state.rules.defaultTeam.core(); if(entity != null){ entity.items.clear(); @@ -180,7 +175,6 @@ public void prepare(){ spawnPosition = entity.pos(); } - waveVersion = Waves.waveVersion; waveSpacing = state.rules.waveSpacing; wave = state.wave; winWave = state.rules.winWave; diff --git a/core/src/mindustry/input/InputHandler.java b/core/src/mindustry/input/InputHandler.java index 5aa88afbabec..1be41c4877b8 100644 --- a/core/src/mindustry/input/InputHandler.java +++ b/core/src/mindustry/input/InputHandler.java @@ -285,7 +285,7 @@ public static void setUnitCommand(Player player, int[] unitIds, UnitCommand comm @Remote(called = Loc.server, targets = Loc.both, forward = true) public static void commandBuilding(Player player, int[] buildings, Vec2 target){ - if(player == null || target == null) return; + if(player == null || target == null) return; if(net.server() && !netServer.admins.allowAction(player, ActionType.commandBuilding, event -> { event.buildingPositions = buildings; @@ -299,6 +299,8 @@ public static void commandBuilding(Player player, int[] buildings, Vec2 target){ if(build == null || build.team() != player.team() || !build.block.commandable) continue; build.onCommand(target); + build.lastAccessed = player.name; + if(!state.isPaused() && player == Vars.player){ Fx.moveCommand.at(target); } diff --git a/core/src/mindustry/logic/LAccess.java b/core/src/mindustry/logic/LAccess.java index 55adfbd40595..c5aa8478a983 100644 --- a/core/src/mindustry/logic/LAccess.java +++ b/core/src/mindustry/logic/LAccess.java @@ -46,6 +46,7 @@ public enum LAccess{ name, payloadCount, payloadType, + id, //values with parameters are considered controllable enabled("to"), //"to" is standard for single parameter access diff --git a/core/src/mindustry/logic/LExecutor.java b/core/src/mindustry/logic/LExecutor.java index 447e1bc352d6..4285a6c81a8f 100644 --- a/core/src/mindustry/logic/LExecutor.java +++ b/core/src/mindustry/logic/LExecutor.java @@ -407,7 +407,7 @@ public void run(LExecutor exec){ float x1 = World.unconv(exec.numf(p1)), y1 = World.unconv(exec.numf(p2)), d1 = World.unconv(exec.numf(p3)); switch(type){ - case idle -> { + case idle, autoPathfind -> { ai.control = type; } case move, stop, approach, pathfind -> { @@ -1143,7 +1143,6 @@ public void run(LExecutor exec){ } } - //TODO inverse lookup public static class LookupI implements LInstruction{ public int dest; public int from; @@ -1433,15 +1432,15 @@ public SetRuleI(){ public void run(LExecutor exec){ switch(rule){ case waveTimer -> state.rules.waveTimer = exec.bool(value); - case wave -> state.wave = exec.numi(value); - case currentWaveTime -> state.wavetime = exec.numf(value) * 60f; + case wave -> state.wave = Math.max(exec.numi(value), 1); + case currentWaveTime -> state.wavetime = Math.max(exec.numf(value) * 60f, 0f); case waves -> state.rules.waves = exec.bool(value); case waveSending -> state.rules.waveSending = exec.bool(value); case attackMode -> state.rules.attackMode = exec.bool(value); case waveSpacing -> state.rules.waveSpacing = exec.numf(value) * 60f; case enemyCoreBuildRadius -> state.rules.enemyCoreBuildRadius = exec.numf(value) * 8f; case dropZoneRadius -> state.rules.dropZoneRadius = exec.numf(value) * 8f; - case unitCap -> state.rules.unitCap = exec.numi(value); + case unitCap -> state.rules.unitCap = Math.max(exec.numi(value), 0); case lighting -> state.rules.lighting = exec.bool(value); case mapArea -> { int x = exec.numi(p1), y = exec.numi(p2), w = exec.numi(p3), h = exec.numi(p4); @@ -1450,7 +1449,7 @@ public void run(LExecutor exec){ } } case ambientLight -> state.rules.ambientLight.fromDouble(exec.num(value)); - case solarMultiplier -> state.rules.solarMultiplier = exec.numf(value); + case solarMultiplier -> state.rules.solarMultiplier = Math.max(exec.numf(value), 0f); case unitHealth, unitBuildSpeed, unitCost, unitDamage, blockHealth, blockDamage, buildSpeed, rtsMinSquad, rtsMinWeight -> { Team team = exec.team(p1); if(team != null){ @@ -1673,7 +1672,7 @@ public static void syncVariable(Building building, int variable, Object value){ public static class SyncI implements LInstruction{ //66 syncs per second - static final long syncInterval = 15; + public static long syncInterval = 15; public int variable; diff --git a/core/src/mindustry/logic/LStatements.java b/core/src/mindustry/logic/LStatements.java index a277e722072e..3c57c9a254b1 100644 --- a/core/src/mindustry/logic/LStatements.java +++ b/core/src/mindustry/logic/LStatements.java @@ -220,6 +220,14 @@ void rebuild(Table table){ row(s); fields(s, "rotation", p3, v -> p3 = v); } + //TODO + /* + case character -> { + fields(s, "x", x, v -> x = v); + fields(s, "y", y, v -> y = v); + row(s); + fields(s, "char", p1, v -> p1 = v); + }*/ } }).expand().left(); } @@ -1207,7 +1215,7 @@ public void build(Table table){ fields(table, result, str -> result = str); table.add(" = spawn "); - field(table, type, str -> type = str); + field(table, type, str -> type = str).colspan(!LCanvas.useRows() ? 1 : 2); row(table); @@ -1219,7 +1227,9 @@ public void build(Table table){ table.row(); - table.add(); + if(!LCanvas.useRows()){ + table.add(); + } table.add("team "); field(table, team, str -> team = str); @@ -1869,13 +1879,17 @@ public void build(Table table){ })); }, Styles.logict, () -> {}).size(40f).padLeft(-1).color(table.color); + row(table); + table.add(" of ").self(this::param); - field(table, of, str -> of = str); + field(table, of, str -> of = str).colspan(2); + + row(table); table.add(" to "); - field(table, value, str -> value = str); + field(table, value, str -> value = str).colspan(2); } private void stype(String text){ diff --git a/core/src/mindustry/logic/LUnitControl.java b/core/src/mindustry/logic/LUnitControl.java index edcedf4a6f8e..ccfe9b5d3fe2 100644 --- a/core/src/mindustry/logic/LUnitControl.java +++ b/core/src/mindustry/logic/LUnitControl.java @@ -6,6 +6,7 @@ public enum LUnitControl{ move("x", "y"), approach("x", "y", "radius"), pathfind("x", "y"), + autoPathfind, boost("enable"), target("x", "y", "shoot"), targetp("unit", "shoot"), diff --git a/core/src/mindustry/mod/ClassMap.java b/core/src/mindustry/mod/ClassMap.java index 35fd6b50c1e6..5ddec905f5f3 100644 --- a/core/src/mindustry/mod/ClassMap.java +++ b/core/src/mindustry/mod/ClassMap.java @@ -441,6 +441,7 @@ public class ClassMap{ classes.put("ConsumeLiquidFilter", mindustry.world.consumers.ConsumeLiquidFilter.class); classes.put("ConsumeLiquidFlammable", mindustry.world.consumers.ConsumeLiquidFlammable.class); classes.put("ConsumeLiquids", mindustry.world.consumers.ConsumeLiquids.class); + classes.put("ConsumeLiquidsDynamic", mindustry.world.consumers.ConsumeLiquidsDynamic.class); classes.put("ConsumePayloadDynamic", mindustry.world.consumers.ConsumePayloadDynamic.class); classes.put("ConsumePayloadFilter", mindustry.world.consumers.ConsumePayloadFilter.class); classes.put("ConsumePayloads", mindustry.world.consumers.ConsumePayloads.class); diff --git a/core/src/mindustry/type/Item.java b/core/src/mindustry/type/Item.java index 36bd65ef5998..f451b5f1a398 100644 --- a/core/src/mindustry/type/Item.java +++ b/core/src/mindustry/type/Item.java @@ -153,8 +153,9 @@ public void createIcons(MultiPacker packer){ @Override public double sense(LAccess sensor){ - if(sensor == LAccess.color) return color.toFloatBits(); - return 0; + if(sensor == LAccess.color) return color.toDoubleBits(); + if(sensor == LAccess.id) return getLogicId(); + return Float.NaN; } @Override diff --git a/core/src/mindustry/type/Liquid.java b/core/src/mindustry/type/Liquid.java index 4a578f838294..a524970fcdeb 100644 --- a/core/src/mindustry/type/Liquid.java +++ b/core/src/mindustry/type/Liquid.java @@ -171,8 +171,9 @@ public void setStats(){ @Override public double sense(LAccess sensor){ - if(sensor == LAccess.color) return color.toFloatBits(); - return 0; + if(sensor == LAccess.color) return color.toDoubleBits(); + if(sensor == LAccess.id) return getLogicId(); + return Double.NaN; } @Override diff --git a/core/src/mindustry/type/UnitType.java b/core/src/mindustry/type/UnitType.java index e03fee7f4feb..d4a708d4cf34 100644 --- a/core/src/mindustry/type/UnitType.java +++ b/core/src/mindustry/type/UnitType.java @@ -28,6 +28,7 @@ import mindustry.gen.*; import mindustry.graphics.*; import mindustry.graphics.MultiPacker.*; +import mindustry.logic.*; import mindustry.type.ammo.*; import mindustry.ui.*; import mindustry.world.*; @@ -40,7 +41,7 @@ import static arc.graphics.g2d.Draw.*; import static mindustry.Vars.*; -public class UnitType extends UnlockableContent{ +public class UnitType extends UnlockableContent implements Senseable{ public static final float shadowTX = -12, shadowTY = -13; private static final Vec2 legOffset = new Vec2(); @@ -1124,6 +1125,24 @@ public ItemStack[] researchRequirements(){ return super.researchRequirements(); } + @Override + public double sense(LAccess sensor){ + return switch(sensor){ + case health, maxHealth -> health; + case size -> hitSize / tilesize; + case itemCapacity -> itemCapacity; + case speed -> speed * 60f / tilesize; + case id -> getLogicId(); + default -> Double.NaN; + }; + } + + @Override + public Object senseObject(LAccess sensor){ + if(sensor == LAccess.name) return name; + return noSensed; + } + @Override public ContentType getContentType(){ return ContentType.unit; diff --git a/core/src/mindustry/type/Weapon.java b/core/src/mindustry/type/Weapon.java index 0b25fd66f133..97ac3b45daf5 100644 --- a/core/src/mindustry/type/Weapon.java +++ b/core/src/mindustry/type/Weapon.java @@ -396,6 +396,7 @@ public void update(Unit unit, WeaponMount mount){ //shoot if applicable if(mount.shoot && //must be shooting can && //must be able to shoot + !(bullet.killShooter && mount.totalShots > 0) && //if the bullet kills the shooter, you should only ever be able to shoot once (!useAmmo || unit.ammo > 0 || !state.rules.unitAmmo || unit.team.rules().infiniteAmmo) && //check ammo (!alternate || wasFlipped == flipSprite) && mount.warmup >= minWarmup && //must be warmed up @@ -436,6 +437,9 @@ protected void shoot(Unit unit, WeaponMount mount, float shootX, float shootY, f } shoot.shoot(mount.barrelCounter, (xOffset, yOffset, angle, delay, mover) -> { + //this is incremented immediately, as it is used for total bullet creation amount detection + mount.totalShots ++; + if(delay > 0f){ Time.run(delay, () -> bullet(unit, mount, xOffset, yOffset, angle, mover)); }else{ @@ -478,7 +482,6 @@ protected void bullet(Unit unit, WeaponMount mount, float xOffset, float yOffset mount.recoils[mount.barrelCounter % recoils] = 1f; } mount.heat = 1f; - mount.totalShots++; } //override to do special things to a bullet after spawning diff --git a/core/src/mindustry/type/weapons/PointDefenseWeapon.java b/core/src/mindustry/type/weapons/PointDefenseWeapon.java index 741b5cd29dc2..9063503a13be 100644 --- a/core/src/mindustry/type/weapons/PointDefenseWeapon.java +++ b/core/src/mindustry/type/weapons/PointDefenseWeapon.java @@ -9,6 +9,8 @@ import mindustry.gen.*; import mindustry.type.*; +import static mindustry.Vars.*; + /** * Note that this requires several things: * - A bullet with positive maxRange @@ -49,8 +51,10 @@ protected boolean checkTarget(Unit unit, Teamc target, float x, float y, float r protected void shoot(Unit unit, WeaponMount mount, float shootX, float shootY, float rotation){ if(!(mount.target instanceof Bullet target)) return; - if(target.damage() > bullet.damage){ - target.damage(target.damage() - bullet.damage); + // not sure whether it should multiply by the damageMultiplier of the unit + float bulletDamage = bullet.damage * unit.damageMultiplier() * state.rules.unitDamage(unit.team); + if(target.damage() > bulletDamage){ + target.damage(target.damage() - bulletDamage); }else{ target.remove(); } diff --git a/core/src/mindustry/world/Block.java b/core/src/mindustry/world/Block.java index fb151dfde594..c1a87f510c52 100644 --- a/core/src/mindustry/world/Block.java +++ b/core/src/mindustry/world/Block.java @@ -1374,6 +1374,7 @@ public double sense(LAccess sensor){ case itemCapacity -> itemCapacity; case liquidCapacity -> liquidCapacity; case powerCapacity -> consPower != null && consPower.buffered ? consPower.capacity : 0f; + case id -> getLogicId(); default -> Double.NaN; }; } diff --git a/core/src/mindustry/world/Tile.java b/core/src/mindustry/world/Tile.java index 9c6cef6489dd..9fedd0aa27c0 100644 --- a/core/src/mindustry/world/Tile.java +++ b/core/src/mindustry/world/Tile.java @@ -398,6 +398,9 @@ public void setOverlay(Block block){ this.overlay = (Floor)block; recache(); + if(!world.isGenerating() && build != null){ + build.onProximityUpdate(); + } } /** Sets the overlay without a recache. */ diff --git a/core/src/mindustry/world/blocks/defense/turrets/PointDefenseTurret.java b/core/src/mindustry/world/blocks/defense/turrets/PointDefenseTurret.java index e6d5a09c1a4d..97aedf43b559 100644 --- a/core/src/mindustry/world/blocks/defense/turrets/PointDefenseTurret.java +++ b/core/src/mindustry/world/blocks/defense/turrets/PointDefenseTurret.java @@ -14,6 +14,8 @@ import mindustry.graphics.*; import mindustry.world.meta.*; +import static mindustry.Vars.*; + public class PointDefenseTurret extends ReloadTurret{ public final int timerTarget = timers++; public float retargetTime = 5f; @@ -80,8 +82,9 @@ public void updateTile(){ //shoot when possible if(Angles.within(rotation, dest, shootCone) && reloadCounter >= reload){ - if(target.damage() > bulletDamage){ - target.damage(target.damage() - bulletDamage); + float realDamage = bulletDamage * state.rules.blockDamage(team); + if(target.damage() > realDamage){ + target.damage(target.damage() - realDamage); }else{ target.remove(); } diff --git a/core/src/mindustry/world/blocks/logic/LogicDisplay.java b/core/src/mindustry/world/blocks/logic/LogicDisplay.java index 192bd67801b9..453a3391bda3 100644 --- a/core/src/mindustry/world/blocks/logic/LogicDisplay.java +++ b/core/src/mindustry/world/blocks/logic/LogicDisplay.java @@ -27,7 +27,8 @@ public class LogicDisplay extends Block{ commandPoly = 7, commandLinePoly = 8, commandTriangle = 9, - commandImage = 10; + commandImage = 10, + commandCharacter = 11; public int maxSides = 25; @@ -102,6 +103,9 @@ public void draw(){ var icon = Fonts.logicIcon(p1); Draw.rect(Fonts.logicIcon(p1), x, y, p2, p2 / icon.ratio(), p3); } + case commandCharacter -> { + //TODO + } } } @@ -146,7 +150,8 @@ public enum GraphicsType{ poly, linePoly, triangle, - image,; + image, + ;//character; public static final GraphicsType[] all = values(); } diff --git a/core/src/mindustry/world/blocks/payloads/PayloadDeconstructor.java b/core/src/mindustry/world/blocks/payloads/PayloadDeconstructor.java index 428eb1891bc9..ee66fcdfd445 100644 --- a/core/src/mindustry/world/blocks/payloads/PayloadDeconstructor.java +++ b/core/src/mindustry/world/blocks/payloads/PayloadDeconstructor.java @@ -144,7 +144,7 @@ public void updateTile(){ time += edelta(); for(int i = 0; i < reqs.length; i++){ - accum[i] += reqs[i].amount * (payload instanceof BuildPayload ? state.rules.buildCostMultiplier : state.rules.unitCost(team)) * realShift; + accum[i] += reqs[i].amount * (deconstructing instanceof BuildPayload ? state.rules.buildCostMultiplier : state.rules.unitCost(team)) * realShift; } } diff --git a/core/src/mindustry/world/blocks/units/Reconstructor.java b/core/src/mindustry/world/blocks/units/Reconstructor.java index 68a3f28932da..c4da0d2e18cf 100644 --- a/core/src/mindustry/world/blocks/units/Reconstructor.java +++ b/core/src/mindustry/world/blocks/units/Reconstructor.java @@ -334,6 +334,7 @@ public void updateTile(){ @Override public double sense(LAccess sensor){ if(sensor == LAccess.progress) return Mathf.clamp(fraction()); + if(sensor == LAccess.itemCapacity) return Mathf.round(itemCapacity * state.rules.unitCost(team)); return super.sense(sensor); } diff --git a/core/src/mindustry/world/blocks/units/UnitFactory.java b/core/src/mindustry/world/blocks/units/UnitFactory.java index 9b28c8a61d51..467b7259672c 100644 --- a/core/src/mindustry/world/blocks/units/UnitFactory.java +++ b/core/src/mindustry/world/blocks/units/UnitFactory.java @@ -207,6 +207,7 @@ public boolean shouldActiveSound(){ @Override public double sense(LAccess sensor){ if(sensor == LAccess.progress) return Mathf.clamp(fraction()); + if(sensor == LAccess.itemCapacity) return Mathf.round(itemCapacity * state.rules.unitCost(team)); return super.sense(sensor); } diff --git a/core/src/mindustry/world/consumers/ConsumeLiquidsDynamic.java b/core/src/mindustry/world/consumers/ConsumeLiquidsDynamic.java new file mode 100644 index 000000000000..9079658629c6 --- /dev/null +++ b/core/src/mindustry/world/consumers/ConsumeLiquidsDynamic.java @@ -0,0 +1,69 @@ +package mindustry.world.consumers; + +import arc.func.Func; +import arc.scene.ui.layout.Table; +import mindustry.Vars; +import mindustry.gen.Building; +import mindustry.type.LiquidStack; +import mindustry.ui.ReqImage; +import mindustry.world.Block; + +public class ConsumeLiquidsDynamic extends Consume{ + public final Func liquids; + + @SuppressWarnings("unchecked") + public ConsumeLiquidsDynamic(Func liquids){ + this.liquids = (Func)liquids; + } + + @Override + public void apply(Block block){ + block.hasLiquids = true; + } + + @Override + public void build(Building build, Table table){ + LiquidStack[][] current = {liquids.get(build)}; + + table.table(cont -> { + table.update(() -> { + if(current[0] != liquids.get(build)){ + rebuild(build, cont); + current[0] = liquids.get(build); + } + }); + + rebuild(build, cont); + }); + } + + private void rebuild(Building build, Table table){ + table.clear(); + int i = 0; + + for(LiquidStack stack : liquids.get(build)){ + table.add(new ReqImage(stack.liquid.uiIcon, + () -> build.liquids != null && build.liquids.get(stack.liquid) > 0)).size(Vars.iconMed).padRight(8); + if(++i % 4 == 0) table.row(); + } + } + + @Override + public void update(Building build){ + float mult = multiplier.get(build); + for(LiquidStack stack : liquids.get(build)){ + build.liquids.remove(stack.liquid, stack.amount * build.edelta() * mult); + } + } + + @Override + public float efficiency(Building build){ + float ed = build.edelta(); + if(ed <= 0.00000001f) return 0f; + float min = 1f; + for(LiquidStack stack : liquids.get(build)){ + min = Math.min(build.liquids.get(stack.liquid) / (stack.amount * ed * multiplier.get(build)), min); + } + return min; + } +} diff --git a/servers_v7.json b/servers_v7.json index f514388b7f75..a6681912d028 100644 --- a/servers_v7.json +++ b/servers_v7.json @@ -29,7 +29,7 @@ }, { "name": "Untitled Mindustry Servers", - "address": ["45.144.66.250:6567", "45.144.66.250:6501"] + "address": ["45.144.66.250:6567", "45.144.66.250:6601", "45.144.66.250:6611"] }, { "name": "C.A.M.S.", @@ -149,7 +149,7 @@ }, { "name": "Vndustry", - "address": ["vndustry.ddns.net", "vndustry.ddns.net:6568", "45.8.22.128:26164"] + "address": ["vndustry.ddns.net", "vndustry.ddns.net:6568", "27.50.72.82:25334"] }, { "name": "Anana&ShenYv", @@ -186,7 +186,7 @@ }, { "name": "Cyandustry", - "address": ["91.218.66.162:6568"] + "address": ["n1.mindustry.me:7000","n1.mindustry.me:7500"] }, { "name": "Four Family", @@ -211,5 +211,9 @@ { "name": "Vanilla CroCraft", "address": ["130.61.175.47:6567"] + }, + { + "name": "Extra Utilities", + "address": ["xyz.simpfun.cn:59901", "xyz.simpfun.cn:59290"] } ]