FreeKill/lua/freekill.lua

104 lines
2.8 KiB
Lua
Raw Normal View History

-- SPDX-License-Identifier: GPL-3.0-or-later
2023-04-12 20:51:09 +08:00
-- 用于初始化FreeKill的最基本脚本
-- 向Lua虚拟机中加载库、游戏中的类以及加载Mod等等。
2023-04-12 20:51:09 +08:00
-- 加载第三方库
package.path = package.path .. ";./lua/lib/?.lua"
.. ";./lua/?.lua"
2023-04-12 20:51:09 +08:00
-- middleclass: 轻量级的面向对象库
class = require "middleclass"
2023-04-12 20:51:09 +08:00
-- json: 提供json处理支持能解析JSON和生成JSON
-- 仍借助luajson处理简单类型。
local luajson = require "json"
json = {
encode = function(val, t)
if type(val) ~= "table" then return luajson.encode(val) end
t = t or 1 -- Compact
---@diagnostic disable-next-line
local doc = fk.QJsonDocument_fromVariant(val)
local ret = doc:toJson(t)
return ret
end,
decode = function(str)
if str == "null" then return nil end
local start = str:sub(1, 1)
if start ~= "[" and start ~= "{" then
return luajson.decode(str)
end
---@diagnostic disable-next-line
local doc = fk.QJsonDocument_fromJson(str)
local ret = doc:toVariant()
-- if ret == "" then ret = luajson.decode(str) end
return ret
end,
}
2022-03-30 16:33:56 +08:00
2023-04-12 20:51:09 +08:00
-- 初始化随机数种子
math.randomseed(os.time())
-- 加载实用类让Lua编写起来更轻松。
local Utils = require "core.util"
-- TargetGroup, AimGroup, Util = table.unpack(Utils)
TargetGroup, AimGroup, Util = Utils[1], Utils[2], Utils[3]
dofile "lua/core/debug.lua"
2023-04-12 20:51:09 +08:00
-- 加载游戏核心类
Engine = require "core.engine"
Package = require "core.package"
General = require "core.general"
Card = require "core.card"
Exppattern = require "core.exppattern"
Skill = require "core.skill"
UsableSkill = require "core.skill_type.usable_skill"
StatusSkill = require "core.skill_type.status_skill"
Player = require "core.player"
GameMode = require "core.game_mode"
AbstractRoom = require "core.abstract_room"
UI = require "ui-util"
2023-04-12 20:51:09 +08:00
-- 读取配置文件。
-- 因为io马上就要被禁用了所以赶紧先在这里读取配置文件。
local function loadConf()
local cfg = io.open("freekill.client.config.json")
local ret
if cfg == nil then
ret = {
language = "zh_CN",
}
else
ret = json.decode(cfg:read("a"))
cfg:close()
end
return ret
end
Config = loadConf()
2023-04-12 20:51:09 +08:00
-- 禁用各种危险的函数尽可能让Lua执行安全的代码。
local _os = {
time = os.time,
date = os.date,
clock = os.clock,
difftime = os.difftime,
getms = os.getms,
}
os = _os
io = nil
package = nil
load = nil
loadfile = nil
local _dofile = dofile
dofile = function(f)
local errmsg = "Refusing dofile that not in game directory"
assert(not f:startsWith("/"), errmsg)
assert(not f:startsWith(".."), errmsg)
assert(not f:find(":"), errmsg)
return _dofile(f)
end
2023-04-12 20:51:09 +08:00
-- 初始化Engine类并置于Fk全局变量中这里会加载拓展包
dofile "lua/fk_ex.lua"
Fk = Engine:new()