Improved satiation (#2055)

* Natural satiation decreasing
Graphic showing satiation when eating (usually)

* Reworking values to match original

* Little fixes

* Satiation bar matches real values
Revival correctly updates bar

* Greatly simplify handling
Some fixes

* Inline variables
Add TODO for bug

* Satiation works correctly
Finally it all works as intended

* Remove unnecessary packets

* Improve satiation reduction handling
This commit is contained in:
Thoronium
2023-02-15 17:32:59 -07:00
committed by GitHub
Unverified
parent b4b8f1ec38
commit 1b2210f5a7
10 changed files with 1772 additions and 14 deletions
@@ -0,0 +1,48 @@
package emu.grasscutter.server.packet.send;
import emu.grasscutter.net.packet.BasePacket;
import emu.grasscutter.net.packet.PacketOpcodes;
import emu.grasscutter.game.avatar.Avatar;
import emu.grasscutter.net.proto.AvatarSatiationDataNotifyOuterClass.AvatarSatiationDataNotify;
import emu.grasscutter.net.proto.AvatarSatiationDataOuterClass.AvatarSatiationData;
public class PacketAvatarSatiationDataNotify extends BasePacket {
public PacketAvatarSatiationDataNotify(Avatar avatar, float finishTime, long penaltyTime) {
super(PacketOpcodes.AvatarSatiationDataNotify);
AvatarSatiationData.Builder avatarSatiation = AvatarSatiationData.newBuilder()
.setAvatarGuid(avatar.getGuid())
.setFinishTime(finishTime);
// Penalty for overeating
if (penaltyTime > 0) {
avatarSatiation.setPenaltyFinishTime(penaltyTime);
}
avatarSatiation.build();
AvatarSatiationDataNotify notify = AvatarSatiationDataNotify.newBuilder()
.addSatiationDataList(0, avatarSatiation)
.build();
this.setData(notify);
}
public PacketAvatarSatiationDataNotify(float time, Avatar avatar) {
super(PacketOpcodes.AvatarSatiationDataNotify);
var avatarSatiation = AvatarSatiationData.newBuilder()
.setAvatarGuid(avatar.getGuid())
.setFinishTime(time + (avatar.getSatiation() / 30f))
// Penalty time always ends before finish time
.setPenaltyFinishTime(time + (avatar.getSatiationPenalty() / 100f))
.build();
AvatarSatiationDataNotify notify = AvatarSatiationDataNotify.newBuilder()
.addSatiationDataList(0, avatarSatiation)
.build();
this.setData(notify);
}
}