• 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 problem, rep++

Dalale

GX
Joined
Jun 13, 2008
Messages
718
Reaction score
2
Location
Sweden
Im using Tfs 0.2.6 Mystic Spirit

There is only one little problem.
Player1: Hello
Npc: Welcome, Dalale! I have been expecting you.
Player2:Player2, please wait for your turn. There are 1 customers before you.

What im trying to say here is that the npcs aint speaking in their own channel and you gotta wait for speaking with the NPC
 
Alright it worked out =D thanks Cykotikan rep++
so i got 2 more problems with npc

Code:
[07/03/2010 17:05:07] Lua Script Error: [Npc interface] 
[07/03/2010 17:05:07] data/npc/scripts/oak info.lua:onCreatureSay

[07/03/2010 17:05:07] data/npc/lib/npc.lua:46: attempt to perform arithmetic on global 'sx' (a table value)
[07/03/2010 17:05:07] stack traceback:
[07/03/2010 17:05:07] 	data/npc/lib/npc.lua:46: in function 'getDistanceToCreature'
[07/03/2010 17:05:07] 	data/npc/scripts/oak info.lua:36: in function <data/npc/scripts/oak info.lua:33>

NPC LUA

Code:
local focus = 0
local talk_start = 0
local target = 0
local following = false
local attacking = false

function onThingMove(creature, thing, oldpos, oldstackpos)

end

function onCreatureAppear(creature)
end

function onCreatureDisappear(cid, pos)
	if focus == cid then
		selfSay('Good bye then.')
		focus = 0
		talk_start = 0
	end
end


function onCreatureTurn(creature)
	
end


function msgcontains(txt, str)
return (string.find(txt, str) and not string.find(txt, '(%w+)' .. str) and not string.find(txt, str .. '(%w+)'))
end


function onCreatureSay(cid, type, msg)
msg = string.lower(msg)

if (msgcontains(msg, 'hi') and (focus == 0)) and getDistanceToCreature(cid) < 4 then
selfSay('Hi '..getPlayerName(cid)..'. Before you dare facing the Demon Oak, you should talk to my brother. Last time I heard from him he had settled down in a cave in the Sultans Castle. He had managed to dig a cave below his throne. Talk to him and then come back and ask me about the DEMON OAK.')
focus = cid
talk_start = os.clock()

elseif msgcontains(msg, 'hi') and (focus ~= cid) and getDistanceToCreature(cid) < 4 then
selfSay('Sorry, ' .. creatureGetName(cid) .. '! I talk to you in a minute.')

elseif focus == cid then
talk_start = os.clock()

if msgcontains(msg, 'demon oak') then
selfSay('So, you talked to my brother? Head south from here and use the mighty axe on the Oaks arms. If you defeat him, go talk to my brother again and ask him about the DEMON OAK.')
end

if msgcontains(msg, 'bye') and getDistanceToCreature(cid) < 4 then
selfSay('Good bye, ' .. creatureGetName(cid) .. '!')
focus = 0
talk_start = 0
end
end
end

function onThink()

if (os.clock() - talk_start) > 15 then
if focus > 0 then
selfSay('Next Please...')
end
focus = 0
end
if focus ~= 0 then
if getDistanceToCreature(focus) > 2 then
selfSay('Good bye then.')
focus = 0
end
end
end

and the second

error
Code:
[07/03/2010 17:08:18] Lua Script Error: [Npc interface] 
[07/03/2010 17:08:18] data/npc/scripts/demon oak monk.lua:onCreatureSay

[07/03/2010 17:08:18] data/npc/lib/npc.lua:46: attempt to perform arithmetic on global 'sx' (a table value)
[07/03/2010 17:08:18] stack traceback:
[07/03/2010 17:08:18] 	data/npc/lib/npc.lua:46: in function 'getDistanceToCreature'
[07/03/2010 17:08:18] 	data/npc/scripts/demon oak monk.lua:43: in function <data/npc/scripts/demon oak monk.lua:33>
Code:
script
local focus = 0
local talk_start = 0
local target = 0
local following = false
local attacking = false

function onThingMove(creature, thing, oldpos, oldstackpos)

end

function onCreatureAppear(creature)
end

function onCreatureDisappear(cid, pos)
	if focus == cid then
		selfSay('Good bye then.')
		focus = 0
		talk_start = 0
	end
end


function onCreatureTurn(creature)
	
end


function msgcontains(txt, str)
return (string.find(txt, str) and not string.find(txt, '(%w+)' .. str) and not string.find(txt, str .. '(%w+)'))
end


function onCreatureSay(cid, type, msg)
local player_gold = getPlayerItemCount(cid,2148)
local player_plat = getPlayerItemCount(cid,2152)*100
local player_crys = getPlayerItemCount(cid,2160)*10000
local player_money = player_gold + player_plat + player_crys
local playerCap = getPlayerFreeCap(cid)
local item = 8293 --Hallowed Axe
local itemweight = getItemWeight(item, 1)
msg = string.lower(msg)

if (msgcontains(msg, 'hi') and (focus == 0)) and getDistanceToCreature(cid) < 4 then
selfSay('Hi. Im the Demon Oak Monk. I can either sell you an Hallowed axe or tell you about Demon Oak.')
focus = cid
talk_start = os.clock()

elseif msgcontains(msg, 'hi') and (focus ~= cid) and getDistanceToCreature(cid) < 4 then
selfSay('You will have to wait, ' .. getPlayerName(cid) .. '.')

elseif focus == cid then
talk_start = os.clock()

if msgcontains(msg, 'hallowed axe') then
if getPlayerItemCount(cid,2386) >= 1 and player_money >= 1000000 then
doPlayerTakeItem(cid,2386,1)
doPlayerRemoveMoney(cid,1000000)
doPlayerAddItem(cid,item,1)
else
selfSay('Please bring with you an axe. The only way to get an axe, is to show your knowledge in the knowledge quest. Come back when you have done it and take a bunch of cash with you!')
end
end

if msgcontains(msg, 'demon oak') then
if getPlayerStorageValue(cid,21545) == 1 then
selfSay('Good job, you defeated the Demon Oak! Now search for the secret grave!')
setPlayerStorageValue(cid,21545,2)
else
selfSay('Go defeat the demon oak.')
end
end
if msgcontains(msg, 'bye') and getDistanceToCreature(cid) < 4 then
selfSay('Good bye, ' .. getPlayerName(cid) .. '!')
focus = 0
end
end
end


function onThink()

if (os.clock() - talk_start) > 30 then
if focus > 0 then
selfSay('Next Please...')
end
focus = 0
end
if focus ~= 0 then
if getDistanceToCreature(focus) > 2 then
selfSay('Good bye then.')
focus = 0
end
end
end
 
Code:
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

keywordHandler:addKeyword({'demon oak'}, StdModule.say, {npcHandler = npcHandler, onlyFocus = true, text = 'So, you talked to my brother? Head south from here and use the mighty axe on the Oaks arms. If you defeat him, go talk to my brother again and ask him about the DEMON OAK.'})

npcHandler:setMessage(MESSAGE_GREET, 'Hi |PLAYERNAME|. Before you dare facing the Demon Oak, you should talk to my brother. Last time I heard from him he had settled down in a cave in the Sultans Castle. He had managed to dig a cave below his throne. Talk to him and then come back and ask me about the DEMON OAK.')
npcHandler:addModule(FocusModule:new())
Code:
local keywordHandler = KeywordHandler:new()
local npcHandler = NpcHandler:new(keywordHandler)
NpcSystem.parseParameters(npcHandler)

local price = 1000000

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)
	if(not npcHandler:isFocused(cid)) then
		return false
	elseif msgcontains(msg, 'hallowed') and msgcontains(msg, 'axe') then
		if getPlayerMoney(cid) >= price and doPlayerRemoveItem(cid, 2386, 1) == TRUE then
			doPlayerRemoveMoney(cid, price)
			doPlayerAddItem(cid, 8293, 1)
			npcHandler:say('Here you are.', cid)
		else
			npcHandler:say('Please bring with you an axe. The only way to get an axe, is to show your knowledge in the knowledge quest. Come back when you have done it and take a bunch of cash with you!', cid)
		end
	elseif msgcontains(msg, 'demon') and msgcontains(msg, 'oak') then
		if getPlayerStorageValue(cid, 21545) == 1 then
			npcHandler:say('Good job, you defeated the Demon Oak! Now search for the secret grave!', cid)
			setPlayerStorageValue(cid, 21545, 2)
		else
			npcHandler:say('Go defeat the demon oak.', cid)
		end
	end
	return TRUE
end

npcHandler:setMessage(MESSAGE_GREET, 'Hi. Im the Demon Oak Monk. I can either sell you an Hallowed axe or tell you about Demon Oak.')
npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback)
npcHandler:addModule(FocusModule:new())
 
thank you :) i cant rep++ you :P

i dont know if that new npc handle system did it or not but some of my runes have 1 charges left and is now infinitive what can be the prob?
 
Back
Top