[Plugin] Homes Plugin!?
#1
Hi folks,

even if i dont use MC-Server for some reason, i am interested in creating a plugin.

Right now i am in process with a new home plugin:

- multiworld support (same home count each world for each level)
- User ranking support with different user home limits
- config.ini
- using sqlite database

Commands:
- homeset <HOMENAME>
- home <HOMENAME>
- homedel <HOMENAME>


Is anybody interested in this? If yes, any requests for functions?

If the feedback is good enough i may will try to release it, otherwhise i only use it to learn bit lua.
Reply
Thanks given by:
#2
I moved this to "Plugin / Lua Discussion".
Reply
Thanks given by:
#3
+1Big Grin
Reply
Thanks given by:
#4
So what exactly will the plugin do? I'm not familiar with this "home" topic.
Reply
Thanks given by:
#5
(11-25-2014, 06:23 AM)xoft Wrote: So what exactly will the plugin do? I'm not familiar with this "home" topic.

Player will be able to save positions and teleport to that save ones. Mainly its a simple but individual teleporting function for each player.

In config you can set the max amount of "homes" per world for each rank
Reply
Thanks given by:
#6
Sounds fun, enjoy coding this Smile And don't forget to document it just the way you documented it for me.
Reply
Thanks given by:
#7
Ok, still doing this, but i ran into an issue.

I want to do a sqlite query to get a list of tables. But somehow i am not able to return the query result.

The query function gets the playername as argument and should return a table of tables (a_List):
function cStorage:GetList( player )
    
    local a_List = {}
    
    -- get data from query
    function getResult(udata, cols, values, names)
        
        for i=1,cols do print('',names[i],values[i]) end
        
        return 0
    end
    
    -- get all player homes
    local sql = "SELECT * FROM " .. PluginName .. " WHERE Player='" .. player .. "'"
    self:DBExec(sql, getResult) 
    return a_List 
end


This is a sample result which should go into the table:
        ID      1
        Player  no_use_for_name
        Name    default
        World   world
        X       -68.877814274714
        Y       64
        Z       205.5105932393
        ID      2
        Player  no_use_for_name
        Name    hill
        World   world
        X       -66.54712734459
        Y       64
        Z       209.61457523444
        ID      3
        Player  no_use_for_name
        Name    hil
        World   world
        X       -66.54712734459
        Y       64
        Z       209.61457523444

I would expect something like:
a_List = {{row1,...}, {row2,...}...}

But maybe there is a better way?! I tried several things already, but didnt get it yet. Returning a single result is easy.

Any help would be nice
Reply
Thanks given by:
#8
You're not putting anything into the a_List variable anywhere. The getResult() function should add an item into it. Most likely like this (note the use of the nrows() function instead of DBExec() ):
local theResult = {}
DB:nrows(
  "SELECT * FROM " .. PluginName .. " WHERE Player = \"" .. player .. "\"",
  function getResult(a_RowValues)
    -- add the returned row to our result table:
    table.insert(theResult, a_RowValues)
  end
)
return theResult

This will return the table as an array of dictionaries:
theResult = { {col1 = val1A, col2 = val2A}, {col1 = val1B, col2 = val2B}, {col1 = val1C, col2 = val2C}, ...}

EDIT: No, sorry, this code won't work either.
Reply
Thanks given by:
#9
Where is your DBExec function coming from? Are you using one of the sqlite wrappers from any of the plugins?
Reply
Thanks given by:
#10
If so, use the ExecuteStatement() function instead, it's more high-level and provides the right interface that you need, the code I posted earlier will work with ExecuteStatement, if you add a middle parameter to it:
local theResult = {}
DB:ExecuteStatement(
  "SELECT * FROM " .. PluginName .. " WHERE Player = ?",  -- Note the use of placeholders for increased safety
  { playerName },  -- Placeholders will be replaced with values from this table
  function getResult(a_RowValues)  -- This callback will be called for each retrieved DB row
    -- add the returned row to our result table:
    table.insert(theResult, a_RowValues)
  end
)
return theResult
Reply
Thanks given by:




Users browsing this thread: 8 Guest(s)