mirror of
https://github.com/Grasscutters/Grasscutter.git
synced 2026-02-07 18:46:49 +01:00
Create files from Grasscutter-Quests
these files are NOT directly compatible with Grasscutter, and require additional modifications to the codebase to work.
This commit is contained in:
@@ -0,0 +1,4 @@
|
||||
package emu.grasscutter.data.binout.config;
|
||||
|
||||
public class ConfigEntityAvatar extends ConfigEntityBase {
|
||||
}
|
||||
@@ -0,0 +1,21 @@
|
||||
package emu.grasscutter.data.binout.config;
|
||||
|
||||
import emu.grasscutter.data.binout.config.fields.ConfigAbilityData;
|
||||
import emu.grasscutter.data.binout.config.fields.ConfigCombat;
|
||||
import emu.grasscutter.data.binout.config.fields.ConfigCommon;
|
||||
import emu.grasscutter.data.binout.config.fields.ConfigGlobalValue;
|
||||
import lombok.Data;
|
||||
|
||||
import javax.annotation.Nullable;
|
||||
import java.util.Collection;
|
||||
|
||||
@Data
|
||||
public class ConfigEntityBase {
|
||||
@Nullable
|
||||
ConfigCommon configCommon;
|
||||
@Nullable
|
||||
ConfigCombat combat;
|
||||
Collection<ConfigAbilityData> abilities;
|
||||
ConfigGlobalValue globalValue; // used for SGV in monsters and Gadgets
|
||||
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
package emu.grasscutter.data.binout.config;
|
||||
|
||||
import lombok.AccessLevel;
|
||||
import lombok.Data;
|
||||
import lombok.experimental.FieldDefaults;
|
||||
|
||||
@Data
|
||||
@FieldDefaults(level = AccessLevel.PRIVATE)
|
||||
public class ConfigEntityGadget extends ConfigEntityBase {
|
||||
// There are more values that can be added that might be useful in the json
|
||||
}
|
||||
@@ -0,0 +1,7 @@
|
||||
package emu.grasscutter.data.binout.config;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
@Data
|
||||
public class ConfigEntityMonster extends ConfigEntityBase {
|
||||
}
|
||||
@@ -0,0 +1,14 @@
|
||||
package emu.grasscutter.data.binout.config;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import emu.grasscutter.data.binout.config.fields.ConfigAbilityData;
|
||||
import lombok.Getter;
|
||||
|
||||
public class ConfigLevelEntity {
|
||||
|
||||
@Getter private List<ConfigAbilityData> abilities; //monster abilities
|
||||
@Getter private List<ConfigAbilityData> avatarAbilities;
|
||||
@Getter private List<ConfigAbilityData> teamAbilities;
|
||||
@Getter private List<Integer> preloadMonsterEntityIDs;
|
||||
}
|
||||
@@ -0,0 +1,10 @@
|
||||
package emu.grasscutter.data.binout.config.fields;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
@Data
|
||||
public class ConfigAbilityData {
|
||||
public String abilityID;
|
||||
public String abilityName;
|
||||
public String abilityOverride;
|
||||
}
|
||||
@@ -0,0 +1,8 @@
|
||||
package emu.grasscutter.data.binout.config.fields;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
@Data
|
||||
public class ConfigAiBeta {
|
||||
boolean enable;
|
||||
}
|
||||
@@ -0,0 +1,12 @@
|
||||
package emu.grasscutter.data.binout.config.fields;
|
||||
|
||||
import lombok.AccessLevel;
|
||||
import lombok.Data;
|
||||
import lombok.experimental.FieldDefaults;
|
||||
|
||||
@Data
|
||||
@FieldDefaults(level = AccessLevel.PRIVATE)
|
||||
public class ConfigCombat {
|
||||
// There are more values that can be added that might be useful in the json
|
||||
ConfigCombatProperty property;
|
||||
}
|
||||
@@ -0,0 +1,15 @@
|
||||
package emu.grasscutter.data.binout.config.fields;
|
||||
|
||||
import com.google.gson.annotations.SerializedName;
|
||||
import lombok.AccessLevel;
|
||||
import lombok.Data;
|
||||
import lombok.experimental.FieldDefaults;
|
||||
|
||||
@Data
|
||||
@FieldDefaults(level = AccessLevel.PRIVATE)
|
||||
public class ConfigCombatDie {
|
||||
@SerializedName(value="dieEndTime", alternate={"HGGPMFGGBNC"})
|
||||
double dieEndTime;
|
||||
double dieForceDisappearTime;
|
||||
boolean hasAnimatorDie;
|
||||
}
|
||||
@@ -0,0 +1,18 @@
|
||||
package emu.grasscutter.data.binout.config.fields;
|
||||
|
||||
import lombok.AccessLevel;
|
||||
import lombok.Data;
|
||||
import lombok.experimental.FieldDefaults;
|
||||
|
||||
@Data
|
||||
@FieldDefaults(level = AccessLevel.PRIVATE)
|
||||
public class ConfigCombatProperty {
|
||||
float HP;
|
||||
boolean isLockHP;
|
||||
boolean isInvincible;
|
||||
boolean isGhostToAllied;
|
||||
float attack;
|
||||
float defence;
|
||||
float weight;
|
||||
boolean useCreatorProperty;
|
||||
}
|
||||
@@ -0,0 +1,7 @@
|
||||
package emu.grasscutter.data.binout.config.fields;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
@Data
|
||||
public class ConfigCommon {
|
||||
}
|
||||
@@ -0,0 +1,15 @@
|
||||
package emu.grasscutter.data.binout.config.fields;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
|
||||
/**
|
||||
* Contains information about the entities SGVs
|
||||
*/
|
||||
@Data
|
||||
public class ConfigGlobalValue {
|
||||
Set<String> serverGlobalValues;
|
||||
Map<String, Float> initServerGlobalValues;
|
||||
}
|
||||
@@ -0,0 +1,23 @@
|
||||
package emu.grasscutter.data.binout.routes;
|
||||
|
||||
//import emu.grasscutter.scripts.constants.IntValueEnum;
|
||||
import lombok.Getter;
|
||||
|
||||
public enum RotAngleType /*implements IntValueEnum */{
|
||||
ROT_NONE(-1),
|
||||
ROT_ANGLE_X(0),
|
||||
ROT_ANGLE_Y(1),
|
||||
ROT_ANGLE_Z(2);
|
||||
|
||||
@Getter
|
||||
private final int id;
|
||||
|
||||
RotAngleType(int id) {
|
||||
this.id = id;
|
||||
}
|
||||
|
||||
//@Override
|
||||
public int getValue() {
|
||||
return id;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,7 @@
|
||||
package emu.grasscutter.data.binout.routes;
|
||||
|
||||
public enum RotType {
|
||||
ROT_NONE,
|
||||
ROT_ANGLE,
|
||||
ROT_ROUND
|
||||
}
|
||||
31
src/main/java/emu/grasscutter/data/binout/routes/Route.java
Normal file
31
src/main/java/emu/grasscutter/data/binout/routes/Route.java
Normal file
@@ -0,0 +1,31 @@
|
||||
package emu.grasscutter.data.binout.routes;
|
||||
|
||||
import emu.grasscutter.net.proto.RouteOuterClass;
|
||||
import lombok.AccessLevel;
|
||||
import lombok.Data;
|
||||
import lombok.experimental.FieldDefaults;
|
||||
import lombok.val;
|
||||
|
||||
@Data
|
||||
@FieldDefaults(level = AccessLevel.PRIVATE)
|
||||
public class Route {
|
||||
private int localId;
|
||||
private String name;
|
||||
private RouteType type = RouteType.Unknown;
|
||||
private RoutePoint[] points;
|
||||
private float arriveRange; // optional
|
||||
private RotType rotType; // optional
|
||||
private RotAngleType rotAngleType; // optional
|
||||
|
||||
public RouteOuterClass.Route toProto(){
|
||||
val builder = RouteOuterClass.Route.newBuilder()
|
||||
.setRouteType(type.getValue());
|
||||
if(points !=null){
|
||||
for(var routePoint : points){
|
||||
builder.addRoutePoints(routePoint.toProto()
|
||||
.setArriveRange(arriveRange));
|
||||
}
|
||||
}
|
||||
return builder.build();
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,34 @@
|
||||
package emu.grasscutter.data.binout.routes;
|
||||
|
||||
import emu.grasscutter.net.proto.RoutePointOuterClass;
|
||||
import emu.grasscutter.utils.Position;
|
||||
import lombok.AccessLevel;
|
||||
import lombok.Data;
|
||||
import lombok.Getter;
|
||||
import lombok.experimental.FieldDefaults;
|
||||
import lombok.val;
|
||||
|
||||
@Data
|
||||
@FieldDefaults(level = AccessLevel.PRIVATE)
|
||||
public class RoutePoint {
|
||||
private Position pos;
|
||||
private int speedLevel; //optional
|
||||
private float waitTime; //optional
|
||||
private float targetVelocity; //optional
|
||||
private boolean hasReachEvent; //optional
|
||||
// rotRoundReachDir //optional Pos with optional values
|
||||
// rotRoundLeaveDir //optional Pos with optional values
|
||||
|
||||
public RoutePointOuterClass.RoutePoint.Builder toProto(){
|
||||
val builder = RoutePointOuterClass.RoutePoint.newBuilder()
|
||||
.setPosition(pos.toProto());
|
||||
if(waitTime!=0){
|
||||
builder.setTime(waitTime);
|
||||
} else if(targetVelocity!=0){
|
||||
builder.setVelocity(targetVelocity);
|
||||
}
|
||||
|
||||
|
||||
return builder;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,23 @@
|
||||
package emu.grasscutter.data.binout.routes;
|
||||
|
||||
//import emu.grasscutter.scripts.constants.IntValueEnum;
|
||||
import lombok.Getter;
|
||||
|
||||
public enum RouteType /*implements IntValueEnum*/ {
|
||||
Unknown(-1),
|
||||
OneWay(0),
|
||||
Reciprocate(1),
|
||||
Loop(2);
|
||||
|
||||
@Getter
|
||||
private final int id;
|
||||
|
||||
RouteType(int id) {
|
||||
this.id = id;
|
||||
}
|
||||
|
||||
//@Override
|
||||
public int getValue() {
|
||||
return id;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,15 @@
|
||||
package emu.grasscutter.data.binout.routes;
|
||||
|
||||
import lombok.AccessLevel;
|
||||
import lombok.Data;
|
||||
import lombok.Getter;
|
||||
import lombok.experimental.FieldDefaults;
|
||||
|
||||
import javax.annotation.Nullable;
|
||||
|
||||
@Data
|
||||
@FieldDefaults(level = AccessLevel.PRIVATE)
|
||||
public class SceneRoutes {
|
||||
private int sceneId;
|
||||
@Nullable private Route[] routes;
|
||||
}
|
||||
@@ -0,0 +1,8 @@
|
||||
package emu.grasscutter.data.common;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
public interface BaseTrialActivityData {
|
||||
List<Integer> getAvatarIndexIdList();
|
||||
List<Integer> getRewardIdList();
|
||||
}
|
||||
@@ -0,0 +1,17 @@
|
||||
package emu.grasscutter.data.custom;
|
||||
|
||||
import emu.grasscutter.data.common.BaseTrialActivityData;
|
||||
import lombok.*;
|
||||
import java.util.List;
|
||||
|
||||
@Data
|
||||
public class TrialAvatarActivityCustomData implements BaseTrialActivityData {
|
||||
private int ScheduleId;
|
||||
private List<Integer> AvatarIndexIdList;
|
||||
private List<Integer> RewardIdList;
|
||||
|
||||
public void onLoad() {
|
||||
this.AvatarIndexIdList = AvatarIndexIdList.stream().filter(x -> x > 0).toList();
|
||||
this.RewardIdList = RewardIdList.stream().filter(x -> x > 0).toList();
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,16 @@
|
||||
package emu.grasscutter.data.custom;
|
||||
|
||||
import lombok.*;
|
||||
import java.util.List;
|
||||
|
||||
@Data
|
||||
public class TrialAvatarCustomData {
|
||||
private int trialAvatarId;
|
||||
private List<String> trialAvatarParamList;
|
||||
private int coreProudSkillLevel;
|
||||
private int skillDepotId;
|
||||
|
||||
public void onLoad() {
|
||||
this.trialAvatarParamList = trialAvatarParamList.stream().filter(x -> !x.isBlank()).toList();
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,41 @@
|
||||
package emu.grasscutter.data.excels;
|
||||
|
||||
import emu.grasscutter.data.GameResource;
|
||||
import emu.grasscutter.data.ResourceType;
|
||||
import emu.grasscutter.game.activity.condition.ActivityConditions;
|
||||
import emu.grasscutter.game.quest.enums.LogicType;
|
||||
import lombok.AccessLevel;
|
||||
import lombok.Getter;
|
||||
import lombok.experimental.FieldDefaults;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
@ResourceType(name = "NewActivityCondExcelConfigData.json")
|
||||
@Getter
|
||||
@FieldDefaults(level = AccessLevel.PRIVATE)
|
||||
public class ActivityCondExcelConfigData extends GameResource {
|
||||
int condId;
|
||||
LogicType condComb;
|
||||
List<ActivityConfigCondition> cond;
|
||||
|
||||
public static class ActivityConfigCondition {
|
||||
@Getter
|
||||
private ActivityConditions type;
|
||||
@Getter
|
||||
private List<Integer> param;
|
||||
|
||||
public int[] paramArray() {
|
||||
return param.stream().mapToInt(Integer::intValue).toArray();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getId() {
|
||||
return condId;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onLoad() {
|
||||
cond.removeIf(c -> c.type == null);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,22 @@
|
||||
package emu.grasscutter.data.excels;
|
||||
|
||||
import com.google.gson.annotations.SerializedName;
|
||||
import emu.grasscutter.data.GameResource;
|
||||
import emu.grasscutter.data.ResourceType;
|
||||
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
|
||||
@Data
|
||||
@ResourceType(name = "AvatarReplaceCostumeExcelConfigData.json")
|
||||
@EqualsAndHashCode(callSuper=false)
|
||||
public class AvatarReplaceCostumeData extends GameResource {
|
||||
private int avatarId;
|
||||
@SerializedName(value = "costumeId", alternate={"MGLCOPOIJIC", "BDBMOBGKIAP"})
|
||||
private int costumeId;
|
||||
|
||||
@Override
|
||||
public int getId() {
|
||||
return costumeId;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,72 @@
|
||||
package emu.grasscutter.data.excels;
|
||||
|
||||
import com.google.gson.annotations.SerializedName;
|
||||
import emu.grasscutter.data.GameResource;
|
||||
import emu.grasscutter.data.ResourceType;
|
||||
|
||||
import emu.grasscutter.game.dungeons.challenge.enums.ChallengeType;
|
||||
import lombok.Getter;
|
||||
|
||||
import java.util.HashSet;
|
||||
|
||||
@Getter
|
||||
@ResourceType(name = "DungeonChallengeConfigData.json")
|
||||
public class DungeonChallengeConfigData extends GameResource {
|
||||
private int id;
|
||||
private ChallengeType challengeType;
|
||||
private boolean noSuccessHint;
|
||||
private boolean noFailHint;
|
||||
private boolean isBlockTopTimer;
|
||||
private int subChallengeFadeOutDelayTime;
|
||||
private int activitySkillId;
|
||||
private HashSet<String> teamAbilityGroupList;
|
||||
|
||||
private SubChallengeFadeOutType subChallengeFadeOutRule;
|
||||
private SubChallengeBannerType subChallengeBannerRule;
|
||||
private InterruptButtonType interruptButtonType;
|
||||
|
||||
@SerializedName(value = "subChallengeSortType", alternate={"PNCLDNBHKDJ"})
|
||||
private SubChallengeSortType subChallengeSortType;
|
||||
@SerializedName(value = "animationOnSubStart", alternate={"DNFAFNMMMDP"})
|
||||
private AllowAnimationType animationOnSubStart;
|
||||
@SerializedName(value = "animationOnSubSuccess", alternate={"ENONHOGJDDN"})
|
||||
private AllowAnimationType animationOnSubSuccess;
|
||||
@SerializedName(value = "animationOnSubFail", alternate={"NJBJIKAIENN"})
|
||||
private AllowAnimationType animationOnSubFail;
|
||||
|
||||
public int getId() {
|
||||
return id;
|
||||
}
|
||||
|
||||
public enum InterruptButtonType{
|
||||
INTERRUPT_BUTTON_TYPE_NONE,
|
||||
INTERRUPT_BUTTON_TYPE_HOST,
|
||||
INTERRUPT_BUTTON_TYPE_ALL
|
||||
}
|
||||
|
||||
public enum SubChallengeFadeOutType{
|
||||
SUBCHALLENGE_FADEOUT_TYPE_NONE,
|
||||
SUBCHALLENGE_FADEOUT_TYPE_SUCCESS,
|
||||
SUBCHALLENGE_FADEOUT_TYPE_FAIL,
|
||||
SUBCHALLENGE_FADEOUT_TYPE_FINISH
|
||||
}
|
||||
|
||||
public enum SubChallengeBannerType{
|
||||
SUBCHALLENGE_BANNER_TYPE_NONE,
|
||||
SUBCHALLENGE_BANNER_TYPE_SUCCESS,
|
||||
SUBCHALLENGE_BANNER_TYPE_FAIL,
|
||||
SUBCHALLENGE_BANNER_TYPE_HIDE_FINAL,
|
||||
SUBCHALLENGE_BANNER_TYPE_SHOW_FINAL
|
||||
}
|
||||
public enum SubChallengeSortType{
|
||||
SUB_CHALLENGE_SORT_TYPE_DEFAULT,
|
||||
SUB_CHALLENGE_SORT_TYPE_CHALLENGEINDEX
|
||||
}
|
||||
|
||||
public enum AllowAnimationType{
|
||||
SUB_CHALLENGE_ANIM_TYPE_DEFAULT,
|
||||
SUB_CHALLENGE_ANIM_TYPE_FORBID,
|
||||
SUB_CHALLENGE_ANIM_TYPE_SUCCESS,
|
||||
SUB_CHALLENGE_ANIM_TYPE_FAIL
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,28 @@
|
||||
package emu.grasscutter.data.excels;
|
||||
|
||||
import emu.grasscutter.data.GameResource;
|
||||
import emu.grasscutter.data.ResourceType;
|
||||
|
||||
import emu.grasscutter.game.dungeons.enums.DungeonPassConditionType;
|
||||
import emu.grasscutter.game.quest.enums.LogicType;
|
||||
import lombok.Getter;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
@ResourceType(name = "DungeonPassExcelConfigData.json")
|
||||
public class DungeonPassConfigData extends GameResource {
|
||||
@Getter private int id;
|
||||
@Getter private LogicType logicType;
|
||||
@Getter private List<DungeonPassCondition> conds;
|
||||
|
||||
public static class DungeonPassCondition{
|
||||
@Getter private DungeonPassConditionType condType;
|
||||
@Getter int[] param;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onLoad() {
|
||||
super.onLoad();
|
||||
conds = conds.stream().filter(condition -> condition.getCondType()!=null).toList();
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,26 @@
|
||||
package emu.grasscutter.data.excels;
|
||||
|
||||
import emu.grasscutter.data.GameData;
|
||||
import emu.grasscutter.data.GameResource;
|
||||
import emu.grasscutter.data.ResourceType;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
|
||||
@Data @EqualsAndHashCode(callSuper=false)
|
||||
@ResourceType(name = "GuideTriggerExcelConfigData.json")
|
||||
public class GuideTriggerData extends GameResource {
|
||||
// more like open state guide than quest guide
|
||||
private int id; // dont use, just to prevent resource loader from not functioning
|
||||
private String guideName;
|
||||
private String type;
|
||||
private String openState;
|
||||
|
||||
@Override
|
||||
public int getId() {
|
||||
return this.id;
|
||||
}
|
||||
|
||||
public void onLoad() {
|
||||
GameData.getGuideTriggerDataStringMap().put(getGuideName(), this);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,21 @@
|
||||
package emu.grasscutter.data.excels;
|
||||
|
||||
import emu.grasscutter.data.GameResource;
|
||||
import emu.grasscutter.data.ResourceType;
|
||||
import emu.grasscutter.data.ResourceType.LoadPriority;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
|
||||
@ResourceType(name = "MonsterSpecialNameExcelConfigData.json", loadPriority = LoadPriority.HIGH)
|
||||
@EqualsAndHashCode(callSuper=false)
|
||||
@Data
|
||||
public class MonsterSpecialNameData extends GameResource {
|
||||
private int specialNameId;
|
||||
private int specialNameLabId;
|
||||
private long specialNameTextMapHash;
|
||||
|
||||
@Override
|
||||
public int getId() {
|
||||
return specialNameId;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,81 @@
|
||||
package emu.grasscutter.data.excels;
|
||||
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
|
||||
import emu.grasscutter.data.GameResource;
|
||||
import emu.grasscutter.data.ResourceType;
|
||||
import emu.grasscutter.game.props.RefreshType;
|
||||
import emu.grasscutter.game.world.World;
|
||||
import lombok.Getter;
|
||||
|
||||
@ResourceType(name = "RefreshPolicyExcelConfigData.json")
|
||||
public class RefreshPolicyExcelConfigData extends GameResource {
|
||||
@Getter private int id;
|
||||
@Getter private RefreshType type;
|
||||
@Getter private String time;
|
||||
|
||||
private static int upperBound(List<Integer> list, int low, int high, int value) {
|
||||
while (low < high) {
|
||||
int middle = (high + low) / 2;
|
||||
if(list.size() >= middle) return low; //Just in case
|
||||
if (list.get(middle) > value) {
|
||||
high = middle;
|
||||
} else {
|
||||
low = middle + 1;
|
||||
}
|
||||
}
|
||||
return low;
|
||||
}
|
||||
|
||||
public int getIntervalInSeconds(World world) {
|
||||
if(time.isEmpty()) return -1;
|
||||
|
||||
var currentTimestamp = world.getTotalGameTimeMinutes();
|
||||
|
||||
try {
|
||||
List<String> paramsStr = Arrays.asList(time.split(";"));
|
||||
List<Integer> params = paramsStr.stream().map(Integer::parseInt).toList();
|
||||
|
||||
switch(type) {
|
||||
case REFRESH_NONE:
|
||||
return -1;
|
||||
case REFRESH_INTERVAL:
|
||||
if(params.isEmpty()) return -1;
|
||||
return params.get(0);
|
||||
case REFRESH_DAILY:
|
||||
{
|
||||
var dayTime = (world.getTotalGameTimeMinutes() / (24 * 60)) * 24 * 60 * 60;
|
||||
var temp = currentTimestamp - dayTime;
|
||||
var upper_bound_idx = upperBound(params, (int)params.get(0), (int)params.get(params.size() - 1), (int)temp);
|
||||
var upper_bound = params.get(upper_bound_idx);
|
||||
if(params.get(params.size() - 1) == upper_bound) {
|
||||
return (params.get(params.size() - 1) - params.get(0)) + 60 * 60 * 24 * 7;
|
||||
} else if(params.get(0) == upper_bound) {
|
||||
return (params.get(params.size() - 1) - params.get(0)) + 60 * 60 * 24 * 7;
|
||||
}
|
||||
return (params.get(upper_bound_idx - 1) - params.get(0));
|
||||
}
|
||||
case REFRESH_WEEKlY:
|
||||
if(params.size() < 2) return -1;
|
||||
{
|
||||
var weekTime = (world.getTotalGameTimeDays() / 7) * 60 * 60 * 24 * 7;
|
||||
var temp = currentTimestamp - weekTime;
|
||||
var upper_bound_idx = upperBound(params, (int)params.get(0), (int)params.get(params.size() - 1), (int)temp);
|
||||
var upper_bound = params.get(upper_bound_idx);
|
||||
if(params.get(params.size() - 1) == upper_bound) {
|
||||
return (params.get(params.size() - 1) - params.get(0)) + 60 * 60 * 24 * 7;
|
||||
} else if(params.get(0) == upper_bound) {
|
||||
return (params.get(params.size() - 1) - params.get(0)) + 60 * 60 * 24 * 7;
|
||||
}
|
||||
return (params.get(upper_bound_idx - 1) - params.get(0));
|
||||
}
|
||||
case REFRESH_DAYBEGIN_INTERVAL:
|
||||
if(params.size() == 0) return -1;
|
||||
return params.get(0) * 60 * 60 * 24;
|
||||
}
|
||||
} catch(Exception e) {}
|
||||
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,21 @@
|
||||
package emu.grasscutter.data.excels;
|
||||
|
||||
import emu.grasscutter.data.GameResource;
|
||||
import emu.grasscutter.data.ResourceType;
|
||||
import emu.grasscutter.data.common.BaseTrialActivityData;
|
||||
import lombok.*;
|
||||
import java.util.List;
|
||||
|
||||
@ResourceType(name = "TrialAvatarActivityExcelConfigData.json")
|
||||
@EqualsAndHashCode(callSuper=false)
|
||||
@Data
|
||||
public class TrialAvatarActivityData extends GameResource implements BaseTrialActivityData {
|
||||
private int ScheduleId;
|
||||
private List<Integer> AvatarIndexIdList;
|
||||
private List<Integer> RewardIdList;
|
||||
|
||||
@Override
|
||||
public int getId() {
|
||||
return ScheduleId;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,29 @@
|
||||
package emu.grasscutter.data.excels;
|
||||
|
||||
import emu.grasscutter.data.GameData;
|
||||
import emu.grasscutter.data.GameResource;
|
||||
import emu.grasscutter.data.ResourceType;
|
||||
import lombok.*;
|
||||
import lombok.experimental.FieldDefaults;
|
||||
|
||||
@ResourceType(name = "TrialAvatarActivityDataExcelConfigData.json")
|
||||
@EqualsAndHashCode(callSuper=false)
|
||||
@Data
|
||||
@FieldDefaults(level = AccessLevel.PRIVATE)
|
||||
public class TrialAvatarActivityDataData extends GameResource {
|
||||
@Getter(onMethod = @__(@Override))
|
||||
private int id;
|
||||
private int trialAvatarIndexId;
|
||||
private int trialAvatarId;
|
||||
private int dungeonId;
|
||||
private String battleAvatarsList;
|
||||
private int firstPassReward;
|
||||
private ActivityWatcherData.WatcherTrigger triggerConfig;
|
||||
private int progress;
|
||||
|
||||
@Override
|
||||
public void onLoad() {
|
||||
triggerConfig.onLoad();
|
||||
GameData.getTrialAvatarIndexIdTrialActivityDataDataMap().put(trialAvatarIndexId, id);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,19 @@
|
||||
package emu.grasscutter.data.excels;
|
||||
|
||||
import emu.grasscutter.data.GameResource;
|
||||
import emu.grasscutter.data.ResourceType;
|
||||
import lombok.*;
|
||||
import java.util.List;
|
||||
|
||||
@ResourceType(name = "TrialAvatarExcelConfigData.json")
|
||||
@EqualsAndHashCode(callSuper=false)
|
||||
@Data
|
||||
public class TrialAvatarData extends GameResource {
|
||||
private int trialAvatarId;
|
||||
private List<Integer> trialAvatarParamList;
|
||||
|
||||
@Override
|
||||
public int getId() {
|
||||
return trialAvatarId;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,20 @@
|
||||
package emu.grasscutter.data.excels;
|
||||
|
||||
import emu.grasscutter.data.GameResource;
|
||||
import emu.grasscutter.data.ResourceType;
|
||||
import lombok.*;
|
||||
import java.util.List;
|
||||
|
||||
@ResourceType(name = "TrialAvatarTemplateExcelConfigData.json")
|
||||
@EqualsAndHashCode(callSuper=false)
|
||||
@Data
|
||||
public class TrialAvatarTemplateData extends GameResource {
|
||||
private int TrialAvatarLevel;
|
||||
private List<Integer> TrialReliquaryList;
|
||||
private int TrialAvatarSkillLevel;
|
||||
|
||||
@Override
|
||||
public int getId() {
|
||||
return TrialAvatarLevel;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,22 @@
|
||||
package emu.grasscutter.data.excels;
|
||||
|
||||
import emu.grasscutter.data.GameResource;
|
||||
import emu.grasscutter.data.ResourceType;
|
||||
import lombok.*;
|
||||
import java.util.List;
|
||||
|
||||
@ResourceType(name = "TrialReliquaryExcelConfigData.json")
|
||||
@EqualsAndHashCode(callSuper=false)
|
||||
@Data
|
||||
public class TrialReliquaryData extends GameResource {
|
||||
private int Id;
|
||||
private int ReliquaryId;
|
||||
private int Level;
|
||||
private int MainPropId;
|
||||
private List<Integer> AppendPropList;
|
||||
|
||||
@Override
|
||||
public int getId() {
|
||||
return Id;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
package emu.grasscutter.data.server;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
@Data
|
||||
public class ActivityCondGroup {
|
||||
int condGroupId;
|
||||
List<Integer> condIds;
|
||||
}
|
||||
@@ -0,0 +1,9 @@
|
||||
package emu.grasscutter.data.server;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
@Data
|
||||
public class GadgetMapping {
|
||||
private int gadgetId;
|
||||
private String serverController;
|
||||
}
|
||||
34
src/main/java/emu/grasscutter/data/server/Grid.java
Normal file
34
src/main/java/emu/grasscutter/data/server/Grid.java
Normal file
@@ -0,0 +1,34 @@
|
||||
package emu.grasscutter.data.server;
|
||||
|
||||
import java.util.HashSet;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
|
||||
import emu.grasscutter.Grasscutter;
|
||||
import emu.grasscutter.utils.GridPosition;
|
||||
import emu.grasscutter.utils.Position;
|
||||
|
||||
public class Grid {
|
||||
public Map<GridPosition, Set<Integer>> grid;
|
||||
|
||||
public Set<Integer> getNearbyGroups(int vision_level, Position position) {
|
||||
int width = Grasscutter.getConfig().server.game.visionOptions[vision_level].gridWidth;
|
||||
int vision_range = Grasscutter.getConfig().server.game.visionOptions[vision_level].visionRange;
|
||||
int vision_range_grid = vision_range / width;
|
||||
|
||||
GridPosition pos = new GridPosition(position, width);
|
||||
|
||||
Set<Integer> nearbyGroups = new HashSet<>();
|
||||
//construct a nearby pisition list, add 1 more because a player can be in an edge case, this should not affect much the loading
|
||||
for(int x = 0; x < vision_range_grid + 1; x++) {
|
||||
for(int z = 0; z < vision_range_grid + 1; z++) {
|
||||
nearbyGroups.addAll(grid.getOrDefault(pos.addClone( x, z), new HashSet<>()));
|
||||
nearbyGroups.addAll(grid.getOrDefault(pos.addClone(-x, z), new HashSet<>()));
|
||||
nearbyGroups.addAll(grid.getOrDefault(pos.addClone( x, -z), new HashSet<>()));
|
||||
nearbyGroups.addAll(grid.getOrDefault(pos.addClone(-x, -z), new HashSet<>()));
|
||||
}
|
||||
}
|
||||
|
||||
return nearbyGroups;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user