Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- local save_delta = 15
- local changed = false
- local rpg = {}
- local db_address = minetest.get_modpath('invplus_test') .. "/players"
- local player_db = {}
- -- split() function from http://stackoverflow.com/questions/19262761/lua-need-to-split-at-comma
- function string:split( inSplitPattern, outResults )
- if not outResults then
- outResults = { }
- end
- local theStart = 1
- local theSplitStart, theSplitEnd = string.find( self, inSplitPattern, theStart )
- while theSplitStart do
- table.insert( outResults, string.sub( self, theStart, theSplitStart-1 ) )
- theStart = theSplitEnd + 1
- theSplitStart, theSplitEnd = string.find( self, inSplitPattern, theStart )
- end
- table.insert( outResults, string.sub( self, theStart ) )
- return outResults
- end
- -- And now for the fun part.
- -- LOAD DATA
- local get_player_stats = function()
- file = io.open(db_address, "r")
- contents = file:read("*a")
- file:close()
- print(contents)
- contents = contents:split(";")
- for i = 1, #contents do
- local temp = contents[i]:split(",")
- player_db[temp[1]] = {class = temp[2], level = temp[3], exp = temp[4]}
- end
- end
- get_player_stats()
- --NEW CHARACTER
- minetest.register_on_joinplayer(function(player)
- inventory_plus.register_button(player,"rpg","Character")
- if not player_db[player:get_player_name()] then
- local playername = player:get_player_name()
- player_db[playername] = {class = "Warrior", level = "1", exp = "1"}
- changed = true
- end
- end)
- --INVENTORY PLUS
- --GET FORMSPEC
- local get_formspec = function(player)
- local playername = player:get_player_name()
- if player_db[playername] then
- local formspec = "size[8,5;]" --was 8,7.5;
- .."button[0,0;2,0.5;main;Back]"
- .."label[3,0.7;Character Sheet:]"
- .."label[0,1.3;" .. playername .. " - Level " .. player_db[playername].level .. " " .. player_db[playername].class .. "]"
- .."label[0,1.6;Experiance: " .. player_db[playername].exp .. "/" .. player_db[playername].level * 10 .. "]"
- .."label[0,1.9;Attack: +1.2 | Speed: +3 | Intelligence: +12 | Wisdom: +9]"
- .."label[3,3;Change class:]"
- .."button[0,3.7;2,0.5;rpg_setclass_warrior;Warrior]"
- .."button[2.05,3.7;2,0.5;rpg_setclass_archer;Archer]"
- .."button[4.1,3.7;2,0.5;rpg_setclass_mage;Mage]"
- .."button[6.15,3.7;2,0.5;rpg_setclass_cleric;Cleric]"
- .."label[0,4.4;WARNING - Changing your class will reset your stats!]"
- return formspec
- else
- minetest.chat_send_player(playername, "You don't seem to be in the RPG mod's database.")
- end
- end
- --RESPONSES
- minetest.register_on_player_receive_fields(function(player, formname, fields)
- if fields.rpg then
- inventory_plus.set_inventory_formspec(player, get_formspec(player))
- end
- if fields.rpg_setclass_warrior then
- inventory_plus.set_inventory_formspec(player, get_formspec(player))
- minetest.chat_send_player(player:get_player_name(), "test test")
- end
- end)
- -- SAVE DATA
- local delta = 0
- minetest.register_globalstep(function(dtime)
- delta = delta + dtime
- -- save it every <save_delta> seconds
- if delta > save_delta then
- delta = delta - save_delta
- if changed then
- local output = io.open(db_address, "w")
- for i, v in pairs(player_db) do
- print("Saving data...")
- if i ~= "" then
- print("Saving data for player " .. i .. "...")
- output:write(i..","..v.class..","..v.level..","..v.exp..";")
- end
- end
- io.close(output)
- changed = false
- end
- end
- end)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement