Postado Junho 14, 2020 5 anos Olá galera do Tibia King. Sou um ADM de tibia de outras épocas. Fiquei longe disso por 6 anos, e ultimamente tem me dado uma vontade de abrir um novo servidor. Juntei um amigo, e estamos criando algo do zero, mapa próprio, muitos scripts que reforçam o RPG que estão no Tibia King, baseado em outros jogos com muito RPG, exemplo Black Desert, Metin, e o próprio World of Warcraft... Mas não vim divulgar meu servidor, só quero criar um contexto. Com muito tempo ausente desse mundo de script e ot server, perdi algumas habilidades com script, já que sou da área de biológicas... Ainda manjo, mas existem problemas que estão fora do meu alcance. Venho tendo problema com um sistema, até então funcional, porém com algumas desvantagens para algumas vocações. Pretendo manter o server bem balanceado, bem igualado para todas as vocações, logicamente sem tirar a peculiaridade e especialidade de cada uma... O sistema de Upgrade do Mock refina Attack, Armor, Defense, certo ? Porém, não está refinando escudos, e pior, está adicionando Attack aos escudos, e aos Bows não faz nada... Só adiciona level e nada mais. Uma grande desvantagem para magos e paladins. Magos poderiam se beneficiar do Defense em Spellbooks. Estava pensando que podia ser adicionado atributos como hitchance, attackspeed, range, para beneficiar magos e paladinos, pois quem tira proveito desse sistema é apenas o Knight.} Reformulando: -Escudos não ganham defesa, e estão ganhando ataque, -Bows não ganham nada, só refin level, Segue o script da forma que estou usando: Spoiler -- &a = weapon attack -- &d = weapon defense -- &s = shield defense -- &p = armor defense -- &h = hitchance -- # = nivel do item -- @ = max level local gain = { gainArmor='&p+(1)',loseArmor='&p-(1)', gainShield='&s+(1)',loseShield='&s-(1)', gainAttack='&a+(1)',loseAttack='&a-(1)', gainDefense='&d+(1)',loseDefense='&d-(1)', gainHitChance='&h+(1)',loseHitChance='&h-(1)', chance='(100/math.sqrt((((@/4)+(#*2))/@)*#))', maxlvl = 10, blocked_ids = {8881} } local it = { --[itemid] = [percent] [8299] = 0, -- 0% additional --[8303] = 100, -- 50% } if not setItemName then function setItemName(uid,name) return doItemSetAttribute(uid,'name',name) end function setItemAttack(uid,name) return doItemSetAttribute(uid,'attack',name) end function setItemDefense(uid,name) return doItemSetAttribute(uid,'defense',name) end function setItemHitChance(uid) return doItemSetAttribute(uid,'hitchance') end function setItemArmor(uid,name) return doItemSetAttribute(uid,'armor',name) end function getItemAttack(uid) return getItemAttribute(uid,'attack') end function getItemDefense(uid) return getItemAttribute(uid,'defense') end function getItemHitChance(uid) return getItemAttribute(uid,'hitchance') 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,'&h',(getItemHitChance(i.uid) ~= 0 and getItemHitChance(i.uid) or getItemInfo(i.itemid).hitchance)) 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, 14) 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)) setItemHitChance(itemEx.uid, doTransform(gain.gainHitChance,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)) setItemHitChance(itemEx.uid, doTransform(gain.loseHitChance,itemEx)) elseif isShield(itemEx.uid) then setItemDefense(itemEx.uid, doTransform(gain.loseShield,itemEx)) end end doSendMagicEffect(toPosition, 3) end doRemoveItem(item.uid,1) return true end Segue prints do problema: Spoiler Bow, qualquer bow acontece o mesmo, recebe o level mas não altera em nada. Escudos, como dito, nao recebem defense, porem estao recebendo attack, mesmo sem o comando no script. Desconfio que o problema seja aqui: Mas como estou leigo no assunto, invoco os experts, deuses da programação pra me ajudar. Peço encarecidamente a ajuda de vocês, o plano é um servidor revitalizado, com RPG bem reforçado, onde a galera vai gastar muito bem o tempo, se divertindo, coletando itens, refinando, vendendo no market mundial, e por ai vai. Obrigado desde já. Editado Junho 14, 2020 5 anos por Vitoxy (veja o histórico de edições)
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.