• 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!

TalkAction In-game rank for TFS 0.3.4

Mock

Mock the bear (MTB)
Joined
Jul 29, 2008
Messages
619
Reaction score
106
Location
Brazil
By new TFS db system the old rank systems dont work, but i created new! :D

I tested it on TFS 0.3.4 BUT it work on 0.3.X.

The first stept to install it you must need go to talkactions on data folder. create file called rank.lua and add it:​
Code:
function getPlayerNameByGUID2(n)
 local c = db.getResult("SELECT `name` FROM `players` WHERE `id` = "..n..";")
 if c:getID() == -1  then
    return "SQL_ERROR["..n.."]"
 end
    return c:getDataString("name")
end

function onSay(cid, words, param)
         --- Please dont remove the credits
         --- contact: [email protected]
         --- original link: http://forums.otserv.com.br/f29/tfs-0-3-4-in-game-rank-completo-90953/
         local max = 10
         
         local letters_to_next = 20 -- dont change
         
         --
         local skills = {
          ['fist'] = 0,
          ['club'] = 1,
          ['sword'] = 2,
          ['axe'] = 3,
          ['distance'] = 4,
          ['shielding'] = 5,
          ['fishing'] = 6,
          -- outros nomes
          ['dist'] = 4,
          ['shield'] = 5,
          ['fish'] = 6,
         }
         local name_now
         local name = "Ranks By Mock\n"
         local rkn = 0
         local no_break = 0
         param = string.lower(param)
         dofile('config.lua')
         if param == "" or param == "level" and ( param ~= "magic" and param == "ml") and skills[param] == nil then
         name = name.."Name                  Level             Exp\n"
         local v = db.getResult("SELECT `name`, `level`, `experience` FROM `players` WHERE `group_id` <= 2 ORDER BY `experience` DESC LIMIT 0,"..(max)..";")
         repeat
         no_break  = no_break +1
         if v:getID() == -1  then
            break
         end
         rkn = rkn+1
         name_now, l = v:getDataString("name"), string.len(v:getDataString("name"))
         space = ""
         for i=1, letters_to_next-l do
           space = space.." "
         end
         name = name..rkn.."º "..name_now..space.."|"..v:getDataInt("level")  .."|           ".."|"..v:getDataInt("experience").."|".."\n"         
         if no_break >= 20 then
            break
         end
         until v:next() == false
         elseif param == "magic" or param == "ml" then
                name = name.."Name                  Level             MLp\n"
                local v = db.getResult("SELECT `name`, `level`, `maglevel` FROM `players` WHERE `group_id` <= 2 ORDER BY `maglevel` DESC LIMIT 0,"..(max)..";")
                repeat
                      if v:getID() == -1  then
                         break
                      end
                      rkn = rkn+1
                      name_now, l = v:getDataString("name"), string.len(v:getDataString("name"))
                      space = ""
                      for i=1, letters_to_next-l do
                          space = space.." "
                      end
                      name = name..rkn.."º "..name_now..space.."|"..v:getDataInt("level").."|  ".."           ".."|"..v:getDataInt("maglevel").."|".."\n"         
                      until v:next() == false
         elseif skills[param] ~= nil then
            name = name.."Name                  "..param.." fighting.\n"
            local v = db.getResult("SELECT `player_id`, `value` FROM `player_skills` WHERE `skillid` = "..skills[param].." ORDER BY `value` DESC;")
            local kk = 0
            
            repeat
                  if kk == max or v:getID() == -1 then
                     break
                  end
                  kk = kk+1
                  name_now, l = getPlayerNameByGUID2(v:getDataInt("player_id")), string.len(getPlayerNameByGUID2(v:getDataInt("play  er_id")))
                  space = ""
                  for i=1, letters_to_next-l do
                       space = space.." "
                  end
                  if name_now == nil then
                     name_now = 'sql error['..v:getDataInt("player_id")..']'
                  end
                  name = name..kk.."º "..name_now..space.."|"..v:getDataInt("value").."|  \n"
            until v:next() == false
         end
         if name ~= "Ranks By Mock\n" then 
         doPlayerPopupFYI(cid, name)
         end
         --doPlayerSendTextMessage(cid, 25, name)


         return TRUE
end

Now open talkactions.xml and if you use TFS 0.3.4 use this tag:
PHP:
<talkaction words="!rank" event="script" value="rank.lua" />
but if you are using tfs 0.3.1 or other more old use this tag:
PHP:
<talkaction words="!rank" script="rank.lua" />

:thumbup:
Have fun

SS:
rankrank.jpg
 
Last edited:
I've added this. Ehm, but i dont tested because i dont have time to restart ma server :D or to load...

Mh when i look at this, i have the question:
You named the .lua RANK
But in you add in your talkactions.xml RANKING.lua
Needn't that be RANK.lua??


But nice =)

EDIT:
I tested it now, but I changed it before.
So with talkaction:

<talkaction words="!rank" event="script" value="rank.lua" />



mfg =)
 
Great Job :thumbup:.
I got this script with books for 0.2~
So if anyone want it, just ask.

Regards,
Shawak
 
no, if you replayer when you say !rank shield dont will hapen nothing. BUT if you dont replace you can say !rank shield or !rank shielding
 
He means you spelled wrong. It's spelled "shield", "shielding", while you spelled it "shiled", "shileding".
 
Check this one, more clean, easy and using official Highscores ( configured in config.lua)

PHP:
local words = {
	level = {"level"},
	magic = {"ml", "magic", "magiclevel"},
	sword = {"sword"},
	club = {"club"},
	shield = {"shield"},
	axe = {"axe"},
	fishing = {"fishing"},
	fist = {"fist"},
	distance = {"distance"}
}


function onSay(cid, words, param, channel)

	if(param == "") then
		doShowTextDialog(cid, 1984, getHighscoreString(8))
		return TRUE
end

	param = param:lower()
	if(param == "level") then
			doShowTextDialog(cid, 1984, getHighscoreString(8))
		return TRUE

	elseif(param == "magic") then
			doShowTextDialog(cid, 1984, getHighscoreString(7))
		return TRUE

	elseif(param == "fishing") then
			doShowTextDialog(cid, 1984, getHighscoreString(6))
		return TRUE

	elseif(param == "shield") then
			doShowTextDialog(cid, 1984, getHighscoreString(5))
		return TRUE

	elseif(param == "distance") then
			doShowTextDialog(cid, 1984, getHighscoreString(4))
		return TRUE

	elseif(param == "axe") then
			doShowTextDialog(cid, 1984, getHighscoreString(3))
		return TRUE

	elseif(param == "sword") then
			doShowTextDialog(cid, 1984, getHighscoreString(2))
		return TRUE

	elseif(param == "club") then
			doShowTextDialog(cid, 1984, getHighscoreString(1))
		return TRUE

	elseif(param == "fist") then
			doShowTextDialog(cid, 1984, getHighscoreString(0))
		return TRUE

	else
		doPlayerSendCancel(cid, "Os ranks sao 'level', 'magic', 'axe', 'sword', 'club', 'shield', 'distance', 'fist' e 'fishing'.")
		return TRUE
	end
end
 
i do an update on script i fixed some bugs :p
and if you dont have funcrion db.getResult use this:
TFS 0.3 db class para 0.2 - OTServ Networks
-- Colandus

db = {}
db.__index = db

function getConnection()
local env, con
if sqlType == "mysql" then
env = assert(luasql.mysql())
con = assert(env:connect(mysqlDatabase, mysqlUser, mysqlPass, mysqlHost, mysqlPort))
else -- sqlite
env = assert(luasql.sqlite3())
con = assert(env:connect(sqliteDatabase))
end

return env, con
end

function db.escapeString(str)
return "'" .. escapeString(str) .. "'"
end

function db.executeQuery(sql)
local env, con = getConnection()
cur = assert(con:execute(sql))
if(type(cur) ~= 'number') then
cur:close()
end
con:close()
env:close()
end

function db.getResult(sql)
local mt = {}

mt.env, mt.con = getConnection()
mt.cur = assert(mt.con:execute(sql))

if(mt.cur:numrows() > 0) then
mt.val = mt.cur:fetch({}, "a")
end

setmetatable(mt, db)
return mt
end

function db:getID()
return self.val and true or LUA_ERROR
end

function db:next()
self.val = self.cur:fetch(self.val, "a")
if self.val then
return true
end
end

function db:getDataInt(name)
if(self.val) then
return tonumber(self.val[name])
end
end

function db:getDataString(name)
if(self.val) then
return tostring(self.val[name])
end
end

function db:free()
self.cur:close()
self.con:close()
self.env:close()
end
:D thanks for colandus
 
[16/06/2009 13:11:32] Error during getDataInt(play er_id).

probly BBcode add an space in this line, find it on script and delete space.
 
For 0.2.5

Lua:
function onSay(cid, words, param)
    dofile("./config.lua")
	local players = 20 -- The amount of players that is shown in the list
	local maxgroupid = 1 -- Players in groups above this is not shown in the list
	
	if sqlType == "mysql" then
		env = assert(luasql.mysql())
		con = assert(env:connect(mysqlDatabase, mysqlUser, mysqlPass, mysqlHost, mysqlPort))
	else -- sqlite
		env = assert(luasql.sqlite3())
		con = assert(env:connect(sqliteDatabase))
	end
	
	local str = ""
	if param == "level" or param == "exp" or param == "lvl" or param == "" then
		cur = assert(con:execute("SELECT `name`, `level`, `experience` FROM `players` WHERE `group_id` <= "..maxgroupid.." ORDER BY `experience` DESC LIMIT 0,"..players..";"))
		row = cur:fetch({}, "a")
		str = "# [Level] - Name - (Experience)\n"
		local i = 0
		while row do
			str = str.."\n#"..(i+1).." ["..row.level.."] - "..row.name.." - ("..row.experience..")"
			row = cur:fetch (row, "a")
			i = i+1
		end
	elseif param == "maglevel" or param == "magic" or param == "ml" then
		cur = assert(con:execute("SELECT `name`, `maglevel` FROM `players` WHERE `group_id` <= "..maxgroupid.." ORDER BY `maglevel` DESC LIMIT 0,"..players..";"))
		row = cur:fetch({}, "a")
		str = "# [Magic Level] - Name\n"
		local i = 0
		while row do
			str = str.."\n#"..(i+1).." ["..row.maglevel.."] - "..row.name..""
			row = cur:fetch (row, "a")
			i = i+1
		end
	elseif param == "fist" then
		cur = assert(con:execute("SELECT `player_id`, `value` FROM `player_skills` WHERE `skillid` = 0 ORDER BY `value` DESC;"))
		row = cur:fetch({}, "a")
		str = "# [Fist Fighting] - Name\n"
		local i = 0
		while row do
			if i == players then
				break
			end
			query = assert(con:execute("SELECT `name` FROM `players` WHERE `group_id` <= "..maxgroupid.." AND `id` = "..row.player_id..""))
			sql = query:fetch({}, "a")
			if sql ~= nil then
				str = str.."\n#"..(i+1).." ["..row.value.."] - "..sql.name..""
				i = i+1
			end
			row = cur:fetch (row, "a")
		end
	elseif param == "club" then
		cur = assert(con:execute("SELECT `player_id`, `value` FROM `player_skills` WHERE `skillid` = 1 ORDER BY `value` DESC;"))
		row = cur:fetch({}, "a")
		str = "# [Club Fighting] - Name\n"
		local i = 0
		while row do
			if i == players then
				break
			end
			query = assert(con:execute("SELECT `name` FROM `players` WHERE `group_id` <= "..maxgroupid.." AND `id` = "..row.player_id..""))
			sql = query:fetch({}, "a")
			if sql ~= nil then
				str = str.."\n#"..(i+1).." ["..row.value.."] - "..sql.name..""
				i = i+1
			end
			row = cur:fetch (row, "a")
		end
	elseif param == "sword" then
		cur = assert(con:execute("SELECT `player_id`, `value` FROM `player_skills` WHERE `skillid` = 2 ORDER BY `value` DESC;"))
		row = cur:fetch({}, "a")
		str = "# [Sword Fighting] - Name\n"
		local i = 0
		while row do
			if i == players then
				break
			end
			query = assert(con:execute("SELECT `name` FROM `players` WHERE `group_id` <= "..maxgroupid.." AND `id` = "..row.player_id..""))
			sql = query:fetch({}, "a")
			if sql ~= nil then
				str = str.."\n#"..(i+1).." ["..row.value.."] - "..sql.name..""
				i = i+1
			end
			row = cur:fetch (row, "a")
		end
	elseif param == "axe" then
		cur = assert(con:execute("SELECT `player_id`, `value` FROM `player_skills` WHERE `skillid` = 3 ORDER BY `value` DESC;"))
		row = cur:fetch({}, "a")
		str = "# [Axe Fighting] - Name\n"
		local i = 0
		while row do
			if i == players then
				break
			end
			query = assert(con:execute("SELECT `name` FROM `players` WHERE `group_id` <= "..maxgroupid.." AND `id` = "..row.player_id..""))
			sql = query:fetch({}, "a")
			if sql ~= nil then
				str = str.."\n#"..(i+1).." ["..row.value.."] - "..sql.name..""
				i = i+1
			end
			row = cur:fetch (row, "a")
		end
	elseif param == "dist" or param == "distance" then
		cur = assert(con:execute("SELECT `player_id`, `value` FROM `player_skills` WHERE `skillid` = 4 ORDER BY `value` DESC;"))
		row = cur:fetch({}, "a")
		str = "# [Distance Fighting] - Name\n"
		local i = 0
		while row do
			if i == players then
				break
			end
			query = assert(con:execute("SELECT `name` FROM `players` WHERE `group_id` <= "..maxgroupid.." AND `id` = "..row.player_id..""))
			sql = query:fetch({}, "a")
			if sql ~= nil then
				str = str.."\n#"..(i+1).." ["..row.value.."] - "..sql.name..""
				i = i+1
			end
			row = cur:fetch (row, "a")
		end
	elseif param == "shield" or param == "shielding" then
		cur = assert(con:execute("SELECT `player_id`, `value` FROM `player_skills` WHERE `skillid` = 5 ORDER BY `value` DESC;"))
		row = cur:fetch({}, "a")
		str = "# [Shielding] - Name\n"
		local i = 0
		while row do
			if i == players then
				break
			end
			query = assert(con:execute("SELECT `name` FROM `players` WHERE `group_id` <= "..maxgroupid.." AND `id` = "..row.player_id..""))
			sql = query:fetch({}, "a")
			if sql ~= nil then
				str = str.."\n#"..(i+1).." ["..row.value.."] - "..sql.name..""
				i = i+1
			end
			row = cur:fetch (row, "a")
		end
	elseif param == "fish" or param == "fishing" then
		cur = assert(con:execute("SELECT `player_id`, `value` FROM `player_skills` WHERE `skillid` = 6 ORDER BY `value` DESC;"))
		row = cur:fetch({}, "a")
		str = "# [Fishing] - Name\n"
		local i = 0
		while row do
			if i == players then
				break
			end
			query = assert(con:execute("SELECT `name` FROM `players` WHERE `group_id` <= "..maxgroupid.." AND `id` = "..row.player_id..""))
			sql = query:fetch({}, "a")
			if sql ~= nil then
				str = str.."\n#"..(i+1).." ["..row.value.."] - "..sql.name..""
				i = i+1
			end
			row = cur:fetch (row, "a")
		end
	end
	if str ~= "" then
		doPlayerPopupFYI(cid, str)
	end
	con:close()
	env:close()
end

Regards,
Shawak
 
Back
Top