From fbf3dbbf777aa83fae4a7304906e8d42074de141 Mon Sep 17 00:00:00 2001 From: AnimeGitB Date: Thu, 25 Aug 2022 00:15:57 +0930 Subject: [PATCH] Move vehicle fightprop hacks --- .../command/commands/SpawnCommand.java | 25 ++---- .../game/entity/EntityBaseGadget.java | 1 - .../game/entity/EntityVehicle.java | 46 +++++----- .../grasscutter/game/entity/GameEntity.java | 90 ++++--------------- .../packet/send/PacketCreateVehicleRsp.java | 17 ---- 5 files changed, 45 insertions(+), 134 deletions(-) diff --git a/src/main/java/emu/grasscutter/command/commands/SpawnCommand.java b/src/main/java/emu/grasscutter/command/commands/SpawnCommand.java index f9e572f21..4828b86ca 100644 --- a/src/main/java/emu/grasscutter/command/commands/SpawnCommand.java +++ b/src/main/java/emu/grasscutter/command/commands/SpawnCommand.java @@ -83,33 +83,18 @@ public final class SpawnCommand implements CommandHandler { } double maxRadius = Math.sqrt(amount * 0.2 / Math.PI); + Position center = (x != 0 && y != 0 && z != 0) + ? (new Position(x, y, z)) + : (targetPlayer.getPosition()); for (int i = 0; i < amount; i++) { - Position pos = GetRandomPositionInCircle(targetPlayer.getPosition(), maxRadius).addY(3); - if (x != 0 && y != 0 && z != 0) { - pos = GetRandomPositionInCircle(new Position(x, y, z), maxRadius).addY(3); - } + Position pos = GetRandomPositionInCircle(center, maxRadius).addY(3); GameEntity entity = null; if (itemData != null) { entity = new EntityItem(scene, null, itemData, pos, 1, true); } if (gadgetData != null) { pos.addY(-3); - entity = new EntityVehicle(scene, targetPlayer.getSession().getPlayer(), gadgetData.getId(), 0, pos, targetPlayer.getRotation()); // TODO: does targetPlayer.getSession().getPlayer() have some meaning? - int gadgetId = gadgetData.getId(); - switch (gadgetId) { - // TODO: Not hardcode this. Waverider (skiff) - case 45001001, 45001002 -> { - entity.addFightProperty(FightProperty.FIGHT_PROP_BASE_HP, 10000); - entity.addFightProperty(FightProperty.FIGHT_PROP_BASE_ATTACK, 100); - entity.addFightProperty(FightProperty.FIGHT_PROP_CUR_ATTACK, 100); - entity.addFightProperty(FightProperty.FIGHT_PROP_CUR_HP, 10000); - entity.addFightProperty(FightProperty.FIGHT_PROP_CUR_DEFENSE, 0); - entity.addFightProperty(FightProperty.FIGHT_PROP_CUR_SPEED, 0); - entity.addFightProperty(FightProperty.FIGHT_PROP_CHARGE_EFFICIENCY, 0); - entity.addFightProperty(FightProperty.FIGHT_PROP_MAX_HP, 10000); - } - default -> {} - } + entity = new EntityVehicle(scene, targetPlayer, id, 0, pos, targetPlayer.getRotation()); } if (monsterData != null) { entity = new EntityMonster(scene, monsterData, pos, level); diff --git a/src/main/java/emu/grasscutter/game/entity/EntityBaseGadget.java b/src/main/java/emu/grasscutter/game/entity/EntityBaseGadget.java index 77a9f6e7e..8d6e7d878 100644 --- a/src/main/java/emu/grasscutter/game/entity/EntityBaseGadget.java +++ b/src/main/java/emu/grasscutter/game/entity/EntityBaseGadget.java @@ -1,7 +1,6 @@ package emu.grasscutter.game.entity; import emu.grasscutter.game.world.Scene; -import emu.grasscutter.game.world.World; public abstract class EntityBaseGadget extends GameEntity { diff --git a/src/main/java/emu/grasscutter/game/entity/EntityVehicle.java b/src/main/java/emu/grasscutter/game/entity/EntityVehicle.java index e862469fd..b4fd370e5 100644 --- a/src/main/java/emu/grasscutter/game/entity/EntityVehicle.java +++ b/src/main/java/emu/grasscutter/game/entity/EntityVehicle.java @@ -2,6 +2,7 @@ package emu.grasscutter.game.entity; import emu.grasscutter.game.player.Player; import emu.grasscutter.game.props.EntityIdType; +import emu.grasscutter.game.props.FightProperty; import emu.grasscutter.game.props.PlayerProperty; import emu.grasscutter.game.world.Scene; @@ -10,7 +11,6 @@ import emu.grasscutter.net.proto.AnimatorParameterValueInfoPairOuterClass.Animat import emu.grasscutter.net.proto.EntityAuthorityInfoOuterClass.EntityAuthorityInfo; import emu.grasscutter.net.proto.EntityRendererChangedInfoOuterClass.EntityRendererChangedInfo; import emu.grasscutter.net.proto.FightPropPairOuterClass.*; -import emu.grasscutter.net.proto.GadgetInteractReqOuterClass.GadgetInteractReq; import emu.grasscutter.net.proto.MotionInfoOuterClass.MotionInfo; import emu.grasscutter.net.proto.PropPairOuterClass.PropPair; import emu.grasscutter.net.proto.ProtEntityTypeOuterClass.ProtEntityType; @@ -25,23 +25,25 @@ import emu.grasscutter.utils.ProtoHelper; import it.unimi.dsi.fastutil.ints.Int2FloatMap; import it.unimi.dsi.fastutil.ints.Int2FloatOpenHashMap; +import lombok.Getter; +import lombok.Setter; import java.util.List; import java.util.ArrayList; public class EntityVehicle extends EntityBaseGadget { - private final Player owner; - private final Int2FloatOpenHashMap fightProp; + @Getter private final Player owner; + private final Int2FloatMap fightProp; private final Position pos; private final Position rot; - private final int pointId; - private final int gadgetId; + @Getter private final int pointId; + @Getter private final int gadgetId; - private float curStamina; - private List vehicleMembers; + @Getter @Setter private float curStamina; + @Getter private List vehicleMembers; public EntityVehicle(Scene scene, Player player, int gadgetId, int pointId, Position pos, Position rot) { super(scene); @@ -54,25 +56,23 @@ public class EntityVehicle extends EntityBaseGadget { this.pointId = pointId; this.curStamina = 240; this.vehicleMembers = new ArrayList(); + + switch (gadgetId) { + case 45001001,45001002 -> { // TODO: Not hardcode this. Waverider (skiff) + this.addFightProperty(FightProperty.FIGHT_PROP_BASE_HP, 10000); + this.addFightProperty(FightProperty.FIGHT_PROP_BASE_ATTACK, 100); + this.addFightProperty(FightProperty.FIGHT_PROP_CUR_ATTACK, 100); + this.addFightProperty(FightProperty.FIGHT_PROP_CUR_HP, 10000); + this.addFightProperty(FightProperty.FIGHT_PROP_CUR_DEFENSE, 0); + this.addFightProperty(FightProperty.FIGHT_PROP_CUR_SPEED, 0); + this.addFightProperty(FightProperty.FIGHT_PROP_CHARGE_EFFICIENCY, 0); + this.addFightProperty(FightProperty.FIGHT_PROP_MAX_HP, 10000); + } + } } @Override - public int getGadgetId() { return gadgetId; } - - public Player getOwner() { - return owner; - } - - public float getCurStamina() { return curStamina; } - - public void setCurStamina(float stamina) { this.curStamina = stamina; } - - public int getPointId() { return pointId; } - - public List getVehicleMembers() { return vehicleMembers; } - - @Override - public Int2FloatOpenHashMap getFightProperties() { + public Int2FloatMap getFightProperties() { return fightProp; } diff --git a/src/main/java/emu/grasscutter/game/entity/GameEntity.java b/src/main/java/emu/grasscutter/game/entity/GameEntity.java index 9d60a683b..3881a2c9e 100644 --- a/src/main/java/emu/grasscutter/game/entity/GameEntity.java +++ b/src/main/java/emu/grasscutter/game/entity/GameEntity.java @@ -1,8 +1,5 @@ package emu.grasscutter.game.entity; -import java.util.HashMap; -import java.util.Map; - import emu.grasscutter.game.player.Player; import emu.grasscutter.game.props.FightProperty; import emu.grasscutter.game.props.LifeState; @@ -20,25 +17,28 @@ import emu.grasscutter.server.event.entity.EntityDeathEvent; import emu.grasscutter.server.packet.send.PacketEntityFightPropUpdateNotify; import emu.grasscutter.utils.Position; import it.unimi.dsi.fastutil.ints.Int2FloatMap; -import it.unimi.dsi.fastutil.ints.Int2FloatOpenHashMap; import it.unimi.dsi.fastutil.ints.Int2ObjectMap; import it.unimi.dsi.fastutil.ints.Int2ObjectOpenHashMap; +import it.unimi.dsi.fastutil.objects.Object2FloatMap; +import it.unimi.dsi.fastutil.objects.Object2FloatOpenHashMap; +import lombok.Getter; +import lombok.Setter; public abstract class GameEntity { - protected int id; - private final Scene scene; - private SpawnDataEntry spawnEntry; + @Getter protected int id; + @Getter private final Scene scene; + @Getter @Setter private SpawnDataEntry spawnEntry; - private int blockId; - private int configId; - private int groupId; + @Getter @Setter private int blockId; + @Getter @Setter private int configId; + @Getter @Setter private int groupId; private MotionState moveState; - private int lastMoveSceneTimeMs; - private int lastMoveReliableSeq; + @Getter @Setter private int lastMoveSceneTimeMs; + @Getter @Setter private int lastMoveReliableSeq; // Abilities - private Map metaOverrideMap; + private Object2FloatMap metaOverrideMap; private Int2ObjectMap metaModifiers; public GameEntity(Scene scene) { @@ -46,10 +46,6 @@ public abstract class GameEntity { this.moveState = MotionState.MOTION_STATE_NONE; } - public int getId() { - return this.id; - } - public int getEntityType() { return this.getId() >> 24; } @@ -58,10 +54,6 @@ public abstract class GameEntity { return this.getScene().getWorld(); } - public Scene getScene() { - return this.scene; - } - public boolean isAlive() { return true; } @@ -70,9 +62,9 @@ public abstract class GameEntity { return this.isAlive() ? LifeState.LIFE_ALIVE : LifeState.LIFE_DEAD; } - public Map getMetaOverrideMap() { + public Object2FloatMap getMetaOverrideMap() { if (this.metaOverrideMap == null) { - this.metaOverrideMap = new HashMap<>(); + this.metaOverrideMap = new Object2FloatOpenHashMap<>(); } return this.metaOverrideMap; } @@ -84,7 +76,7 @@ public abstract class GameEntity { return this.metaModifiers; } - public abstract Int2FloatOpenHashMap getFightProperties(); + public abstract Int2FloatMap getFightProperties(); public abstract Position getPosition(); @@ -98,27 +90,11 @@ public abstract class GameEntity { this.moveState = moveState; } - public int getLastMoveSceneTimeMs() { - return lastMoveSceneTimeMs; - } - - public void setLastMoveSceneTimeMs(int lastMoveSceneTimeMs) { - this.lastMoveSceneTimeMs = lastMoveSceneTimeMs; - } - - public int getLastMoveReliableSeq() { - return lastMoveReliableSeq; - } - - public void setLastMoveReliableSeq(int lastMoveReliableSeq) { - this.lastMoveReliableSeq = lastMoveReliableSeq; - } - public void setFightProperty(FightProperty prop, float value) { this.getFightProperties().put(prop.getId(), value); } - private void setFightProperty(int id, float value) { + public void setFightProperty(int id, float value) { this.getFightProperties().put(id, value); } @@ -140,30 +116,6 @@ public abstract class GameEntity { } } - public int getBlockId() { - return blockId; - } - - public void setBlockId(int blockId) { - this.blockId = blockId; - } - - public int getConfigId() { - return configId; - } - - public void setConfigId(int configId) { - this.configId = configId; - } - - public int getGroupId() { - return groupId; - } - - public void setGroupId(int groupId) { - this.groupId = groupId; - } - protected MotionInfo getMotionInfo() { MotionInfo proto = MotionInfo.newBuilder() .setPos(this.getPosition().toProto()) @@ -175,14 +127,6 @@ public abstract class GameEntity { return proto; } - public SpawnDataEntry getSpawnEntry() { - return spawnEntry; - } - - public void setSpawnEntry(SpawnDataEntry spawnEntry) { - this.spawnEntry = spawnEntry; - } - public float heal(float amount) { if (this.getFightProperties() == null) { return 0f; diff --git a/src/main/java/emu/grasscutter/server/packet/send/PacketCreateVehicleRsp.java b/src/main/java/emu/grasscutter/server/packet/send/PacketCreateVehicleRsp.java index 8ff65c260..d55d15f9f 100644 --- a/src/main/java/emu/grasscutter/server/packet/send/PacketCreateVehicleRsp.java +++ b/src/main/java/emu/grasscutter/server/packet/send/PacketCreateVehicleRsp.java @@ -2,7 +2,6 @@ package emu.grasscutter.server.packet.send; import emu.grasscutter.game.player.Player; import emu.grasscutter.game.entity.EntityVehicle; -import emu.grasscutter.game.props.FightProperty; import emu.grasscutter.game.entity.GameEntity; import emu.grasscutter.net.packet.BasePacket; @@ -40,22 +39,6 @@ public class PacketCreateVehicleRsp extends BasePacket { }); EntityVehicle vehicle = new EntityVehicle(player.getScene(), player, vehicleId, pointId, pos, rot); - - switch (vehicleId) { - // TODO: Not hardcode this. Waverider (skiff) - case 45001001,45001002 -> { - vehicle.addFightProperty(FightProperty.FIGHT_PROP_BASE_HP, 10000); - vehicle.addFightProperty(FightProperty.FIGHT_PROP_BASE_ATTACK, 100); - vehicle.addFightProperty(FightProperty.FIGHT_PROP_CUR_ATTACK, 100); - vehicle.addFightProperty(FightProperty.FIGHT_PROP_CUR_HP, 10000); - vehicle.addFightProperty(FightProperty.FIGHT_PROP_CUR_DEFENSE, 0); - vehicle.addFightProperty(FightProperty.FIGHT_PROP_CUR_SPEED, 0); - vehicle.addFightProperty(FightProperty.FIGHT_PROP_CHARGE_EFFICIENCY, 0); - vehicle.addFightProperty(FightProperty.FIGHT_PROP_MAX_HP, 10000); - } - default -> {} - } - player.getScene().addEntity(vehicle); proto.setVehicleId(vehicleId);