Trying to fix this in a 8.6 tfs 1.3 server but i got this stupid errors. Can someone help me? Maybe @M0ustafa the legend? xD
Code:
Lua Script Error: [Main Interface]
(Unknown scriptfile)
data/globalevents/scripts/highscore.lua:84: bad argument #2 to 'format' (number expected, got nil)
stack traceback:
[C]: at 0x7ff64d94c580
[C]: in function 'format'
data/globalevents/scripts/highscore.lua:84: in function 'setPlayerSkull'
data/globalevents/scripts/highscore.lua:104: in function <data/globalevents/scripts/highscore.lua:96>
Code:
skulls =
{
requiredSkulls =
{
{fromId = 1, toId = 1, skullId = SKULL_BLACK},
{fromId = 2, toId = 3, skullId = SKULL_RED},
{fromId = 4, toId = 5, skullId = SKULL_ORANGE},
{fromId = 6, toId = 7, skullId = SKULL_GREEN},
{fromId = 8, toId = 9, skullId = SKULL_YELLOW},
{fromId = 10, toId = 10, skullId = SKULL_WHITE}
}
--rest white
}
function skulls:getRequiredSkull(place)
for i = 1, #self.requiredSkulls do
local requiredSkull = self.requiredSkulls[i]
if (place >= requiredSkull.fromId and place <= requiredSkull.toId) then
return requiredSkull.skullId
end
end
return SKULL_NONE
end
function skulls:getPlayerSkullPlace(player)
if (player) then
print(player:getSkull())
for i = 1, #self.requiredSkulls do
local requiredSkull = self.requiredSkulls[i]
if (player:getSkull() == requiredSkull.skullId) then
--print(requiredSkull.skullId)
return i
end
end
end
end
function sendSkullPlaceMessage(cid)
local player = Player(cid)
if (player) then
skulls:sendSkullPlaceMessage(player)
end
end
function skulls:sendSkullPlaceMessage(player)
if (player) then
local query = 'SELECT `id` FROM `players` ORDER BY `level` DESC LIMIT 10;';
db.asyncStoreQuery(query,
function(query)
--local playersToSave = {}
--highSkullScores = {}
if(query) then
local count = 1
local guid = 0
repeat
guid = result.getDataInt(query, "id")
--self:setPlayerSkull(guid, count)
if (player:getGuid() == guid) then
player:sendTextMessage(MESSAGE_INFO_DESCR, "You are now on top 10 level. You are on place "..count..'!')
return false
end
--print("test")
count = count + 1
until not result.next(query)
end
--highSkullScores
end
)
end
end
function skulls:setPlayerSkull(guid, place)
local player = Player(guid)
local skull = self:getRequiredSkull(place)
if (player) then
--print("skull "..skull.."___name: "..player:getName())
--player:sendTextMessage(MESSAGE_INFO_DESCR, "You are now on top 10 level. You are on place "..place..'!')
player:setSkull(skull)
else
--print("skull "..skull.."___guid: "..guid)
local query = 'UPDATE `players` SET `skull` = %d WHERE `id` = %d;'
query = string.format(query, skull, guid)
db.asyncQuery(query)
end
end
if (not highSkullScores) then
highSkullScores = {}
end
function skulls:getHighScores()
local query = 'SELECT `id` FROM `players` ORDER BY `level` DESC LIMIT 10;';
db.asyncStoreQuery(query,
function(query)
local playersToSave = {}
highSkullScores = {}
if(query) then
local count = 1
local guid = 0
repeat
guid = result.getDataInt(query, "id")
self:setPlayerSkull(guid, count)
--print("test")
count = count + 1
until not result.next(query)
end
--highSkullScores
end
)
--print(p)
--return playersToSave
end
function skulls:updateHighScoresSkulls()
return self:getHighScores()
--[[ local players = self:getHighScores()
print('#players: '..#highSkullScores)
if (#players > 0) then
for i = 1, #players do
self:setPlayerSkull(players[i], i)
end
end --]]--
end
--local players = {}
--local playersByName = {}
--local queries = {}
function cleanPlayers(onlinePlayers)
local player
for i = 1, #onlinePlayers do
player = onlinePlayers[i]
player:setSkull(SKULL_NONE)
player:setSkullTime(0)
end
end
function getRequiredSkull(pos)
local skull
for i = 1, #skulls do
skull = skulls[i]
if (pos >= skull.fromId and skull.fromId <= skull.toId) then
return skull.skullId
end
end
return SKULL_WHITE
end
function changePlayerSkull(player, players)
local guid = player:getGuid()
local id = 0
for i = 1, #players do
if (players[i] == guid) then
id = i
break
end
end
local skull = getRequiredSkull(id)
skull = skull and skull or SKULL_WHITE
player:setSkull(skull)
player:setSkullTime(os.time()*2)
end
function changeSkullsToHigh(onlinePlayers, players)
local player
for i = 1, #onlinePlayers do
player = onlinePlayers[i]
if (player) then
if (isInArray(players, player:getGuid())) then
changePlayerSkull(player, players)
end
end
end
end
function onThink(interval)
players = {}
playersByName = {}
queries = {}
--[[db.asyncStoreQuery("SELECT `id`, `name` FROM `players` ORDER BY `level` DESC LIMIT 10;",
function(query)
if(query) then
repeat
players[#players+1] = result.getDataInt(query, "id")
playersByName[#playersByName+1] = result.getDataString(query, "name")
until not result.next(query)
local playerCheck
for i = 1, #players do
playerCheck = Player(playersByName[i])
if (not playerCheck) then
queries[#queries + 1] = string.format('UPDATE players set skull = %d, skulltime = 999999 WHERE id = %d', getRequiredSkull(i), players[i])
end
end
local onlinePlayers = Game.getPlayers()
cleanPlayers(onlinePlayers)
changeSkullsToHigh(onlinePlayers, players)
for i = 1, #queries do
db.query(queries[i])
end
end
end
)--]]
--[[ if (resultId) then
repeat
players[#players+1] = result.getDataInt(resultId, "id")
playersByName[#playersByName+1] = result.getDataString(resultId, "name")
until not(resultId:next())
resultId:free()
local playerCheck
for i = 1, #players do
playerCheck = Player(playersByName[i])
if (not playerCheck) then
queries[#queries + 1] = string.format('UPDATE players set skull = %d, skulltime = 999999 WHERE id = %d', getRequiredSkull(i), players[i])
end
end
local onlinePlayers = Game.getPlayers()
cleanPlayers(onlinePlayers)
changeSkullsToHigh(onlinePlayers)
end
--]]
--[[ if resultId then
local i = 1
while true do
if getPlayerByName(resultId:getDataString("name")) ~= nil then
if i == 1 then
doCreatureSetSkullType(getPlayerByName(resultId:getDataString("name")),SKULL_BLACK)
elseif i == 2 or i == 3 then
doCreatureSetSkullType(getPlayerByName(resultId:getDataString("name")),SKULL_RED)
elseif i == 4 or i == 5 then
doCreatureSetSkullType(getPlayerByName(resultId:getDataString("name")),SKULL_GREEN)
elseif i == 6 or i == 7 then
doCreatureSetSkullType(getPlayerByName(resultId:getDataString("name")),SKULL_YELLOW)
else
doCreatureSetSkullType(getPlayerByName(resultId:getDataString("name")),SKULL_WHITE)
end
end
i = i + 1
if not resultId:next() or i > 10 then
break
end
end
resultId:free()
end--]]
return true
end