4 Commits

Author SHA1 Message Date
beeaad0034 Version 1.4.6-dev [skip actions] 2023-01-10 23:28:29 +00:00
2be002057e Version 1.4.5
Update languages [skip actions]
Fix whitespace [skip actions]
Unlock hidden points (#2016)
Clean-Up Startup Sequence
Output the handbook based off the client language (#1993)
Update gc to 3.3 (#1981)
2023-01-10 23:28:29 +00:00
4213cf6dea Update languages [skip actions] 2023-01-10 23:28:29 +00:00
5287882f45 Fix whitespace [skip actions] 2023-01-10 23:28:28 +00:00
22 changed files with 298 additions and 297 deletions

View File

@ -43,7 +43,7 @@ sourceCompatibility = JavaVersion.VERSION_17
targetCompatibility = JavaVersion.VERSION_17 targetCompatibility = JavaVersion.VERSION_17
group = 'xyz.grasscutters' group = 'xyz.grasscutters'
version = '1.4.5-dev' version = '1.4.6-dev'
sourceCompatibility = 17 sourceCompatibility = 17
targetCompatibility = 17 targetCompatibility = 17

View File

@ -8,31 +8,31 @@ import java.util.stream.Stream;
@Retention(RetentionPolicy.RUNTIME) @Retention(RetentionPolicy.RUNTIME)
public @interface ResourceType { public @interface ResourceType {
/** Names of the file that this Resource loads from */ /** Names of the file that this Resource loads from */
String[] name(); String[] name();
/** Load priority - dictates which order to load this resource, with "highest" being loaded first */ /** Load priority - dictates which order to load this resource, with "highest" being loaded first */
LoadPriority loadPriority() default LoadPriority.NORMAL; LoadPriority loadPriority() default LoadPriority.NORMAL;
public enum LoadPriority { public enum LoadPriority {
HIGHEST (4), HIGHEST (4),
HIGH (3), HIGH (3),
NORMAL (2), NORMAL (2),
LOW (1), LOW (1),
LOWEST (0); LOWEST (0);
private final int value; private final int value;
LoadPriority(int value) { LoadPriority(int value) {
this.value = value; this.value = value;
} }
public int value() { public int value() {
return value; return value;
} }
public static List<LoadPriority> getInOrder() { public static List<LoadPriority> getInOrder() {
return Stream.of(LoadPriority.values()).sorted((x, y) -> y.value() - x.value()).toList(); return Stream.of(LoadPriority.values()).sorted((x, y) -> y.value() - x.value()).toList();
} }
} }
} }

View File

@ -32,12 +32,12 @@ public class MusicGameBeatmap {
List<List<BeatmapNote>> beatmap; List<List<BeatmapNote>> beatmap;
public static MusicGameBeatmap getByShareId(long musicShareId){ public static MusicGameBeatmap getByShareId(long musicShareId) {
return DatabaseHelper.getMusicGameBeatmap(musicShareId); return DatabaseHelper.getMusicGameBeatmap(musicShareId);
} }
public void save(){ public void save() {
if(musicShareId == 0){ if (musicShareId == 0) {
musicShareId = new Random().nextLong(100000000000000L,999999999999999L); musicShareId = new Random().nextLong(100000000000000L,999999999999999L);
} }
DatabaseHelper.saveMusicGameBeatmap(this); DatabaseHelper.saveMusicGameBeatmap(this);
@ -51,7 +51,7 @@ public class MusicGameBeatmap {
.toList(); .toList();
} }
public UgcMusicRecordOuterClass.UgcMusicRecord toProto(){ public UgcMusicRecordOuterClass.UgcMusicRecord toProto() {
return UgcMusicRecordOuterClass.UgcMusicRecord.newBuilder() return UgcMusicRecordOuterClass.UgcMusicRecord.newBuilder()
.setMusicId(musicId) .setMusicId(musicId)
.addAllMusicTrackList(beatmap.stream() .addAllMusicTrackList(beatmap.stream()
@ -60,7 +60,7 @@ public class MusicGameBeatmap {
.build(); .build();
} }
public UgcMusicBriefInfoOuterClass.UgcMusicBriefInfo.Builder toBriefProto(){ public UgcMusicBriefInfoOuterClass.UgcMusicBriefInfo.Builder toBriefProto() {
var player = DatabaseHelper.getPlayerByUid(authorUid); var player = DatabaseHelper.getPlayerByUid(authorUid);
return UgcMusicBriefInfoOuterClass.UgcMusicBriefInfo.newBuilder() return UgcMusicBriefInfoOuterClass.UgcMusicBriefInfo.newBuilder()
@ -73,7 +73,7 @@ public class MusicGameBeatmap {
.setVersion(1); .setVersion(1);
} }
private UgcMusicTrackOuterClass.UgcMusicTrack musicBeatmapListToProto(List<BeatmapNote> beatmapNoteList){ private UgcMusicTrackOuterClass.UgcMusicTrack musicBeatmapListToProto(List<BeatmapNote> beatmapNoteList) {
return UgcMusicTrackOuterClass.UgcMusicTrack.newBuilder() return UgcMusicTrackOuterClass.UgcMusicTrack.newBuilder()
.addAllMusicNoteList(beatmapNoteList.stream() .addAllMusicNoteList(beatmapNoteList.stream()
.map(BeatmapNote::toProto) .map(BeatmapNote::toProto)
@ -89,14 +89,14 @@ public class MusicGameBeatmap {
int startTime; int startTime;
int endTime; int endTime;
public static BeatmapNote parse(UgcMusicNoteOuterClass.UgcMusicNote note){ public static BeatmapNote parse(UgcMusicNoteOuterClass.UgcMusicNote note) {
return BeatmapNote.of() return BeatmapNote.of()
.startTime(note.getStartTime()) .startTime(note.getStartTime())
.endTime(note.getEndTime()) .endTime(note.getEndTime())
.build(); .build();
} }
public UgcMusicNoteOuterClass.UgcMusicNote toProto(){ public UgcMusicNoteOuterClass.UgcMusicNote toProto() {
return UgcMusicNoteOuterClass.UgcMusicNote.newBuilder() return UgcMusicNoteOuterClass.UgcMusicNote.newBuilder()
.setStartTime(startTime) .setStartTime(startTime)
.setEndTime(endTime) .setEndTime(endTime)

View File

@ -12,98 +12,98 @@ import emu.grasscutter.net.proto.ProfilePictureOuterClass.ProfilePicture;
@Entity(value = "friendships", useDiscriminator = false) @Entity(value = "friendships", useDiscriminator = false)
public class Friendship { public class Friendship {
@Id private ObjectId id; @Id private ObjectId id;
@Transient private Player owner; @Transient private Player owner;
@Indexed private int ownerId; @Indexed private int ownerId;
@Indexed private int friendId; @Indexed private int friendId;
private boolean isFriend; private boolean isFriend;
private int askerId; private int askerId;
private PlayerProfile profile; private PlayerProfile profile;
@Deprecated // Morphia use only @Deprecated // Morphia use only
public Friendship() { } public Friendship() { }
public Friendship(Player owner, Player friend, Player asker) { public Friendship(Player owner, Player friend, Player asker) {
this.setOwner(owner); this.setOwner(owner);
this.ownerId = owner.getUid(); this.ownerId = owner.getUid();
this.friendId = friend.getUid(); this.friendId = friend.getUid();
this.profile = friend.getProfile(); this.profile = friend.getProfile();
this.askerId = asker.getUid(); this.askerId = asker.getUid();
} }
public Player getOwner() { public Player getOwner() {
return owner; return owner;
} }
public void setOwner(Player owner) { public void setOwner(Player owner) {
this.owner = owner; this.owner = owner;
} }
public boolean isFriend() { public boolean isFriend() {
return isFriend; return isFriend;
} }
public void setIsFriend(boolean b) { public void setIsFriend(boolean b) {
this.isFriend = b; this.isFriend = b;
} }
public int getOwnerId() { public int getOwnerId() {
return ownerId; return ownerId;
} }
public int getFriendId() { public int getFriendId() {
return friendId; return friendId;
} }
public int getAskerId() { public int getAskerId() {
return askerId; return askerId;
} }
public void setAskerId(int askerId) { public void setAskerId(int askerId) {
this.askerId = askerId; this.askerId = askerId;
} }
public PlayerProfile getFriendProfile() { public PlayerProfile getFriendProfile() {
return profile; return profile;
} }
public void setFriendProfile(Player character) { public void setFriendProfile(Player character) {
if (character == null || this.friendId != character.getUid()) return; if (character == null || this.friendId != character.getUid()) return;
this.profile = character.getProfile(); this.profile = character.getProfile();
} }
public boolean isOnline() { public boolean isOnline() {
return getFriendProfile().getPlayer() != null; return getFriendProfile().getPlayer() != null;
} }
public void save() { public void save() {
DatabaseHelper.saveFriendship(this); DatabaseHelper.saveFriendship(this);
} }
public void delete() { public void delete() {
DatabaseHelper.deleteFriendship(this); DatabaseHelper.deleteFriendship(this);
} }
public FriendBrief toProto() { public FriendBrief toProto() {
FriendBrief proto = FriendBrief.newBuilder() FriendBrief proto = FriendBrief.newBuilder()
.setUid(getFriendProfile().getUid()) .setUid(getFriendProfile().getUid())
.setNickname(getFriendProfile().getName()) .setNickname(getFriendProfile().getName())
.setLevel(getFriendProfile().getPlayerLevel()) .setLevel(getFriendProfile().getPlayerLevel())
.setProfilePicture(ProfilePicture.newBuilder().setAvatarId(getFriendProfile().getAvatarId())) .setProfilePicture(ProfilePicture.newBuilder().setAvatarId(getFriendProfile().getAvatarId()))
.setWorldLevel(getFriendProfile().getWorldLevel()) .setWorldLevel(getFriendProfile().getWorldLevel())
.setSignature(getFriendProfile().getSignature()) .setSignature(getFriendProfile().getSignature())
.setOnlineState(getFriendProfile().isOnline() ? FriendOnlineState.FRIEND_ONLINE_STATE_ONLINE : FriendOnlineState.FRIEND_ONLINE_STATE_DISCONNECT) .setOnlineState(getFriendProfile().isOnline() ? FriendOnlineState.FRIEND_ONLINE_STATE_ONLINE : FriendOnlineState.FRIEND_ONLINE_STATE_DISCONNECT)
.setIsMpModeAvailable(true) .setIsMpModeAvailable(true)
.setLastActiveTime(getFriendProfile().getLastActiveTime()) .setLastActiveTime(getFriendProfile().getLastActiveTime())
.setNameCardId(getFriendProfile().getNameCard()) .setNameCardId(getFriendProfile().getNameCard())
.setParam(getFriendProfile().getDaysSinceLogin()) .setParam(getFriendProfile().getDaysSinceLogin())
.setIsGameSource(true) .setIsGameSource(true)
.setPlatformType(PlatformTypeOuterClass.PlatformType.PLATFORM_TYPE_PC) .setPlatformType(PlatformTypeOuterClass.PlatformType.PLATFORM_TYPE_PC)
.build(); .build();
return proto; return proto;
} }
} }

View File

@ -10,15 +10,15 @@ import emu.grasscutter.server.packet.send.*;
@Opcodes(PacketOpcodes.HomeChangeEditModeReq) @Opcodes(PacketOpcodes.HomeChangeEditModeReq)
public class HandlerHomeChangeEditModeReq extends PacketHandler { public class HandlerHomeChangeEditModeReq extends PacketHandler {
@Override @Override
public void handle(GameSession session, byte[] header, byte[] payload) throws Exception { public void handle(GameSession session, byte[] header, byte[] payload) throws Exception {
var req = HomeChangeEditModeReqOuterClass.HomeChangeEditModeReq.parseFrom(payload); var req = HomeChangeEditModeReqOuterClass.HomeChangeEditModeReq.parseFrom(payload);
session.send(new PacketHomePreChangeEditModeNotify(req.getIsEnterEditMode())); session.send(new PacketHomePreChangeEditModeNotify(req.getIsEnterEditMode()));
session.send(new PacketHomeBasicInfoNotify(session.getPlayer(), req.getIsEnterEditMode())); session.send(new PacketHomeBasicInfoNotify(session.getPlayer(), req.getIsEnterEditMode()));
session.send(new PacketHomeComfortInfoNotify(session.getPlayer())); session.send(new PacketHomeComfortInfoNotify(session.getPlayer()));
session.send(new PacketHomeChangeEditModeRsp(req.getIsEnterEditMode())); session.send(new PacketHomeChangeEditModeRsp(req.getIsEnterEditMode()));
} }
} }

View File

@ -36,7 +36,7 @@
// musicGameBeatmap.save(); // musicGameBeatmap.save();
// //
// var playerData = session.getPlayer().getActivityManager().getPlayerActivityDataByActivityType(ActivityType.NEW_ACTIVITY_MUSIC_GAME); // var playerData = session.getPlayer().getActivityManager().getPlayerActivityDataByActivityType(ActivityType.NEW_ACTIVITY_MUSIC_GAME);
// if(playerData.isEmpty()){ // if (playerData.isEmpty()) {
// return; // return;
// } // }
// //

View File

@ -17,7 +17,7 @@
// //
// var musicGameBeatmap = MusicGameBeatmap.getByShareId(req.getMusicShareId()); // var musicGameBeatmap = MusicGameBeatmap.getByShareId(req.getMusicShareId());
// //
// if(musicGameBeatmap == null){ // if (musicGameBeatmap == null) {
// return; // return;
// } // }
// //

View File

@ -17,7 +17,7 @@
// //
// var musicGameBeatmap = MusicGameBeatmap.getByShareId(req.getMusicShareId()); // var musicGameBeatmap = MusicGameBeatmap.getByShareId(req.getMusicShareId());
// //
// if(musicGameBeatmap == null){ // if (musicGameBeatmap == null) {
// session.send(new PacketMusicGameSearchBeatmapRsp(11153, req.getUnknownEnum1())); // session.send(new PacketMusicGameSearchBeatmapRsp(11153, req.getUnknownEnum1()));
// return; // return;
// } // }

View File

@ -10,11 +10,11 @@ import emu.grasscutter.server.packet.send.PacketMusicGameStartRsp;
@Opcodes(PacketOpcodes.MusicGameStartReq) @Opcodes(PacketOpcodes.MusicGameStartReq)
public class HandlerMusicGameStartReq extends PacketHandler { public class HandlerMusicGameStartReq extends PacketHandler {
@Override @Override
public void handle(GameSession session, byte[] header, byte[] payload) throws Exception { public void handle(GameSession session, byte[] header, byte[] payload) throws Exception {
var req = MusicGameStartReqOuterClass.MusicGameStartReq.parseFrom(payload); var req = MusicGameStartReqOuterClass.MusicGameStartReq.parseFrom(payload);
session.send(new PacketMusicGameStartRsp(req.getMusicBasicId(), req.getUgcGuid())); session.send(new PacketMusicGameStartRsp(req.getMusicBasicId(), req.getUgcGuid()));
} }
} }

View File

@ -23,7 +23,7 @@ public class PacketEntityFightPropChangeReasonNotify extends BasePacket {
.setReason(reason) .setReason(reason)
.setChangeHpReason(changeHpReason); .setChangeHpReason(changeHpReason);
for(int p : param){ for (int p : param) {
proto.addParamList(p); proto.addParamList(p);
} }

View File

@ -6,14 +6,14 @@ import emu.grasscutter.net.proto.MusicGameStartRspOuterClass;
public class PacketMusicGameStartRsp extends BasePacket { public class PacketMusicGameStartRsp extends BasePacket {
public PacketMusicGameStartRsp(int musicBasicId, long musicShareId) { public PacketMusicGameStartRsp(int musicBasicId, long musicShareId) {
super(PacketOpcodes.MusicGameStartRsp); super(PacketOpcodes.MusicGameStartRsp);
var proto = MusicGameStartRspOuterClass.MusicGameStartRsp.newBuilder(); var proto = MusicGameStartRspOuterClass.MusicGameStartRsp.newBuilder();
proto.setMusicBasicId(musicBasicId) proto.setMusicBasicId(musicBasicId)
.setUgcGuid(musicShareId); .setUgcGuid(musicShareId);
this.setData(proto); this.setData(proto);
} }
} }

View File

@ -8,29 +8,29 @@ import emu.grasscutter.net.proto.PlayerApplyEnterMpResultNotifyOuterClass.Player
public class PacketPlayerApplyEnterMpResultNotify extends BasePacket { public class PacketPlayerApplyEnterMpResultNotify extends BasePacket {
public PacketPlayerApplyEnterMpResultNotify(Player target, boolean isAgreed, PlayerApplyEnterMpResultNotifyOuterClass.PlayerApplyEnterMpResultNotify.Reason reason) { public PacketPlayerApplyEnterMpResultNotify(Player target, boolean isAgreed, PlayerApplyEnterMpResultNotifyOuterClass.PlayerApplyEnterMpResultNotify.Reason reason) {
super(PacketOpcodes.PlayerApplyEnterMpResultNotify); super(PacketOpcodes.PlayerApplyEnterMpResultNotify);
PlayerApplyEnterMpResultNotify proto = PlayerApplyEnterMpResultNotify.newBuilder() PlayerApplyEnterMpResultNotify proto = PlayerApplyEnterMpResultNotify.newBuilder()
.setTargetUid(target.getUid()) .setTargetUid(target.getUid())
.setTargetNickname(target.getNickname()) .setTargetNickname(target.getNickname())
.setIsAgreed(isAgreed) .setIsAgreed(isAgreed)
.setReason(reason) .setReason(reason)
.build(); .build();
this.setData(proto); this.setData(proto);
} }
public PacketPlayerApplyEnterMpResultNotify(int targetId, String targetName, boolean isAgreed, PlayerApplyEnterMpResultNotify.Reason reason) { public PacketPlayerApplyEnterMpResultNotify(int targetId, String targetName, boolean isAgreed, PlayerApplyEnterMpResultNotify.Reason reason) {
super(PacketOpcodes.PlayerApplyEnterMpResultNotify); super(PacketOpcodes.PlayerApplyEnterMpResultNotify);
PlayerApplyEnterMpResultNotify proto = PlayerApplyEnterMpResultNotify.newBuilder() PlayerApplyEnterMpResultNotify proto = PlayerApplyEnterMpResultNotify.newBuilder()
.setTargetUid(targetId) .setTargetUid(targetId)
.setTargetNickname(targetName) .setTargetNickname(targetName)
.setIsAgreed(isAgreed) .setIsAgreed(isAgreed)
.setReason(reason) .setReason(reason)
.build(); .build();
this.setData(proto); this.setData(proto);
} }
} }

View File

@ -8,54 +8,54 @@ import emu.grasscutter.net.proto.PlayerChatNotifyOuterClass.PlayerChatNotify;
public class PacketPlayerChatNotify extends BasePacket { public class PacketPlayerChatNotify extends BasePacket {
public PacketPlayerChatNotify(Player sender, int channelId, String message) { public PacketPlayerChatNotify(Player sender, int channelId, String message) {
super(PacketOpcodes.PlayerChatNotify); super(PacketOpcodes.PlayerChatNotify);
ChatInfo info = ChatInfo.newBuilder() ChatInfo info = ChatInfo.newBuilder()
.setTime((int) (System.currentTimeMillis() / 1000)) .setTime((int) (System.currentTimeMillis() / 1000))
.setUid(sender.getUid()) .setUid(sender.getUid())
.setText(message) .setText(message)
.build(); .build();
PlayerChatNotify proto = PlayerChatNotify.newBuilder() PlayerChatNotify proto = PlayerChatNotify.newBuilder()
.setChannelId(channelId) .setChannelId(channelId)
.setChatInfo(info) .setChatInfo(info)
.build(); .build();
this.setData(proto); this.setData(proto);
} }
public PacketPlayerChatNotify(Player sender, int channelId, int emote) { public PacketPlayerChatNotify(Player sender, int channelId, int emote) {
super(PacketOpcodes.PlayerChatNotify); super(PacketOpcodes.PlayerChatNotify);
ChatInfo info = ChatInfo.newBuilder() ChatInfo info = ChatInfo.newBuilder()
.setTime((int) (System.currentTimeMillis() / 1000)) .setTime((int) (System.currentTimeMillis() / 1000))
.setUid(sender.getUid()) .setUid(sender.getUid())
.setIcon(emote) .setIcon(emote)
.build(); .build();
PlayerChatNotify proto = PlayerChatNotify.newBuilder() PlayerChatNotify proto = PlayerChatNotify.newBuilder()
.setChannelId(channelId) .setChannelId(channelId)
.setChatInfo(info) .setChatInfo(info)
.build(); .build();
this.setData(proto); this.setData(proto);
} }
public PacketPlayerChatNotify(Player sender, int channelId, ChatInfo.SystemHint systemHint) { public PacketPlayerChatNotify(Player sender, int channelId, ChatInfo.SystemHint systemHint) {
super(PacketOpcodes.PlayerChatNotify); super(PacketOpcodes.PlayerChatNotify);
ChatInfo info = ChatInfo.newBuilder() ChatInfo info = ChatInfo.newBuilder()
.setTime((int) (System.currentTimeMillis() / 1000)) .setTime((int) (System.currentTimeMillis() / 1000))
.setUid(sender.getUid()) .setUid(sender.getUid())
.setSystemHint(systemHint) .setSystemHint(systemHint)
.build(); .build();
PlayerChatNotify proto = PlayerChatNotify.newBuilder() PlayerChatNotify proto = PlayerChatNotify.newBuilder()
.setChannelId(channelId) .setChannelId(channelId)
.setChatInfo(info) .setChatInfo(info)
.build(); .build();
this.setData(proto); this.setData(proto);
} }
} }

View File

@ -11,7 +11,7 @@ public class PacketScenePointUnlockNotify extends BasePacket {
ScenePointUnlockNotify.Builder p = ScenePointUnlockNotify.newBuilder() ScenePointUnlockNotify.Builder p = ScenePointUnlockNotify.newBuilder()
.setSceneId(sceneId) .setSceneId(sceneId)
.addPointList(pointId) .addPointList(pointId)
.addUnhidePointList(pointId); .addUnhidePointList(pointId);
this.setData(p); this.setData(p);
} }
@ -22,7 +22,7 @@ public class PacketScenePointUnlockNotify extends BasePacket {
ScenePointUnlockNotify.Builder p = ScenePointUnlockNotify.newBuilder() ScenePointUnlockNotify.Builder p = ScenePointUnlockNotify.newBuilder()
.setSceneId(sceneId) .setSceneId(sceneId)
.addAllPointList(pointIds) .addAllPointList(pointIds)
.addAllUnhidePointList(pointIds); .addAllUnhidePointList(pointIds);
this.setData(p); this.setData(p);
} }

View File

@ -7,17 +7,17 @@ import emu.grasscutter.net.proto.TowerCurLevelRecordOuterClass.TowerCurLevelReco
public class PacketTowerCurLevelRecordChangeNotify extends BasePacket { public class PacketTowerCurLevelRecordChangeNotify extends BasePacket {
public PacketTowerCurLevelRecordChangeNotify(int curFloorId, int curLevelIndex) { public PacketTowerCurLevelRecordChangeNotify(int curFloorId, int curLevelIndex) {
super(PacketOpcodes.TowerCurLevelRecordChangeNotify); super(PacketOpcodes.TowerCurLevelRecordChangeNotify);
TowerCurLevelRecordChangeNotify proto = TowerCurLevelRecordChangeNotify.newBuilder() TowerCurLevelRecordChangeNotify proto = TowerCurLevelRecordChangeNotify.newBuilder()
.setCurLevelRecord(TowerCurLevelRecord.newBuilder() .setCurLevelRecord(TowerCurLevelRecord.newBuilder()
.setCurFloorId(curFloorId) .setCurFloorId(curFloorId)
.setCurLevelIndex(curLevelIndex) .setCurLevelIndex(curLevelIndex)
// TODO team info // TODO team info
.build()) .build())
.build(); .build();
this.setData(proto); this.setData(proto);
} }
} }

View File

@ -7,26 +7,26 @@ import emu.grasscutter.net.proto.TowerLevelStarCondNotifyOuterClass.TowerLevelSt
public class PacketTowerLevelStarCondNotify extends BasePacket { public class PacketTowerLevelStarCondNotify extends BasePacket {
public PacketTowerLevelStarCondNotify(int floorId, int levelIndex) { public PacketTowerLevelStarCondNotify(int floorId, int levelIndex) {
super(PacketOpcodes.TowerLevelStarCondNotify); super(PacketOpcodes.TowerLevelStarCondNotify);
TowerLevelStarCondNotify proto = TowerLevelStarCondNotify.newBuilder() TowerLevelStarCondNotify proto = TowerLevelStarCondNotify.newBuilder()
.setFloorId(floorId) .setFloorId(floorId)
.setLevelIndex(levelIndex) .setLevelIndex(levelIndex)
.addCondDataList(TowerLevelStarCondData.newBuilder() .addCondDataList(TowerLevelStarCondData.newBuilder()
.setCondValue(1) .setCondValue(1)
.build() .build()
) )
.addCondDataList(TowerLevelStarCondData.newBuilder() .addCondDataList(TowerLevelStarCondData.newBuilder()
.setCondValue(2) .setCondValue(2)
.build() .build()
) )
.addCondDataList(TowerLevelStarCondData.newBuilder() .addCondDataList(TowerLevelStarCondData.newBuilder()
.setCondValue(3) .setCondValue(3)
.build() .build()
) )
.build(); .build();
this.setData(proto); this.setData(proto);
} }
} }

View File

@ -364,23 +364,23 @@
}, },
"documentation": { "documentation": {
"handbook": { "handbook": {
"title": "GM Handbook", "title": "🇺🇸GM Handbook",
"title_commands": "Comandos", "title_commands": "Comandos",
"title_avatars": "Avatares", "title_avatars": "Avatares",
"title_items": "Objetos", "title_items": "Objetos",
"title_scenes": "Escenario", "title_scenes": "Escenario",
"title_monsters": "Monstruos", "title_monsters": "Monstruos",
"header_id": "Id", "header_id": "🇺🇸Id",
"header_command": "Comando", "header_command": "Comando",
"header_description": "Descripción", "header_description": "Descripción",
"header_avatar": "Avatar", "header_avatar": "🇺🇸Avatar",
"header_item": "Objeto", "header_item": "Objeto",
"header_scene": "Escenario", "header_scene": "Escenario",
"header_monster": "Monstruo" "header_monster": "Monstruo"
}, },
"index": { "index": {
"title": "Documentación", "title": "Documentación",
"handbook": "GM Handbook", "handbook": "🇺🇸GM Handbook",
"gacha_mapping": "JSON de mapeo del Gacha" "gacha_mapping": "JSON de mapeo del Gacha"
} }
}, },

View File

@ -379,9 +379,9 @@
"header_monster": "Monstre" "header_monster": "Monstre"
}, },
"index": { "index": {
"title": "Documentation", "title": "🇺🇸Documentation",
"handbook": "Manuel GM", "handbook": "Manuel GM",
"gacha_mapping": "Gacha mapping JSON" "gacha_mapping": "🇺🇸Gacha mapping JSON"
} }
}, },
"plugin": { "plugin": {

View File

@ -1,7 +1,7 @@
{ {
"messages": { "messages": {
"game": { "game": {
"address_bind": "Server di gioco avviato su \u001B[1m\u001B[33m%s:%s\u001B[0m", "address_bind": "Server di gioco avviato su \u001b[1m\u001b[33m%s:%s\u001b[0m",
"port_bind": "Server di gioco avviato sulla porta %s", "port_bind": "Server di gioco avviato sulla porta %s",
"connect": "Client connesso da %s", "connect": "Client connesso da %s",
"disconnect": "Client disconnesso da %s", "disconnect": "Client disconnesso da %s",
@ -9,7 +9,7 @@
"command_error": "Errore comando:" "command_error": "Errore comando:"
}, },
"dispatch": { "dispatch": {
"address_bind": "[Dispatch] Dispatch server avviato su \u001B[1m\u001B[33m%s:%s\u001B[0m", "address_bind": "[Dispatch] Dispatch server avviato su \u001b[1m\u001b[33m%s:%s\u001b[0m",
"port_bind": "[Dispatch] Dispatch server avviato sulla porta %s", "port_bind": "[Dispatch] Dispatch server avviato sulla porta %s",
"request": "[Dispatch] Client %s %s richiesta: %s", "request": "[Dispatch] Client %s %s richiesta: %s",
"keystore": { "keystore": {
@ -80,19 +80,19 @@
"set_to": "%s impostato su %s.", "set_to": "%s impostato su %s.",
"set_for_to": "%s per %s impostato su %s.", "set_for_to": "%s per %s impostato su %s.",
"invalid": { "invalid": {
"amount": "Importo non valido.", "amount": "Importo non valido.",
"artifactId": "ID artefatto non valido.", "artifactId": "ID artefatto non valido.",
"avatarId": "ID avatar non valido.", "avatarId": "ID avatar non valido.",
"avatarLevel": "Livello avatar non valido.", "avatarLevel": "Livello avatar non valido.",
"entityId": "ID entità non valido.", "entityId": "ID entità non valido.",
"itemId": "ID articolo non valido.", "itemId": "ID articolo non valido.",
"itemLevel": "ItemLevel non valido.", "itemLevel": "ItemLevel non valido.",
"itemRefinement": "Raffinamento articolo non valido.", "itemRefinement": "Raffinamento articolo non valido.",
"statValue": "Valore statistica non valido.", "statValue": "Valore statistica non valido.",
"value_between": "Valore non valido: %s deve essere compreso tra %s e %s.", "value_between": "Valore non valido: %s deve essere compreso tra %s e %s.",
"playerId": "ID giocatore non valido.", "playerId": "ID giocatore non valido.",
"uid": "UID non valido.", "uid": "UID non valido.",
"id": "ID non valido." "id": "ID non valido."
} }
}, },
"execution": { "execution": {
@ -139,7 +139,8 @@
"displays": "Display cancellati per %s.", "displays": "Display cancellati per %s.",
"virtuals": "Virtuali cancellate per %s.", "virtuals": "Virtuali cancellate per %s.",
"everything": "Cancellato tutto per %s.", "everything": "Cancellato tutto per %s.",
"description": "Elimina gli oggetti sbloccati non equipaggiati dal tuo inventario. Il valore predefinito è 4* livello 1 raffinamento 1 o inferiore, ma può essere impostato su un livello superiore." }, "description": "Elimina gli oggetti sbloccati non equipaggiati dal tuo inventario. Il valore predefinito è 4* livello 1 raffinamento 1 o inferiore, ma può essere impostato su un livello superiore."
},
"coop": { "coop": {
"success": "Convocato %s nel mondo di %s.", "success": "Convocato %s nel mondo di %s.",
"description": "Forza qualcuno a unirsi al mondo degli altri. Se nessuno viene preso di mira, ti manda comunque in modalità cooperativa." "description": "Forza qualcuno a unirsi al mondo degli altri. Se nessuno viene preso di mira, ti manda comunque in modalità cooperativa."
@ -159,7 +160,7 @@
"given_avatar": "Dato %s con livello da %s a %s.", "given_avatar": "Dato %s con livello da %s a %s.",
"giveall_success": "Ha dato tutti gli oggetti con successo.", "giveall_success": "Ha dato tutti gli oggetti con successo.",
"description": "Dà un oggetto a te o al giocatore specificato. Può anche dare tutte le armi, avatar e/o materiali, e può costruire artefatti personalizzati." "description": "Dà un oggetto a te o al giocatore specificato. Può anche dare tutte le armi, avatar e/o materiali, e può costruire artefatti personalizzati."
}, },
"heal": { "heal": {
"success": "Tutti i personaggi sono stati curati.", "success": "Tutti i personaggi sono stati curati.",
"description": "Guarisci tutti i personaggi della tua squadra attuale." "description": "Guarisci tutti i personaggi della tua squadra attuale."
@ -253,35 +254,35 @@
"error": "ERRORE: fase di costruzione %s non valida. Controlla lo stacktrace della console.", "error": "ERRORE: fase di costruzione %s non valida. Controlla lo stacktrace della console.",
"description": "Invia posta all'utente specificato. L'utilizzo di questo comando cambia in base al suo stato di composizione" "description": "Invia posta all'utente specificato. L'utilizzo di questo comando cambia in base al suo stato di composizione"
}, },
"sendMessage": { "sendMessage": {
"success": "Messaggio inviato.", "success": "Messaggio inviato.",
"description": "Invia un messaggio a un giocatore come server. Se usato senza target, invia a tutti i giocatori sul server." "description": "Invia un messaggio a un giocatore come server. Se usato senza target, invia a tutti i giocatori sul server."
}, },
"setConst": { "setConst": {
"range_error": "Il livello della costellazione deve essere compreso tra 0 e 6.", "range_error": "Il livello della costellazione deve essere compreso tra 0 e 6.",
"level_error": "Livello costellazione non valido.", "level_error": "Livello costellazione non valido.",
"fail": "Impossibile impostare la costellazione.", "fail": "Impossibile impostare la costellazione.",
"failed_success": "Le costellazioni per %s sono state impostate su %s. Ricarica la scena per vedere le modifiche.", "failed_success": "Le costellazioni per %s sono state impostate su %s. Ricarica la scena per vedere le modifiche.",
"success": "Le costellazioni per %s sono state impostate su %s.", "success": "Le costellazioni per %s sono state impostate su %s.",
"successall": "Le costellazioni per tutti i personaggi sono state impostate su %s.", "successall": "Le costellazioni per tutti i personaggi sono state impostate su %s.",
"description": "Imposta il livello di costellazione per il tuo attuale personaggio attivo" "description": "Imposta il livello di costellazione per il tuo attuale personaggio attivo"
}, },
"setFetterLevel": { "setFetterLevel": {
"range_error": "Il livello di restrizione deve essere compreso tra 0 e 10.", "range_error": "Il livello di restrizione deve essere compreso tra 0 e 10.",
"success": "Livello di restrizione impostato su %s.", "success": "Livello di restrizione impostato su %s.",
"level_error": "Livello restrizione non valido.", "level_error": "Livello restrizione non valido.",
"description": "Imposta il tuo livello di restrizione per il tuo attuale personaggio attivo" "description": "Imposta il tuo livello di restrizione per il tuo attuale personaggio attivo"
}, },
"setProp": { "setProp": {
"description": "Imposta le proprietà dell'intero account. Cose come godmode possono essere abilitate in questo modo, oltre a cambiare cose come il pavimento dell'abisso sbloccato e il progresso del pass battaglia.\n\tValori per <prop> (senza distinzione tra maiuscole e minuscole): GodMode | UnlimitedStamina | UnlimitedEnergy | TowerLevel | WorldLevel | BPLevel | SetOpenState | UnsetOpenState | UnlockMap\n\t(cont.) vedi PlayerProperty enum per altri possibili valori, nella forma PROP_MAX_SPRING_VOLUME -> max_spring_volume" "description": "Imposta le proprietà dell'intero account. Cose come godmode possono essere abilitate in questo modo, oltre a cambiare cose come il pavimento dell'abisso sbloccato e il progresso del pass battaglia.\n\tValori per <prop> (senza distinzione tra maiuscole e minuscole): GodMode | UnlimitedStamina | UnlimitedEnergy | TowerLevel | WorldLevel | BPLevel | SetOpenState | UnsetOpenState | UnlockMap\n\t(cont.) vedi PlayerProperty enum per altri possibili valori, nella forma PROP_MAX_SPRING_VOLUME -> max_spring_volume"
}, },
"setStats": { "setStats": {
"description": "Imposta la proprietà di combattimento per il tuo personaggio attivo corrente\n\tValori per <stat>: hp | maxhp | def | atk | em | er | crate | cdmg | cdr | heal | heali | shield | defi\n\t(cont.) Elemental DMG Bonus: epyro | ecryo | ehydro | egeo | edendro | eelectro | ephys\n\t(cont.) Elemental RES: respyro | rescryo | reshydro | resgeo | resdendro | reselectro | resphys", "description": "Imposta la proprietà di combattimento per il tuo personaggio attivo corrente\n\tValori per <stat>: hp | maxhp | def | atk | em | er | crate | cdmg | cdr | heal | heali | shield | defi\n\t(cont.) Elemental DMG Bonus: epyro | ecryo | ehydro | egeo | edendro | eelectro | ephys\n\t(cont.) Elemental RES: respyro | rescryo | reshydro | resgeo | resdendro | reselectro | resphys",
"locked_to": "%s bloccato su %s.", "locked_to": "%s bloccato su %s.",
"locked_for_to": "%s per %s bloccato su %s.", "locked_for_to": "%s per %s bloccato su %s.",
"unlocked": "%s sbloccato.", "unlocked": "%s sbloccato.",
"unlocked_for": "%s per %s sbloccato." "unlocked_for": "%s per %s sbloccato."
}, },
"spawn": { "spawn": {
"success": "Evocati %s di %s.", "success": "Evocati %s di %s.",
"limit_reached": "Limite di evocazione della scena raggiunto. Generazione invece di %s entità.", "limit_reached": "Limite di evocazione della scena raggiunto. Generazione invece di %s entità.",
@ -356,7 +357,7 @@
"available_three_stars": "Articoli a 3 stelle disponibili" "available_three_stars": "Articoli a 3 stelle disponibili"
}, },
"records": { "records": {
"title": "Gacha Records", "title": "🇺🇸Gacha Records",
"date": "Data", "date": "Data",
"item": "oggetto" "item": "oggetto"
} }
@ -372,7 +373,7 @@
"header_id": "ID", "header_id": "ID",
"header_command": "Comando", "header_command": "Comando",
"header_description": "Descrizione", "header_description": "Descrizione",
"header_avatar": "Avatar", "header_avatar": "🇺🇸Avatar",
"header_item": "Articolo", "header_item": "Articolo",
"header_scene": "Scena", "header_scene": "Scena",
"header_monster": "Mostro" "header_monster": "Mostro"
@ -384,19 +385,19 @@
} }
}, },
"plugin": { "plugin": {
"directory_failed": "Impossibile creare la directory dei plugin: ", "directory_failed": "Impossibile creare la directory dei plugin: ",
"unable_to_load": "Impossibile caricare il plug-in.", "unable_to_load": "Impossibile caricare il plug-in.",
"invalid_config": "Il plug-in %s ha un file di configurazione non valido.", "invalid_config": "Il plug-in %s ha un file di configurazione non valido.",
"invalid_main_class": "Il plug-in %s ha una classe principale non valida.", "invalid_main_class": "Il plug-in %s ha una classe principale non valida.",
"missing_config": "Il plug-in %s non ha un file di configurazione valido.", "missing_config": "Il plug-in %s non ha un file di configurazione valido.",
"failed_to_load_plugin": "Impossibile caricare il plug-in: %s", "failed_to_load_plugin": "Impossibile caricare il plug-in: %s",
"failed_to_load": "Impossibile caricare un plug-in.", "failed_to_load": "Impossibile caricare un plug-in.",
"failed_to_load_dependencies": "Impossibile caricare i plugin con le dipendenze.", "failed_to_load_dependencies": "Impossibile caricare i plugin con le dipendenze.",
"loading_plugin": "Caricamento plug-in: %s", "loading_plugin": "Caricamento plug-in: %s",
"failed_add_id": "Impossibile aggiungere l'identificatore del plug-in: %s", "failed_add_id": "Impossibile aggiungere l'identificatore del plug-in: %s",
"enabling_plugin": "Abilitazione plug-in: %s", "enabling_plugin": "Abilitazione plug-in: %s",
"enabling_failed": "Impossibile abilitare il plug-in: %s", "enabling_failed": "Impossibile abilitare il plug-in: %s",
"disabling_plugin": "Disabilitazione plug-in: %s", "disabling_plugin": "Disabilitazione plug-in: %s",
"disabling_failed": "Impossibile disabilitare il plug-in: %s" "disabling_failed": "Impossibile disabilitare il plug-in: %s"
} }
} }

View File

@ -247,10 +247,10 @@
"set_message_sender": "메세지 발송자가 '%s'으로 설정되었습니다.\n계속하려면 '/sendmail <itemID|itemName|finish> [amount] [level]'을 사용하십시오.", "set_message_sender": "메세지 발송자가 '%s'으로 설정되었습니다.\n계속하려면 '/sendmail <itemID|itemName|finish> [amount] [level]'을 사용하십시오.",
"send": "%s 의 %s을 (레벨 %s)을 메세지에 첨부했습니다.\n계속 항목을 추가하거나, '/sendmail finish'을 사용해 메세지를 보낼 수 있습니다..", "send": "%s 의 %s을 (레벨 %s)을 메세지에 첨부했습니다.\n계속 항목을 추가하거나, '/sendmail finish'을 사용해 메세지를 보낼 수 있습니다..",
"invalid_arguments_please_use": "잘못된 인수입니다.\n '/sendmail %s'을 사용하십시오", "invalid_arguments_please_use": "잘못된 인수입니다.\n '/sendmail %s'을 사용하십시오",
"title": "<title>", "title": "🇺🇸<title>",
"message": "<message>", "message": "🇺🇸<message>",
"sender": "<sender>", "sender": "🇺🇸<sender>",
"arguments": "<itemID|itemName|finish> [amount] [level]", "arguments": "🇺🇸<itemID|itemName|finish> [amount] [level]",
"error": "오류: 잘못된 시공 단계 %s. Console에서 스택을 확인하십시오.", "error": "오류: 잘못된 시공 단계 %s. Console에서 스택을 확인하십시오.",
"description": "지정된 사용자에게 메세지를 보냅니다. 이 명령어의 사용법은 세부 내용에 따라 달라집니다." "description": "지정된 사용자에게 메세지를 보냅니다. 이 명령어의 사용법은 세부 내용에 따라 달라집니다."
}, },
@ -380,8 +380,8 @@
}, },
"index": { "index": {
"title": "문서", "title": "문서",
"handbook": "GM Handbook", "handbook": "🇺🇸GM Handbook",
"gacha_mapping": "Gacha mapping JSON" "gacha_mapping": "🇺🇸Gacha mapping JSON"
} }
}, },
"plugin": { "plugin": {