Ir para conteúdo

Featured Replies

Postado

Olá novamente.

 

Como vocês sabem, eu sou um completo asno em programação e estou tendo problemas mais uma vez com um script que bolei aqui para ser uma espécie de "oráculo" específico de uma vocação (id = 1).

 

Não há erros no console do servidor, o NPC é invocado normalmente, ele reconhece minha saudação "hi" (referente ao trecho do código: 'Cuidado, |PLAYERNAME|, isto não é lugar para crianças. Apenas um {guerreiro} deveria estar aqui.'), mas nenhuma das outras palavras-chave surtem algum efeito, o que me faz pensar que minha função esteja errada, mas minha ignorância não me permite dizer algo mais do que isso. Segue o script.lua: Obs: Utilizo o TFS 0.4.0

 

 

local npcHandler = NpcHandler:new(keywordHandler)
local keywordHandler = KeywordHandler:new()
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
	
npcHandler:setMessage(MESSAGE_GREET, 'Cuidado, |PLAYERNAME|, isto não é lugar para crianças. Apenas um {guerreiro} deveria estar aqui.')

function creatureSayCallback(cid, type, msg)

    local pos = getCreaturePosition(getNpcCid())
	local West = {x=pos.x-1,y=pos.y,z=pos.z}
    
		if not npcHandler:isFocused(cid) then
		return false	
		elseif msgcontains(msg, 'guerreiro') then
		npcHandler:say('Você está interessado em se tornar um guerreiro? Uma vez iniciado, você não poderá voltar atrás.', cid)
				if msgcontains(msg, 'sim') then
					if (getPlayerVocation(cid) == 0) then	
						if getPlayerStorageValue(cid,9500) == -1 then
						npcHandler:say('Você deve antes provar seu valor de combate. Me mostre se é capaz de destruir isto...', cid)
						doSummonCreature('Training Target', West)
						else
						npcHandler:say('Você parece levar jeito e será iniciado na classe de guerreiro. Veja, há um baú no posto logo acima. Tenho certeza que ali ainda deve haver algum equipamento básico de guerreiro para você.')
						setPlayerSetVocation(cid,1)
						setPlayerStorageValue(cid,9500,1)
						if getPlayerStorageValue(cid,8415,1) then
						SetPlayerStorageValue(cid,8412,1)
						SetPlayerStorageValue(cid,8415,0)
						elseif getPlayerStorageValue(cid,8410,1) then
						SetPlayerStorageValue(cid,8411,1)
						SetPlayerStorageValue(cid,8410,0)
						elseif getPlayerStorageValue(cid,8416,1) then
						SetPlayerStorageValue(cid,8403,1)		
						SetPlayerStorageValue(cid,8416,0)
						end
						end
					else
					npcHandler:say('Você já foi iniciado em uma classe.')
					return true
					end	
				else 
				npcHandler:say('Então não tome meu tempo, estamos ocupados.', cid)
				return true
				end
		elseif msgcontains(msg, 'mágica') then
		npcHandler:say('Huh? A habilidade com uma espada ou um machado não se comparam com esses truques baratos.')
		elseif msgcontains(msg, 'comprar', 'vender') then
		npcHandler:say('Não estou vendendo ou comprando coisa alguma. Minha função é preparar novos guerreiros.')
		end
	return true
end
npcHandler:addModule(FocusModule:new())

 

Alguém pode me ajudar?

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

Resolvido por Wakon

Ir para solução
Postado
  • Solução
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

npcHandler:setMessage(MESSAGE_GREET, 'Cuidado, |PLAYERNAME|, isto não é lugar para crianças. Apenas um {guerreiro} deveria estar aqui.')

function creatureSayCallback(cid, type, msg)
    if(not npcHandler:isFocused(cid)) then
        return false 
    end
    local talkUser = NPCHANDLER_CONVBEHAVIOR == CONVERSATION_DEFAULT and 0 or cid
    local msg = msg:lower()
    local pos = getCreaturePosition(getNpcCid())
    local summonPos = {x = pos.x-1,y = pos.y,z = pos.z}

    if msgcontains(msg, 'guerreiro') then
        selfSay('Você está interessado em se tornar um guerreiro? Uma vez iniciado, você não poderá voltar atrás.', cid)
        talkState[talkUser] = 1
    elseif msgcontains(msg, 'sim') then
        if talkState[talkUser] == 1 then
            if getPlayerVocation(cid) == 0 then
                if getPlayerStorageValue(cid, 9500) < 0 then
                    selfSay('Você deve antes provar seu valor de combate. Me mostre se é capaz de destruir isto...', cid)
                    doSummonCreature('Training Target', summonPos)
                    talkState[talkUser] = 0
                else
                    selfSay('Você parece levar jeito e será iniciado na classe de guerreiro. Veja, há um baú no posto logo acima. Tenho certeza que ali ainda deve haver algum equipamento básico de guerreiro para você.')
                    doPlayerSetVocation(cid, 1)
                    if getPlayerStorageValue(cid, 8415) == 1 then
                        setPlayerStorageValue(cid, 8412, 1)
                        setPlayerStorageValue(cid, 8415, 0)
                    elseif getPlayerStorageValue(cid, 8410) == 1 then
                        setPlayerStorageValue(cid, 8411, 1)
                        setPlayerStorageValue(cid, 8410, 0)
                    elseif getPlayerStorageValue(cid, 8416) == 1 then
                        setPlayerStorageValue(cid, 8403, 1)
                        setPlayerStorageValue(cid, 8416, 0)
                    end
                    talkState[talkUser] = 0
                end
            else
                selfSay('Você já possui uma classe.', cid)
                talkState[talkUser] = 0
            end
        end
    elseif isInArray({'não', 'nao'}, msg) then
        if talkState[talkUser] == 1 then
            selfSay('Então não tome nosso tempo. Estamos ocupados!', cid)
            talkState[talkUser] = 0
        end
    elseif isInArray({'comprar', 'vender'}, msg) then
        selfSay('Não estou vendendo ou comprando coisa alguma. Minha função é preparar novos guerreiros.', cid)
    elseif isInArray({'mágica', 'magica'}, msg) then
        selfSay('Huh? A habilidade com uma espada ou um machado não se comparam com esses truques baratos.', cid)
    end
end

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

@Tadelho

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

Quem Está Navegando 0

  • Nenhum usuário registrado visualizando esta página.

Estatísticas dos Fóruns

  • Tópicos 96.9k
  • Posts 519.6k

Informação Importante

Confirmação de Termo