summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMattes D <github@xoft.cz>2014-10-13 14:49:18 +0200
committerMattes D <github@xoft.cz>2014-10-13 14:49:18 +0200
commit7f8118e0cbcea2b54b7c14119626772c88e42d94 (patch)
tree36f6861fb0390f3a543dde56a9825d795f150778
parentFixed style. (diff)
downloadcuberite-7f8118e0cbcea2b54b7c14119626772c88e42d94.tar
cuberite-7f8118e0cbcea2b54b7c14119626772c88e42d94.tar.gz
cuberite-7f8118e0cbcea2b54b7c14119626772c88e42d94.tar.bz2
cuberite-7f8118e0cbcea2b54b7c14119626772c88e42d94.tar.lz
cuberite-7f8118e0cbcea2b54b7c14119626772c88e42d94.tar.xz
cuberite-7f8118e0cbcea2b54b7c14119626772c88e42d94.tar.zst
cuberite-7f8118e0cbcea2b54b7c14119626772c88e42d94.zip
-rw-r--r--MCServer/Plugins/Debuggers/Debuggers.lua19
-rw-r--r--src/World.cpp27
2 files changed, 34 insertions, 12 deletions
diff --git a/MCServer/Plugins/Debuggers/Debuggers.lua b/MCServer/Plugins/Debuggers/Debuggers.lua
index f66ac76a0..3dcd4ebee 100644
--- a/MCServer/Plugins/Debuggers/Debuggers.lua
+++ b/MCServer/Plugins/Debuggers/Debuggers.lua
@@ -10,9 +10,6 @@ g_ShowFoodStats = false; -- When true, each player's food stats are sent to the
function Initialize(Plugin)
- Plugin:SetName("Debuggers")
- Plugin:SetVersion(1)
-
--[[
-- Test multiple hook handlers:
cPluginManager.AddHook(cPluginManager.HOOK_TICK, OnTick1);
@@ -68,6 +65,8 @@ function Initialize(Plugin)
PM:BindCommand("/rmitem", "debuggers", HandleRMItem, "- Remove the specified item from the inventory.");
PM:BindCommand("/pickups", "debuggers", HandlePickups, "- Spawns random pickups around you");
PM:BindCommand("/poof", "debuggers", HandlePoof, "- Nudges pickups close to you away from you");
+
+ PM:BindConsoleCommand("sched", HandleConsoleSchedule, "Tests the world scheduling");
Plugin:AddWebTab("Debuggers", HandleRequest_Debuggers)
Plugin:AddWebTab("StressTest", HandleRequest_StressTest)
@@ -1630,3 +1629,17 @@ end
+
+function HandleConsoleSchedule(a_Split)
+ LOG("Scheduling a task for 2 seconds in the future")
+ cRoot:Get():GetDefaultWorld():ScheduleTask(40,
+ function ()
+ LOG("Scheduled function is called.")
+ end
+ )
+ return true, "Task scheduled"
+end
+
+
+
+
diff --git a/src/World.cpp b/src/World.cpp
index d147b1c84..96afb8cc8 100644
--- a/src/World.cpp
+++ b/src/World.cpp
@@ -1068,15 +1068,24 @@ void cWorld::TickScheduledTasks(void)
{
cCSLock Lock(m_CSScheduledTasks);
auto WorldAge = m_WorldAge;
- std::move(
- m_ScheduledTasks.begin(),
- std::find_if(
- m_ScheduledTasks.begin(),
- m_ScheduledTasks.end(),
- [WorldAge] (cScheduledTaskPtr & Task) { return (Task->m_TargetTick < WorldAge);}
- ),
- std::back_inserter(Tasks)
- );
+
+ // Move all the due tasks from m_ScheduledTasks into Tasks:
+ for (auto itr = m_ScheduledTasks.begin(); itr != m_ScheduledTasks.end();) // Cannot use range-basd for, we're modifying the container
+ {
+ if ((*itr)->m_TargetTick < WorldAge)
+ {
+ auto next = itr;
+ ++next;
+ Tasks.push_back(std::move(*itr));
+ m_ScheduledTasks.erase(itr);
+ itr = next;
+ }
+ else
+ {
+ // All the eligible tasks have been moved, bail out now
+ break;
+ }
+ }
}
// Execute and delete each task: