Ir para conteúdo

Yan Oliveira

Moderador
  • Total de itens

    2187
  • Registro em

  • Última visita

  • Dias Ganhos

    58

Tudo que Yan Oliveira postou

  1. Faz um último teste e faço por action para você, substitua o código por esse: local starterpokes = { ["Bulbasaur"] = {x = 143, y = 110, z = 6}, ["Chikorita"] = {x = 144, y = 110, z = 6}, ["Treecko"] = {x = 145, y = 110, z = 6}, ["Turtwig"] = {x = 146, y = 110, z = 6}, ["Snivy"] = {x = 147, y = 110, z = 6}, ["Charmander"] = {x = 148, y = 110, z = 6}, ["Cyndaquil"] = {x = 149, y = 110, z = 6}, ["Torchic"] = {x = 150, y = 110, z = 6}, ["Chimchar"] = {x = 151, y = 110, z = 6}, ["Tepig"] = {x = 152, y = 110, z = 6}, ["Squirtle"] = {x = 153, y = 110, z = 6}, ["Totodile"] = {x = 154, y = 110, z = 6}, ["Mudkip"] = {x = 155, y = 110, z = 6}, ["Piplup"] = {x = 156, y = 110, z = 6}, ["Oshawott"] = {x = 157, y = 110, z = 6}, } local itens = { [2394] = 20, [2152] = 10, [12346] = 5, [12344] = 5, } local btype = "Icone" local storage = 77477 local cities = { ["Saffron"] = 1, ["Cerulean"] = 2, ["Lavender"] = 3, ["Fuchsia"] = 4, ["Celadon"] = 5, ["Viridian"] = 6, ["Pallet"] = 7, ["Pewter"] = 8, ["Vermilion"] = 9, ["Cinabar"] = 10, } ---------------------------------------- CÓDIGO ------------------------------------ function onUse(cid, item, frompos, item2, topos) local pokemon = "" for a, b in pairs (starterpokes) do if isPosEqualPos(topos, b) then pokemon = a end end if pokemon == "" then return true end doPlayerSendTextMessage(cid,22,"Boa escolha. Divirta-se!") addPokeToPlayer(cid, pokemon, 0, nil, btype, true) setPlayerStorageValue(cid, 8955, 1) nome_pokemon = pokemon for i, j in pairs(itens) do doPlayerAddItem(cid, i, j) end doPlayerSetTown(cid, cities["Saffron"]) -- COLOCA O NOME DA CIDADE QUE QUER QUE SEJA CIDADE NATAL doSendMagicEffect(getThingPos(cid), 29) doTeleportThing(cid, getTownTemplePosition(getPlayerTown(cid))) doSendMagicEffect(getThingPos(cid), 40) doSendMagicEffect(getThingPos(cid), 7) setPlayerStorageValue(cid, storage, 1) return TRUE end Testa e me fala.
  2. Substitui todo seu código por esse: local starterpokes = { ["Bulbasaur"] = {x = 143, y = 110, z = 6}, ["Chikorita"] = {x = 144, y = 110, z = 6}, ["Treecko"] = {x = 145, y = 110, z = 6}, ["Turtwig"] = {x = 146, y = 110, z = 6}, ["Snivy"] = {x = 147, y = 110, z = 6}, ["Charmander"] = {x = 148, y = 110, z = 6}, ["Cyndaquil"] = {x = 149, y = 110, z = 6}, ["Torchic"] = {x = 150, y = 110, z = 6}, ["Chimchar"] = {x = 151, y = 110, z = 6}, ["Tepig"] = {x = 152, y = 110, z = 6}, ["Squirtle"] = {x = 153, y = 110, z = 6}, ["Totodile"] = {x = 154, y = 110, z = 6}, ["Mudkip"] = {x = 155, y = 110, z = 6}, ["Piplup"] = {x = 156, y = 110, z = 6}, ["Oshawott"] = {x = 157, y = 110, z = 6}, } local itens = { [2394] = 20, [2152] = 10, [12346] = 5, [12344] = 5, } local btype = "Icone" local storage = 77477 local cities = { ["Saffron"] = 1, ["Cerulean"] = 2, ["Lavender"] = 3, ["Fuchsia"] = 4, ["Celadon"] = 5, ["Viridian"] = 6, ["Pallet"] = 7, ["Pewter"] = 8, ["Vermilion"] = 9, ["Cinabar"] = 10, } ---------------------------------------- CÓDIGO ------------------------------------ function onUse(cid, item, frompos, item2, topos) if getPlayerStorageValue(cid, storage) < 1 then local pokemon = "" for a, b in pairs (starterpokes) do if isPosEqualPos(topos, b) then pokemon = a end end if pokemon == "" then return true end doPlayerSendTextMessage(cid,22,"Boa escolha. Divirta-se!") addPokeToPlayer(cid, pokemon, 0, nil, btype, true) setPlayerStorageValue(cid, 8955, 1) nome_pokemon = pokemon for i, j in pairs(itens) do doPlayerAddItem(cid, i, j) end doPlayerSetTown(cid, cities["Saffron"]) -- COLOCA O NOME DA CIDADE QUE QUER QUE SEJA CIDADE NATAL doSendMagicEffect(getThingPos(cid), 29) doTeleportThing(cid, getTownTemplePosition(getPlayerTown(cid))) doSendMagicEffect(getThingPos(cid), 40) doSendMagicEffect(getThingPos(cid), 7) setPlayerStorageValue(cid, storage, 1) return true else doPlayerSendTextMessage(cid, 27, "Você já escolheu seu pokémon!") return true end return TRUE end Testa e me fala.
  3. Cara, estranho porque eu testei aqui e funcionou com o mesmo script que fiz para você. Como pode ver, o player recebeu os 4 itens que você quer e recebeu o pokémon normalmente. Você deve ter feito alguma coisa errada no script ou no xml. Sobre a action do baú, pode fazer até pode, mas não tem necessidade já que da para fazer no script. Mas se quiser eu faço, mas não acho que seja melhor opção, até porque como mostrei ai na print, ta funcionando normal.
  4. Pronto, já adicionei os itens que quer e criei uma tabela para cidade ao teleportar o player quando clica no baú: local starterpokes = { ["Bulbasaur"] = {x = 143, y = 110, z = 6}, ["Chikorita"] = {x = 144, y = 110, z = 6}, ["Treecko"] = {x = 145, y = 110, z = 6}, ["Turtwig"] = {x = 146, y = 110, z = 6}, ["Snivy"] = {x = 147, y = 110, z = 6}, ["Charmander"] = {x = 148, y = 110, z = 6}, ["Cyndaquil"] = {x = 149, y = 110, z = 6}, ["Torchic"] = {x = 150, y = 110, z = 6}, ["Chimchar"] = {x = 151, y = 110, z = 6}, ["Tepig"] = {x = 152, y = 110, z = 6}, ["Squirtle"] = {x = 153, y = 110, z = 6}, ["Totodile"] = {x = 154, y = 110, z = 6}, ["Mudkip"] = {x = 155, y = 110, z = 6}, ["Piplup"] = {x = 156, y = 110, z = 6}, ["Oshawott"] = {x = 157, y = 110, z = 6}, } local itens = { [2394] = 20, [2152] = 10, [12346] = 5, [12344] = 5, } local btype = "Icone" local storage = 77477 local cities = { ["Saffron"] = 1, ["Cerulean"] = 2, ["Lavender"] = 3, ["Fuchsia"] = 4, ["Celadon"] = 5, ["Viridian"] = 6, ["Pallet"] = 7, ["Pewter"] = 8, ["Vermilion"] = 9, ["Cinabar"] = 10, } ---------------------------------------- CÓDIGO ------------------------------------ function onUse(cid, item, frompos, item2, topos) if getPlayerStorageValue(cid, storage) < 1 then local pokemon = "" for a, b in pairs (starterpokes) do if isPosEqualPos(topos, b) then pokemon = a end end if pokemon == "" then return true end doPlayerSendTextMessage(cid,22,"Boa escolha. Divirta-se!") addPokeToPlayer(cid, pokemon, 0, nil, btype, true) setPlayerStorageValue(cid, 8955, 1) nome_pokemon = pokemon for i, j in pairs(itens) do doPlayerAddItem(cid, i, j) end doPlayerSetTown(cid, cities["Saffron"]) -- COLOCA O NOME DA CIDADE QUE QUER QUE SEJA CIDADE NATAL doSendMagicEffect(getThingPos(cid), 29) doTeleportThing(cid, getTownTemplePosition(getPlayerTown(cid))) doSendMagicEffect(getThingPos(cid), 40) doSendMagicEffect(getThingPos(cid), 7) setPlayerStorageValue(cid, storage, 1) return true else doPlayerSendTextMessage(cid, 27, "Você já escolheu seu pokémon!") return true end return TRUE end Testei tanto em Saffron como em Cerulean e deu certo, caso queira trocar a cidade do player ao pegar o pokemon, só colocar o nome da cidade ali dentro de cities de acordo com as cidades existente na tabela. Caso queira colocar mais cidades além daquelas, vai em data/talkactions/script/tele.lua e olha lá todas as cidades e coloca na ordem igual está lá na tabela, mas se criou outra cidade pelo remere's, só olhar o id da town lá. OBS: Se você está usando o mapa padrão do PokeRoxy, pode ver que tem um baú dourado no começo, ali está dando alguns itens, para tirar, só ir em data/actions/scripts/quests/itensiniciais.lua e remover os itens lá, na verdade se quiser pode até tirar aquele script de actions.xml, só comentar a tag dele. Testei aqui e deu certo, mas qualquer problema me fale.
  5. De nada bro ☺️, só não esquece de colocar o ID da montaria porque coloquei XXX pois não sei qual o id da que quer, se não trocar vai dar erro no script. Qualquer problema só me avisar.
  6. Me passa o id de todos os itens e a quantidade referente a eles que eu adicione para você e nas próximas você faz seguindo como eu fiz. Sobre a cidade, ele ali ta passando a town para onde está salvo o templo que cria conta. Mas, para adicionar todas as towns ou outra, tem que ir no remere's e pegar o id delas, acho que o atalho é CTRL+T, geralmente Saffron é 1.
  7. local starterpokes = { ["Bulbasaur"] = {x = 1357, y = 990, z = 10}, ["Chikorita"] = {x = 1356, y = 990, z = 10}, ["Treecko"] = {x = 1355, y = 990, z = 10}, ["Turtwig"] = {x = 1354, y = 990, z = 10}, ["Snivy"] = {x = 1353, y = 990, z = 10}, ["Charmander"] = {x = 1347, y = 990, z = 10}, ["Cyndaquil"] = {x = 1346, y = 990, z = 10}, ["Torchic"] = {x = 1345, y = 990, z = 10}, ["Chimchar"] = {x = 1344, y = 990, z = 10}, ["Tepig"] = {x = 1343, y = 990, z = 10}, ["Squirtle"] = {x = 1367, y = 990, z = 10}, ["Totodile"] = {x = 1366, y = 990, z = 10}, ["Mudkip"] = {x = 1365, y = 990, z = 10}, ["Piplup"] = {x = 1364, y = 990, z = 10}, ["Oshawott"] = {x = 1363, y = 990, z = 10}, } local btype = "Icone" -- COLOCA OS ITENS NA TABELA, O ÍNDICE É O ID DO ITEM E O VALOR A QUANTIDADE -- local itens = { [id_item1] = quantidade, [id_item2] = quantidade, } local storage = 77477 -- STORAGE PARA NÃO PEGAR MAIS DE 1 POKÉMON ------------ CÓDIGO -------------- function onUse(cid, item, frompos, item2, topos) if getPlayerStorageValue(cid, storage) < 1 then local pokemon = "" for a, b in pairs (starterpokes) do if isPosEqualPos(topos, b) then pokemon = a end end if pokemon == "" then return true end doPlayerSendTextMessage(cid,22,"Boa Escolha") addPokeToPlayer(cid, pokemon, 0, nil, btype, true) setPlayerStorageValue(cid, 8955, 1) doSendMagicEffect(getThingPos(cid), 29) for i, j in pairs(itens) do doPlayerAddItem(cid, i, j) end doTeleportThing(cid, getTownTemplePosition(getPlayerTown(cid))) doSendMagicEffect(getThingPos(cid), 40) doSendMagicEffect(getThingPos(cid), 7) setPlayerStorageValue(cid, storage, 1) return true else doPlayerSendTextMessage(cid, 27, "Você já escolheo o " ..pokemon.. " como seu pokémon!") return true end return TRUE end Testa e me fala! Lembre de trocar os id e quantidade dos itens ali na tabela.
  8. Sim, consigo. Estou fazendo aqui, você quer que vá para Saffron a cidade que já está indo ao criar a conta ou quer outra cidade e ao teleportar torne aquela cidade a natal do player?
  9. Estou usando essa base recentemente e pelo que vi não tem unique system. Mas baixei ontem, estou conhecendo e qualquer coisa te aviso.
  10. Mas esse efeito vai ficar permanente nele ou o efeito só vai surgir quando o npc aparecer?
  11. Sim amigo, você criou o post na seção errada, o certo seria em Pedidos de Script já que quer um script, e essa seção é para pessoas que tem um script existente e precisa de suporte. Mas vamos lá, vai em Data/Actions/Scripts e crie um arquivo recebe_montaria.lua e adicione o código dentro: local id_montaria = XXXX -- AQUI COLOCA O ID DA MONTARIA local repetir = false -- AQUI É UMA CONDIÇÃO PARA SABER SE O PLAYER PODE RECEBER NOVAMENTE A MONTARIA, CASO ELE SÓ POSSA USAR O ITEM 1 VEZ, DEIXE FALSE, SENÃO TRUE local storage = 36587 -- STORAGE PARA SABER SE O PLAYER JÁ USOU O ITEM ANTES local level = 1 -- NÍVEL MÍNIMO PARA USAR O ITEM function onUse(cid, item, frompos, item2, topos) if getPlayerLevel(cid) < level then doPlayerSendTextMessage(cid, 27, "You need to be at least level " ..level.. " or more to use this item.") return true end if (getPlayerStorageValue(cid, storage) < 1) and (not repetir) then doSendMagicEffect(getThingPos(cid), 29) doPlayerAddMount(cid, id_montaria) doPlayerSendTextMessage(cid, 27, "Congratulations! You received a mount " ..getItemNameById(id_montaria).. ".") doRemoveItem(item.uid) setPlayerStorageValue(cid, storage, 1) return true elseif (getPlayerStorageValue(cid, storage) > 0) and (not repetir) then doPlayerSendTextMessage(cid, 27, "You have already used the item before.") return true end if repetir then doSendMagicEffect(getThingPos(cid), 29) doPlayerAddMount(cid, id_montaria) doPlayerSendTextMessage(cid, 27, "Congratulations! You received a mount " ..getItemNameById(id_montaria).. ".") doRemoveItem(item.uid) return true end return true end end agora vai em Data/Actions e abra o Scripts.xml e adicione a seguinte tag dentro: <action itemid="2278" event="script" value="recebe_montaria.lua"/> <!-- COLOCA O ID DO ITEM ALI ONDE PEDE --> Coloque o ID da montaria na variável onda ta "XXXX". Como você não deu muitas informações do item, se pode usar mais de uma vez ou não, eu deixei para usar só 1 vez, mas caso queira usar mais, só mudar a variável repetir para true, senão deixa false. (Seria bom avisar se quer que repita ou não, porque com a condição que deixei deixo o código um pouco poluído, ai sabendo como você quer, eu deixo o código limpo caso não possa repetir.) Também coloquei uma verificação de nível, mas deixei 1 para que todos possa usar, mas caso queira especificar, só mudar na variável level. Testa e me fala, eu fiz de cabeça e não consigo testar porque não tenho nenhuma base de Tibia aqui.
  12. Sem problemas, e que chato pelo seu HD . Sobre o post, pelo que vi foi erro meu, pois não estava setando a tabela, por isso não estava funcionando. Mas eu arrumei e testei aqui funcionou: E observação que testei com as suas storages, setei todas para 1 para testar e funcionou. Mas testa ai esse script e vê se funciona: 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 -- VARIÁVEIS -- local talkUser = NPCHANDLER_CONVBEHAVIOR == CONVERSATION_DEFAULT and 0 or cid msg = string.lower(msg) local level = 100 local storages = {9361, 9363, 9366, 9364, 9365, 9367, 9368, 9369, 9370, 9371, 9372, 9373, 9374, 9375, 9376, 9377, 9378, 9379, 9380, 9381, 9382, 9383, 9384, 9385, 9386, 9387, 9388, 9389, 9390, 9391, 9392, 9393, 9394, 9395, 9396, 9397, 9398, 9399, 9400} ----------------------------------- [ DIALOGO COM NPC] --------------------------------- if msgcontains(msg, 'help') or msgcontains(msg, 'ajuda') then selfSay("Se você for nível "..level.. " ou mais eu posso resetar todas as quests que você já fez. Gostaria de reseta-lás?", cid) talkState[talkUser] = 1 elseif (msgcontains(msg, 'yes') or msgcontains(msg, 'sim')) and talkState[talkUser] == 1 then if getPlayerLevel(cid) >= level then for i = 1, #storages do if getPlayerStorageValue(cid, storages[i]) > 0 then doSendMagicEffect(getPlayerPosition(cid), 28) selfSay("Todas as quests foram resetadas com sucesso! Agora você pode fazê-las novamente.", cid) setPlayerStorageValue(cid, storages[i], 0) return true else selfSay("Todas as quests já foram resetadas.", cid) return true end end talkState[talkUser] = 0 end return true elseif (msgcontains(msg, 'no') or msgcontains(msg, 'não')) and talkState[talkUser] == 1 then selfSay("Ok então.", cid) talkState[talkUser] = 0 return true end end npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback) npcHandler:addModule(FocusModule:new()) Se der erro ou não funcionar, manda print do que aparece na distro.
  13. Você mexeu em algo no script? Colocou as storages certo? Coloque o script com suas storages, ou coloque todas as storages que quer resetar que eu coloco no código para você.
  14. Vai em Data/NPC/Scripts e Poste o Benjamim.lua.
  15. Obrigado por compartilhar esse sistema, mas essa não é a área correta para recursos, o certo seria na área de Recursos em: https://www.xtibia.com/forum/forum/1107-scripting/ e no seu caso npc. Essa área é para dúvidas e problemas com script. E você também não explicou se precisa criar um arquivo xml para esse sistema de npc ou se da para usar o arquivo.lua em xml algum existente.
  16. De nada! Testa ai, qualquer problema você me fala.
  17. Tranquilo, mas recomendo mudar de base para evitar problemas.
  18. Yan Oliveira

    (Pedido) NPC

    De nada amigo! Que bom que funcionou.
  19. Yan Oliveira

    (Pedido) NPC

    Que estranho eu testei agora aqui e está funcionando normal, mas esse ai é erro do xml dele e não do script. Posta aqui o xml desse saffron2.xml
  20. Yan Oliveira

    (Pedido) NPC

    Abra o script do NPC Breno e troque o código por esse: 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 -- VARIÁVEIS -- local talkUser = NPCHANDLER_CONVBEHAVIOR == CONVERSATION_DEFAULT and 0 or cid msg = string.lower(msg) local storage = 150000 local storage_start = 150001 local id_item = 12163 -- ID DO ITEM QUE O NPC PEDE local quantidade_item = 100 -- QUANTIDADE DE ITENS QUE O NPC PEDE local id_item_recebido = 16563 -- ID DO ITEM QUE RECEBE AO COMPLETAR A TASK local quantidade_item_recebido = 1 -- QUANTIDADE DE ITENS QUE RECEBE AO COMPLETAR A TASK local level = 10 -- NÍVEL NECESSÁRIO PARA FAZER A TASK DO NPC ----------------------------------- [ DIALOGO COM NPC] --------------------------------- if msgcontains(msg, 'help') or msgcontains(msg, 'ajuda') or msgcontains(msg, 'task') then if getPlayerLevel(cid) < level then selfSay("Para fazer minha missão é necessário ter nível " ..level.. " ou mais para fazer. Fale novamente comigo quando você atingir o nível necessário.") talkState[talkUser] = 0 return true else if getPlayerStorageValue(cid, storage) == 1 then selfSay("Você já completou minha task.", cid) talkState[talkUser] = 0 return true else selfSay("Preciso que você me traga " ..quantidade_item.. " " ..getItemNameById(id_item).. " Você trouxe?", cid) talkState[talkUser] = 1 return true end return true end elseif (msgcontains(msg, 'yes') or msgcontains(msg, 'sim')) and talkState[talkUser] == 1 then if getPlayerStorageValue(cid, storage_start) < 1 then setPlayerStorageValue(cid, storage_start, 1) return true end if getPlayerItemCount(cid, id_item) >= quantidade_item then doPlayerRemoveItem(cid, id_item, quantidade_item) selfSay("Parabéns! Você trouxe " ..quantidade_item.. " " ..getItemNameById(id_item).. " que eu precisava. Receba sua recompensa.", cid) doPlayerAddItem(cid, id_item_recebido, quantidade_item_recebido) doSendMagicEffect(getPlayerPosition(cid), 29) setPlayerStorageValue(cid, storage, 1) talkState[talkUser] = 0 return true else selfSay("Você ainda não trouxe " ..quantidade_item.. " " ..getItemNameById(id_item).. " que eu preciso.", cid) talkState[talkUser] = 0 return true end return true elseif (msgcontains(msg, 'no') or msgcontains(msg, 'não')) and talkState[talkUser] == 1 then if getPlayerStorageValue(cid, storage_start) < 1 then selfSay("Ok, fale comigo novamente caso queira fazer minha task.") talkState[talkUser] = 0 return true else selfSay("Então vá buscar os itens que eu pedi.") talkState[talkUser] = 0 return true end return true end end npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback) npcHandler:addModule(FocusModule:new()) Deixei o nível mínimo como 10, caso queira trocar, só alterar na variável level.
  21. Yan Oliveira

    (Pedido) NPC

    Esse atributo não é para o player fazer a missão em si do NPC, mas o nível mínimo que os players terão que ter para falar com o NPC. Eu não curto muito e nem ideal verificar nível por ali, até porque se tiver verificação de nível no script da ruim kkk. Acho bem melhor verificar o nível no script do npc, e não pelo XML. Até porque se o player não tiver nível, pelo menos na mensagem da verificação o player vai saber. Se quiser faço uma verificação de nível para você nos 2 npc.
  22. Yan Oliveira

    (Pedido) NPC

    Level do NPC que você fala é o atributo do xml ?
  23. Yan Oliveira

    (Pedido) NPC

    Então vai funcionar tranquilamente ^^, a menos que algum função do script não exista na sua base ou esteja bugada.
  • Quem Está Navegando   0 membros estão online

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