Debuggers: Added a cLuaChunkStay test code.
This commit is contained in:
parent
47a497fa89
commit
1447d6d0dc
@ -53,6 +53,7 @@ function Initialize(Plugin)
|
||||
PM:BindCommand("/fr", "debuggers", HandleFurnaceRecipe, "- Shows the furnace recipe for the currently held item");
|
||||
PM:BindCommand("/ff", "debuggers", HandleFurnaceFuel, "- Shows how long the currently held item would burn in a furnace");
|
||||
PM:BindCommand("/sched", "debuggers", HandleSched, "- Schedules a simple countdown using cWorld:ScheduleTask()");
|
||||
PM:BindCommand("/cs", "debuggers", HandleChunkStay, "- Tests the ChunkStay Lua integration for the specified chunk coords");
|
||||
|
||||
Plugin:AddWebTab("Debuggers", HandleRequest_Debuggers);
|
||||
|
||||
@ -1061,3 +1062,74 @@ end
|
||||
|
||||
|
||||
|
||||
|
||||
function HandleChunkStay(a_Split, a_Player)
|
||||
if (#a_Split ~= 3) then
|
||||
a_Player:SendMessage("Usage: /cs <ChunkX> <ChunkZ>")
|
||||
return true
|
||||
end
|
||||
|
||||
local ChunkX = tonumber(a_Split[2])
|
||||
local ChunkZ = tonumber(a_Split[3])
|
||||
if ((ChunkX == nil) or (ChunkZ == nil)) then
|
||||
a_Player:SendMessage("Invalid chunk coords.")
|
||||
return true
|
||||
end
|
||||
|
||||
local World = a_Player:GetWorld()
|
||||
local PlayerID = a_Player:GetUniqueID()
|
||||
|
||||
-- Create the ChunkStay object:
|
||||
local ChunkStay = cLuaChunkStay()
|
||||
|
||||
-- Add the wanted chunks:
|
||||
for z = -1, 1 do for x = -1, 1 do
|
||||
ChunkStay:Add(ChunkX + x, ChunkZ + z)
|
||||
end end
|
||||
|
||||
-- The function that is called when all chunks are available
|
||||
-- Will perform the action and finally get rid of the ChunkStay object
|
||||
-- Note that the player needs to be referenced using their EntityID - in case they disconnect before this completes
|
||||
local OnAllChunksAvailable = function()
|
||||
-- Build something on the neighboring chunks, to verify:
|
||||
for z = -1, 1 do for x = -1, 1 do
|
||||
local BlockX = (ChunkX + x) * 16 + 8
|
||||
local BlockZ = (ChunkZ + z) * 16 + 8
|
||||
for y = 20, 80 do
|
||||
World:SetBlock(BlockX, y, BlockZ, E_BLOCK_OBSIDIAN, 0)
|
||||
end
|
||||
end end
|
||||
|
||||
-- Teleport the player there for visual inspection:
|
||||
World:DoWithEntityByID(PlayerID,
|
||||
function (a_CallbackPlayer)
|
||||
a_CallbackPlayer:TeleportToCoords(ChunkX * 16 + 8, 85, ChunkZ * 16 + 8)
|
||||
a_CallbackPlayer:SendMessage("ChunkStay fully available")
|
||||
end
|
||||
)
|
||||
|
||||
-- Deactivate and remove the ChunkStay object (so that MCS can unload the chunks):
|
||||
-- Forgetting this might crash the server when it stops!
|
||||
ChunkStay:Disable()
|
||||
ChunkStay = nil
|
||||
end
|
||||
|
||||
-- This function will be called for each chunk that is made available
|
||||
-- Note that the player needs to be referenced using their EntityID - in case they disconnect before this completes
|
||||
local OnChunkAvailable = function(a_ChunkX, a_ChunkZ)
|
||||
LOGINFO("ChunkStay now has chunk [" .. a_ChunkX .. ", " .. a_ChunkZ .. "]")
|
||||
World:DoWithEntityByID(PlayerID,
|
||||
function (a_CallbackPlayer)
|
||||
a_CallbackPlayer:SendMessage("ChunkStay now has chunk [" .. a_ChunkX .. ", " .. a_ChunkZ .. "]")
|
||||
end
|
||||
)
|
||||
end
|
||||
|
||||
-- Activate the ChunkStay:
|
||||
ChunkStay:Enable(World, OnChunkAvailable, OnAllChunksAvailable)
|
||||
return true
|
||||
end
|
||||
|
||||
|
||||
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user