Ir para conteúdo
  • Cadastre-se

(Resolvido)[AJUDA] NPC


Ir para solução Resolvido por Wise,

Posts Recomendados

Boa noite pessoal, estou tendo um problema, eu queria um NPC Travel que antes de viajar desse um check na storage e se tiver tal storage o NPC te leva, sendo que pra ter tal storage teria que dar um item a esse mesmo NPC.

 

Eu achei esse script aqui no forum, que o usuario Maxwellden postou, tentei fazer as modificações mas não consegui :(

 

Eu tentei por um getPlayerStorageValue, getPlayerItemCount, setPlayerStorageValue e doPlayerRemoveItem dentro do elseif, mas o NPC não aparecia no mapa :( 

local STORAGE = 5021 -- Storage necessária para viajar
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, "cinnabar") then
      selfSay("Você deseja ser teletransportado para cinnabar?", cid)
      talkState[talkUser] = 1
   elseif msgcontains(msg, "yes") and talkState[talkUser] == 1 then
      if getPlayerStorageValue(cid, STORAGE) > 0 then
         selfSay("Aí está!", cid)
         doSendMagicEffect(getThingPos(cid), 10)
         npcHandler:releaseFocus(cid)
         doTeleportThing(cid, DESTINO)
         doSendMagicEffect(DESTINO, 10)
      else
         selfSay("Me desculpe, mas você não tem acesso a cinnabar.", cid)
      end
      talkState[talkUser] = 0
   end
 
   return true
end
 
 
npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback)
npcHandler:addModule(FocusModule:new())

Essa é a primeira vez que mexo com NPC, se alguem puder me passar um tutorial de npc em lua, agradeço desde já.

 

@EDIT, TFS 1.2

Editado por RXSora (veja o histórico de edições)
Link para o post
Compartilhar em outros sites
  • Solução
18 horas atrás, RXSora disse:

eu queria um NPC Travel que antes de viajar desse um check na storage e se tiver tal storage o NPC te leva, sendo que pra ter tal storage teria que dar um item a esse mesmo NPC.
@EDIT, TFS 1.2



Aqui..

travel.lua (data\npc\scripts)

local item, pos, key = {5432, 1}, {x = 123, y = 456, z = 7}, 54321 -- {itemid, count}, {xyz position to teleport}, storage key
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)    end
function onThink()                          npcHandler:onThink()                        end

local function creatureSayCallback(cid, type, msg)
	if not npcHandler:isFocused(cid) then return false end

	local p = Player(cid)
	if msgcontains(msg, 'yes') and npcHandler.topic[cid] == 0 and p:getStorageValue(key) < 1 then
		npcHandler:say('Ok, but first you need to bring me '..item[2]..' '..ItemType(item[1]):getName()..(item[2] > 1 and 's' or '')..'. Do you have it?', cid)
		npcHandler.topic[cid] = 1
	elseif npcHandler.topic[cid] == 1 then
		if msgcontains(msg, 'yes') then
			if p:removeItem(item[1], item[2]) then
				p:setStorageValue(key, 1)
				npcHandler:say('Sure. Do you want to go now?', cid)
				npcHandler.topic[cid] = 0
			else
				npcHandler:say('You don\'t have any '..ItemType(item[1]):getName()..'. Get out of here!', cid)
				npcHandler:releaseFocus(cid)
			end
		end
	else
		npcHandler:say('Have a good trip!', cid)
		npcHandler:releaseFocus(cid)
		p:teleportTo(pos)
		pos:sendMagicEffect(CONST_ME_TELEPORT)
	end
	
	return true
end

npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback)
npcHandler:addModule(FocusModule:new())




Travel.xml (data\npc)

<npc name="Travel" script="travel.lua" walkinterval="3000" floorchange="0">
	<health now="100" max="100" />
	<look type="151" head="20" body="39" legs="45" feet="7" addons="0" />
	<parameters>
		<parameter key="message_greet" value="Hail |PLAYERNAME|. Would you like to take a trip?"/>
		<parameter key="message_decline" value="Hm, okay. Get out of here!"/>
		<parameter key="message_walkaway" value="Sure." />
	</parameters>
</npc>

 

Editado por Wise (veja o histórico de edições)

The corrupt fear us.

The honest support us.

The heroic join us.

Link para o post
Compartilhar em outros sites
23 horas atrás, RXSora disse:

se alguem puder me passar um tutorial de npc em lua

Em relação a isso, brother, recomendo que vc adquira conhecimento na linguagem Lua em si, não especificamente p/ NPCs.

Eis um dos melhores sites com conteúdo dessa linguagem:

lua-users.org (meu favorito)

;]

The corrupt fear us.

The honest support us.

The heroic join us.

Link para o post
Compartilhar em outros sites

Participe da conversa

Você pode postar agora e se cadastrar mais tarde. Se você tem uma conta, faça o login para postar com sua conta.

Visitante
Responder

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emojis são permitidos.

×   Seu link foi automaticamente incorporado.   Mostrar como link

×   Seu conteúdo anterior foi restaurado.   Limpar o editor

×   Não é possível colar imagens diretamente. Carregar ou inserir imagens do URL.

  • Quem Está Navegando   0 membros estão online

    Nenhum usuário registrado visualizando esta página.

×
×
  • Criar Novo...

Informação Importante

Confirmação de Termo