N
neowtwo
Invited
hola este script es para poteciar las armas, escudos. armaduras, etc. mi problema radica en que yo quiero que tambien de MAGICLEVEL, ABsorcion de fuego y todos los demas, solo me acepta Attack, defense, extradefense, armor y hitchance.... el script funciona perfectamente, pero cuando pongo magiclevel, (que lo pongo mal seguro) no me funciona. he puesto con el nombre de magicpoints, magiclevle. magicLevel. de to lo que se me ha ocurrido, he buscado por todos lados pero no doy con esto... gracias por todo de antemano.
He marcado con azul las areas donde imagino que se haria el cambio, o si hay alguna manera de poner que te de los atributos random.
gracias por todo!!
local stones = {
[27867] = {
minLevel = 0, -- minimum level to use
maxLevel = 500, -- maximum level to you can use
chance = 75, -- probability of leveling up
extraPercent = 0 -- extra attribute increase percentage
},
[27868] = {
minLevel = 15,
maxLevel = 500,
chance = 50,
extraPercent = 1
},
[27869] = {
minLevel = 30,
maxLevel = 500,
chance = 25,
extraPercent = 2
}
}
local attributes = {
[ITEM_ATTRIBUTE_ATTACK] = {
getValue = ItemType.getAttack,
percent = 2 -- attribute increase percentage in this case for attack
},
[ITEM_ATTRIBUTE_DEFENSE] = {
getValue = ItemType.getDefense,
percent = 2 -- attribute increase percentage in this case for defense
},
[ITEM_ATTRIBUTE_EXTRADEFENSE] = {
getValue = ItemType.getExtraDefense,
percent = 2 -- attribute increase percentage in this case for extraDefense
},
[ITEM_ATTRIBUTE_ARMOR] = {
getValue = ItemType.getArmor,
percent = 2 -- attribute increase percentage in this case for armor
},
[ITEM_ATTRIBUTE_HITCHANCE] = {
getValue = ItemType.getHitChance,
percent = 2 -- attribute increase percentage in this case for hitChance
}
}
local function onUpgradeLvl(level, chance, config)
local nextLevel = math.min(config.maxLevel, level +1)
if math.random(1, chance) <= config.chance then
return nextLevel
end
return level
end
local function isUpgradeable(item)
local it = item:getType()
return it:getAttack() > 0 or it:getDefense() > 0 or it:getArmor() > 0 or it:getExtraDefense() > 0
end
local function getItemLevel(item)
return item:getCustomAttribute("upgradeLevel") or 0
end
local function setItemLevel(item, level)
return item:setCustomAttribute("upgradeLevel", level)
end
local function upgradeValue(value, level, info, stone)
return value * ((1.0 + ((info.percent + stone.extraPercent) / 100)) * level)
end
local function doUpgrade(item, level, stone)
local itemType = item:getType()
if level <= 0 then
setItemLevel(item, level)
item:setAttribute(ITEM_ATTRIBUTE_NAME, itemType:getName())
for attribute, info in pairs(attributes) do
item:setAttribute(attribute, info.getValue(itemType))
end
return true
end
setItemLevel(item, level)
item:setAttribute(ITEM_ATTRIBUTE_NAME, string.format("%s +%u", itemType:getName(), level))
for attribute, info in pairs(attributes) do
local value = info.getValue(itemType)
if value ~= 0 then
item:setAttribute(attribute, upgradeValue(value, level, info, stone))
end
end
return true
end
local upgradeone = Action()
function upgradeone.onUse(player, item, fromPos, target, toPos, isHotkey)
if not target or not target:isItem() then
player:sendCancelMessage("You cannot use this object.")
return true
end
local stone = stones[item:getId()]
if not stone then
return false
end
if not isUpgradeable(target) then
player:sendCancelMessage("This item cannot be upgrade.")
return true
end
local level = getItemLevel(target)
if level < stone.minLevel then
player:sendCancelMessage(string.format("The minimum level to use is %d.", stone.minLevel))
return true
end
local newLevel = onUpgradeLvl(level, 100, stone)
if level >= stone.maxLevel then
player:getPosition():sendMagicEffect(CONST_ME_POFF, player)
player:sendCancelMessage("This item is already at its maximum level.")
return true
elseif newLevel == level then
player:say("Failed!", TALKTYPE_MONSTER_SAY)
player:getPosition():sendMagicEffect(CONST_ME_POFF)
elseif newLevel > level then
player:say("Success!", TALKTYPE_MONSTER_SAY)
player:getPosition():sendMagicEffect(CONST_ME_FIREWORK_YELLOW)
end
doUpgrade(target, newLevel, stone)
item:remove(1)
return true
end
for aid, _ in pairs(stones) do
upgradeone:id(aid)
end
upgradeone:register()
He marcado con azul las areas donde imagino que se haria el cambio, o si hay alguna manera de poner que te de los atributos random.
gracias por todo!!