Ir para conteúdo

Night Wolf

Herói
  • Total de itens

    341
  • Registro em

  • Última visita

  • Dias Ganhos

    18

Tudo que Night Wolf postou

  1. --PERFECT UPGRADE SYSTEM UpgradeHandler = { nameLv = { [1] = "UNIQ", [2] = "RARE", [3] = "EPIC" }, 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 = 1, removeable = true}}, [8300] = {range = {0, 10}, info = {chance = 2, 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 the level by the quality or 0 if it has no quality. self.item.level = 0 for r, v in ipairs(self.nameLv) do if self:getItemName():find(v) then self.item.level = r end end end function UpgradeHandler:refine(uid, item) if (self.item.level >= 3) then return true end 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.nameLv[self.item.level + 1].." "..(self:getItemName():gsub(self.nameLv[self.item.level].." ", "")) or self.nameLv[1].." "..self:getItemName()) 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((self.nameLv[self.item.level].." "), "")) 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 agora vc edita ali na chance da tools: 8306 é 1x e 8300 é 2x.
  2. posso dar uma opinião? se vc vai usar roleta então provavelmente os itens são muito bem definidos, vc pode usar getTileItemById (pos, itemid) q nem o @Poccnn bem colocou. Pra mim é a função mais "confiável" de se usar, as outras vc vai ter que ficar checando possiveis bugs e falhas no sistema o tempo todo e isso acaba sendo mais pesado pro número de execuções do que a própria definição da função via source. Qualquer dúvida tamo aí
  3. o cara tem 320 players no servidor dele e não te pagou... eu liberava no fórum o sistema obs: Tamo junto
  4. local dep = tonumber(v == 'all' and c or v)local dep1 = tonumber(v == 'all' and c or v)/100local dep2 = tonumber(v == 'all' and c or v)/100000local dep3 = tonumber(v == 'all' and c or v)/100000000local dep4 = tonumber(v == 'all' and c or v)*100 pro primeiro erro: edita essa parte e deixa assim (dividi por 100 pq vc disse q tava 100x maior): local dep = tonumber(v == 'all' and c or v)/100local dep1 = tonumber(v == 'all' and c or v)/10000local dep2 = tonumber(v == 'all' and c or v)/10000000local dep3 = tonumber(v == 'all' and c or v)/10000000000 agora pro segundo erro: não tem solução, vc tá usando valores maiores do que o tibia reserva de bytes pra armazená-los. Se vc tá precisando usar essa quantidade absurda de digitos pro dinheiro do seu server eu sugiro q vc balanceie melhor o drop rate e os preços das coisas (controla essa inflação, moço!!). Ou então crie outros itens como sendo moedas mais evoluidas e trabalhe com elas.
  5. vc tentou executar ela assim? dá erro? qual? tenta alterar o INTEGER para INT
  6. Night Wolf

    spell onTagetTile

    coloca local na frente do function spellCallback. Tá sendo uma função global e por isso tá conflitando.
  7. não é meu estilo de client, mas até q não ficou tão ruim ein
  8. nossa eu quase sangrei pelos olhos pra conseguir ler tudo isso (to com conjuntivite) mas valeu a pena kkk ficou muito boa essa atualização. Notável o trabalho que vc tem feito com o ékz, @Daniel. Sucesso pra nossa equipe!
  9. uma rodada pra geral no barzinho do Ékz por minha conta!
  10. Night Wolf

    Script de soma

    local tabela = { [1] = 2523, [2] = 2195, [3] = 2160 } local sum = 0 for ind, v in ipairs (tabela) do for i = 1, 10 do if getPlayerSlotItem(cid, i).itemid == v then sum = sum + ind end end end return sum
  11. a query é isso daqui, o resto é só fazer um creaturescript onKill e registrar no login.lua pra se o monstro tiver tal nome executar essa query aqui db.query("UPDATE `accounts` SET `premium_points` = `premium_points` + 1 WHERE `id`= ".. getPlayerAccountId(cid) .."")
  12. vc colocou o id do item nessa tabela aqui: local donation_ids = {2474} --donation ids ?? e outra, vc tá botando o item em cima de alguma caixa? pq ali a stackpos tá considerando só a primeira pilha, tenta trocar na posição o stackpos pra 255
  13. ficou realmente muito bom, vc tem trazido uma série de novidades com seus conhecimentos em OTC, continue assim!!1
  14. t[item.uid] muda pra t[item.itemid], é quase oque o danih falou mas é itemid e não somente id.
  15. (espero q entendam o link ser de outro fórum) vc pode encontrar esse sistema aqui
  16. ali no mob = "" vc pode definir qlqer monstro haha, é que originalmente haviam feito pra imitar aquele jogo Bird Hunt do master system, lembra? que os passaros saiam voando e vc tinha que atirar e se vc errava o cachorro ria de vc.
  17. premium_point é uma aba no banco de dados? me fala a localização dela que a gente faz.
  18. diminui esse interval pra <globalevent name="randomentreraidfds" interval="1000" event="script" value="raid.lua"/> e esse para <raid name="Orshabaal" file="scripts/Orshabaal.xml" interval2="15" margin="1800" enabled="yes"/> aí vc tenta usar /raid orshabaal.. Se der certo a gente sabe que a raid funciona. Aí vc precisa abrir o sv uns 10 minutos antes da hora que vc colocou lá. Se vc colocou 5 horas, então tenha ctza que 4:50 da manhã o sv vai estar aberto e espera até pelo menos 5:10 pra ver se ele executou ou não. presta atenção nos dias configurados e lembra que a hora é aleatória, o script está correto; e não precisa me citar pra responder minhas perguntas, e lembra de usar [.spoiler] [./spoiler] sem os pontos pra garantir que o código fique minimizado, se não fica foda ficar lendo oque vc escreve.
  19. deu algum erro? seu servidor o interval é definido em milisegundos ou em segundos? pq isso influencia o sistema...
  20. seu servidor deve ser base 0.4, não funcionará scripts que usem como base maior que isso.
  21. vc tá usando tfs 1.2, esse script é pra 1.x.. pra alterar usa assim a primeira linha: function onUse(player, item, fromPosition, itemEx, toPosition, isHotkey) e remove local player = Player(cid)
  22. eu vou abrir pra testar esse script e ver se consigo arrumar seguindo essa lógica inicial, eu sei que dá pra fazer criando e deletando os itens mas a idéia era usar menos linhas de código EDIT: não consegui fazer pelo transform, se fosse tfs 1.x+ ia dar certo.. hahaha usa assim q fica perfeito, ele recria o baú depois de X segundos só q se o lixo que o baú virou não estiver na posição certinha ele não vai remover.
  • Quem Está Navegando   0 membros estão online

    • Nenhum usuário registrado visualizando esta página.
×
×
  • Criar Novo...