Ir para conteúdo

xWhiteWolf

Héroi
  • Registro em

  • Última visita

Tudo que xWhiteWolf postou

  1. tem que ver o script todo, só com comentario não dá pra saber como vc tá tentando fazer... Eu fiz uma função que retorna true se todos os players estão dentro daquela area e false caso contrário, não sabia q era pra dar os storage pros q tão e ignorar o resto.. vc tinha que ter sido mais específico.
  2. o script não é meu, só fiz uma modificação pra ficar do jeito q vc queria. Não mexi em nada dessa parte de atributos então deve tar como era pra ser. Se ele tá aumentando algo errado verifica se é a configuração que tá errada, do contrário eu dou uma revisada e vejo se acho algum erro de lógica
  3. ok, vou fazer depois.. to via cel agr
  4. addEvent(zEffect, 200, uid, effect, n + 1) nesse 200 aí, é em milisegundos.. qnt menor mais rápido só que vai ficar mais pesado no seu servidor
  5. vcs são um público dificil... se eu faço da forma que acho mais interessante vcs pedem pra eu fazer igualzinho é no foxworld, se eu faço igualzinho vcs querem diferente
  6. pra ser algo útil tem que separar em duas funções: a primeira vc faz getOnlineGuildMembers(guildid) e ela irá retornar uma tabela com todos os membros da guild que estão online. A segunda vc coloca uma tabela de membros, posição do canto < /\ e posição do canto >\/ (se não me engano) e ele irá dizer se todos esses membros estão entre o quadrado formado por essas posições
  7. kct, to decepcionado cmg msmo AHUEUHA to esquecendo umas coisas mt básicas e vc demora horas pra vir aqui responder, ja tá durando 5 dias esse teu problema..
  8. ficou bem merda do jeito q vc pediu, a graça do boss era ele possuir a skill e não deixar corpse.. mas já que vc quer imitar os cara do fox então toma: no xml do monstro vc coloca o corpse: corpse="8937"/> em data\creaturescripts\scripts\aegis.lua coloque assim> em data\lib\function.lua coloque no fim do arquivo Agora pro monstro Aegis ter o efeito em volta vc vai ter que colocar essa função nele ao criá-lo no mapa. No caso do fox pode ser uma talkaction /startAegis ou um globalEvent (nao sei ql dos dois q é), aí nesse outro script de criar o monstro vc coloca zEffect(monster, 37) que vai ficar rodando nele. em data\creaturescripts\scripts\login.lua vc adiciona essa linha antes do ULTIMO return true: if getPlayerStorageValue(cid, 19332) > 0 then zEffect(cid, 37) end
  9. nossa, agora entendi.. Usa essa daqui na terceira->
  10. Primeira: Segunda: O erro q tem na terceira é o mesmo da segunda? pq ele tá falando q essa função exhaustion.get(cid, 100100) tá retornando um boolean (true/false). Então a função deve estar errada no seu servidor, pois ela deveria retornar o tempo até poder usar novamente
  11. Primeira: terceira: ultima: edit: a segunda tá dentro do spoiler da primeira e não to conseguindo arrumar
  12. cometi uma pequena gafe hahaha eu modifiquei o script e esqueci de modificar a tabela que eu havia criado
  13. sim, esqueci a virgula, não percebi que upgradeHandler era uma tabela AIHHEUIA botando ali funciona?
  14. rapaz, vc não precisa colocar letra grande pra chamar atenção.. se abriram seu tópico a atenção da pessoa você já tem. Isso só atrapalha na hora de ler.
  15. testa assim --PERFECT UPGRADE SYSTEM UpgradeHandler = { nameLv = { ["UNIQ"] = 1, ["RARE"] = 2, ["EPIC"] = 3 } 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 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(r) then self.item.level = v end end 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.nameLv[self.item.level].." "..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
  16. Acho que vc confundiu, oque é logs pra vc? Logs é um documento nas talkactions que registra o histórico de comandos utilizados e pela sua descrição vc tá falando de algum comando ingame como !rate, por exemplo. Manda um print do que você tá querendo dizer que a gente tenta te ajudar
  17. como assim só o verdadeiro? Aegis não sumona aegis pra ter mais de um. O restante eu posso fazer
  18. xWhiteWolf respondeu ao post em um tópico de vankk em Playground (Off-topic)
    Todo carro tem que ter essa música aqui https://www.youtube.com/watch?v=0hfFQl2iEi8
  19. Em weapons/scripts coloque mace.lua
  20. self.item.level = (tonumber(self:getItemName():match("%+(%d+)")) or 0) aqui ele define ql é o level do item, vc tem que modificar isso de forma a fazer ele entender que RARE, UNQ, EPIC são leveis referentes a 1, 2, 3; O resto é modificador os -- 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"))) -- this will remove any number with a + sign in front of it from the string self:setItemName(self:getItemName():gsub("(%s+)%+(%d+)", "")) Pra em vez de setar nome +Level no nome, setar a rarity + nome.
  21. funcionaria melhor se vc tivesse pingando seu próprio site, que deveria estar no mesmo host.
  22. Antes de tudo usa esse script aqui, o seu nao tá nem identado.. não dá pra entender merda nenhuma Segundo: essa é a parte que faz isso que vc quer, ela tá corretinha ao meu ver if stnid2 > 1 and (getPlayerItemCount(cid, stnid2) < count or getPlayerItemCount(cid, stnid) < count) then doPlayerSendCancel(cid, "You need at least one "..getItemNameById(stnid).." and one "..getItemNameById(stnid2).." to evolve this pokemon!") return true end if getPlayerItemCount(cid, stnid) < count then local str = "" if count >= 2 then str = "s" end return doPlayerSendCancel(cid, "You need at least "..count.." "..getItemNameById(stnid)..""..str.." to evolve this pokemon!") end minlevel = pokes[evo].level if getPlayerLevel(cid) < minlevel then doPlayerSendCancel(cid, "You don't have enough level to evolve this pokemon ("..minlevel..").") return true end if count >= 2 then stnid2 = stnid end doEvolvePokemon(cid, item2, evo, stnid, stnid2) só fiquei com duvida nessa parte aqui: se a quantidade for maior ou igual a 2 ele bota o stoneid2 = stoneid1?? Acredito que o problema mesmo seja nessa função doEvolvePokemon, ela não leva count como paramêtro e é provavelmente nela que o jogo remove as stones do player. Sugiro vc adicionar ali dps de stnid2 = stnid um doPlayerRemoveItem, ficando assim if count >= 2 then stnid2 = stnid doPlayerRemoveItem(cid, stnid, count - 2) end
  23. foi muito engraçado arrumar esse script, qnd eu fiz ele eu tava começando a scriptar e tinha muita checagem desnecessária
  24. xWhiteWolf respondeu ao post em um tópico de Thunder Black em Suporte Tibia OTServer
    db.executeQuery é um comando mt extenso se tratando de querys, porque querys já são códigos imensos em sql q tem q ser encaixados num script em Lua. Aí por convenção decidiram que as novas sources seriam feitas apenas com db.query, e é assim desde então.

Informação Importante

Confirmação de Termo