Ir para conteúdo

Upgrade System


skolfuriosos

Posts Recomendados

bom venho aqui pedir uma ajuda para solucionar uma dúvida q estou tendo no Upgrade sistem, por exp

 

se meu item ta +5 e falha o upgrade ele volta para o +4, eu gostaria q por exp se falha o upgrad eo item continua +5 e não voltar pro +4...

 

e por exp o meu upgrade system vai até +17, gostaria de reduzir isso para +10, porem uma dúvida tem como deichar ele no maximo +10 e com o mesmo efeito que daria no +17? por exp no +0 o axe daria 110 de attack e 45 DEF, e no +17 ele da 263 attack e 198 def... teria como deichar para dar 263 attack estando no +10 e não no +17?

intende? tpw abaixaria o level max de upgrade de +17 para +10 porem deixaria o mesmo efeito do +17...

 

aqui está o script

 

  --- Perfect refine system by Mock the bear (MTB).
--- Email: [email]mock_#####@hotmail.com[/email]
-- &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 = 17,
blocked_ids = {8881}
}
local it = {
--[itemid] = [percent]
[8306] = 0, -- 0% additional
[8305] = 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,"Você não pode refinar este 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,"Seu item já está no nível máximo de upgrade.")
               end
               doPlayerSendTextMessage(cid, 24,"Tentando refinar com "..(chance+it[item.itemid] > 100 and 100 or chance+it[item.itemid]).."% de sucesso!")
       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,"Seu item foi refinado com sucesso para +"..(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,"Seu item voltou ao normal.")
                               else
                                       setItemName(itemEx.uid, getItemNameById(itemEx.itemid)..' +'..(level-1)..slot)
                                       addEvent(doPlayerSendTextMessage,500,cid, 24,"Seu item voltou para +"..(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

Bom...

Coloquei para ir até +10 não testei se o ataque está arrumado... eu fiz somente uma alteração... tipo ele almenta de 9 em 9 parece... dai eu vou ver aqui como colocar...

 --- Perfect refine system by Mock the bear (MTB).
--- Email: [email]mock_#####@hotmail.com[/email]
-- &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}
}
local it = {
--[itemid] = [percent]
[8306] = 0, -- 0% additional
[8305] = 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,"Você não pode refinar este 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,"Seu item já está no nível máximo de upgrade.")
               end
               doPlayerSendTextMessage(cid, 24,"Tentando refinar com "..(chance+it[item.itemid] > 100 and 100 or chance+it[item.itemid]).."% de sucesso!")
       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,"Seu item foi refinado com sucesso para +"..(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,"Seu item voltou ao normal.")
                               else
                                       setItemName(itemEx.uid, getItemNameById(itemEx.itemid)..' +'..(level-1)..slot)
                                       addEvent(doPlayerSendTextMessage,500,cid, 24,"Seu item voltou para +"..(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

Cara você pode mudar a chance do upgrate aqui:

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

Ta vendo esse 100? Diminui ele... ;)

Editado por Doidin
Link para o comentário
Compartilhar em outros sites

tpws doidin

esse math ai pelo q eu intendi é para usar o item 8305

pq tpw tem 2 item de upgrade o 8305 = 100% de chance de acerto e tem o 8306 q é = a tpw aleatorio qdo + vai upando vai diminuindo as chance

 

uke eu queria mudar é qt pws

 

ele fssse nu amx até +10

e tpws qdo falhar o upgrade, ao inves do item voltar por exp ta +5 se falha ele volta pro +4 queri a qcontinuasse +5 intende? ;x

Link para o comentário
Compartilhar em outros sites

×
×
  • Criar Novo...