• There is NO official Otland's Discord server and NO official Otland's server list. The Otland's Staff does not manage any Discord server or server list. Moderators or administrator of any Discord server or server lists have NO connection to the Otland's Staff. Do not get scammed!

setPlayerStorageVariable(cid, virableId, virable)

Miziak

New Member
Joined
Nov 3, 2009
Messages
62
Reaction score
1
Location
Okolice Płocka, Poland
Welcome,
I made one userful script and I think that publish this script.

This script is 3 functions.
  1. setPlayerStorageVariable(cid, virableId, virable) -- save in config file variable(table, string, bool, nil, int)
  2. getPlayerStorageVariable(cid, virableId) -- get value of variableid
  3. delPlayerStorageVariable(cid, virableId) -- delete variable of config file

Ok, in data/lib/050-function.lua in bottom this file paste:
Lua:
function convertTableToString(t)
	local str = "{"
	for i,v in pairs(t) do
		str = str .. (type(i) == "number" and "[" .. i .. "]" or i) .. "=" .. (type(v) == "string" and "\"" .. v .. "\"" or v) .. ","
	end
	str = str:sub(1, str:len()-1) .. "}"
	return str
end

function tableToString(t)
	local str = "{"
	for i,v in pairs(t) do
		str = str .. (type(i) == "number" and "[" .. i .. "]" or i) .. "=" .. (type(v) == "table" and convertTableToString(v) or (type(v) == "string" and "\"" .. v .. "\"" or v)) .. ","
	end
	str = str:sub(1, str:len()-1) .. "}"
	return str
end

function convertBoolToString(bool)
	return (bool and "true" or "false")
end

dofile("data/variables.lua")

function setPlayerStorageVariable(cid, virableId, virable)
	local sciezka = "data/variables.lua"
	local linijki, lInt, bool = {}, 0, true
	for line in io.lines(sciezka) do 
		table.insert(linijki, line)
		lInt = lInt + 1
	end

	local file = assert(io.open(sciezka, "w"))
	for i,_ in pairs(linijki) do
		if(linijki[i]:find("name=\"" .. getCreatureName(cid) .. "\"") and linijki[i]:find("id=" .. virableId))then
			local text = "{name=\"".. getCreatureName(cid) .."\", id=" .. virableId ..", value=" .. (type(virable) == "nil" and "nil" or (type(virable) == "boolean" and convertBoolToString(bool) or (type(virable) == "table" and tableToString(virable) or (type(virable) == "number" and virable or "\"" .. virable .. "\"" )))) .."},\n"
			file:write(text)
			bool = false
		else
			if(i == lInt - 1 and bool)then
				local text = "{name=\"".. getCreatureName(cid) .."\", id=" .. virableId ..", value=" .. (type(virable) == "nil" and "nil" or (type(virable) == "boolean" and convertBoolToString(bool) or (type(virable) == "table" and tableToString(virable) or (type(virable) == "number" and virable or "\"" .. virable .. "\"" )))) .."},\n\n"
				file:write(text)
			else
				file:write(linijki[i] .. (linijki[i] == "}" and "" or "\n"))
			end
		end
	end
	file:close()
end

function getPlayerStorageVariable(cid, virableId)
	 for _,v in pairs(variables) do
		if(v.name == getCreatureName(cid) and v.id == virableId)then
			return v.value
		end
	end
	return -1
end

function delPlayerStorageVariable(cid, virableId)
	local sciezka = "data/variables.lua"
	local linijki = {}
	for line in io.lines(sciezka) do 
		table.insert(linijki, line)
	end

	local file = assert(io.open(sciezka, "w"))
	for i,_ in pairs(linijki) do
		if(linijki[i]:find("name=\"" .. getCreatureName(cid) .. "\"") == nil or linijki[i]:find("id=" .. virableId) == nil)then
			file:write(linijki[i] .. (linijki[i] == "}" and "" or "\n"))
		end
	end
	file:close()
end

Next in data folder make file: variables.lua and paste this:
Lua:
variables = {

}

Save files.

Example of use:
Lua:
function onSay(cid, words, param, channel)
	if(words == "set")then
		setPlayerStorageVariable(cid, 1, {a=1, [2]="s", b=false, [6]= {"I'm Polish!!!"}})
	elseif(words == "get")then
		local v = getPlayerStorageVariable(cid, 1)
		print("OMG!! this is " .. type(v) .. "!")
		for i,v in pairs(v) do
			print(i .. " == " .. v)
		end
	end
return true
end


Sorry, for my English,
Yours(Pozdrawiam),
Miziak ;)
 
Last edited:
Back
Top