• 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!

Lua Npc

bloodware

New Member
Joined
Mar 16, 2008
Messages
54
Reaction score
0
Added a new npc today but getting an error.

What should i do?


[15/06/2008 16:23:02] Lua Script Error: [Npc interface]
[15/06/2008 16:23:02] data/npc/scripts/promote2.lua: onCreatureSay

[15/06/2008 16:23:02] data/npc/scripts/promote2.lua:39: attempt to call global 'creatureGetName' (a nil value)
 
Think the hole script is wrong :S

Can someone correct it? thx

Code:
local focus = 0
local talk_start = 0
local target = 0
local days = 0

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('Hello ' .. getCreatureName(cid) .. '! I sell the 2nd promotions.')
 		focus = cid
 		talk_start = os.clock()

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

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

		if msgcontains(msg, 'promotion') or msgcontains(msg, 'promote') then
 			if getPlayerVocation(cid) > 8 then
 				selfSay('Sorry, you are already promoted.')
 				talk_state = 0
 			elseif getPlayerLevel(cid) < 150 then
				selfSay('Sorry, you need level 150 to buy the second promotion.')
				talk_state = 0
			elseif not getPlayerPremium(cid) then
				selfSay('Sorry, you must have the first promotion to buy the second promotion.')
				talk_state = 0
			else
				selfSay('Do you want to buy the second promotion for 50k?')
				talk_state = 1
			end

		elseif talk_state == 1 then
			if msgcontains(msg, 'yes') then
				if pay(cid,50000) then
					doPlayerSetVocation(cid, getPlayerVocation(cid)+4)
					selfSay('You are now promoted!')
				else
					selfSay('Sorry, you do not have enough money.')
				end
 			end
			talk_state = 0

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


function onCreatureChangeOutfit(creature)

end


function onThink()
	doNpcSetCreatureFocus(focus)
  	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) > 5 then
 			selfSay('Good bye then.')
 			focus = 0
 		end
 	end
end
 
Last edited by a moderator:
Whats the problem with the script?
Do you get an error or it just wont work?

Also incase you don't know, this script sets the players vocation to their current vocation id + 4. So you have to have the second promotion's vocation id set to 4 above their current vocation.

Example:
Sorcerer vocation id is 1.
Master Sorcerer vocation id is 5.
so the 2nd promotion for a Sorcerer must be set to vocation id 9.
 
yeah i know. added the vocs id's but when i say hello he says if i want to buy the second promotion and when i say yes i get an error..
 
Back
Top