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

Lua Talkaction

Ghazer

Member
Joined
Mar 13, 2009
Messages
350
Reaction score
6
its possible add frags rank?

Code:
function onSay(cid, words, param)

     -- max players on the highscore
     local players = 20 -- The amount of players that is shown in the list

     -- don't touch --
     local str = ""
     local value = ""
     local name = ""
     local player_id = 0
     local result = nil
	if param == "level" or param == "exp" or param == "lvl" then
		str = "# [Level] - Name\n"
		value = "level"
		name = "name"
		result = db.getResult("SELECT `level`, `name` FROM `players` ORDER BY `level` DESC, `name` ASC;")
	elseif param == "magiclevel" or param == "magic" or param == "mlevel" or param == "ml" then
		str = "# [Magic Level] - Name\n"
		value = "maglevel"
		name = "name"
		result = db.getResult("SELECT `name`, `maglevel` FROM `players` ORDER BY `maglevel` DESC, `name` ASC;")
	elseif param == "fist" then
		str = "# [Fist] - Name\n"
		value = "value"
		player_id = "player_id"
		result = db.getResult("SELECT `player_id`, `value` FROM `player_skills`  WHERE `skillid` = 0 ORDER BY `value` DESC, `player_id` ASC;")
	elseif param == "club" then
		str = "# [Club] - Name\n"
		value = "value"
		player_id = "player_id"
		result = db.getResult("SELECT `player_id`, `value` FROM `player_skills`  WHERE `skillid` = 1 ORDER BY `value` DESC, `player_id` ASC;")
	elseif param == "sword" then
		str = "# [Sword] - Name\n"
		value = "value"
		player_id = "player_id"
		result = db.getResult("SELECT `player_id`, `value` FROM `player_skills`  WHERE `skillid` = 2 ORDER BY `value` DESC, `player_id` ASC;")
	elseif param == "axe" then
		str = "# [Axe] - Name\n"
		value = "value"
		player_id = "player_id"
		result = db.getResult("SELECT `player_id`, `value` FROM `player_skills`  WHERE `skillid` = 3 ORDER BY `value` DESC, `player_id` ASC;")
	elseif param == "dist" or param == "distance" then
		str = "# [Distance] - Name\n"
		value = "value"
		player_id = "player_id"
		result = db.getResult("SELECT `player_id`, `value` FROM `player_skills`  WHERE `skillid` = 4 ORDER BY `value` DESC, `player_id` ASC;")
	elseif param == "shield" or param == "shielding" then
		str = "# [Shield] - Name\n"
		value = "value"
		player_id = "player_id"
		result = db.getResult("SELECT `player_id`, `value` FROM `player_skills`  WHERE `skillid` = 5 ORDER BY `value` DESC, `player_id` ASC;")
	elseif param == "fish" or param == "fishing" then
		str = "# [Fishing] - Name\n"
		value = "value"
		player_id = "player_id"
		result = db.getResult("SELECT `player_id`, `value` FROM `player_skills`  WHERE `skillid` = 6 ORDER BY `value` DESC, `player_id` ASC;")
	else
	     doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Unbekannter skill: '" .. param .. "'")
	     return TRUE
	end
	if (result:getID() ~= -1) then
		local i = 1
		while TRUE do
			if not(result:next()) or i > players then
				break
			end
			str = str .. "\n " .. i .. ". [" .. result:getDataInt(value) .. "] - " .. (name ~= "" and result:getDataString("name") or getPlayerNameByGUID(result:getDataInt(player_id)))
			i = i+1
		end
		result:free()
	end
	if str ~= "" then
		doPlayerPopupFYI(cid, str)
	end
	return TRUE
end

Code:
 <talkaction words="!highscore" event="script" value="highscore.lua"/>

- - - Updated - - -

BUMP

- - - Updated - - -

JKHUJ
 
Ranks:

All Skills
level
magic
health
mana
frags

Rank All Vocations

exemple:

!rank frags
!rank magic
!rank druid -- show top level druid/elder druid
!rank knight -- show top level knight/elite knight druid


This in ur talkactions.xml
LUA:
<talkaction words="!highscore" script="ranks.lua" />


Put this in ur talkactions > scripts folder, as rank.lua
LUA:
local config = {
MaxPlayer = 20,
fight_skills = {
        ['fist'] = 0,
        ['club'] = 1,
        ['sword'] = 2,
        ['axe'] = 3,
        ['distance'] = 4,
        ['shielding'] = 5,
        ['fishing'] = 6,
        ['dist'] = 4,
        ['shield'] = 5,
        ['fish'] = 6,
},
other_skills = {
[''] = "level",
['level'] = "level",
['magic'] = "maglevel",
['health'] = "healthmax",
['mana'] = "manamax"
},
vocations = {
['sorcerer'] = {1,5},
['druid'] = {2,6},
['paladin'] = {3,7},
['knight'] = {4,8}
}
}
function onSay(cid, words, param)
local param,str = string.lower(param),""
	if param ~= "frags" and not config.fight_skills[param] and not config.other_skills[param] and not config.vocations[param] then
		doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "este rank não existe.") return true
	end
str,k = "--[ RANK "..(param == "" and "LEVEL" or string.upper(param)).." ]--\n\n",1
if param == "frags" then
   local time,T = os.time(),{}
   local times = {today = (time - 86400), week = (time - (7 * 86400))}
     local getPlayer = db.getResult("SELECT `id` FROM `players`;")
     repeat
     if (getPlayer:getID() ~= -1) then
     local getGuid = getPlayer:getDataInt("id")
    local contents, result = {day = {}, week = {}, month = {}}, db.getResult("SELECT `pd`.`date`, `pd`.`level`, `p`.`name` FROM `player_killers` pk LEFT JOIN `killers` k ON `pk`.`kill_id` = `k`.`id` LEFT JOIN `player_deaths` pd ON `k`.`death_id` = `pd`.`id` LEFT JOIN `players` p ON `pd`.`player_id` = `p`.`id` WHERE `pk`.`player_id` = "..tonumber(getGuid).." AND `k`.`unjustified` = 1 AND `pd`.`date` >= " .. (time - (30 * 86400)) .. " ORDER BY `pd`.`date` DESC")
    if (result:getID() ~= -1) then
            repeat
                    local content = {date = result:getDataInt("date")}
                    if(content.date > times.today) then
                            table.insert(contents.day, content)
                    elseif(content.date > times.week) then
                            table.insert(contents.week, content)
                    else
                            table.insert(contents.month, content)
                    end
            size = {day = table.maxn(contents.day),week = table.maxn(contents.week),month = table.maxn(contents.month)}
            until not result:next()
            table.insert(T,{getGuid,size.day+size.week+size.month})
            result:free()
    end
    end 
until not getPlayer:next()
table.sort(T, function(x,y) return x[2] > y[2] end)
	for _, rank in pairs(T) do
		str = str .."\n"..k..". "..getPlayerNameByGUID(rank[1]).." - ["..rank[2].."]"
			k = k + 1
		if k > config.MaxPlayer then 
			break 
		end
	end
doShowTextDialog(cid,6500, str)
return true
end
query = config.fight_skills[param] and db.getResult("SELECT `player_id`, `value` FROM `player_skills` WHERE `skillid` = "..config.fight_skills[param].." ORDER BY `value` DESC;") or config.other_skills[param] and db.getResult("SELECT `name`, `"..config.other_skills[param].."` FROM `players` WHERE `id` > 6 AND `group_id` < 2 ORDER BY `"..config.other_skills[param].."` DESC, `name` ASC;") or db.getResult("SELECT `name`, `level` FROM `players` WHERE `group_id` <= 2 AND `vocation` = "..config.vocations[param][1].." or `vocation` = "..config.vocations[param][2].." ORDER BY `level` DESC;") 
if (query:getID() ~= -1) then 
		while true do
			str = str .. "\n " .. k .. ". "..(config.fight_skills[param] and getPlayerNameByGUID(query:getDataString("player_id")) or query:getDataString("name")).." - [" .. query:getDataInt(config.fight_skills[param] and "value" or config.vocations[param] and "level" or config.other_skills[param]) .. "]"
				k = k + 1
			if not(query:next()) or k > config.MaxPlayer then
				break 
			end 
		end 
	query:free()
end
doShowTextDialog(cid,6500, str)
return true
end
 
Ranks:

All Skills
level
magic
health
mana
frags

Rank All Vocations

exemple:

!rank frags
!rank magic
!rank druid -- show top level druid/elder druid
!rank knight -- show top level knight/elite knight druid


This in ur talkactions.xml
LUA:
<talkaction words="!highscore" script="ranks.lua" />


Put this in ur talkactions > scripts folder, as rank.lua
LUA:
local config = {
MaxPlayer = 20,
fight_skills = {
        ['fist'] = 0,
        ['club'] = 1,
        ['sword'] = 2,
        ['axe'] = 3,
        ['distance'] = 4,
        ['shielding'] = 5,
        ['fishing'] = 6,
        ['dist'] = 4,
        ['shield'] = 5,
        ['fish'] = 6,
},
other_skills = {
[''] = "level",
['level'] = "level",
['magic'] = "maglevel",
['health'] = "healthmax",
['mana'] = "manamax"
},
vocations = {
['sorcerer'] = {1,5},
['druid'] = {2,6},
['paladin'] = {3,7},
['knight'] = {4,8}
}
}
function onSay(cid, words, param)
local param,str = string.lower(param),""
	if param ~= "frags" and not config.fight_skills[param] and not config.other_skills[param] and not config.vocations[param] then
		doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "este rank não existe.") return true
	end
str,k = "--[ RANK "..(param == "" and "LEVEL" or string.upper(param)).." ]--\n\n",1
if param == "frags" then
   local time,T = os.time(),{}
   local times = {today = (time - 86400), week = (time - (7 * 86400))}
     local getPlayer = db.getResult("SELECT `id` FROM `players`;")
     repeat
     if (getPlayer:getID() ~= -1) then
     local getGuid = getPlayer:getDataInt("id")
    local contents, result = {day = {}, week = {}, month = {}}, db.getResult("SELECT `pd`.`date`, `pd`.`level`, `p`.`name` FROM `player_killers` pk LEFT JOIN `killers` k ON `pk`.`kill_id` = `k`.`id` LEFT JOIN `player_deaths` pd ON `k`.`death_id` = `pd`.`id` LEFT JOIN `players` p ON `pd`.`player_id` = `p`.`id` WHERE `pk`.`player_id` = "..tonumber(getGuid).." AND `k`.`unjustified` = 1 AND `pd`.`date` >= " .. (time - (30 * 86400)) .. " ORDER BY `pd`.`date` DESC")
    if (result:getID() ~= -1) then
            repeat
                    local content = {date = result:getDataInt("date")}
                    if(content.date > times.today) then
                            table.insert(contents.day, content)
                    elseif(content.date > times.week) then
                            table.insert(contents.week, content)
                    else
                            table.insert(contents.month, content)
                    end
            size = {day = table.maxn(contents.day),week = table.maxn(contents.week),month = table.maxn(contents.month)}
            until not result:next()
            table.insert(T,{getGuid,size.day+size.week+size.month})
            result:free()
    end
    end 
until not getPlayer:next()
table.sort(T, function(x,y) return x[2] > y[2] end)
	for _, rank in pairs(T) do
		str = str .."\n"..k..". "..getPlayerNameByGUID(rank[1]).." - ["..rank[2].."]"
			k = k + 1
		if k > config.MaxPlayer then 
			break 
		end
	end
doShowTextDialog(cid,6500, str)
return true
end
query = config.fight_skills[param] and db.getResult("SELECT `player_id`, `value` FROM `player_skills` WHERE `skillid` = "..config.fight_skills[param].." ORDER BY `value` DESC;") or config.other_skills[param] and db.getResult("SELECT `name`, `"..config.other_skills[param].."` FROM `players` WHERE `id` > 6 AND `group_id` < 2 ORDER BY `"..config.other_skills[param].."` DESC, `name` ASC;") or db.getResult("SELECT `name`, `level` FROM `players` WHERE `group_id` <= 2 AND `vocation` = "..config.vocations[param][1].." or `vocation` = "..config.vocations[param][2].." ORDER BY `level` DESC;") 
if (query:getID() ~= -1) then 
		while true do
			str = str .. "\n " .. k .. ". "..(config.fight_skills[param] and getPlayerNameByGUID(query:getDataString("player_id")) or query:getDataString("name")).." - [" .. query:getDataInt(config.fight_skills[param] and "value" or config.vocations[param] and "level" or config.other_skills[param]) .. "]"
				k = k + 1
			if not(query:next()) or k > config.MaxPlayer then
				break 
			end 
		end 
	query:free()
end
doShowTextDialog(cid,6500, str)
return true
end

Good you're helping people in support, but better put credits to the maker next time, or the link. http://otland.net/f81/command-rank-update-166418/.
This is also usefull if a script doesn't work, he can asks the person who made the script.
 
Back
Top