Skip to content

Commit

Permalink
Merge branch 'talking' into dev-4.0
Browse files Browse the repository at this point in the history
  • Loading branch information
KingRainbow44 committed Aug 16, 2023
2 parents 407c1b3 + e0f8c03 commit 70eb0f2
Show file tree
Hide file tree
Showing 38 changed files with 1,212 additions and 163 deletions.
11 changes: 11 additions & 0 deletions src/main/java/emu/grasscutter/DebugConstants.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
package emu.grasscutter;

public final class DebugConstants {
public static boolean LOG_ABILITIES = false;
public static boolean LOG_LUA_SCRIPTS = false;
public static boolean LOG_QUEST_START = false;

private DebugConstants() {
// Prevent instantiation.
}
}
65 changes: 25 additions & 40 deletions src/main/java/emu/grasscutter/data/GameData.java
Original file line number Diff line number Diff line change
Expand Up @@ -4,58 +4,33 @@
import emu.grasscutter.data.binout.*;
import emu.grasscutter.data.binout.config.*;
import emu.grasscutter.data.binout.routes.Route;
import emu.grasscutter.data.custom.TrialAvatarActivityCustomData;
import emu.grasscutter.data.custom.TrialAvatarCustomData;
import emu.grasscutter.data.custom.*;
import emu.grasscutter.data.excels.*;
import emu.grasscutter.data.excels.achievement.AchievementData;
import emu.grasscutter.data.excels.achievement.AchievementGoalData;
import emu.grasscutter.data.excels.activity.ActivityCondExcelConfigData;
import emu.grasscutter.data.excels.activity.ActivityData;
import emu.grasscutter.data.excels.activity.ActivityShopData;
import emu.grasscutter.data.excels.activity.ActivityWatcherData;
import emu.grasscutter.data.excels.achievement.*;
import emu.grasscutter.data.excels.activity.*;
import emu.grasscutter.data.excels.avatar.*;
import emu.grasscutter.data.excels.codex.*;
import emu.grasscutter.data.excels.dungeon.*;
import emu.grasscutter.data.excels.monster.MonsterCurveData;
import emu.grasscutter.data.excels.monster.MonsterData;
import emu.grasscutter.data.excels.monster.MonsterDescribeData;
import emu.grasscutter.data.excels.monster.MonsterSpecialNameData;
import emu.grasscutter.data.excels.quest.QuestData;
import emu.grasscutter.data.excels.quest.QuestGlobalVarData;
import emu.grasscutter.data.excels.reliquary.ReliquaryAffixData;
import emu.grasscutter.data.excels.reliquary.ReliquaryLevelData;
import emu.grasscutter.data.excels.reliquary.ReliquaryMainPropData;
import emu.grasscutter.data.excels.reliquary.ReliquarySetData;
import emu.grasscutter.data.excels.tower.TowerFloorData;
import emu.grasscutter.data.excels.tower.TowerLevelData;
import emu.grasscutter.data.excels.tower.TowerScheduleData;
import emu.grasscutter.data.excels.giving.*;
import emu.grasscutter.data.excels.monster.*;
import emu.grasscutter.data.excels.quest.*;
import emu.grasscutter.data.excels.reliquary.*;
import emu.grasscutter.data.excels.tower.*;
import emu.grasscutter.data.excels.trial.*;
import emu.grasscutter.data.excels.weapon.WeaponCurveData;
import emu.grasscutter.data.excels.weapon.WeaponLevelData;
import emu.grasscutter.data.excels.weapon.WeaponPromoteData;
import emu.grasscutter.data.excels.world.WeatherData;
import emu.grasscutter.data.excels.world.WorldAreaData;
import emu.grasscutter.data.excels.world.WorldLevelData;
import emu.grasscutter.data.server.ActivityCondGroup;
import emu.grasscutter.data.server.DropSubfieldMapping;
import emu.grasscutter.data.server.DropTableExcelConfigData;
import emu.grasscutter.data.server.GadgetMapping;
import emu.grasscutter.data.server.MonsterMapping;
import emu.grasscutter.data.server.SubfieldMapping;
import emu.grasscutter.data.excels.weapon.*;
import emu.grasscutter.data.excels.world.*;
import emu.grasscutter.data.server.*;
import emu.grasscutter.game.dungeons.DungeonDropEntry;
import emu.grasscutter.game.quest.QuestEncryptionKey;
import emu.grasscutter.game.quest.RewindData;
import emu.grasscutter.game.quest.TeleportData;
import emu.grasscutter.game.quest.*;
import emu.grasscutter.game.quest.enums.QuestCond;
import emu.grasscutter.game.world.GroupReplacementData;
import emu.grasscutter.utils.Utils;
import it.unimi.dsi.fastutil.ints.*;
import lombok.*;

import javax.annotation.Nullable;
import java.lang.reflect.Field;
import java.util.*;
import javax.annotation.Nullable;
import lombok.Getter;
import lombok.Setter;
import lombok.val;

@SuppressWarnings({"unused", "MismatchedQueryAndUpdateOfCollection"})
public final class GameData {
Expand Down Expand Up @@ -165,6 +140,10 @@ public final class GameData {
private static final Int2ObjectMap<AvatarTalentData> avatarTalentDataMap =
new Int2ObjectOpenHashMap<>();

@Getter
private static final Int2ObjectMap<BargainData> bargainDataMap
= new Int2ObjectOpenHashMap<>();

@Getter
private static final Int2ObjectMap<BattlePassMissionData> battlePassMissionDataMap =
new Int2ObjectOpenHashMap<>();
Expand Down Expand Up @@ -266,6 +245,12 @@ public final class GameData {
@Getter
private static final Int2ObjectMap<GatherData> gatherDataMap = new Int2ObjectOpenHashMap<>();

@Getter
private static final Int2ObjectMap<GivingData> givingDataMap = new Int2ObjectOpenHashMap<>();

@Getter
private static final Int2ObjectMap<GivingGroupData> givingGroupDataMap = new Int2ObjectOpenHashMap<>();

@Getter
@Deprecated // This is to prevent people from using this map. This is for the resource loader
// only!
Expand Down
49 changes: 49 additions & 0 deletions src/main/java/emu/grasscutter/data/excels/BargainData.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
package emu.grasscutter.data.excels;

import emu.grasscutter.data.*;
import lombok.Getter;

import java.util.List;

@Getter
@ResourceType(name = "BargainExcelConfigData.json")
public final class BargainData extends GameResource {
@Getter private int id;
private int questId;

private List<Integer> dialogId;

/**
* This is a list of 2 integers.
* The first integer is the minimum value of the bargain.
* The second integer is the maximum value of the bargain.
*/
private List<Integer> expectedValue;
private int space;

private List<Integer> successTalkId;
private int failTalkId;
private int moodNpcId;

/**
* This is a list of 2 integers.
* The first integer is the minimum value of the mood.
* The second integer is the maximum value of the mood.
*/
private List<Integer> randomMood;
private int moodAlertLimit;
private int moodLowLimit;
private int singleFailMoodDeduction;

private long moodLowLimitTextTextMapHash;
private long titleTextTextMapHash;
private long affordTextTextMapHash;
private long storageTextTextMapHash;
private long moodHintTextTextMapHash;
private long moodDescTextTextMapHash;

private List<Integer> singleFailTalkId;

private boolean deleteItem;
private int itemId;
}
46 changes: 46 additions & 0 deletions src/main/java/emu/grasscutter/data/excels/giving/GivingData.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
package emu.grasscutter.data.excels.giving;

import com.google.gson.annotations.SerializedName;
import emu.grasscutter.data.*;
import emu.grasscutter.data.common.ItemParamData;
import emu.grasscutter.game.inventory.BagTab;
import lombok.*;

import java.util.List;

@Data
@EqualsAndHashCode(callSuper = false)
@ResourceType(name = "GivingExcelConfigData.json")
public final class GivingData extends GameResource {
@SerializedName(value = "id", alternate = "Id")
private int id;
private int talkId;
private int mistakeTalkId;

private BagTab tab;
private GiveMethod givingMethod;

private List<ItemParamData> exactItems;
private int exactFinishTalkId;

private List<Integer> givingGroupIds;
private int givingGroupCount;

private boolean isRemoveItem;
private GiveType giveType;

public enum GiveMethod {
GIVING_METHOD_NONE,
/** All items are required to succeed. */
GIVING_METHOD_EXACT,
GIVING_METHOD_GROUP,
/** One in the group is required to succeed. */
GIVING_METHOD_VAGUE_GROUP,
GIVING_METHOD_ANY_NO_FINISH
}

public enum GiveType {
@SerializedName("GIVING_TYPE_QUEST") QUEST,
@SerializedName("GIVING_TYPE_GROUP") GROUP
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
package emu.grasscutter.data.excels.giving;

import com.google.gson.annotations.SerializedName;
import emu.grasscutter.data.*;
import lombok.*;

import java.util.List;

@Data
@EqualsAndHashCode(callSuper = false)
@ResourceType(name = "GivingGroupExcelConfigData.json")
public final class GivingGroupData extends GameResource {
@SerializedName(value = "id", alternate = "Id")
private int id;

@SerializedName(value = "itemIds", alternate = "ItemIds")
private List<Integer> itemIds;

private int finishTalkId;
private int mistakeTalkId;
}
20 changes: 13 additions & 7 deletions src/main/java/emu/grasscutter/game/ability/AbilityManager.java
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
package emu.grasscutter.game.ability;

import com.google.protobuf.*;
import emu.grasscutter.Grasscutter;
import emu.grasscutter.*;
import emu.grasscutter.data.GameData;
import emu.grasscutter.data.binout.*;
import emu.grasscutter.data.binout.AbilityModifier.AbilityModifierAction;
Expand All @@ -19,13 +19,13 @@
import emu.grasscutter.net.proto.AbilityScalarValueEntryOuterClass.AbilityScalarValueEntry;
import emu.grasscutter.net.proto.ModifierActionOuterClass.ModifierAction;
import io.netty.util.concurrent.FastThreadLocalThread;
import java.util.HashMap;
import java.util.concurrent.*;
import lombok.Getter;
import org.reflections.Reflections;

public final class AbilityManager extends BasePlayerManager {
import java.util.HashMap;
import java.util.concurrent.*;

public final class AbilityManager extends BasePlayerManager {
private static final HashMap<AbilityModifierAction.Type, AbilityActionHandler> actionHandlers =
new HashMap<>();
private static final HashMap<AbilityMixinData.Type, AbilityMixinHandler> mixinHandlers =
Expand Down Expand Up @@ -91,8 +91,11 @@ public void executeAction(
Ability ability, AbilityModifierAction action, ByteString abilityData, GameEntity target) {
var handler = actionHandlers.get(action.type);
if (handler == null || ability == null) {
Grasscutter.getLogger()
if (DebugConstants.LOG_ABILITIES) {
Grasscutter.getLogger()
.debug("Could not execute ability action {} at {}", action.type, ability);
}

return;
}

Expand Down Expand Up @@ -148,7 +151,7 @@ public void onAbilityInvoke(AbilityInvokeEntry invoke) throws Exception {
invoke.getArgumentType(),
invoke.getArgumentTypeValue(),
entity.getId());
} else {
} else if (DebugConstants.LOG_ABILITIES) {
Grasscutter.getLogger()
.debug(
"Invoke type of {} ({}) has no entity. (referring to {})",
Expand Down Expand Up @@ -375,7 +378,10 @@ private void handleModifierChange(AbilityInvokeEntry invoke) throws Exception {

var entity = this.player.getScene().getEntityById(invoke.getEntityId());
if (entity == null) {
Grasscutter.getLogger().debug("Entity not found: {}", invoke.getEntityId());
if (DebugConstants.LOG_ABILITIES) {
Grasscutter.getLogger().debug("Entity not found: {}", invoke.getEntityId());
}

return;
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

import com.google.protobuf.ByteString;
import com.google.protobuf.InvalidProtocolBufferException;
import emu.grasscutter.Grasscutter;
import emu.grasscutter.*;
import emu.grasscutter.data.GameData;
import emu.grasscutter.data.binout.AbilityModifier.AbilityModifierAction;
import emu.grasscutter.data.binout.AbilityModifier.AbilityModifierAction.DropType;
Expand Down Expand Up @@ -81,8 +81,11 @@ public boolean execute(
return false;
}

Grasscutter.getLogger()
.debug("Generating {} of {} element balls", amountGenerated, action.configID);
if (DebugConstants.LOG_ABILITIES) {
Grasscutter.getLogger()
.debug("Generating {} of {} element balls", amountGenerated, action.configID);
}

for (int i = 0; i < amountGenerated; i++) {
EntityItem energyBall =
new EntityItem(
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
package emu.grasscutter.game.ability.actions;

import com.google.protobuf.ByteString;
import emu.grasscutter.Grasscutter;
import emu.grasscutter.*;
import emu.grasscutter.data.binout.AbilityModifier.AbilityModifierAction;
import emu.grasscutter.game.ability.Ability;
import emu.grasscutter.game.entity.EntityClientGadget;
Expand All @@ -22,12 +22,14 @@ public boolean execute(
ownerGadget
.getScene()
.getEntityById(ownerGadget.getOwnerEntityId()); // Caster for EntityClientGadget
Grasscutter.getLogger()
.debug(
"Owner {} has top owner {}: {}",
ability.getOwner(),
ownerGadget.getOwnerEntityId(),
owner);
if (DebugConstants.LOG_ABILITIES) {
Grasscutter.getLogger()
.debug(
"Owner {} has top owner {}: {}",
ability.getOwner(),
ownerGadget.getOwnerEntityId(),
owner);
}
}

if (owner == null) return false;
Expand Down Expand Up @@ -76,7 +78,7 @@ public boolean execute(
amountToRegenerate +=
amountByTargetMaxHPRatio * target.getFightProperty(FightProperty.FIGHT_PROP_MAX_HP);

Grasscutter.getLogger().debug(">>> Healing {} without ratios", amountToRegenerate);
Grasscutter.getLogger().trace("Healing {} without ratios", amountToRegenerate);
target.heal(
amountToRegenerate * abilityRatio * action.healRatio.get(ability, 1f),
action.muteHealEffect);
Expand Down
Loading

0 comments on commit 70eb0f2

Please sign in to comment.