Ir para conteúdo

Featured Replies

Postado

Olá, estou usando tfs 0.4 e eu estou precisando checar o nome do item na hora de fazer uma troca (via talkactions), o negocio é que eu uso um refine system e o nivel do item é definido pelo nome, entao um item +1 é nomedoitem +1, tipo Giant Sword +1. Preciso checar se o nome do item é, por exemplo, Giant Sword +16 na hora de fazer a troca

 

local item = 12609
local nome1 = getItemName(itemid.uid)
local nome2 = "Star wand"

if param == "wand" then
if nome1 == nome2 then
 doPlayerSendTextMessage(cid, 22, "Você fez uma troca de items!")
 --doPlayerRemoveItem(cid, 12609)
 doPlayerRemoveItem(cid, table["wand"].id, 1)
 doPlayerAddItem(cid, table["wand"].toid, 1)
 else
 doPlayerSendCancel(cid, "Você não tem o item necessário!")
end
return true
end

to tentando usar ai a funcao getItemName(uid) e tentei de tudo que é jeito já, o script de rima ta retornando isso no console:

[9:42:12.421] [Error - TalkAction Interface]
[9:42:12.423] data/talkactions/scripts/trocaritems.lua:onSay
[9:42:12.426] Description:
[9:42:12.427] data/talkactions/scripts/trocaritems.lua:9: attempt to index global 'itemid' (a nil value)
[9:42:12.428] stack traceback:
[9:42:12.428]   data/talkactions/scripts/trocaritems.lua:9: in function <data/talkactions/scripts/trocaritems.lua:1>

 

script completo (só editei a parte da wand)

function onSay(cid, words, param)
local money = 500
local table = {
 ["wand"] = {id = 12609, toid = 7754},
 ["sword"] = {id = 2408, toid = 7391},
}

local item = 12609
local nome1 = getItemName(itemid.uid)
local nome2 = "Star wand"

if param == "wand" then
if nome1 == nome2 then
 doPlayerSendTextMessage(cid, 22, "Você fez uma troca de items!")
 --doPlayerRemoveItem(cid, 12609)
 doPlayerRemoveItem(cid, table["wand"].id, 1)
 doPlayerAddItem(cid, table["wand"].toid, 1)
 else
 doPlayerSendCancel(cid, "Você não tem o item necessário!")
end
return true
end

if param == "sword" then
if getPlayerItemCount(cid, table["sword"].id) >= 1 then
if getPlayerMoney(cid) >= 500 then
doPlayerSendTextMessage(cid, 22, "Você fez uma troca de items!")
doPlayerRemoveMoney(cid, 500)
doPlayerRemoveItem(cid, table["sword"].id, 1)
doPlayerAddItem(cid, table["sword"].toid, 1)
else
doPlayerSendCancel(cid, " Você não tem dinheiro suficiente!")
end
else
doPlayerSendCancel(cid, " Você não tem o item necessário!")
end
end
return true
end

 

edit:

consegui fazer funcionar com o codigo 

local slotitem = getPlayerSlotItem(cid, CONST_SLOT_LEFT) -- edite o slot
local nomeitem = getItemNameById(slotitem.itemid) -- tipo isso
local slotitem2 = getPlayerSlotItem(cid, CONST_SLOT_RIGHT) -- edite o slot
local nomeitem2 = getItemNameById(slotitem.itemid) -- tipo isso
local nome2 = "Star wand +16"

if param == "wand" then
if nomeitem == nome2 or slotitem2 == nome2 then
 doPlayerSendTextMessage(cid, 22, "Você fez uma troca de items!")
 --doPlayerRemoveItem(cid, 12609)
 doPlayerRemoveItem(cid, table["wand"].id, 1)
 doPlayerAddItem(cid, table["wand"].toid, 1)
 else
 doPlayerSendCancel(cid, "Você não tem o item necessário!")
end
return true
end

mas ainda nao troca o item mesmo tendo a wad +16

edit: to pegando o nome padrao e nao o nome atual do item dai ta sempre retornando star wand em vez do star wand +16,, alguma ideia?

Editado por Gabrieldsadaxas (veja o histórico de edições)

Postado
function onSay(cid, words, param)
	local money = 500
	local slots, param = {CONST_SLOT_LEFT, CONST_SLOT_RIGHT}, param:lower()
	local table = {
		["wand"] = {id = 12609, toid = 7754, upgrade = 16},
		["sword"] = {id = 2408, toid = 7391, upgrade = 15},
	}
	local t = table[param]
	if not t then
		doPlayerSendTextMessage(cid, 22, "eu nao troco esse item, apenas wand ou sword!") return true
    	elseif getPlayerMoney(cid) < 500 then
		doPlayerSendTextMessage(cid, 22, "você nao tem 500 gps!") return true      
	end
	for _, ret in pairs(slots) do
		if getPlayerSlotItem(cid, ret).itemid == t.id then -- aqui ja faz a verificação se tem o item
			local var = getItemNameById(getPlayerSlotItem(cid, ret).itemid)
			local z = var:match("(%d+)")
			if z == nil or z < t.upgrade then
				doPlayerSendTextMessage(cid, 22, "o item n tem o upgrade necessario!") return true
			end
			doPlayerSendTextMessage(cid, 22, "Você fez uma troca de items!")
			doPlayerRemoveItem(cid, t.id)
			doPlayerAddItem(cid, t.toid, 1)
		end
	end
	return true
end

 

Editado por Vodkart (veja o histórico de edições)

vodkart_logo.png

[*Ninguém será digno do sucesso se não usar suas derrotas para conquistá-lo.*]

 

DISCORDvodkart#6090

 

Postado
  • Autor

não troca mesmo tendo o item no nivel certinho, acho que o comando ta procurando por uma "star wand 16" e nao uma "star wand +16"

Participe da conversa

Você pode postar agora e se cadastrar mais tarde. Se você tem uma conta, faça o login para postar com sua conta.

Visitante
Responder

Quem Está Navegando 0

  • Nenhum usuário registrado visualizando esta página.

Conteúdo Similar

Estatísticas dos Fóruns

  • Tópicos 96.9k
  • Posts 519.7k

Informação Importante

Confirmação de Termo