MA
action

Ajuda como modificar action do oneshot

Por maikons, 18 de jul. de 2015 em Archived

otserv
9
1.1k
maikonsM
18 de julho de 2015 às 13:51

O oneshot fez uma action muito foda

http://www.xtibia.com/forum/topic/187075-perfect-upgrade-system/

 

Mas eu queria modificar ela, pra toda vez que erra-se em vez de só falhar, qnd falha-se destrui-se a arma/armadura, odne eu mudo?

OmegaO
18 de julho de 2015 às 14:59

 

 

--[[

	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, false},
		[4] = {60, true, false},
		[5] = {45, true, false},
		[6] = {30, true, false},
		[7] = {25, true, false},
		[8] = {20, true, true},
		[9] = {15, true, true},
		[10] = {10, true, true},
		[11] = {10, true, true},
		[12] = {5, true, true}
	},
	broadcast = 7,
	attributes = {
		["attack"] = 2,
		["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 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
			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
		doRemoveItem(self.item.uid, 1)
		doPlayerSendTextMessage(uid, MESSAGE_STATUS_CONSOLE_BLUE, "You have broken your item while trying to upgrade it.")
	end
end

 

 

 

Assim deve quebrar o item toda vez que ele não conseguir o upgrade. É só substituir esse código pelo upgradesystem.lua original. Qualquer problema, avisa aí.

maikonsM
23 de julho de 2015 às 00:09

 

 

--[[

	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, false},
		[4] = {60, true, false},
		[5] = {45, true, false},
		[6] = {30, true, false},
		[7] = {25, true, false},
		[8] = {20, true, true},
		[9] = {15, true, true},
		[10] = {10, true, true},
		[11] = {10, true, true},
		[12] = {5, true, true}
	},
	broadcast = 7,
	attributes = {
		["attack"] = 2,
		["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 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
			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
		doRemoveItem(self.item.uid, 1)
		doPlayerSendTextMessage(uid, MESSAGE_STATUS_CONSOLE_BLUE, "You have broken your item while trying to upgrade it.")
	end
end

 

 

 

Assim deve quebrar o item toda vez que ele não conseguir o upgrade. É só substituir esse código pelo upgradesystem.lua original. Qualquer problema, avisa aí.

 

Me desculpa cara, fiquei sem internet

Muito obrigado, está funcionando!

Estou te dando 5 reps aqui!!!

 

Queria outra ajuda sua, se não for muito!

8306 é a pedra que você me ajudou a quando errar quebrar o item

Queria arrumar a pedra VIP do meu OT

Seria a 8300, quando erra-se com ela não quebra-se o item (com a 8300) volta-se pro nivel 0 de refinamento, como se nunca tive-se refinado a arma, mas não destrui-se

23 de julho de 2015 às 00:20

tem que criar outro script para de 8300

maikonsM
24 de julho de 2015 às 16:46

Claro, e vai ter q trocar a parte

doRemoveItem(item.uid, 1)

 

Pela função que zera o item, mas eu sou burro e não sei por isso peço ajuda de qm tem um olhar melhor pra script

maikonsM
27 de julho de 2015 às 19:17

Ué o pessoal aqui do fórum não sabe não?

zipter98Z
28 de julho de 2015 às 00:32

 

 

--[[
 
        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, false},
        [4] = {60, true, false},
        [5] = {45, true, false},
        [6] = {30, true, false},
        [7] = {25, true, false},
        [8] = {20, true, true},
        [9] = {15, true, true},
        [10] = {10, true, true},
        [11] = {10, true, true},
        [12] = {5, true, true}
    },
    broadcast = 7,
    attributes = {
        ["attack"] = 2,
        ["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 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
            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 item.itemid == 8300 then
            if self.item.level > 0 then
                self:setItemName(self:getItemName():gsub("%+(%d+)", ""))
                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, getItemAttribute(self.item.uid, key) - self.item.level * value)
                    end
                end
            end
        else
            doRemoveItem(self.item.uid, 1)
        end
        doPlayerSendTextMessage(uid, MESSAGE_STATUS_CONSOLE_BLUE, item.itemid == 8300 and "Your item level has been reseted." or "You have broken your item while trying to upgrade it.")
    end
end

Editado Julho 28 por zipter98

maikonsM
01 de agosto de 2015 às 02:06

brother só ficou com um pequeno bugzinho

21:27 You see a thaian sword                            +6 (Atk:52, Def:35).
It weighs 61.00 oz.
ItemID: [7391].
Position: [X: 982] [Y: 1013] [Z: 7].

Quando reseta não volta os espaços ai dps fica varios espaços

Sabe arrumar?


Pls galera, me ajudem a arrumar esses espaços!


Pls galera, me ajudem a arrumar esses espaços!


UP!

Editado Julho 28 por maikons

4 semanas depois...
BrunoB
25 de agosto de 2015 às 08:23

O tópico foi fechado e movido para lixeira por estar inativo a mais de 10 dias. Caso seja preciso reabrir o mesmo, favor entrar em contato com a equipe.