mirror of
https://github.com/Melledy/Nebula.git
synced 2025-12-25 10:44:37 +01:00
Implement achievements properly
This commit is contained in:
@@ -2,11 +2,7 @@ package emu.nebula.server.handlers;
|
||||
|
||||
import emu.nebula.net.NetHandler;
|
||||
import emu.nebula.net.NetMsgId;
|
||||
import emu.nebula.proto.Public.Achievement;
|
||||
import emu.nebula.proto.Public.Achievements;
|
||||
import emu.nebula.proto.Public.QuestProgress;
|
||||
import emu.nebula.net.HandlerId;
|
||||
import emu.nebula.data.GameData;
|
||||
import emu.nebula.net.GameSession;
|
||||
|
||||
@HandlerId(NetMsgId.achievement_info_req)
|
||||
@@ -15,21 +11,7 @@ public class HandlerAchievementInfoReq extends NetHandler {
|
||||
@Override
|
||||
public byte[] handle(GameSession session, byte[] message) throws Exception {
|
||||
// Build response
|
||||
var rsp = Achievements.newInstance();
|
||||
|
||||
for (var data : GameData.getAchievementDataTable()) {
|
||||
var progress = QuestProgress.newInstance()
|
||||
.setCur(data.getAimNumShow())
|
||||
.setMax(data.getAimNumShow());
|
||||
|
||||
var info = Achievement.newInstance()
|
||||
.setId(data.getId())
|
||||
.setStatus(2)
|
||||
.setCompleted(session.getPlayer().getCreateTime())
|
||||
.addProgress(progress);
|
||||
|
||||
rsp.addList(info);
|
||||
}
|
||||
var rsp = session.getPlayer().getAchievementManager().toProto();
|
||||
|
||||
// Encode and send
|
||||
return session.encodeMsg(NetMsgId.achievement_info_succeed_ack, rsp);
|
||||
|
||||
@@ -0,0 +1,28 @@
|
||||
package emu.nebula.server.handlers;
|
||||
|
||||
import emu.nebula.net.NetHandler;
|
||||
import emu.nebula.net.NetMsgId;
|
||||
import emu.nebula.proto.AchievementRewardReceive.AchievementRewardReq;
|
||||
import emu.nebula.net.HandlerId;
|
||||
import emu.nebula.net.GameSession;
|
||||
|
||||
@HandlerId(NetMsgId.achievement_reward_receive_req)
|
||||
public class HandlerAchievementRewardReceiveReq extends NetHandler {
|
||||
|
||||
@Override
|
||||
public byte[] handle(GameSession session, byte[] message) throws Exception {
|
||||
// Parse request
|
||||
var req = AchievementRewardReq.parseFrom(message);
|
||||
|
||||
// Claim rewards
|
||||
var change = session.getPlayer().getAchievementManager().recvRewards(req.getIds());
|
||||
|
||||
if (change == null) {
|
||||
return session.encodeMsg(NetMsgId.achievement_reward_receive_failed_ack);
|
||||
}
|
||||
|
||||
// Encode and send
|
||||
return session.encodeMsg(NetMsgId.achievement_reward_receive_succeed_ack, change.toProto());
|
||||
}
|
||||
|
||||
}
|
||||
@@ -7,7 +7,7 @@ import emu.nebula.proto.CharGemInstanceSettle.CharGemInstanceSettleResp;
|
||||
import emu.nebula.net.HandlerId;
|
||||
import emu.nebula.data.GameData;
|
||||
import emu.nebula.game.instance.InstanceSettleData;
|
||||
import emu.nebula.game.quest.QuestCondType;
|
||||
import emu.nebula.game.quest.QuestCondition;
|
||||
import emu.nebula.net.GameSession;
|
||||
|
||||
@HandlerId(NetMsgId.char_gem_instance_settle_req)
|
||||
@@ -30,7 +30,7 @@ public class HandlerCharGemInstanceSettleReq extends NetHandler {
|
||||
// Settle instance
|
||||
var changes = player.getInstanceManager().settleInstance(
|
||||
data,
|
||||
QuestCondType.CharGemInstanceClearTotal,
|
||||
QuestCondition.CharGemInstanceClearTotal,
|
||||
player.getProgress().getCharGemLog(),
|
||||
"charGemLog",
|
||||
req.getStar()
|
||||
@@ -38,6 +38,9 @@ public class HandlerCharGemInstanceSettleReq extends NetHandler {
|
||||
|
||||
var settleData = (InstanceSettleData) changes.getExtraData();
|
||||
|
||||
// Handle client events for achievements
|
||||
session.getPlayer().getAchievementManager().handleClientEvents(req.getEvents());
|
||||
|
||||
// Create response
|
||||
var rsp = CharGemInstanceSettleResp.newInstance()
|
||||
.setExp(settleData.getExp())
|
||||
|
||||
@@ -11,7 +11,7 @@ import java.util.List;
|
||||
|
||||
import emu.nebula.data.GameData;
|
||||
import emu.nebula.game.inventory.ItemParamMap;
|
||||
import emu.nebula.game.quest.QuestCondType;
|
||||
import emu.nebula.game.quest.QuestCondition;
|
||||
import emu.nebula.net.GameSession;
|
||||
|
||||
@HandlerId(NetMsgId.char_gem_instance_sweep_req)
|
||||
@@ -31,7 +31,7 @@ public class HandlerCharGemInstanceSweepReq extends NetHandler {
|
||||
// Sweep
|
||||
var change = session.getPlayer().getInstanceManager().sweepInstance(
|
||||
data,
|
||||
QuestCondType.CharGemInstanceClearTotal,
|
||||
QuestCondition.CharGemInstanceClearTotal,
|
||||
session.getPlayer().getProgress().getCharGemLog(),
|
||||
0,
|
||||
req.getTimes()
|
||||
|
||||
@@ -4,7 +4,7 @@ import emu.nebula.net.NetHandler;
|
||||
import emu.nebula.net.NetMsgId;
|
||||
import emu.nebula.proto.Public.Nil;
|
||||
import emu.nebula.net.HandlerId;
|
||||
import emu.nebula.game.quest.QuestCondType;
|
||||
import emu.nebula.game.quest.QuestCondition;
|
||||
import emu.nebula.net.GameSession;
|
||||
|
||||
@HandlerId(NetMsgId.client_event_report_req)
|
||||
@@ -13,7 +13,7 @@ public class HandlerClientEventReportReq extends NetHandler {
|
||||
@Override
|
||||
public byte[] handle(GameSession session, byte[] message) throws Exception {
|
||||
// Interact
|
||||
session.getPlayer().triggerQuest(QuestCondType.ClientReport, 1, 1005);
|
||||
session.getPlayer().triggerQuest(QuestCondition.ClientReport, 1, 1005);
|
||||
|
||||
// Encode response
|
||||
return session.encodeMsg(NetMsgId.client_event_report_succeed_ack, Nil.newInstance());
|
||||
|
||||
@@ -11,7 +11,7 @@ import java.util.List;
|
||||
|
||||
import emu.nebula.data.GameData;
|
||||
import emu.nebula.game.inventory.ItemParamMap;
|
||||
import emu.nebula.game.quest.QuestCondType;
|
||||
import emu.nebula.game.quest.QuestCondition;
|
||||
import emu.nebula.net.GameSession;
|
||||
|
||||
@HandlerId(NetMsgId.daily_instance_raid_req)
|
||||
@@ -36,7 +36,7 @@ public class HandlerDailyInstanceRaidReq extends NetHandler {
|
||||
// Sweep
|
||||
var change = session.getPlayer().getInstanceManager().sweepInstance(
|
||||
data,
|
||||
QuestCondType.DailyInstanceClearTotal,
|
||||
QuestCondition.DailyInstanceClearTotal,
|
||||
session.getPlayer().getProgress().getDailyInstanceLog(),
|
||||
req.getRewardType(),
|
||||
req.getTimes()
|
||||
|
||||
@@ -7,7 +7,7 @@ import emu.nebula.proto.DailyInstanceSettle.DailyInstanceSettleResp;
|
||||
import emu.nebula.net.HandlerId;
|
||||
import emu.nebula.data.GameData;
|
||||
import emu.nebula.game.instance.InstanceSettleData;
|
||||
import emu.nebula.game.quest.QuestCondType;
|
||||
import emu.nebula.game.quest.QuestCondition;
|
||||
import emu.nebula.net.GameSession;
|
||||
|
||||
@HandlerId(NetMsgId.daily_instance_settle_req)
|
||||
@@ -30,7 +30,7 @@ public class HandlerDailyInstanceSettleReq extends NetHandler {
|
||||
// Settle instance
|
||||
var changes = player.getInstanceManager().settleInstance(
|
||||
data,
|
||||
QuestCondType.DailyInstanceClearTotal,
|
||||
QuestCondition.DailyInstanceClearTotal,
|
||||
player.getProgress().getDailyInstanceLog(),
|
||||
"dailyInstanceLog",
|
||||
req.getStar()
|
||||
@@ -38,6 +38,9 @@ public class HandlerDailyInstanceSettleReq extends NetHandler {
|
||||
|
||||
var settleData = (InstanceSettleData) changes.getExtraData();
|
||||
|
||||
// Handle client events for achievements
|
||||
session.getPlayer().getAchievementManager().handleClientEvents(req.getEvents());
|
||||
|
||||
// Create response
|
||||
var rsp = DailyInstanceSettleResp.newInstance()
|
||||
.setExp(settleData.getExp())
|
||||
|
||||
@@ -32,6 +32,9 @@ public class HandlerInfinityTowerSettleReq extends NetHandler {
|
||||
nextLevel = 0;
|
||||
}
|
||||
|
||||
// Handle client events for achievements
|
||||
session.getPlayer().getAchievementManager().handleClientEvents(req.getEvents());
|
||||
|
||||
// Build response
|
||||
var rsp = InfinityTowerSettleResp.newInstance()
|
||||
.setNextLevelId(nextLevel)
|
||||
|
||||
@@ -7,7 +7,7 @@ import emu.nebula.proto.RegionBossLevelSettle.RegionBossLevelSettleResp;
|
||||
import emu.nebula.net.HandlerId;
|
||||
import emu.nebula.data.GameData;
|
||||
import emu.nebula.game.instance.InstanceSettleData;
|
||||
import emu.nebula.game.quest.QuestCondType;
|
||||
import emu.nebula.game.quest.QuestCondition;
|
||||
import emu.nebula.net.GameSession;
|
||||
|
||||
@HandlerId(NetMsgId.region_boss_level_settle_req)
|
||||
@@ -30,7 +30,7 @@ public class HandlerRegionBossLevelSettleReq extends NetHandler {
|
||||
// Settle instance
|
||||
var changes = player.getInstanceManager().settleInstance(
|
||||
data,
|
||||
QuestCondType.RegionBossClearTotal,
|
||||
QuestCondition.RegionBossClearTotal,
|
||||
player.getProgress().getRegionBossLog(),
|
||||
"regionBossLog",
|
||||
req.getStar()
|
||||
@@ -38,6 +38,9 @@ public class HandlerRegionBossLevelSettleReq extends NetHandler {
|
||||
|
||||
var settleData = (InstanceSettleData) changes.getExtraData();
|
||||
|
||||
// Handle client events for achievements
|
||||
session.getPlayer().getAchievementManager().handleClientEvents(req.getEvents());
|
||||
|
||||
// Create response
|
||||
var rsp = RegionBossLevelSettleResp.newInstance()
|
||||
.setExp(settleData.getExp())
|
||||
|
||||
@@ -11,7 +11,7 @@ import java.util.List;
|
||||
|
||||
import emu.nebula.data.GameData;
|
||||
import emu.nebula.game.inventory.ItemParamMap;
|
||||
import emu.nebula.game.quest.QuestCondType;
|
||||
import emu.nebula.game.quest.QuestCondition;
|
||||
import emu.nebula.net.GameSession;
|
||||
|
||||
@HandlerId(NetMsgId.region_boss_level_sweep_req)
|
||||
@@ -31,7 +31,7 @@ public class HandlerRegionBossLevelSweepReq extends NetHandler {
|
||||
// Sweep
|
||||
var change = session.getPlayer().getInstanceManager().sweepInstance(
|
||||
data,
|
||||
QuestCondType.RegionBossClearTotal,
|
||||
QuestCondition.RegionBossClearTotal,
|
||||
session.getPlayer().getProgress().getRegionBossLog(),
|
||||
0,
|
||||
req.getTimes()
|
||||
|
||||
@@ -22,6 +22,9 @@ public class HandlerScoreBossSettleReq extends NetHandler {
|
||||
return session.encodeMsg(NetMsgId.score_boss_settle_failed_ack);
|
||||
}
|
||||
|
||||
// Handle client events for achievements
|
||||
session.getPlayer().getAchievementManager().handleClientEvents(req.getEvents());
|
||||
|
||||
// Build response
|
||||
var rsp = ScoreBossSettleResp.newInstance();
|
||||
|
||||
|
||||
@@ -7,7 +7,7 @@ import emu.nebula.proto.SkillInstanceSettle.SkillInstanceSettleResp;
|
||||
import emu.nebula.net.HandlerId;
|
||||
import emu.nebula.data.GameData;
|
||||
import emu.nebula.game.instance.InstanceSettleData;
|
||||
import emu.nebula.game.quest.QuestCondType;
|
||||
import emu.nebula.game.quest.QuestCondition;
|
||||
import emu.nebula.net.GameSession;
|
||||
|
||||
@HandlerId(NetMsgId.skill_instance_settle_req)
|
||||
@@ -30,7 +30,7 @@ public class HandlerSkillInstanceSettleReq extends NetHandler {
|
||||
// Settle instance
|
||||
var changes = player.getInstanceManager().settleInstance(
|
||||
data,
|
||||
QuestCondType.SkillInstanceClearTotal,
|
||||
QuestCondition.SkillInstanceClearTotal,
|
||||
player.getProgress().getSkillInstanceLog(),
|
||||
"skillInstanceLog",
|
||||
req.getStar()
|
||||
@@ -38,6 +38,9 @@ public class HandlerSkillInstanceSettleReq extends NetHandler {
|
||||
|
||||
var settleData = (InstanceSettleData) changes.getExtraData();
|
||||
|
||||
// Handle client events for achievements
|
||||
session.getPlayer().getAchievementManager().handleClientEvents(req.getEvents());
|
||||
|
||||
// Create response
|
||||
var rsp = SkillInstanceSettleResp.newInstance()
|
||||
.setExp(settleData.getExp())
|
||||
|
||||
@@ -11,7 +11,7 @@ import java.util.List;
|
||||
|
||||
import emu.nebula.data.GameData;
|
||||
import emu.nebula.game.inventory.ItemParamMap;
|
||||
import emu.nebula.game.quest.QuestCondType;
|
||||
import emu.nebula.game.quest.QuestCondition;
|
||||
import emu.nebula.net.GameSession;
|
||||
|
||||
@HandlerId(NetMsgId.skill_instance_sweep_req)
|
||||
@@ -31,7 +31,7 @@ public class HandlerSkillInstanceSweepReq extends NetHandler {
|
||||
// Sweep
|
||||
var change = session.getPlayer().getInstanceManager().sweepInstance(
|
||||
data,
|
||||
QuestCondType.SkillInstanceClearTotal,
|
||||
QuestCondition.SkillInstanceClearTotal,
|
||||
session.getPlayer().getProgress().getSkillInstanceLog(),
|
||||
0,
|
||||
req.getTimes()
|
||||
|
||||
@@ -11,7 +11,7 @@ public class HandlerStarTowerGiveUpReq extends NetHandler {
|
||||
|
||||
@Override
|
||||
public byte[] handle(GameSession session, byte[] message) throws Exception {
|
||||
var game = session.getPlayer().getStarTowerManager().endGame();
|
||||
var game = session.getPlayer().getStarTowerManager().endGame(false);
|
||||
|
||||
if (game == null) {
|
||||
return session.encodeMsg(NetMsgId.star_tower_give_up_failed_ack);
|
||||
@@ -19,10 +19,10 @@ public class HandlerStarTowerGiveUpReq extends NetHandler {
|
||||
|
||||
// Build response
|
||||
var rsp = StarTowerGiveUpResp.newInstance()
|
||||
.setBuild(game.getBuild().toProto())
|
||||
.setFloor(game.getFloor());
|
||||
|
||||
rsp.getMutableChange();
|
||||
rsp.setBuild(game.getBuild().toProto());
|
||||
|
||||
return session.encodeMsg(NetMsgId.star_tower_give_up_succeed_ack, rsp);
|
||||
}
|
||||
|
||||
@@ -24,6 +24,9 @@ public class HandlerVampireSurvivorAreaChangeReq extends NetHandler {
|
||||
// Calculate score for area
|
||||
game.settleArea(req.getTime(), req.getKillCount().toArray());
|
||||
|
||||
// Handle client events for achievements
|
||||
session.getPlayer().getAchievementManager().handleClientEvents(req.getEvents());
|
||||
|
||||
// Encode and send
|
||||
return session.encodeMsg(NetMsgId.vampire_survivor_area_change_succeed_ack);
|
||||
}
|
||||
|
||||
@@ -32,6 +32,9 @@ public class HandlerVampireSurvivorSettleReq extends NetHandler {
|
||||
// Settle game
|
||||
session.getPlayer().getVampireSurvivorManager().settle(victory, score);
|
||||
|
||||
// Handle client events for achievements
|
||||
session.getPlayer().getAchievementManager().handleClientEvents(req.getEvents());
|
||||
|
||||
// Build response
|
||||
var rsp = VampireSurvivorSettleResp.newInstance();
|
||||
|
||||
|
||||
@@ -7,7 +7,7 @@ import emu.nebula.proto.WeekBossSettle.WeekBossSettleReq;
|
||||
import emu.nebula.net.HandlerId;
|
||||
import emu.nebula.data.GameData;
|
||||
import emu.nebula.game.instance.InstanceSettleData;
|
||||
import emu.nebula.game.quest.QuestCondType;
|
||||
import emu.nebula.game.quest.QuestCondition;
|
||||
import emu.nebula.net.GameSession;
|
||||
|
||||
@HandlerId(NetMsgId.week_boss_settle_req)
|
||||
@@ -30,7 +30,7 @@ public class HandlerWeekBossSettleReq extends NetHandler {
|
||||
// Settle instance
|
||||
var changes = player.getInstanceManager().settleInstance(
|
||||
data,
|
||||
QuestCondType.WeekBoosClearSpecificDifficultyAndTotal,
|
||||
QuestCondition.WeekBoosClearSpecificDifficultyAndTotal,
|
||||
player.getProgress().getWeekBossLog(),
|
||||
"weekBossLog",
|
||||
req.getResult() ? 1 : 0
|
||||
@@ -38,6 +38,9 @@ public class HandlerWeekBossSettleReq extends NetHandler {
|
||||
|
||||
var settleData = (InstanceSettleData) changes.getExtraData();
|
||||
|
||||
// Handle client events for achievements
|
||||
session.getPlayer().getAchievementManager().handleClientEvents(req.getEvents());
|
||||
|
||||
// Create response
|
||||
var rsp = WeekBossLevelSettleResp.newInstance()
|
||||
.setFirst(settleData.isFirst())
|
||||
|
||||
@@ -162,7 +162,13 @@ public class AgentZoneHandler implements Handler {
|
||||
ctx.status(200);
|
||||
ctx.result(result);
|
||||
|
||||
// Clear header
|
||||
ctx.res().setHeader("Content-Type", null);
|
||||
|
||||
// Handle post response events
|
||||
if (session != null) {
|
||||
session.afterResponse();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user