Ir para conteúdo

Featured Replies

Postado

O script eu "acho" não tenho certeza, ele funciona 90% os 10% eu "acho" que estar no arquivo upgrave<Actions> por que, tipo, o script funciona quando você tenta refinar um item que não pode ser refinado, o script mesmo fala que o item não pode ser refinado, quando um item estar no seu level máximo o script fala que ele não pode ser refinado por que já estar no level máximo. Mais quando ele tenta refinar um item da esse erro ai. Alguém me ajuda a resolver por favor. Obrigado desde já, rep+ pra quem ajudar.

 

 

image.thumb.png.5ac062278c1746b3ffbe6f5ed1a4cf69.png

image.png.979b5e8a63c6f7332518c1a087c7c8b9.png

image.png.cdabaa7fc24d1c520bf03cb6612c319e.png

 

upgradesystem <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, true, true},
        [2] = {90, true, true},
        [3] = {75, true, true},
        [4] = {60, true, true},
        [5] = {45, true, true},
        [6] = {30, true, true},
        [7] = {25, true, true},
        [8] = {20, true, true},
        [9] = {15, true, true},
        [10] = {5, true, true}

    },
    broadcast = 9,
    attributes = {
        ["attack"] = 2,
        ["defense"] = 2,
        ["armor"] = 2,
    },
    message = {
        console = "{Upgrade System} Refinando %s para o level adiante você tem %s%% de conseguir.",
        success = "{Upgrade System} Você conseguiu Refinar %s para o level +%s.",
        fail = "{Upgrade System} Você falhou a sua refinação.",
        downgrade = "{Upgrade System} Seu item %s voltou para o level +%s.",
        erase = "{Upgrade System} O level da refinação %s foi apagado.",
        maxlevel = "{Upgrade System} O item %s ja esta no level maximo.",
        notupgradeable = "{Upgrade System} Este item não é refinavel.",
        broadcast = "{Upgrade System} The player %s was successful in upgrading %s to level +%s.\nCongratulations!!",
        invalidtool = "{Upgrade System} Este não é um item de refinação valido.",
        toolrange = "{Upgrade System} Você so pode usar o refinamento do level +%s ate +%s."
    },
    tools = {
        [8300] = {range = {0, 10}, info = {chance = 0, removeable = true}},
        [8306] = {range = {0, 10}, info = {chance = 100, 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 * 11)
        
        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 false
end

function UpgradeHandler:update()
    self.item.level = (tonumber(self:getItemName():match("%+(%d+)")) or 0)
end

function 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
        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"
    elseif item.itemid == 8300 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
        return "fail"
    end
end

 

upgrade <ACTIONS>

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 true
end

 

o código está registrado assim no Actions.Xml

<action itemid="8300;8306" event="script" value="upgrade.lua"/>

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

  • Respostas 16
  • Visualizações 2.5k
  • Created
  • Última resposta

Top Posters In This Topic

Most Popular Posts

  • @Phineasz    --[[ 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] = {

  • leozincorsair
    leozincorsair

    Tenta esse mano e por action e so tem como colocar uma pedra de refinamento    Actions.xml  <action itemid="8306" event="script" value="upgradesystem.lua"/>   Script :

Posted Images

Postado

@Phineasz 

 

--[[

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] = {90, false, false},
        [3] = {75, false, true},
        [4] = {60, true, true},
        [5] = {45, true, true},
        [6] = {30, true, true},
        [7] = {25, true, true},
        [8] = {20, true, true},
        [9] = {15, true, true},
        [10] = {5, true, true}

    },
	broadcast = 9,
	attributes = {
		["attack"] = 2,
		["defense"] = 2,
		["armor"] = 2,
	},
    message = {
        console = "{Upgrade System} Refinando %s para o level adiante você tem %s%% de conseguir.",
        success = "{Upgrade System} Você conseguiu Refinar %s para o level +%s.",
        fail = "{Upgrade System} Você falhou a sua refinação.",
        downgrade = "{Upgrade System} Seu item %s voltou para o level +%s.",
        erase = "{Upgrade System} O level da refinação %s foi apagado.",
        maxlevel = "{Upgrade System} O item %s ja esta no level maximo.",
        notupgradeable = "{Upgrade System} Este item não é refinavel.",
        broadcast = "{Upgrade System} The player %s was successful in upgrading %s to level +%s.\nCongratulations!!",
        invalidtool = "{Upgrade System} Este não é um item de refinação valido.",
        toolrange = "{Upgrade System} Você so pode usar o refinamento do level +%s ate +%s."
    },
	tools = {
		[8300] = {range = {0, 10}, info = {chance = 0, removeable = true}},
                [8306] = {range = {0, 10}, info = {chance = 100, 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 * 11)
		
		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 false
end

function UpgradeHandler:update()
	self.item.level = (tonumber(self:getItemName():match("%+(%d+)")) or 0)
end

function 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
		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"
	elseif item.itemid == 8300 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
		return "fail"
	end
end

 

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 true

end

 

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

Postado
  • Autor

@Celulose mesmo erro brother

@victor4312 infelizmente não :(

 

eu fiz uns testes aqui, e o script eu acho que funciona até um certo ponto, eu tentei refinar um item que não pode ser refinado e o script me voltou dizendo que eu não posso refinar  o item, mais quando eu vou refinar um item que pode ser refinado da esse erro citado no tópico

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.6k

Informação Importante

Confirmação de Termo