Ir para conteúdo
  • 0

Problema com upgrade item


gabriel28

Pergunta

Estou usando um sistema de upgrade item que funcionava perfeitamente, dai hoje, adicionei uns novos itens no server, e mudei a id do item que da o upgrade e começou a dar esse erro quando uso o item pra dar o upgrade:
[18/12/2016 22:03:06] [Error - Action Interface] 
[18/12/2016 22:03:06] data/actions/scripts/upgrade.lua:onUse
[18/12/2016 22:03:06] Description: 
[18/12/2016 22:03:06] (luaDoItemSetAttribute) Invalid data type
 

Só que mesmo eu trocando para o id antigo, esse erro persiste. 
Por favor, alguém da uma ajuda ai, não faço ideia do porque isso aconteceu.

 

Segue os scripts:

 

Action:

Spoiler
function onUse(cid, item, fromPosition, itemEx, toPosition)	if isCreature(itemEx.uid) then			return doPlayerSendDefaultCancel(cid, RETURNVALUE_NOTPOSSIBLE)	end	local obj = UpgradeHandler:new(itemEx)	if(obj == false) then		return doPlayerSendCancel(cid, UpgradeHandler.message.notupgradeable)	end	local status = obj:refine(cid, item)	if status == "success" then		--doSendAnimatedText(toPosition, "Success!", COLOR_GREEN)		doSendMagicEffect(toPosition, CONST_ME_MAGIC_GREEN)	elseif status == "fail" then		--doSendAnimatedText(toPosition, "Fail!", COLOR_RED)		doSendMagicEffect(toPosition, CONST_ME_POFF)	else		doSendMagicEffect(toPosition, CONST_ME_POFF)	end	return trueend

 

 

 

lib:

 

Spoiler
--[[	PERFECT UPGRADE SYSTEM				2.0	Criado por Oneshot	É proibido a venda ou a cópia sem os devidos créditos desse script.]]--UpgradeHandler = {	levels = {		[1] = {100, false, false},		[2] = {85, false, false},		[3] = {75, false, false},		[4] = {60, true, false},		[5] = {50, true, false},		[6] = {40, true, false},		[7] = {30, true, false},		[8] = {20, true, true},		[9] = {10, true, true},		[10] = {5, true, true}	},	broadcast = 7,	attributes = {		["attack"] = 1,		["defense"] = 1,		["armor"] = 1	},	message = {		console = "Trying to refine %s to level +%s with %s%% success rate.",		success = "You have upgraded %s to level +%s",		fail = "You have failed in upgrade of %s to level +%s",		downgrade = "The upgrade level of %s has downgraded to +%s",		erase = "The upgrade level of %s has been erased.",		maxlevel = "The targeted %s is already on max upgrade level.",		notupgradeable = "This item is not upgradeable.",		broadcast = "The player %s was successful in upgrading %s to level +%s.\nCongratulations!!",		invalidtool = "This is not a valid upgrade tool.",		toolrange = "This upgrade tool can only be used in items with level between +%s and +%s"	},	tools = {		[8306] = {range = {0, 10}, info = {chance = 0, removeable = true}},			},	isEquipment = function(self)		local weaponType = self:getItemWeaponType()		return ((weaponType > 0 and weaponType < 7) or self.item.armor ~= 0)	end,	setItemName = function(self, name)		return doItemSetAttribute(self.item.uid, "name", name)	end,	chance = function(self)		local chances = {}		chances.upgrade = (self.levels[self.item.level + 1][1] or 100)		chances.downgrade = (self.item.level * 5)		chances.erase = (self.item.level * 3)		return chances	end}function UpgradeHandler:new(item)	local obj, ret = {}	obj.item = {}	obj.item.level = 0	obj.item.uid = item.uid	for key, value in pairs(getItemInfo(item.itemid)) do		obj.item[key] = value	end	ret = setmetatable(obj, {__index = function(self, index)		if _G[index] then			return (setmetatable({callback = _G[index]}, {__call = function(self, ...)				return self.callback(item.uid, ...)			end}))		else			return UpgradeHandler[index]		end	end})	if ret:isEquipment() then		ret:update()		return ret	end	return falseendfunction UpgradeHandler:update()	self.item.level = (tonumber(self:getItemName():match("%+(%d+)")) or 0)endfunction UpgradeHandler:refine(uid, item)	if not self.item then		doPlayerSendTextMessage(uid, MESSAGE_STATUS_CONSOLE_BLUE, self.message.notupgradeable)		return "miss"	end		local tool = self.tools[item.itemid]	if(tool == nil) then		doPlayerSendTextMessage(uid, MESSAGE_EVENT_DEFAULT, self.message.invalidtool)		return "miss"	end	if(self.item.level > #self.levels) then		doPlayerSendTextMessage(uid, MESSAGE_STATUS_CONSOLE_RED, self.message.maxlevel:format(self.item.name))		return "miss"	end	if(self.item.level < tool.range[1] or self.item.level >= tool.range[2]) then		doPlayerSendTextMessage(uid, MESSAGE_STATUS_CONSOLE_RED, self.message.toolrange:format(unpack(tool.range)))		return "miss"	end	local chance = (self:chance().upgrade + tool.info.chance)	doPlayerSendTextMessage(uid, MESSAGE_STATUS_CONSOLE_BLUE, self.message.console:format(self.item.name, (self.item.level + 1), math.min(100, chance)))	if(tool.info.removeable == true) then		doRemoveItem(item.uid, 1)	end	if chance * 100 > math.random(1, 10000) then		doPlayerSendTextMessage(uid, MESSAGE_STATUS_CONSOLE_ORANGE, self.message.success:format(self.item.name, (self.item.level + 1)))		if (self.item.level + 1) >= self.broadcast then			doBroadcastMessage(self.message.broadcast:format(getCreatureName(uid), self.item.name, (self.item.level + 1)))		end		self:setItemName((self.item.level > 0 and self:getItemName():gsub("%+(%d+)", "+".. (self.item.level + 1)) or (self:getItemName() .." +1")))		for key, value in pairs(self.attributes) do			if getItemAttribute(self.item.uid, key) ~= nil or self.item[key] ~= 0 then				doItemSetAttribute(self.item.uid, key, (self.item.level > 0 and getItemAttribute(self.item.uid, key) or self.item[key]) + value)			end		end		return "success"	else		if(self.levels[self.item.level][3] == true and (self:chance().erase * 100) > math.random(1, 10000)) then			doPlayerSendTextMessage(uid, MESSAGE_STATUS_CONSOLE_RED, self.message.erase:format(self.item.name))			self:setItemName(self.item.name)			for key, value in pairs(self.attributes) do				if self.item[key] > 0 then					doItemSetAttribute(self.item.uid, key, self.item[key])				end			end		elseif(self.levels[self.item.level][2] == true and (self:chance().downgrade * 100) > math.random(1, 10000)) then			doPlayerSendTextMessage(uid, MESSAGE_STATUS_CONSOLE_RED, self.message.downgrade:format(self.item.name, (self.item.level - 1)))			self:setItemName((self.item.level == 1 and self.item.name or self:getItemName():gsub("%+(%d+)", "+".. (self.item.level - 1))))			for key, value in pairs(self.attributes) do				if getItemAttribute(self.item.uid, key) ~= nil or self.item[key] ~= 0 then					doItemSetAttribute(self.item.uid, key, (self.item[key] + value * (self.item.level - 1)))				end			end		else			doPlayerSendTextMessage(uid, MESSAGE_STATUS_CONSOLE_RED, self.message.fail:format(self.item.name, (self.item.level + 1)))		end		return "fail"	endend

 

 

Se alguém puder ajudar, ficarei muito agradecido.

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

7 respostass a esta questão

Posts Recomendados

  • 0

Possivelmente o erro não está no script e sim no que tu fez a adicionar items. Esse negócio de adicionar items,  muitas das vezes buga o servidor de diversas formas. 

Link para o comentário
Compartilhar em outros sites

  • 0

O engraçado é que só esses sistema começou a dar erro. Todos os outros continuam funcionando perfeitamente.
A única solução que me vem a cabeça é recomeçar tudo de novo e ir vendo o que prejudicou esse script ou continuar montando o server sem ele. =/

Link para o comentário
Compartilhar em outros sites

  • 0
  • Administrador
Em 18/12/2016 at 22:18, gabriel28 disse:

[18/12/2016 22:03:06] (luaDoItemSetAttribute) Invalid data type

 

Fez alguma alteração na lib?

quando alterou o id do item no script, n adicionou caractere acidentalmente? 

tenta repor o arquivo da lib.

Link para o comentário
Compartilhar em outros sites

  • 0
12 horas atrás, Frenvius disse:

 

Fez alguma alteração na lib?

quando alterou o id do item no script, n adicionou caractere acidentalmente? 

tenta repor o arquivo da lib.

 

Eu já tentei repondo a lib mas mesmo assim não funciona. Não da erro algum quando abro o servidor, apenas quando tento usar o item.

Era um sistema que eu já tinha incluído no roteiro do server e muitas quests que fiz dão o item como recompensa. Esse erro me deu uma desanimada em prosseguir com o serve.

Link para o comentário
Compartilhar em outros sites

×
×
  • Criar Novo...