Ir para conteúdo

[Ajuda] Refinamento


Riuzaky

Posts Recomendados

Bom eu tenho este script de refinamento, mas eu queria saber se alguém conseguiria fazer um ajuste pra mim...

Um item pode ser refinado até +10, adicionar uma chance de quebra ao item e mudar o atk q ganha

 

Vamos aos Exemplos:

 

Sword, ao ser refinado, ganha 10% do seu atk e adiciona 10% de quebrar a cada nível de refinamento.

Ou seja

Atk normal da sword: 14

+1 (ganha 10% do seu atk e tem 10% de chance de quebrar) 15

+2 (ganha 10% do seu atk e tem 20% de chance de quebrar) 16

+3 (ganha 10% do seu atk e tem 30% de chance de quebrar) 18

+4 (ganha 10% do seu atk e tem 40% de chance de quebrar) 20

+5 (ganha 10% do seu atk e tem 50% de chance de quebrar) 22

+6 (ganha 10% do seu atk e tem 60% de chance de quebrar) 24

+7 (ganha 10% do seu atk e tem 70% de chance de quebrar) 27

+8 (ganha 10% do seu atk e tem 80% de chance de quebrar) 30

+9 (ganha 10% do seu atk e tem 90% de chance de quebrar) 33

+10 (ganha 10% do seu atk e tem 100% de chance de quebrar) 36

 

 

 

 

 

Magic Sword, ao ser refinado, ganha 10% do seu atk e adiciona 10% de quebrar a cada nível de refinamento.

Ou seja

Atk normal da sword: 48

 

+1 (ganha 10% do seu atk e tem 10% de chance de quebrar) 52

+2 (ganha 10% do seu atk e tem 20% de chance de quebrar) 58

+3 (ganha 10% do seu atk e tem 30% de chance de quebrar) 63

+4 (ganha 10% do seu atk e tem 40% de chance de quebrar) 70

+5 (ganha 10% do seu atk e tem 50% de chance de quebrar) 77

+6 (ganha 10% do seu atk e tem 60% de chance de quebrar) 85

+7 (ganha 10% do seu atk e tem 70% de chance de quebrar) 93

+8 (ganha 10% do seu atk e tem 80% de chance de quebrar) 102

+9 (ganha 10% do seu atk e tem 90% de chance de quebrar) 113

+10 (ganha 10% do seu atk e tem 100% de chance de quebrar) 124

 

 

 

Script Refinamento

 

-- &a = weapon attack

-- &d = weapon defense

-- &s = shield defense

-- &p = armor defense

-- # = nivel do item

-- @ = max level

local gain = {

gainArmor='&p+(1)',loseArmor='&p-(1)',

gainShield='&s+(1)',loseShield='&s-(1)',

gainAttack='&a+(2)',loseAttack='&a-(2)',

gainDefense='&d+(1)',loseDefense='&d-(1)',

chance='(100/math.sqrt((((@/2)+(#*2))/@)*#))',

maxlvl = 10,

blocked_ids = {2379}

}

local it = {

--[itemid] = [percent]

[8301] = 0, -- 0% additional

[8302] = 100, -- 50%

}

if not setItemName then

function setItemName(uid,name)

return doItemSetAttribute(uid,'name',name)

end

function setItemArmor(uid,name)

return doItemSetAttribute(uid,'armor',name)

end

function setItemDefense(uid,name)

return doItemSetAttribute(uid,'defense',name)

end

function setItemAttack(uid,name)

return doItemSetAttribute(uid,'attack',name)

end

function getItemAttack(uid)

return getItemAttribute(uid,'attack')

end

function getItemDefense(uid)

return getItemAttribute(uid,'defense')

end

function getItemArmor(uid)

if type(uid) == 'number' then

return getItemAttribute(uid,'armor')

else

return getItemInfo(uid.itemid).armor

end

end

end

 

local function isArmor(uid)

if (getItemInfo(uid.itemid).armor ~= 0) and (getItemWeaponType(uid.uid) == 0) then

return true

end

return false

end

local function isWeapon(uid)

uid = uid or 0

local f = getItemWeaponType(uid)

if f == 1 or f == 2 or f == 3 then

return true

end

return false

end

local function isShield(uid)

uid = uid or 0

if getItemWeaponType(uid) == 5 then

return true

end

return false

end

local function isBow(uid)

uid = uid or 0

if getItemWeaponType(uid) == 4 then

return true

end

return false

end

local function getWeaponLevel(uid)

uid = uid or 0

local name = getItemName(uid.uid) or getItemInfo(uid.itemid).name or ''

local lvl = string.match(name,'%s%+(%d+)%s*')

return tonumber(lvl) or 0

end

local function doTransform(s,i) -- Function by Mock the bear.

local c = string.gsub(s,'@',gain.maxlvl)

local c = string.gsub(c,'&a',(getItemAttack(i.uid) ~= 0 and getItemAttack(i.uid) or getItemInfo(i.itemid).attack))

local c = string.gsub(c,'&d',(getItemDefense(i.uid) ~= 0 and getItemDefense(i.uid) or getItemInfo(i.itemid).defense))

local c = string.gsub(c,'&s',(getItemDefense(i.uid) ~= 0 and getItemDefense(i.uid) or getItemInfo(i.itemid).defense))

local c = string.gsub(c,'&p',(getItemArmor(i.uid) ~= 0 and getItemArmor(i.uid) or getItemInfo(i.itemid).armor))

local c = string.gsub(c,'#',getWeaponLevel(i))

local q = assert(loadstring('return '..c))

return math.floor(assert(q()))

end

function onUse(cid, item, fromPosition, itemEx, toPosition)

if item.uid == 0 or item.itemid == 0 then return false end

toPosition.stackpos = 255

if isInArray(gain.blocked_ids, itemEx.itemid)

or (not getItemWeaponType(itemEx.uid) or getItemWeaponType(itemEx.uid) > 5)

or (getItemWeaponType(itemEx.uid) == 0 and not isArmor(itemEx))

or itemEx.itemid == 0 or itemEx.type > 1 or isItemStackable(itemEx.uid) then

doPlayerSendCancel(cid, "You cant refine this item.")

return TRUE

end

if isCreature(itemEx.uid) == TRUE then

return FALSE

end

local level = getWeaponLevel(itemEx)

local chance = doTransform(gain.chance,itemEx)

if level == gain.maxlvl then

doSendMagicEffect(toPosition, 2)

return doPlayerSendCancel(cid, "Your item is on max level, you can't upgrade it.")

end

doPlayerSendCancel(cid,"Trying refine with "..(chance+it[item.itemid] > 100 and 100 or chance+it[item.itemid]).."% of sucess!")

if chance+it[item.itemid] >= math.random(0,100) then

local nm = getItemName(itemEx.uid)

local slot = nm:match('(%[.+%])') or '' ---If you server use slot system dont change it

slot = slot~='' and ' '..slot or slot

setItemName(itemEx.uid, getItemNameById(itemEx.itemid)..' +'..(level+1)..slot)

addEvent(doPlayerSendCancel,2000,cid, "Your item has been upgrated to +"..(level+1)..slot..".")

doSendMagicEffect(toPosition, 28)

if isArmor(itemEx) then

local get = doTransform(gain.gainArmor,itemEx)

setItemArmor(itemEx.uid,get)

elseif isBow(itemEx.uid) then

setItemAttack(itemEx.uid, doTransform(gain.gainAttack,itemEx))

elseif isWeapon(itemEx.uid) then

setItemAttack(itemEx.uid, doTransform(gain.gainAttack,itemEx))

setItemDefense(itemEx.uid, doTransform(gain.gainDefense,itemEx))

elseif isShield(itemEx.uid) then

setItemDefense(itemEx.uid, doTransform(gain.gainShield,itemEx))

end

else

if level == 0 then

addEvent(doPlayerSendCancel,500,cid, "No effect.")

doSendMagicEffect(toPosition, 2)

elseif level > 0 then

local nm = getItemName(itemEx.uid)

local slot = nm:match('(%[.+%])') or '' ---If you server use slot system dont change it

slot = slot~='' and ' '..slot or slot

if level == 1 then

setItemName(itemEx.uid, getItemNameById(itemEx.itemid)..slot)

addEvent(doPlayerSendCancel,2000,cid, "Your item back to normal.")

else

setItemName(itemEx.uid, getItemNameById(itemEx.itemid)..' +'..(level-1)..slot)

addEvent(doPlayerSendCancel,2000,cid, "Your item back to +"..(level-1)..slot..".")

end

if isArmor(itemEx) then

setItemArmor(itemEx.uid,doTransform(gain.loseArmor ,itemEx))

elseif isWeapon(itemEx.uid) then

setItemAttack(itemEx.uid, doTransform(gain.loseAttack,itemEx))

setItemDefense(itemEx.uid, doTransform(gain.loseDefense,itemEx))

elseif isBow(itemEx.uid) then

setItemAttack(itemEx.uid, doTransform(gain.loseAttack,itemEx))

elseif isShield(itemEx.uid) then

setItemDefense(itemEx.uid, doTransform(gain.loseShield,itemEx))

end

end

doSendMagicEffect(toPosition, 9)

end

doRemoveItem(item.uid,1)

return true

end

 

Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber novos posts.
×
×
  • Criar Novo...