mirror of
https://github.com/Grasscutters/Grasscutter.git
synced 2026-03-29 12:02:46 +02: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,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();
|
||||
}
|
||||
}
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
}
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user