BA

[Npc] Healer

Por bastiago, 15 de jul. de 2011 em Scripts

otserv
tibia
script
8
2.3k
bastiagoB
15 de julho de 2011 às 19:39

Boa noite xtibianos!



Estou com um problema em meu NPC Healer que quando fala hi não abre o chat do NPC, assim a pessoa tem que abrir, so que quando vai andando ele fala Bye e abre o chat.

 

Segue o Script:

 

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

function creatureSayCallback(cid, type, msg)
local talkUser = NPCHANDLER_CONVBEHAVIOR == CONVERSATION_DEFAULT and 0 or cid
if (msgcontains(msg, "hello") or msgcontains(msg, "hi")) and not npcHandler:isFocused(cid) then
	if getCreatureHealth(cid) < 65 then
		npcHandler:say("Hello, "..getCreatureName(cid).."! You are looking really bad. Let me heal your wounds.", cid)
		doCreatureAddHealth(cid, 65 - getCreatureHealth(cid))
		doSendMagicEffect(getCreaturePosition(cid), 12)
	else
		selfSay("Hello, "..getCreatureName(cid).."! I'll {heal} you if you are badly injured or poisoned. Feel free to ask me for {help} or general {hints}.", cid, TRUE)
		npcHandler:addFocus(cid)
	end
	return true
end
if(not npcHandler:isFocused(cid)) then
	return false
elseif msgcontains(msg, "bye") or msgcontains(msg, "farewell") then
	selfSay("Farewell, " .. getCreatureName(cid) .. "!", cid, TRUE)
	npcHandler:releaseFocus(cid)
elseif msgcontains(msg, "heal") then
	if getCreatureCondition(cid, CONDITION_FIRE) == TRUE then
		npcHandler:say("You are burning. I will help you.", cid)
		doRemoveCondition(cid, CONDITION_FIRE)
		doSendMagicEffect(getCreaturePosition(cid), 14)
	elseif getCreatureCondition(cid, CONDITION_POISON) == TRUE then
		npcHandler:say("You are poisoned. I will help you.", cid)
		doRemoveCondition(cid, CONDITION_POISON)
		doSendMagicEffect(getCreaturePosition(cid), 13)
	elseif getCreatureHealth(cid) < 65 then
		npcHandler:say("You are looking really bad. Let me heal your wounds.", cid)
		doCreatureAddHealth(cid, 65 - getCreatureHealth(cid))
		doSendMagicEffect(getCreaturePosition(cid), 12)
	else
		npcHandler:say("You aren't looking really bad, " .. getCreatureName(cid) .. ". I only help in cases of real emergencies. Raise your health simply by eating {food}.", cid)
	end
end
return TRUE
end

npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback)
npcHandler:setMessage(MESSAGE_WALKAWAY, "Well, bye then.")

Editado Julho 15 por ADM Dark

SkyDangerousS
15 de julho de 2011 às 19:47

Olá ADM Dark

 

Claro , que quando fala hi ele não abre o chat , porque automaticamente você falar hi ele irá verificar sua vida , se ela estiver baixo então ele heala

Igual no npc do global , e só falar hi e pronto.

bastiagoB
15 de julho de 2011 às 20:24

Okay, teria como abrir o chat após a verificação ?

IlidianI
16 de julho de 2011 às 11:09

Seguinte, pelo que eu vi aqui, se o cara estiver com menos de 65 de HP o npc simplesmente irá curalo e não vai abrir chat algum... Se o cara estiver com + de 65 de HP o npc responde: "Hello, "..getCreatureName(cid).."! I'll {heal} you if you are badly injured or poisoned. Feel free to ask me for {help} or general {hints}." ????????????

 

Se for isso, só substituir o arquivo por esse aqui que o npc vai abrir o chat não importa a vida do cara.

 

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

function creatureSayCallback(cid, type, msg)

   local talkUser = NPCHANDLER_CONVBEHAVIOR == CONVERSATION_DEFAULT and 0 or cid

       if (msgcontains(msg, "hello") or msgcontains(msg, "hi")) and not npcHandler:isFocused(cid) then
               if getCreatureHealth(cid) < 65 then
                       npcHandler:say("Hello, "..getCreatureName(cid).."! You are looking really bad. Let me heal your wounds.", cid)
                       doCreatureAddHealth(cid, 65 - getCreatureHealth(cid))
                       doSendMagicEffect(getCreaturePosition(cid), 12)
					npcHandler:addFocus(cid)
               else
                       selfSay("Hello, "..getCreatureName(cid).."! I'll {heal} you if you are badly injured or poisoned. Feel free to ask me for {help} or general {hints}.", cid, TRUE)
                       npcHandler:addFocus(cid)
               end
               return true
       end
       if(not npcHandler:isFocused(cid)) then
               return false
       elseif msgcontains(msg, "bye") or msgcontains(msg, "farewell") then
               selfSay("Farewell, " .. getCreatureName(cid) .. "!", cid, TRUE)
               npcHandler:releaseFocus(cid)
       elseif msgcontains(msg, "heal") then
               if getCreatureCondition(cid, CONDITION_FIRE) == TRUE then
                       npcHandler:say("You are burning. I will help you.", cid)
                       doRemoveCondition(cid, CONDITION_FIRE)
                       doSendMagicEffect(getCreaturePosition(cid), 14)
               elseif getCreatureCondition(cid, CONDITION_POISON) == TRUE then
                       npcHandler:say("You are poisoned. I will help you.", cid)
                       doRemoveCondition(cid, CONDITION_POISON)
                       doSendMagicEffect(getCreaturePosition(cid), 13)
               elseif getCreatureHealth(cid) < 65 then
                       npcHandler:say("You are looking really bad. Let me heal your wounds.", cid)
                       doCreatureAddHealth(cid, 65 - getCreatureHealth(cid))
                       doSendMagicEffect(getCreaturePosition(cid), 12)
               else
                       npcHandler:say("You aren't looking really bad, " .. getCreatureName(cid) .. ". I only help in cases of real emergencies. Raise your health simply by eating {food}.", cid)
               end
       end
       return TRUE
end

npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback)
npcHandler:setMessage(MESSAGE_WALKAWAY, "Well, bye then.")

 

Se não funcionar, posta denovo que dai eu testo no meu servidor antes de postar aqui...

bastiagoB
16 de julho de 2011 às 14:27

Ilidian, coloquei como você me passo mas continua a mesma coisa ;x

IlidianI
16 de julho de 2011 às 16:13

Testei esse aqui em casa e deu certo, da uma olhada:

 

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

function creatureSayCallback(cid, type, msg)
   local talkUser = NPCHANDLER_CONVBEHAVIOR == CONVERSATION_DEFAULT and 0 or cid

       if (msgcontains(msg, "hello") or msgcontains(msg, "hi")) and not npcHandler:isFocused(cid) then
               if getCreatureHealth(cid) < 65 then
                       npcHandler:say("Hello, "..getCreatureName(cid).."! You are looking really bad. Let me heal your wounds.", cid)
                       doCreatureAddHealth(cid, 65 - getCreatureHealth(cid))
                       doSendMagicEffect(getCreaturePosition(cid), 12)
                                               npcHandler:addFocus(cid)
               else
                       selfSay("Hello, "..getCreatureName(cid).."! I'll {heal} you if you are badly injured or poisoned. Feel free to ask me for {help} or general {hints}.", cid)
                       npcHandler:addFocus(cid)
               end
       end
	if(not npcHandler:isFocused(cid)) then
           return false
	end
       if msgcontains(msg, "bye") or msgcontains(msg, "farewell") then
               selfSay("Farewell, " .. getCreatureName(cid) .. "!", cid)
               npcHandler:releaseFocus(cid)

       elseif msgcontains(msg, 'heal') then
               if getCreatureCondition(cid, CONDITION_FIRE) == TRUE then
                       npcHandler:say("You are burning. I will help you.", cid)
                       doRemoveCondition(cid, CONDITION_FIRE)
                       doSendMagicEffect(getCreaturePosition(cid), 14)
               elseif getCreatureCondition(cid, CONDITION_POISON) == TRUE then
                       npcHandler:say("You are poisoned. I will help you.", cid)
                       doRemoveCondition(cid, CONDITION_POISON)
                       doSendMagicEffect(getCreaturePosition(cid), 13)
               elseif getCreatureHealth(cid) < 65 then
                       npcHandler:say("You are looking really bad. Let me heal your wounds.", cid)
                       doCreatureAddHealth(cid, 65 - getCreatureHealth(cid))
                       doSendMagicEffect(getCreaturePosition(cid), 12)
               else
                       npcHandler:say("You aren't looking really bad, " .. getCreatureName(cid) .. ". I only help in cases of real emergencies. Raise your health simply by eating {food}.", cid)
               end
       end
       return true
end

npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback)
npcHandler:setMessage(MESSAGE_WALKAWAY, "Well, bye then.")

Editado Julho 16 por Ilidian

bastiagoB
17 de julho de 2011 às 00:56

Obrigado Ilidian, deu certo.

REP +

 

SecularS
18 de julho de 2011 às 21:16

Dúvida Sanada,

 

tópico reportado para que movam.

 

Abraços.

Editado Julho 18 por cmgabriel