【问题标题】:My timer script for minecraft is not working我的我的世界计时器脚本不起作用... lua
【发布时间】:2022-05-07 20:56:46
【问题描述】:

我的 Minecraft 计时器脚本有问题 我尝试添加一个函数,将世界的时间值保存在文档中。在我添加此功能之前,计时器工作得很好……感谢您的帮助!如果您有任何问题,请在 cmets 中询问! 代码:

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'
 --
--[[
    

    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-------------
previoustime = 0
state = 0
startTime = 0
stopTime = 0

ImportedLib = importLib("readfile.lua")


function keyboard(key, isDown)
    if (isDown == true) then
        if (key == RESET_KEY) then
            state = 0
        elseif (key == START_STOP_KEY) then
            if (state == 0) then
                state = 1
                startTime = os.time()
            elseif (state == 1) then
                state = 2
                previoustime = os.time()
                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 - 86400
    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

这是我要添加的功能

if (state == 1) then
      local worldName = server.worldName()
      io.open(local worldName".txt", "w")
      io.output(file)
      io.write(time)
      io.close(file)
  end

if (state == 0) then
      local worldName = server.worldName()
      io.open(local worldName".txt", "r")
      io.output(file)
      time = (file:read())
      io.close(file)
  end 

【问题讨论】:

  • io.open(local worldName".txt", "r") 替换为io.open(worldName..".txt", "r")。并阅读“Lua 编程”一书。
  • 它说试图访问一个零值(全局“文件”)@EgorSkriptunoff
  • 文件未找到。
  • 我该如何解决这个问题?
  • 显然,您应该创建文件。 Lua 无法读取不存在的文件。

标签: lua timer minecraft


【解决方案1】:

您似乎想连接(连接)两个字符串io.open(local worldName".txt", "r")。您应该为此使用 concat 运算符(双点):

local s1 = "Hello "
local s2 = "World!!!"
local s3 = s1..s2
print(s3)

这个程序将打印字符串“Hello world!!” (不带引号)。

此外,您只应该在声明变量时使用 local 关键字。 所以:

if (state == 1) then
      local worldName = server.worldName()
      io.open(worldName..".txt", "w")
      io.output(file)
      io.write(time)
      io.close(file)
  end

if (state == 0) then
      local worldName = server.worldName()
      io.open(worldName..".txt", "r")
      io.output(file)
      time = (file:read())
      io.close(file)
  end 

此代码是您想要编写的正确版本。我删除了 local 关键字的错误用法并添加了 concat 运算符。

【讨论】:

    最近更新 更多