Hi all, using TFS 0.2.8 client 8.62.
I have got a NPC that would recharge a physical ring for some money once used, but when a player goes to the NPC and says "hi" the NPC doesn't respond at all and i get this error in the server log:
Here is my NPC XML FILE:
And here is my NPC LUA FILE:
Please any help much appreciated, thank you
I have got a NPC that would recharge a physical ring for some money once used, but when a player goes to the NPC and says "hi" the NPC doesn't respond at all and i get this error in the server log:
Code:
Lua Script Error: [Npc interface]
data/npc/scripts/physical.lua:onCreatureSay
data/npc/lib/npc.lua:46: attempt to perform arithmetic on global 'sx' (a table value)
stack traceback:
data/npc/lib/npc.lua:46: in function 'getDistanceToCreature'
data/npc/scripts/physical.lua:43: in function <data/npc/scripts/physical.lua:33>
Here is my NPC XML FILE:
Code:
<?xml version="1.0" encoding="UTF-8"?>
<npc name="Physical Ring" script="data/npc/scripts/physical.lua" walkinterval="111" floorchange="0">
<health now="100" max="100"/>
<look type="134" head="78" body="88" legs="0" feet="88" addons="3"/>
</npc>
And here is my NPC LUA FILE:
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)
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 = 7697 --Ring
local itemweight = getItemWeight(item, 1)
msg = string.lower(msg)
if (msgcontains(msg, 'hi') and (focus == 0)) and getDistanceToCreature(cid) < 4 then
selfSay('Hi. I will refill your physical ring for 50k! Say ring to refill.')
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, 'ring') then
if getPlayerItemCount(cid,2258) == 1 and player_money >= 100000 then
doPlayerTakeItem(cid,2258,1)
doPlayerRemoveMoney(cid,50000)
doPlayerAddItem(cid,item,1)
else
selfSay('Please bring with you a physical ring!')
end
end
end
if msgcontains(msg, 'ihhihohohihiohoi') 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
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
Please any help much appreciated, thank you