Critical bug in MCServer
#21
(02-15-2012, 12:24 AM)xoft Wrote: Callbacks are a great way of doing things, though I'd prefer class-callbacks (see cWorld::ForEachPlayer() for an example). Instead of passing a function pointer, you pass a pointer to a class that has overridden a specific virtual method that does the actual work. The advantage is that the class can carry more data (parameters, accumulators etc), the disadvantage is that probably this won't work with Lua (I have no idea).


It _can_ work with Lua, unforunately even though Lua can work with objects, Lua itself is not really object orientated and has some extremely basic object inheritance.
To inherit objects you need to write some really ugly code like this:
Code:
local ChatLogPlugin = {}
ChatLogPlugin.__index = ChatLogPlugin

function ChatLogPlugin:new()
   local t = {}
   setmetatable(t, ChatLogPlugin)
   local w = Lua__cPlugin:new()
   tolua.setpeer(w, t)
   w:tolua__set_instance(w)
   return w
end

Here ChatLogPlugin practically inherits cPlugin by having Lua__cPlugin forward calls to the Lua object. But I don't like it because it requires this piece of code, it's confusing and ugly.


I think we simply need special implementations of those ForEach* functions to work with Lua function callbacks. I don't think the carrying more data is an issue in Lua, because you can simply store that data externally somewhere, or supply an additional Lua table to the function.

Code:
local SayHiData = 0

function Initialize( Plugin )
    cRoot:Get():GetWorld():ForEachPlayer( SayHi, SayHiData )
    return true
end

function SayHi( Player, Data )
    SayHiData = SayHiData + 1
    Player:SendMessage("Hi player ".. SayHiData .. "!")
end

In this example it sends a number along, but it could also send a table reference with much more data. So you could say that SayHiData is the class instance, and it could even be made an optional parameter.
Thanks given by:


Messages In This Thread
Critical bug in MCServer - by FakeTruth - 01-01-2012, 02:21 PM
RE: Critical bug in MCServer - by mtilden - 01-01-2012, 11:05 PM
RE: Critical bug in MCServer - by Lapayo - 01-01-2012, 11:47 PM
RE: Critical bug in MCServer - by FakeTruth - 01-02-2012, 12:21 AM
RE: Critical bug in MCServer - by xoft - 02-08-2012, 11:44 PM
RE: Critical bug in MCServer - by FakeTruth - 02-09-2012, 12:23 AM
RE: Critical bug in MCServer - by xoft - 02-09-2012, 03:26 AM
RE: Critical bug in MCServer - by xoft - 02-10-2012, 01:44 AM
RE: Critical bug in MCServer - by FakeTruth - 02-10-2012, 02:05 AM
RE: Critical bug in MCServer - by xoft - 02-10-2012, 07:28 AM
RE: Critical bug in MCServer - by xoft - 02-13-2012, 05:46 AM
RE: Critical bug in MCServer - by tbar - 02-13-2012, 07:53 PM
RE: Critical bug in MCServer - by xoft - 02-14-2012, 07:59 AM
RE: Critical bug in MCServer - by tbar - 02-14-2012, 06:35 PM
RE: Critical bug in MCServer - by xoft - 02-14-2012, 11:10 PM
RE: Critical bug in MCServer - by FakeTruth - 02-14-2012, 09:29 PM
RE: Critical bug in MCServer - by FakeTruth - 02-14-2012, 11:41 PM
RE: Critical bug in MCServer - by xoft - 02-14-2012, 11:53 PM
RE: Critical bug in MCServer - by FakeTruth - 02-15-2012, 12:00 AM
RE: Critical bug in MCServer - by xoft - 02-15-2012, 12:24 AM
RE: Critical bug in MCServer - by FakeTruth - 02-15-2012, 12:38 AM
RE: Critical bug in MCServer - by xoft - 02-15-2012, 03:05 AM
RE: Critical bug in MCServer - by NiLSPACE - 02-15-2012, 03:18 AM
RE: Critical bug in MCServer - by FakeTruth - 02-15-2012, 05:16 AM
RE: Critical bug in MCServer - by xoft - 02-15-2012, 06:36 AM
RE: Critical bug in MCServer - by FakeTruth - 02-15-2012, 07:10 AM
RE: Critical bug in MCServer - by xoft - 02-15-2012, 07:14 AM
RE: Critical bug in MCServer - by FakeTruth - 02-15-2012, 07:26 AM
RE: Critical bug in MCServer - by FakeTruth - 02-15-2012, 11:22 PM
RE: Critical bug in MCServer - by Boo - 02-16-2012, 04:08 PM
RE: Critical bug in MCServer - by xoft - 02-16-2012, 07:37 PM
RE: Critical bug in MCServer - by Boo - 02-16-2012, 08:26 PM
RE: Critical bug in MCServer - by FakeTruth - 02-16-2012, 08:57 PM
RE: Critical bug in MCServer - by Boo - 02-16-2012, 09:32 PM
RE: Critical bug in MCServer - by FakeTruth - 02-16-2012, 09:57 PM



Users browsing this thread: 2 Guest(s)