NPC Bless

Marco Oliveira

avatar
Visconde
Visconde

INFOS

Grupo: ViscondeRegistrado: 21/06/15Posts: 331Gênero: Masculino

data/npcs/scripts/BlessMan.lua :

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 onPlayerEndTrade(cid)				npcHandler:onPlayerEndTrade(cid)			end
function onPlayerCloseChannel(cid)			npcHandler:onPlayerCloseChannel(cid)		end

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

	local talkUser = cid
	local p = Player(cid)
	local heal = false
	local hp = p:getHealth()
	
	if msgcontains(msg, "heal") then
		if getCreatureCondition(cid, CONDITION_FIRE) then
			selfSay("You are burning. I will help you.", cid)
			doRemoveCondition(cid, CONDITION_FIRE)
			heal = true
		elseif getCreatureCondition(cid, CONDITION_POISON) then
			selfSay("You are poisoned. I will cure you.", cid)
			doRemoveCondition(cid, CONDITION_POISON)
			heal = true
		elseif getCreatureCondition(cid, CONDITION_ENERGY) then
			selfSay("You are electrificed. I will help you.", cid)
			doRemoveCondition(cid, CONDITION_ENERGY)
			heal = true
		elseif getCreatureCondition(cid, CONDITION_PARALYZE) then
			selfSay("You are paralyzed. I will cure you.", cid)
			doRemoveCondition(cid, CONDITION_PARALYZE)
			heal = true
		elseif getCreatureCondition(cid, CONDITION_DROWN) then
			selfSay("You are drowing. I will help you.", cid)
			doRemoveCondition(cid, CONDITION_DROWN)
			heal = true
		elseif getCreatureCondition(cid, CONDITION_FREEZING) then
			selfSay("You are cold! I will help you.", cid)
			doRemoveCondition(cid, CONDITION_FREEZING)
			heal = true
		elseif getCreatureCondition(cid, CONDITION_BLEEDING) then
			selfSay("You are bleeding! I will help you.", cid)
			doRemoveCondition(cid, CONDITION_BLEEDING)
			heal = true
		elseif getCreatureCondition(cid, CONDITION_DAZZLED) then
			selfSay("You are dazzled! Do not mess with holy creatures anymore!", cid)
			doRemoveCondition(cid, CONDITION_DAZZLED)
			heal = true
		elseif getCreatureCondition(cid, CONDITION_CURSED) then
			selfSay("You are cursed! I will remove it.", cid)
			doRemoveCondition(cid, CONDITION_CURSED)
			heal = true
		elseif hp < 65 then
			selfSay("You are looking really bad. Let me heal your wounds.", cid)
			p:addHealth(65 - hp)
			heal = true
		elseif hp < 2000 then
			selfSay("I did my best to fix your wounds.", cid)
			p:addHealth(2000 - hp)
			heal = true
		end
		
		if heal then
			p:getPosition():sendMagicEffect(CONST_ME_MAGIC_BLUE)
		else
			local msgheal = {
				"You aren't looking really bad, " .. getCreatureName(cid) .. ". I only help in cases of real emergencies. Raise your health simply by eating {food}.", 
				"Seriously? It's just a scratch", 
				"Don't be a child. You don't need any help with your health.", 
				"I'm not an expert. If you need help find a medic.", 
				"Don't even waste my time, I have bigger problems than your scratched armor."
			}
			selfSay("" .. msgheal[math.random(1, #msgheal)] .. "", cid)
		end
	return true
	end
	
	if msgcontains(msg, "yes") and talkState[talkUser] > 90 and talkState[talkUser] < 96 then
		if getPlayerBlessing(cid, talkState[talkUser] - 90) then
			selfSay("You already have this blessing!", cid)
		else
			b_price = (2000 + ((math.min(130, getPlayerLevel(cid)) - 30) * 200))
			if b_price < 2000 then b_price = 2000 end
			
			if doPlayerRemoveMoney(cid, b_price) then
				selfSay("You have been blessed by one of the five gods!", cid)
				doPlayerAddBlessing(cid, talkState[talkUser] - 90)
				doSendMagicEffect(getThingPos(cid), CONST_ME_MAGIC_BLUE)
			else
				selfSay("I'm sorry. We need money to keep this temple up.", cid)
			end
		end
		talkState[talkUser] = 0
		return true
	end
	
	if msgcontains(msg, "yes") and talkState[talkUser] == 96 then
		havebless = {}
		
		for i = 1, 5 do
			if(getPlayerBlessing(cid, i)) then
				table.insert(havebless,i)
			end
		end
		
		if #havebless == 5 then
			selfSay('You already have all available blessings.',cid)
			talkState[talkUser] = 0
			return true
		end
		
		b_price = (2000 + ((math.min(130, getPlayerLevel(cid)) - 30) * 200))
		if b_price < 2000 then b_price = 2000 end
		b_price = ((5 - #havebless) * b_price)
		
		if doPlayerRemoveMoney(cid, b_price) then
			selfSay("You have been blessed by the five gods!", cid)
			for i = 1, 5 do doPlayerAddBlessing(cid, i) end
			doSendMagicEffect(getThingPos(cid), CONST_ME_MAGIC_BLUE)
		else
			selfSay("I'm sorry. We need money to keep this temple up.", cid)
		end
			
		talkState[talkUser] = 0
		return true
	end
	
	if msgcontains(msg, "all") then
		havebless = {}
		b_price = (2000 + ((math.min(130, getPlayerLevel(cid)) - 30) * 200))
		if b_price < 2000 then b_price = 2000 end
		
		for i = 1, 5 do
			if(getPlayerBlessing(cid, i)) then
				table.insert(havebless,i)
			end
		end
		
		b_price = ((5 - #havebless) * b_price)
		
		if b_price == 0 then
			selfSay('You already have all available blessings.',cid)
			talkState[talkUser] = 0
			return true
		end
		
		selfSay('Do you want to receive all blessings for ' .. b_price .. ' gold?',cid)
		talkState[talkUser] = 96
		return true
	end
	
	local blesskeywords = {'wisdom', 'spark', 'fire', 'spiritual', 'embrace'}
	local blessnames = {'Wisdom of Solitude', 'Spark of The Phoenix', 'Fire of Two Suns', 'Spiritual Shielding', 'The Embrace'}
	for i = 1, #blesskeywords do
		if msgcontains(msg, blesskeywords[i]) then
		
			b_price = (2000 + ((math.min(130, getPlayerLevel(cid)) - 30) * 200))
			if b_price < 2000 then b_price = 2000 end
			
			selfSay('Do you want me to grant you ' .. blessnames[i] .. ' blessing for ' .. b_price .. ' gold?',cid)
			talkState[talkUser] = 90 + i
			return true
		end
	end
	
	return true
end

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

data/npcs/BlessMan.xml :

<?xml version="1.0" encoding="UTF-8"?>
	<npc name="Willian" script="BlessMan.lua" walkinterval="2000" floorchange="0" speechbubble="1">
	<health now="100" max="100"/>
	<look type="134" head="58" body="114" legs="87" addons="3"/>
	<parameters>
		<parameter key="module_keywords" value="1" />
		<parameter key="keywords" value="bless;blessings" />
		<parameter key="keyword_reply1" value="I can grant you blessings such as {Wisdom} {of} {Solitude}, {Spark} {of} {The} {Phoenix}, our {Fire} {of} {Two} {Suns}, {Spiritual} {Shielding} and {The Embrace}. I can also grant you {all} of these blessings, just ask me." />
		<parameter key="keyword_reply2" value="I can grant you blessings such as {Wisdom} {of} {Solitude}, {Spark} {of} {The} {Phoenix}, our {Fire} {of} {Two} {Suns}, {Spiritual} {Shielding} and {The Embrace}. I can also grant you {all} of these blessings, just ask me." />
	</parameters>
</npc>
Esse NPC tem um diferencial que ele tem um sistema de Healing, tira poison etc.
Para comprar todas as blessings basta dizer "ALL" que ele te vende todas de uma vez.

TioJapa

avatar
Banidos
Banidos

INFOS

Grupo: BanidosRegistrado: 12/03/14Posts: 8Char no Tibia: Arieswar

Muito bom Aries, continue assim meu amigo!

Marco Oliveira

avatar
Visconde
Visconde

INFOS

Grupo: ViscondeRegistrado: 21/06/15Posts: 331Gênero: Masculino

Funciona para tfs 1.2?

 

Creio que funcione!!

Marco Oliveira

avatar
Visconde
Visconde

INFOS

Grupo: ViscondeRegistrado: 21/06/15Posts: 331Gênero: Masculino

Funcionou sim, obrigado.

 

Deixe seu rep no tópico para me ajudar !!

Tenha uma boa noite.

Taiger

avatar
Marquês
Marquês

INFOS

Grupo: MarquêsRegistrado: 02/07/07Posts: 1140Gênero: Masculino

apareceu este erro, o que pode ser?

Lua Script Error: [Npc interface] 
data/npc/scripts/BlessMan.lua:onCreatureSay 
data/npc/scripts/BlessMan.lua:85: attempt to compare number with nil 
stack traceback: 
[C]: in function '__lt' 
data/npc/scripts/BlessMan.lua:85: in function 'callback' 
data/npc/lib/npcsystem/npchandler.lua:430: in function 'onCreatureSay' 
data/npc/scripts/BlessMan.lua:8: in function 

Marco Oliveira

avatar
Visconde
Visconde

INFOS

Grupo: ViscondeRegistrado: 21/06/15Posts: 331Gênero: Masculino

 

apareceu este erro, o que pode ser?

Lua Script Error: [Npc interface] 
data/npc/scripts/BlessMan.lua:onCreatureSay 
data/npc/scripts/BlessMan.lua:85: attempt to compare number with nil 
stack traceback: 
[C]: in function '__lt' 
data/npc/scripts/BlessMan.lua:85: in function 'callback' 
data/npc/lib/npcsystem/npchandler.lua:430: in function 'onCreatureSay' 
data/npc/scripts/BlessMan.lua:8: in function 

Creio eu que não seja compatível com a sua versão do tfs.

Tente usar o NPC que vem no seu datapack

 

Taiger

avatar
Marquês
Marquês

INFOS

Grupo: MarquêsRegistrado: 02/07/07Posts: 1140Gênero: Masculino

vou passa o script do que tem no meu server e tu olha pra mim se ele vende bless full?

Marco Oliveira

avatar
Visconde
Visconde

INFOS

Grupo: ViscondeRegistrado: 21/06/15Posts: 331Gênero: Masculino

vou passa o script do que tem no meu server e tu olha pra mim se ele vende bless full?

 

Sim, eu posso olhar.

Mas crie um tópico diferente se possível!