mirror of
https://github.com/Grasscutters/Grasscutter.git
synced 2025-06-26 18:14:50 +08:00
Compare commits
No commits in common. "23d7ef8378a8d7ea6524053613ec2f4ab4e94958" and "ed9170f34095df30acea450128c881517ece31ea" have entirely different histories.
23d7ef8378
...
ed9170f340
@ -7,7 +7,7 @@
|
||||
|
||||
**Attention:** De nouveaux contributeurs sont toujours les bienvenus. Avant d'ajouter votre contribution, veuillez lire le [code de conduite](https://github.com/Grasscutters/Grasscutter/blob/stable/CONTRIBUTING.md).
|
||||
|
||||
## Fonctionnalités actuelles :
|
||||
## Fonctionalités actuelles :
|
||||
|
||||
* Connection
|
||||
* Combat
|
||||
@ -20,7 +20,7 @@
|
||||
|
||||
## Guide de démarrage rapide
|
||||
|
||||
**Note:** Pour obtenir un support, rejoignez notre serveur [Discord](https://discord.gg/T5vZU6UyeG) (en anglais).
|
||||
**Note:** Pour obtenir un support, rejoignez notre serveur Discord [Discord](https://discord.gg/T5vZU6UyeG) (en anglais).
|
||||
|
||||
### Logiciels requis
|
||||
|
||||
@ -61,7 +61,7 @@
|
||||
certutil -addstore root %USERPROFILE%\.mitmproxy\mitmproxy-ca-cert.cer
|
||||
```
|
||||
|
||||
- Fiddler Classic: Exécutez Fiddler Classic, Activez `Decrypt https traffic` dans les paramètres et changez le port par défaut ici (Tools -> Options -> Connections) à autre chose que `8888`, et chargez [ce script](https://github.lunatic.moe/fiddlerscript).
|
||||
- Fiddler Classic: Exécutez Fiddler Classic, Activez `Decrypt https traffic` dans les paramàtres et changez le port par défaut ici (Tools -> Options -> Connections) à autre chose que `8888`, et chargez [ce script](https://github.lunatic.moe/fiddlerscript).
|
||||
|
||||
- [Fichier hosts](https://github.com/Melledy/Grasscutter/wiki/Running#traffic-route-map)
|
||||
|
||||
|
@ -1,15 +0,0 @@
|
||||
syntax = "proto3";
|
||||
|
||||
option java_package = "emu.grasscutter.net.proto";
|
||||
|
||||
import "BattlePassMission.proto";
|
||||
import "BattlePassSchedule.proto";
|
||||
|
||||
// CmdId: 2618
|
||||
// EnetChannelId: 0
|
||||
// EnetIsReliable: true
|
||||
message BattlePassAllDataNotify {
|
||||
bool have_cur_schedule = 11;
|
||||
BattlePassSchedule cur_schedule = 10;
|
||||
repeated BattlePassMission mission_list = 1;
|
||||
}
|
@ -1,15 +0,0 @@
|
||||
syntax = "proto3";
|
||||
|
||||
option java_package = "emu.grasscutter.net.proto";
|
||||
|
||||
import "ItemParam.proto";
|
||||
|
||||
// CmdId: 2614
|
||||
// EnetChannelId: 0
|
||||
// EnetIsReliable: true
|
||||
message BattlePassBuySuccNotify {
|
||||
uint32 schedule_id = 7;
|
||||
uint32 product_play_type = 9;
|
||||
repeated ItemParam item_list = 6;
|
||||
uint32 add_point = 2;
|
||||
}
|
@ -1,13 +0,0 @@
|
||||
syntax = "proto3";
|
||||
|
||||
option java_package = "emu.grasscutter.net.proto";
|
||||
|
||||
import "BattlePassSchedule.proto";
|
||||
|
||||
// CmdId: 2604
|
||||
// EnetChannelId: 0
|
||||
// EnetIsReliable: true
|
||||
message BattlePassCurScheduleUpdateNotify {
|
||||
bool have_cur_schedule = 9;
|
||||
BattlePassSchedule cur_schedule = 15;
|
||||
}
|
@ -1,9 +0,0 @@
|
||||
syntax = "proto3";
|
||||
|
||||
option java_package = "emu.grasscutter.net.proto";
|
||||
|
||||
message BattlePassCycle {
|
||||
uint32 cycle_idx = 1;
|
||||
uint32 begin_time = 2;
|
||||
uint32 end_time = 3;
|
||||
}
|
@ -1,19 +0,0 @@
|
||||
syntax = "proto3";
|
||||
|
||||
option java_package = "emu.grasscutter.net.proto";
|
||||
|
||||
message BattlePassMission {
|
||||
uint32 mission_id = 1;
|
||||
uint32 cur_progress = 2;
|
||||
uint32 total_progress = 3;
|
||||
uint32 reward_battle_pass_point = 4;
|
||||
uint32 mission_type = 5;
|
||||
MissionStatus mission_status = 6;
|
||||
|
||||
enum MissionStatus {
|
||||
MISSION_STATUS_INVALID = 0;
|
||||
MISSION_STATUS_UNFINISHED = 1;
|
||||
MISSION_STATUS_FINISHED = 2;
|
||||
MISSION_STATUS_POINT_TAKEN = 3;
|
||||
}
|
||||
}
|
@ -1,10 +0,0 @@
|
||||
syntax = "proto3";
|
||||
|
||||
option java_package = "emu.grasscutter.net.proto";
|
||||
|
||||
// CmdId: 2643
|
||||
// EnetChannelId: 0
|
||||
// EnetIsReliable: true
|
||||
message BattlePassMissionDelNotify {
|
||||
repeated uint32 del_mission_id_list = 4;
|
||||
}
|
@ -1,12 +0,0 @@
|
||||
syntax = "proto3";
|
||||
|
||||
option java_package = "emu.grasscutter.net.proto";
|
||||
|
||||
import "BattlePassMission.proto";
|
||||
|
||||
// CmdId: 2609
|
||||
// EnetChannelId: 0
|
||||
// EnetIsReliable: true
|
||||
message BattlePassMissionUpdateNotify {
|
||||
repeated BattlePassMission mission_list = 6;
|
||||
}
|
@ -1,9 +0,0 @@
|
||||
syntax = "proto3";
|
||||
|
||||
option java_package = "emu.grasscutter.net.proto";
|
||||
|
||||
message BattlePassProduct {
|
||||
string normal_product_id = 1;
|
||||
string extra_product_id = 2;
|
||||
string upgrade_product_id = 3;
|
||||
}
|
@ -1,11 +0,0 @@
|
||||
syntax = "proto3";
|
||||
|
||||
option java_package = "emu.grasscutter.net.proto";
|
||||
|
||||
import "BattlePassUnlockStatus.proto";
|
||||
|
||||
message BattlePassRewardTag {
|
||||
BattlePassUnlockStatus unlock_status = 1;
|
||||
uint32 level = 2;
|
||||
uint32 reward_id = 3;
|
||||
}
|
@ -1,10 +0,0 @@
|
||||
syntax = "proto3";
|
||||
|
||||
option java_package = "emu.grasscutter.net.proto";
|
||||
|
||||
import "BattlePassRewardTag.proto";
|
||||
|
||||
message BattlePassRewardTakeOption {
|
||||
BattlePassRewardTag tag = 1;
|
||||
uint32 option_idx = 2;
|
||||
}
|
@ -1,24 +0,0 @@
|
||||
syntax = "proto3";
|
||||
|
||||
option java_package = "emu.grasscutter.net.proto";
|
||||
|
||||
import "BattlePassCycle.proto";
|
||||
import "BattlePassProduct.proto";
|
||||
import "BattlePassRewardTag.proto";
|
||||
import "BattlePassUnlockStatus.proto";
|
||||
|
||||
message BattlePassSchedule {
|
||||
uint32 schedule_id = 1;
|
||||
uint32 level = 2;
|
||||
uint32 point = 3;
|
||||
BattlePassUnlockStatus unlock_status = 4;
|
||||
repeated BattlePassRewardTag reward_taken_list = 5;
|
||||
uint32 begin_time = 6;
|
||||
uint32 end_time = 7;
|
||||
BattlePassCycle cur_cycle = 8;
|
||||
bool is_extra_paid_reward_taken = 9;
|
||||
BattlePassProduct product_info = 10;
|
||||
bool is_viewed = 11;
|
||||
uint32 cur_cycle_points = 12;
|
||||
uint32 JPFMGBEBBBJ = 13;
|
||||
}
|
@ -1,9 +0,0 @@
|
||||
syntax = "proto3";
|
||||
|
||||
option java_package = "emu.grasscutter.net.proto";
|
||||
|
||||
enum BattlePassUnlockStatus {
|
||||
BATTLE_PASS_UNLOCK_STATUS_INVALID = 0;
|
||||
BATTLE_PASS_UNLOCK_STATUS_FREE = 1;
|
||||
BATTLE_PASS_UNLOCK_STATUS_PAID = 2;
|
||||
}
|
@ -1,11 +0,0 @@
|
||||
syntax = "proto3";
|
||||
|
||||
option java_package = "emu.grasscutter.net.proto";
|
||||
|
||||
// CmdId: 2612
|
||||
// EnetChannelId: 0
|
||||
// EnetIsReliable: true
|
||||
// IsAllowClient: true
|
||||
message BuyBattlePassLevelReq {
|
||||
uint32 buy_level = 10;
|
||||
}
|
@ -1,11 +0,0 @@
|
||||
syntax = "proto3";
|
||||
|
||||
option java_package = "emu.grasscutter.net.proto";
|
||||
|
||||
// CmdId: 2646
|
||||
// EnetChannelId: 0
|
||||
// EnetIsReliable: true
|
||||
message BuyBattlePassLevelRsp {
|
||||
int32 retcode = 9;
|
||||
uint32 buy_level = 6;
|
||||
}
|
@ -1,11 +0,0 @@
|
||||
syntax = "proto3";
|
||||
|
||||
option java_package = "emu.grasscutter.net.proto";
|
||||
|
||||
// CmdId: 2616
|
||||
// EnetChannelId: 0
|
||||
// EnetIsReliable: true
|
||||
// IsAllowClient: true
|
||||
message GetBattlePassProductReq {
|
||||
uint32 battle_pass_product_play_type = 2;
|
||||
}
|
@ -1,14 +0,0 @@
|
||||
syntax = "proto3";
|
||||
|
||||
option java_package = "emu.grasscutter.net.proto";
|
||||
|
||||
// CmdId: 2601
|
||||
// EnetChannelId: 0
|
||||
// EnetIsReliable: true
|
||||
message GetBattlePassProductRsp {
|
||||
int32 retcode = 13;
|
||||
uint32 battle_pass_product_play_type = 9;
|
||||
uint32 cur_schedule_id = 12;
|
||||
string product_id = 7;
|
||||
string price_tier = 5;
|
||||
}
|
@ -1,11 +0,0 @@
|
||||
syntax = "proto3";
|
||||
|
||||
option java_package = "emu.grasscutter.net.proto";
|
||||
|
||||
// CmdId: 2637
|
||||
// EnetChannelId: 0
|
||||
// EnetIsReliable: true
|
||||
// IsAllowClient: true
|
||||
message SetBattlePassViewedReq {
|
||||
uint32 schedule_id = 6;
|
||||
}
|
@ -1,11 +0,0 @@
|
||||
syntax = "proto3";
|
||||
|
||||
option java_package = "emu.grasscutter.net.proto";
|
||||
|
||||
// CmdId: 2632
|
||||
// EnetChannelId: 0
|
||||
// EnetIsReliable: true
|
||||
message SetBattlePassViewedRsp {
|
||||
int32 retcode = 15;
|
||||
uint32 schedule_id = 10;
|
||||
}
|
@ -1,11 +0,0 @@
|
||||
syntax = "proto3";
|
||||
|
||||
option java_package = "emu.grasscutter.net.proto";
|
||||
|
||||
// CmdId: 2626
|
||||
// EnetChannelId: 0
|
||||
// EnetIsReliable: true
|
||||
// IsAllowClient: true
|
||||
message TakeBattlePassMissionPointReq {
|
||||
repeated uint32 mission_id_list = 7;
|
||||
}
|
@ -1,11 +0,0 @@
|
||||
syntax = "proto3";
|
||||
|
||||
option java_package = "emu.grasscutter.net.proto";
|
||||
|
||||
// CmdId: 2647
|
||||
// EnetChannelId: 0
|
||||
// EnetIsReliable: true
|
||||
message TakeBattlePassMissionPointRsp {
|
||||
int32 retcode = 12;
|
||||
repeated uint32 mission_id_list = 2;
|
||||
}
|
@ -1,13 +0,0 @@
|
||||
syntax = "proto3";
|
||||
|
||||
option java_package = "emu.grasscutter.net.proto";
|
||||
|
||||
import "BattlePassRewardTakeOption.proto";
|
||||
|
||||
// CmdId: 2628
|
||||
// EnetChannelId: 0
|
||||
// EnetIsReliable: true
|
||||
// IsAllowClient: true
|
||||
message TakeBattlePassRewardReq {
|
||||
repeated BattlePassRewardTakeOption take_option_list = 4;
|
||||
}
|
@ -1,15 +0,0 @@
|
||||
syntax = "proto3";
|
||||
|
||||
option java_package = "emu.grasscutter.net.proto";
|
||||
|
||||
import "BattlePassRewardTakeOption.proto";
|
||||
import "ItemParam.proto";
|
||||
|
||||
// CmdId: 2603
|
||||
// EnetChannelId: 0
|
||||
// EnetIsReliable: true
|
||||
message TakeBattlePassRewardRsp {
|
||||
int32 retcode = 2;
|
||||
repeated BattlePassRewardTakeOption take_option_list = 1;
|
||||
repeated ItemParam item_list = 5;
|
||||
}
|
@ -1,23 +0,0 @@
|
||||
package emu.grasscutter.command.commands;
|
||||
|
||||
import emu.grasscutter.command.Command;
|
||||
import emu.grasscutter.command.CommandHandler;
|
||||
import emu.grasscutter.game.player.Player;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
@Command(label = "setbp", usage = "", aliases = "bp",permission = "player.setbp", description = "")
|
||||
public final class SetBPLevelCommand implements CommandHandler {
|
||||
@Override
|
||||
public void execute(Player sender, Player targetPlayer, List<String> args) {
|
||||
if (args.size() < 1) {
|
||||
CommandHandler.sendMessage(sender , "Need a arg");
|
||||
return;
|
||||
}
|
||||
|
||||
int level = Integer.parseInt(args.get(0));
|
||||
|
||||
sender.getBattlePassManager().addPoint(level);
|
||||
sender.getBattlePassManager().updateAwardTakenLevel(0);
|
||||
}
|
||||
}
|
@ -94,8 +94,6 @@ public class GameData {
|
||||
private static final Int2ObjectMap<FurnitureMakeConfigData> furnitureMakeConfigDataMap = new Int2ObjectOpenHashMap<>();
|
||||
private static final Int2ObjectMap<InvestigationMonsterData> investigationMonsterDataMap = new Int2ObjectOpenHashMap<>();
|
||||
private static final Int2ObjectMap<CityData> cityDataMap = new Int2ObjectOpenHashMap<>();
|
||||
private static final Int2ObjectMap<BattlePassMissionExcelConfigData> battlePassMissionExcelConfigDataMap = new Int2ObjectOpenHashMap<>();
|
||||
private static final Int2ObjectMap<BattlePassRewardExcelConfigData> battlePassRewardExcelConfigDataMap = new Int2ObjectOpenHashMap<>();
|
||||
|
||||
// Cache
|
||||
private static Map<Integer, List<Integer>> fetters = new HashMap<>();
|
||||
@ -418,11 +416,4 @@ public class GameData {
|
||||
return cityDataMap;
|
||||
}
|
||||
|
||||
public static Int2ObjectMap<BattlePassMissionExcelConfigData> getBattlePassMissionExcelConfigDataMap() {
|
||||
return battlePassMissionExcelConfigDataMap;
|
||||
}
|
||||
|
||||
public static Int2ObjectMap<BattlePassRewardExcelConfigData> getBattlePassRewardExcelConfigDataMap() {
|
||||
return battlePassRewardExcelConfigDataMap;
|
||||
}
|
||||
}
|
||||
|
@ -1,29 +0,0 @@
|
||||
package emu.grasscutter.data.excels;
|
||||
|
||||
import emu.grasscutter.data.GameResource;
|
||||
import emu.grasscutter.data.ResourceType;
|
||||
import lombok.AccessLevel;
|
||||
import lombok.Getter;
|
||||
import lombok.Setter;
|
||||
import lombok.experimental.FieldDefaults;
|
||||
|
||||
@ResourceType(name = {"BattlePassMissionExcelConfigData.json"})
|
||||
@FieldDefaults(level = AccessLevel.PRIVATE)
|
||||
@Getter
|
||||
@Setter
|
||||
public class BattlePassMissionExcelConfigData extends GameResource {
|
||||
|
||||
private int addPoint;
|
||||
private int id;
|
||||
private int progress;
|
||||
private String refreshType;
|
||||
|
||||
@Override
|
||||
public void onLoad() {
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getId() {
|
||||
return this.id;
|
||||
}
|
||||
}
|
@ -1,27 +0,0 @@
|
||||
package emu.grasscutter.data.excels;
|
||||
|
||||
import emu.grasscutter.data.GameResource;
|
||||
import emu.grasscutter.data.ResourceType;
|
||||
import lombok.Getter;
|
||||
import lombok.Setter;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
@ResourceType(name = "BattlePassRewardExcelConfigData.json")
|
||||
@Getter
|
||||
@Setter
|
||||
public class BattlePassRewardExcelConfigData extends GameResource {
|
||||
private int indexId;
|
||||
private int level;
|
||||
private List<Integer> freeRewardIdList;
|
||||
private List<Integer> paidRewardIdList;
|
||||
|
||||
@Override
|
||||
public int getId() {
|
||||
return this.level;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onLoad() {
|
||||
}
|
||||
}
|
@ -11,7 +11,6 @@ import emu.grasscutter.GameConstants;
|
||||
import emu.grasscutter.Grasscutter;
|
||||
import emu.grasscutter.game.Account;
|
||||
import emu.grasscutter.game.avatar.Avatar;
|
||||
import emu.grasscutter.game.battlepass.BattlePassManager;
|
||||
import emu.grasscutter.game.friends.Friendship;
|
||||
import emu.grasscutter.game.gacha.GachaRecord;
|
||||
import emu.grasscutter.game.home.GameHome;
|
||||
@ -297,27 +296,10 @@ public final class DatabaseHelper {
|
||||
public static boolean deleteQuest(GameMainQuest quest) {
|
||||
return DatabaseManager.getGameDatastore().delete(quest).wasAcknowledged();
|
||||
}
|
||||
|
||||
public static GameHome getHomeByUid(int id) {
|
||||
return DatabaseManager.getGameDatastore().find(GameHome.class).filter(Filters.eq("ownerUid", id)).first();
|
||||
}
|
||||
|
||||
public static void saveHome(GameHome gameHome) {
|
||||
DatabaseManager.getGameDatastore().save(gameHome);
|
||||
}
|
||||
|
||||
public static BattlePassManager loadBattlePass(Player player) {
|
||||
BattlePassManager manager = DatabaseManager.getGameDatastore().find(BattlePassManager.class).filter(Filters.eq("ownerUid", player.getUid())).first();
|
||||
if (manager == null) {
|
||||
manager = new BattlePassManager(player);
|
||||
manager.save();
|
||||
} else {
|
||||
manager.setPlayer(player);
|
||||
}
|
||||
return manager;
|
||||
}
|
||||
|
||||
public static void saveBattlePass(BattlePassManager manager) {
|
||||
DatabaseManager.getGameDatastore().save(manager);
|
||||
}
|
||||
}
|
||||
|
@ -14,7 +14,6 @@ import emu.grasscutter.Grasscutter;
|
||||
import emu.grasscutter.Grasscutter.ServerRunMode;
|
||||
import emu.grasscutter.game.Account;
|
||||
import emu.grasscutter.game.avatar.Avatar;
|
||||
import emu.grasscutter.game.battlepass.BattlePassManager;
|
||||
import emu.grasscutter.game.friends.Friendship;
|
||||
import emu.grasscutter.game.gacha.GachaRecord;
|
||||
import emu.grasscutter.game.home.GameHome;
|
||||
@ -32,7 +31,7 @@ public final class DatabaseManager {
|
||||
|
||||
private static final Class<?>[] mappedClasses = new Class<?>[] {
|
||||
DatabaseCounter.class, Account.class, Player.class, Avatar.class, GameItem.class, Friendship.class,
|
||||
GachaRecord.class, Mail.class, GameMainQuest.class, GameHome.class, BattlePassManager.class
|
||||
GachaRecord.class, Mail.class, GameMainQuest.class, GameHome.class
|
||||
};
|
||||
|
||||
public static Datastore getGameDatastore() {
|
||||
|
@ -208,7 +208,7 @@ public class Account {
|
||||
public boolean removePermission(String permission) {
|
||||
return this.permissions.remove(permission);
|
||||
}
|
||||
|
||||
|
||||
// TODO make unique
|
||||
public String generateLoginToken() {
|
||||
this.token = Utils.bytesToHex(Crypto.createSessionKey(32));
|
||||
|
@ -1,65 +0,0 @@
|
||||
package emu.grasscutter.game.battlepass;
|
||||
|
||||
import org.bson.types.ObjectId;
|
||||
|
||||
import dev.morphia.annotations.Entity;
|
||||
import dev.morphia.annotations.Id;
|
||||
import dev.morphia.annotations.Indexed;
|
||||
import dev.morphia.annotations.Transient;
|
||||
import emu.grasscutter.database.DatabaseHelper;
|
||||
import emu.grasscutter.game.player.Player;
|
||||
import emu.grasscutter.server.packet.send.PacketBattlePassCurScheduleUpdateNotify;
|
||||
|
||||
@Entity(value = "battlepass", useDiscriminator = false)
|
||||
public class BattlePassManager {
|
||||
@Id private ObjectId id;
|
||||
@Transient private Player player;
|
||||
|
||||
@Indexed private int ownerUid;
|
||||
private int point;
|
||||
private int awardTakenLevel;
|
||||
|
||||
@Deprecated // Morphia only
|
||||
public BattlePassManager() {}
|
||||
|
||||
public BattlePassManager(Player player) {
|
||||
this.setPlayer(player);
|
||||
}
|
||||
|
||||
public ObjectId getId() {
|
||||
return id;
|
||||
}
|
||||
|
||||
public Player getPlayer() {
|
||||
return this.player;
|
||||
}
|
||||
|
||||
public void setPlayer(Player player) {
|
||||
this.player = player;
|
||||
this.ownerUid = player.getUid();
|
||||
}
|
||||
|
||||
public int getPoint() {
|
||||
return point;
|
||||
}
|
||||
|
||||
public int getAwardTakenLevel() {
|
||||
return awardTakenLevel;
|
||||
}
|
||||
|
||||
public void addPoint(int point){
|
||||
this.point += point;
|
||||
player.getSession().send(new PacketBattlePassCurScheduleUpdateNotify(player.getSession().getPlayer()));
|
||||
this.save();
|
||||
}
|
||||
|
||||
public void updateAwardTakenLevel(int level){
|
||||
this.awardTakenLevel = level;
|
||||
player.getSession().send(new PacketBattlePassCurScheduleUpdateNotify(player.getSession().getPlayer()));
|
||||
this.save();
|
||||
}
|
||||
|
||||
public void save() {
|
||||
DatabaseHelper.saveBattlePass(this);
|
||||
}
|
||||
}
|
@ -12,7 +12,6 @@ import emu.grasscutter.game.ability.AbilityManager;
|
||||
import emu.grasscutter.game.avatar.Avatar;
|
||||
import emu.grasscutter.game.avatar.AvatarProfileData;
|
||||
import emu.grasscutter.game.avatar.AvatarStorage;
|
||||
import emu.grasscutter.game.battlepass.BattlePassManager;
|
||||
import emu.grasscutter.game.entity.EntityMonster;
|
||||
import emu.grasscutter.game.entity.EntityVehicle;
|
||||
import emu.grasscutter.game.home.GameHome;
|
||||
@ -170,7 +169,6 @@ public class Player {
|
||||
@Transient private DeforestationManager deforestationManager;
|
||||
@Transient private GameHome home;
|
||||
@Transient private FurnitureManager furnitureManager;
|
||||
@Transient private BattlePassManager battlePassManager;
|
||||
|
||||
private long springLastUsed;
|
||||
private HashMap<String, MapMark> mapMarks;
|
||||
@ -1208,15 +1206,6 @@ public class Player {
|
||||
return furnitureManager;
|
||||
}
|
||||
|
||||
public BattlePassManager getBattlePassManager(){
|
||||
return battlePassManager;
|
||||
}
|
||||
|
||||
public void loadBattlePassManager() {
|
||||
if (this.battlePassManager != null) return;
|
||||
this.battlePassManager = DatabaseHelper.loadBattlePass(this);
|
||||
}
|
||||
|
||||
public AbilityManager getAbilityManager() {
|
||||
return abilityManager;
|
||||
}
|
||||
@ -1319,17 +1308,15 @@ public class Player {
|
||||
}
|
||||
//Make sure towerManager's player is online player
|
||||
this.getTowerManager().setPlayer(this);
|
||||
|
||||
// Load from db
|
||||
this.getAvatars().loadFromDatabase();
|
||||
this.getInventory().loadFromDatabase();
|
||||
this.getAvatars().postLoad(); // Needs to be called after inventory is handled
|
||||
this.getAvatars().postLoad();
|
||||
|
||||
this.getFriendsList().loadFromDatabase();
|
||||
this.getMailHandler().loadFromDatabase();
|
||||
this.getQuestManager().loadFromDatabase();
|
||||
|
||||
this.loadBattlePassManager();
|
||||
|
||||
}
|
||||
|
||||
public void onLogin() {
|
||||
@ -1361,7 +1348,6 @@ public class Player {
|
||||
session.send(new PacketPlayerStoreNotify(this));
|
||||
session.send(new PacketAvatarDataNotify(this));
|
||||
session.send(new PacketFinishedParentQuestNotify(this));
|
||||
session.send(new PacketBattlePassAllDataNotify(this));
|
||||
session.send(new PacketQuestListNotify(this));
|
||||
session.send(new PacketCodexDataFullNotify(this));
|
||||
session.send(new PacketAllWidgetDataNotify(this));
|
||||
|
@ -1,25 +0,0 @@
|
||||
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.TakeBattlePassMissionPointReqOuterClass;
|
||||
import emu.grasscutter.server.game.GameSession;
|
||||
import emu.grasscutter.server.packet.send.PacketBattlePassCurScheduleUpdateNotify;
|
||||
import emu.grasscutter.server.packet.send.PacketBattlePassMissionUpdateNotify;
|
||||
import emu.grasscutter.server.packet.send.PacketTakeBattlePassMissionPointRsp;
|
||||
|
||||
@Opcodes(PacketOpcodes.TakeBattlePassMissionPointReq)
|
||||
public class HandlerTakeBattlePassMissionPointReq extends PacketHandler {
|
||||
|
||||
@Override
|
||||
public void handle(GameSession session, byte[] header, byte[] payload) throws Exception {
|
||||
var req
|
||||
= TakeBattlePassMissionPointReqOuterClass.TakeBattlePassMissionPointReq.parseFrom(payload);
|
||||
|
||||
session.send(new PacketBattlePassMissionUpdateNotify(req.getMissionIdListList() , session));
|
||||
session.send(new PacketBattlePassCurScheduleUpdateNotify(session.getPlayer()));
|
||||
session.send(new PacketTakeBattlePassMissionPointRsp());
|
||||
}
|
||||
}
|
@ -1,24 +0,0 @@
|
||||
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.TakeBattlePassRewardReqOuterClass;
|
||||
import emu.grasscutter.server.game.GameSession;
|
||||
import emu.grasscutter.server.packet.send.PacketTakeBattlePassRewardRsp;
|
||||
|
||||
@Opcodes(PacketOpcodes.TakeBattlePassRewardReq)
|
||||
public class HandlerTakeBattlePassRewardReq extends PacketHandler {
|
||||
@Override
|
||||
public void handle(GameSession session, byte[] header, byte[] payload) throws Exception {
|
||||
var req
|
||||
= TakeBattlePassRewardReqOuterClass.TakeBattlePassRewardReq.parseFrom(payload);
|
||||
|
||||
//due to the list only have one element, so we can use get(0)
|
||||
session.send(new PacketTakeBattlePassRewardRsp(req.getTakeOptionListList() , session));
|
||||
|
||||
//update the awardTakenLevel
|
||||
req.getTakeOptionListList().forEach(battlePassRewardTakeOption ->
|
||||
session.getPlayer().getBattlePassManager().updateAwardTakenLevel(battlePassRewardTakeOption.getTag().getLevel()));
|
||||
}
|
||||
}
|
@ -1,63 +0,0 @@
|
||||
package emu.grasscutter.server.packet.send;
|
||||
|
||||
import emu.grasscutter.data.GameData;
|
||||
import emu.grasscutter.game.player.Player;
|
||||
import emu.grasscutter.net.packet.BasePacket;
|
||||
import emu.grasscutter.net.packet.PacketOpcodes;
|
||||
import emu.grasscutter.net.proto.*;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
public class PacketBattlePassAllDataNotify extends BasePacket {
|
||||
public PacketBattlePassAllDataNotify(Player player) {
|
||||
super(PacketOpcodes.BattlePassAllDataNotify);
|
||||
|
||||
var value = player.getBattlePassManager().getPoint();
|
||||
|
||||
int level = (int) Math.floor(value / 1000d);
|
||||
|
||||
var point = value - level * 1000;
|
||||
|
||||
List<BattlePassRewardTagOuterClass.BattlePassRewardTag> rewardTags = new ArrayList<>();
|
||||
|
||||
for (int id = 1; id <= player.getBattlePassManager().getAwardTakenLevel(); id++)
|
||||
rewardTags.add(BattlePassRewardTagOuterClass.BattlePassRewardTag.newBuilder()
|
||||
.setLevel(id)
|
||||
.setUnlockStatus(BattlePassUnlockStatusOuterClass.BattlePassUnlockStatus.BATTLE_PASS_UNLOCK_STATUS_FREE)
|
||||
.setRewardId(1001000 + id)
|
||||
.build());
|
||||
|
||||
|
||||
var proto
|
||||
= BattlePassAllDataNotifyOuterClass.BattlePassAllDataNotify.newBuilder();
|
||||
|
||||
var missions
|
||||
= GameData.getBattlePassMissionExcelConfigDataMap();
|
||||
|
||||
|
||||
var curSchedule
|
||||
= BattlePassScheduleOuterClass.BattlePassSchedule.newBuilder()
|
||||
.setScheduleId(2700).setLevel(level).setPoint(point).setBeginTime(1653940800).setEndTime(2059483200).addAllRewardTakenList(rewardTags)
|
||||
.setIsViewed(true).setUnlockStatus(BattlePassUnlockStatusOuterClass.BattlePassUnlockStatus.BATTLE_PASS_UNLOCK_STATUS_FREE).setCurCyclePoints(0)
|
||||
.setCurCycle(BattlePassCycleOuterClass.BattlePassCycle.newBuilder().setBeginTime(1653940800).setEndTime(2059483200).setCycleIdx(3).build());
|
||||
|
||||
proto.setHaveCurSchedule(true).setCurSchedule(curSchedule);
|
||||
|
||||
|
||||
//TODO: UNFINISHED YET / Need to add mission data --> Hard work
|
||||
|
||||
for (var mission : missions.values())
|
||||
proto.addMissionList(BattlePassMissionOuterClass.BattlePassMission.newBuilder()
|
||||
.setMissionId(mission.getId())
|
||||
.setMissionStatus(BattlePassMissionOuterClass.BattlePassMission.MissionStatus.MISSION_STATUS_UNFINISHED)
|
||||
.setTotalProgress(mission.getProgress())
|
||||
.setMissionType(
|
||||
mission.getRefreshType() == null ? 0 :
|
||||
mission.getRefreshType().equals("BATTLE_PASS_MISSION_REFRESH_SCHEDULE") ? 2 : mission.getRefreshType().contains("CYCLE") ? 1 : 0)
|
||||
.setRewardBattlePassPoint(mission.getAddPoint())
|
||||
.build());
|
||||
|
||||
setData(proto.build());
|
||||
}
|
||||
}
|
@ -1,41 +0,0 @@
|
||||
package emu.grasscutter.server.packet.send;
|
||||
|
||||
import emu.grasscutter.game.player.Player;
|
||||
import emu.grasscutter.net.packet.BasePacket;
|
||||
import emu.grasscutter.net.packet.PacketOpcodes;
|
||||
import emu.grasscutter.net.proto.*;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
public class PacketBattlePassCurScheduleUpdateNotify extends BasePacket {
|
||||
public PacketBattlePassCurScheduleUpdateNotify(Player player) {
|
||||
super(PacketOpcodes.BattlePassCurScheduleUpdateNotify);
|
||||
|
||||
var value = player.getBattlePassManager().getPoint();
|
||||
int level = (int) Math.floor(value / 1000d);
|
||||
var point = value - level * 1000;
|
||||
|
||||
List<BattlePassRewardTagOuterClass.BattlePassRewardTag> rewardTags = new ArrayList<>();
|
||||
|
||||
for (int id = 1; id <= player.getBattlePassManager().getAwardTakenLevel(); id++)
|
||||
rewardTags.add(BattlePassRewardTagOuterClass.BattlePassRewardTag.newBuilder()
|
||||
.setLevel(id)
|
||||
.setUnlockStatus(BattlePassUnlockStatusOuterClass.BattlePassUnlockStatus.BATTLE_PASS_UNLOCK_STATUS_FREE)
|
||||
.setRewardId(1001000 + id)
|
||||
.build());
|
||||
|
||||
var curSchedule
|
||||
= BattlePassScheduleOuterClass.BattlePassSchedule.newBuilder()
|
||||
.setScheduleId(2700).setLevel(level).setPoint(point).setBeginTime(1653940800).setEndTime(2059483200).addAllRewardTakenList(rewardTags)
|
||||
.setIsViewed(true).setUnlockStatus(BattlePassUnlockStatusOuterClass.BattlePassUnlockStatus.BATTLE_PASS_UNLOCK_STATUS_FREE).setCurCyclePoints(0)
|
||||
.setCurCycle(BattlePassCycleOuterClass.BattlePassCycle.newBuilder().setBeginTime(1653940800).setEndTime(2059483200).setCycleIdx(3).build());
|
||||
|
||||
var proto = BattlePassCurScheduleUpdateNotifyOuterClass.BattlePassCurScheduleUpdateNotify.newBuilder();
|
||||
|
||||
proto.setHaveCurSchedule(true).setCurSchedule(curSchedule).build();
|
||||
|
||||
setData(proto.build());
|
||||
|
||||
}
|
||||
}
|
@ -1,40 +0,0 @@
|
||||
package emu.grasscutter.server.packet.send;
|
||||
|
||||
import emu.grasscutter.Grasscutter;
|
||||
import emu.grasscutter.data.GameData;
|
||||
import emu.grasscutter.data.excels.BattlePassMissionExcelConfigData;
|
||||
import emu.grasscutter.net.packet.BasePacket;
|
||||
import emu.grasscutter.net.packet.PacketOpcodes;
|
||||
import emu.grasscutter.net.proto.BattlePassMissionOuterClass;
|
||||
import emu.grasscutter.net.proto.BattlePassMissionUpdateNotifyOuterClass;
|
||||
import emu.grasscutter.server.game.GameSession;
|
||||
import it.unimi.dsi.fastutil.ints.Int2ObjectMap;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
public class PacketBattlePassMissionUpdateNotify extends BasePacket {
|
||||
|
||||
public PacketBattlePassMissionUpdateNotify(List<Integer> missionIdList , GameSession session) {
|
||||
super(PacketOpcodes.BattlePassMissionUpdateNotify);
|
||||
|
||||
var proto
|
||||
= BattlePassMissionUpdateNotifyOuterClass.BattlePassMissionUpdateNotify.newBuilder();
|
||||
|
||||
Map<Integer, BattlePassMissionExcelConfigData> missionMap
|
||||
= GameData.getBattlePassMissionExcelConfigDataMap();
|
||||
|
||||
missionIdList.forEach(missionId -> proto.addMissionList
|
||||
(BattlePassMissionOuterClass.BattlePassMission.newBuilder().setMissionId(missionId).setMissionStatus
|
||||
(BattlePassMissionOuterClass.BattlePassMission.MissionStatus.MISSION_STATUS_POINT_TAKEN)
|
||||
.setTotalProgress(missionMap.get(missionId).getProgress()).setRewardBattlePassPoint(missionMap.get(missionId).getAddPoint()).build()));
|
||||
|
||||
var point = session.getPlayer().getBattlePassManager().getPoint();
|
||||
missionIdList.forEach(missionId
|
||||
-> session.getPlayer().getBattlePassManager().addPoint(missionMap.get(missionId).getAddPoint()));
|
||||
Grasscutter.getLogger().info("[PacketBattlePassMissionUpdateNotify] addPoint: {}", session.getPlayer().getBattlePassManager().getPoint() - point);
|
||||
|
||||
this.setData(proto.build());
|
||||
}
|
||||
|
||||
}
|
@ -28,7 +28,7 @@ public class PacketGetDailyDungeonEntryInfoRsp extends BasePacket {
|
||||
var dungeonEntryId = data.getDungeonEntryId();
|
||||
var id = data.getId();
|
||||
|
||||
// TODO
|
||||
//TODO: 来个爹把这块整活了吧 咚咚咚
|
||||
DungeonEntryInfoOuterClass.DungeonEntryInfo dungeonEntryInfo
|
||||
= DungeonEntryInfoOuterClass.DungeonEntryInfo.newBuilder().setDungeonId(130).build();
|
||||
|
||||
|
@ -1,13 +0,0 @@
|
||||
package emu.grasscutter.server.packet.send;
|
||||
|
||||
import emu.grasscutter.net.packet.BasePacket;
|
||||
import emu.grasscutter.net.packet.PacketOpcodes;
|
||||
import emu.grasscutter.net.proto.TakeBattlePassMissionPointRspOuterClass;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
public class PacketTakeBattlePassMissionPointRsp extends BasePacket {
|
||||
public PacketTakeBattlePassMissionPointRsp() {
|
||||
super(PacketOpcodes.TakeBattlePassMissionPointRsp);
|
||||
}
|
||||
}
|
@ -1,49 +0,0 @@
|
||||
package emu.grasscutter.server.packet.send;
|
||||
|
||||
import emu.grasscutter.Grasscutter;
|
||||
import emu.grasscutter.data.GameData;
|
||||
import emu.grasscutter.data.excels.BattlePassRewardExcelConfigData;
|
||||
import emu.grasscutter.data.excels.RewardData;
|
||||
import emu.grasscutter.net.packet.BasePacket;
|
||||
import emu.grasscutter.net.packet.PacketOpcodes;
|
||||
import emu.grasscutter.net.proto.BattlePassRewardTakeOptionOuterClass;
|
||||
import emu.grasscutter.net.proto.ItemParamOuterClass;
|
||||
import emu.grasscutter.net.proto.TakeBattlePassRewardRspOuterClass;
|
||||
import emu.grasscutter.server.game.GameSession;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
public class PacketTakeBattlePassRewardRsp extends BasePacket {
|
||||
public PacketTakeBattlePassRewardRsp(List<BattlePassRewardTakeOptionOuterClass.BattlePassRewardTakeOption> takeOptionList , GameSession session) {
|
||||
super(PacketOpcodes.TakeBattlePassRewardRsp);
|
||||
|
||||
var proto
|
||||
= TakeBattlePassRewardRspOuterClass.TakeBattlePassRewardRsp.newBuilder();
|
||||
|
||||
Map<Integer , BattlePassRewardExcelConfigData> excelConfigDataMap = GameData.getBattlePassRewardExcelConfigDataMap();
|
||||
Map<Integer , RewardData> rewardDataMap = GameData.getRewardDataMap();
|
||||
|
||||
List<Integer> rewardItemList = new ArrayList<>();
|
||||
|
||||
for (var takeOption : takeOptionList) {
|
||||
for (int level = session.getPlayer().getBattlePassManager().getAwardTakenLevel() + 1 ; level <= takeOption.getTag().getLevel() ; level++){
|
||||
rewardItemList.addAll(excelConfigDataMap.get(level).getFreeRewardIdList());
|
||||
rewardItemList.addAll(excelConfigDataMap.get(level).getPaidRewardIdList());
|
||||
}
|
||||
|
||||
for (var rewardItemId : rewardItemList) {
|
||||
var rewardData = rewardDataMap.get(rewardItemId);
|
||||
if (rewardData == null) continue;
|
||||
rewardData.getRewardItemList().forEach(i ->
|
||||
proto.addItemList(ItemParamOuterClass.ItemParam.newBuilder().setItemId(i.getId()).setCount(i.getCount()).build()));
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
proto.addAllTakeOptionList(takeOptionList).build();
|
||||
|
||||
setData(proto);
|
||||
}
|
||||
}
|
@ -7,25 +7,44 @@
|
||||
"previewPrefabPath": "UI_Tab_GachaShowPanel_A022",
|
||||
"titlePath": "UI_GACHA_SHOW_PANEL_A022_TITLE",
|
||||
"costItemId": 224,
|
||||
"costItemAmount": 1,
|
||||
"costItemAmount10": 10,
|
||||
"beginTime": 0,
|
||||
"endTime": 1924992000,
|
||||
"sortId": 1000,
|
||||
"fallbackItems4Pool1": [1006, 1014, 1015, 1020, 1021, 1023, 1024, 1025, 1027, 1031, 1032, 1034, 1036, 1039, 1043, 1044, 1045, 1048, 1053, 1055, 1056, 1064],
|
||||
"weights4": [[1,510], [8,510], [10,10000]],
|
||||
"weights5": [[1,75], [73,150], [90,10000]]
|
||||
},
|
||||
{
|
||||
"gachaType": 301,
|
||||
"scheduleId": 903,
|
||||
"bannerType": "EVENT",
|
||||
"prefabPath": "GachaShowPanel_A084",
|
||||
"previewPrefabPath": "UI_Tab_GachaShowPanel_A084",
|
||||
"titlePath": "UI_GACHA_SHOW_PANEL_A061_TITLE",
|
||||
"prefabPath": "GachaShowPanel_A081",
|
||||
"previewPrefabPath": "UI_Tab_GachaShowPanel_A081",
|
||||
"titlePath": "UI_GACHA_SHOW_PANEL_A081_TITLE",
|
||||
"costItemId": 223,
|
||||
"beginTime": 0,
|
||||
"endTime": 1924992000,
|
||||
"sortId": 9999,
|
||||
"rateUpItems4": [1065, 1036, 1055],
|
||||
"rateUpItems5": [1057],
|
||||
"sortId": 9998,
|
||||
"rateUpItems4": [1034, 1014, 1048],
|
||||
"rateUpItems5": [1060],
|
||||
"fallbackItems5Pool2": [],
|
||||
"weights5": [[1,80], [73,80], [90,10000]]
|
||||
},
|
||||
{
|
||||
"gachaType": 400,
|
||||
"scheduleId": 923,
|
||||
"bannerType": "EVENT",
|
||||
"prefabPath": "GachaShowPanel_A082",
|
||||
"previewPrefabPath": "UI_Tab_GachaShowPanel_A082",
|
||||
"titlePath": "UI_GACHA_SHOW_PANEL_A031_TITLE",
|
||||
"costItemId": 223,
|
||||
"beginTime": 0,
|
||||
"endTime": 1924992000,
|
||||
"sortId": 9998,
|
||||
"rateUpItems4": [1034, 1014, 1048],
|
||||
"rateUpItems5": [1026],
|
||||
"fallbackItems5Pool2": [],
|
||||
"weights5": [[1,80], [73,80], [90,10000]]
|
||||
},
|
||||
@ -33,19 +52,20 @@
|
||||
"gachaType": 302,
|
||||
"scheduleId": 913,
|
||||
"bannerType": "WEAPON",
|
||||
"prefabPath": "GachaShowPanel_A085",
|
||||
"previewPrefabPath": "UI_Tab_GachaShowPanel_A085",
|
||||
"titlePath": "UI_GACHA_SHOW_PANEL_A013_TITLE",
|
||||
"prefabPath": "GachaShowPanel_A083",
|
||||
"previewPrefabPath": "UI_Tab_GachaShowPanel_A083",
|
||||
"titlePath": "UI_GACHA_SHOW_PANEL_A021_TITLE",
|
||||
"costItemId": 223,
|
||||
"beginTime": 0,
|
||||
"endTime": 1924992000,
|
||||
"sortId": 9998,
|
||||
"rateUpItems4": [12410, 11405, 13401, 14403, 15402],
|
||||
"rateUpItems5": [12510, 14504],
|
||||
"sortId": 9997,
|
||||
"eventChance": 75,
|
||||
"softPity": 80,
|
||||
"hardPity": 80,
|
||||
"rateUpItems4": [11403, 12401, 13406, 14409, 15403],
|
||||
"rateUpItems5": [15508, 13505],
|
||||
"fallbackItems5Pool1": [],
|
||||
"weights4": [[1,600], [7,600], [8,6600], [10,12600]],
|
||||
"weights5": [[1,100], [62,100], [73,7800], [80,10000]],
|
||||
"eventChance4": 75,
|
||||
"eventChance5": 75
|
||||
"weights4": [[1,600], [7,600], [8, 6600], [10,12600]],
|
||||
"weights5": [[1,100], [62,100], [73, 7800], [80,10000]]
|
||||
}
|
||||
]
|
||||
|
@ -391,21 +391,6 @@
|
||||
"success": "Le type de climat a été changé à %s avec le type de météo %s.",
|
||||
"invalid_id": "ID invalide.",
|
||||
"description": "Change la météo"
|
||||
},
|
||||
"ban": {
|
||||
"description": "Bannis un joueur",
|
||||
"success": "Succès.",
|
||||
"failure": "Échec, joueur introuvable.",
|
||||
"invalid_time": "Impossible d'analyser le timestamp.",
|
||||
"invalid_player_id": "Impossible d'analyser le player ID.",
|
||||
"command_usage": "Usage: ban <playerId> [timestamp] [raison]"
|
||||
},
|
||||
"unban": {
|
||||
"description": "Retire le bannissement d'un joueur",
|
||||
"success": "Succès.",
|
||||
"failure": "Échec, joueur introuvable.",
|
||||
"invalid_player_id": "Imossible d'analyser player ID.",
|
||||
"command_usage": "Usage: unban <playerId>"
|
||||
}
|
||||
},
|
||||
"gacha": {
|
||||
|
Loading…
x
Reference in New Issue
Block a user