Fix weekly boss entry tickets and rewards

This commit is contained in:
Melledy
2025-12-07 15:45:19 -08:00
parent 7f0bdb1824
commit c6ac09f112
6 changed files with 93 additions and 12 deletions

View File

@@ -38,6 +38,7 @@ public class GameConstants {
public static final int PREM_GEM_ITEM_ID = 3; public static final int PREM_GEM_ITEM_ID = 3;
public static final int ENERGY_BUY_ITEM_ID = GEM_ITEM_ID; public static final int ENERGY_BUY_ITEM_ID = GEM_ITEM_ID;
public static final int EXP_ITEM_ID = 21; public static final int EXP_ITEM_ID = 21;
public static final int WEEKLY_ENTRY_ITEM_ID = 28;
public static final int MAX_ENERGY = 240; public static final int MAX_ENERGY = 240;
public static final int ENERGY_REGEN_TIME = 360; // Seconds public static final int ENERGY_REGEN_TIME = 360; // Seconds

View File

@@ -1,7 +1,9 @@
package emu.nebula.data.resources; package emu.nebula.data.resources;
import emu.nebula.data.BaseDef; import emu.nebula.data.BaseDef;
import emu.nebula.data.GameData;
import emu.nebula.data.ResourceType; import emu.nebula.data.ResourceType;
import emu.nebula.data.ResourceType.LoadPriority;
import emu.nebula.game.instance.InstanceData; import emu.nebula.game.instance.InstanceData;
import emu.nebula.game.inventory.ItemRewardList; import emu.nebula.game.inventory.ItemRewardList;
import emu.nebula.game.inventory.ItemRewardParam; import emu.nebula.game.inventory.ItemRewardParam;
@@ -10,9 +12,10 @@ import emu.nebula.util.JsonUtils;
import lombok.Getter; import lombok.Getter;
@Getter @Getter
@ResourceType(name = "WeekBossLevel.json") @ResourceType(name = "WeekBossLevel.json", loadPriority = LoadPriority.LOW)
public class WeekBossLevelDef extends BaseDef implements InstanceData { public class WeekBossLevelDef extends BaseDef implements InstanceData {
private int Id; private int Id;
private int Difficulty;
private int PreLevelId; private int PreLevelId;
private int NeedWorldClass; private int NeedWorldClass;
private String BaseAwardPreview; private String BaseAwardPreview;
@@ -44,14 +47,33 @@ public class WeekBossLevelDef extends BaseDef implements InstanceData {
for (int[] award : awards) { for (int[] award : awards) {
int itemId = award[0]; int itemId = award[0];
int min = award[1]; int min = award[1];
int max = award.length >= 4 ? award[2] : min; int max = award[1];
boolean isFirst = award[award.length - 1] == 1; boolean isFirst = award[award.length - 1] == 1;
// Set reward count based on difficulty
if (min == -1) { if (min == -1) {
min = 0; min = this.Difficulty;
max = 1; max = this.Difficulty;
var item = GameData.getItemDataTable().get(itemId);
if (item != null) {
switch (item.getRarity()) {
case 2:
max = this.Difficulty * 3;
break;
case 3:
min = this.Difficulty * 2;
max = this.Difficulty * 6;
break;
case 4:
min = this.Difficulty * 3;
max = this.Difficulty * 9;
break;
}
}
} }
// Create reward param
var reward = new ItemRewardParam(itemId, min, max); var reward = new ItemRewardParam(itemId, min, max);
if (isFirst) { if (isFirst) {

View File

@@ -137,5 +137,55 @@ public class InstanceManager extends PlayerManager {
// Success // Success
return change.setSuccess(true); return change.setSuccess(true);
} }
public PlayerChangeInfo settleWeekly(InstanceData data, boolean win) {
// Calculate settle data
var settleData = new InstanceSettleData();
settleData.setWin(win);
settleData.setFirst(settleData.isWin() && !getProgress().getWeekBossLog().containsKey(data.getId()));
// Init player change info
var change = new PlayerChangeInfo();
// Handle win
if (settleData.isWin()) {
// Calculate rewards
int entries = this.getPlayer().getInventory().getResourceCount(GameConstants.WEEKLY_ENTRY_ITEM_ID);
if (entries > 0) {
// Generate regular rewards
settleData.setRewards(data.getRewards().generate());
// Add regular rewards
getPlayer().getInventory().addItems(settleData.getRewards(), change);
// Remove weekly entry
getPlayer().getInventory().removeItem(GameConstants.WEEKLY_ENTRY_ITEM_ID, 1, change);
}
// Add first clear rewards even if we dont have the entry ticket
if (settleData.isFirst()) {
// Generate first clear rewards
settleData.setRewards(data.getFirstRewards().generate());
// Add to inventory
getPlayer().getInventory().addItems(settleData.getFirstRewards(), change);
}
// Log
this.getProgress().saveInstanceLog(getProgress().getWeekBossLog(), "weekBossLog", data.getId(), 1);
// Quest triggers
this.getPlayer().trigger(QuestCondition.WeekBoosClearSpecificDifficultyAndTotal, 1);
this.getPlayer().trigger(QuestCondition.BattleTotal, 1);
}
// Set extra data
change.setExtraData(settleData);
// Success
return change.setSuccess(true);
}
} }

View File

@@ -627,6 +627,12 @@ public class Player implements GameDatabaseObject {
// Trigger quest/achievement login // Trigger quest/achievement login
this.trigger(QuestCondition.LoginTotal, 1); this.trigger(QuestCondition.LoginTotal, 1);
// Add weekly boss entry item
int entries = this.getInventory().getResourceCount(GameConstants.WEEKLY_ENTRY_ITEM_ID);
if (entries < 3) {
this.getInventory().addItem(GameConstants.WEEKLY_ENTRY_ITEM_ID, 3 - entries);
}
// Update last epoch day // Update last epoch day
this.lastEpochDay = Nebula.getGameContext().getEpochDays(); this.lastEpochDay = Nebula.getGameContext().getEpochDays();
Nebula.getGameDatabase().update(this, this.getUid(), "lastEpochDay", this.lastEpochDay); Nebula.getGameDatabase().update(this, this.getUid(), "lastEpochDay", this.lastEpochDay);
@@ -719,6 +725,11 @@ public class Player implements GameDatabaseObject {
// Load complete // Load complete
this.loaded = true; this.loaded = true;
} }
public void onCreate() {
// Send welcome mail
this.getMailbox().sendWelcomeMail();
}
public void onLogin() { public void onLogin() {
// See if we need to reset dailies // See if we need to reset dailies

View File

@@ -132,12 +132,13 @@ public class PlayerModule extends GameContextModule {
player.onLoad(); player.onLoad();
player.save(); player.save();
// Send welcome mail // Handle any player creation events
player.getMailbox().sendWelcomeMail(); player.onCreate();
// Put in player cache // Put in player cache
this.addToCache(player); this.addToCache(player);
// Complete
return player; return player;
} }

View File

@@ -7,7 +7,6 @@ import emu.nebula.proto.WeekBossSettle.WeekBossSettleReq;
import emu.nebula.net.HandlerId; import emu.nebula.net.HandlerId;
import emu.nebula.data.GameData; import emu.nebula.data.GameData;
import emu.nebula.game.instance.InstanceSettleData; import emu.nebula.game.instance.InstanceSettleData;
import emu.nebula.game.quest.QuestCondition;
import emu.nebula.net.GameSession; import emu.nebula.net.GameSession;
@HandlerId(NetMsgId.week_boss_settle_req) @HandlerId(NetMsgId.week_boss_settle_req)
@@ -28,12 +27,9 @@ public class HandlerWeekBossSettleReq extends NetHandler {
var req = WeekBossSettleReq.parseFrom(message); var req = WeekBossSettleReq.parseFrom(message);
// Settle instance // Settle instance
var changes = player.getInstanceManager().settleInstance( var changes = player.getInstanceManager().settleWeekly(
data, data,
QuestCondition.WeekBoosClearSpecificDifficultyAndTotal, req.getResult()
player.getProgress().getWeekBossLog(),
"weekBossLog",
req.getResult() ? 1 : 0
); );
var settleData = (InstanceSettleData) changes.getExtraData(); var settleData = (InstanceSettleData) changes.getExtraData();