Ir para conteúdo
  • 0

(Bug) NPC


BrunooMaciell

Pergunta

Estou com um BUG em um NPC relacionado a online point.

 

BUG

[09/08/2020 11:35:29] [Error - Npc interface] 
[09/08/2020 11:35:29] data/npc/scripts/trade/Lucy.lua:onCreatureSay
[09/08/2020 11:35:29] Description: 
[09/08/2020 11:35:29] data/lib/050-function.lua:227: attempt to index a boolean value
[09/08/2020 11:35:29] stack traceback:
[09/08/2020 11:35:29] 	data/lib/050-function.lua:227: in function 'getItemNameById'
[09/08/2020 11:35:29] 	data/npc/scripts/trade/Lucy.lua:65: in function 'callback'
[09/08/2020 11:35:29] 	data/npc/lib/npcsystem/npchandler.lua:391: in function 'onCreatureSay'
[09/08/2020 11:35:29] 	data/npc/scripts/trade/Lucy.lua:8: in function <data/npc/scripts/trade/Lucy.lua:8>

SCRIPT

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 creatureSayCallback(cid, type, msg)
if(not npcHandler:isFocused(cid)) then
return false
end

local talkUser = NPCHANDLER_CONVBEHAVIOR == CONVERSATION_DEFAULT and 0 or cid
------------------- Configuração dos Itens -----------------------

local items = {12683, 12682, 12684, 12681, 2365, 15600, 23828, 17069} -- ID dos Itens
local nome = {'pokeball backpack', 'greatball backpack', 'superball backpack', 'facebook backpack', 'backpack of holding', 'love teddy', 'dogs house', 'music box'}


------------------- MESSAGES INICIAIS ----------------------------------------
if msgcontains(msg, nome[1]) then
selfSay('Deseja comprar 1x {'..getItemNameById(items[1])..'} Por 10 online points?', cid)
selfSay('Para saber quantos pontos possui digite {!opshop}.', cid)
talkState[talkUser] = 1

elseif msgcontains(msg, nome[2]) then
selfSay('Deseja comprar um {'..getItemNameById(items[2])..'} Por 12 online points?', cid)
selfSay('Para saber quantos pontos possui digite {!opshop}.', cid)
talkState[talkUser] = 2

elseif msgcontains(msg, nome[3]) then
selfSay('Deseja comprar um {'..getItemNameById(items[3])..'} Por 15 online points?', cid)
selfSay('Para saber quantos pontos possui digite {!opshop}.', cid)
talkState[talkUser] = 3

elseif msgcontains(msg, nome[4]) then
selfSay('Deseja comprar um {'..getItemNameById(items[5])..'} Por 20 online points?', cid)
selfSay('Para saber quantos pontos possui digite {!opshop}.', cid)
talkState[talkUser] = 4

elseif msgcontains(msg, nome[5]) then
selfSay('Deseja comprar um {'..getItemNameById(items[6])..'} Por 25 online points?', cid)
selfSay('Para saber quantos pontos possui digite {!opshop}.', cid)
talkState[talkUser] = 5

elseif msgcontains(msg, nome[6]) then
selfSay('Deseja comprar um {'..getItemNameById(items[7])..'} Por 30 online points?', cid)
selfSay('Para saber quantos pontos possui digite {!opshop}.', cid)
talkState[talkUser] = 6

elseif msgcontains(msg, nome[7]) then
selfSay('Deseja comprar um {'..getItemNameById(items[8])..'} Por 40 online points?', cid)
selfSay('Para saber quantos pontos possui digite {!opshop}.', cid)
talkState[talkUser] = 7

elseif msgcontains(msg, nome[8]) then
selfSay('Deseja comprar um {'..getItemNameById(items[9])..'} Por 50 online points?', cid)
selfSay('Para saber quantos pontos possui digite {!opshop}.', cid)
talkState[talkUser] = 8

elseif (msgcontains(msg, 'negociar') or msgcontains(msg, 'trade')) then
selfSay('No momento tenho disponivel em meu estoque os seguintes itens: {'..getItemNameById(items[1])..'}, {'..getItemNameById(items[2])..'}, {'..getItemNameById(items[3])..'}, {'..getItemNameById(items[4])..'}, {'..getItemNameById(items[5])..'}, {'..getItemNameById(items[6])..'}, {'..getItemNameById(items[7])..'}, {'..getItemNameById(items[8])..'}, {'..getItemNameById(items[9])..'} e {'..getItemNameById(items[10])..'}.', cid)
talkState[talkUser] = 0

---------------------- NEGOCIAÇÃO -------------------------------

elseif talkState[talkUser] == 1 then
if (msgcontains(msg, 'sim') or msgcontains(msg, 'yes')) then
local qnt = 10
local bonuscoin = 5984548
    if getPlayerStorageValue(cid, bonuscoin) >= qnt then
        setPlayerStorageValue(cid, bonuscoin, getPlayerStorageValue(cid, bonuscoin) - qnt)
        doPlayerAddItem(cid, items[1], 1)
        selfSay('Parabéns, voce acabou de adquirir 1x '..getItemNameById(items[1])..'!', cid)
		doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Agora voce tem: " .. getPlayerStorageValue(cid,5984548) .. " Online Bonus.")
    else
        selfSay('Voce precisa de 10 online bonus para adquirir esse item.', cid)
     talkState[talkUser] = 0
    end
end

elseif talkState[talkUser] == 2 then
if (msgcontains(msg, 'sim') or msgcontains(msg, 'yes')) then
local qnt = 12
local bonuscoin = 5984548
    if getPlayerStorageValue(cid, bonuscoin) >= qnt then
        setPlayerStorageValue(cid, bonuscoin, getPlayerStorageValue(cid, bonuscoin) - qnt)
        doPlayerAddItem(cid, items[2], 1)
        selfSay('Parabens, voce acaba de adquirir um '..getItemNameById(items[2])..'.', cid)
    else
        selfSay('Voce precisa de 13 online bonus para adquirir esse item.', cid)
    talkState[talkUser] = 0
    end
end

elseif talkState[talkUser] == 3 then
if (msgcontains(msg, 'sim') or msgcontains(msg, 'yes')) then
local bonuscoin = 5984548
local qnt = 15
    if getPlayerStorageValue(cid, bonuscoin) >= qnt then
        setPlayerStorageValue(cid, bonuscoin, getPlayerStorageValue(cid, bonuscoin) - qnt)
        doPlayerAddItem(cid, items[3], 1)
        selfSay('Parabens, voce acaba de adquirir um '..getItemNameById(items[3])..'.', cid)
    else
        selfSay('Voce precisa de 15 online bonus para adquirir esse item.', cid)
    talkState[talkUser] = 0
    end
end

elseif talkState[talkUser] == 4 then
if (msgcontains(msg, 'sim') or msgcontains(msg, 'yes')) then
if getPlayerStorageValue(cid, 5984548) >= 20 then
        setPlayerStorageValue(cid, 5984548, getPlayerStorageValue(cid, 5984548) - 10)
        doPlayerAddItem(cid, items[5], 1)
        selfSay('Parabens, voce acaba de adquirir um '..getItemNameById(items[5])..'.', cid)
    else
        selfSay('Voce precisa de 20 online bonus para adquirir esse item.', cid)
    talkState[talkUser] = 0
    end
end

elseif talkState[talkUser] == 5 then
if (msgcontains(msg, 'sim') or msgcontains(msg, 'yes')) then
if getPlayerStorageValue(cid, 5984548) >= 25 then
        setPlayerStorageValue(cid, 5984548, getPlayerStorageValue(cid, 5984548) - 10)
        doPlayerAddItem(cid, items[6], 1)
        selfSay('Parabens, voce acaba de adquirir um '..getItemNameById(items[6])..'.', cid)
    else
        selfSay('Voce precisa de 30 online bonus para adquirir esse item.', cid)
    talkState[talkUser] = 0
    end
end

elseif talkState[talkUser] == 6 then
if (msgcontains(msg, 'sim') or msgcontains(msg, 'yes')) then
if getPlayerStorageValue(cid, 5984548) >= 30 then
        setPlayerStorageValue(cid, 5984548, getPlayerStorageValue(cid, 5984548) - 10)
        doPlayerAddItem(cid, items[7], 1)
        selfSay('Parabens, voce acaba de adquirir um '..getItemNameById(items[7])..'.', cid)
    else
        selfSay('Voce precisa de 35 online bonus para adquirir esse item.', cid)
    talkState[talkUser] = 0
    end
end

elseif talkState[talkUser] == 7 then
if (msgcontains(msg, 'sim') or msgcontains(msg, 'yes')) then
if getPlayerStorageValue(cid, 5984548) >= 40 then
        setPlayerStorageValue(cid, 5984548, getPlayerStorageValue(cid, 5984548) - 10)
        doPlayerAddItem(cid, items[8], 1)
        selfSay('Parabens, voce acaba de adquirir um '..getItemNameById(items[8])..'.', cid)
    else
        selfSay('Voce precisa de 40 online bonus para adquirir esse item.', cid)
    talkState[talkUser] = 0
    end
end

elseif talkState[talkUser] == 8 then
if (msgcontains(msg, 'sim') or msgcontains(msg, 'yes')) then
if getPlayerStorageValue(cid, 5984548) >= 50 then
        setPlayerStorageValue(cid, 5984548, getPlayerStorageValue(cid, 5984548) - 10)
        doPlayerAddItem(cid, items[9], 1)
        selfSay('Parabens, voce acaba de adquirir um '..getItemNameById(items[9])..'.', cid)
    else
        selfSay('Voce precisa de 45 online bonus para adquirir esse item.', cid)
    talkState[talkUser] = 0
    end
end

end
return true
end

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

OBS: Caso precise de mais alguma script so fala que posto  ^^

 

REP+++

Link para o comentário
Compartilhar em outros sites

10 respostass a esta questão

Posts Recomendados

  • 0
Em 11/08/2020 em 22:03, BrunooMaciell disse:

sim 

na tabela items só existem 8 elementos. 
na linha 65, existe uma concatenação de dados que está buscando, na tabela "items", mais de 8 elementos; mais precisamente, estou citando isso aqui:
 

Citar

, {'..getItemNameById(items[9])..'} e {'..getItemNameById(items[10])..'


Para solucionar isso, tu pode remover essas duas menções excedentes ou formular uma função que pegue os dados de forma automática da tabela.

Editado por Poccnn
ortografia
Link para o comentário
Compartilhar em outros sites

  • 0
9 horas atrás, Poccnn disse:

na tabela items só existem 8 elementos. 
na linha 65, existe uma concatenação de dados que está buscando, na tabela "items", mais de 8 elementos; mais precisamente, estou citando isso aqui:
 


Para solucionar isso, tu pode remover essas duas menções excedentes ou formular uma função que pegue os dados de forma automática da tabela.

Entao amigo.

 

Eu nao entendi foi nada kkkkkkkkkkkkk se tu puder arruma pra min pois nao entendi nada kkkkkkk

 

Bom este BUG ele sempre da quando vo fala com NPC so de FALA com NPC ele ja BUGA ele ja da isso 

Link para o comentário
Compartilhar em outros sites

  • 0
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 _,_,itemName = nil,nil,''

local function getCount(str) --[[( Marcryzius )]]
	return tonumber(str:match('(%d+)')) or 0
end

local function tradeSay(str) --[[( Marcryzius )]]--
local tab,str = {},str:lower()
	tab[1] = str:match('sell') or str:match('buy') or ''  -- Retorna se vai comprar ou vender.
	tab[2] = getCount(str) < 1 and 1 or getCount(str) -- Retorna a quantidade.
	tab[3] = str:match(tab[1]..(str:match('(%d+)') and "%s%d+%s" or " ").."(.+)") -- Retorna o nome do item.
	if not(tab[3])then 
	local name = ''
		for nome in str:gmatch("(%a+)") do
			if(nome)then
				name = name..(name ~= '' and ' ' or '')..nome
			end
		end
		tab[3] = name
	end
	return unpack(tab)
end

local function getTabNames(tab) --[[( Marcryzius )]]--
-- Essa função retornar o valor dos index de uma tabela.
local str = {}
	for t,v in pairs(tab) do
		if v then
			str[#str+1] = t
		end
	end
	return table.concat(str,', ')..'.'
end

------------------- Configuração dos Itens -----------------------
local bonuscoin = 5984548
local tab = {
	--[nome] = {qte=quantidade de bonus coin,ID=ID dos Itens}
	["pokeball"] = {qte=10,ID=12683},
	["greatball"] = {qte=12,ID=12682},
	["superball"] = {qte=15,ID=12684},
	["facebook"] = {qte=20,ID=12681},
	["holding"] = {qte=25,ID=2365},
	["love teddy"] = {qte=30,ID=15600},
	["dogs house"] = {qte=40,ID=23828},
	["music box"] = {qte=50,ID=17069},
}

function creatureSayCallback(cid, type, msg)
if(not npcHandler:isFocused(cid)) then return false end
local talkUser = NPCHANDLER_CONVBEHAVIOR == CONVERSATION_DEFAULT and 0 or cid
local _,_,prod = tradeSay(msg)

------------------- MESSAGES INICIAIS ----------------------------------------
	if(tab[prod])then
		itemName = prod
		selfSay('Deseja comprar um {'..getItemNameById(tab[itemName].ID)..'} Por '..(tab[itemName].qte)..' online points?', cid)
		selfSay('Para saber quantos pontos possui digite {!opshop}.', cid)
		talkState[talkUser] = 1
	elseif (msgcontains(msg, 'negociar') or msgcontains(msg, 'trade')) then
		selfSay('No momento tenho disponivel em meu estoque os seguintes itens: '..getTabNames(tab), cid)
		talkState[talkUser] = 0
---------------------- NEGOCIAÇÃO -------------------------------
	elseif talkState[talkUser] == 1 then
		if (msgcontains(msg, 'sim') or msgcontains(msg, 'yes')) then
			if getPlayerStorageValue(cid, bonuscoin) >= tab[itemName].qte then
				setPlayerStorageValue(cid, bonuscoin, getPlayerStorageValue(cid, bonuscoin) - tab[itemName].qte)
				doPlayerAddItem(cid, tab[itemName].ID, 1)
				selfSay('Parabéns, voce acabou de adquirir 1x '..getItemNameById(tab[itemName].ID)..'!', cid)
				doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Agora voce tem: " .. getPlayerStorageValue(cid,bonuscoin) .. " Online Bonus.")
			else
				selfSay('Voce precisa de '..(tab[itemName].qte..' online bonus para adquirir esse item.', cid)
			end
		else
			selfSay('Morra! FDP!', cid)		
		end
		talkState[talkUser] = 0	
	else
		npcHandler:say('Foda-se! nao sei o que tu quer.', cid)
	end
	return true
end
npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback)
npcHandler:addModule(FocusModule:new())

 

Link para o comentário
Compartilhar em outros sites

  • 0
17 minutos atrás, Poccnn disse:

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 _,_,itemName = nil,nil,''

local function getCount(str) --[[( Marcryzius )]]
	return tonumber(str:match('(%d+)')) or 0
end

local function tradeSay(str) --[[( Marcryzius )]]--
local tab,str = {},str:lower()
	tab[1] = str:match('sell') or str:match('buy') or ''  -- Retorna se vai comprar ou vender.
	tab[2] = getCount(str) < 1 and 1 or getCount(str) -- Retorna a quantidade.
	tab[3] = str:match(tab[1]..(str:match('(%d+)') and "%s%d+%s" or " ").."(.+)") -- Retorna o nome do item.
	if not(tab[3])then 
	local name = ''
		for nome in str:gmatch("(%a+)") do
			if(nome)then
				name = name..(name ~= '' and ' ' or '')..nome
			end
		end
		tab[3] = name
	end
	return unpack(tab)
end

local function getTabNames(tab) --[[( Marcryzius )]]--
-- Essa função retornar o valor dos index de uma tabela.
local str = {}
	for t,v in pairs(tab) do
		if v then
			str[#str+1] = t
		end
	end
	return table.concat(str,', ')..'.'
end

------------------- Configuração dos Itens -----------------------
local bonuscoin = 5984548
local tab = {
	--[nome] = {qte=quantidade de bonus coin,ID=ID dos Itens}
	["pokeball"] = {qte=10,ID=12683},
	["greatball"] = {qte=12,ID=12682},
	["superball"] = {qte=15,ID=12684},
	["facebook"] = {qte=20,ID=12681},
	["holding"] = {qte=25,ID=2365},
	["love teddy"] = {qte=30,ID=15600},
	["dogs house"] = {qte=40,ID=23828},
	["music box"] = {qte=50,ID=17069},
}

function creatureSayCallback(cid, type, msg)
if(not npcHandler:isFocused(cid)) then return false end
local talkUser = NPCHANDLER_CONVBEHAVIOR == CONVERSATION_DEFAULT and 0 or cid
local _,_,prod = tradeSay(msg)

------------------- MESSAGES INICIAIS ----------------------------------------
	if(tab[prod])then
		itemName = prod
		selfSay('Deseja comprar um {'..getItemNameById(tab[itemName].ID)..'} Por '..(tab[itemName].qte)..' online points?', cid)
		selfSay('Para saber quantos pontos possui digite {!opshop}.', cid)
		talkState[talkUser] = 1
	elseif (msgcontains(msg, 'negociar') or msgcontains(msg, 'trade')) then
		selfSay('No momento tenho disponivel em meu estoque os seguintes itens: '..getTabNames(tab), cid)
		talkState[talkUser] = 0
---------------------- NEGOCIAÇÃO -------------------------------
	elseif talkState[talkUser] == 1 then
		if (msgcontains(msg, 'sim') or msgcontains(msg, 'yes')) then
			if getPlayerStorageValue(cid, bonuscoin) >= tab[itemName].qte then
				setPlayerStorageValue(cid, bonuscoin, getPlayerStorageValue(cid, bonuscoin) - tab[itemName].qte)
				doPlayerAddItem(cid, tab[itemName].ID, 1)
				selfSay('Parabéns, voce acabou de adquirir 1x '..getItemNameById(tab[itemName].ID)..'!', cid)
				doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Agora voce tem: " .. getPlayerStorageValue(cid,bonuscoin) .. " Online Bonus.")
			else
				selfSay('Voce precisa de '..(tab[itemName].qte..' online bonus para adquirir esse item.', cid)
			end
		else
			selfSay('Morra! FDP!', cid)		
		end
		talkState[talkUser] = 0	
	else
		npcHandler:say('Foda-se! nao sei o que tu quer.', cid)
	end
	return true
end
npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback)
npcHandler:addModule(FocusModule:new())

 

Deu este BUG

 

[14/08/2020 12:38:24] [Warning - NpcScript::NpcScript] Cannot load script: data/npc/scripts/trade/Lucy.lua
[14/08/2020 12:38:24] data/npc/scripts/trade/Lucy.lua:79: ')' expected near ','
[14/08/2020 12:38:26] [Error - LuaScriptInterface::loadFile] data/npc/scripts/trade/Lucy.lua:79: ')' expected near ','
[14/08/2020 12:38:26] [Warning - NpcScript::NpcScript] Cannot load script: data/npc/scripts/trade/Lucy.lua
[14/08/2020 12:38:26] data/npc/scripts/trade/Lucy.lua:79: ')' expected near ','

Link para o comentário
Compartilhar em outros sites

  • 0
7 minutos atrás, BrunooMaciell disse:

Deu este BUG

 

[14/08/2020 12:38:24] [Warning - NpcScript::NpcScript] Cannot load script: data/npc/scripts/trade/Lucy.lua
[14/08/2020 12:38:24] data/npc/scripts/trade/Lucy.lua:79: ')' expected near ','
[14/08/2020 12:38:26] [Error - LuaScriptInterface::loadFile] data/npc/scripts/trade/Lucy.lua:79: ')' expected near ','
[14/08/2020 12:38:26] [Warning - NpcScript::NpcScript] Cannot load script: data/npc/scripts/trade/Lucy.lua
[14/08/2020 12:38:26] data/npc/scripts/trade/Lucy.lua:79: ')' expected near ','

substitua essa linha do código:

Citar

selfSay('Voce precisa de '..(tab[itemName].qte..' online bonus para adquirir esse item.', cid)

 por essa:

Citar

selfSay('Voce precisa de '..(tab[itemName].qte)..' online bonus para adquirir esse item.', cid)

 

Link para o comentário
Compartilhar em outros sites

  • 0
8 minutos atrás, Poccnn disse:

substitua essa linha do código:

 por essa:

 

Deu este BUG

 


[14/08/2020 12:56:11] [Error - Npc interface] 
[14/08/2020 12:56:11] data/npc/scripts/trade/Lucy.lua:onCreatureSay
[14/08/2020 12:56:11] Description: 
[14/08/2020 12:56:11] data/npc/scripts/trade/Lucy.lua:71: attempt to index global 'talkState' (a nil value)
[14/08/2020 12:56:11] stack traceback:
[14/08/2020 12:56:11]     data/npc/scripts/trade/Lucy.lua:71: in function 'callback'
[14/08/2020 12:56:11]     data/npc/lib/npcsystem/npchandler.lua:391: in function 'onCreatureSay'
[14/08/2020 12:56:11]     data/npc/scripts/trade/Lucy.lua:6: in function <data/npc/scripts/trade/Lucy.lua:6>

Link para o comentário
Compartilhar em outros sites

  • 0
23 horas atrás, BrunooMaciell disse:

Deu este BUG

 


[14/08/2020 12:56:11] [Error - Npc interface] 
[14/08/2020 12:56:11] data/npc/scripts/trade/Lucy.lua:onCreatureSay
[14/08/2020 12:56:11] Description: 
[14/08/2020 12:56:11] data/npc/scripts/trade/Lucy.lua:71: attempt to index global 'talkState' (a nil value)
[14/08/2020 12:56:11] stack traceback:
[14/08/2020 12:56:11]     data/npc/scripts/trade/Lucy.lua:71: in function 'callback'
[14/08/2020 12:56:11]     data/npc/lib/npcsystem/npchandler.lua:391: in function 'onCreatureSay'
[14/08/2020 12:56:11]     data/npc/scripts/trade/Lucy.lua:6: in function <data/npc/scripts/trade/Lucy.lua:6>

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 talkState = {}
local _,_,itemName = nil,nil,''

local function getCount(str) --[[( Marcryzius )]]
	return tonumber(str:match('(%d+)')) or 0
end

local function tradeSay(str) --[[( Marcryzius )]]--
local tab,str = {},str:lower()
	tab[1] = str:match('sell') or str:match('buy') or ''  -- Retorna se vai comprar ou vender.
	tab[2] = getCount(str) < 1 and 1 or getCount(str) -- Retorna a quantidade.
	tab[3] = str:match(tab[1]..(str:match('(%d+)') and "%s%d+%s" or " ").."(.+)") -- Retorna o nome do item.
	if not(tab[3])then 
	local name = ''
		for nome in str:gmatch("(%a+)") do
			if(nome)then
				name = name..(name ~= '' and ' ' or '')..nome
			end
		end
		tab[3] = name
	end
	return unpack(tab)
end

local function getTabNames(tab) --[[( Marcryzius )]]--
-- Essa função retornar o valor dos index de uma tabela.
local str = {}
	for t,v in pairs(tab) do
		if v then
			str[#str+1] = t
		end
	end
	return table.concat(str,', ')..'.'
end

------------------- Configuração dos Itens -----------------------
local bonuscoin = 5984548
local tab = {
	--[nome] = {qte=quantidade de bonus coin,ID=ID dos Itens}
	["pokeball"] = {qte=10,ID=12683},
	["greatball"] = {qte=12,ID=12682},
	["superball"] = {qte=15,ID=12684},
	["facebook"] = {qte=20,ID=12681},
	["holding"] = {qte=25,ID=2365},
	["love teddy"] = {qte=30,ID=15600},
	["dogs house"] = {qte=40,ID=23828},
	["music box"] = {qte=50,ID=17069},
}

function creatureSayCallback(cid, type, msg)
if(not npcHandler:isFocused(cid)) then return false end
local talkUser = NPCHANDLER_CONVBEHAVIOR == CONVERSATION_DEFAULT and 0 or cid
local _,_,prod = tradeSay(msg)

------------------- MESSAGES INICIAIS ----------------------------------------
	if(tab[prod])then
		itemName = prod
		selfSay('Deseja comprar um {'..getItemNameById(tab[itemName].ID)..'} Por '..(tab[itemName].qte)..' online points?', cid)
		selfSay('Para saber quantos pontos possui digite {!opshop}.', cid)
		talkState[talkUser] = 1
	elseif (msgcontains(msg, 'negociar') or msgcontains(msg, 'trade')) then
		selfSay('No momento tenho disponivel em meu estoque os seguintes itens: '..getTabNames(tab), cid)
		talkState[talkUser] = 0
---------------------- NEGOCIAÇÃO -------------------------------
	elseif talkState[talkUser] == 1 then
		if (msgcontains(msg, 'sim') or msgcontains(msg, 'yes')) then
			if getPlayerStorageValue(cid, bonuscoin) >= tab[itemName].qte then
				setPlayerStorageValue(cid, bonuscoin, getPlayerStorageValue(cid, bonuscoin) - tab[itemName].qte)
				doPlayerAddItem(cid, tab[itemName].ID, 1)
				selfSay('Parabéns, voce acabou de adquirir 1x '..getItemNameById(tab[itemName].ID)..'!', cid)
				doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Agora voce tem: " .. getPlayerStorageValue(cid,bonuscoin) .. " Online Bonus.")
			else
				selfSay('Voce precisa de '..(tab[itemName].qte)..' online bonus para adquirir esse item.', cid)
			end
		else
			selfSay('Morra! FDP!', cid)		
		end
		talkState[talkUser] = 0	
	else
		npcHandler:say('Foda-se! nao sei o que tu quer.', cid)
	end
	return true
end
npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback)
npcHandler:addModule(FocusModule:new())

 

Link para o comentário
Compartilhar em outros sites

  • 0
24 minutos atrás, Poccnn disse:

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 talkState = {}
local _,_,itemName = nil,nil,''

local function getCount(str) --[[( Marcryzius )]]
	return tonumber(str:match('(%d+)')) or 0
end

local function tradeSay(str) --[[( Marcryzius )]]--
local tab,str = {},str:lower()
	tab[1] = str:match('sell') or str:match('buy') or ''  -- Retorna se vai comprar ou vender.
	tab[2] = getCount(str) < 1 and 1 or getCount(str) -- Retorna a quantidade.
	tab[3] = str:match(tab[1]..(str:match('(%d+)') and "%s%d+%s" or " ").."(.+)") -- Retorna o nome do item.
	if not(tab[3])then 
	local name = ''
		for nome in str:gmatch("(%a+)") do
			if(nome)then
				name = name..(name ~= '' and ' ' or '')..nome
			end
		end
		tab[3] = name
	end
	return unpack(tab)
end

local function getTabNames(tab) --[[( Marcryzius )]]--
-- Essa função retornar o valor dos index de uma tabela.
local str = {}
	for t,v in pairs(tab) do
		if v then
			str[#str+1] = t
		end
	end
	return table.concat(str,', ')..'.'
end

------------------- Configuração dos Itens -----------------------
local bonuscoin = 5984548
local tab = {
	--[nome] = {qte=quantidade de bonus coin,ID=ID dos Itens}
	["pokeball"] = {qte=10,ID=12683},
	["greatball"] = {qte=12,ID=12682},
	["superball"] = {qte=15,ID=12684},
	["facebook"] = {qte=20,ID=12681},
	["holding"] = {qte=25,ID=2365},
	["love teddy"] = {qte=30,ID=15600},
	["dogs house"] = {qte=40,ID=23828},
	["music box"] = {qte=50,ID=17069},
}

function creatureSayCallback(cid, type, msg)
if(not npcHandler:isFocused(cid)) then return false end
local talkUser = NPCHANDLER_CONVBEHAVIOR == CONVERSATION_DEFAULT and 0 or cid
local _,_,prod = tradeSay(msg)

------------------- MESSAGES INICIAIS ----------------------------------------
	if(tab[prod])then
		itemName = prod
		selfSay('Deseja comprar um {'..getItemNameById(tab[itemName].ID)..'} Por '..(tab[itemName].qte)..' online points?', cid)
		selfSay('Para saber quantos pontos possui digite {!opshop}.', cid)
		talkState[talkUser] = 1
	elseif (msgcontains(msg, 'negociar') or msgcontains(msg, 'trade')) then
		selfSay('No momento tenho disponivel em meu estoque os seguintes itens: '..getTabNames(tab), cid)
		talkState[talkUser] = 0
---------------------- NEGOCIAÇÃO -------------------------------
	elseif talkState[talkUser] == 1 then
		if (msgcontains(msg, 'sim') or msgcontains(msg, 'yes')) then
			if getPlayerStorageValue(cid, bonuscoin) >= tab[itemName].qte then
				setPlayerStorageValue(cid, bonuscoin, getPlayerStorageValue(cid, bonuscoin) - tab[itemName].qte)
				doPlayerAddItem(cid, tab[itemName].ID, 1)
				selfSay('Parabéns, voce acabou de adquirir 1x '..getItemNameById(tab[itemName].ID)..'!', cid)
				doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Agora voce tem: " .. getPlayerStorageValue(cid,bonuscoin) .. " Online Bonus.")
			else
				selfSay('Voce precisa de '..(tab[itemName].qte)..' online bonus para adquirir esse item.', cid)
			end
		else
			selfSay('Morra! FDP!', cid)		
		end
		talkState[talkUser] = 0	
	else
		npcHandler:say('Foda-se! nao sei o que tu quer.', cid)
	end
	return true
end
npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback)
npcHandler:addModule(FocusModule:new())

 

Foi vlw demais mano vlw mesmo ^^ 

Link para o comentário
Compartilhar em outros sites

  • Quem Está Navegando   0 membros estão online

    • Nenhum usuário registrado visualizando esta página.
×
×
  • Criar Novo...