mirror of
https://github.com/Melledy/Nebula.git
synced 2026-11-04 21:36:51 +01:00
Fix monolith potential log Claim All button
This commit is contained in:
1 parent
e262079d41
commit
44e52bc8a2
3 files changed
+69
-8
No files matched your search
@@ -18,6 +18,7 @@ import emu.nebula.game.player.PlayerChangeInfo;
|
|||||||
|
|
||||||
import it.unimi.dsi.fastutil.ints.Int2ObjectMap;
|
import it.unimi.dsi.fastutil.ints.Int2ObjectMap;
|
||||||
import it.unimi.dsi.fastutil.ints.Int2ObjectOpenHashMap;
|
import it.unimi.dsi.fastutil.ints.Int2ObjectOpenHashMap;
|
||||||
|
import it.unimi.dsi.fastutil.ints.IntArrayList;
|
||||||
import lombok.Getter;
|
import lombok.Getter;
|
||||||
import lombok.Setter;
|
import lombok.Setter;
|
||||||
|
|
||||||
@@ -185,6 +186,39 @@ public class CharacterStorage extends PlayerManager {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public PlayerChangeInfo claimAllPotentialBookRewards() {
|
||||||
|
var rewards = new ItemParamMap();
|
||||||
|
var received = new IntArrayList();
|
||||||
|
|
||||||
|
// Collect rewards for every owned character
|
||||||
|
for (var character : this.getCharacterCollection()) {
|
||||||
|
var characterReceived = new IntArrayList();
|
||||||
|
var characterRewards = character.collectPotentialBookRewards(characterReceived);
|
||||||
|
|
||||||
|
if (characterRewards.isEmpty()) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
rewards.add(characterRewards);
|
||||||
|
received.addAll(characterReceived);
|
||||||
|
|
||||||
|
// Save to db
|
||||||
|
character.save();
|
||||||
|
}
|
||||||
|
|
||||||
|
// Sanity check
|
||||||
|
if (rewards.isEmpty()) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Add all rewards at once so the change info only contains one entry per item
|
||||||
|
var change = this.getPlayer().getInventory().addItems(rewards);
|
||||||
|
change.setExtraData(received);
|
||||||
|
|
||||||
|
// Success
|
||||||
|
return change.setSuccess(true);
|
||||||
|
}
|
||||||
|
|
||||||
// Discs
|
// Discs
|
||||||
|
|
||||||
public GameDisc getDiscById(int id) {
|
public GameDisc getDiscById(int id) {
|
||||||
|
|||||||
@@ -42,6 +42,7 @@ import emu.nebula.util.ints.CustomIntArray;
|
|||||||
import it.unimi.dsi.fastutil.ints.Int2IntMap;
|
import it.unimi.dsi.fastutil.ints.Int2IntMap;
|
||||||
import it.unimi.dsi.fastutil.ints.Int2IntOpenHashMap;
|
import it.unimi.dsi.fastutil.ints.Int2IntOpenHashMap;
|
||||||
import it.unimi.dsi.fastutil.ints.IntArrayList;
|
import it.unimi.dsi.fastutil.ints.IntArrayList;
|
||||||
|
import it.unimi.dsi.fastutil.ints.IntList;
|
||||||
import it.unimi.dsi.fastutil.ints.IntOpenHashSet;
|
import it.unimi.dsi.fastutil.ints.IntOpenHashSet;
|
||||||
import it.unimi.dsi.fastutil.ints.IntSet;
|
import it.unimi.dsi.fastutil.ints.IntSet;
|
||||||
import lombok.Getter;
|
import lombok.Getter;
|
||||||
@@ -1003,9 +1004,13 @@ public class GameCharacter implements GameDatabaseObject {
|
|||||||
return this.receivedPotentialRewards;
|
return this.receivedPotentialRewards;
|
||||||
}
|
}
|
||||||
|
|
||||||
public PlayerChangeInfo claimPotentialBookRewards() {
|
/**
|
||||||
|
* Marks this character's claimable potential book rewards as received.
|
||||||
|
* @param receivedIds List to add the claimed reward ids to
|
||||||
|
* @return The claimed rewards
|
||||||
|
*/
|
||||||
|
protected ItemParamMap collectPotentialBookRewards(IntList receivedIds) {
|
||||||
var rewards = new ItemParamMap();
|
var rewards = new ItemParamMap();
|
||||||
var received = new IntArrayList();
|
|
||||||
int potentials = this.getTotalSeenPotentials();
|
int potentials = this.getTotalSeenPotentials();
|
||||||
|
|
||||||
for (var reward : this.getData().getPotentialBookRewards().values()) {
|
for (var reward : this.getData().getPotentialBookRewards().values()) {
|
||||||
@@ -1015,16 +1020,27 @@ public class GameCharacter implements GameDatabaseObject {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Check if we meet criteria for claiming the reward
|
// Check if we meet criteria for claiming the reward
|
||||||
if (potentials >= reward.getRequiredPotentials()) {
|
if (potentials < reward.getRequiredPotentials()) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
// Mark as received
|
// Mark as received
|
||||||
this.getReceivedPotentialRewards().add(reward.getId());
|
this.getReceivedPotentialRewards().add(reward.getId());
|
||||||
|
|
||||||
// Add to lists
|
// Add to rewards
|
||||||
received.add(reward.getId());
|
|
||||||
rewards.add(reward.getItemId(), reward.getItemQty());
|
rewards.add(reward.getItemId(), reward.getItemQty());
|
||||||
|
|
||||||
|
// Mark as received
|
||||||
|
receivedIds.add(reward.getId());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return rewards;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public PlayerChangeInfo claimPotentialBookRewards() {
|
||||||
|
var received = new IntArrayList();
|
||||||
|
var rewards = this.collectPotentialBookRewards(received);
|
||||||
|
|
||||||
if (rewards.isEmpty()) {
|
if (rewards.isEmpty()) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|||||||
+14
-3
@@ -1,5 +1,6 @@
|
|||||||
package emu.nebula.server.handlers;
|
package emu.nebula.server.handlers;
|
||||||
|
|
||||||
|
import emu.nebula.game.player.PlayerChangeInfo;
|
||||||
import emu.nebula.net.NetHandler;
|
import emu.nebula.net.NetHandler;
|
||||||
import emu.nebula.net.NetMsgId;
|
import emu.nebula.net.NetMsgId;
|
||||||
import emu.nebula.proto.Public.UI32;
|
import emu.nebula.proto.Public.UI32;
|
||||||
@@ -13,16 +14,26 @@ public class HandlerStarTowerBookPotentialRewardReceiveReq extends NetHandler {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public byte[] handle(GameSession session, byte[] message) throws Exception {
|
public byte[] handle(GameSession session, byte[] message) throws Exception {
|
||||||
// Parse character id
|
// Parse character id, 0 means claim for all characters
|
||||||
var req = UI32.parseFrom(message);
|
var req = UI32.parseFrom(message);
|
||||||
var character = session.getPlayer().getCharacters().getCharacterById(req.getValue());
|
int charId = req.getValue();
|
||||||
|
|
||||||
|
PlayerChangeInfo change;
|
||||||
|
|
||||||
|
if (charId > 0) {
|
||||||
|
// Get character
|
||||||
|
var character = session.getPlayer().getCharacters().getCharacterById(charId);
|
||||||
|
|
||||||
if (character == null) {
|
if (character == null) {
|
||||||
return session.encodeMsg(NetMsgId.star_tower_book_potential_reward_receive_failed_ack);
|
return session.encodeMsg(NetMsgId.star_tower_book_potential_reward_receive_failed_ack);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Claim rewards
|
// Claim rewards
|
||||||
var change = character.claimPotentialBookRewards();
|
change = character.claimPotentialBookRewards();
|
||||||
|
} else {
|
||||||
|
// Claim rewards for all characters
|
||||||
|
change = session.getPlayer().getCharacters().claimAllPotentialBookRewards();
|
||||||
|
}
|
||||||
|
|
||||||
if (change == null) {
|
if (change == null) {
|
||||||
return session.encodeMsg(NetMsgId.star_tower_book_potential_reward_receive_failed_ack);
|
return session.encodeMsg(NetMsgId.star_tower_book_potential_reward_receive_failed_ack);
|
||||||
|
|||||||
Reference in new issue
Block a user