mirror of
https://github.com/Anime-Game-Servers/Grasscutter-Quests.git
synced 2024-11-23 04:29:42 +00:00
Implement ExecUnlockPlayerWorldScene (#171)
Some checks failed
Build / Build-Server-Jar (push) Has been cancelled
Some checks failed
Build / Build-Server-Jar (push) Has been cancelled
* Implement ExecUnlockPlayerWorldScene
This commit is contained in:
parent
95b26b5ba4
commit
98ec49a0d5
@ -253,6 +253,7 @@ public class ConfigContainer {
|
|||||||
public ResinOptions resinOptions = new ResinOptions();
|
public ResinOptions resinOptions = new ResinOptions();
|
||||||
public Rates rates = new Rates();
|
public Rates rates = new Rates();
|
||||||
public boolean questing = false;
|
public boolean questing = false;
|
||||||
|
public boolean unlockScenesByDefault = false;
|
||||||
|
|
||||||
public static class InventoryLimits {
|
public static class InventoryLimits {
|
||||||
public int weapons = 2000;
|
public int weapons = 2000;
|
||||||
|
@ -150,6 +150,7 @@ public class Player {
|
|||||||
@Getter private Map<Integer, Integer> questGlobalVariables;
|
@Getter private Map<Integer, Integer> questGlobalVariables;
|
||||||
@Getter private Map<Integer, Integer> openStates;
|
@Getter private Map<Integer, Integer> openStates;
|
||||||
@Getter private Map<Integer, Map<Integer, Boolean>> sceneTags;
|
@Getter private Map<Integer, Map<Integer, Boolean>> sceneTags;
|
||||||
|
@Getter @Setter private Map<Integer, Boolean> unlockedScenes;
|
||||||
@Getter @Setter private Map<Integer, Set<Integer>> unlockedSceneAreas;
|
@Getter @Setter private Map<Integer, Set<Integer>> unlockedSceneAreas;
|
||||||
@Getter @Setter private Map<Integer, Set<Integer>> unlockedScenePoints;
|
@Getter @Setter private Map<Integer, Set<Integer>> unlockedScenePoints;
|
||||||
@Getter @Setter private List<Integer> chatEmojiIdList;
|
@Getter @Setter private List<Integer> chatEmojiIdList;
|
||||||
@ -276,6 +277,7 @@ public class Player {
|
|||||||
this.questGlobalVariables = new HashMap<>();
|
this.questGlobalVariables = new HashMap<>();
|
||||||
this.openStates = new HashMap<>();
|
this.openStates = new HashMap<>();
|
||||||
this.sceneTags = new HashMap<>();
|
this.sceneTags = new HashMap<>();
|
||||||
|
this.unlockedScenes = new HashMap<>();
|
||||||
this.unlockedSceneAreas = new HashMap<>();
|
this.unlockedSceneAreas = new HashMap<>();
|
||||||
this.unlockedScenePoints = new HashMap<>();
|
this.unlockedScenePoints = new HashMap<>();
|
||||||
this.chatEmojiIdList = new ArrayList<>();
|
this.chatEmojiIdList = new ArrayList<>();
|
||||||
|
@ -8,11 +8,7 @@ import emu.grasscutter.game.props.ActionReason;
|
|||||||
import emu.grasscutter.game.quest.enums.ParentQuestState;
|
import emu.grasscutter.game.quest.enums.ParentQuestState;
|
||||||
import emu.grasscutter.game.quest.enums.QuestCond;
|
import emu.grasscutter.game.quest.enums.QuestCond;
|
||||||
import emu.grasscutter.game.quest.enums.QuestContent;
|
import emu.grasscutter.game.quest.enums.QuestContent;
|
||||||
import emu.grasscutter.server.packet.send.PacketOpenStateChangeNotify;
|
import emu.grasscutter.server.packet.send.*;
|
||||||
import emu.grasscutter.server.packet.send.PacketOpenStateUpdateNotify;
|
|
||||||
import emu.grasscutter.server.packet.send.PacketSceneAreaUnlockNotify;
|
|
||||||
import emu.grasscutter.server.packet.send.PacketScenePointUnlockNotify;
|
|
||||||
import emu.grasscutter.server.packet.send.PacketSetOpenStateRsp;
|
|
||||||
import lombok.val;
|
import lombok.val;
|
||||||
import org.anime_game_servers.core.gi.enums.QuestState;
|
import org.anime_game_servers.core.gi.enums.QuestState;
|
||||||
import org.anime_game_servers.gi_lua.models.ScriptArgs;
|
import org.anime_game_servers.gi_lua.models.ScriptArgs;
|
||||||
@ -286,6 +282,22 @@ public class PlayerProgressManager extends BasePlayerDataManager {
|
|||||||
this.player.getQuestManager().queueEvent(QuestContent.QUEST_CONTENT_UNLOCK_AREA, sceneId, areaId);
|
this.player.getQuestManager().queueEvent(QuestContent.QUEST_CONTENT_UNLOCK_AREA, sceneId, areaId);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void unlockScene(int sceneId) {
|
||||||
|
//set the scene to locked: false
|
||||||
|
this.player.getUnlockedScenes().put(sceneId, true);
|
||||||
|
|
||||||
|
//Send packet.
|
||||||
|
this.player.sendPacket(new PacketPlayerWorldSceneInfoListNotify(this.player));
|
||||||
|
}
|
||||||
|
|
||||||
|
public void lockScene(int sceneId) {
|
||||||
|
//set the scene to locked: true
|
||||||
|
this.player.getUnlockedScenes().put(sceneId, false);
|
||||||
|
|
||||||
|
//Send packet.
|
||||||
|
this.player.sendPacket(new PacketPlayerWorldSceneInfoListNotify(this.player));
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Give replace costume to player (Ambor, Jean, Mona, Rosaria)
|
* Give replace costume to player (Ambor, Jean, Mona, Rosaria)
|
||||||
*/
|
*/
|
||||||
|
@ -0,0 +1,17 @@
|
|||||||
|
package emu.grasscutter.game.quest.exec;
|
||||||
|
|
||||||
|
import emu.grasscutter.data.common.quest.SubQuestData.QuestExecParam;
|
||||||
|
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_UNLOCK_PLAYER_WORLD_SCENE)
|
||||||
|
public class ExecUnlockPlayerWorldScene extends QuestExecHandler {
|
||||||
|
@Override
|
||||||
|
public boolean execute(GameQuest quest, QuestExecParam condition, String... paramStr) {
|
||||||
|
int sceneId = Integer.parseInt(paramStr[0]);
|
||||||
|
quest.getOwner().getProgressManager().unlockScene(sceneId);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
@ -1,11 +1,13 @@
|
|||||||
package emu.grasscutter.server.packet.send;
|
package emu.grasscutter.server.packet.send;
|
||||||
|
|
||||||
|
import emu.grasscutter.config.Configuration;
|
||||||
import emu.grasscutter.data.GameData;
|
import emu.grasscutter.data.GameData;
|
||||||
import emu.grasscutter.game.player.Player;
|
import emu.grasscutter.game.player.Player;
|
||||||
import emu.grasscutter.game.props.SceneType;
|
import emu.grasscutter.game.props.SceneType;
|
||||||
import emu.grasscutter.net.packet.BaseTypedPacket;
|
import emu.grasscutter.net.packet.BaseTypedPacket;
|
||||||
import org.anime_game_servers.multi_proto.gi.messages.scene.PlayerWorldSceneInfoListNotify;
|
|
||||||
import org.anime_game_servers.multi_proto.gi.messages.scene.PlayerWorldSceneInfo;
|
import org.anime_game_servers.multi_proto.gi.messages.scene.PlayerWorldSceneInfo;
|
||||||
|
import org.anime_game_servers.multi_proto.gi.messages.scene.PlayerWorldSceneInfoListNotify;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
@ -21,6 +23,9 @@ public class PacketPlayerWorldSceneInfoListNotify extends BaseTypedPacket<Player
|
|||||||
if (scene.getSceneType() != SceneType.SCENE_WORLD) continue;
|
if (scene.getSceneType() != SceneType.SCENE_WORLD) continue;
|
||||||
|
|
||||||
var worldInfoBuilder = new PlayerWorldSceneInfo();
|
var worldInfoBuilder = new PlayerWorldSceneInfo();
|
||||||
|
var isSceneUnlocked = player.getWorld().getHost().getUnlockedScenes()
|
||||||
|
.getOrDefault(scene.getId(), Configuration.GAME_OPTIONS.unlockScenesByDefault);
|
||||||
|
worldInfoBuilder.setLocked(!isSceneUnlocked);
|
||||||
worldInfoBuilder.setSceneId(scene.getId());
|
worldInfoBuilder.setSceneId(scene.getId());
|
||||||
|
|
||||||
worldInfoBuilder.setSceneTagIdList(player.getSceneTagList(scene.getId()));
|
worldInfoBuilder.setSceneTagIdList(player.getSceneTagList(scene.getId()));
|
||||||
|
Loading…
Reference in New Issue
Block a user