mirror of
https://github.com/Grasscutters/Grasscutter.git
synced 2025-12-17 09:25:06 +01:00
Simply implement achievement system and add achievement command (#2068)
* Implement achievement system * Update src/main/java/emu/grasscutter/command/commands/AchievementCommand.java Co-authored-by: Der Chien <b03902015@ntu.edu.tw> * fix: redundant codes * fix: redundant codes * Update language files --------- Co-authored-by: Der Chien <b03902015@ntu.edu.tw>
This commit is contained in:
@@ -0,0 +1,16 @@
|
||||
package emu.grasscutter.server.packet.recv;
|
||||
|
||||
import emu.grasscutter.net.packet.Opcodes;
|
||||
import emu.grasscutter.net.packet.PacketHandler;
|
||||
import emu.grasscutter.net.packet.PacketOpcodes;
|
||||
import emu.grasscutter.net.proto.TakeAchievementGoalRewardReqOuterClass;
|
||||
import emu.grasscutter.server.game.GameSession;
|
||||
|
||||
@Opcodes(PacketOpcodes.TakeAchievementGoalRewardReq)
|
||||
public class HandlerTakeAchievementGoalRewardReq extends PacketHandler {
|
||||
@Override
|
||||
public void handle(GameSession session, byte[] header, byte[] payload) throws Exception {
|
||||
var req = TakeAchievementGoalRewardReqOuterClass.TakeAchievementGoalRewardReq.parseFrom(payload);
|
||||
session.getPlayer().getAchievements().takeGoalReward(req.getIdListList());
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,16 @@
|
||||
package emu.grasscutter.server.packet.recv;
|
||||
|
||||
import emu.grasscutter.net.packet.Opcodes;
|
||||
import emu.grasscutter.net.packet.PacketHandler;
|
||||
import emu.grasscutter.net.packet.PacketOpcodes;
|
||||
import emu.grasscutter.net.proto.TakeAchievementRewardReqOuterClass;
|
||||
import emu.grasscutter.server.game.GameSession;
|
||||
|
||||
@Opcodes(PacketOpcodes.TakeAchievementRewardReq)
|
||||
public class HandlerTakeAchievementRewardReq extends PacketHandler {
|
||||
@Override
|
||||
public void handle(GameSession session, byte[] header, byte[] payload) throws Exception {
|
||||
var req = TakeAchievementRewardReqOuterClass.TakeAchievementRewardReq.parseFrom(payload);
|
||||
session.getPlayer().getAchievements().takeReward(req.getIdListList());
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,21 @@
|
||||
package emu.grasscutter.server.packet.send;
|
||||
|
||||
import emu.grasscutter.game.achievement.Achievement;
|
||||
import emu.grasscutter.game.player.Player;
|
||||
import emu.grasscutter.net.packet.BasePacket;
|
||||
import emu.grasscutter.net.packet.PacketOpcodes;
|
||||
import emu.grasscutter.net.proto.AchievementAllDataNotifyOuterClass;
|
||||
|
||||
public class PacketAchievementAllDataNotify extends BasePacket {
|
||||
public PacketAchievementAllDataNotify(Player player) {
|
||||
super(PacketOpcodes.AchievementAllDataNotify);
|
||||
|
||||
var achievements = player.getAchievements();
|
||||
var notify = AchievementAllDataNotifyOuterClass.AchievementAllDataNotify.newBuilder()
|
||||
.addAllAchievementList(achievements.getAchievementList().values().stream().map(Achievement::toProto).toList())
|
||||
.addAllRewardTakenGoalIdList(achievements.getTakenGoalRewardIdList())
|
||||
.build();
|
||||
|
||||
this.setData(notify);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,20 @@
|
||||
package emu.grasscutter.server.packet.send;
|
||||
|
||||
import emu.grasscutter.game.achievement.Achievement;
|
||||
import emu.grasscutter.net.packet.BasePacket;
|
||||
import emu.grasscutter.net.packet.PacketOpcodes;
|
||||
import emu.grasscutter.net.proto.AchievementUpdateNotifyOuterClass;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
public class PacketAchievementUpdateNotify extends BasePacket {
|
||||
public PacketAchievementUpdateNotify(List<Achievement> achievements) {
|
||||
super(PacketOpcodes.AchievementUpdateNotify);
|
||||
|
||||
var notify = AchievementUpdateNotifyOuterClass.AchievementUpdateNotify.newBuilder()
|
||||
.addAllAchievementList(achievements.stream().map(Achievement::toProto).toList())
|
||||
.build();
|
||||
|
||||
this.setData(notify);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,29 @@
|
||||
package emu.grasscutter.server.packet.send;
|
||||
|
||||
import emu.grasscutter.net.packet.BasePacket;
|
||||
import emu.grasscutter.net.packet.PacketOpcodes;
|
||||
import emu.grasscutter.net.proto.ItemParamOuterClass;
|
||||
import emu.grasscutter.net.proto.RetcodeOuterClass;
|
||||
import emu.grasscutter.net.proto.TakeAchievementGoalRewardRspOuterClass;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
public class PacketTakeAchievementGoalRewardRsp extends BasePacket {
|
||||
public PacketTakeAchievementGoalRewardRsp() {
|
||||
super(PacketOpcodes.TakeAchievementGoalRewardRsp);
|
||||
this.setData(TakeAchievementGoalRewardRspOuterClass.TakeAchievementGoalRewardRsp.newBuilder()
|
||||
.setRetcode(RetcodeOuterClass.Retcode.RET_REWARD_HAS_TAKEN_VALUE)
|
||||
.build());
|
||||
}
|
||||
|
||||
public PacketTakeAchievementGoalRewardRsp(List<Integer> ids, List<ItemParamOuterClass.ItemParam> items) {
|
||||
super(PacketOpcodes.TakeAchievementGoalRewardRsp);
|
||||
|
||||
var rsp = TakeAchievementGoalRewardRspOuterClass.TakeAchievementGoalRewardRsp.newBuilder()
|
||||
.addAllIdList(ids)
|
||||
.addAllItemList(items)
|
||||
.build();
|
||||
|
||||
this.setData(rsp);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,29 @@
|
||||
package emu.grasscutter.server.packet.send;
|
||||
|
||||
import emu.grasscutter.net.packet.BasePacket;
|
||||
import emu.grasscutter.net.packet.PacketOpcodes;
|
||||
import emu.grasscutter.net.proto.ItemParamOuterClass;
|
||||
import emu.grasscutter.net.proto.RetcodeOuterClass;
|
||||
import emu.grasscutter.net.proto.TakeAchievementRewardRspOuterClass;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
public class PacketTakeAchievementRewardRsp extends BasePacket {
|
||||
public PacketTakeAchievementRewardRsp() {
|
||||
super(PacketOpcodes.TakeAchievementRewardRsp);
|
||||
this.setData(TakeAchievementRewardRspOuterClass.TakeAchievementRewardRsp.newBuilder()
|
||||
.setRetcode(RetcodeOuterClass.Retcode.RET_REWARD_HAS_TAKEN_VALUE)
|
||||
.build());
|
||||
}
|
||||
|
||||
public PacketTakeAchievementRewardRsp(List<Integer> idList, List<ItemParamOuterClass.ItemParam> items) {
|
||||
super(PacketOpcodes.TakeAchievementRewardRsp);
|
||||
|
||||
var rsp = TakeAchievementRewardRspOuterClass.TakeAchievementRewardRsp.newBuilder()
|
||||
.addAllIdList(idList)
|
||||
.addAllItemList(items)
|
||||
.build();
|
||||
|
||||
this.setData(rsp);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user