From 075be1a8623151808bffbf529148cd14e8901a13 Mon Sep 17 00:00:00 2001 From: Anuken Date: Mon, 23 Nov 2020 09:12:36 -0500 Subject: [PATCH] Fixed #3540 / Fixed #3544 / Fixed #3542 --- core/src/mindustry/content/TechTree.java | 6 +++++- core/src/mindustry/entities/comp/BuilderComp.java | 2 +- core/src/mindustry/type/ItemStack.java | 5 +++-- core/src/mindustry/type/Planet.java | 4 ++-- core/src/mindustry/type/Sector.java | 4 +++- core/src/mindustry/ui/dialogs/ResearchDialog.java | 4 ++-- core/src/mindustry/world/blocks/campaign/LaunchPad.java | 8 +++++--- .../src/mindustry/world/blocks/distribution/Junction.java | 2 +- core/src/mindustry/world/blocks/storage/CoreBlock.java | 4 ++-- desktop/src/mindustry/desktop/steam/SStats.java | 2 +- 10 files changed, 25 insertions(+), 16 deletions(-) diff --git a/core/src/mindustry/content/TechTree.java b/core/src/mindustry/content/TechTree.java index 59a89d427e..d216a665e1 100644 --- a/core/src/mindustry/content/TechTree.java +++ b/core/src/mindustry/content/TechTree.java @@ -551,7 +551,9 @@ public class TechTree implements ContentList{ node(nuclearComplex, Seq.with( new SectorComplete(fungalPass), new Research(thermalGenerator), - new Research(laserDrill) + new Research(laserDrill), + new Research(Items.plastanium), + new Research(swarmer) ), () -> { }); @@ -613,7 +615,9 @@ public class TechTree implements ContentList{ }); nodeProduce(Liquids.oil, () -> { + nodeProduce(Items.plastanium, () -> { + }); }); }); }); diff --git a/core/src/mindustry/entities/comp/BuilderComp.java b/core/src/mindustry/entities/comp/BuilderComp.java index 12fd9e8029..a1e218c05a 100644 --- a/core/src/mindustry/entities/comp/BuilderComp.java +++ b/core/src/mindustry/entities/comp/BuilderComp.java @@ -139,7 +139,7 @@ abstract class BuilderComp implements Posc, Teamc, Rotc{ boolean shouldSkip(BuildPlan request, @Nullable Building core){ //requests that you have at least *started* are considered if(state.rules.infiniteResources || team().rules().infiniteResources || request.breaking || core == null) return false; - return (request.stuck && !core.items.has(request.block.requirements)) || (Structs.contains(request.block.requirements, i -> !core.items.has(i.item)) && !request.initialized); + return (request.stuck && !core.items.has(request.block.requirements)) || (Structs.contains(request.block.requirements, i -> !core.items.has(i.item) && Mathf.round(i.amount * state.rules.buildCostMultiplier) > 0) && !request.initialized); } void removeBuild(int x, int y, boolean breaking){ diff --git a/core/src/mindustry/type/ItemStack.java b/core/src/mindustry/type/ItemStack.java index e2e0d2d5f4..26cffe97b4 100644 --- a/core/src/mindustry/type/ItemStack.java +++ b/core/src/mindustry/type/ItemStack.java @@ -1,5 +1,6 @@ package mindustry.type; +import arc.math.*; import arc.struct.*; import mindustry.content.*; @@ -35,10 +36,10 @@ public class ItemStack implements Comparable{ return other != null && other.item == item && other.amount == amount; } - public static ItemStack[] mult(ItemStack[] stacks, int amount){ + public static ItemStack[] mult(ItemStack[] stacks, float amount){ ItemStack[] copy = new ItemStack[stacks.length]; for(int i = 0; i < copy.length; i++){ - copy[i] = new ItemStack(stacks[i].item, stacks[i].amount * amount); + copy[i] = new ItemStack(stacks[i].item, Mathf.round(stacks[i].amount * amount)); } return copy; } diff --git a/core/src/mindustry/type/Planet.java b/core/src/mindustry/type/Planet.java index b1cb5f8a26..0f872b393d 100644 --- a/core/src/mindustry/type/Planet.java +++ b/core/src/mindustry/type/Planet.java @@ -187,10 +187,10 @@ public class Planet extends UnlockableContent{ } if(sector.hasEnemyBase()){ - sum += 2.5f; + sum += 1.9f; } - sector.threat = sector.preset == null ? Math.min(sum / 5f, 1.5f) : Mathf.clamp(sector.preset.difficulty / 10f); + sector.threat = sector.preset == null ? Math.min(sum / 5f, 1.2f) : Mathf.clamp(sector.preset.difficulty / 10f); } } diff --git a/core/src/mindustry/type/Sector.java b/core/src/mindustry/type/Sector.java index e923468c30..b107e3cb95 100644 --- a/core/src/mindustry/type/Sector.java +++ b/core/src/mindustry/type/Sector.java @@ -108,7 +108,7 @@ public class Sector{ public boolean isBeingPlayed(){ //after the launch dialog, a sector is no longer considered being played - return Vars.state.isGame() && Vars.state.rules.sector == this && !Vars.state.gameOver; + return Vars.state.isGame() && Vars.state.rules.sector == this && !Vars.state.gameOver && !net.client(); } public String name(){ @@ -169,6 +169,8 @@ public class Sector{ } public void addItems(ItemSeq items){ + if(net.client()) return; + if(isBeingPlayed()){ if(state.rules.defaultTeam.core() != null){ ItemModule storage = state.rules.defaultTeam.items(); diff --git a/core/src/mindustry/ui/dialogs/ResearchDialog.java b/core/src/mindustry/ui/dialogs/ResearchDialog.java index adbf831565..bb609cb167 100644 --- a/core/src/mindustry/ui/dialogs/ResearchDialog.java +++ b/core/src/mindustry/ui/dialogs/ResearchDialog.java @@ -64,8 +64,8 @@ public class ResearchDialog extends BaseDialog{ ItemSeq cached = sector.items(); cache.put(sector, cached); cached.each((item, amount) -> { - values[item.id] += amount; - total += amount; + values[item.id] += Math.max(amount, 0); + total += Math.max(amount, 0); }); } } diff --git a/core/src/mindustry/world/blocks/campaign/LaunchPad.java b/core/src/mindustry/world/blocks/campaign/LaunchPad.java index 249a9ae25d..aa259efea6 100644 --- a/core/src/mindustry/world/blocks/campaign/LaunchPad.java +++ b/core/src/mindustry/world/blocks/campaign/LaunchPad.java @@ -58,7 +58,7 @@ public class LaunchPad extends Block{ @Override public Cursor getCursor(){ - return !state.isCampaign() ? SystemCursor.arrow : super.getCursor(); + return !state.isCampaign() || net.client() ? SystemCursor.arrow : super.getCursor(); } @Override @@ -136,7 +136,7 @@ public class LaunchPad extends Block{ @Override public void buildConfiguration(Table table){ - if(!state.isCampaign()){ + if(!state.isCampaign() || net.client()){ deselect(); return; } @@ -234,7 +234,9 @@ public class LaunchPad extends Block{ Events.fire(new LaunchItemEvent(stack)); } - destsec.addItems(dest); + if(!net.client()){ + destsec.addItems(dest); + } } } } diff --git a/core/src/mindustry/world/blocks/distribution/Junction.java b/core/src/mindustry/world/blocks/distribution/Junction.java index 8f6fe81b10..4f8b3a9869 100644 --- a/core/src/mindustry/world/blocks/distribution/Junction.java +++ b/core/src/mindustry/world/blocks/distribution/Junction.java @@ -50,7 +50,7 @@ public class Junction extends Block{ Building dest = nearby(i); //skip blocks that don't want the item, keep waiting until they do - if(dest == null || !dest.acceptItem(this, item) || dest.team != team){ + if(item == null || dest == null || !dest.acceptItem(this, item) || dest.team != team){ continue; } diff --git a/core/src/mindustry/world/blocks/storage/CoreBlock.java b/core/src/mindustry/world/blocks/storage/CoreBlock.java index 094260d968..bc706ff73d 100644 --- a/core/src/mindustry/world/blocks/storage/CoreBlock.java +++ b/core/src/mindustry/world/blocks/storage/CoreBlock.java @@ -144,7 +144,7 @@ public class CoreBlock extends StorageBlock{ //right before placing, create a "destination" item array which is all the previous items minus core requirements ItemModule items = tile.build.items.copy(); if(!state.rules.infiniteResources){ - items.remove(requirements); + items.remove(ItemStack.mult(requirements, state.rules.buildCostMultiplier)); } nextItems = items; @@ -157,7 +157,7 @@ public class CoreBlock extends StorageBlock{ if(!canPlaceOn(world.tile(x, y), player.team())){ - drawPlaceText(Core.bundle.get((player.team().core() != null && player.team().core().items.has(requirements)) || state.rules.infiniteResources ? + drawPlaceText(Core.bundle.get((player.team().core() != null && player.team().core().items.has(requirements, state.rules.buildCostMultiplier)) || state.rules.infiniteResources ? "bar.corereq" : "bar.noresources" ), x, y, valid); diff --git a/desktop/src/mindustry/desktop/steam/SStats.java b/desktop/src/mindustry/desktop/steam/SStats.java index d5f7eb88d5..e9e8258487 100644 --- a/desktop/src/mindustry/desktop/steam/SStats.java +++ b/desktop/src/mindustry/desktop/steam/SStats.java @@ -317,7 +317,7 @@ public class SStats implements SteamUserStatsCallback{ SStat.attacksWon.add(); } - if(!e.sector.isBeingPlayed()){ + if(!e.sector.isBeingPlayed() && !net.client()){ captureBackground.complete(); }