Ir para conteúdo

Erro No Script ! Onde?.


MUTAN0

Posts Recomendados

Olá.

Eu estava fuçando LUA_FUNCTIONS e achei uma coisa que me interessou:

if getPlayerSlotItem(cid, 2) == 2173 then

Ai é checado se o player tem tal ITEM (no caso uma AOL) e faz a ação.

Eu empreguei isso num npc de viajem, mas ele sempre nega a ação ao player.

mystic = {x=288, y=266, z=7}

 

 

local focus = 0

local talk_start = 0

local target = 0

local following = false

local attacking = false

 

function onThingMove(creature, thing, oldpos, oldstackpos, cid, item, frompos, item2, topos)

 

end

 

 

function onCreatureAppear(creature)

 

end

 

 

function onCreatureDisappear(cid, pos)

if focus == cid then

selfSay('Good bye then.')

focus = 0

talk_start = 0

end

end

 

 

function onCreatureTurn(creature)

 

end

 

 

function msgcontains(txt, str)

return (string.find(txt, str) and not string.find(txt, '(%w+)' .. str) and not string.find(txt, str .. '(%w+)'))

end

 

 

function onCreatureSay(cid, type, msg)

msg = string.lower(msg)

if (msgcontains(msg, 'hi') and (focus == 0)) and getDistanceToCreature(cid) < 4 then

selfSay('Hiho ' .. getCreatureName(cid) .. '! Can I take you to mystic island. To go where they want?. For travel is necessary a Amulet of Loss.')

focus = cid

talk_start = os.clock()

 

elseif msgcontains(msg, 'hi') and (focus ~= cid) and getDistanceToCreature(cid) < 4 then

selfSay('Sorry, ' .. getCreatureName(cid) .. '! I talk to you in a minute.')

 

elseif focus == cid then

talk_start = os.clock()

 

if msgcontains(msg, 'mystic island') then

if getPlayerSlotItem(cid, 2) == 2173 then

doTeleportThing(cid,mystic)

doSendMagicEffect(mystic,10)

selfSay("Let's GO")

focus = 0

talk_start = 0

else

selfSay("Sorry, you don\'t have necessary item.")

end

 

 

elseif msgcontains(msg, 'bye') and getDistanceToCreature(cid) < 4 then

selfSay('Bye ' .. creatureGetName(cid) .. ', go back.')

focus = 0

talk_start = 0

 

elseif msg ~= "" then

selfSay('how? I do not understand!')

talk_state = 0

end

end

end

 

function onCreatureChangeOutfit(creature)

end

 

function onThink()

doNpcSetCreatureFocus(focus)

if (os.clock() - talk_start) > 30 then

if focus > 0 then

selfSay('Next please!!...')

end

focus = 0

talk_start = 0

end

if focus ~= 0 then

if getDistanceToCreature(focus) > 5 then

selfSay('Good Bye')

focus = 0

talk_start = 0

end

end

end

Exemplo~

Player:hi

NPC:Hiho Player! Can I take you to mystic island. To go where they want?. For travel is necessary a Amulet of Loss.

Player:mystic island

NPC:Sorry, you don't have necessary item.

---

E eu tenho a AOL, usando no slot 2, necklace...

Mas o NPC nega a ação de levar o player á posição da mystic island.

Onde esta o erro do script ?

Esqueci de alguma coisa?

Com certeza sim, mas quero que alguem ache o que eu esqueci, e onde eu esqueci :neutral:

Espero que alguem concerte-o.

Obrigado.

Cya~~

Editado por MUTAN0
Link para o comentário
Compartilhar em outros sites

Acredito que seja aqui:

 

if msgcontains(msg, 'mystic island') then

if getPlayerSlotItem(cid, 2) == 2173 then

doTeleportThing(cid,mystic)

doSendMagicEffect(mystic,10)

selfSay("Let's GO")

focus = 0

talk_start = 0

else

selfSay("Sorry, you don\'t have necessary item.")

end

 

Ali, logo na primeira linha, diz: "Se a mensagem conter 'mystic island', fazer tal coisa".

Mas você começa a outra linha com outro 'if' (se).

Traduzindo, fica assim: "Se a mensagem conter 'mystic island', fazer se o item do slot 2 for 2173, fazer o player se teleportar".

Confuso, não?

Tente substituir o primeiro 'then' lá por outra coisa...

Algo como 'and'... (ou outra coisa, procure pesquisar)

Se não funcionar, fale que vou rever o script.

 

 

Espero ter ajudado. :smile_positivo:

Editado por Schaffa
Link para o comentário
Compartilhar em outros sites

Acredito que seja aqui:

 

 

 

Ali, logo na primeira linha, diz: "Se a mensagem conter 'mystic island', fazer tal coisa".

Mas você começa a outra linha com outro 'if' (se).

Traduzindo, fica assim: "Se a mensagem conter 'mystic island', fazer se o item do slot 2 for 2173, fazer o player se teleportar".

Confuso, não?

Tente substituir o primeiro 'then' lá por outra coisa...

Algo como 'and'... (ou outra coisa, procure pesquisar)

Se não funcionar, fale que vou rever o script.

 

 

Espero ter ajudado. :smile_positivo:

Discordo..

if pode ser usado seguido de outro if sim.

Se ele tiver o item X então

(ele chega se tem outro fator)

e se tiver os dois faz coisa X

senão (ai entra o else) ele faz coisa Y

-

Sobre o npc, nunca vi a função getPlayerSlotItem, intão não sei bem, mas.. Você tem certeza que o slot 2 é do amulet? Pode ser isto o erro, não tenho certeza.

Abraço

Link para o comentário
Compartilhar em outros sites

OLha esse modelo de npc ta muito obsoleto...

 

Eu fiz um aqui que irá funcionar em tfs 0.3.0 alpha 4 +

 

POis pelo que vi o script está correto e o slot também...

 

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


if msgcontains(msg, 'mystic island') then
	if getPlayerSlotItem(cid, 2) == 2173 then
		doTeleportThing(cid,mystic)
		talkState[talkUser] = 1
		doSendMagicEffect(mystic,10)
		selfSay("Let's GO",cid)
	else
selfSay("Sorry, you don\'t have necessary item.',cid)
		end
	end

return true
end

npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback)

npcHandler:addModule(FocusModule:new())

 

 

opa agr vai funcionar

--edited 10/01

Editado por tibiaa4e
Link para o comentário
Compartilhar em outros sites

@tibiaa4e:

Vou testar o NPC, depois do teste eu volto a viso no que deu.

Cya.

 

*Obrigado a todos ai. :smile_positivo:

 

----EDIT----

Não consegui fazer GM no tfs V0.3 (alpha 4) :neutral:

Então ainda nao deu pra testar o NPC.

Mas vamo ver, quando eu conseguir fazer o GM, eu olho, se der certo eu reporto o topico para fechamento.

Cya

Editado por MUTAN0
Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber novos posts.
×
×
  • Criar Novo...