Ir para conteúdo

!rank Bugado


GodBz

Posts Recomendados

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 por GodBz
Link para o comentário
Compartilhar em outros sites

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 por DevilMoon
Link para o comentário
Compartilhar em outros sites

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 por GodBz
Link para o comentário
Compartilhar em outros sites

  • 2 weeks later...

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 por DeathAngels
Link para o comentário
Compartilhar em outros sites

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

Link para o comentário
Compartilhar em outros sites

×
×
  • Criar Novo...