Core fill items rule
This commit is contained in:
@@ -1405,6 +1405,7 @@ mode.custom = Custom Rules
|
|||||||
rules.invaliddata = Invalid clipboard data.
|
rules.invaliddata = Invalid clipboard data.
|
||||||
rules.hidebannedblocks = Hide Banned Blocks
|
rules.hidebannedblocks = Hide Banned Blocks
|
||||||
rules.infiniteresources = Infinite Resources
|
rules.infiniteresources = Infinite Resources
|
||||||
|
rules.fillitems = Fill Core With Items
|
||||||
rules.onlydepositcore = Only Allow Core Depositing
|
rules.onlydepositcore = Only Allow Core Depositing
|
||||||
rules.derelictrepair = Allow Derelict Block Repair
|
rules.derelictrepair = Allow Derelict Block Repair
|
||||||
rules.reactorexplosions = Reactor Explosions
|
rules.reactorexplosions = Reactor Explosions
|
||||||
|
|||||||
@@ -1429,7 +1429,7 @@ public class ControlPathfinder implements Runnable{
|
|||||||
|
|
||||||
private static boolean nearPassable(int initialCost, int team, PathCost cost, int pos){
|
private static boolean nearPassable(int initialCost, int team, PathCost cost, int pos){
|
||||||
int amount = cost.getCost(team, pathfinder.tiles[pos]);
|
int amount = cost.getCost(team, pathfinder.tiles[pos]);
|
||||||
return amount != impassable && amount < Math.max(50, initialCost + 1);
|
return amount != impassable && amount < Math.min(Math.max(50, initialCost + 1), solidCap);
|
||||||
}
|
}
|
||||||
|
|
||||||
private static boolean solid(int team, PathCost type, int x, int y){
|
private static boolean solid(int team, PathCost type, int x, int y){
|
||||||
|
|||||||
@@ -3,6 +3,7 @@ package mindustry.core;
|
|||||||
import arc.*;
|
import arc.*;
|
||||||
import arc.math.*;
|
import arc.math.*;
|
||||||
import arc.util.*;
|
import arc.util.*;
|
||||||
|
import mindustry.*;
|
||||||
import mindustry.ai.*;
|
import mindustry.ai.*;
|
||||||
import mindustry.annotations.Annotations.*;
|
import mindustry.annotations.Annotations.*;
|
||||||
import mindustry.core.GameState.*;
|
import mindustry.core.GameState.*;
|
||||||
@@ -133,6 +134,7 @@ public class Logic implements ApplicationListener{
|
|||||||
state.rules.coreIncinerates = true;
|
state.rules.coreIncinerates = true;
|
||||||
state.rules.allowEditWorldProcessors = false;
|
state.rules.allowEditWorldProcessors = false;
|
||||||
state.rules.waveTeam.rules().infiniteResources = true;
|
state.rules.waveTeam.rules().infiniteResources = true;
|
||||||
|
state.rules.waveTeam.rules().fillItems = true;
|
||||||
state.rules.waveTeam.rules().buildSpeedMultiplier *= state.getPlanet().enemyBuildSpeedMultiplier;
|
state.rules.waveTeam.rules().buildSpeedMultiplier *= state.getPlanet().enemyBuildSpeedMultiplier;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -438,12 +440,6 @@ public class Logic implements ApplicationListener{
|
|||||||
}
|
}
|
||||||
|
|
||||||
if(state.isCampaign()){
|
if(state.isCampaign()){
|
||||||
//always fill enemy core with items
|
|
||||||
if(state.rules.waveTeam.cores().size > 0){
|
|
||||||
var core = state.rules.waveTeam.core();
|
|
||||||
content.items().each(i -> core.items.set(i, core.getMaximumAccepted(i)));
|
|
||||||
}
|
|
||||||
|
|
||||||
state.rules.sector.info.update();
|
state.rules.sector.info.update();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -459,6 +455,14 @@ public class Logic implements ApplicationListener{
|
|||||||
updateWeather();
|
updateWeather();
|
||||||
|
|
||||||
for(TeamData data : state.teams.getActive()){
|
for(TeamData data : state.teams.getActive()){
|
||||||
|
if(data.team.rules().fillItems && data.cores.size > 0){
|
||||||
|
var core = data.cores.first();
|
||||||
|
content.items().each(i -> {
|
||||||
|
if(i.isOnPlanet(Vars.state.getPlanet())){
|
||||||
|
core.items.set(i, core.getMaximumAccepted(i));
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
//does not work on PvP so built-in attack maps can have it on by default without issues
|
//does not work on PvP so built-in attack maps can have it on by default without issues
|
||||||
if(data.team.rules().buildAi && !state.rules.pvp){
|
if(data.team.rules().buildAi && !state.rules.pvp){
|
||||||
if(data.buildAi == null) data.buildAi = new BaseBuilderAI(data);
|
if(data.buildAi == null) data.buildAi = new BaseBuilderAI(data);
|
||||||
|
|||||||
@@ -299,6 +299,8 @@ public class Rules{
|
|||||||
public boolean aiCoreSpawn = true;
|
public boolean aiCoreSpawn = true;
|
||||||
/** If true, blocks don't require power or resources. */
|
/** If true, blocks don't require power or resources. */
|
||||||
public boolean cheat;
|
public boolean cheat;
|
||||||
|
/** If true, the core is always filled to capacity with all items. */
|
||||||
|
public boolean fillItems;
|
||||||
/** If true, resources are not consumed when building. */
|
/** If true, resources are not consumed when building. */
|
||||||
public boolean infiniteResources;
|
public boolean infiniteResources;
|
||||||
/** If true, this team has infinite unit ammo. */
|
/** If true, this team has infinite unit ammo. */
|
||||||
|
|||||||
@@ -313,6 +313,7 @@ public class CustomRulesDialog extends BaseDialog{
|
|||||||
number("@rules.extracorebuildradius", f -> teams.extraCoreBuildRadius = f * tilesize, () -> Math.min(teams.extraCoreBuildRadius / tilesize, 200), () -> !rules.polygonCoreProtection);
|
number("@rules.extracorebuildradius", f -> teams.extraCoreBuildRadius = f * tilesize, () -> Math.min(teams.extraCoreBuildRadius / tilesize, 200), () -> !rules.polygonCoreProtection);
|
||||||
|
|
||||||
check("@rules.infiniteresources", b -> teams.infiniteResources = b, () -> teams.infiniteResources);
|
check("@rules.infiniteresources", b -> teams.infiniteResources = b, () -> teams.infiniteResources);
|
||||||
|
check("@rules.fillitems", b -> teams.fillItems = b, () -> teams.fillItems);
|
||||||
number("@rules.buildspeedmultiplier", f -> teams.buildSpeedMultiplier = f, () -> teams.buildSpeedMultiplier, 0.001f, 50f);
|
number("@rules.buildspeedmultiplier", f -> teams.buildSpeedMultiplier = f, () -> teams.buildSpeedMultiplier, 0.001f, 50f);
|
||||||
|
|
||||||
number("@rules.unitdamagemultiplier", f -> teams.unitDamageMultiplier = f, () -> teams.unitDamageMultiplier);
|
number("@rules.unitdamagemultiplier", f -> teams.unitDamageMultiplier = f, () -> teams.unitDamageMultiplier);
|
||||||
|
|||||||
Reference in New Issue
Block a user