Disallowed movement - Printable Version +- Cuberite Forum (https://forum.cuberite.org) +-- Forum: Plugins (https://forum.cuberite.org/forum-1.html) +--- Forum: Plugin Discussion (https://forum.cuberite.org/forum-8.html) +--- Thread: Disallowed movement (/thread-2202.html) Pages:
1
2
|
Disallowed movement - Bobstergaming - 11-07-2015 Hi! I have got a minecraft server, and I wanted to disallow certain people from going to a certain (VIP only) area. I made a mockup of the code so anyone is disallowed to move there, just to try it out. I am trying to disallow movement to -370, 219, 131 function OnPlayerMoving(Player, OldPosition, NewPosition) World = Player:GetWorld() if (NewPosition == -370, 219, 131) then return false end I have called the hook OnplayerMoving. Can anyone help me, I am a total newb at lua and wanted to try making a plugin. PS I am writing on top of a plugins called Jobs for now, as it havge things related to what I want to do. (Although I think it needs updating). RE: Disallowed movement - NiLSPACE - 11-07-2015 Hello and welcome to the forum If you want to stop a player from moving you have to return true, not false. Also, the NewPosition is a Vector3d variable. What you could do is use this: if (NewPosition:Equals(Vector3d(-370, 219, 131))) then return true end Also notice the "end" to mark the end of the if block. RE: Disallowed movement - xoft - 11-09-2015 The main problem with this approach is that you're basically blocking access to a single point in space. Normally you would want to restrict an entire area, the cBoundingBox class might help you a lot here: http://apidocs.cuberite.org/cBoundingBox.html (your code prohibits the player from moving to {-370, 219, 131}, but it doesn't prohibit from moving to {-370, 219.0001, 131} ) RE: Disallowed movement - DiamondToaster - 11-10-2015 Just throwing an example out there, I even had trouble with this at one point: -- Lets define a box around 0, 70, 0 thats about 3 cubes big, just for this example. -- Construct a box using opposite points defined as a min and max Vector3d local VIPBox = cBoundingBox(Vector3d(-3, 67, -3), Vector3d(3, 73, 3)) -- Lets use the OnPlayerMoving hook to check if they are attempting to enter function OnPlayerMoving(Player, OldPos, NewPos) -- Check if the position that will jump to next is inside the box if VIPBox:IsInside(NewPos) then -- Tell the server that this plugin has handled the player's movement and do not let the server advance the player return true end end RE: Disallowed movement - Bobstergaming - 11-12-2015 (11-09-2015, 08:32 AM)xoft Wrote: The main problem with this approach is that you're basically blocking access to a single point in space. Normally you would want to restrict an entire area, the cBoundingBox class might help you a lot here: http://apidocs.cuberite.org/cBoundingBox.html Thanks, I though that was the issue RE: Disallowed movement - Bobstergaming - 11-12-2015 I have almost exactly copied you code: local bblock = cBoundingBox(Vector3d(-372, 218, 131), Vector3d(-377, 220, 130)) function OnPlayerMoving(Player, OldPosition, NewPosition) World = Player:GetWorld() if bblock:IsInside(NewPosition) then return true end end I don`t really know what the issue is here, nothing happens when I enter the area (I even tried giving myself default rank) RE: Disallowed movement - NiLSPACE - 11-12-2015 You did register the hook using cPluginManager:AddHook right? RE: Disallowed movement - Bobstergaming - 11-14-2015 Job = {} function Initialize(Plugin) Plugin:SetName("Jobs") Plugin:SetVersion(1) cPluginManager.BindCommand("/jobs", "jobs.jobs", HandleJobsCommand, " - Join, browse or leave jobs."); cPluginManager.AddHook(cPluginManager.HOOK_BLOCK_TO_PICKUPS, OnBlockToPickups) cPluginManager.AddHook(cPluginManager.HOOK_PLAYER_PLACING_BLOCK, OnPlayerPlacingBlock) cPluginManager.AddHook(cPluginManager.HOOK_KILLING, OnKilling) cPluginManager.AddHook(cPluginManager.HOOK_PLAYER_BROKEN_BLOCK, OnPlayerBrokenBlock) cPluginManager:AddHook(cPluginManager.HOOK_PLAYER_FISHING, OnPlayerFishing) cPluginManager.AddHook(cPluginManager.HOOK_PLAYER_JOINED, OnPlayerJoined) cPluginManager.AddHook(cPluginManager.HOOK_PLAYER_MOVING, OnPlayerMoving) PM = cPluginManager UsersIni = cIniFile() UsersIni:ReadFile("jobs.ini") local CheckJob = function(Player) Job[Player:GetName()] = UsersIni:GetValue(Player:GetUUID(), "Job") end cRoot:Get():ForEachPlayer(CheckJob) LOG("Initialized " .. Plugin:GetName() .. " v." .. Plugin:GetVersion()) return true end I think this is ok RE: Disallowed movement - NiLSPACE - 11-14-2015 Yes, that looks normal. Perhaps you have defined OnPlayerMoving somewhere else as well? RE: Disallowed movement - DiamondToaster - 11-14-2015 (11-14-2015, 01:25 AM)Bobstergaming Wrote:Job = {} function Initialize(Plugin) Plugin:SetName("Jobs") Plugin:SetVersion(1) cPluginManager.BindCommand("/jobs", "jobs.jobs", HandleJobsCommand, " - Join, browse or leave jobs."); cPluginManager.AddHook(cPluginManager.HOOK_BLOCK_TO_PICKUPS, OnBlockToPickups) cPluginManager.AddHook(cPluginManager.HOOK_PLAYER_PLACING_BLOCK, OnPlayerPlacingBlock) cPluginManager.AddHook(cPluginManager.HOOK_KILLING, OnKilling) cPluginManager.AddHook(cPluginManager.HOOK_PLAYER_BROKEN_BLOCK, OnPlayerBrokenBlock) cPluginManager:AddHook(cPluginManager.HOOK_PLAYER_FISHING, OnPlayerFishing) cPluginManager.AddHook(cPluginManager.HOOK_PLAYER_JOINED, OnPlayerJoined) cPluginManager.AddHook(cPluginManager.HOOK_PLAYER_MOVING, OnPlayerMoving) PM = cPluginManager UsersIni = cIniFile() UsersIni:ReadFile("jobs.ini") local CheckJob = function(Player) Job[Player:GetName()] = UsersIni:GetValue(Player:GetUUID(), "Job") end cRoot:Get():ForEachPlayer(CheckJob) LOG("Initialized " .. Plugin:GetName() .. " v." .. Plugin:GetVersion()) return true end Watch out when you call cPluginManager, you should use cPluginManager:AddHook instead of cPluginManager.AddHook, note the colon. |