Salvus
Well-Known Member
- Joined
- Feb 7, 2019
- Messages
- 102
- Solutions
- 1
- Reaction score
- 69
I bought a server that had funny systems. Now I want to share them with you.
I am not a scripter but if it need something more for this script i will upload them here to just tell me what it need.
TFS 1.3
TIBIA 10.98
The system gives skulls to the top 10
Highest level: Black skull
2-3: Red skull
4-5: Orange skull
6-7: Green skull
8-9: Yellow skull
10: White skull
I am not a scripter but if it need something more for this script i will upload them here to just tell me what it need.
TFS 1.3
TIBIA 10.98
The system gives skulls to the top 10
Highest level: Black skull
2-3: Red skull
4-5: Orange skull
6-7: Green skull
8-9: Yellow skull
10: White skull
Code:
<globalevent name="highscore" interval="1000000" script="highscore.lua"/>
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}
}
}
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
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 [ICODE]id[/ICODE] FROM [ICODE]players[/ICODE] ORDER BY [ICODE]level[/ICODE] 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 [ICODE]players[/ICODE] SET [ICODE]skull[/ICODE] = %d WHERE [ICODE]id[/ICODE] = %d;'
query = string.format(query, skull, guid)
db.asyncQuery(query)
end
end
if (not highSkullScores) then
highSkullScores = {}
end
function skulls:getHighScores()
local query = 'SELECT [ICODE]id[/ICODE] FROM [ICODE]players[/ICODE] ORDER BY [ICODE]level[/ICODE] 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
end
)
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 [ICODE]id[/ICODE], [ICODE]name[/ICODE] FROM [ICODE]players[/ICODE] ORDER BY [ICODE]level[/ICODE] 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
Last edited: