Ir para conteúdo
  • Cadastre-se

Action%2FTalkaction [TFS 1.0] Ranking diferente in-game


Posts Recomendados

Screenshots

E4GsaUhs.png

 

Comando

!highscores

 

Instalando

/globalevents/globalevents.xml

<globalevent type="startup" name="Highscore" script="highscores.lua"/>
<globalevent interval="10800000" name="Highscores" script="highscores.lua"/>

/globalevents/scripts/highscores.lua

local QueryList = {
['Level'] = {'`name`, `level` AS `score` FROM `players`', 'ORDER BY `experience` DESC'},
['Magic Level'] = {'`name`, `maglevel` AS `score` FROM `players`', 'ORDER BY `maglevel` DESC, `manaspent` DESC'},
--['Storage'] = {'`players`.`name` AS `name`, `value` AS `score` FROM `player_storage` LEFT JOIN `players` ON `player_storage`.`player_id` = `players`.`id`', 'AND `key` = 1550 ORDER BY `value` DESC'}
}

for i, skill in ipairs({'fist','club','sword','axe','dist','shielding','fishing'}) do
local index = (skill == 'dist' and 'Distance' or skill:gsub('^%l',string.upper)) .. (i < 6 and ' Fighting' or '')
QueryList[index] = {'`name`, `skill_' .. skill .. '` AS `score` FROM `players`','ORDER BY `skill_' .. skill .. '` DESC, `skill_' .. skill .. '_tries` DESC'}
end

function updateHighscores()
for skill, query in pairs(QueryList) do
local t, Query = {}, db.storeQuery('SELECT ' .. query[1] .. ' WHERE `deletion` = 0 AND `group_id` < 3 ' .. query[2] .. ' LIMIT 30;')
if Query ~= false then
repeat
table.insert(t, {result.getDataString(Query, 'name'), result.getDataInt(Query, 'score')})
until not result.next(Query)
result.free(Query)
setGlobalStorageValue(skill, t)
end
end
setGlobalStorageValue('highscores', os.time())
end

function onStartup()
updateHighscores()
end

function onThink(interval)
updateHighscores()
return true
end

/creaturescripts/creaturescripts.xml

<event type="modalwindow" name="Highscores" script="highscores.lua"/>

/creaturescripts/scripts/highscores.lua

SkillWindow = {
[1337] = 'Local highscores at ' .. getConfigInfo('serverName'),
[1338] = 'Level', [1339] = 'Magic Level', [1340] = 'Shielding',
[1341] = 'Distance Fighting', [1342] = 'Sword Fighting', [1343] = 'Club Fighting',
[1344] = 'Axe Fighting', [1345] = 'Fist Fighting', [1346] = 'Fishing',
--[1347] = 'Storage'
}

highscores = ModalWindow(1337, SkillWindow[1337], 'Choose a category:')
for i, skill in ipairs({'Level','Magic','Shielding','Distance','Sword','Club','Axe','Fist','Fishing'}) do
highscores:addChoice(i, skill)
end
--highscores:addChoice(10, 'Storage')
highscores:addButton(1, 'Show')
highscores:addButton(2, 'Close')
highscores:addButton(3, 'Info')
highscores:setDefaultEnterButton(1)
highscores:setDefaultEscapeButton(2)
highscores:setPriority(true)

function string.diff(diff) --by Colandus and fixed by Cykotitan
local format = {
{'day', diff / 60 / 60 / 24},
{'hour', diff / 60 / 60 % 24},
{'minute', diff / 60 % 60},
{'second', diff % 60}
}

local out = {}
for k, t in ipairs(format) do
local v = math.floor(t[2])
if(v > 0) then
table.insert(out, (k < #format and (#out > 0 and ', ' or '') or ' and ') .. v .. ' ' .. t[1] .. (v ~= 1 and 's' or ''))
end
end
local ret = table.concat(out)
if ret:len() < 16 and ret:find('second') then
local a, b = ret:find(' and ')
ret = ret:sub(b+1)
end
return ret
end

function string.abbr(first, final, limit)
local str = first .. final
if str:len() > limit then
str = first:sub(1, limit-(final:len())) .. final
end
return str
end

function sendSkillWindow(cid, windowId)
local highscore = ModalWindow(windowId, 'Ranking for ' .. SkillWindow[windowId], 'Scroll down for entire list')
for rank, score in ipairs(getGlobalStorageValue(SkillWindow[windowId])) do
highscore:addChoice(rank, string.abbr(rank .. '. ' .. score[1], '... ' .. score[2], 30))
end
highscore:addButton(1, 'Back')
highscore:addButton(2, 'Close')
highscore:addButton(3, 'Info')
highscore:setDefaultEscapeButton(2)
highscore:setPriority(true)
highscore:sendToPlayer(cid)
end

function onModalWindow(cid, modalWindowId, buttonId, choiceId)

if not SkillWindow[modalWindowId] then
return
end

if buttonId == 3 then
doPlayerPopupFYI(cid, 'Local highscores were last updated ' .. string.diff(os.time()-getGlobalStorageValue('highscores')) .. ' ago.')
elseif buttonId == 1 then
if modalWindowId == 1337 then
sendSkillWindow(cid, 1337+choiceId)
else
highscores:sendToPlayer(cid)
end
return
end

return unregisterCreatureEvent(cid, 'Highscores')
end

/talkactions/talkactions.xml

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

/talkactions/scripts/highscores.lua

function onSay(cid, words, param)
registerCreatureEvent(cid, 'Highscores')
highscores:sendToPlayer(cid)
return false
end

Créditos

  • cbrm
Link para o post
Compartilhar em outros sites

Em nome da comunidade do TK, muito obrigado pela contribuição! :wow:
Seu tópico de conteúdo foi aprovado e será movido para a seção adequada. Você ganhou 1 REP+!

Se quiser sua dúvida tirada, mande PM com os links, e não com a dúvida (outros podem ter a mesma dúvida, e o fórum serve para ser usado).

 

Tópicos:


 

yNlhRVC.png

 

55px-Judo_yellow_belt.svg.png

Link para o post
Compartilhar em outros sites
  • 3 weeks later...

Participe da conversa

Você pode postar agora e se cadastrar mais tarde. Se você tem uma conta, faça o login para postar com sua conta.

Visitante
Responder

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emojis são permitidos.

×   Seu link foi automaticamente incorporado.   Mostrar como link

×   Seu conteúdo anterior foi restaurado.   Limpar o editor

×   Não é possível colar imagens diretamente. Carregar ou inserir imagens do URL.

  • Quem Está Navegando   0 membros estão online

    Nenhum usuário registrado visualizando esta página.


  • Conteúdo Similar

    • Por Sphynx1
      Olá comunidade.
      Eu criei um script a madrugada passada para tentar ajudar um amigo que usa 'OTX' porém dá um erro bizarro no 'lib/compat.lua' e a função 'doAddPlayerOutfit' retorna valor 'NIL'. Eu não sei como resolver, mas está funcionando perfeitamente no 'TFS 0.4'. Espero que alguém em algum lugar do tempoespaço possa se beneficiar desse script já que os que encontrei estão todos muito feios e confusos.

      1. Acesse a pasta 'data/talkactions/scripts' e crie um novo 'arquivo.lua' chamado 'addonpresent.lua', dentro adicione o conteúdo abaixo.
      function onSay(cid, words, param, channel) local maleOutfits = {["citizen"] = {128}, ["mage"] = {130}, ["knight"] = {131}, ["nobleman"] = {132}, ["summoner"] = {133}, ["warrior"] = {134} } local femaleOutfits = {["citizen"] = {136}, ["mage"] = {138}, ["knight"] = {139}, ["nobleman"] = {140}, ["summoner"] = {141}, ["warrior"] = {142} } local mensagens = {"Você recebeu o seu addon e consumiu o item bônus para isto.", "Verifique o que você digitou e tente novamente, parametros inválidos.", "Você não possui o item necessário para receber um addon.", "Certifique-se que você digitou o nome do addon corretamente e tente mais uma vez."} local efeitinga = {[1] = {name = CONST_ME_POFF}, [2] = {name = CONST_ME_CAKE}, [3] = {name = CONST_ME_HEARTS}, [4] = {name = CONST_ME_GIFT_WRAPS} -- efeitos que seram exibidos } local param = string.lower(param) if not isPremium(cid) then doCreatureSay(cid, "Você não possui Premium Account, portanto não poderá utilizar o item de addon.", TALKTYPE_ORANGE_1) -- MSG que será exibida p/ o nao premium return true end if getPlayerItemCount(cid, 6497) > 0 then -- 6497 é o ID do item que será usado por você, se for maior que 0 a quanidade na sua bag então if param ~= "" and maleOutfits[param] and femaleOutfits[param] then doPlayerRemoveItem(cid, 6497, 1) -- o item 6497 será consumido doCreatureSay(cid, mensagens[1], TALKTYPE_ORANGE_1) for k, v in pairs(efeitinga) do doSendMagicEffect(getCreaturePosition(cid), v.name) end if getPlayerSex(cid) == 0 then doPlayerAddOutfit(cid, femaleOutfits[param][1], 3) elseif getPlayerSex(cid) == 1 then doPlayerAddOutfit(cid, maleOutfits[param][1], 3) end else doCreatureSay(cid, mensagens[2], TALKTYPE_ORANGE_1) end else doCreatureSay(cid, mensagens[3], TALKTYPE_ORANGE_1) end return true end  
      2. Regresse até 'data/talkactions' e abra o arquivo 'talkactions.xml', dentro adicione o conteúdo abaixo.
      <talkaction words="!addon" event="script" value="addonpresent.lua"/>  
       
    • Por Movie
      Tentei fazer esse talkactions , mas não deu certo , alguém poderia me ajudar ?
       

       
         
       
    • Por eviltox
      Olá galera, tenho um problema com um script gringo.    
      Então a Função do Script é Ficar Mudando o Addon e sua cor Continuamente.
      O único problema do script até agora é a hora que o player desloga.   
       
      Então esse é o meu pedido, Gostaria de adicionar um OnLogout ou um meio de encerrar o script quando o player desloga(não entendo muito de script, mas acho que é isso que falta, se não for agradeço em adicionarem oque falta. *(Versão do TFS 0.3.1)*     
       
      O Script é esse:
      O Erro é esse:
      Dês de já, Agradeço. Darei Rep+ Para quem ajudar, mesmo que não funcione. Grato   
    • Por rolas69
      Estou com problema no talkaction /attr.
       
      Uso TFS 0.4 que veio sem o talk.
       
      Adicionei com a tag <talkaction log="yes" words="/attr" access="5" script="attr.lua"/> mas sempre dava "unknown comand". Quando mudei pra <talkaction log="yes" words="/attr" access="5" event="function" value="thingProporties"/>, parou de dar erro e aparece o efeito do script, mas nada acontece com o item/teleporte etc...
      O script adicionado é esse:



       
      Na segunda tag, o comando usado sem erro é por ex. /attr set attack 20.
       
      Algm sabe o que pode estar errado?
    • Por jonatasfl
      Ola, galera preciso de um talkaction que faça o seguinte, quando o player alcançar lvl 160 ele ganhara um item para sua vocação, achei um talkaction ele funciona e tudo mas ele só da o item se vc nao tiver promotion, caso vc for Master sorcerer e etc vc n ganha o item, e eu queria que ganhasse, tem como alguem me ajudar? vou postar o script que eu tenho. 
       
         
                  no talkactions.xml    
      Desculpe estar sem os créditos, não lembro quem criou o script.
×
×
  • Criar Novo...

Informação Importante

Confirmação de Termo