diff --git a/core/assets/bundles/bundle_vi.properties b/core/assets/bundles/bundle_vi.properties index cb95da3735..3436e69d89 100644 --- a/core/assets/bundles/bundle_vi.properties +++ b/core/assets/bundles/bundle_vi.properties @@ -88,7 +88,7 @@ stats.wave = Đợt đã vượt qua stats.unitsCreated = Số đơn vị đã tạo stats.enemiesDestroyed = Số kẻ địch đã tiêu diệt stats.built = Số công trình đã xây -stats.destroyed = Số công trình bị phá huỷ +stats.destroyed = Số công trình bị phá hủy stats.deconstructed = Số công trình đã phá dỡ stats.playtime = Thời gian chơi @@ -256,18 +256,18 @@ trace = Tìm người chơi trace.playername = Tên người chơi: [accent]{0} trace.ip = IP: [accent]{0} trace.id = ID: [accent]{0} -trace.mobile = Mobile Client: [accent]{0} -trace.modclient = Client tùy chỉnh: [accent]{0} +trace.mobile = Máy khách di động: [accent]{0} +trace.modclient = Máy khách tùy chỉnh: [accent]{0} trace.times.joined = Số lần tham gia: [accent]{0} trace.times.kicked = Số lần bị buộc rời: [accent]{0} -trace.ips = IPs: -trace.names = Names: -invalidid = Client ID không hợp lệ! Vui lòng gửi báo cáo lỗi. -player.ban = Ban -player.kick = Kick -player.trace = Trace -player.admin = Toggle Admin -player.team = Change Team +trace.ips = Các IP: +trace.names = Các tên: +invalidid = Định danh máy khách không hợp lệ! Vui lòng gửi báo cáo lỗi. +player.ban = Cấm +player.kick = Đá +player.trace = Truy vết +player.admin = Hoán đổi quản trị viên +player.team = Đổi đội server.bans = Cấm server.bans.none = Không có người chơi nào bị cấm! server.admins = Quản trị viên @@ -278,14 +278,14 @@ server.edit = Chỉnh sửa máy chủ server.outdated = [scarlet]Máy chủ lỗi thời![] server.outdated.client = [scarlet]Trò chơi lỗi thời![] server.version = [gray]v{0} {1} -server.custombuild = [accent]Phiên bản tùy chỉnh +server.custombuild = [accent]Bản dựng tùy chỉnh confirmban = Bạn có chắc chắn muốn cấm "{0}[white]"? confirmkick = Bạn có chắc chắn muốn buộc "{0}[white]" rời? confirmunban = Bạn có chắc chắn muốn gỡ cấm người chơi này? confirmadmin = Bạn có chắc chắn muốn thêm "{0}[white]" làm quản trị viên? -confirmunadmin = Bạn có chắc chắn muốn xóa quyền quản trị viên của "{0}[white]" ? -votekick.reason = Vote-Kick Reason -votekick.reason.message = Are you sure you want to vote-kick "{0}[white]"?\nIf yes, please enter the reason: +confirmunadmin = Bạn có chắc chắn muốn xóa quyền quản trị viên của "{0}[white]"? +votekick.reason = Lý do bỏ phiếu đá +votekick.reason.message = Bạn có chắc muốn bỏ phiếu đá "{0}[white]"?\nNếu có, xin hãy nhập lý do: joingame.title = Tham gia trò chơi joingame.ip = Địa chỉ: disconnect = Ngắt kết nối. @@ -378,14 +378,14 @@ wave = [accent]Đợt {0} wave.cap = [accent]Đợt {0}/{1} wave.waiting = [lightgray]Kẻ địch xuất hiện sau {0} wave.waveInProgress = [lightgray]Địch đang xuất hiện. -waiting = [lightgray]Chờ... +waiting = [lightgray]Đang chờ... waiting.players = Đang chờ thêm người chơi... wave.enemies = [lightgray]{0} Kẻ địch còn lại wave.enemycores = [accent]{0}[lightgray] Căn cứ địch wave.enemycore = [accent]{0}[lightgray] Căn cứ địch wave.enemy = [lightgray]{0} Kẻ địch còn lại -wave.guardianwarn = Boss sẽ xuất hiện sau [accent]{0}[] đợt. -wave.guardianwarn.one = Boss sẽ xuất hiện sau [accent]{0}[] đợt. +wave.guardianwarn = Trùm sẽ xuất hiện sau [accent]{0}[] đợt. +wave.guardianwarn.one = Trùm sẽ xuất hiện sau [accent]{0}[] đợt. loadimage = Tải hình ảnh saveimage = Lưu hình ảnh unknown = Không xác định @@ -394,8 +394,8 @@ builtin = Xây trong map.delete.confirm = Bạn có chắc chắn muốn xóa bản đồ này không? Hành động này không thể hoàn tác! map.random = [accent]Bản đồ ngẫu nhiên map.nospawn = Bản đồ này không có bất kỳ căn cứ nào để người chơi hồi sinh! Thêm một căn cứ {0} vào bản đồ ở trình chỉnh sửa. -map.nospawn.pvp = Bản đồ này không có bất kỳ căn cứ kẻ thù nào để người chơi hồi sinh! Thêm một căn cứ khác màu [scarlet]cam[] vào bản đồ ở trình chỉnh sửa. -map.nospawn.attack = Bản đồ này không có bất kỳ căn cứ kẻ thù nào để người chơi tấn công! Thêm một căn cứ màu {0} vào bản đồ ở trình chỉnh sửa. +map.nospawn.pvp = Bản đồ này không có bất kỳ căn cứ kẻ thù nào để người chơi hồi sinh! Thêm một căn cứ[scarlet] không phải màu cam[] vào bản đồ ở trình chỉnh sửa. +map.nospawn.attack = Bản đồ này không có bất kỳ căn cứ kẻ thù nào để người chơi tấn công! Thêm một căn cứ {0} vào bản đồ ở trình chỉnh sửa. map.invalid = Lỗi khi tải bản đồ: tệp bản đồ bị hỏng hoặc không hợp lệ. workshop.update = Cập nhật mục workshop.error = Lỗi khi tìm nạp thông tin chi tiết ở workshop: {0} @@ -678,12 +678,12 @@ launch.capacity = Lượng vật phẩm tối đa có thể phóng: [accent]{0} launch.destination = Đích đến: {0} configure.invalid = Số lượng phải là số trong khoảng 0 đến {0}. add = Thêm... -guardian = Boss +guardian = Trùm connectfail = [scarlet]Lỗi kết nối:\n\n[accent]{0} error.unreachable = Không thể truy cập máy chủ.\nKiểm tra lại xem địa chỉ có đúng không? error.invalidaddress = Địa chỉ không hợp lệ. -error.timedout = Hết thời gian chờ!\nĐảm bảo máy chủ đã thiết lập port forwarding, và địa chỉ đó là chính xác! +error.timedout = Hết thời gian chờ!\nĐảm bảo máy chủ đã thiết lập điều hướng cổng, và địa chỉ đó là chính xác! error.mismatch = Lỗi packet:\nphiên bản máy khách / máy chủ có thể không khớp.\nĐảm bảo bạn và máy chủ có phiên bản Mindustry mới nhất! error.alreadyconnected = Đã kết nối. error.mapnotfound = Không tìm thấy tệp bản đồ! @@ -1309,9 +1309,9 @@ liquid.cryofluid.name = Chất làm lạnh liquid.neoplasm.name = Dị thể liquid.arkycite.name = Arkycite liquid.gallium.name = Thuỷ Ngân -liquid.ozone.name = Khí Ô-zôn -liquid.hydrogen.name = Khí Hy-dro -liquid.nitrogen.name = Khí Ni-tơ +liquid.ozone.name = Ô-zôn +liquid.hydrogen.name = Hy-dro lỏng +liquid.nitrogen.name = Ni-tơ lỏng liquid.cyanogen.name = Cyanogen unit.dagger.name = Dagger @@ -1801,7 +1801,7 @@ hint.payloadDrop = Nhấn [accent]][] để thả một vật phẩm. hint.payloadDrop.mobile = [accent]Nhấn và giữ[] tại một khu vực trống để thả vật phẩm. hint.waveFire = [accent]Wave[] súng có nước làm đạn dược sẽ tự động dập tắt các đám cháy gần đó. hint.generator = \uf879 [accent]Máy phát điện đốt cháy[] đốt than và truyền năng lượng cho các khối liền kề.\n\nPhạm vi truyền tải năng lượng có thể được mở rộng với \uf87f [accent]Chốt điện[]. -hint.guardian = [accent]Boss[] được bọc giáp. Sử dụng loại đạn yếu chẳng hạn như [accent]Đồng[] và [accent]Chì[] là [scarlet]không hiệu quả[].\n\nSử dụng súng tiên tiến hơn hoặc sử dụng \uf835 [accent]Than chì làm đạn [] \uf861Duo/\uf859Salvo đạn dược để hạ gục Boss. +hint.guardian = [accent]Trùm[] được bọc giáp. Sử dụng loại đạn yếu chẳng hạn như [accent]Đồng[] và [accent]Chì[] là [scarlet]không hiệu quả[].\n\nSử dụng súng tiên tiến hơn hoặc sử dụng \uf835 [accent]Than chì làm đạn [] \uf861Duo/\uf859Salvo đạn dược để hạ gục Trùm. hint.coreUpgrade = Các căn cứ có thể được nâng cấp bằng cách [accent]đặt căn cứ cấp cao hơn trên chúng[].\n\nĐặt một căn cứ \uf868 [accent]Trụ sở[] trên căn cứ \uf869 [accent]Cơ sở[]. Đảm bảo không có vật cản gần đó. hint.presetLaunch = Khác khu vực đáp [accent] xám[], như [accent]Frozen Forest[], có thể được phóng đến từ bất cứ đâu. Nó không yêu cầu chiếm các khu vực lân cận.\n\n[accent]Các khu vực được đánh số[], chẳng hạn như cái này, là [accent]không bắt buộc[]. hint.presetDifficulty = Khu vực này có [scarlet]mối đe dọa cao[].\nPhóng đến khu vực như vậy [accent]không được khuyến khích[] nếu không có công nghệ và chuẩn bị phù hợp. @@ -1891,7 +1891,7 @@ liquid.hydrogen.description = Được sử dụng trong khai thác tài nguyên liquid.cyanogen.description = Được sử dụng cho đạn dược, xây dựng các đơn vị tiên tiến và các phản ứng khác nhau trong các khối tiên tiến. Rất dễ cháy. liquid.nitrogen.description = Được sử dụng trong khai thác tài nguyên, tạo khí và sản xuất đơn vị. Trơ. liquid.neoplasm.description = Một sản phẩm phụ sinh học nguy hiểm của lò phản ứng Neoplasia. Lan nhanh sang bất kì khối chứa nước nào mà nó chạm vào và gây hư hại chúng. Nhớt. -liquid.neoplasm.details = Neoplasm. Một khối lượng các tế bào tổng hợp phân chia nhanh chóng không kiểm soát với độ đặc giống như bùn. Kháng nhiệt. Cực kì nguy hiểm cho bất cứ khối nào có liên quan đến nước.\n\nQuá phức tạp và không ổn định để được phân tích. Chưa rõ được tiềm năng và ứng dụng của nó. Khuyến nghị đốt chúng trong các lò xỉ nóng chảy +liquid.neoplasm.details = Neoplasm. Một khối lượng các tế bào tổng hợp phân chia nhanh chóng không kiểm soát với độ đặc giống như bùn. Kháng nhiệt. Cực kì nguy hiểm cho bất cứ khối nào có liên quan đến nước.\n\nQuá phức tạp và không ổn định để được phân tích. Chưa rõ được tiềm năng và ứng dụng của nó. Khuyến nghị đốt chúng trong xỉ nóng chảy block.derelict = \uf77e [lightgray]Không xác định block.armored-conveyor.description = Vận chuyển vật phẩm về phía trước. Không nhận đầu vào từ phía bên cạnh. @@ -2032,7 +2032,7 @@ block.naval-factory.description = Sản xuất binh lính hải quân. Các đơ block.additive-reconstructor.description = Nâng cấp quân của bạn lên cấp hai. block.multiplicative-reconstructor.description = Nâng cấp quân của bạn lên cấp ba. block.exponential-reconstructor.description = Nâng cấp quân của bạn lên cấp bốn. -block.tetrative-reconstructor.description = Nâng cấp quân của bạn nên cấp năm (cuối cùng). +block.tetrative-reconstructor.description = Nâng cấp quân của bạn lên cấp năm (cuối cùng). block.switch.description = Công tắc, trạng thái có thể được đọc và điều khiển với vi xử lý logic. block.micro-processor.description = Chạy tập hợp các chỉ dẫn trong một vòng lặp, có thể dùng để điều khiển robot và công trình. block.logic-processor.description = Chạy tập hợp các chỉ dẫn trong một vòng lặp, có thể dùng để điều khiển robot và công trình. Nhanh hơn bộ xử lý nhỏ. @@ -2231,10 +2231,10 @@ lst.cutscene = Điều khiển góc máy quay của người chơi. lst.setflag = Đặt một cờ toàn cục mà có thể đọc được bởi tất cả khối xử lý. lst.getflag = Kiểm tra nếu cờ toàn cục được đặt. lst.setprop = Đặt một thuộc tính của đơn vị hoặc công trình. -lst.effect = Create a particle effect. -lst.sync = Sync a variable across the network.\nOnly invoked 10 times a second at most. +lst.effect = Tạo một phần hiệu ứng nhỏ. +lst.sync = Đồng bộ giá trị biến qua mạng.\nChỉ gọi tối đa 10 lần mỗi giây. -logic.nounitbuild = [red]Unit building logic is not allowed here. +logic.nounitbuild = [red]Lô-gíc xây dựng đơn vị không được phép ở đây. lenum.type = Kiểu của công trình/đơn vị.\n Ví dụ, cho Bộ phân phát (router), nó sẽ trả về [accent]@router[].\nKhông phải một chuỗi. lenum.shoot = Bắn vào vị trí xác định. @@ -2248,7 +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. +laccess.id = Định danh của một đơn vị/khối/vật phẩm/chất lỏng.\nViệc này làm ngược lại với thao tác tra cứu. 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 @@ -2369,7 +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.autopathfind = Tự động tìm đường đến lõi hoặc nơi hạ cánh gần nhất của kẻ địch.\n Việc này tương tự như việc tìm đường của kẻ địch trong các lượt. 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. @@ -2383,5 +2383,5 @@ lenum.build = Xây công trình. lenum.getblock = Lấy một cấu trúc và kiểu tại một tọa độ.\nĐơn vị phải nằm trong tầm của vị trí.\nKhối rắn không phải công trình có kiểu [accent]@solid[]. lenum.within = Kiểm tra xem đơn vị có gần vị trí không. lenum.boost = Bắt đầu/Dừng tăng tốc. -onset.commandmode = Giữ [accent]shift[] để vào [accent]chế độ điều khiển quân[].\n[accent]Nhấp chuột trái và kéo[] để chọn các đơn vị.\n[accent]Chuộc phải[] để điều khiển các đơn vị di chuyển hoặc tấn công. +onset.commandmode = Giữ [accent]Shift[] để vào [accent]chế độ điều khiển quân[].\n[accent]Nhấp chuột trái và kéo[] để chọn các đơn vị.\n[accent]Chuộc phải[] để điều khiển các đơn vị di chuyển hoặc tấn công. onset.commandmode.mobile = Nhấn vào [accent]nút điều khiển[] để vào [accent]chế độ điều khiển quân[].\nGiữ một ngón tay, sau đó [accent]kéo[] để chọn các đơn vị.\n[accent]Nhấp[] để điều khiển các đơn vị di chuyển hoặc tấn công. diff --git a/core/src/mindustry/world/blocks/environment/TreeBlock.java b/core/src/mindustry/world/blocks/environment/TreeBlock.java index 9bc7cc1732..f05348884b 100644 --- a/core/src/mindustry/world/blocks/environment/TreeBlock.java +++ b/core/src/mindustry/world/blocks/environment/TreeBlock.java @@ -8,13 +8,14 @@ import mindustry.graphics.*; import mindustry.world.*; public class TreeBlock extends Block{ - public @Load("@-shadow") TextureRegion shadow; public float shadowOffset = -4f; + public @Load("@-shadow") TextureRegion shadow; public TreeBlock(String name){ super(name); solid = true; clipSize = 90; + customShadow = true; } @Override @@ -26,15 +27,22 @@ public class TreeBlock extends Block{ w = region.width * region.scl(), h = region.height * region.scl(), scl = 30f, mag = 0.2f; - if(shadow.found()){ + TextureRegion shad = variants == 0 ? customShadowRegion : variantShadowRegions[Mathf.randomSeed(tile.pos(), 0, Math.max(0, variantShadowRegions.length - 1))]; + + if(shad.found()){ Draw.z(Layer.power - 1); - Draw.rect(shadow, tile.worldx() + shadowOffset, tile.worldy() + shadowOffset, rot); + Draw.rect(shad, tile.worldx() + shadowOffset, tile.worldy() + shadowOffset, rot); } + TextureRegion reg = variants == 0 ? region : variantRegions[Mathf.randomSeed(tile.pos(), 0, Math.max(0, variantRegions.length - 1))]; + Draw.z(Layer.power + 1); - Draw.rectv(region, x, y, w, h, rot, vec -> vec.add( + Draw.rectv(reg, x, y, w, h, rot, vec -> vec.add( Mathf.sin(vec.y*3 + Time.time, scl, mag) + Mathf.sin(vec.x*3 - Time.time, 70, 0.8f), Mathf.cos(vec.x*3 + Time.time + 8, scl + 6f, mag * 1.1f) + Mathf.sin(vec.y*3 - Time.time, 50, 0.2f) )); } + + @Override + public void drawShadow(Tile tile){} } diff --git a/servers_v7.json b/servers_v7.json index 8de4b50dac..5d739c3bdf 100644 --- a/servers_v7.json +++ b/servers_v7.json @@ -101,7 +101,7 @@ }, { "name": "The Devil", - "address": ["xem8k5.mindustry.top:8169", "test.xem8k5.top:8920", "other.xem8k5.top:10936", "n2.akiracloud.net:10404"] + "address": ["xem8k5.mindustry.top:8169", "test.xem8k5.top:8920", "other.xem8k5.top:10936", "n2.akiracloud.net:10404", "new.xem8k5.top"] }, { "name": "Eradication Mindustry", @@ -169,7 +169,7 @@ }, { "name": "Realm of Serene Lime", - "address": ["43.248.185.167:8517","n2.akiracloud.net:10686"] + "address": ["43.248.185.167:8517","n2.akiracloud.net:10686","n2.akiracloud.net:10486"] }, { "name": "CreateDustry", @@ -215,5 +215,9 @@ { "name": "Extra Utilities", "address": ["222.186.59.147:8888", "222.186.59.147:8889"] + }, + { + "name": "Alex Multiverse", + "address": ["alexmindustryv7.servegame.com:25588", "alexmindustryv7.servegame.com:41962", "alexmindustrypvp.ddns.net:6767", "alexmindustrypvp.ddns.net:6768"] } ]