Add even more Advancements

This commit is contained in:
2026-05-31 22:31:02 +02:00
parent 8fa9f7b0d3
commit 847eb3fe5d
2 changed files with 30 additions and 56 deletions
@@ -148,19 +148,19 @@ class EventFight(id: EntityID<Int>) : IntEntity(id), Comparable<EventFight> {
}
@JvmStatic
fun getHighestPlacement(fighter: SteamwarUser) =
fun countPlacement(fighter: SteamwarUser, placement: Int) =
useDb {
exec(
"SELECT MIN(TT.Placement) AS Placement FROM FightPlayer INNER JOIN Fight F on FightPlayer.FightID = F.FightID INNER JOIN EventFight EF on F.FightID = EF.Fight INNER JOIN TeamTeilnahme TT on TT.EventID = EF.EventID WHERE UserID = ?",
args = listOf(IntegerColumnType() to fighter.id.value)
"SELECT COUNT(*) AS PlacementCount FROM FightPlayer INNER JOIN Fight F on FightPlayer.FightID = F.FightID INNER JOIN EventFight EF on F.FightID = EF.Fight INNER JOIN TeamTeilnahme TT on TT.EventID = EF.EventID WHERE UserID = ? AND Placement = ?",
args = listOf(IntegerColumnType() to fighter.id.value, IntegerColumnType() to placement)
) {
if (it.next()) {
it.getInt("Placement")
it.getInt("PlacementCount")
} else {
Int.MAX_VALUE
0
}
}
?: Int.MAX_VALUE
?: 0
}
}
@@ -173,56 +173,33 @@ public class Advancements {
return (int) (fights / Math.max(eventFightCount / 100.0, 1));
}
);
// playtime.add(previous);
// TODO: Implement per Type counter!
if (i == 0) {
Advancement third = new Advancement(
"steamwar:advancements/event_placement_3",
placementsCounts(previous, 9f, 1, "gold_block", Advancement.Display.FrameType.CHALLENGE);
placementsCounts(previous, 10f, 2, "iron_block", Advancement.Display.FrameType.GOAL);
placementsCounts(previous, 11f, 3, "copper_block", Advancement.Display.FrameType.TASK);
}
}
}
private static void placementsCounts(Advancement previous, float yCoord, int placement, String item, Advancement.Display.FrameType frameType) {
for (int placementCount = 1; placementCount <= 10; placementCount++) {
int finalPlacementCount = placementCount;
previous = new Advancement(
"steamwar:advancements/event_placement_" + placement + "_" + placementCount,
Optional.of(previous),
new Advancement.Display(
Component.text("3. Place in Event"),
Component.text(placementCount + "x " + placement + ". Place in Event"),
Component.text(""),
"copper_block",
Advancement.Display.FrameType.TASK,
2f,
9.5f
),
Advancement.HidePolicy.PREVIOUS_UNFINISHED,
1,
user -> EventFight.getHighestPlacement(user) <= 3 ? 1 : 0
);
Advancement first = new Advancement(
"steamwar:advancements/event_placement_1",
Optional.of(third),
new Advancement.Display(
Component.text("1. Place in Event"),
Component.text(""),
"gold_block",
Advancement.Display.FrameType.CHALLENGE,
3f,
9f
item,
frameType,
2f + (placementCount - 1f),
yCoord
),
Advancement.HidePolicy.WITH_PREVIOUS,
1,
user -> EventFight.getHighestPlacement(user) == 1 ? 1 : 0
user -> EventFight.countPlacement(user, placement) >= finalPlacementCount ? 1 : 0
);
new Advancement(
"steamwar:advancements/event_placement_2",
Optional.of(first),
new Advancement.Display(
Component.text("2. Place in Event"),
Component.text(""),
"iron_block",
Advancement.Display.FrameType.GOAL,
4f,
9.25f
),
Advancement.HidePolicy.WITH_PREVIOUS,
1,
user -> EventFight.getHighestPlacement(user) <= 2 ? 1 : 0
);
}
}
}
@@ -254,9 +231,6 @@ public class Advancements {
}
static {
// WarGear
// MiniWarGear
// WarShip
Advancement previous = ROOT;
int[] acceptedCounts = new int[]{1, 5, 10, 15, 25, 50, 100, 150, 200, 250, 500, 750, 1000};
for (int i = 0; i < acceptedCounts.length; i++) {