Advertisement
Guest User

Untitled

a guest
Aug 3rd, 2016
87
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 3.69 KB | None | 0 0
  1. local save_delta = 15
  2.  
  3. local changed = false
  4.  
  5. local rpg = {}
  6. local db_address = minetest.get_modpath('invplus_test') .. "/players"
  7. local player_db = {}
  8.  
  9. -- split() function from http://stackoverflow.com/questions/19262761/lua-need-to-split-at-comma
  10. function string:split( inSplitPattern, outResults )
  11.   if not outResults then
  12.     outResults = { }
  13.   end
  14.   local theStart = 1
  15.   local theSplitStart, theSplitEnd = string.find( self, inSplitPattern, theStart )
  16.   while theSplitStart do
  17.     table.insert( outResults, string.sub( self, theStart, theSplitStart-1 ) )
  18.     theStart = theSplitEnd + 1
  19.     theSplitStart, theSplitEnd = string.find( self, inSplitPattern, theStart )
  20.   end
  21.   table.insert( outResults, string.sub( self, theStart ) )
  22.   return outResults
  23. end
  24. -- And now for the fun part.
  25.  
  26. -- LOAD DATA
  27. local get_player_stats = function()
  28.     file = io.open(db_address, "r")
  29.     contents = file:read("*a")
  30.     file:close()
  31.     print(contents)
  32.     contents = contents:split(";")
  33.     for i = 1, #contents do
  34.         local temp = contents[i]:split(",")
  35.         player_db[temp[1]] = {class = temp[2], level = temp[3], exp = temp[4]}
  36.     end
  37. end
  38.  
  39. get_player_stats()
  40.  
  41. --NEW CHARACTER
  42. minetest.register_on_joinplayer(function(player)
  43.     inventory_plus.register_button(player,"rpg","Character")
  44.     if not player_db[player:get_player_name()] then
  45.         local playername = player:get_player_name()
  46.         player_db[playername] = {class = "Warrior", level = "1", exp = "1"}
  47.         changed = true
  48.     end
  49. end)
  50.  
  51. --INVENTORY PLUS
  52. --GET FORMSPEC
  53. local get_formspec = function(player)
  54.     local playername = player:get_player_name()
  55.     if player_db[playername] then
  56.         local formspec = "size[8,5;]" --was 8,7.5;
  57.             .."button[0,0;2,0.5;main;Back]"
  58.             .."label[3,0.7;Character Sheet:]"
  59.             .."label[0,1.3;" .. playername .. " - Level " .. player_db[playername].level .. " " .. player_db[playername].class .. "]"
  60.             .."label[0,1.6;Experiance: " .. player_db[playername].exp .. "/" .. player_db[playername].level * 10 .. "]"
  61.             .."label[0,1.9;Attack: +1.2 | Speed: +3 | Intelligence: +12 | Wisdom: +9]"
  62.             .."label[3,3;Change class:]"
  63.             .."button[0,3.7;2,0.5;rpg_setclass_warrior;Warrior]"
  64.             .."button[2.05,3.7;2,0.5;rpg_setclass_archer;Archer]"
  65.             .."button[4.1,3.7;2,0.5;rpg_setclass_mage;Mage]"
  66.             .."button[6.15,3.7;2,0.5;rpg_setclass_cleric;Cleric]"
  67.             .."label[0,4.4;WARNING - Changing your class will reset your stats!]"
  68.         return formspec
  69.     else
  70.         minetest.chat_send_player(playername, "You don't seem to be in the RPG mod's database.")
  71.     end
  72. end
  73.  
  74. --RESPONSES
  75. minetest.register_on_player_receive_fields(function(player, formname, fields)
  76.     if fields.rpg then
  77.         inventory_plus.set_inventory_formspec(player, get_formspec(player))
  78.     end
  79.  
  80.     if fields.rpg_setclass_warrior then
  81.         inventory_plus.set_inventory_formspec(player, get_formspec(player))
  82.         minetest.chat_send_player(player:get_player_name(), "test test")
  83.     end
  84. end)
  85.  
  86. -- SAVE DATA
  87. local delta = 0
  88. minetest.register_globalstep(function(dtime)
  89.     delta = delta + dtime
  90.     -- save it every <save_delta> seconds
  91.     if delta > save_delta then
  92.         delta = delta - save_delta
  93.         if changed then
  94.             local output = io.open(db_address, "w")
  95.             for i, v in pairs(player_db) do
  96.                 print("Saving data...")
  97.                 if i ~= "" then
  98.                     print("Saving data for player " .. i .. "...")
  99.                     output:write(i..","..v.class..","..v.level..","..v.exp..";")
  100.                 end
  101.             end
  102.             io.close(output)
  103.             changed = false
  104.         end
  105.     end
  106. end)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement