Implement maw plugging

This commit is contained in:
kuroppoi 2023-01-23 03:42:45 +01:00
parent 3a2bdb5937
commit ff5e199a75
5 changed files with 70 additions and 0 deletions

View file

@ -27,6 +27,7 @@ import brainwine.gameserver.util.MathUtils;
@Type(name = "SidekickAchievement", value = SidekickAchievement.class),
@Type(name = "ScavengingAchievement", value = ScavengingAchievement.class),
@Type(name = "DiscoveryAchievement", value = DiscoveryAchievement.class),
@Type(name = "SpawnerStoppageAchievement", value = SpawnerStoppageAchievement.class),
@Type(name = "Journeyman", value = JourneymanAchievement.class)
})
@JsonSerialize(using = AchievementSerializer.class)

View file

@ -0,0 +1,19 @@
package brainwine.gameserver.achievements;
import com.fasterxml.jackson.annotation.JacksonInject;
import com.fasterxml.jackson.annotation.JsonCreator;
import brainwine.gameserver.entity.player.Player;
public class SpawnerStoppageAchievement extends Achievement {
@JsonCreator
public SpawnerStoppageAchievement(@JacksonInject("title") String title) {
super(title);
}
@Override
public int getProgress(Player player) {
return player.getStatistics().getMawsPlugged();
}
}

View file

@ -20,6 +20,7 @@ import brainwine.gameserver.achievements.MiningAchievement;
import brainwine.gameserver.achievements.RaiderAchievement;
import brainwine.gameserver.achievements.ScavengingAchievement;
import brainwine.gameserver.achievements.SidekickAchievement;
import brainwine.gameserver.achievements.SpawnerStoppageAchievement;
import brainwine.gameserver.entity.EntityConfig;
import brainwine.gameserver.item.Item;
@ -37,6 +38,7 @@ public class PlayerStatistics {
private int areasExplored;
private int containersLooted;
private int dungeonsRaided;
private int mawsPlugged;
private int deaths;
@JsonIgnore
@ -293,6 +295,20 @@ public class PlayerStatistics {
return dungeonsRaided;
}
public void trackMawPlugged() {
mawsPlugged++;
player.addExperience(5);
player.updateAchievementProgress(SpawnerStoppageAchievement.class);
}
public void setMawsPlugged(int mawsPlugged) {
this.mawsPlugged = mawsPlugged;
}
public int getMawsPlugged() {
return mawsPlugged;
}
public void trackDeath() {
deaths++;
}

View file

@ -87,6 +87,9 @@ public class Item {
@JsonProperty("placeover")
private boolean placeover;
@JsonProperty("custom_place")
private boolean customPlace;
@JsonProperty("base")
private boolean base;
@ -311,6 +314,10 @@ public class Item {
return placeover;
}
public boolean hasCustomPlace() {
return customPlace;
}
public boolean isWhole() {
return whole;
}

View file

@ -87,6 +87,33 @@ public class BlockPlaceRequest extends PlayerRequest {
player.getInventory().removeItem(item);
player.getStatistics().trackItemPlaced();
player.trackPlacement(x, y, item);
// Process custom place if applicable
if(item.hasCustomPlace()) {
processCustomPlace(player);
}
}
private void processCustomPlace(Player player) {
Zone zone = player.getZone();
switch(item.getId()) {
// See if we can plug a maw or pipe
case "building/plug":
Item baseItem = zone.getBlock(x, y).getBaseItem();
String plugged = baseItem.hasId("base/maw") ? "base/maw-plugged"
: baseItem.hasId("base/pipe") ? "base/pipe-plugged" : null;
if(plugged != null) {
zone.updateBlock(x, y, Layer.FRONT, 0); // Remove the plug front block
zone.updateBlock(x, y, Layer.BASE, plugged);
player.getStatistics().trackMawPlugged();
}
break;
// No valid item; do nothing
default: break;
}
}
private void fail(Player player, String reason) {