Postado Dezembro 10, 2022 2 anos alguem poderia me ajudar com esse erro? sempre que o item quebra e aparece essa mensagem Your Crystal of refinament has failed and destroy your" e vem o erro data/actions/scripts/upgrade.luanUse Description: (luaGetThing) Thing not found --- 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+(2)',loseArmor='&p-(2)', gainShield='&s+(2)',loseShield='&s-(2)', gainAttack='&a+(2)',loseAttack='&a-(2)', gainDefense='&d+(2)',loseDefense='&d-(2)', chance='(100/math.sqrt((((@/4)+(#*2))/@)*#))', maxlvl = 5, blocked_ids = {7878, 2454, 7772, 7863, 7753, 7406, 7857, 7872, 7766, 7747, 7415, 7756, 7866, 7881, 7775, 8905, 8909, 8908, 8906, 8907, 8854, 8851, 10313, 2397, 7385, 8209, 9932, 2358, 2455, 8849, 5803, 2456, 8857, 8855, 8851, 8854, 8853, 8856} -- items que nao podem ser aprimorados } local it = { --[itemid] = [percent] [8300] = 50, -- 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, MESSAGE_STATUS_CONSOLE_BLUE,"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, MESSAGE_STATUS_CONSOLE_ORANGE,"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(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 doRemoveItem(item.uid, 1) getItemNameById(item.itemid) addEvent(doPlayerSendTextMessage,500,cid, MESSAGE_STATUS_CONSOLE_RED,"Your Crystal of refinament has failed and destroyed your " .. getItemNameById(itemEx.itemid) .. " in the process") else doRemoveItem(itemEx.uid, 1) getItemNameById(item.itemid) addEvent(doPlayerSendTextMessage,500,cid, MESSAGE_STATUS_CONSOLE_RED,"Your Crystal of refinament has failed and destroyed your " .. getItemNameById(itemEx.itemid) .. " in the process") 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, 4) end doRemoveItem(item.uid,1) return true end
Postado Dezembro 10, 2022 2 anos @carloos Olha não sei sua tfs, porem tenho um script aqui que funciona em 0.4, ele é por lib talvez de uma diferenciada: Em Data/lib crie upgradesystem.lua dentro ponha: Spoiler --[[ PERFECT UPGRADE SYSTEM 2.0 Criado por Oneshot É proibido a venda ou a cópia sem os devidos créditos desse script. ]]-- UpgradeHandler = { levels = { [1] = {60, false, false}, [2] = {50, false, false}, [3] = {40, false, false}, [4] = {30, false, false}, [5] = {20, false, false}, [6] = {10, false, false}, [7] = {5, false, false}, [8] = {4, false, false}, [9] = {3, false, false}, [10] = {2, false, false}, [11] = {1, false, false}, [12] = {1, false, false}, [13] = {1, false, false}, [14] = {1, false, false}, [15] = {1, false, false}, }, broadcast = 15, attributes = { ["attack"] = 2, ["defense"] = 4, ["armor"] = 15 }, message = { console = "Tentando refinar %s para o nivel +%s com %s%% de chance de sucesso.", success = "Voce deu upgrade em %s para o nivel +%s", fail = "Voce falhou ao tentar da upgrade em %s para o nivel +%s", downgrade = "The upgrade level of %s has downgraded to +%s", erase = "The upgrade level of %s has been erased.", maxlevel = "A %s ja esta no nivel maximo.", notupgradeable = "Este item nao da pra dar upgrade.", broadcast = "O jogador %s teve sucesso em dar upgrade no %s ao nivel +%s.\nParabens!!", invalidtool = "Essa nao e uma ferramenta valida de upgrade.", toolrange = "Essa ferramenta so pode ser usada para dar upgrade do nivel +%s ao +%s" }, tools = { [2153] = {range = {0, 10}, info = {chance = 0, removeable = false}}, [2154] = {range = {0, 10}, info = {chance = 100, removeable = false}}, [2449] = {range = {0, 15}, info = {chance = 100, removeable = false}} }, 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() 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 == false) 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 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(self.levels[self.item.level][3] == true and (self:chance().erase * 100) > math.random(1, 10000)) then doPlayerSendTextMessage(uid, MESSAGE_STATUS_CONSOLE_RED, self.message.erase:format(self.item.name)) self:setItemName(self.item.name) for key, value in pairs(self.attributes) do if self.item[key] > 0 then doItemSetAttribute(self.item.uid, key, self.item[key]) end end elseif(self.levels[self.item.level][2] == true and (self:chance().downgrade * 100) > math.random(1, 10000)) then doPlayerSendTextMessage(uid, MESSAGE_STATUS_CONSOLE_RED, self.message.downgrade:format(self.item.name, (self.item.level - 1))) self:setItemName((self.item.level == 1 and self.item.name or self:getItemName():gsub("%+(%d+)", "+".. (self.item.level - 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[key] + value * (self.item.level - 1))) end end else doPlayerSendTextMessage(uid, MESSAGE_STATUS_CONSOLE_RED, self.message.fail:format(self.item.name, (self.item.level + 1))) end return "fail" end end Em Data/actions/scripts crie upgrade.lua e ponha dentro Spoiler function onUse(cid, item, fromPosition, itemEx, toPosition) if isCreature(itemEx.uid) then return doPlayerSendDefaultCancel(cid, RETURNVALUE_NOTPOSSIBLE) end local obj = UpgradeHandler:new(itemEx) if(obj == false) then return doPlayerSendCancel(cid, UpgradeHandler.message.notupgradeable) end local status = obj:refine(cid, item) if status == "success" then doSendAnimatedText(toPosition, "Success!", COLOR_GREEN) --doSendMagicEffect(toPosition, CONST_ME_MAGIC_GREEN) elseif status == "fail" then doSendAnimatedText(toPosition, "Fail!", COLOR_RED) --doSendMagicEffect(toPosition, CONST_ME_POFF) else doSendMagicEffect(toPosition, CONST_ME_POFF) end return true end Agora por fim adicione a tag no actions.xml e configure o item-id <action itemid="xxx" script="upgrade.lua"/> Editado Dezembro 10, 2022 2 anos por Thony D. Serv (veja o histórico de edições)
Postado Dezembro 11, 2022 2 anos Autor 7 horas atrás, Thony D. Serv disse: @carloos Olha não sei sua tfs, porem tenho um script aqui que funciona em 0.4, ele é por lib talvez de uma diferenciada: Em Data/lib crie upgradesystem.lua dentro ponha: Mostrar conteúdo oculto --[[ PERFECT UPGRADE SYSTEM 2.0 Criado por Oneshot É proibido a venda ou a cópia sem os devidos créditos desse script. ]]-- UpgradeHandler = { levels = { [1] = {60, false, false}, [2] = {50, false, false}, [3] = {40, false, false}, [4] = {30, false, false}, [5] = {20, false, false}, [6] = {10, false, false}, [7] = {5, false, false}, [8] = {4, false, false}, [9] = {3, false, false}, [10] = {2, false, false}, [11] = {1, false, false}, [12] = {1, false, false}, [13] = {1, false, false}, [14] = {1, false, false}, [15] = {1, false, false}, }, broadcast = 15, attributes = { ["attack"] = 2, ["defense"] = 4, ["armor"] = 15 }, message = { console = "Tentando refinar %s para o nivel +%s com %s%% de chance de sucesso.", success = "Voce deu upgrade em %s para o nivel +%s", fail = "Voce falhou ao tentar da upgrade em %s para o nivel +%s", downgrade = "The upgrade level of %s has downgraded to +%s", erase = "The upgrade level of %s has been erased.", maxlevel = "A %s ja esta no nivel maximo.", notupgradeable = "Este item nao da pra dar upgrade.", broadcast = "O jogador %s teve sucesso em dar upgrade no %s ao nivel +%s.\nParabens!!", invalidtool = "Essa nao e uma ferramenta valida de upgrade.", toolrange = "Essa ferramenta so pode ser usada para dar upgrade do nivel +%s ao +%s" }, tools = { [2153] = {range = {0, 10}, info = {chance = 0, removeable = false}}, [2154] = {range = {0, 10}, info = {chance = 100, removeable = false}}, [2449] = {range = {0, 15}, info = {chance = 100, removeable = false}} }, 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() 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 == false) 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 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(self.levels[self.item.level][3] == true and (self:chance().erase * 100) > math.random(1, 10000)) then doPlayerSendTextMessage(uid, MESSAGE_STATUS_CONSOLE_RED, self.message.erase:format(self.item.name)) self:setItemName(self.item.name) for key, value in pairs(self.attributes) do if self.item[key] > 0 then doItemSetAttribute(self.item.uid, key, self.item[key]) end end elseif(self.levels[self.item.level][2] == true and (self:chance().downgrade * 100) > math.random(1, 10000)) then doPlayerSendTextMessage(uid, MESSAGE_STATUS_CONSOLE_RED, self.message.downgrade:format(self.item.name, (self.item.level - 1))) self:setItemName((self.item.level == 1 and self.item.name or self:getItemName():gsub("%+(%d+)", "+".. (self.item.level - 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[key] + value * (self.item.level - 1))) end end else doPlayerSendTextMessage(uid, MESSAGE_STATUS_CONSOLE_RED, self.message.fail:format(self.item.name, (self.item.level + 1))) end return "fail" end end Em Data/actions/scripts crie upgrade.lua e ponha dentro Mostrar conteúdo oculto function onUse(cid, item, fromPosition, itemEx, toPosition) if isCreature(itemEx.uid) then return doPlayerSendDefaultCancel(cid, RETURNVALUE_NOTPOSSIBLE) end local obj = UpgradeHandler:new(itemEx) if(obj == false) then return doPlayerSendCancel(cid, UpgradeHandler.message.notupgradeable) end local status = obj:refine(cid, item) if status == "success" then doSendAnimatedText(toPosition, "Success!", COLOR_GREEN) --doSendMagicEffect(toPosition, CONST_ME_MAGIC_GREEN) elseif status == "fail" then doSendAnimatedText(toPosition, "Fail!", COLOR_RED) --doSendMagicEffect(toPosition, CONST_ME_POFF) else doSendMagicEffect(toPosition, CONST_ME_POFF) end return true end Agora por fim adicione a tag no actions.xml e configure o item-id <action itemid="xxx" script="upgrade.lua"/> muito obrigado pela atençao, mas preciso desse que estou usando, pois ele funciona junto de outro script de DODGE
Postado Dezembro 11, 2022 2 anos Em 09/12/2022 em 21:21, carloos disse: Your Crystal of refinament has failed and destroy your" essa mensagem não existe nesse script, qual outros scripts de refine vc possui? se puder posta-los
Postado Dezembro 11, 2022 2 anos Autor 15 horas atrás, FeeTads disse: essa mensagem não existe nesse script, qual outros scripts de refine vc possui? se puder posta-los esta menssagem aparece quando o item quebra. consegui resolver obrigado pela atencao
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.