Ir para conteúdo

Demonbholder

Infante
  • Total de itens

    1551
  • Registro em

  • Última visita

  • Dias Ganhos

    24

Tudo que Demonbholder postou

  1. que inútil, só gerou mais briga essa joça de tópico
  2. Ah sim, então temos o arquivo global.lua Nele adicione: ranks = { ["fist"] = 74666, ["club"] = 74667, ["sword"] = 74668, ["axe"] = 74669, ["distance"] = 74670, ["shielding"] = 74671, ["fishing"] = 74672, ["magic"] = 74673, ["level"] = 74674, ["monsters"] = 74675, ["guilds"] = 74676 } function havePlayerInRank(rank, playername) -- Checa se o player ja esta no rank. local rankstr = getGlobalStorageValue(ranks[rank]) local players = string.explode(rankstr, "; ") for i,x in pairs(players) do local a, b = string.find(x, "%[") if b ~= nil then if x:sub(1, b-1):lower() == playername:lower() then return TRUE end end end end function getPlayerLevelInRank(rank, playername) -- Pega o level de algum player no rank (Importante para novos tipos de rank.) local rankstr = getGlobalStorageValue(ranks[rank]) local players = string.explode(rankstr, "; ") for i,x in pairs(players) do local a, b = string.find(x, "%[") local t = string.match(x, "%[(.+)]") if b ~= nil and x:sub(1, b-1):lower() == playername:lower() then return t end end return 0 end function addRankPlayer(rank, playername, rankvalue) -- Adiciona um player ao rank ou muda o valor dele no rank. if not havePlayerInRank(rank, playername) then setGlobalStorageValue(ranks[rank], getGlobalStorageValue(ranks[rank]) .. (playername .. "[" .. rankvalue .. "]; ")) else local a,b = string.find(getGlobalStorageValue(ranks[rank]), playername) local c,d = string.find(getGlobalStorageValue(ranks[rank]), playername .. "%[%d+]") setGlobalStorageValue(ranks[rank], getGlobalStorageValue(ranks[rank]):sub(1, b+1) .. rankvalue .. "]; " .. getGlobalStorageValue(ranks[rank]):sub(d+2)) end end function tablelen(tab) -- By MatheusMkalo local result = 0 for i,x in pairs(tab) do result = result+1 end return result end function getRank(rank, maxplayers) -- Pega a lista de players com maior level do rank local rankstr = getGlobalStorageValue(ranks[rank]) local playerstatus = string.explode(rankstr, "; ") local tab = {} local rankTab = {} local rankStr = "Highscore for " .. rank .. "\n\n" .. (isInArray({"monsters", "guilds"}, rank) and "Number of Kills" or "Rank Level") .. " - " .. (rank == "guilds" and "Guild Name" or "Player Name") .. "\n" table.remove(playerstatus, #playerstatus) for i,x in pairs(playerstatus) do local a, b = string.find(x, "%[") local t = string.match(x, "%[(.+)]") tab[x:sub(1, b-1)] = tonumber(t) end local lastname = "" local lastvalue = 0 for i = 1, maxplayers do if tablelen(tab) <= 0 then break end for s,x in pairs(tab) do if x > lastvalue then lastvalue = x lastname = s end end table.insert(rankTab, lastvalue .. " - " .. lastname) tab[lastname] = nil lastname = "" lastvalue = 0 end for i,x in ipairs(rankTab) do rankStr = rankStr .. (i .. ". ") .. x .. "\n" end return rankStr end Salve e feche. Agora vá em data/talkaction/script, crie um arquivo .lua e cole isto nele: function onSay(cid, words, param) if ranks[param:lower()] then setGlobalStorageValue(ranks[param:lower()], getGlobalStorageValue(ranks[param:lower()]) == -1 and "" or getGlobalStorageValue(ranks[param:lower()])) doShowTextDialog(cid, 6500, getRank(param:lower(), 10)) else return doPlayerSendCancel(cid, "Esse rank nao existe ou voce nao digitou corretamente.") end return TRUE end Salve, feche e vá em data/talkactions, abra o arquivo talkactions.xml e cole esta tag nele: <talkaction words="!rank;/rank" script="nomeDoArquivo.lua"/> Salve e feche. Agora vamos em creaturescripts, criaremos 2 arquivos .lua. No primeiro cole isto: function onAdvance(cid, skill, oldLevel, newLevel) if skill == 0 then setGlobalStorageValue(74666, getGlobalStorageValue(74666) == -1 and "" or getGlobalStorageValue(74666)) addRankPlayer("fist", getCreatureName(cid), newLevel) elseif skill == 1 then setGlobalStorageValue(74667, getGlobalStorageValue(74667) == -1 and "" or getGlobalStorageValue(74667)) addRankPlayer("club", getCreatureName(cid), newLevel) elseif skill == 2 then setGlobalStorageValue(74668, getGlobalStorageValue(74668) == -1 and "" or getGlobalStorageValue(74668)) addRankPlayer("sword", getCreatureName(cid), newLevel) elseif skill == 3 then setGlobalStorageValue(74669, getGlobalStorageValue(74669) == -1 and "" or getGlobalStorageValue(74669)) addRankPlayer("axe", getCreatureName(cid), newLevel) elseif skill == 4 then setGlobalStorageValue(74670, getGlobalStorageValue(74670) == -1 and "" or getGlobalStorageValue(74670)) addRankPlayer("distance", getCreatureName(cid), newLevel) elseif skill == 5 then setGlobalStorageValue(74671, getGlobalStorageValue(74671) == -1 and "" or getGlobalStorageValue(74671)) addRankPlayer("shielding", getCreatureName(cid), newLevel) elseif skill == 6 then setGlobalStorageValue(74672, getGlobalStorageValue(74672) == -1 and "" or getGlobalStorageValue(74672)) addRankPlayer("fishing", getCreatureName(cid), newLevel) elseif skill == 7 then setGlobalStorageValue(74673, getGlobalStorageValue(74673) == -1 and "" or getGlobalStorageValue(74673)) addRankPlayer("magic", getCreatureName(cid), newLevel) elseif skill == 8 then setGlobalStorageValue(74674, getGlobalStorageValue(74674) == -1 and "" or getGlobalStorageValue(74674)) addRankPlayer("level", getCreatureName(cid), newLevel) end return TRUE end Esta será a tag referente a esse script que você colocará em creaturescripts.xml: <event type="advance" name="RankAdv" event="script" value="nomeDoArquivo.lua"/> O segundo script é esse: function onKill(cid, target) setGlobalStorageValue(74675, getGlobalStorageValue(74675) == -1 and "" or getGlobalStorageValue(74675)) if isMonster(target) then addRankPlayer("monsters", getCreatureName(cid), getPlayerLevelInRank("monsters", getCreatureName(cid))+1) end if isPlayer(target) then if getPlayerGuildId(cid) > 0 then if lastHit then if getPlayerGuildId(target) <= 0 or getPlayerGuildId(target) ~= getPlayerGuildId(cid) then addRankPlayer("guilds", getPlayerGuildName(cid), getPlayerLevelInRank("guilds", getPlayerGuildName(cid))+1) end end end end return TRUE end Esta será a tag referente a esse script que você colocará em creaturescripts.xml: <event type="kill" name="RankKill" script="nomeDoArquivo.lua"/> Agora, por ultimo, vá em data/creaturescripts/script, abra o arquivo login.lua, ache as funções que registram eventos e cole esta entre elas: registerCreatureEvent(cid, "RankAdv") registerCreatureEvent(cid, "RankKill") Testa ai e me diz se funciona.
  3. Ótimo tutorial! Parabéns e obrigado por compartilhar com o XTibia. *Sempre que postar um download, poste o scan deste também. Scan: Smf: MD5: e620f84c633f59fc03eedcbf926c24a4 Link: http://www.virustota...9b57-1304550876 Arquivo limpo. By: BrunoCarvalho (Post Edit) //Aprovado
  4. Bom, pelo jeito seu ot é antigo, ou algo do gênero, vamos adicionar "manualmente" então. Seu otserver tem as pastas lib e creaturescripts?
  5. Esta na mesma pasta onde fica a pasta data, o distro e as dlls do seu ot.
  6. @DrakyLucas Não falte o respeito com os demais membros, é completamente compreensível que ele não tenha encontrado o seu script, portanto não há motivos para xingamento. Peço que edite seu post, e ainda sim receberá meu rep- por algo desnecessário. Creio que não é necessário tomar outra providencias, caso você não edite seu post ficará complicado. Espero que você edite seu post antes que o próprio membro te reporte, por enquanto só estou dando um aviso não-oficial.
  7. Demonbholder

    Adicionar Item

    Bom, o pedido foi resolvido por mensagem privada, a seguinte função foi feita por mim: function doPlayerGiveItemContainer(cid, containerid, itemid, amount) amc = amount if isItemStackable(itemid) == FALSE then local amm = amount <= 20 and 1 or math.ceil(amount/20) for i = 1, amm do local container = doPlayerAddItem(cid, containerid) for x = 1, amc do doAddContainerItem(container, itemid, 1) amc = x == amc and amc - 20 or amc end end else local amm = amount <= 20*100 and 1 or math.ceil(amount/(20*100)) for i = 1, amm do local container = doPlayerAddItem(cid, containerid, 1) local am = amc > 20*100 and 20*100 or amc doAddContainerItem(container, itemid, am) amc = amc - am end end end Como usar: doPlayerGiveItemContainer(cid, containerid, itemid, amount) Azul: Id da backpack Vermelho: Id do item a ser adicionado na backpack Verde: Quantidade do item a ser adicionado na backpack Vou pedir para que movam o tópico.
  8. Tem que ter um end pra cada for. Os loopings for e while precisam de um end para cada um usado. Fica tranquilo, só cuida na próxima vez pra postar na seção certa.
  9. Atualize o tópico: Scan: MD5: 98f63e22b635a4932aa20286e4d516b4 Link: http://www.virustotal.com/file-scan/report.html?id=d1f76e79930c0c0d8c4774e1b17b464f9d033ff223a4c34aa5b96b3406e1ef03-1304469444 Arquivo limpo. Sempre que postar um download, poste o scan dele também.
  10. Eu acho que poderia poupar seu trabalho usar o for para as posições, exemplo: for posx = 90, 130 do for posy = 40, 70 do for posz = 7, 8 do local pos = {x=posx, y=posy, z=posz} ... end end end Ai você manipula o for como desejar, acho que assim fica mais fácil do que colocar posição por posição. Cuidado ao postar, a seção correta seria Dúvidas de Scripts.
  11. Bom tutorial, a mim não será útil, mas tenho certeza que ajudará outros. Parabéns, e obrigado por compartilhar com o XTibia. Rep+ e requisitarei a aprovação deste.
  12. Demonbholder

    Adicionar Item

    usa assim: doAddContainerItem(getPlayerSlotItem(cid, 5).uid, ID, QUANT) -- mão direita doAddContainerItem(getPlayerSlotItem(cid, 6).uid, ID, QUANT) -- mão esquerda até
  13. Me parece que tu ta usando errado o comando, eu olhei a parte de talk do mod lá e esse erro aparece somente se você esquece o parâmetro. Você deve usar assim: /war-invite nomeDaGuild Exemplo, se o nome da guild for xtibia, você usa assim: /war-invite xtibia Testa ai.
  14. Interessante, qual semi-dedicado você me aconselha e como eu entro em contato para colocar um otserver lá?
  15. Ok, reportado para mover. Não esqueça do título na próxima vez.
  16. No título do seu tópico coloque uma breve introdução ao seu pedido. local keywordHandler = KeywordHandler:new() local npcHandler = NpcHandler:new(keywordHandler) NpcSystem.parseParameters(npcHandler) local talkState = {} function onCreatureAppear(cid) npcHandler:onCreatureAppear(cid) end function onCreatureDisappear(cid) npcHandler:onCreatureDisappear(cid) end function onCreatureSay(cid, type, msg) npcHandler:onCreatureSay(cid, type, msg) end function onThink() npcHandler:onThink() end function creatureSayCallback(cid, type, msg) if(not npcHandler:isFocused(cid)) then return false end local talkUser = NPCHANDLER_CONVbehavior == CONVERSATION_DEFAULT and 0 or cid -- Conversa Jogador/NPC if(msgcontains(msg, 'negociar')) then selfSay('Eu posso lhe oferecer a passagem para a proxima fase dessa quest, mais para isto eu quero os 5 itens que esses monstros guardam, caso tenha coletado os itens diga, {expecto patrono}.', cid) elseif(msgcontains(msg, 'expecto patrono')) then selfSay('Você coletou os 5 itens necessarios para a proxima fase?', cid) talkState[talkUser] = 13 -- Confirmação da Compra elseif(msgcontains(msg, 'yes') and talkState[talkUser] == 13) then if doPlayerRemoveItem(cid,5468,4) == TRUE then doPlayerAddItem(cid, 7632,1) setPlayerStorageValue(cid,5644, 1) doSendMagicEffect(getCreaturePosition(cid), 29) selfSay('Obrigado, foi um prazer barganhar com você.', cid) talkState[talkUser] = 0 else selfSay('Você está tentando me enganar? Isso pode lhe custar caro!', cid) talkState[talkUser] = 0 end end return TRUE end npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback) npcHandler:addModule(FocusModule:new())
  17. É, aqui olha: ... elseif (prm > maxdays) then return doPlayerSendCancel(cid, "Você não pode comprar mais que "..maxdays.." dias de premium de uma só vez.") else ... if getPlayerPremiumDays(cid)+prm > maxdays then return doPlayerSendCancel(cid, "Você só pode ter maxdays dias de premium, no entanto você só poderá comprar no máximo "..maxdays-getPlayerPremiumDays(cid).." dias.") Poderiam ser substituídas por if getPlayerPremiumDays(cid)+prm > maxdays then return doPlayerSendCancel(cid, "Você só pode ter maxdays dias de premium, no entanto você só poderá comprar no máximo "..maxdays-getPlayerPremiumDays(cid).." dias.") Mas deixa assim, não faz diferença.
  18. Bom script, embora tenha uma comparação inútil no inicio rsrs. Continue fazendo alguns scripts.
  19. Eu falei que se pode fazer, mas eu não faço a mínima idéia de como poderia ser feita a fórmula da experiência. Vamos ver se alguém lhe ajuda.
  20. Double topic de http://www.xtibia.com/forum/topic/155833-itens-de-npc/ Tópico fechado.
  21. Criou três tópicos com o mesmo pedido, vou fechar este e outro e deixar apenas este aberto: http://www.xtibia.com/forum/topic/155793-a-j-u-d-a/
  22. Teria que fazer uma fórmula para experiência. Você percebeu que criou três tópicos pedindo a mesma coisa? Eu vou fechar os outros dois e deixar este aberto, pois este é o mais recente. Favor mudar o nome do tópico para um breve resumo do seu pedido.
  • Quem Está Navegando   0 membros estão online

    • Nenhum usuário registrado visualizando esta página.
×
×
  • Criar Novo...