Ir para conteúdo

NPC Bless


Posts Recomendados

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.
Editado por Marco Oliveira
Link para o comentário
Compartilhar em outros sites

  • 6 months later...

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 
Link para o comentário
Compartilhar em outros sites

 

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

 

Link para o comentário
Compartilhar em outros sites

×
×
  • Criar Novo...