• There is NO official Otland's Discord server and NO official Otland's server list. The Otland's Staff does not manage any Discord server or server list. Moderators or administrator of any Discord server or server lists have NO connection to the Otland's Staff. Do not get scammed!

Lua Change number refin to a name

gmstrikker

Well-Known Member
Joined
Jul 30, 2014
Messages
458
Solutions
1
Reaction score
50
Someone can help me to change my script refin? I dont want numbers on weapon name (for exemple)

My katana +1 =
23:43 You see a katana +1 (Atk:19, Def:14 +1). It weighs 31.00 oz.

i want change it to katana:
23:43 You see a unc katana (Atk:19, Def:14 +1). It weighs 31.00 oz.

+1 = unc
+2 = rare
+3 = epic

my script:
Code:
  --PERFECT UPGRADE SYSTEM

  UpgradeHandler = {
  levels = {
  [1] = {50, false, false},
  [2] = {20, false, false},
  [3] = {10, true, true}
  },
  broadcast = 3,
  attributes = {
  ["attack"] = 3,
  ["defense"] = 2,
  ["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}},
  [8300] = {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()
  -- this will return any number that has a + sign in front of it or 0 if there is no number with a + sign
  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
  -- it says if the item's level is greater then 0 (meaning is level equal to 1 or more) if it is add 1 more
  -- if the current level equals 0 add 1 to it
  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
  -- this will remove any number with a + sign in front of it from the string
  self:setItemName(self:getItemName():gsub("(%s+)%+(%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
 
Your script eh? Looks more like my code corrections than yours :p

When are you people going to start to learn to program?

I was going to re-write this so it did what you wanted it to do, but I am not, only thing I will do for you is structure it so you can read it.
Learn lua and fix it yourself :)
Code:
    --PERFECT UPGRADE SYSTEM

    UpgradeHandler = {
        levels = {
            [1] = {50, false, false},
            [2] = {20, false, false},
            [3] = {10, true, true}
        },
        broadcast = 3,
        attributes = {
            ["attack"] = 3,
            ["defense"] = 2,
            ["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}},
        [8300] = {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()
        -- this will return any number that has a + sign in front of it or 0 if there is no number with a + sign
        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
            -- it says if the item's level is greater then 0 (meaning is level equal to 1 or more) if it is add 1 more
            -- if the current level equals 0 add 1 to it
            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
                    -- this will remove any number with a + sign in front of it from the string
                    self:setItemName(self:getItemName():gsub("(%s+)%+(%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
 
Oh man im so sorry to my english
I said "my script" because i have it, i didn't it!!!!
In portuguese its way to say, im so sorry

I dont know how to change 3 simples things how i can did this script? :(
I just know do simples conditionals, actions, usings simples variables
 
Oh man im so sorry to my english
I said "my script" because i have it, i didn't it!!!!
In portuguese its way to say, im so sorry

I dont know how to change 3 simples things how i can did this script? :(
I just know do simples conditionals, actions, usings simples variables
Start reading :)
http://www.lua.org/portugues.html
 
Last edited:
Back
Top