GO

!rank Bugado

Por GodBz, 11 de mar. de 2010 em Archived

script
10
1.9k
GodBzG
11 de março de 2010 às 04:44

Meu problema é o seguinte:

tenho um script de !rank que funciona quando executado, mais depois disso os player param de ser salvos...

o script é esse ai:

function onSay(cid, words, param)

dofile("./config.lua")

local players = 40 -- 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 == "sqlite" then

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

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

end

 

A unica solução que deu certo foi deixar apenas a parte de lvl, as outras opções bugam ao ser usadas..

 

Meu server é 8.40 tfs 0.2.0.0 e uso sqlite e a função

str = getHighscoreString((ranks[msg][1]))
não é aceita!

 

eu creio que esse script pode ser editado para encontrar as informações em um sqlite, pelo que eu entendi ele foi criado pra mysql

 

OBS.: trocar para mysql não é uma opções pois isso resultaria em um reset em meu server, e ninguem quer isso né??

Se alguem souber como arrumar fico mt grato...

Editado Março 11 por GodBz

DevilMoonD
15 de março de 2010 às 22:13

hmm tente bota este ranking é bem melhor !

 

vá em DATA>TALKATIONS>SCRIPTER

 

copie uma pasta igual renomeie para rank e bote isso dentro

 

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

 

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)

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 Devil Moon\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

 

e depois adicione o tag em talkations.xml

 

<talkaction log="yes" words="!rank" access="0" event="script" value="rank.lua"/>

 

 

Bota esse Ranking n da bug e é bem melhor :D

 

 

Vermelho=Ali Tu Pode Alterar Quantos Player vai ser no ranking ex:

20 player> vai ser o maximo 20 player no ranking vai ate vigezimo lugar no ranking entende?

Editado Março 15 por DevilMoon

GodBzG
15 de março de 2010 às 23:58

Vou tentar por ele hoje, é diferente dos que eu ja tenho, mt obrigado pela coperação, se der certo ja posto hoje mesmo..

Att

Editado Março 16 por GodBz

GodBzG
16 de março de 2010 às 02:02

Deu esse erro:

'util' expected <to close 'repeat' at line 38> near '<eof>'
2 semanas depois...
nyuchihaN
28 de março de 2010 às 00:21

Tenta usar esse daqui.

 

\data\talkactions\scripts com o nome rank.lua

 

 

local ranks = {

 

['fist'] = {0},

 

['club'] = {1},

['sword'] = {2},

['axe'] = {3},

['distance'] = {4},

['shield'] = {5},

['fish'] = {6},

['magic'] = {7},

['level'] = {8},

 

}

 

 

function onSay(cid, words, param)

 

local msg = string.lower(param)

if ranks[msg] ~= nil then

str = getHighscoreString((ranks[msg][1]))

else

str = getHighscoreString((8))

end

doShowTextDialog(cid,6500, str) -- tinha um bug aqui ja ajeitei

return TRUE

 

end

 

 

Agora em \data\talkactions\talkactions.xml cole isso la em Players.

 

 

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

 

Espero ter Ajudado. xD

Editado Março 28 por DeathAngels

GodBzG
01 de abril de 2010 às 00:39
Meu server é 8.40 tfs 0.2.0.0 e uso sqlite e a função

 

 

str = getHighscoreString((ranks[msg][1]))

 

NÃO É ACEITA

MatheusGladM
01 de abril de 2010 às 09:00

Veja se tem essa linha no config.lua

 

-- Highscores

highscoreDisplayPlayers = 20

updateHighscoresAfterMinutes = 3

 

Display players se bota oq se quer

 

e no update se bota os minutos

george100G
01 de abril de 2010 às 12:48

Aqui está o certo:

 

Vá em data\talkactions\scripts copie e cole qualquer arquivo.lua e renomei para ranks.lua e cole isto dentro:

 

 

 

---Rank---

local ranks = {

 

['fist'] = {0},

 

['club'] = {1},

['sword'] = {2},

['axe'] = {3},

['distance'] = {4},

['shield'] = {5},

['fish'] = {6},

['magic'] = {7},

['level'] = {8},

 

}

 

 

function onSay(cid, words, param)

 

local msg = string.lower(param)

if ranks[msg] ~= nil then

str = getHighscoreString((ranks[msg][1]))

else

str = getHighscoreString((8))

end

doShowTextDialog(cid,6500, str)

return TRUE

 

end

 

Dps vai em talkactions.xml e adc :

 

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

 

Depois vai em : Actions>scripts>other e copia qualquer arquivo la e renomeie para highscores.lua e cole isso dentro:

 

function onUse(cid, item, fromPosition, itemEx, toPosition)

if(item.actionid >= 150 and item.actionid <= 158) then

doShowTextDialog(cid, item.itemid, getHighscoreString((item.actionid - 150)))

return TRUE

end

 

return FALSE

end

 

 

Vai na para pasta Mods> e copie qualquer arquivo.xml e renomeie para : highscorebook.xml e cole isto dentro:

 

<?xml version="1.0" encoding="UTF-8"?>

<mod name="Highscore book" version="1.0" author="The Forgotten Server" contact="otland.net" enabled="yes">

<action itemid="1981" event="buffer"><![CDATA[

if(item.actionid >= 150 and item.actionid <= 158) then

doShowTextDialog(cid, item.itemid, getHighscoreString((item.actionid - 150)))

else

_result = false

end

]]></action>

<item id="1981" article="a" name="highscore book" override="yes"/>

</mod>

 

espero ter ajudo

 

abraços

AntiemoxlrA
01 de abril de 2010 às 12:55

hem algums severs dependendo da versao se for um 8.40 antigo ele nao aceita algumas funçoes eu ja tive esse problema Boom uma dica Use o TFS 0.3.4 creio que seja melhor para você

GodBzG
08 de abril de 2010 às 01:19

Citrico aqui não tem Mods, vou tentar fazer as outras partes e depois digo se deu certo..

Editado Abril 8 por GodBz