• 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!
  • New resources must be posted under Resources tab. A discussion thread will be created automatically, you can't open threads manually anymore.

TalkAction Some LUASQL [0.2] and LUA with database [0.3] scripts

xxgoosexx

GoosioOT
Joined
Jul 10, 2007
Messages
298
Reaction score
2
These were tested on TFS 0.2, and should work, i'd recommend saving server before using tho just incase, and post comments and problems here.
The Scripts at the bottom have been tested to work with TFS 0.3 (still converting some from 0.2 to 0.3 so be patient)

Shows Online Players in ABC order[0.2]
Made because the original !online cut off like 90% of players on server
PHP:
--Adam 2008
--Collapser OT

function onSay(cid, words, param)
	playerlist = ""
	online = 0
	dofile("./config.lua")
	env = assert(luasql.mysql())
	con = assert(env:connect(mysqlDatabase, mysqlUser, mysqlPass, mysqlHost, mysqlPort))
	cur = assert(con:execute("SELECT `name`, `level` FROM `players` WHERE `online` = '1' ORDER BY `name` ASC;"))
	row = cur:fetch({}, "a")
	while row do
  		playerlist = playerlist.. "\n" .. row.name .. " [" .. row.level .. "]" 
    		row = cur:fetch (row, "a")
    		online=online+1
	end
	cur:close()

	dialog = "Players Online: "..online.." \n  "..playerlist..""
	doShowTextDialog(cid, 1026, dialog)

end

Ingame Highscores[0.2]
PHP:
--Adam 2008
--Collapser OT

local displayoutput = {"Level","Magic Level","Fist Fighting","Club Fighting","Sword Fighting","Axe Fighting","Distance Fighting","Shielding","Fishing"}
local itemtype = {levelid,magicid,fistid,clubid,swordid,axeid,distanceid,shieldid,fishid}

function onSay(cid, words, param)
	number = 1
	skilllist = ""
	command = TRUE
	dofile("./config.lua")
	env = assert(luasql.mysql())
	con = assert(env:connect(mysqlDatabase, mysqlUser, mysqlPass, mysqlHost, mysqlPort))
	
	if param == "level" then
		cur = assert(con:execute("SELECT `name`, `level` FROM `players` ORDER BY `level` DESC LIMIT 50;"))			
		display = 1
	elseif param == "magic" then
		cur = assert(con:execute("SELECT `name`, `maglevel` FROM `players` ORDER BY `maglevel` DESC LIMIT 50;"))
		display = 2
	elseif param == "fist" then
		id = 0
		display = 3
	elseif param == "club" then
		id = 1
		display = 4
	elseif param == "sword" then
		id = 2
		display = 5
	elseif param == "axe" then
		id = 3
		display = 6
	elseif param == "distance" then
		id = 4
		display = 7
	elseif param == "shield" then
		id = 5
		display = 8
	elseif param == "fish" then
		display = 9
		id = 6
	else 
		error = "Highscore Commands:\n\n!highscores level\n!highscores magic\n!highscores fist\n!highscores club\n!highscores sword\n!highscores axe\n!highscores distance\n!highscores shield\n!highscores fist"
		doShowTextDialog(cid, 1026, error)
		command = FALSE
	end

	if command ~= FALSE then
		if display == 1 then
			row = cur:fetch({}, "a")
			while row do
  				skilllist = skilllist.. "\n#"..string.format("%5s",number.."   "..row.name.."  -  "..row.level)
    				row = cur:fetch (row, "a")
				number = number + 1
			end
			cur:close()
		elseif display == 2 then
			row = cur:fetch({}, "a")
			while row do
  				skilllist = skilllist.. "\n#"..string.format("%5s",number.."   "..row.name.."  -  "..row.maglevel)
    				row = cur:fetch (row, "a")
				number = number + 1
			end
			cur:close()
		else
			cur = assert(con:execute("SELECT `player_id`, `value`, `skillid` FROM `player_skills` WHERE `skillid` = "..id.." ORDER BY `value` DESC;"))
			row = cur:fetch({}, "a")
			while row do
				query = assert(con:execute("SELECT `name` FROM `players` WHERE `id` = "..row.player_id.."")) 
           			sql = query:fetch({}, "a")
				if sql ~= nil then
  					skilllist = skilllist.. "\n#"..string.format("%5s",number.."   "..sql.name.."  -  "..row.value)
					number = number + 1
				end
				if number > 50 then
					break
				end
    				row = cur:fetch (row, "a")
				
			end
			cur:close()
		end
		dialog = ""..displayoutput[display].." Highscores: \n  "..skilllist..""
		doShowTextDialog(cid, itemtype[id], dialog)
	end	
end

In Game Player Stats[0.2]
Shows level,magic level, skills vocation etc..change the vocation table to fit your needs
PHP:
--Adam 2008
--Collapser OT

local vocations = {"None","Warlock","Priest","Archer","Warrior","Satanic Warlock","High Priest","Noble Archer","Lethal Warrior","Diabolic Warlock","Hallowed Priest","Highborn Archer","Ascended Warrior"}
local displayoutput = {"Fist:           ","Club:          ","Sword:      ","Axe:          ","Distance:  ","Shielding: ","Fishing:     "}

function onSay(cid, words, param)
	dofile("./config.lua")
	env = assert(luasql.mysql())
	con = assert(env:connect(mysqlDatabase, mysqlUser, mysqlPass, mysqlHost, mysqlPort))
	cur = assert(con:execute("SELECT `name`, `level`, `maglevel`, `id`, `vocation` FROM `players` WHERE `name` = '"..param.."'  "))
	row = cur:fetch({}, "a")
	if row ~= nil then
		vocation = vocations[row.vocation+1]
		heading = "Name:        "..row.name.."\nLevel:        "..row.level.."\nVocation:  "..vocation.."\n\n"
		skilllist = "Magic:           "..row.maglevel.."\n"
		cur:close()
		skills = assert(con:execute("SELECT `skillid`, `value` FROM `player_skills` WHERE `player_id` = '"..row.id.."'  "))
		skrow = skills:fetch({}, "a")
		if skrow ~= nil then
			while skrow do
				skilllist = skilllist..displayoutput[skrow.skillid+1].."    "..skrow.value.."\n"
  				skrow = skills:fetch (skrow, "a")
			end
		end
		final = heading..skilllist
		doShowTextDialog(cid, 1026, final)
	else
		doPlayerSendCancel(cid, "Invalid Player Name.")
	end

end


WORK WITH NEWEST SOURCES


Ingame player information[0.3]
PHP:
--Adam 2009
--Goosio OT

local vocations = {"None","Sorcerer","Druid","Paladin","Knight","Master Sorcerer","Elder Druid","Royal Paladin","Elite Knight","Diabolic Warlock","Hallowed Priest","Highborn Archer","Ascended Warrior"}
local displayoutput = {"Fist:           ","Club:          ","Sword:      ","Axe:          ","Distance:  ","Shielding: ","Fishing:     "}

function onSay(cid, words, param)
	local player = db.getResult("SELECT `name`, `level`, `maglevel`, `id`, `vocation` FROM `players` WHERE `group_id` < 2 and `name` = '"..param.."'")
	
	if(player:getID() ~= -1) then
		local name = player:getDataString("name")
		local level = player:getDataInt("level")
		local GUID = player:getDataInt("id")
		local vocationid = player:getDataInt("vocation")
		local maglevel = player:getDataInt("maglevel")
		vocation = vocations[vocationid+1]
		heading = "Name:        "..name.."\nLevel:        "..level.."\nVocation:  "..vocation.."\n\n"
		skilllist = "Magic:           "..maglevel.."\n"
		local skills = db.getResult("SELECT `skillid`, `value` FROM `player_skills` WHERE `player_id` = '"..GUID.."'  ")
		if(skills:getID() ~= -1) then
			while(true) do
				local skillid = skills:getDataInt("skillid")
				local value = skills:getDataInt("value")
				skilllist = skilllist..displayoutput[skillid+1].."    "..value.."\n"
				if not(skills:next()) then
					break
				end
			end
			skills:free()
		end
		final = heading..skilllist
		doShowTextDialog(cid,5958, final)
		player:free()
	else
		doPlayerSendCancel(cid, "Invalid Player Name.")
	end
end

online players[0.3]
(not needed but here anyways since its already provided somewhat in a different form)
PHP:
--Adam 2008

--Goosio OT

function onSay(cid, words, param)

	playerlist = ""
	online_counter = 0

	local online = db.getResult("SELECT `name`, `level` FROM `players` WHERE `online` = '1' and group_id < '2' ORDER BY `name` ASC;")
	if(online:getID() ~= -1) then

		while(true) do
			local name = online:getDataString("name")
			local level = online:getDataInt("level")
  			playerlist = playerlist.. "\n" .. name .. " [" .. level .. "]" 
			online_counter=online_counter+1
			if not(online:next()) then
				break
			end		
		end
	end
	dialog = "Players Online: "..online_counter.." \n  "..playerlist..""
	doShowTextDialog(cid, 1026, dialog)
	return TRUE
end

Empty a player's house if they have not logged in for 10 days [0.3]
PHP:
--Adam 2008

--Goosio OT

local safelist = {1,2,6,9,10,11}

function onSay(cid, words, param)
if getPlayerGroupId(cid) > 2 then
	pdelete = "Inactive Players With Houses:\n\n"
	days = 10*3600*24
	t=os.date('*t')
	local house = db.getResult("SELECT `owner`,`id` FROM `houses`")
	if(house:getID() ~= -1) then
		while (true) do
		local owner = house:getDataInt("owner")
		local hid = house:getDataInt("id")
			local player = db.getResult("SELECT `id`,`name`,`lastlogin` FROM `players` WHERE `id` = '"..owner.."'  ")
			if(player:getID() ~= -1) then
				local lastlogin = player:getDataInt("lastlogin")
				local pid = player:getDataInt("id")
				local name = player:getDataString("name")
				time=os.time(t) - lastlogin
				offline = time - days
				if offline >= 0 then
					pdelete = pdelete.."House #"..hid.." owned by "..name.."\n"
					if isInArray(safelist,hid) == FALSE then					
						setHouseOwner(hid, 0)
					end
				end
			player:free()
			end
			if not(house:next()) then
				break
			end
		end
			
		house:free()	
		doShowTextDialog(cid, 5958, pdelete)
	else
		doPlayerSendCancel(cid, "Error.")
	end
end
return TRUE
end

editted !online for 0.3 [Shows Dialog Box Instead]
PHP:
local config = {
	showGamemasters = getConfigInfo('displayGamemastersWithOnlineCommand')
}

function onSay(cid, words, param)
	local players = getPlayersOnline()
	local strings = {}
	local pos = 1
	local count = 0
	local tmp = TRUE
	for i, pid in ipairs(players) do
		if(tmp == TRUE) then
			if(i > pos * 7) then
				pos = pos + 1
			end

			if(strings[pos] == nil) then
				strings[pos] = ""
				line = ""
			end
		end

		tmp = TRUE
		if((getBooleanFromString(config.showGamemasters) == FALSE and getPlayerCustomFlagValue(pid, PlayerCustomFlag_GamemasterPrivileges) == TRUE and getPlayerCustomFlagValue(cid, PlayerCustomFlag_GamemasterPrivileges) == FALSE) or (isPlayerGhost(pid) == TRUE and getPlayerAccess(pid) > getPlayerAccess(cid))) then
			count = count + 1
			tmp = FALSE
		else
			strings[pos] = strings[pos] .. "\n" .. getCreatureName(pid) .. " [" .. getPlayerLevel(pid) .. "]"
		end
	end
	for i, string in ipairs(strings) do
		if(string ~= "") then
				doShowTextDialog(cid, 8918, "Players online: "..(#players- count).."\n"..string)
		end
	end
	return TRUE
end

Ingame highscores [0.3]
PHP:
--Adam 2009
--Goosio OT

local displayoutput = {"Level","Magic Level","Fist Fighting","Club Fighting","Sword Fighting","Axe Fighting","Distance Fighting","Shielding","Fishing"}

local itemtype = {9969,9933,5896,8929,8932,7388,8849,8906,2580}

function onSay(cid, words, param)
	number = 1
	param = string.lower(param)
	skilllist = ""
	command = TRUE
	if param == "level" then		
		display = 1
	elseif param == "magic" then
		display = 2
	elseif param == "fist" then
		id = 0
		display = 3
	elseif param == "club" then
		id = 1
		display = 4
	elseif param == "sword" then
		id = 2
		display = 5
	elseif param == "axe" then
		id = 3
		display = 6
	elseif param == "distance" then
		id = 4
		display = 7
	elseif param == "shield" then
		id = 5
		display = 8
	elseif param == "fish" then
		display = 9
		id = 6
	else 
		error = 'Highscore Commands:\n\n!highscores level\n!highscores magic\n!highscores fist\n!highscores club\n!highscores sword\n!highscores axe\n!highscores distance\n!highscores shield\n!highscores fish'

		doShowTextDialog(cid, 5958, error)
		command = FALSE

	end

	if command ~= FALSE then
		if display == 1 then
			local player = db.getResult("SELECT `name`, `level` FROM `players` WHERE group_id < '2' ORDER BY `level` DESC LIMIT 50;")	
			if(player:getID() ~= -1) then
				while (true) do
					local name = player:getDataString("name")
					local level = player:getDataInt("level")

  					skilllist = skilllist.. "\n#"..string.format("%5s",number.."   "..name.."  -  "..level)
					number = number + 1
					if not(player:next()) then
						break
					end
				end
				player:free()
			end
		elseif display == 2 then
			local player = db.getResult("SELECT `name`, `maglevel` FROM `players` WHERE group_id < '2' ORDER BY `maglevel` DESC LIMIT 50;")
			if(player:getID() ~= -1) then	
				while (true) do
					local name = player:getDataString("name")
					local maglevel = player:getDataInt("maglevel")

  					skilllist = skilllist.. "\n#"..string.format("%5s",number.."   "..name.."  -  "..maglevel)
					if not(player:next()) then
						break
					end
					number = number + 1
				end
			end
			player:free()
		else
			local skills = db.getResult("SELECT `player_id`, `value`, `skillid` FROM `player_skills` WHERE `skillid` = "..id.." ORDER BY `value` DESC;")
			while (true) do
				local GUID = skills:getDataInt("player_id")
				local value = skills:getDataInt("value")
				local skillid = skills:getDataInt("skillid")
				local player = db.getResult("SELECT `name` FROM `players` WHERE `id` = "..GUID.." and group_id < '2' ")
				if(player:getID() ~= -1) then
					local name = player:getDataString("name")
  					skilllist = skilllist.. "\n#"..string.format("%5s",number.."   "..name.."  -  "..value)
					number = number + 1
					player:free()
				end
				if number > 50 then
					break
				end
    				if not(skills:next()) then
					break
				end
			end
			skills:free()
		end
		dialog = ""..displayoutput[display].." Highscores: \n  "..skilllist..""
		doShowTextDialog(cid, itemtype[display], dialog)
	end	
end

Guild Info [0.3]
PHP:
--Adam 2008
--Collapser OT

function onSay(cid, words, param)
	local guildid = getGuildId(param)
	local guild = db.getResult("SELECT `id`,`guild_id`,`name` FROM `guild_ranks` WHERE `guild_id` = "..guildid.." ;")

	if(guild:getID() ~= -1) then
		local guildname = db.getResult("SELECT `name` FROM `guilds` WHERE id = '"..guildid.."' ;")
		guildlist =  guildname:getDataString("name")
			while (true) do
				local guild_id = guild:getDataInt("guild_id")
				local id = guild:getDataInt("id")
				local rankname =  guild:getDataString("name")
				local players = db.getResult("SELECT `name`,`guildnick` FROM `players` WHERE `rank_id` = "..id.." ORDER BY `name` ;")
				if(players:getID() ~= -1) then
					guildlist = guildlist.."\n\n"..rankname
					while (true) do
						local pname =  players:getDataString("name")
						local guildnick =  players:getDataString("guildnick")
						if guildnick ~= "" then
							guildlist = guildlist.."\n     "..pname.." ("..guildnick..")"
						else
							guildlist = guildlist.."\n     "..pname
						end
  						if not(players:next()) then
							break
						end
					end
				players:free()
				end
				if not(guild:next()) then
					break
				end
			end
		guild:free()
		guildname:free()	
		doShowTextDialog(cid, 5958, guildlist)
	else
		doPlayerSendCancel(cid, "Guild Does Not Exist.")
	end
return TRUE

end

Guild List [0.3]
PHP:
--Adam 2008
--Collapser OT

function onSay(cid, words, param)
	guildlist = "Guilds:\n"
	local guilds = db.getResult("SELECT `name`FROM `guilds` ORDER BY `name`;")
	if(guilds:getID() ~= -1) then
		while (true) do
			local name =  guilds:getDataString("name")
  			guildlist = guildlist.."\n"..name 
			if not(guilds:next()) then
				break
			end
		end
		guilds:free()
		doShowTextDialog(cid, 5958, guildlist)
	end
return TRUE

end
 
Last edited:
Thanks for posting it! I Always like to see people contributing scripts :). Great job!

No problem, i've had these for awhile and i actually enjoy scripting and helping people make their servers better / learn some scripting and add other things to OTs that are unique in some way or another
 
[12/03/2009 14:33:54] Lua Script Error: [TalkAction Interface]
[12/03/2009 14:33:54] data/talkactions/scripts/highscores.lua:eek:nSay

[12/03/2009 14:33:54] data/talkactions/scripts/highscores.lua:12: attempt to index global 'luasql' (a nil value)
[12/03/2009 14:33:54] stack traceback:
[12/03/2009 14:33:54] data/talkactions/scripts/highscores.lua:12: in function <data/talkactions/scripts/highscores.lua:7>
 
[12/03/2009 14:33:54] Lua Script Error: [TalkAction Interface]
[12/03/2009 14:33:54] data/talkactions/scripts/highscores.lua:eek:nSay

[12/03/2009 14:33:54] data/talkactions/scripts/highscores.lua:12: attempt to index global 'luasql' (a nil value)
[12/03/2009 14:33:54] stack traceback:
[12/03/2009 14:33:54] data/talkactions/scripts/highscores.lua:12: in function <data/talkactions/scripts/highscores.lua:7>

that error means you are using a 0.2 script on a 0.3 server or a server that does not support LUASQL, scroll down and try a different highscore script
 
Back
Top