Esse item que o player irá pedir item para o NPC é um item específico? Ele vai ter que digitar o nome ou responder perguntas do NPC? Explique como vai funcionar a entrega do item.
info
Grupo: Lorde
Registrado: 05/06/12
Posts: 2.2k
Reputação: +215
Gênero: Masculino

info
Grupo: Campones
Registrado: 13/02/19
Posts: 44
Reputação: +2
Gênero: Masculino
Char no Tibia: Kheusz

Em 05/09/2019 em 18:25, Yan18 disse:Esse item que o player irá pedir item para o NPC é um item específico? Ele vai ter que digitar o nome ou responder perguntas do NPC? Explique como vai funcionar a entrega do item.
o npc oferece a lista com o item e o player escolhe
info
Grupo: Lorde
Registrado: 05/06/12
Posts: 2.2k
Reputação: +215
Gênero: Masculino

13 horas atrás, Kheus Andrade disse:o npc oferece a lista com o item e o player escolhe
Mas esse NPC será um mercador? Tipo o Mark que você pode voltar e pegar item novamente ou só poderá fazer uma vez essa quest?
O player só poderá escolher 1 item?
Terá algum custo para o player escolher o item? (No caso levar algum item para ele ou comprar?)
info
Grupo: Campones
Registrado: 13/02/19
Posts: 44
Reputação: +2
Gênero: Masculino
Char no Tibia: Kheusz

23 horas atrás, Yan18 disse:Mas esse NPC será um mercador? Tipo o Mark que você pode voltar e pegar item novamente ou só poderá fazer uma vez essa quest?
O player só poderá escolher 1 item?
Terá algum custo para o player escolher o item? (No caso levar algum item para ele ou comprar?)
pode pegar quantas vezes quiser os itens que o npc oferece, mas sempre que pegar ele vai pra uma posicão específica
info
Grupo: Lorde
Registrado: 05/06/12
Posts: 2.2k
Reputação: +215
Gênero: Masculino

Desculpe pela demora amigo. Bom, eu não sei se seu servidor é Tibia ou Poketibia, mas eu fiz para Poketibia TFS 0.3.6.
E eu não sei trabalhar ainda com janelas do OTClient, então não conseguir fazer com janela (igual o Mark) mas fiz um npc que fala o nome dos itens (por enquanto manualmente, se for assim que quer eu adapto para falar o nome dos itens de uma tabela) e da o item que o player escolher pelo nome, e depois é teleportado e exibe a mensagem. Vê se é assim que você quer, se for, avisa que irei melhorar o código e deixar melhor.
Crie um arquivo em data/npc/distribuidor.lua e adicione o código dentro:
<?xml version="1.0" encoding="UTF-8"?> <npc name="John" script="ganha_item.lua" walkinterval="3000" floorchange="0" speed="150" lookdir="2"> <health now="150" max="150"/> <look type="510" head="115" body="148" legs="39" feet="41"/> <parameters> <parameter key="message_greet" value="Welcome |PLAYERNAME|, say {item} or {trade} to choose item and receive it if you are level 50 or more."/> </parameters> </npc>
E depois crie um arquivo em data/npc/scripts/ganha_item.lua e adicione o código dentro:
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 msg = string.lower(msg) local level = 50 if msgcontains(msg, 'item') or msgcontains(msg, 'trade') then if getPlayerLevel(cid) < level then -- NÃO EXECUTA SE FOR MENOR QUE LEVEL 50, SÓ TROCAR O LEVEL CASO QUEIRA UM DIFERENTE selfSay("you need to be level "..level.." to receive this item.", cid) talkState[talkUser] = 0 return true end selfSay("What item do you want? You can choose Great Ball e Ultra Ball.", cid) talkState[talkUser] = 2 return true elseif (msgcontains(msg, 'Great Ball')) and talkState[talkUser] == 2 then doTeleportThing(cid, {x= 2560, y= 2520, z= 7}) -- COORDENADA A SER TELEPORTADO doSendMagicEffect(getThingPos(cid), 27) -- EFEITO AO GANHAR O ITEM doPlayerAddItem(cid, 2391, 100) --ID DO ITEM | QUANTIDADE doSendAnimatedText(getThingPos(cid), "Voce ganhou 100 Great Balls!", 10) talkState[talkUser] = 0 elseif (msgcontains(msg, 'Ultra Ball')) and talkState[talkUser] == 2 then doTeleportThing(cid, {x= 2558, y= 2534, z= 7}) -- COORDENADA A SER TELEPORTADO doSendMagicEffect(getThingPos(cid), 27) -- EFEITO AO GANHAR O ITEM doPlayerAddItem(cid, 2392, 100) --ID DO ITEM | QUANTIDADE doSendAnimatedText(getThingPos(cid), "Voce ganhou 100 Ultra Balls!", 10) talkState[talkUser] = 0 return true end end npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback) npcHandler:addModule(FocusModule:new())
Se não quiser que tenha validação de nível, remova o "local level = 50" e essa parte do código:
if getPlayerLevel(cid) < level then selfSay("you need to be level "..level.." to receive this item.", cid) talkState[talkUser] = 0 return true end
A mensagem está saindo com o efeito 10 como pediu, testa e me diga se é isso que quer.


info
Grupo: Campones
Registrado: 13/02/19
Posts: 44
Reputação: +2
Gênero: Masculino
Char no Tibia: Kheusz
estou precisando de um script de pedir um item para um npc e ele entrega, após entregar o player recebe uma mensagem nesse tipo doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, "Você recebeu nome do item do npc", manda o player para uma posição específica e sai um efeito de número 10, quem puder ajudar com isso seria muito bom! tinha esse script mas perdi há um bom tempo