Ir para conteúdo

Featured Replies

Postado

Ola Galera Sou novo no forum aqui gostaria de uma ajuda em um script de refine system feito pelo Mock's

 

o problema no script é vou tenta ser o mais claro possível, ele funciona 100% porém exemplo:

 

vc adiciona o refino no item (arma ou shield), digamos uma magic sword (ATK: 48, DEF: 35+3) se vc refinar ela para +1 vai normal ficando (ATK: 49, DEF: 38+3), se vc adicionar +2 ja começa o problema ou melhor o bug ao invez de subir 1 de refino +2 ficando com (50 de atk, 39+3), ele sobe 2 refinos ficando (ATK: 51, DEF: 39+3), refino +3 (ATK: 54, DEF: 41+3), Dependendo da quantidade de refino que vc coloca (digamos maximo de refinos até +15) a arma fica com atk: 160, def 130 por ai, o shield a msm coisa, resumindo, se vc colocar +10 de refino ele soma o atk original da arma/shield + 55 ficando com um atk com mais de 100 ou def mais de 100 alguém poderia me orientar onde eu altero isso pq eu ja tentei mexer nesse script umas 4x e anda n achei onde mudava eu tinha uma ligeira ideia de onde seria mas n sei o jeito certo de por.

 

--- Perfect refine system by Mock the bear (MTB).

--- Email: [email protected]

-- &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+#',loseShield='&s-(#+1)',

gainAttack='&a+(1*(#))',loseAttack='&a-(1*(#+1))',

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

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

maxlvl = 10,

blocked_ids = {8881} -- items que nao podem ser aprimorados

}

local it = {

--[itemid] = [percent]

[8306] = 0, -- 0% additional

[10613] = 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) -- Function by Mock the bear.

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

return true

end

return false

end

local function isWeapon(uid) -- Function by Mock the bear.

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) -- Function by Mock the bear.

uid = uid or 0

if getItemWeaponType(uid) == 4 then

return true

end

return false

end

local function isBow(uid) -- Function by Mock the bear.

uid = uid or 0

if getItemWeaponType(uid) == 5 then

return true

end

return false

end

local function getWeaponLevel(uid) -- Function by Mock the bear.

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

doPlayerSendTextMessage(cid, 24,"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 doPlayerSendTextMessage(cid, 24,"Your item is on max level, you can't upgrade it.")

end

doPlayerSendTextMessage(cid, 24,"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(doPlayerSendTextMessage,500,cid, 24,"Your item has been upgrated to +"..(level+1)..slot..".")

doSendMagicEffect(toPosition, 12)

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(doPlayerSendTextMessage,500,cid, 24,"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(doPlayerSendTextMessage,500,cid, 24,"Your item back to normal.")

else

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

addEvent(doPlayerSendTextMessage,500,cid, 24,"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

se alguem me ajuda ficarei muito grato e rep.

Postado
local gain = {

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

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

gainAttack='&a+(1*(#))',loseAttack='&a-(1*(#+1))',

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

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

maxlvl = 10,

Você pode arrumar diminuindo o maxlvl diretamente ou modificar as tabelas de gain.
Observa cmg:

gainAttack = &a + (1 * #).

-- # = nivel do item
-- &a = weapon attack

 

Então basicamente o quanto vc ganha de ataque é o ataque inicial + o level.

Nivel 1 se tem 54 eu fico com 55
nv 2 vai ter 55 e eu ganho + 2 ficando 57
nv 3 vai ter 57 e ganho + 3 ficando 60... e assim por diante.

Só arrumar e deixar como vc quiser.

Todos os meus trabalhos importantes estão na seção "Sobre mim" no meu perfil; Dá uma passada lá!

"Há três caminhos para o fracasso: não ensinar o que se sabe, não praticar o que se ensina, e não perguntar o que se ignora." - São Beda

I7Pm6ih.png

(obg ao @Beeny por fazer essa linda sign <3)

Postado
  • Autor

cara não errei no primeiro momento em que pedi sua ajuda, resposta simples, porém, perfeita!

 

 

consegui mudar aqui apagando algumas coisas como, estava assim:

gainAttack='&a+(1*(#))',loseAttack='&a-(1*(#+1))',

deixei assim:

 

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

 

e funcionou, farei igual no shield, vlw msm white como sempre receba um belo de um REP.

 

vlw,

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.

Estatísticas dos Fóruns

  • Tópicos 96.9k
  • Posts 519.7k

Informação Importante

Confirmação de Termo