Ir para conteúdo

Toruk

Membro
  • Registro em

  • Última visita

Histórico de Curtidas

  1. Curtir
    Toruk deu reputação a luanluciano93 em (Resolvido)[AJUDA] ERRO REWARD CHEST   
    o erro diz que a função MATH.CEIL está sendo usando em um boleano. 

    O MATH.CEIL é usado para arredondar um número quebrado pra cima, por exemplo = math.ceil(1.7) o resultado será 2.

    BOLEANO é um tipo de dado, e eles retornar VERDADEIRO ou FALSO, por exemplo = isPremium(), se o jogador for premium, retorna verdadeiro, se não for, retornar falso.

    Pois bem, o erro é na linha local porcentagem = math.ceil(getPlayerStorageValue(players[1], boss.storage))

    a função getPlayerStorageValue puxa o valor que esta armazena na storage  boss.storage, porém ela, de alguma forma, esta retornando um boleano. 

    Creio que o valor pode ter sido definido como boleano para essa storage em outro script do servidor.

     
  2. Curtir
    Toruk recebeu reputação de sh1br4nquinha em Aumentar chance de Dust em monstros   
    Tenta usar assim:
     

    local dust = Action()
    function dust.onUse(player, item, fromPosition, target, toPosition, isHotkey)
    local forge_dusts = 100 -- quantidade de dusts que o item vai dar
     local dustsQuery = db.query("UPDATE `players` SET `forge_dusts` = `forge_dusts` + '" .. forge_dusts .. "' WHERE `id` = '" .. player:getAccountId() .. "';")

    if dustsQuery then  player:sendTextMessage(MESSAGE_EVENT_ADVANCE, "RECEBEU "..forge_dusts.." DUSTS")
      item:remove(1)
    end
      return true
    end
    dust:id(19082) -- id do item a ser usado
    dust:register()
  3. Curtir
    local config = { fromPosition = { x = 100, y = 100, z = 6 }, toPosition = { x = 1000, y = 1000, z = 8 }, } local players = {} for _, cid in ipairs(getPlayersOnline()) do if isInRange(getThingPos(cid), config.fromPosition, config.toPosition) then table.insert(players, cid) end end print(#players)  
    Explicando:
    Imprimirá no console do teu otserv, a quantidade de pessoas presentes em determinada área, fromPosition, toPosition.
  4. Gostei
    Toruk recebeu reputação de Trunksontibia em (Resolvido)[TFS1.3] Outfit ao matar certo monstro   
    OMFG, n sabia que precisava adicionar no login.lua as funções onKill .... 
     
    Muito obrigado, vou adaptar um pouco e usar seu script. 
  5. Gostei
    Toruk recebeu reputação de carloos em systema de alavanca com 1 player   
    Acho q mudar essa linha pode funcionar:
    if all_ready == #players_pos then Para:
    if all_ready > 0 then
  6. Haha
    Toruk deu reputação a Trunksontibia em [TFS 1.2] Ghost Mode ADM não atravessavél :(   
    @Toruk
    falar que eu te amo pareceria demais né..
    mas eu amo! ?
    salvou mano, deu certão!
    obrigado demais!!! 
  7. Gostei
    Toruk recebeu reputação de Trunksontibia em [TFS 1.2] Ghost Mode ADM não atravessavél :(   
    Mude essa parte:
    if (creatures && !creatures->empty() && !hasBitSet(FLAG_IGNOREBLOCKCREATURE, flags) && !player->isAccessPlayer()) { return RETURNVALUE_NOTPOSSIBLE; }  
     
    Para:
    if (creatures && !creatures->empty() && !hasBitSet(FLAG_IGNOREBLOCKCREATURE, flags) && !player->isAccessPlayer()) { for (const Creature* tileCreature : *creatures) { if (!tileCreature->isInGhostMode()) { return RETURNVALUE_NOTPOSSIBLE; } } }  
  8. Gostei
    Toruk recebeu reputação de Trunksontibia em [TFS 1.2] Ghost Mode ADM não atravessavél :(   
    Isso está normal. O problema vai estar no bool do walkthrought (player.cpp)
     
    Possivelmente está faltando essa parte em seu script: https://github.com/otland/forgottenserver/blob/master/src/player.cpp#L783-L787
     
    Ou então, poste esse bool inteiro, em spoiler, para que alguém possa ajudá-lo.
  9. Curtir
    Geralmente as storages estão na pasta data/lib/tables porém pode ser encontrado storages em qualquer tipo de script (action,moveevent, talkactins, etc).
     
    Btw, eu recomendo sempre usar algum programa após decidir uma storage, como o notepad++. Dai vc da search em toda a pasta do seu servidor para ter certeza que não vai dar conflito com outra storage já usada.
  10. Gostei
    Toruk recebeu reputação de thekilleron em (Resolvido)GesiorAAC Estou com 2 Problemas.   
    Isso está na pagina de donate .php e não no config.php.

    Só ir na pagina e procurar por <strike> ou <s> e deletar essa tag.
  11. Gostei
    Toruk recebeu reputação de vitinhoo96 em Erro talkactions Autoloot   
    Não tem nada a ver com "AND", mas sim, uma função que está aberta e que deveria ser fechada na linha 60 (expected (to close 'function' at line 60) near 'elseif'). Provavelmente algum erro de digitação, porém n tem como ver aqui, pq n ta em spoiler.
     
  12. Curtir
    deu certo, muito obrigado
  13. Gostei
    Toruk recebeu reputação de Maniaco em (Resolvido)Chance de aplicar Condition no Inimigo com item!   
    Tenta usar o script assim. Eu fiz o exemplo de uma condition de fire. 
     
    Eu não mexo muito com tfs 0.X por ser meio limitado, mas acho que vai dar certo assim. Se tiver algum erro só falar
     
    local percent = 30 --- Chance de Aplicar Condition local combat = createCombatObject() setCombatParam(combat, COMBAT_PARAM_TARGETCASTERORTOPMOST, true) setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_FIREDAMAGE) setCombatParam(combat, COMBAT_PARAM_EFFECT, CONST_ME_HITBYFIRE) setCombatParam(combat, COMBAT_PARAM_DISTANCEEFFECT, CONST_ANI_FIRE) local condition = createConditionObject(CONDITION_FIRE) setConditionParam(condition, CONDITION_PARAM_DELAYED, 1) addDamageCondition(condition, 1, 3000, -math.random(5000,10000)) addDamageCondition(condition, 1, 3000, -math.random(5000,10000)) addDamageCondition(condition, 1, 3000, -math.random(5000,10000)) addDamageCondition(condition, 1, 3000, -math.random(5000,10000)) addDamageCondition(condition, 1, 3000, -math.random(5000,10000)) addDamageCondition(condition, 1, 3000, -math.random(5000,10000)) setCombatCondition(combat, condition) function onCastSpell(cid, var) if not isCreature(variantToNumber(var)) or hasCondition(var) == true or (math.random(1,100) > percent) then return false end return doCombat(cid, combat, var) end  
  14. Haha
    Toruk deu reputação a katumblo em (Resolvido)Servidor travando ao realizar login/logout   
    Matou a charada po!
    Abri uma base dados no pc e o problema parou totalmente.
     
    Muuuuuuuuuuuuito obrigado cara, muito mesmo, tanto você quanto o FeeTads por disponibilizarem o tempo de vocês e me ajudarem!
     
    Abraço
  15. Curtir
    Toruk recebeu reputação de Apache em (Resolvido)Servidor travando ao realizar login/logout   
    Então, tenho quase certeza que esse é o motivo da travada, não estar conectado em localhost (localhost tem um delay mínimo para o server).
     
    Simplificando, no seu caso, tem o delay do sv mandar a informação para o banco de dados e depois do banco de dados confirmar a informação. (E quanto maior a distância de ambos, mais delay ficará)
     
    Recomendo você fazer o teste usando o server e o mysql na mesma máquina e ver se mesmo assim está dando lag ao dar saveserver ou uma query extensa no servidor.
  16. Curtir
    Toruk deu reputação a luanluciano93 em [ERROR] Sistema de loteria   
    O fórum é tão auto explicativo e as pessoas não conseguem entender, pqp

    Como você imagina que alguém vai te ajudar sem o código cara? mano do céu 
  17. Gostei
    Toruk recebeu reputação de Scorpiondaniel em [Ajuda] Modificar script de mineração!   
    Entedi, só mudar o target:transform(12706), por:
    target:remove() Game.createItem(12706, 1, toPosition)  
    Script inteiro:
    local rewards = { { item = 8298, count = 1, chance = 50 }, { item = 8299, count = 1, chance = 50 }, { item = 8301, count = 1, chance = 50 }, { item = 8302, count = 1, chance = 50 }, { item = 8303, count = 1, chance = 50 }, { item = 8310, count = 1, chance = 50 }, { item = 9971, count = 1, chance = 50 }, { item = 5944, count = 1, chance = 100 } } local storage = 5000 local delay_timer = 5 function onUse(player, item, fromPosition, target, toPosition, isHotkey) local cur_time, cur_storage = os.time(), player:getStorageValue(storage) if cur_storage > cur_time then player:sendTextMessage(MESSAGE_EVENT_ADVANCE, "You can mining again in " .. os.date("!%Hh %Mm %Ss", cur_storage - cur_time) .. ".") return true end local function addBackStone() local tRocks = getTileItemById(toPosition, 12706) if tRocks then doRemoveItem(tRocks.uid, 1) local stones = {12705} local stone = Game.createItem(stones[math.random(#stones)], 1, toPosition) if stone then stone:setActionId(40041) end end end if not target then return false end if not target:isItem() then return false end if target.actionid ~= 40041 then local pos = player:getPosition() player:sendTextMessage(MESSAGE_EVENT_ADVANCE, 'You cannot use it here.') return false end if target.actionid == 40041 then local ran = math.random(100) if ran <= 10 then toPosition:sendMagicEffect(3) target:remove() Game.createItem(12706, 1, toPosition) addEvent(addBackStone, 120000) return true end end local text = "You have found " for i = 1, #rewards do local rand = math.random(1000) if rand <= rewards[i].chance then player:addItem(rewards[i].item, rewards[i].count) if text ~= "You have found " then text = text .. ", " end text = text .. rewards[i].count .. " " .. ItemType(rewards[i].item):getName() end end if text == "You have found " then text = text .. "nothing" end player:sendTextMessage(36, text .. ".") cur_time = cur_time + delay_timer player:setStorageValue(storage, cur_time) return true end  
  18. Gostei
    Toruk recebeu reputação de Scorpiondaniel em [Ajuda] Modificar script de mineração!   
    Da uma testada ai. Eu acho q vai funcionar assim.
     
    local rewards = { { item = 8298, count = 1, chance = 50 }, { item = 8299, count = 1, chance = 50 }, { item = 8301, count = 1, chance = 50 }, { item = 8302, count = 1, chance = 50 }, { item = 8303, count = 1, chance = 50 }, { item = 8310, count = 1, chance = 50 }, { item = 9971, count = 1, chance = 50 }, { item = 5944, count = 1, chance = 100 } } local storage = 5000 local delay_timer = 5 function onUse(player, item, fromPosition, target, toPosition, isHotkey) local cur_time, cur_storage = os.time(), player:getStorageValue(storage) if cur_storage > cur_time then player:sendTextMessage(MESSAGE_EVENT_ADVANCE, "You can mining again in " .. os.date("!%Hh %Mm %Ss", cur_storage - cur_time) .. ".") return true end local function addBackStone() local tRocks = getTileItemById(toPosition, 12706) if tRocks then doRemoveItem(tRocks.uid, 1) local stones = {12705} local stone = Game.createItem(stones[math.random(#stones)], 1, toPosition) stone:setActionId(40041) end end if not target then return false end if not target:isItem() then return false end if target.actionid ~= 40041 then local pos = player:getPosition() player:sendTextMessage(MESSAGE_EVENT_ADVANCE, 'You cannot use it here.') return false end if target.actionid == 40041 then local ran = math.random(100) if ran <= 10 then toPosition:sendMagicEffect(3) target:transform(12706) addEvent(addBackStone, 120000) return true end end local text = "You have found " for i = 1, #rewards do local rand = math.random(1000) if rand <= rewards[i].chance then player:addItem(rewards[i].item, rewards[i].count) if text ~= "You have found " then text = text .. ", " end text = text .. rewards[i].count .. " " .. ItemType(rewards[i].item):getName() end end if text == "You have found " then text = text .. "nothing" end player:sendTextMessage(36, text .. ".") cur_time = cur_time + delay_timer player:setStorageValue(storage, cur_time) return true end  
  19. Curtir
    Toruk deu reputação a Rodrigo Querobim em (Ajuda) creaturescripts   
    Funcionou certinho, obrigado!!!  +REP
  20. Obrigado
    Toruk recebeu reputação de Rodrigo Querobim em (Ajuda) creaturescripts   
    Só por o script em data/scripts/creaturescripts: 
    ** Lembre que o script tem que ser escrito em lua (sem por nada em XML) **
     
    local table = { -- [level] = type = "item", id = {ITEM_ID, QUANTIDADE}, msg = "MENSAGEM"}, -- [level] = type = "bank", id = {QUANTIDADE, 0}, msg = "MENSAGEM"}, -- [level] = type = "addon", id = {ID_ADDON_FEMALE, ID_ADDON_MALE}, msg = "MENSAGEM"}, -- [level] = type = "mount", id = {ID_MOUNT, 0}, msg = "MENSAGEM"}, [20] = {type = "item", id = {2160, 2}, msg = "Voce ganhou 2 crystal coins por alcancar o level 20!"}, [30] = {type = "bank", id = {20000, 0}, msg = "Foi depositado em seu bank 20000 gold coints!"}, [40] = {type = "addon", id = {136, 128}, msg = "Voce ganhou o addon citizen full por alcancar o level 40!"}, [60] = {type = "mount", id = {2, 0}, msg = "Voce ganhou a montaria x!"}, } local storage = 15000 local event = CreatureEvent("advanceRewards") function event.onAdvance(player, skill, oldLevel, newLevel) if skill ~= SKILL_LEVEL or newLevel <= oldLevel then return true end for level, _ in pairs(table) do if newLevel >= level and player:getStorageValue(storage) < level then if table[level].type == "item" then player:addItem(table[level].id[1], table[level].id[2]) elseif table[level].type == "bank" then player:setBankBalance(player:getBankBalance() + table[level].id[1]) elseif table[level].type == "addon" then player:addOutfitAddon(table[level].id[1], 3) player:addOutfitAddon(table[level].id[2], 3) elseif table[level].type == "mount" then player:addMount(table[level].id[1]) else return false end player:sendTextMessage(MESSAGE_EVENT_ADVANCE, table[level].msg) player:setStorageValue(storage, level) end end player:save() return true end event:register()  
  21. Obrigado
    Eu n entendi bem oque você quer fazer, mas respondendo a uma das dúvidas pontudas (duplicate action):
    O id duplicado sempre acontece quando 2 scripts distintos estiverem sendo executados em um mesmo item, ex: o id 16101 está sendo executado no script de VIP e nesse muck remover. E para corrigir isso é só remover a action em algum script.
     
    Observação: Esse ID (16101) está incorretamente setado no scripts muck_remover, como mostra no link: (O ID correto do muck remover é 18395, portanto basta vc corrigir isso e usar o outro ID em seu script).
    https://github.com/opentibiabr/otservbr-global/blob/main/data/scripts/actions/other/muck_remover.lua#L40
  22. Gostei
    Tmj man. Mas infelizmente eu não consigo ficar ajudando em pv. 
    Entro aqui de vez em nunca pra ajudar alguém por ai, até porque eu já fui um adm que fazia as perguntas e não sabia nada de lua.
     
    Mas é isso ai. Desejo sucesso com o seu server! Abraço man.
  23. Gostei
    Mano você é foda! Me manda seu discord por favor!
  24. Gostei
    Tem, basta criar um "local" para determinar a somatória de proteção dos itens e ir acrescentando conforme o item, vou dar um exemplo em seu script. Usei 3 exemplos: armor, legs e backpack.
     
    Raciocínio do script: O se o player n tiver nenhum dos itens, vai passar "armorProtection = 1" para o final do scripts e vai tomar o dano multiplicado por 1, que seria o dano por inteiro. Conforme ele vai tendo as partes do set, ele vai diminuindo o "armorProtection em 0,1", isso fará com que o dano final seja multiplicado por 1 valor menor ainda (Ex: se tiver 2 itens, vai ser multiplicado por 0.8, ou seja, 80% do valor total).
     
    Para adicionar mais partes da armadura é só ir seguindo o mesmo raciocínio e ir colocando conforme desejar. O nome de cada slot pode ser visto em creature.h do seu tfs, mas em geral, são sempre os mesmos: https://github.com/otland/forgottenserver/blob/master/src/creature.h#L24-L41
     
    local areas = { {leftUpPoint = {x = 31815, y = 32206, z = 7}, rightDownPoint = {x = 32070, y = 32425, z = 7}, minHit = 300, maxHit = 600, armorID = 15000, legsID = 15001, backpackID = 15002, }, } function onThink(interval, lastExecution, thinkInterval) for id, arr in pairs(areas) do for x = arr.leftUpPoint.x, arr.rightDownPoint.x do for y = arr.leftUpPoint.y, arr.rightDownPoint.y do for z = arr.leftUpPoint.z, arr.rightDownPoint.z do local pos = {x = x, y = y, z = z} local uid = getTopCreature(pos).uid if isPlayer(uid) then local player = Player(uid) --- START ARMOR PROTECTION --- local armorProtection = 1 -- 100% damage --- Check Armor --- local armor = player:getSlotItem(CONST_SLOT_ARMOR) if armor and armor:getId() == arr.armorID then armorProtection = armorProtection - 0.1 -- remove 10% end --- Check Legs --- local legs = player:getSlotItem(CONST_SLOT_LEGS) if legs and legs:getId() == arr.legsID then armorProtection = armorProtection - 0.1 -- remove 10% end --- Check Backpack --- local bp = player:getSlotItem(CONST_SLOT_BACKPACK) if bp and bp:getId() == arr.backpackID then armorProtection = armorProtection - 0.1 -- remove 10% end --- END PROTECTION --- local finalDamage = math.random(arr.minHit, arr.maxHit) doCreatureAddHealth(uid, -finalDamage*armorProtection) doSendMagicEffect(pos, 8) end end end end end return true end  
  25. Gostei
    Exemplo de como fazer um "check" de armadura:
    Sendo 2500 o id do item que está no slot da armor e 0.5 a porcentagem do dano que o player irá receber (nesse caso, 50%).
     
    local player = Player(uid) local random = math.random(arr.minHit, arr.maxHit) local armor = player:getSlotItem(CONST_SLOT_ARMOR) if armor and armor:getId() == 2500 then doCreatureAddHealth(uid, -random*0.5) doSendMagicEffect(pos, 8) return true end  

Informação Importante

Confirmação de Termo