Attempting to get Bungeecord Teleportation Functional
#15
(10-22-2015, 04:50 PM)NiLSPACE Wrote:
function StringLenToASCII(a_Player, a_String)
	local template = ("return \0\%s"):format(a_String:len())
	local loader = loadstring(template);
	
	-- Sandbox the loader
	setfenv(loader, {});
	
	local succes, res = pcall(loader)
	if (not succes) then
		LOG("The server name is incompatible with this plugin! Please make sure it is 30 characters or less!");
		Player:SendMessageFailure("The server name is incompatible with this plugin! Please make sure it is 30 characters or less!");
		return false;
	else
		return res;
	end
end

(10-22-2015, 05:31 PM)xoft Wrote:
--- Returns the string prefixed with its length, as used in the BungeeCord protocol
local function writeProtocolString(a_Str)
  local len = a_Str:len()
  return string.format("%c%c%s", math.floor(len / 256), math.floor(len % 256), a_Str)
end

-- usage:
client:SendPluginMessage("BungeeCord", writeProtocolString("Connect") .. writeProtocolString("SomeServer"))

Finally got around to looking at these. Attempted both methods, trying xoft's first. String was improperly formed and led to kick by fake DC (same issue as when I was using \0\14 for a 5 digit string, so the string is being returned as "\0\\" .. "#" instead of "\0\#"). Attempted using %x and %u to identical results.

NilSPACE's function isn't even correct as far as I can tell. No idea how to use setfenv, so yeah.
Code:
[03:27:53] LUA: Plugins/BungeeButtons/main.lua:40: bad argument #1 to 'setfenv'
(number expected, got nil)
[03:27:53] Stack trace:
[03:27:53]   [C](-1): setfenv
[03:27:53]   Plugins/BungeeButtons/main.lua(40): StringLenToASCII
[03:27:53]   Plugins/BungeeButtons/main.lua(188): (no name)
[03:27:53] Stack trace end
[03:27:53] Error in plugin BungeeButtons calling function <callback>()
I tried altering it... a lot of ways actually, but the best result was this one:
function StringLenToASCII(a_Player, a_String)
    local template = ("return \'\0\%s\'"):format(a_String:len())
    local loader = loadstring(template);
    return assert(loader,"weird ass error")()
end
but it just returns "\0\\" .. "#", which won't work. Also tried with %u to identical results (the fake offline kick).

BACK TO THE ARRAY OF VALUES!

Also I don't WANT to use the array of values. I'm currently working on a plugin that could send plugin messages of incredible lengths (like 200+ characters) and that doesn't sound super fun to make an array for. It's just, if a method can't be found, I'll have to.

I'll probably ask on stackoverflow at some point.
Reply
Thanks given by:


Messages In This Thread
RE: Attempting to get Bungeecord Teleportation Functional - by Zee1234 - 10-24-2015, 06:55 PM



Users browsing this thread: 1 Guest(s)