• There is NO official Otland's Discord server and NO official Otland's server list. The Otland's Staff does not manage any Discord server or server list. Moderators or administrator of any Discord server or server lists have NO connection to the Otland's Staff. Do not get scammed!

NPC [TFS 1.1] Healer/blessings NPC

zbizu

Legendary OT User
Joined
Nov 22, 2010
Messages
3,323
Solutions
26
Reaction score
2,690
Location
Poland
xml:
Code:
<?xml version="1.0" encoding="UTF-8"?>
	<npc name="NPCNAME" script="bless_heal.lua" walkinterval="2000" floorchange="0" speechbubble="1">
	<health now="100" max="100"/>
	<look type="138" 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>

bless_heal.lua
Code:
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())
 
Hi, thanks for sharing, the npc is showing me this error, any idea how to solve this? I'm using tfs 1.3 downgraded by nekiro (8.6) Thanks in advance!
Code:
[C]: in function '__lt'

data/npc/scripts/Remy.lua:106: in function 'callback'

data/npc/lib/npcsystem/npchandler.lua:401 in function 'oncreaturesay'
 

Attachments

Back
Top