diff options
author | Mattes D <github@xoft.cz> | 2014-10-13 14:49:18 +0200 |
---|---|---|
committer | Mattes D <github@xoft.cz> | 2014-10-13 14:49:18 +0200 |
commit | 7f8118e0cbcea2b54b7c14119626772c88e42d94 (patch) | |
tree | 36f6861fb0390f3a543dde56a9825d795f150778 | |
parent | Fixed style. (diff) | |
download | cuberite-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 |
Diffstat (limited to '')
-rw-r--r-- | MCServer/Plugins/Debuggers/Debuggers.lua | 19 | ||||
-rw-r--r-- | src/World.cpp | 27 |
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: |