Ir para conteúdo

Naze

Membro
  • Registro em

  • Última visita

Tudo que Naze postou

  1. @dragonfight Obrigado.
  2. Ainda não criei os NPCs em questão, mas pode utilizar a partir desse
  3. Uso TFS 0.4, e em meu servidor tenho sistema de reputação por storage, e tem um rank de acordo com o valor da storage, por exempo se o valor da storage XXXX = 1000 ele é Heroi, se o valor for = -1000 ele é um Criminoso. Estou querendo fazer npc que teria quest para cada rank de reputação, para isso eu poderia fazer um npc que após ele falar missão, verifica a storage e se for valor adequado continua a quest, do contrario encerra ali. Mas meu servidor estou focando em ter um local (continente) totalmente focado no RPG e Historia, por isso gostaria que o NPC fizesse uma verificação de storage a partir da hora que o Player fala "Hi", assim se for a requerida ele executa uma fala do contrario executa outra. Se precisar mexer nas sources tenho elas e um pouco de conhecimento se me indicarem o local. Agradeço dês de ja.
  4. Era isso mesmo, obrigado.
  5. @Vodkart Testei, mas tipo ta vindo exatamente 100 - 2160, e 20 - 2159, as vezes vem 1 - 8300, gostaria q somente viesse 1 item, mais especificamente 8300, e diferente quantidades deles. Mas ele não é agrupável, por isso da bag. #edit Ajustei ele e ta vindo as quantidade certa, agora so preciso tirar para vim apenas uma das opções de recompensa
  6. Uso TFS 0.4, Tenho o seguinte script, quando abro a caixa da um item aleatorio de acordo com sua porcentagem, funcionando Ok. Fiz algumas modificações que gostaria q ele desse somente certo item, mas em outras quantidades, acontece q esse item não stack, tipo o gold, q em um espaço pode ter 100x, ele somente 1 por espaço. Então tentei coloca para adicionar uma backpack junto, ele está adicionando a backpack, mas acontece q sempre vem somente 1 do item, tentei fazer apenas com uma linha para teste --- doPlayeraAddItem(cid, 8300, 20) --- mas continua somente vindo 1, acredito q seja pq ele nao stack em lotes. Teria como ajeita esse script para funcionar como quero? Ou algum outro, estou pensando em forma de fazer talvez até consigo mas com meu conhecimento acredito q gestarei muitas linhas pra algo q me parece simples. local items = { --[numeração] = {id = ID DO ITEM, count = QUANTIDADE DO ITEM, c = CHANCE} [1]={id=8300, count=1, c=35}, [2]={id=8300, count=5, c=30}, [3]={id=8300, count=10, c=20}, [4]={id=8300, count=15, c=10}, [5]={id=8300, count=20, c=5}, } function getRandomItem(t) local i = math.random(1, #t) i = t[i] if math.random(1, 100) <= i.c then return i end return getRandomItem(t) end function onUse(cid, item, fromPosition, itemEx, toPosition) local i = getRandomItem(items) local bp = doPlayerAddItem(cid, 1988, 1) local rw = doPlayerAddItem(cid, i.id, i.count) doAddContainerItem(bp, rw, 1) doSendAnimatedText(getPlayerPosition(cid), "Box!", TEXTCOLOR_GREEN) doPlayerSendTextMessage(cid, 27, "Você abriu uma Box e Ganhou "..i.count.."x "..getItemNameById(i.id)..(i.count > 1 and "s" or "")..".") doRemoveItem(item.uid, 1) return true end Nessa imagem a recompensa foi 5, mas veio somente 1 e a bp
  7. Naze postou uma resposta no tópico em Suporte Tibia OTServer
    Cara me parece que ele não encontra a coluna 'guild_id', consegue chega na sua database, se na parte players tem ela? Talvez seja isso.
  8. Naze postou uma resposta no tópico em Sistemas, Mods & Funções .lua
    @weverton1559 Ola, desculpe por reviver o topico, mas vim relatar o possivel erro que pode dar, que no caso também é o erro postado pelo @weverton1559 Não sei a solução mas sei como evitar, vou explicar basicamente como achei e como resolvi. Pelo que entendi ele surge quando você mata um monstro que seu nome não está no monsters.xml. Mas como tem um monstro sem o nome ta no xml? Por exemplo, em meu servidor criei alguns novos monstros com mesmo nome, por exemplo o Demon, mas no xml eu adicionei como ancient demon, o nome do arquivo xml do monstro tbm está ancient demon, apenas no arquivo do ancient demon, na parte <monster name="Demon".... está somente demon, assim quando ele da spawn, apesar de ser um ancient demon, o nome fica como Demon. Até ai nenhum problema. Então adicionei um novo monstro Ancient Mystic Medusa, da mesma forma do demon, mas na parte do name="" coloquei apenas Mystic Medusa. Então oq aconteceu pra da o erro. Quando matei essa ancient mystic medusa, q o nome aparece apenas Mystic Medusa, ele começou dar esse erro sem parar da função onKill, relatando q o monstro não existe. Depois de varios teste, foi somente essa conclusão que cheguei. Para solucionar, adicionei um novo monstro no meu ot, que é a mystic medusa, que tem o mesmo nome do que da problema, mas a diferencia é q ele ta com esse nome no monsters.xml. Simplificando, eu adicionei o nome correto do monstro no monsters.xml assim não teve mais o erro. imagem para facilitar compreenção o com a seta preta, foi o que tive q adicionar apenas para evitar o erro, sem nenhum outro uso para o monstro Aqui é o arquivo xml do monstro, o nome está diferente do que relata no monsters.xml
  9. @Celulose @Vodkart Os dois método funciono, obrigado.
  10. Boa Noite (criei esse topico sobre o mesmo script de um a 2 dias, pois aquele ja tinha definido melhor respota e dado como resolvido, então nao sei se era certo reviver ele ou fazer outro, achei que seria fazer um novo.) Tenho esse script que funciona assim, quando o monstro morre, adiciona um item no local que some em determinado tempo, e da um efeito. Funciona normal, adiciona event no monster.xml que quero e está tag no login.lua tudo ok. Mas tem um problema que ele é uma função onDeath, então toda vez q o player morre ele acaba executando o script tbm. Acredito que precisaria colocar uma função nele para verificar se quem morreu foi player ou monster para só ocorrer nele. local time = 15 function removeTp(pos, id) local item = getTileItemById(pos, id) if item.uid > 0 then return doRemoveItem(item.uid, 1) end end function onDeath(cid, corpse, killers) local pos = getThingPos(cid) local id = 7632 local effect = 53 doSendMagicEffect(pos, effect) doCreateItem(id, 1, pos) addEvent(removeTp, time*1000, pos, id) return true end Tenho este também que faz algo parecido e é onDeath, o problema é o mesmo, então se solucionar o de cima acredito q resolvo esse.
  11. Testa esse, eu não posso testar agora. function onSay(cid, words, param) local health, maxhealth = getCreatureHealth(cid), getCreatureMaxHealth(cid) local mana, maxmana = getCreatureMana(cid), getCreatureMaxMana(cid) local text = "HP: ".. health .."/".. maxhealth .."\n MP: ".. mana .."/".. maxmana .."" doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, text) return true end Se quiser mais completo eu apenas modifiquei esse abaixo, crédito para Vodkart @edit Testei e está funcionando só precisa adicionar a tag em talkactions.xml <talkaction words="!status" event="script" value="status.lua"/> e se aparecer algum erro com essa msg na distro: unexpected symbol near '?' Pegue a linha do erro, e reescreva ela da mesma forma que ira resolver.
  12. @Reds Sim, sim, ficou do jeito que queria, consegui entender o erro pelo sua correção, sou leigo nessas parte mas tou estudando a partir desses problemas. Muito Obrigado
  13. @victor0707 Funciono perfeitamente, obrigado. @Reds Também funciono tudo certo, obrigado.
  14. @telefonesemfio Acredito que o jeito que sugeriu daria certo, e até posso usar dois itens nessa situação, mas então só precisaria saber para hora que ele puxar apenas para bag ocorrer a mudança já que esse item não vai ser equipado. Não tou no computador agora depois irei tenta do jeito que sugeriu pois me interesso tbm, mas quem poder me indicar o erro ainda do problema dessa script fico grato. @edit Também pensei de uma forma que seja mais simples de fazer, que seria ao dropa esse item que vai ter tal duração, se eu der use nele ele adicionaria o outro item em minha bag, seria mais simples e eu só precisaria mudar a história por traz do item. Obrigado ajudo muito sua sugestão.
  15. Ola, tenho a seguinte script, e a primeira função que tinha nela, era fazer o efeito quando o monstro morre, até ai funciono perfeitamente, depois coloquei para adicionar o Item no local da morte também, agora estava tentando fazer com que depois de um determinado tempo esse item suma. Mas não queria colocar uma duração nesse item pois se o player catar ele não poderia sumir. local time = 15 function removeTp() local item = getTileItemById(getThingPos(cid), 7632) if item.uid > 0 then return doRemoveItem(item.uid, 1) end end function onDeath(cid, corpse, killers) local monsters = { [""] = 15, [""] = 15, [""] = 13, } local effect = monsters[getCreatureName(cid)] or 53 doSendMagicEffect(getThingPos(cid), effect) doCreateItem(7632,1,getThingPos(cid)) addEvent(removeTp, time*1000) return true end da o seguinte erro na distro Eu ja tentei de outras forma usando como base outros scripts mas o erro e o mesmo ou algo o gênero. Os exemplo ta no spoiler:
  16. @Vodkart Realmente esperava algum erro mesmo pois tava em duvida sobre isso, e também sobre vip.getDays(id)) Mas consegui entender agora essas duas parte pela sua correção, obrigado. name = name or "" id = tonumber(id or 1) or 1 obs: Vou corrigir o meu post também ok? para evitar futuros problema caso usem.
  17. @jakons Editei a partir do !buypremium, não sei se vai adicionar dias pois não sabia direito qual sistema VIP é esse. Mas peguei o mesmo do script que você citou. local config = { days = 2, -- dias add de vip cost = 2000000 -- custo em dinheiro } function onSay(cid, words, param, channel) if(doPlayerRemoveMoney(cid, config.cost) ~= TRUE) then doPlayerSendCancel(cid, "Você precisa de 2kk para comprar " .. config.days .. "dias de VIP.") doSendMagicEffect(getPlayerPosition(cid), CONST_ME_POFF) return TRUE end vip.addVipByAccount(getPlayerAccount(cid) ,vip.getDays(tonumber(days))) -- @edit corrigido doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "Foram adicionados " .. config.days .. " dias VIP.") return TRUE end Se retorna erro pode postar.
  18. O jeito de venda que você quer fazer serio por fala tipo !buyvip, ou por NPC?
  19. Obrigado funcionou esse que me passou, mas acabei mudando um pouco antes de ver sua resposta e também consegui um que deu certo, mas muito obrigado. Esse é o que vou usar, e também está funcionando: local DESTINO = {x = 2241, y = 2374, z = 7} -- POSIÇÃO DE DESTINO local keywordHandler = KeywordHandler:new() local npcHandler = NpcHandler:new(keywordHandler) NpcSystem.parseParameters(npcHandler) function onCreatureAppear(cid) npcHandler:onCreatureAppear(cid) end function onCreatureDisappear(cid) npcHandler:onCreatureDisappear(cid) end function onCreatureSay(cid, type, msg) npcHandler:onCreatureSay(cid, type, msg:lower()) end function onThink() npcHandler:onThink() end local talkState = {} function creatureSayCallback(cid, type, msg) if (not npcHandler:isFocused(cid)) then return false end local talkUser = NPCHANDLER_CONVbehavior == CONVERSATION_DEFAULT and 0 or cid if msgcontains(msg, "ancient paradise") then if getPlayerStorageValue(cid, 100101) >= 1 then selfSay("Você ja obteve a aprovação, porque está ocupando meu tempo?", cid) npcHandler:onCreatureDisappear(cid) else doNPCTalkALot(cid, getNpcCid(), 1000, {"Jovem Heroi, Ancient Paradise acreditamos que seja um continente imensuravel, e sua localização foi descoberta por navegadores, e essa ilha a nomeamos como Small Paradise, a primeira ilha antes de chegar em Ancient Paradise Island.", "Eu estou encarregado de aprovar novos aventureiro nessa ilha, se passar pelo meu {teste} podera ir sem mais restrições para Ancient Paradise e também desfrutar dos misterios dessa Small Paradise."}) talkState[talkUser] = 1 end elseif msgcontains(msg, "teste") and talkState[talkUser] == 1 then talkState[talkUser] = 2 doNPCTalkALot(cid, getNpcCid(), 1000, {"Veja bem, meu teste é muito simples, essa Smalll Paradise está repleta de monstros um tanto curioso, então por isso resolvemos usar ela para fazer esse teste.", "Você vai precisar escontrar um báu deixado por mim em uma determinada parte da ilha, após encontra recebera um presente por sua conquista, e também te darei acesso imediato a Ancient Paradise, deseja {tentar} obeter aprovação agora?"}) elseif msgcontains(msg, "tentar") and talkState[talkUser] == 2 then talkState[talkUser] = 3 selfSay("Você realmente deseja tentar obter aprovação, achar o caminho de volta pode ser muito dificil se não conseguir?", cid) elseif msgcontains(msg, "yes") and talkState[talkUser] == 3 then if getPlayerLevel(cid) >= 400 then doNPCTalkALot(cid, getNpcCid(), 2000, {"Para obter sua aprovação você vai precisar busca nesta ilha o baú que contém um presente especial pra você. Se obter isso te teleportarei novamente para vc obter acesso a Ancient Paradise, e também poderá explorar o restante dessa Small Paradise dizem que contém tesouros.", "Jovem herói, não que eu teja olhando para baixo em você, mas você não me parece que possa passar a aprovação com apenas isso... Por isso vou te dar um aviso e também conta como ajuda já que vai saber o que enfrentar, cuidado cons dragões.","Tome esse {machete} também vai precisar."}) local bp = doPlayerAddItem(cid, 1987, 1) doAddContainerItem(bp, 2420, 1) doSendMagicEffect(getThingPos(cid), 10) npcHandler:releaseFocus(cid) doTeleportThing(cid, DESTINO) doSendMagicEffect(DESTINO, 10) else selfSay("Me desculpe, mas você não tem level necessario para obter aprovação. Volte quando atingir level 400.", cid) end end return true end npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback) npcHandler:addModule(FocusModule:new())
  20. Ola, consegui um script de npc que da travel por storage aqui no tibiaking, e fiz uma pequena modificação para da travel dependendo o level. Mas como esse teleporte vai fazer parte de uma quest gostaria que ao finalizar a quest e obter a ultima storage o npc não fizesse mais o teleporte. Por isso também modifiquei para tentar, mas acontece q apesar de não dar nenhum erro, o npc não da mais o teleporte depois da primeira fala. Essa é a script do npc funcionando perfeitamente, verificando o level e fazendo o teleporte local DESTINO = {x = 160, y = 54, z = 7} -- POSIÇÃO DE DESTINO local keywordHandler = KeywordHandler:new() local npcHandler = NpcHandler:new(keywordHandler) NpcSystem.parseParameters(npcHandler) function onCreatureAppear(cid) npcHandler:onCreatureAppear(cid) end function onCreatureDisappear(cid) npcHandler:onCreatureDisappear(cid) end function onCreatureSay(cid, type, msg) npcHandler:onCreatureSay(cid, type, msg:lower()) end function onThink() npcHandler:onThink() end local talkState = {} function creatureSayCallback(cid, type, msg) if(not npcHandler:isFocused(cid)) then return false end local talkUser = NPCHANDLER_CONVBEHAVIOR == CONVERSATION_DEFAULT and 0 or cid if msgcontains(msg, "tentar") then selfSay("Você realmente deseja tentar obter aprovação, achar o caminho de volta pode ser muito dificil se não conseguir?", cid) talkState[talkUser] = 1 elseif msgcontains(msg, "yes") and talkState[talkUser] == 1 then if getPlayerLevel(cid) >= 400 then selfSay("Boa sorte!", cid) doSendMagicEffect(getThingPos(cid), 10) npcHandler:releaseFocus(cid) doTeleportThing(cid, DESTINO) doSendMagicEffect(DESTINO, 10) else selfSay("Me desculpe, mas você não tem level necessario para obter aprovação. Volte quando atingir level 400.", cid) end talkState[talkUser] = 0 end return true end npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback) npcHandler:addModule(FocusModule:new()) Essa é que tentei modificar novamente agr colocando para se ele não tiver a storage ele continua o teleporte, caso ele ja tenha a storage fala que já obteve finaliza. Mas acontece q ele está verificando se tem a storage corretamente, e fala a segunda fala perguntando se quer "tentar", e apos fala o yes ele não faz o teleporte. local DESTINO = {x = 160, y = 54, z = 7} -- POSIÇÃO DE DESTINO local keywordHandler = KeywordHandler:new() local npcHandler = NpcHandler:new(keywordHandler) NpcSystem.parseParameters(npcHandler) function onCreatureAppear(cid) npcHandler:onCreatureAppear(cid) end function onCreatureDisappear(cid) npcHandler:onCreatureDisappear(cid) end function onCreatureSay(cid, type, msg) npcHandler:onCreatureSay(cid, type, msg:lower()) end function onThink() npcHandler:onThink() end local talkState = {} function creatureSayCallback(cid, type, msg) if(not npcHandler:isFocused(cid)) then return false end local talkUser = NPCHANDLER_CONVBEHAVIOR == CONVERSATION_DEFAULT and 0 or cid if msgcontains(msg, "tentar") then if getPlayerStorageValue(cid, 13540) >= 0 then selfSay("Você realmente deseja tentar obter aprovação, achar o caminho de volta pode ser muito dificil se não conseguir?", cid) talkState[talkUser] = 1 elseif msgcontains(msg, "yes") and talkState[talkUser] == 1 then if getPlayerLevel(cid) >= 400 then selfSay("Boa sorte!", cid) doSendMagicEffect(getThingPos(cid), 10) npcHandler:releaseFocus(cid) doTeleportThing(cid, DESTINO) doSendMagicEffect(DESTINO, 10) else selfSay("Me desculpe, mas você não tem level necessario para obter aprovação. Volte quando atingir level 400.", cid) end else selfSay("Você ja obteve aprovação.", cid) end talkState[talkUser] = 0 end return true end npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback) npcHandler:addModule(FocusModule:new()) Poderiam me indicar o erro e como corrigi-lo, pois ele não está funcionando mas não da nenhum aviso na distro. Obrigado desde já.
  21. Naze postou uma resposta no tópico em Mapas de Tibia
    Poderia resposta o link, gostei do mapa.
  22. Ola, peguei o seguinte script pra adicionar em meu ot, mas está dando este erro, achei q seria simples, mas não consegui resolver ainda. Desde de ja agradeço. É um Surprise Bag, que ao clicar nele, da um item aleatório ao player. Só que, como tem itens mais valiosos que outros, a chance de vim um item raro seria menor. E depois de usado, a surprise bag desapareceria. [17:10:46.007] [Error - LuaInterface::loadFile] data/actions/scripts/box/box1.lua:22: 'end' expected (to close 'function' at line ? near '´' [17:10:46.014] [Warning - Event::loadScript] Cannot load script (data/actions/scripts/box/box1.lua) [17:10:46.019] data/actions/scripts/box/box1.lua:22: 'end' expected (to close 'function' at line ? near '´' local items = { --id do item, quantidade, chance de ganhar [6527] = {quant = 1, chance = 0.1}, [8301] = {quant = 1, chance = 0.5}, -- deixa a chance nessa ordem, se quiser, altera a ordem dos item [8302] = {quant = 1, chance = 1} } function onUse(cid, item, frompos, item2, topos) if item.itemid == 4869 then local a = math.random(0, 1) for _, i in pairs(items) do if a <= i.chance then doPlayerAddItem(cid, _, i.quant) doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Você ganhou "..i.quant.." item(s) "..getItemNameById(_)..".") doSendMagicEffect(getCreaturePosition(cid), 25) break end end doRemoveItem(item.uid) end return true end Alguém poderia me indicar o erro e como corrigi-lo?
  23. Ok, obrigado. Problema resolvido REP +
  24. No lastestnews do meu servidor (pagina inicial), está dando a seguinte linha de erro Warning: Invalid argument supplied for foreach() in C:\xampp\htdocs\pages\latestnews.php on line 289 abaixo o lastestnews.php Aqui a partir da linha 287
  25. Naze postou uma resposta no tópico em Suporte & Pedidos
    Grande projeto, espero que de tudo certo, quando sair gostarei muito de jogar também sou fã de YGO, se eu puder ajudar de alguma forma não exite em pedir.

Informação Importante

Confirmação de Termo