Histórico de Curtidas
-
Toruk deu reputação a luanluciano93 em (Resolvido)[AJUDA] ERRO REWARD CHESTo 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.
-
Toruk recebeu reputação de sh1br4nquinha em Aumentar chance de Dust em monstrosTenta 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()
-
Toruk deu reputação a Anderson Sacani em [Pedido - Script] TFS 1.x Movements checar quantos PLAYERS há em uma determinada árealocal 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.
-
Toruk recebeu reputação de Trunksontibia em (Resolvido)[TFS1.3] Outfit ao matar certo monstroOMFG, n sabia que precisava adicionar no login.lua as funções onKill ....
Muito obrigado, vou adaptar um pouco e usar seu script.
-
Toruk recebeu reputação de carloos em systema de alavanca com 1 playerAcho q mudar essa linha pode funcionar:
if all_ready == #players_pos then Para:
if all_ready > 0 then -
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!!!
-
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; } } }
-
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.
-
Toruk recebeu reputação de DiigooMix em (Resolvido)[DÚVIDA APENAS] Como saber todas as Storages usadas e configuradas no server todo (mesmo as desativadas)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.
-
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.
-
Toruk recebeu reputação de vitinhoo96 em Erro talkactions AutolootNã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.
-
Toruk deu reputação a MateusCelestino em (Resolvido)0 [AJUDA] Remover tag de desconto da aba donate do site.deu certo, muito obrigado
-
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
-
Toruk deu reputação a katumblo em (Resolvido)Servidor travando ao realizar login/logoutMatou 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
-
Toruk recebeu reputação de Apache em (Resolvido)Servidor travando ao realizar login/logoutEntã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.
-
Toruk deu reputação a luanluciano93 em [ERROR] Sistema de loteriaO 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
-
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
-
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
-
Toruk deu reputação a Rodrigo Querobim em (Ajuda) creaturescriptsFuncionou certinho, obrigado!!! +REP
-
Toruk recebeu reputação de Rodrigo Querobim em (Ajuda) creaturescriptsSó 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()
-
Toruk recebeu reputação de cssiqueira em [AJUDA] Criação de item para adicionar VIP, Adquirido na Store do jogo com Tibia CoinEu 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
-
Toruk recebeu reputação de Scorpiondaniel em [Ajuda] Criar uma armadura que diminui em porcentagem o dano desse script: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.
-
Toruk deu reputação a Scorpiondaniel em [Ajuda] Criar uma armadura que diminui em porcentagem o dano desse script:Mano você é foda! Me manda seu discord por favor!
-
Toruk recebeu reputação de Scorpiondaniel em [Ajuda] Criar uma armadura que diminui em porcentagem o dano desse script: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
-
Toruk recebeu reputação de Scorpiondaniel em [Ajuda] Criar uma armadura que diminui em porcentagem o dano desse script: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