1
Fork 0
mirror of https://github.com/redstrate/Kawari.git synced 2025-06-30 11:47:45 +00:00
kawari/resources/scripts/events/custom/000/cmndefinnbed_00020.lua

54 lines
2.4 KiB
Lua
Raw Normal View History

-- Event flags, courtesy of Sapphire
-- https://github.com/SapphireServer/Sapphire/blob/bf3368224a00c180cbb7ba413b52395eba58ec0b/src/world/Event/EventDefs.h#L9
-- Cutscene flags, TODO: move these to Global.lua, or maybe a new file named Cutscene.lua or something along those lines, to store all of them
FADE_OUT = 0x00000002
HIDE_UI = 0x00000800
HIDE_HOTBAR = 0x00002000
CONDITION_CUTSCENE = 0x00000400
SET_BASE = 0xF8400EFB -- Pulled from Sapphire, perhaps the default flags the server sends for most cutscenes?
-- Scene numbers
SCENE_SHOW_MENU = 00000
SCENE_SLEEP_ANIM = 00001
SCENE_LOG_OUT = 00002
SCENE_DREAMFITTING = 00003
SCENE_AWAKEN_ANIM = 00100
function onTalk(target, player)
player:play_scene(target, EVENT_ID, SCENE_SHOW_MENU, HIDE_HOTBAR, {0})
end
function onReturn(scene, results, player)
local CUTSCENE_FLAGS <const> = FADE_OUT | HIDE_UI | CONDITION_CUTSCENE
-- Decision values the player can choose
local CANCEL_SCENE <const> = 0 -- If the player hits escape/cancel on controller to cancel the menu
local NOTHING <const> = 1
local DREAMFITTING <const> = 2
local LOG_OUT <const> = 3
local EXIT_GAME <const> = 4 -- LOG_OUT and EXIT_GAME are unused by us in this script, but they are provided here as documentation for the decison values
local decision <const> = results[1]
if scene == SCENE_SHOW_MENU then
if decision == NOTHING or decision == CANCEL_SCENE then
player:finish_event(EVENT_ID)
else
if decision == LOG_OUT or decision == EXIT_GAME then
player:begin_log_out()
end
player:play_scene(player.id, EVENT_ID, SCENE_SLEEP_ANIM, CUTSCENE_FLAGS, {decision})
end
elseif scene == SCENE_SLEEP_ANIM then
if decision == DREAMFITTING then
player:play_scene(player.id, EVENT_ID, SCENE_DREAMFITTING, CUTSCENE_FLAGS, {0})
else
-- The player decided to log out or exit the game. The server don't care which, as the client handles itself, so pass along the decision.
player:play_scene(player.id, EVENT_ID, SCENE_LOG_OUT, CUTSCENE_FLAGS, {decision})
end
elseif scene == SCENE_DREAMFITTING then
player:play_scene(player.id, EVENT_ID, SCENE_AWAKEN_ANIM, CUTSCENE_FLAGS, {0})
else
player:finish_event(EVENT_ID)
end
end