[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):
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
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:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
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:
1
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() ):
1
2
3
4
5
6
7
8
9
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:
1
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:
1
2
3
4
5
6
7
8
9
10
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: 1 Guest(s)