Files
Grasscutter/src/main/java/emu/grasscutter/game/talk/exec/ExecTransSceneDummyPoint.java
T

40 lines
1.8 KiB
Java

package emu.grasscutter.game.talk.exec;
import emu.grasscutter.data.GameData;
import emu.grasscutter.data.binout.ScriptSceneData;
import emu.grasscutter.data.excels.TalkConfigData;
import emu.grasscutter.data.excels.TalkConfigData.TalkExecParam;
import emu.grasscutter.game.player.Player;
import emu.grasscutter.game.talk.TalkExec;
import emu.grasscutter.game.talk.TalkExecHandler;
import emu.grasscutter.game.talk.TalkValueExec;
import emu.grasscutter.utils.Position;
@TalkValueExec(TalkExec.TALK_EXEC_TRANS_SCENE_DUMMY_POINT)
public final class ExecTransSceneDummyPoint extends TalkExecHandler {
@Override
public void execute(Player player, TalkConfigData talkData, TalkExecParam execParam) {
// param[0] == sceneid, param[1] == position
if (execParam.getParam().length < 2) return;
var fullGlobals = GameData.getScriptSceneDataMap().get("flat.luas.scenes.full_globals.lua.json");
if (fullGlobals == null) return;
var dummyPointScript = fullGlobals.getScriptObjectList()
.get(execParam.getParam()[0] + "/scene" + execParam.getParam()[0] + "_dummy_points.lua");
if (dummyPointScript == null) return;
var dummyPointMap = dummyPointScript.getDummyPoints();
if (dummyPointMap == null) return;
var transmitPosPos = dummyPointMap.get(execParam.getParam()[1] + ".pos");
// List<Float> transmitPosRot = dummyPointMap.get(e.getParam()[1] + ".rot"); would be useful when transportation consider rotation
if (transmitPosPos == null || transmitPosPos.isEmpty()) return;
player.getWorld().transferPlayerToScene(
player,
Integer.parseInt(execParam.getParam()[0]),
new Position(transmitPosPos.get(0), transmitPosPos.get(1), transmitPosPos.get(2)));
}
}