Skip to content
Merged

Dev #38

Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion mod.hjson
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,6 @@ author: '''
Port: 00SunRay00 & RE2b2m22
'''
minGameVersion: 157
version: 2.0.6
version: 2.1.0
hidden: true
main: scheme.Main
4 changes: 4 additions & 0 deletions src/java/scheme/tools/admins/AdminsTools.java
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,10 @@ public interface AdminsTools {

void manageRuleStr(String value, String name);

void manageTeamRuleBool(int teamId, boolean value, String name);

void manageTeamRuleStr(int teamId, String value, String name);

void manageUnit();

void spawnUnits();
Expand Down
38 changes: 37 additions & 1 deletion src/java/scheme/tools/admins/Internal.java
Original file line number Diff line number Diff line change
Expand Up @@ -43,14 +43,50 @@ public void manageRuleStr(String value, String name) {
if (unusable()) return;
try {
Field fiel = Rules.class.getField(name);
fiel.set(Vars.state.rules, value);
setFieldValue(fiel, Vars.state.rules, value);
Call.setRules(Vars.state.rules);
} catch (Exception e) {
e.printStackTrace();
}
}

public void manageTeamRuleBool(int teamId, boolean value, String name) {
if (unusable()) return;
try {
Team team = Team.all[teamId];
Rules.TeamRule tr = Vars.state.rules.teams.get(team);
Field fiel = Rules.TeamRule.class.getField(name);
fiel.setBoolean(tr, value);
Call.setRules(Vars.state.rules);
} catch (Exception e) {
e.printStackTrace();
}
}

public void manageTeamRuleStr(int teamId, String value, String name) {
if (unusable()) return;
try {
Team team = Team.all[teamId];
Rules.TeamRule tr = Vars.state.rules.teams.get(team);
Field fiel = Rules.TeamRule.class.getField(name);
setFieldValue(fiel, tr, value);
Call.setRules(Vars.state.rules);
} catch (Exception e) {
e.printStackTrace();
}
}

private void setFieldValue(Field fiel, Object target, String value) throws Exception {
Class<?> type = fiel.getType();
if (type == float.class) {
fiel.setFloat(target, Float.parseFloat(value));
} else if (type == int.class) {
fiel.setInt(target, Integer.parseInt(value));
} else {
fiel.set(target, value);
}
}

public void manageUnit() {
if (unusable()) return;
unit.select(false, true, false, (target, team, unit, amount) -> {
Expand Down
6 changes: 6 additions & 0 deletions src/java/scheme/tools/admins/Mindurka.java
Original file line number Diff line number Diff line change
Expand Up @@ -56,6 +56,12 @@ public void manageRuleStr(String value, String name) {
send("setrule", name, '"'+actualValue.toString()+'"');
}

public void manageTeamRuleBool(int teamId, boolean value, String name) {
}

public void manageTeamRuleStr(int teamId, String value, String name) {
}

public void manageUnit() {
if (unusable()) return;
unit.select(false, true, false, (target, team, unit, amount) -> {
Expand Down
10 changes: 10 additions & 0 deletions src/java/scheme/tools/admins/SlashJs.java
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,16 @@ public void manageRuleStr(String value, String name) {
send("Vars.state.rules." + name + " = " + value + "; Call.setRules(Vars.state.rules);");
}

public void manageTeamRuleBool(int teamId, boolean value, String name) {
if (unusable()) return;
send("var tr = Vars.state.rules.teams.get(Team.all[" + teamId + "], () => new Rules.TeamRule()); tr." + name + " = " + value + "; Call.setRules(Vars.state.rules);");
}

public void manageTeamRuleStr(int teamId, String value, String name) {
if (unusable()) return;
send("var tr = Vars.state.rules.teams.get(Team.all[" + teamId + "], () => new Rules.TeamRule()); tr." + name + " = " + value + "; Call.setRules(Vars.state.rules);");
}

public void manageUnit() {
if (unusable()) return;
unit.select(false, true, false, (target, team, unit, amount) -> {
Expand Down
109 changes: 72 additions & 37 deletions src/java/scheme/ui/dialogs/RuleSetterDialog.java
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package scheme.ui.dialogs;

import arc.scene.event.FocusListener;
import arc.scene.style.TextureRegionDrawable;
import arc.scene.ui.*;
import arc.scene.ui.layout.Cell;
Expand All @@ -19,6 +20,8 @@

import static arc.Core.*;
import static mindustry.Vars.*;
import scheme.tools.admins.Mindurka;

import static scheme.SchemeVars.admins;

public class RuleSetterDialog extends BaseDialog {
Expand Down Expand Up @@ -114,18 +117,25 @@ private void buildEnvironment(Table t, Rules rules) {
}

private void buildTeams(Table t, Rules rules) {
if (admins instanceof Mindurka) return;
t.table(row -> {
row.left();
row.add("Team ID (0-255):").left().padRight(5);
row.field(customTeamId >= 0 ? String.valueOf(customTeamId) : "", s -> {
int id = Strings.parseInt(s, -1);
customTeamId = (id >= 0 && id <= 255) ? id : -1;
rebuild();
}).width(80f).valid(s -> {
TextField teamField = row.field(customTeamId >= 0 ? String.valueOf(customTeamId) : "", s -> {}).width(80f).valid(s -> {
if (s.isEmpty()) return true;
int v = Strings.parseInt(s, -1);
return v >= 0 && v <= 255;
}).left();
}).left().get();
teamField.addListener(new FocusListener() {
@Override
public void keyboardFocusChanged(FocusListener.FocusEvent event, arc.scene.Element element, boolean focused) {
if (!focused) {
int id = Strings.parseInt(teamField.getText(), -1);
customTeamId = (id >= 0 && id <= 255) ? id : -1;
rebuild();
}
}
});
}).pad(6).left().fillX();
t.row();

Expand All @@ -150,26 +160,27 @@ private void buildTeams(Table t, Rules rules) {
}

private void buildTeamSection(Table t, Team team, Rules.TeamRule tr, Rules rules) {
check(t, "rules.infiniteammo", tr.infiniteAmmo, v -> { tr.infiniteAmmo = v; syncRules(); });
check(t, "rules.cheat", tr.cheat, v -> { tr.cheat = v; syncRules(); });
check(t, "rules.fillitems", tr.fillItems, v -> { tr.fillItems = v; syncRules(); });
check(t, "rules.infiniteresources", tr.infiniteResources, v -> { tr.infiniteResources = v; syncRules(); });
check(t, "rules.rtsai", tr.rtsAi, v -> { tr.rtsAi = v; syncRules(); }).disabled(team == rules.defaultTeam);
integer(t, "rules.rtsminsquadsize", tr.rtsMinSquad, v -> { tr.rtsMinSquad = v; syncRules(); }).disabled(team == rules.defaultTeam || !tr.rtsAi);
integer(t, "rules.rtsmaxsquadsize", tr.rtsMaxSquad, v -> { tr.rtsMaxSquad = v; syncRules(); }).disabled(team == rules.defaultTeam || !tr.rtsAi);
number(t, "rules.rtsminattackweight", tr.rtsMinWeight, v -> { tr.rtsMinWeight = v; syncRules(); }).disabled(team == rules.defaultTeam || !tr.rtsAi);
check(t, "rules.buildai", tr.buildAi, v -> { tr.buildAi = v; syncRules(); });
number(t, "rules.buildaitier", tr.buildAiTier, v -> { tr.buildAiTier = v; syncRules(); }).disabled(!tr.buildAi);
number(t, "rules.blockhealthmultiplier", tr.blockHealthMultiplier, v -> { tr.blockHealthMultiplier = v; syncRules(); });
number(t, "rules.blockdamagemultiplier", tr.blockDamageMultiplier, v -> { tr.blockDamageMultiplier = v; syncRules(); });
number(t, "rules.buildspeedmultiplier", tr.buildSpeedMultiplier, v -> { tr.buildSpeedMultiplier = v; syncRules(); });
number(t, "rules.unitdamagemultiplier", tr.unitDamageMultiplier, v -> { tr.unitDamageMultiplier = v; syncRules(); });
number(t, "rules.unitcrashdamagemultiplier", tr.unitCrashDamageMultiplier, v -> { tr.unitCrashDamageMultiplier = v; syncRules(); });
number(t, "rules.unithealthmultiplier", tr.unitHealthMultiplier, v -> { tr.unitHealthMultiplier = v; syncRules(); });
number(t, "rules.unitbuildspeedmultiplier", tr.unitBuildSpeedMultiplier, v -> { tr.unitBuildSpeedMultiplier = v; syncRules(); });
number(t, "rules.unitcostmultiplier", tr.unitCostMultiplier, v -> { tr.unitCostMultiplier = v; syncRules(); });
number(t, "rules.unitminespeedmultiplier", tr.unitMineSpeedMultiplier, v -> { tr.unitMineSpeedMultiplier = v; syncRules(); });
number(t, "rules.extracorebuildradius", tr.extraCoreBuildRadius / tilesize, v -> { tr.extraCoreBuildRadius = v * tilesize; syncRules(); }).disabled(!rules.polygonCoreProtection);
int tid = team.id;
check(t, "rules.infiniteammo", tr.infiniteAmmo, v -> applyTeam(tid, "infiniteAmmo", v));
check(t, "rules.cheat", tr.cheat, v -> applyTeam(tid, "cheat", v));
check(t, "rules.fillitems", tr.fillItems, v -> applyTeam(tid, "fillItems", v));
check(t, "rules.infiniteresources", tr.infiniteResources, v -> applyTeam(tid, "infiniteResources", v));
check(t, "rules.rtsai", tr.rtsAi, v -> { applyTeam(tid, "rtsAi", v); rebuild(); }).disabled(team == rules.defaultTeam);
integer(t, "rules.rtsminsquadsize", tr.rtsMinSquad, v -> applyTeamInt(tid, "rtsMinSquad", v)).disabled(team == rules.defaultTeam || !tr.rtsAi);
integer(t, "rules.rtsmaxsquadsize", tr.rtsMaxSquad, v -> applyTeamInt(tid, "rtsMaxSquad", v)).disabled(team == rules.defaultTeam || !tr.rtsAi);
number(t, "rules.rtsminattackweight", tr.rtsMinWeight, v -> applyTeamFloat(tid, "rtsMinWeight", v)).disabled(team == rules.defaultTeam || !tr.rtsAi);
check(t, "rules.buildai", tr.buildAi, v -> { applyTeam(tid, "buildAi", v); rebuild(); });
number(t, "rules.buildaitier", tr.buildAiTier, v -> applyTeamFloat(tid, "buildAiTier", v)).disabled(!tr.buildAi);
number(t, "rules.blockhealthmultiplier", tr.blockHealthMultiplier, v -> applyTeamFloat(tid, "blockHealthMultiplier", v));
number(t, "rules.blockdamagemultiplier", tr.blockDamageMultiplier, v -> applyTeamFloat(tid, "blockDamageMultiplier", v));
number(t, "rules.buildspeedmultiplier", tr.buildSpeedMultiplier, v -> applyTeamFloat(tid, "buildSpeedMultiplier", v));
number(t, "rules.unitdamagemultiplier", tr.unitDamageMultiplier, v -> applyTeamFloat(tid, "unitDamageMultiplier", v));
number(t, "rules.unitcrashdamagemultiplier", tr.unitCrashDamageMultiplier, v -> applyTeamFloat(tid, "unitCrashDamageMultiplier", v));
number(t, "rules.unithealthmultiplier", tr.unitHealthMultiplier, v -> applyTeamFloat(tid, "unitHealthMultiplier", v));
number(t, "rules.unitbuildspeedmultiplier", tr.unitBuildSpeedMultiplier, v -> applyTeamFloat(tid, "unitBuildSpeedMultiplier", v));
number(t, "rules.unitcostmultiplier", tr.unitCostMultiplier, v -> applyTeamFloat(tid, "unitCostMultiplier", v));
number(t, "rules.unitminespeedmultiplier", tr.unitMineSpeedMultiplier, v -> applyTeamFloat(tid, "unitMineSpeedMultiplier", v));
number(t, "rules.extracorebuildradius", tr.extraCoreBuildRadius / tilesize, v -> applyTeamFloat(tid, "extraCoreBuildRadius", v * tilesize)).disabled(!rules.polygonCoreProtection);
}

private void buildAdvanced(Table t, Rules rules) {
Expand All @@ -187,6 +198,9 @@ private void buildAdvanced(Table t, Rules rules) {
public RuleSetterDialog() {
super("Rule Setter");
addCloseButton();
hidden(() -> {
if (scene.getKeyboardFocus() != null) scene.setKeyboardFocus(null);
});
}

@Override
Expand Down Expand Up @@ -254,7 +268,6 @@ private FieldCell check(Table t, String key, boolean value, arc.func.Boolc onCha
String label = bundle.has(key) ? bundle.get(key) : key;
Cell<CheckBox> cell = t.check(label, value, val -> {
onChange.get(val);
rebuild();
}).pad(6).left();
t.row();
return new FieldCell(cell);
Expand All @@ -267,10 +280,16 @@ private FieldCell number(Table t, String key, float value, arc.func.Floatc onCha
Cell<Table> cell = t.table(row -> {
row.left();
row.add(label).left().padRight(5);
row.field(Strings.autoFixed(value, 2), s -> {
float f = Strings.parseFloat(s, value);
onChange.get(f);
}).width(120f).valid(Strings::canParseFloat).left();
TextField field = row.field(Strings.autoFixed(value, 2), s -> {}).width(120f).valid(Strings::canParseFloat).left().get();
field.addListener(new FocusListener() {
@Override
public void keyboardFocusChanged(FocusListener.FocusEvent event, arc.scene.Element element, boolean focused) {
if (!focused && field.isValid()) {
float f = Strings.parseFloat(field.getText(), value);
onChange.get(f);
}
}
});
}).pad(6).left().fillX();
t.row();
return new FieldCell(cell);
Expand All @@ -283,10 +302,16 @@ private FieldCell integer(Table t, String key, int value, arc.func.Intc onChange
Cell<Table> cell = t.table(row -> {
row.left();
row.add(label).left().padRight(5);
row.field(String.valueOf(value), s -> {
int i = Strings.parseInt(s, value);
onChange.get(i);
}).width(120f).valid(Strings::canParseInt).left();
TextField field = row.field(String.valueOf(value), s -> {}).width(120f).valid(Strings::canParseInt).left().get();
field.addListener(new FocusListener() {
@Override
public void keyboardFocusChanged(FocusListener.FocusEvent event, arc.scene.Element element, boolean focused) {
if (!focused && field.isValid()) {
int i = Strings.parseInt(field.getText(), value);
onChange.get(i);
}
}
});
}).pad(6).left().fillX();
t.row();
return new FieldCell(cell);
Expand Down Expand Up @@ -327,18 +352,28 @@ private void apply(String field, boolean value) {

private void applyFloat(String field, float value) {
admins.manageRuleStr(String.valueOf(value), field);
rebuild();
}

private void applyInt(String field, int value) {
admins.manageRuleStr(String.valueOf(value), field);
}

private void applyTeam(int teamId, String field, boolean value) {
admins.manageTeamRuleBool(teamId, value, field);
rebuild();
}

private void applyTeamFloat(int teamId, String field, float value) {
admins.manageTeamRuleStr(teamId, String.valueOf(value), field);
}

private void applyTeamInt(int teamId, String field, int value) {
admins.manageTeamRuleStr(teamId, String.valueOf(value), field);
}

private void syncRules() {
try {
Call.setRules(Vars.state.rules);
rebuild();
} catch (Exception ignored) {}
}

Expand Down
Loading