mirror of
https://github.com/clusterio/clusterio.git
synced 2026-11-12 07:04:52 +09:00
The largest source was compat.lua returning the setmetatable call directly, which made emmylua infer the module type from the metatable rather than the LibCompat class, hiding every field from consumers. The remaining fixes are nil guards on gui element and character accesses, type annotations for research_sync's script data and player_auth's rcon arguments, casts where the api's read/write union types are wider than the values at runtime, and scoped diagnostic disables for the vendored json.lua and the version fallback code that touches apis removed from the current typedefs. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
39 lines
1.3 KiB
Lua
39 lines
1.3 KiB
Lua
local compat = require("modules/clusterio/compat")
|
|
|
|
local can_enter_vehicle = {
|
|
[defines.controllers.character] = true,
|
|
[defines.controllers.god] = true,
|
|
[defines.controllers.editor] = true,
|
|
}
|
|
|
|
if defines.controllers.remote then
|
|
-- Does not exist in 1.1, so we need this nil check
|
|
can_enter_vehicle[defines.controllers.remote] = true
|
|
end
|
|
|
|
local v2_surface_platform = compat.version_ge("2.0.0")
|
|
|
|
--- @param player LuaPlayer
|
|
--- @param record table
|
|
return function(player, record)
|
|
if record.vehicle and record.vehicle.valid and can_enter_vehicle[player.controller_type] then
|
|
player.teleport(record.vehicle.position, record.vehicle.surface)
|
|
player.driving = true
|
|
|
|
-- Teleport to safe location if unable to enter vehicle
|
|
local character = player.character
|
|
if not player.driving and character and player.controller_type == defines.controllers.character then
|
|
local safe_position = record.vehicle.surface.find_non_colliding_position(
|
|
character.name, player.position, 32, 1/8
|
|
)
|
|
if safe_position then
|
|
player.teleport(safe_position, player.surface)
|
|
end
|
|
end
|
|
elseif v2_surface_platform and record.surface and record.surface.platform and can_enter_vehicle[player.controller_type] then
|
|
player.enter_space_platform(record.surface.platform)
|
|
elseif record.surface and record.position then
|
|
player.teleport(record.position, record.surface)
|
|
end
|
|
end
|