Lua脚本有时不会将值保存在文件中 [英] Lua script sometimes doesn't save values in the file

查看:23
本文介绍了Lua脚本有时不会将值保存在文件中的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我为《我的世界》制作了一个计时器脚本,它应该显示在游戏中花费的时间。您可以暂停、继续并重置时间。我的下一步是让它能够将时间保存在一个名为timesave.txt的文件中,但有时它不能节省时间,它只是空的……如果它节省了时间,它就会读取并使用它来恢复旧时间。 代码如下:

name = "Timer"
description = "Just a normal Timer."
positionX = 0
positionY = 0
sizeX = 24
sizeY = 10
scale = 1

START_STOP_KEY = 0x55 --or 'U'
RESET_KEY = 0x4A --or 'J'
 --
--[[
    Timer Module Script by SebyGHG original script by Onix64(Stopwatch)


    if you wish to change the key you can take the key code from here
    https://docs.microsoft.com/en-us/windows/win32/inputdev/virtual-key-codes
]] -------------script-code-------------
timesaved = 0
stopTime = 0
startTime = 0
f = io.input("timesave.txt")
resultstop  = f :read("*line")
resultstart  = f :read("*line")
f :close()
startTime = resultstop
stopTime = resultstart
timesaved = resultstart - resultstop
state = 2

function keyboard(key, isDown)
    if (isDown == true) then
        if (key == RESET_KEY) then
            f = io.input("timesave.txt")
            resultstart  = f :read("*line")
            resultstop  = f :read("*line")
            f :close()
            startTime = resultstop
            stopTime = resultstart
            timesaved = resultstart - resultstop
            state = 0
        elseif (key == START_STOP_KEY) then
            if (state == 0) then
                state = 1
                startTime = os.time() - timesaved
                io.output("timesave.txt")
                timesave= (io.open("timesave.txt","w"))
                io.write(startTime,'
',stopTime)
                io.close(timesave)
            elseif (state == 1) then
                state = 2
                stopTime = os.time()
            elseif (state == 2) then
        state = 1
        startTime =startTime  + os.time() - stopTime
            end
        end
    end
end

TimerText = "00:00"
TextColor = {r = 30, g = 255, b = 30, a = 255}
function doubleDigit(number)
    if (number < 10) then
        return "0" .. math.floor(number)
    else
        return math.floor(number)
    end
end

function timeText(time)
    local result = ""
    local days = 0
    while (time > 86399) do
        days = days + 1
        time = time - 86400
    end

    local hours = 0
    while (time > 3599) do
        hours = hours + 1
        time = time - 3600
    end

    local minutes = 0
    while (time > 59) do
        minutes = minutes + 1
        time = time - 60
    end

    if (days == 0) then
        if (hours == 0) then
            return doubleDigit(minutes) .. ":" .. doubleDigit(time)
        else
            return math.floor(hours) .. " : " .. doubleDigit(minutes) .. ":" .. doubleDigit(time)
        end
    else
        return math.floor(days) ..
            " : " .. doubleDigit(hours) .. " : " .. doubleDigit(minutes) .. ":" .. doubleDigit(time)
    end
end

function update()
    if (state == 0) then
        TextColor = {r = 255, g = 0, b = 0, a = 255}
        TimerText = "00:00"
    elseif (state == 1) then
        TimerText = timeText(os.time() - startTime)
        TextColor = {r = 0, g = 255, b = 255, a = 255}
    elseif (state == 2) then
        TimerText = timeText(stopTime - startTime)
        TextColor = {r = 255, g = 255, b = 0, a = 255}
    end
end

function render()
    local font = gui.font()
    local tw = font.width(TimerText)

    gfx.color(0, 0, 0, 0)
    gfx.rect(0, 0, tw + 4, 10)

    gfx.color(TextColor.r, TextColor.g, TextColor.b, TextColor.a)
    gfx.text(2, 1, TimerText)
end

感谢您抽出时间,希望能有所帮助! SebyGHG

推荐答案

在写入操作后添加io.flush()timesave:flush()以将写入的数据保存到文件。

参见https://www.lua.org/manual/5.3/manual.html#pdf-file:flush

这篇关于Lua脚本有时不会将值保存在文件中的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆