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:
KingRainbow44
2023-03-31 23:58:12 -04:00
parent 86aad96125
commit 262ee38ded
229 changed files with 6729 additions and 0 deletions

View File

@@ -0,0 +1,17 @@
package emu.grasscutter.game.quest.exec;
import emu.grasscutter.data.excels.QuestData;
import emu.grasscutter.game.quest.GameQuest;
import emu.grasscutter.game.quest.QuestValueExec;
import emu.grasscutter.game.quest.enums.QuestExec;
import emu.grasscutter.game.quest.handlers.QuestExecHandler;
import emu.grasscutter.Grasscutter;
@QuestValueExec(QuestExec.QUEST_EXEC_ADD_CUR_AVATAR_ENERGY)
public class ExecAddCurAvatarEnergy extends QuestExecHandler {
@Override
public boolean execute(GameQuest quest, QuestData.QuestExecParam condition, String... paramStr) {
Grasscutter.getLogger().info("Energy refilled");
return quest.getOwner().getEnergyManager().refillEntityAvatarEnergy();
}
}

View File

@@ -0,0 +1,31 @@
package emu.grasscutter.game.quest.exec;
import emu.grasscutter.Grasscutter;
import emu.grasscutter.data.excels.QuestData;
import emu.grasscutter.game.props.ElementType;
import emu.grasscutter.game.quest.GameQuest;
import emu.grasscutter.game.quest.QuestValueExec;
import emu.grasscutter.game.quest.enums.QuestExec;
import emu.grasscutter.game.quest.handlers.QuestExecHandler;
import lombok.val;
/**
* Changes the main avatar's element. First parameter is the elementType id
*/
@QuestValueExec(QuestExec.QUEST_EXEC_CHANGE_AVATAR_ELEMET)
public class ExecChangeAvatarElemet extends QuestExecHandler {
@Override
public boolean execute(GameQuest quest, QuestData.QuestExecParam condition, String... paramStr) {
val targetElement = ElementType.getTypeByValue(Integer.parseInt(paramStr[0]));
val owner = quest.getOwner();
val mainAvatar = owner.getAvatars().getAvatarById(owner.getMainCharacterId());
if(mainAvatar == null){
Grasscutter.getLogger().error("Failed to get main avatar for use {}", quest.getOwner().getUid());
return false;
}
Grasscutter.getLogger().info("Changing avatar element to {} for quest {}", targetElement.name(), quest.getSubQuestId());
return mainAvatar.changeElement(targetElement);
}
}

View File

@@ -0,0 +1,19 @@
package emu.grasscutter.game.quest.exec;
import emu.grasscutter.data.excels.QuestData;
import emu.grasscutter.game.quest.GameQuest;
import emu.grasscutter.game.quest.QuestValueExec;
import emu.grasscutter.game.quest.enums.QuestExec;
import emu.grasscutter.game.quest.handlers.QuestExecHandler;
import lombok.val;
@QuestValueExec(QuestExec.QUEST_EXEC_CLEAR_TIME_VAR)
public class ExecClearTimeVar extends QuestExecHandler {
@Override
public boolean execute(GameQuest quest, QuestData.QuestExecParam condition, String... paramStr) {
val mainQuestId = Integer.parseInt(condition.getParam()[0]);
val timeVarId = Integer.parseInt(condition.getParam()[1]);
val mainQuest = quest.getOwner().getQuestManager().getMainQuestById(mainQuestId);
return mainQuest.clearTimeVar(timeVarId);
}
}

View File

@@ -0,0 +1,17 @@
package emu.grasscutter.game.quest.exec;
import emu.grasscutter.data.excels.QuestData;
import emu.grasscutter.game.quest.GameQuest;
import emu.grasscutter.game.quest.QuestValueExec;
import emu.grasscutter.game.quest.enums.QuestExec;
import emu.grasscutter.game.quest.handlers.QuestExecHandler;
@QuestValueExec(QuestExec.QUEST_EXEC_DEL_PACK_ITEM)
public class ExecDelPackItem extends QuestExecHandler {
@Override
public boolean execute(GameQuest quest, QuestData.QuestExecParam condition, String... paramStr) {
int itemId = Integer.parseInt(paramStr[0]);
int amount = Integer.parseInt(paramStr[1]);
return quest.getOwner().getInventory().removeItem(itemId, amount);
}
}

View File

@@ -0,0 +1,26 @@
package emu.grasscutter.game.quest.exec;
import emu.grasscutter.data.excels.QuestData;
import emu.grasscutter.game.quest.GameQuest;
import emu.grasscutter.game.quest.QuestValueExec;
import emu.grasscutter.game.quest.enums.QuestExec;
import emu.grasscutter.game.quest.handlers.QuestExecHandler;
@QuestValueExec(QuestExec.QUEST_EXEC_DEL_PACK_ITEM_BATCH)
public class ExecDelPackItemBatch extends QuestExecHandler {
@Override
public boolean execute(GameQuest quest, QuestData.QuestExecParam condition, String... paramStr) {
// input is like this: "100497:999,100498:999,100499:999"
var items = paramStr[0].split(",");
boolean success = true;
for (var itemString : items){
var itemFields = itemString.split(":");
var itemId = Integer.parseInt(itemFields[0]);
var amount = Integer.parseInt(itemFields[1]);
if(!quest.getOwner().getInventory().removeItem(itemId, amount)){
success = false;
}
}
return success;
}
}

View File

@@ -0,0 +1,21 @@
package emu.grasscutter.game.quest.exec;
import emu.grasscutter.Grasscutter;
import emu.grasscutter.data.excels.QuestData;
import emu.grasscutter.game.quest.GameQuest;
import emu.grasscutter.game.quest.QuestValueExec;
import emu.grasscutter.game.quest.enums.QuestExec;
import emu.grasscutter.game.quest.handlers.QuestExecHandler;
@QuestValueExec(QuestExec.QUEST_EXEC_GRANT_TRIAL_AVATAR)
public class ExecGrantTrialAvatar extends QuestExecHandler {
@Override
public boolean execute(GameQuest quest, QuestData.QuestExecParam condition, String... paramStr) {
if (quest.getOwner().addTrialAvatarForQuest(Integer.parseInt(paramStr[0]), quest.getMainQuestId())) {
Grasscutter.getLogger().info("Added trial avatar to team for quest {}", quest.getSubQuestId());
return true;
}
return false;
}
}

View File

@@ -0,0 +1,18 @@
package emu.grasscutter.game.quest.exec;
import emu.grasscutter.data.excels.QuestData;
import emu.grasscutter.game.quest.GameQuest;
import emu.grasscutter.game.quest.QuestValueExec;
import emu.grasscutter.game.quest.enums.QuestExec;
import emu.grasscutter.game.quest.handlers.QuestExecHandler;
import lombok.val;
@QuestValueExec(QuestExec.QUEST_EXEC_INIT_TIME_VAR)
public class ExecInitTimeVar extends QuestExecHandler {
@Override
public boolean execute(GameQuest quest, QuestData.QuestExecParam condition, String... paramStr) {
val timeVarId = Integer.parseInt(condition.getParam()[0]);
val mainQuest = quest.getMainQuest();
return mainQuest.initTimeVar(timeVarId);
}
}

View File

@@ -0,0 +1,19 @@
package emu.grasscutter.game.quest.exec;
import emu.grasscutter.data.excels.QuestData;
import emu.grasscutter.game.quest.GameQuest;
import emu.grasscutter.game.quest.QuestValueExec;
import emu.grasscutter.game.quest.enums.QuestExec;
import emu.grasscutter.game.quest.handlers.QuestExecHandler;
@QuestValueExec(QuestExec.QUEST_EXEC_REFRESH_GROUP_MONSTER)
public class ExecRefreshGroupMonster extends QuestExecHandler {
@Override
public boolean execute(GameQuest quest, QuestData.QuestExecParam condition, String... paramStr) {
var groupId = Integer.parseInt(paramStr[0]);
return quest.getOwner().getScene().getScriptManager().refreshGroupMonster(groupId);
}
}

View File

@@ -0,0 +1,39 @@
package emu.grasscutter.game.quest.exec;
import emu.grasscutter.Grasscutter;
import emu.grasscutter.data.excels.QuestData;
import emu.grasscutter.game.quest.GameQuest;
import emu.grasscutter.game.quest.QuestGroupSuite;
import emu.grasscutter.game.quest.QuestValueExec;
import emu.grasscutter.game.quest.enums.QuestExec;
import emu.grasscutter.game.quest.handlers.QuestExecHandler;
import emu.grasscutter.game.world.Scene;
@QuestValueExec(QuestExec.QUEST_EXEC_REGISTER_DYNAMIC_GROUP)
public class ExecRegisterDynamicGroup extends QuestExecHandler {
@Override
public boolean execute(GameQuest quest, QuestData.QuestExecParam condition, String... paramStr) {
var sceneId = Integer.parseInt(paramStr[0]);
var groupId = Integer.parseInt(paramStr[1]);
Grasscutter.getLogger().warn("Registering group {}", groupId);
Scene scene = quest.getOwner().getWorld().getSceneById(sceneId);
if(scene == null) return false;
int suiteId = scene.loadDynamicGroup(groupId);
if(suiteId == -1) return false;
quest.getMainQuest().getQuestGroupSuites().add(QuestGroupSuite.of()
.scene(sceneId)
.group(groupId)
.suite(suiteId)
.build());
Grasscutter.getLogger().warn("Registered group {}, suite {} in scene {}", groupId, suiteId, scene.getId());
return true;
}
}

View File

@@ -0,0 +1,21 @@
package emu.grasscutter.game.quest.exec;
import emu.grasscutter.Grasscutter;
import emu.grasscutter.data.excels.QuestData;
import emu.grasscutter.game.quest.GameQuest;
import emu.grasscutter.game.quest.QuestValueExec;
import emu.grasscutter.game.quest.enums.QuestExec;
import emu.grasscutter.game.quest.handlers.QuestExecHandler;
@QuestValueExec(QuestExec.QUEST_EXEC_REMOVE_TRIAL_AVATAR)
public class ExecRemoveTrialAvatar extends QuestExecHandler {
@Override
public boolean execute(GameQuest quest, QuestData.QuestExecParam condition, String... paramStr) {
if (quest.getOwner().removeTrialAvatarForQuest(Integer.parseInt(paramStr[0]))) {
Grasscutter.getLogger().info("Removed trial avatar from team for quest {}", quest.getSubQuestId());
return true;
}
return false;
}
}

View File

@@ -0,0 +1,24 @@
package emu.grasscutter.game.quest.exec;
import emu.grasscutter.data.excels.QuestData;
import emu.grasscutter.game.quest.GameQuest;
import emu.grasscutter.game.quest.QuestValueExec;
import emu.grasscutter.game.quest.enums.QuestExec;
import emu.grasscutter.game.quest.handlers.QuestExecHandler;
import emu.grasscutter.server.packet.send.PacketScenePlayerLocationNotify;
@QuestValueExec(QuestExec.QUEST_EXEC_ROLLBACK_PARENT_QUEST)
public class ExecRollbackParentQuest extends QuestExecHandler {
@Override
public boolean execute(GameQuest quest, QuestData.QuestExecParam condition, String... paramStr) {
var targetPosition = quest.getMainQuest().rewind();
if(targetPosition == null){
return false;
}
quest.getOwner().getPosition().set(targetPosition.get(0));
quest.getOwner().getRotation().set(targetPosition.get(1));
quest.getOwner().sendPacket(new PacketScenePlayerLocationNotify(quest.getOwner().getScene()));
// todo proper reset and warp
return true;
}
}

View File

@@ -0,0 +1,26 @@
package emu.grasscutter.game.quest.exec;
import emu.grasscutter.data.excels.QuestData;
import emu.grasscutter.game.quest.GameQuest;
import emu.grasscutter.game.quest.QuestValueExec;
import emu.grasscutter.game.quest.enums.QuestExec;
import emu.grasscutter.game.quest.handlers.QuestExecHandler;
import emu.grasscutter.server.packet.send.PacketScenePlayerLocationNotify;
@QuestValueExec(QuestExec.QUEST_EXEC_ROLLBACK_QUEST)
public class ExecRollbackQuest extends QuestExecHandler {
@Override
public boolean execute(GameQuest quest, QuestData.QuestExecParam condition, String... paramStr) {
var targetQuestId = Integer.parseInt(paramStr[0]);
var targetQuest = quest.getOwner().getQuestManager().getQuestById(targetQuestId);
var targetPosition = targetQuest.getMainQuest().rewindTo(targetQuest, true);
if(targetPosition == null){
return false;
}
quest.getOwner().getPosition().set(targetPosition.get(0));
quest.getOwner().getRotation().set(targetPosition.get(1));
quest.getOwner().sendPacket(new PacketScenePlayerLocationNotify(quest.getOwner().getScene()));
// todo proper reset and warp
return true;
}
}

View File

@@ -0,0 +1,24 @@
package emu.grasscutter.game.quest.exec;
import emu.grasscutter.data.excels.QuestData;
import emu.grasscutter.game.quest.GameQuest;
import emu.grasscutter.game.quest.QuestValueExec;
import emu.grasscutter.game.quest.enums.QuestExec;
import emu.grasscutter.game.quest.handlers.QuestExecHandler;
import lombok.val;
import java.util.Arrays;
@QuestValueExec(QuestExec.QUEST_EXEC_SET_OPEN_STATE)
public class ExecSetOpenState extends QuestExecHandler {
@Override
public boolean execute(GameQuest quest, QuestData.QuestExecParam condition, String... paramStr) {
val param = Arrays.stream(paramStr)
.filter(i -> !i.isBlank())
.mapToInt(Integer::parseInt)
.toArray();
quest.getOwner().getProgressManager().forceSetOpenState(param[0], param[1]);
return true;
}
}

View File

@@ -0,0 +1,37 @@
package emu.grasscutter.game.quest.exec;
import emu.grasscutter.Grasscutter;
import emu.grasscutter.data.excels.QuestData;
import emu.grasscutter.game.quest.GameQuest;
import emu.grasscutter.game.quest.QuestValueExec;
import emu.grasscutter.game.quest.enums.QuestExec;
import emu.grasscutter.game.quest.handlers.QuestExecHandler;
import emu.grasscutter.game.world.Scene;
import emu.grasscutter.scripts.data.SceneBlock;
import emu.grasscutter.scripts.data.SceneGroup;
import lombok.val;
@QuestValueExec(QuestExec.QUEST_EXEC_UNREGISTER_DYNAMIC_GROUP)
public class ExecUnregisterDynamicGroup extends QuestExecHandler {
@Override
public boolean execute(GameQuest quest, QuestData.QuestExecParam condition, String... paramStr) {
val groupId = Integer.parseInt(paramStr[0]);
val unknownParam = Integer.parseInt(paramStr[1]); //TODO: Goes from 0 to 1, maybe is a boolean. Investigate
val scene = quest.getOwner().getScene();
Grasscutter.getLogger().warn("Unregistering group {}", groupId);
if(!scene.unregisterDynamicGroup(groupId)){
return false;
}
//Remove suites if they are registered
quest.getMainQuest().getQuestGroupSuites().removeIf(gs -> gs.getGroup() == groupId && gs.getScene() == scene.getId());
Grasscutter.getLogger().warn("Unregistered group {} in scene {}", groupId, scene.getId());
return true;
}
}