Ir para conteúdo
  • 0

Script de pedir item para um npc


Kheus Andrade

Pergunta

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

Link para o comentário
Compartilhar em outros sites

5 respostass a esta questão

Posts Recomendados

  • 0
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

Link para o comentário
Compartilhar em outros sites

  • 0
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?)

Link para o comentário
Compartilhar em outros sites

  • 0
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

Link para o comentário
Compartilhar em outros sites

  • 0

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.

Link para o comentário
Compartilhar em outros sites

  • Quem Está Navegando   0 membros estão online

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