• 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 Exchanger npc (adding)

DextaaH

Member
Joined
Jul 24, 2011
Messages
335
Reaction score
7
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

local item = 'I\'m sorry, but you do not have the required items for this trade.'
local done = 'Here you are, thank you for your business.'

function creatureSayCallback(cid, type, msg)
	if(not npcHandler:isFocused(cid)) then
		return false
	end
	if msgcontains(msg, 'offer') then
		selfSay('You can here change some items for {spider silk yarn}, {chunk of crude iron}, {draconian steel}, {warrior sweat}, {magic sulphur}, {enchanted chicken wing}, {royal steel}, {hell steel}, {fighting spirit}, {infernal bolt}.', cid)
	elseif msgcontains(msg, 'spider silk yarn') then
		if getPlayerItemCount(cid,5879) >= 10 then
			selfSay('Did you bring me the 10 Giant Spider Silks?', cid)
			talk_state = 1
		else
			selfSay('I need a {10 Giant Spider Silks}, to give you one spider silk yarn. Please come back when you have them.', cid)
			talk_state = 0
		end
	elseif msgcontains(msg, 'yes') and talk_state == 1 then
		talk_state = 0
		if getPlayerItemCount(cid,5879) >= 10 then
			if doPlayerRemoveItem(cid,5879, 10) == TRUE then
				selfSay(done, cid)
				doPlayerAddItem(cid, 5886, 1)
			end
		else
			selfSay(item, cid)
		end
	elseif msgcontains(msg, 'chunk of crude iron') then
		if getPlayerItemCount(cid,2393) >= 1 then
			selfSay('Did you bring me the Giant Sword ?', cid)
			talk_state = 2
		else
			selfSay('I need a {Giant Sword}, to give you the chunk of crude iron. Come back when you have it.', cid)
			talk_state = 0
		end
	elseif msgcontains(msg, 'yes') and talk_state == 2 then
		talk_state = 0
		if getPlayerItemCount(cid,2393) >= 1 then
			if doPlayerRemoveItem(cid,2393,1) == TRUE then
				selfSay(done, cid)
				doPlayerAddItem(cid,5892,1)
			end
		else
			selfSay(item, cid)
		end
	elseif msgcontains(msg, 'draconian steel') then
		if getPlayerItemCount(cid,2516) >= 1 then
			selfSay('Did you bring me Dragon Shield ?', cid)
			talk_state = 3
		else
			selfSay('I need {Dragon Shield}, to give you the draconian steel. Come back when you have it.', cid)
			talk_state = 0
		end
	elseif msgcontains(msg, 'yes') and talk_state == 3 then
		talk_state = 0
		if getPlayerItemCount(cid,2516) >= 1 then
			if doPlayerRemoveItem(cid,2516,1) == TRUE then
				doPlayerAddItem(cid,5889,1)
				selfSay(done, cid)
			end
		else
			selfSay(item, cid)
		end
	elseif msgcontains(msg, 'warrior\'s sweat') then
		if getPlayerItemCount(cid,2475) >= 1 and getPlayerItemCount(cid,2475) >= 1 and getPlayerItemCount(cid,2475) >= 1 and getPlayerItemCount(cid,2475) >= 1 then
			selfSay('Did you bring me 4 warrior helmets?', cid)
			talk_state = 4
		else
			selfSay('I need {4 warrior helmet\'s}, to give you the warrior\'s sweat. Come back when you have them.', cid)
			talk_state = 0
		end
	elseif msgcontains(msg, 'yes') and talk_state == 4 then
		talk_state = 0
		if getPlayerItemCount(cid,2475) >= 4 then
			for i = 1, 4 do
				doPlayerRemoveItem(cid, 2475, i)
			end
			doPlayerAddItem(cid,5885,1)
			selfSay(done, cid)
		else
			selfSay(item, cid)
		end
	elseif msgcontains(msg, 'magic sulphur') then
		if getPlayerItemCount(cid,2392) >= 3 then
			selfSay('Did you bring me 3 fire swords?', cid)
			talk_state = 5
		else
			selfSay('I need {3 fire sword\'s}, to give you the magic sulpher. Come back when you have them.', cid)
			talk_state = 0
		end
	elseif msgcontains(msg, 'yes') and talk_state == 5 then
		talk_state = 0
		if getPlayerItemCount(cid,2392) >= 3 then
			for i = 1, 4 do
				doPlayerRemoveItem(cid, 2392, i)
			end
			doPlayerAddItem(cid,5904,1)
			selfSay(done, cid)
		else
			selfSay(item, cid)
		end
	elseif msgcontains(msg, 'enchanted chicken wing') then
		if getPlayerItemCount(cid,2195) >= 1 then
			selfSay('Did you bring me boots of haste?', cid)
			talk_state = 6
		else
			selfSay('I need {boots of haste}, to give you the enchanted chicken wing. Come back when you have them.', cid)
			talk_state = 0
		end
	elseif msgcontains(msg, 'yes') and talk_state == 6 then
		talk_state = 0
		if getPlayerItemCount(cid,2195) >= 1 then
			doPlayerRemoveItem(cid,2195,1)
			doPlayerAddItem(cid,5891,1)
			selfSay(done, cid)
		else
			selfSay(item, cid)
		end
	elseif msgcontains(msg, 'royal steel') then
		if getPlayerItemCount(cid,2487) >= 1 then
			selfSay('Did you bring me the Crown Armor ?', cid)
			talk_state = 7
		else
			selfSay('I need a {Crown Armor}, to give you the royal steel. Come back when you have it.', cid)
			talk_state = 0
		end
	elseif msgcontains(msg, 'yes') and talk_state == 7 then
		talk_state = 0
		if getPlayerItemCount(cid,2487) >= 1 then
			if doPlayerRemoveItem(cid,2487,1) == TRUE then
				doPlayerAddItem(cid,5887,1)
				selfSay(done, cid)
			end
		else
			selfSay(item, cid)
		end
	elseif msgcontains(msg, 'hell steel') then
		if getPlayerItemCount(cid,2462) >= 1 then
			selfSay('Did you bring me the Devil Helmet ?', cid)
			talk_state = 8
		else
			selfSay('I need a {Devil Helmet}, to give you the hell steel. Come back when you have it.', cid)
			talk_state = 0
		end
	elseif msgcontains(msg, 'yes') and talk_state == 8 then
		talk_state = 0
		if getPlayerItemCount(cid,2462) >= 1 then
			if doPlayerRemoveItem(cid,2462,1) == TRUE then
				doPlayerAddItem(cid,5888,1)
				selfSay(done, cid)
			end
		else
			selfSay(item, cid)
		end
	elseif msgcontains(msg, 'fighting spirit') then
		if getPlayerItemCount(cid,2498) >= 2 then
			selfSay('Did you bring me the 2 Royal Helmets?', cid)
			talk_state = 10
		else
			selfSay('I need a {2 Royal Helmet\'s}, to give you the Fighting Spirit. Come back when you have them.', cid)
			talk_state = 0
		end
	elseif msgcontains(msg, 'yes') and talk_state == 10 then
		talk_state = 0
		if getPlayerItemCount(cid,2498) >= 2 then
			for i = 1, 2 do
				doPlayerRemoveItem(cid, 2498, i)
			end
			doPlayerAddItem(cid,5884,1)
			selfSay(done, cid)
		else
			selfSay(item, cid)
		end


	elseif msgcontains(msg, 'infernal bolt') then
		if getPlayerItemCount(cid,5944) >= 1 then
			selfSay('Did you bring me the Soul Orb?', cid)
			talk_state = 11
		else
			selfSay('I need a {Soul Orb}, to give you the 10 Infernal Bolts. Come back when you have it.', cid)
			talk_state = 0
		end
	elseif msgcontains(msg, 'yes') and talk_state == 11 then
		talk_state = 0
		if getPlayerItemCount(cid,5944) >= 1 then
			if doPlayerRemoveItem(cid,5944,1) == TRUE then
				doPlayerAddItem(cid,6529,10)
				selfSay(done, cid)
			end


		else
			selfSay(item, cid)
		end


	elseif msgcontains(msg, 'no') and talk_state >= 1 and talk_state <= 5 then
		selfSay('Well, then leave.')
		talk_state = 0
	end
	
	return true
end

npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback)
npcHandler:addModule(FocusModule:new())

Maybe its easy but i try atleast. But didnt work for me. How to add a text saying and asking for Elane's Crossbow and item required is 1 of 1,2,3,4 music sheet, hyms. Like the other, asking for example draconian steel, u need dragon shield. "you have dragon shield?" i would like have the same for elanes crossbow, "you have first hyms, second, hyms etc.

Hope you understand.
 
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

item = 'You do not have the required items.'
done = 'Here you are.'

function creatureSayCallback(cid, type, msg)
	if(not npcHandler:isFocused(cid)) then
		return false
	end
	
		if msgcontains(msg, 'offer') then
		selfSay('You can here change some items for {spider silk yarn}, {chunk of crude iron}, {draconian steel}, {warrior sweat}, {magic sulphur}, {enchanted chicken wing}, {royal steel}, {hell steel}, {fighting spirit}, {infernal bolt}, {elane crossbow}.', cid)

			elseif msgcontains(msg, 'spider silk yarn') then
			if getPlayerItemCount(cid,5879) >= 10 then
				selfSay('Did you bring me the 10 Giant Silks ?', cid)
				talk_state = 1
			else
				selfSay('I need a {10 Giant Spider Silks}, to give you the spider silk yarn. Come back when you have them.', cid)
				talk_state = 0
			end

			elseif msgcontains(msg, 'yes') and talk_state == 1 then
			talk_state = 0
			if getPlayerItemCount(cid,5879) >= 10 then
			if doPlayerRemoveItem(cid,5879, 10) == TRUE then
							selfSay(done, cid)
			doPlayerAddItem(cid, 5886, 1)
			end
			else
				selfSay(item, cid)
			end

elseif msgcontains(msg, 'chunk of crude iron') then
if getPlayerItemCount(cid,2393) >= 1 then
selfSay('Did you bring me the Giant Sword ?', cid)
talk_state = 2
else
selfSay('I need a {Giant Sword}, to give you the chunk of crude iron. Come back when you have it.', cid)
talk_state = 0
end
elseif msgcontains(msg, 'yes') and talk_state == 2 then
talk_state = 0
if getPlayerItemCount(cid,2393) >= 1 then
if doPlayerRemoveItem(cid,2393,1) == TRUE then
				selfSay(done, cid)
doPlayerAddItem(cid,5892,1)
end
else
selfSay(item, cid)
end
elseif msgcontains(msg, 'draconian steel') then
if getPlayerItemCount(cid,2516) >= 1 then
selfSay('Did you bring me Dragon Shield ?', cid)
talk_state = 3
else
selfSay('I need {Dragon Shield}, to give you the draconian steel. Come back when you have it.', cid)
talk_state = 0
end
elseif msgcontains(msg, 'yes') and talk_state == 3 then
talk_state = 0
if getPlayerItemCount(cid,2516) >= 1 then
if doPlayerRemoveItem(cid,2516,1) == TRUE then
doPlayerAddItem(cid,5889,1)
				selfSay(done, cid)
end
else
selfSay(item, cid)
end

		elseif msgcontains(msg, 'warrior\'s sweat') then
				if getPlayerItemCount(cid,2475) >= 1 and getPlayerItemCount(cid,2475) >= 1 and getPlayerItemCount(cid,2475) >= 1 and getPlayerItemCount(cid,2475) >= 1 then
					selfSay('Did you bring me 4 warrior helmets?', cid)
					talk_state = 4
				else
					selfSay('I need {4 warrior helmet\'s}, to give you the warrior\'s sweat. Come back when you have them.', cid)
					talk_state = 0
				end
		elseif msgcontains(msg, 'yes') and talk_state == 4 then
			talk_state = 0
			if getPlayerItemCount(cid,2475) >= 4 then
					if doPlayerRemoveItem(cid,2475,1) == TRUE and doPlayerRemoveItem(cid,2475,1) == TRUE and doPlayerRemoveItem(cid,2475,1) == TRUE and doPlayerRemoveItem(cid,2475,1) == TRUE then
						doPlayerAddItem(cid,5885,1)
						selfSay(done, cid)
					end
				else
				selfSay(item, cid)
				end

elseif msgcontains(msg, 'magic sulphur') then
if getPlayerItemCount(cid,2392) >= 1 and getPlayerItemCount(cid,2392) >= 1 and getPlayerItemCount(cid,2392) >= 1 then
selfSay('Did you bring me 3 fire swords?', cid)
talk_state = 5
else
selfSay('I need {3 fire sword\'s}, to give you the magic sulpher. Come back when you have them.', cid)
talk_state = 0
end

		elseif msgcontains(msg, 'yes') and talk_state == 5 then
			talk_state = 0
			if getPlayerItemCount(cid,2392) >= 3 then
					if doPlayerRemoveItem(cid,2392,1) == TRUE and doPlayerRemoveItem(cid,2392,1) == TRUE and doPlayerRemoveItem(cid,2392,1) == TRUE then
						doPlayerAddItem(cid,5904,1)
										selfSay(done, cid)
				end
			else
				selfSay(item, cid)
			end

		elseif msgcontains(msg, 'enchanted chicken wing') then
			if getPlayerItemCount(cid,2195) >= 1 then
				selfSay('Did you bring me boots of haste?', cid)
				talk_state = 6
			else
				selfSay('I need {boots of haste}, to give you the enchanted chicken wing. Come back when you have them.', cid)
				talk_state = 0
			end

		elseif msgcontains(msg, 'yes') and talk_state == 6 then
			talk_state = 0
			if getPlayerItemCount(cid,2195) >= 1 then
					if doPlayerRemoveItem(cid,2195,1) == TRUE then
						doPlayerAddItem(cid,5891,1)
										selfSay(done, cid)
					end
			else
				selfSay(item, cid)
			end



		elseif msgcontains(msg, 'royal steel') then
			if getPlayerItemCount(cid,2487) >= 1 then
				selfSay('Did you bring me the Crown Armor ?', cid)
				talk_state = 7
			else
				selfSay('I need a {Crown Armor}, to give you the royal steel. Come back when you have it.', cid)
				talk_state = 0
			end
		elseif msgcontains(msg, 'yes') and talk_state == 7 then
			talk_state = 0
			if getPlayerItemCount(cid,2487) >= 1 then
					if doPlayerRemoveItem(cid,2487,1) == TRUE then
						doPlayerAddItem(cid,5887,1)
										selfSay(done, cid)
					end
			else
				selfSay(item, cid)
			end


		elseif msgcontains(msg, 'hell steel') then
			if getPlayerItemCount(cid,2462) >= 1 then
				selfSay('Did you bring me the Devil Helmet ?', cid)
				talk_state = 8
			else
				selfSay('I need a {Devil Helmet}, to give you the hell steel. Come back when you have it.', cid)
				talk_state = 0
			end

		elseif msgcontains(msg, 'yes') and talk_state == 8 then
			talk_state = 0
			if getPlayerItemCount(cid,2462) >= 1 then
					if doPlayerRemoveItem(cid,2462,1) == TRUE then
						doPlayerAddItem(cid,5888,1)
										selfSay(done, cid)
					end
			else
				selfSay(item, cid)
			end

		elseif msgcontains(msg, 'fighting spirit') then
			if getPlayerItemCount(cid,2498) >= 1 and getPlayerItemCount(cid,2498) >= 1 then
				selfSay('Did you bring me the 2 Royal Helmets?', cid)
				talk_state = 10
			else
				selfSay('I need a {2 Royal Helmet\'s}, to give you the Fighting Spirit. Come back when you have them.', cid)
				talk_state = 0
			end
		elseif msgcontains(msg, 'yes') and talk_state == 10 then
			talk_state = 0
			if getPlayerItemCount(cid,2498) >= 2 then
					if doPlayerRemoveItem(cid,2498,1) == TRUE and doPlayerRemoveItem(cid,2498,1) == TRUE then
						doPlayerAddItem(cid,5884,1)
										selfSay(done, cid)
					end

			else
				selfSay(item, cid)
			end


		elseif msgcontains(msg, 'infernal bolt') then
			if getPlayerItemCount(cid,5944) >= 1 then
				selfSay('Did you bring me the Soul Orb?', cid)
				talk_state = 11
			else
				selfSay('I need a {Soul Orb}, to give you the 10 Infernal Bolts. Come back when you have it.', cid)
				talk_state = 0
			end
		elseif msgcontains(msg, 'yes') and talk_state == 11 then
			talk_state = 0
			if getPlayerItemCount(cid,5944) >= 1 then
					if doPlayerRemoveItem(cid,5944,1) == TRUE then
						doPlayerAddItem(cid,6529,10)
										selfSay(done, cid)
					end

			else
				selfSay(item, cid)
			end

		elseif msgcontains(msg, 'elane crossbow') then
                             if getPlayerItemCount(cid,6087) >= 1 and getPlayerItemCount(cid,6088) >= 1 and getPlayerItemCount(cid,6089) >= 1 and getPlayerItemCount(cid,6090) >= 1 then
				selfSay('Did you bring me the Music Sheets?', cid)
				talk_state = 12
			else
				selfSay('I need those {Music Sheet\'s}, to give you elane\'s crossbow. Come back when you have it.', cid)
				talk_state = 0
			end
		elseif msgcontains(msg, 'yes') and talk_state == 12 then
			talk_state = 0
                             if getPlayerItemCount(cid,6087) >= 1 and getPlayerItemCount(cid,6088) >= 1 and getPlayerItemCount(cid,6089) >= 1 and getPlayerItemCount(cid,6090) >= 1 then
					if doPlayerRemoveItem(cid,6087,1) == TRUE and doPlayerRemoveItem(cid,6088,1) == TRUE and doPlayerRemoveItem(cid,6089,1) == TRUE and doPlayerRemoveItem(cid,6090,1) == TRUE then
						doPlayerAddItem(cid,5947,1)
										selfSay(done, cid)
					end

			else
				selfSay(item, cid)
			end

        elseif msgcontains(msg, 'no') and (talk_state >= 1 and talk_state <= 5) then
            selfSay('So Leave, LEAVE ME NOW!')
            talk_state = 0
        end
    -- Place all your code in here. Remember that hi, bye and all that stuff is already handled by the npcsystem, so you do not have to take care of that yourself.
    return true
end

npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback)
npcHandler:addModule(FocusModule:new())
 
Last edited:
Back
Top Bottom