Ir para conteúdo

Líderes

Conteúdo Popular

Exibindo conteúdo com a maior reputação em 08/13/20 em todas áreas

  1. Spell que bloqueia o target do player

    Lord Danilus e 3 outros reagiu a Lurk por uma resposta no tópico

    4 pontos
    Fiz essa spell a pedido de um usuário do fórum e logo depois outro usuário pediu uma versão onde o target do player afetado pela magia ficasse bloqueado por um tempo configurável, gostei da ideia e decidi postar em forma de tópico. Primeiro de tudo você vai precisar dessa função feita/disponibilizada pelo @WooX (não se esqueçam de passar no tópico dele e agradecer) Em data/spells.xml adicione <instant name="Cancel Enemy Target" words="Cancel Enemy Target" lvl="12" mana="20" range="3" blockwalls="1" needtarget="1" exhaustion="2000" needlearn="0" event="script" value="canceltargetlurk.lua"> <vocation id="1"/> <vocation id="2"/> </instant> em data/spells/scripts crie um arquivo chamado canceltargetlurk.lua e coloque isso dentro --[[ Made by Moira (Lurk on TibiaKing) NÃO REMOVA OS CRÉDITOS ]]-- local storage = 234512 -- tenha certeza de estar usando um numero que ainda não esteja em uso no seu servidor local tempo = 50 -- tempo em segundos para usar a magia novamente local tempo_block = 5 -- quanto tempo o player afetado pela magia vai ficar sem poder atacar OUTRO PLAYER local templo_cannot_be_blocked = 50 -- tempo em que o target vai ficar invuneravel a spell caso já tenha sido afetado por ela local combat = createCombatObject() setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_FIREDAMAGE) setCombatParam(combat, COMBAT_PARAM_EFFECT, CONST_ME_FIREATTACK) setCombatParam(combat, COMBAT_PARAM_DISTANCEEFFECT, CONST_ANI_FIRE) function onCastSpell(cid, var) local target = getCreatureTarget(cid) if isPlayer(target) and getPlayerStorageValue(cid, storage) < os.time() and getPlayerStorageValue(target, 234514) < os.time() then doPlayerTargetCreature(target, target) setPlayerStorageValue(target, 234513, tempo_block + os.time()) setPlayerStorageValue(target, 234514, templo_cannot_be_blocked + os.time()) setPlayerStorageValue(cid, storage, tempo + os.time()) return doCombat(cid, combat, var) elseif getPlayerStorageValue(target, 234514) > os.time() then doPlayerSendCancel(cid, "This player has been affect by this spell recently, you must wait ".. getPlayerStorageValue(target, 234514) - os.time() .." to block his attacks again.") return false elseif getPlayerStorageValue(cid, storage) > os.time() then doPlayerSendCancel(cid, "You must wait ".. getPlayerStorageValue(cid, storage) - os.time() .." seconds to use this spell again.") else doPlayerSendCancel(cid, "You may only cast this spell on players.") end return false end agora em data/creaturescripts.xml adicione <event type="attack" name="lurkBlockTarget" event="script" value="canceltargetlurk.lua"/> em data/creaturescripts/scripts crie um arquivo chamado canceltargetlurk.lua e cole isso dentro --[[ Made by Moira (Lurk on TibiaKing) NÃO REMOVA OS CRÉDITOS ]]-- function onAttack(cid, target) if getPlayerStorageValue(cid, 234513) > os.time() and isPlayer(target) then return doPlayerSendCancel(cid, "You're under effect of the cancel target spell, you must wait".. getPlayerStorageValue(cid, 234513) - os.time() .." seconds to attack again.") and false end return true end por ultimo, abre o arquivo login.lua que está na pasta data/creaturescripts/scripts e adicione isso ANTES DO ULTIMO RETURN TRUE registerCreatureEvent(cid, "lurkBlockTarget") Se você quer só E SOMENTE SÓ cancelar o target do inimigo uma unica vez, basta utilizar essa versão da spell --[[ Made by Moira (Lurk on TibiaKing) NÃO REMOVA OS CRÉDITOS ]]-- local storage = 234512 -- tenha certeza de estar usando um numero que ainda não esteja em uso no seu servidor local tempo = 50 -- tempo em segundos para usar a magia novamente local combat = createCombatObject() setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_FIREDAMAGE) setCombatParam(combat, COMBAT_PARAM_EFFECT, CONST_ME_FIREATTACK) setCombatParam(combat, COMBAT_PARAM_DISTANCEEFFECT, CONST_ANI_FIRE) function onCastSpell(cid, var) local target = getCreatureTarget(cid) if isPlayer(target) and getPlayerStorageValue(cid, storage) < os.time() then doPlayerTargetCreature(target, target) setPlayerStorageValue(cid, storage, tempo + os.time()) return doCombat(cid, combat, var) elseif getPlayerStorageValue(cid, storage) > os.time() then doPlayerSendCancel(cid, "You must wait ".. getPlayerStorageValue(cid, storage) - os.time() .." seconds to use this spell again.") else doPlayerSendCancel(cid, "You may only cast this spell on players.") end return false end Créditos: Eu pela spell e creaturescript @WooX pela criação da função se gostou, rep+ aqui e no post do @WooX pela função : p
  2. SPELL/ Cancelar Target

    leozincorsair e 3 outros reagiu a Lurk por uma resposta no tópico

    4 pontos
    @BangxD EDITADO: versão mais trabalhada
  3. [CreatureScript] Sugestão de balanceamento

    Cat e um outro reagiu a Mor3nao por uma resposta no tópico

    2 pontos
    Fiz esse script, pra tentar "balancear" as vocations de uma maneira diferente: Melhorar oque eu acho fraco, sem piorar oque está "forte". Por exemplo: Sorcerers que deveriam ser a vocation de dano, bate menos que um druid, visto que ele tem o exevo gran frigo hur, então ao invés de eu editar o gran frigo hur, ou adicionar um "exevo gran flam hur", eu fiz com que os sorceres tenham uma % de chance de dar burn/electrify/curse quando bater com fire, energy e death (respectivamente). Aí deixei varias possibilidades de configurações, e cada um vai editando oq achar necessario até achar um ponto de "equilibrio" ? Oque cada vocation pode fazer: Adicionando o Script em data/creaturescripts/creaturescripts.xml adicione a tag: <event type="healthchange" name="balancevoc" script="vocation_balance.lua"/> em data/creaturescript/scripts/login.lua (ou login_events, depende do teu sv) coloque a tag: player:registerEvent("balancevoc) em data/creaturescript/scripts adicione o arquivo vocation_balance.lua, abra-o e coloque o seguinte script: Então vá até data/events/events.xml, procure por: <event class="Creature" method="onTargetCombat" enabled="0" /> E mude enabled="0" para enabled="1" Aí abra data/events/scripts/creature.lua, procure por function Creature:onTargetCombat(target) e abaixo, coloque a tag: target:registerEvent("balancevoc") E pronto, tá feito o sorvetinho ?
  4. [TFS 0.x] Função doPlayerTargetCreature

    Ackerzin e um outro reagiu a WooX por uma resposta no tópico

    2 pontos
    doPlayerTargetCreature(cid, target) Essa função adiciona um target ao jogador ou altera caso este já possua um target. Instalação No arquivo luascript.cpp da source procure por: //doPlayerFollowCreature(cid, target) lua_register(m_luaState, "doPlayerFollowCreature", LuaInterface::luaDoPlayerFollowCreature); Acima adicione: //doPlayerTargetCreature(cid, target) lua_register(m_luaState, "doPlayerTargetCreature", LuaInterface::luaDoPlayerTargetCreature); Depois procure por: int32_t LuaInterface::luaDoPlayerFollowCreature(lua_State* L) E adicione acima: int32_t LuaInterface::luaDoPlayerTargetCreature(lua_State* L) { //doPlayerTargetCreature(cid, target) ScriptEnviroment* env = getEnv(); Creature* creature = env->getCreatureByUID(popNumber(L)); if(!creature) { errorEx(getError(LUA_ERROR_CREATURE_NOT_FOUND)); lua_pushboolean(L, false); return 1; } Player* player = env->getPlayerByUID(popNumber(L)); if(!player) { errorEx(getError(LUA_ERROR_PLAYER_NOT_FOUND)); lua_pushboolean(L, false); return 1; } lua_pushboolean(L, g_game.playerSetAttackedCreature(player->getID(), creature->getID())); return 1; } Agora no arquivo luascript.h da source procure por: static int32_t luaDoPlayerFollowCreature(lua_State* L); E adicione acima: static int32_t luaDoPlayerTargetCreature(lua_State* L); Pronto, agora basta compilar e a função vai estar pronta pra ser usada.
  5. (Resolvido)[Creaturescript] Spam No Default

    WooX e um outro reagiu a Lurk por uma resposta no tópico

    2 pontos
    @Thony D. Serv deixa assim local cfg = { life = 20000, storage = 9999, tempo = 1 -- em segundos } function onCast(cid, target) local master = getCreatureMaster(cid) if exhaustion.check(master, cfg.storage) == false then local pos = getCreaturePosition(master) local pos2 = getCreaturePosition(target) doCreatureAddHealth(master, cfg.life) doCreatureAddMana(master, cfg.life) doSendAnimatedText(pos2, "Absorve", TEXTCOLOR_BLUE) exhaustion.set(master, cfg.storage,cfg.tempo*7) doSendMagicEffect(pos, 12) else -- exhaustion.set(master, cfg.storage,0) doPlayerSendTextMessage(master, MESSAGE_STATUS_WARNING, "Sua Mana E Seu Hp Encheram 20k Proximo Buff em " ..exhaustion.get(master, cfg.storage).." segundos.") end return true end
  6. [TFS 0.x] Função doPlayerTargetCreature

    ITALOx e um outro reagiu a WooX por uma resposta no tópico

    2 pontos
    Essa função adiciona ou altera o alvo de um jogador, ou seja faz ele atacar quem você definir. A utilidade da função depende da sua criatividade, daria pra fazer uma talkaction onde o player pode escolher seu target "!attack Joaozinho" ou uma spell de Genjutsu para derivados de Naruto onde altera o target do alvo, fazendo ele pensar que está atacando alguém quando na verdade está atacando outro, o limite das possibilidades é sua criatividade. Sim, daria.
  7. Animated Outfits 12.31

    cs007 reagiu a Bruxo Ots por uma resposta no tópico

    1 ponto
    Ola Tibianos!!!! Gesior tinha atualizado até a versão 10.92 com addons, monstros e mounts. Mas como ele não atualizou mais, decidi continuar nesse movimento, então sempre que possivel estarei trazendo as novidades do nosso querido e amado tibia. Meta é sempre estar atualizando com os novos looks do global. Adicionei o cache em todos os arquivos, então agora e so baixar e usar, claro que precisa ser configurado no site de vocês. Nessa ultima att ja vem com o incrivel Dragon Slayer e as montarias novas que a cip lançou para ajudar o pessoal com Covid-19. Download Créditos Tutorial Gerando Cache so se não souber mesmo.
  8. [novo] » Mapas do Nolis

    1579091 reagiu a Cat por uma resposta no tópico

    1 ponto
    Olá, bem vindo ao meu portfolio. Decidi abandonar o anterior (este aqui) devido à quantidade de comentários e imagens quebradas. Este em vez, usarei para organizar e publicar imagens de mapas. Siga o tópico para receber notificações de novos mapas! » ↑ (clique no botão seguir) ↓ ↓ « « » » ↓ ↓ Mapas do Nolis | Mapas de Projetos | | Mapas de Eventos | ...
  9. #Introdução Bom hoje estarei trazendo aqui o sistema de Ping feito pelo Mock, com uma pequena adaptação feita por mim para funcionar em TFS 0.4(talvez podendo funcionar em outras) Pois o que ele disponibilizou foi apenas para TFS 0.3.6 e nem foi muito utilizado pela comunidade. Muitos servidores daqui para download tem script no talk mas a lib está totalmente errada e não tem o code nas sources. Esse sistema tem varias utilizades, podendo usar o comando !ping para verificar seu ms ou até mesmo por para kikar jogadores com ms muito alto... Se você não sabe o cliente já tem um sistema de ping, e getOtsystime é como os.time () + os.clock (), você tem ano, mês, dia, hora, minutos, segundos, milisegundos... Enfim chega de enrolação e vamos lá! Code para TFS 0.4 e OTX: Code para TFS 0.3.6 LIB: Prontinho, agora seu servidor está pronto para utilizar as funções de Ping. Seja criativo! Ahh você é daqueles que quer tudo na mão né? Aqui vai um talkactions para ver o ping. Em talkactions/scripts crie um arquivo chamado playerping.lua, cole isto dentro: -- Script by Yan Liima(Night for tibiaking.com) function onSay(cid, words, param, channel) local ms = ping.CheckPing(cid) doPlayerSendTextMessage(cid,22,"Ping aproximado --> ["..ms.."].") return true end Em talkactions.xml <talkaction words="!ping" event="script" value="playerping.lua"/>
  10. Countdown horário dos próximos eventos

    ILex WilL reagiu a Lurk por uma resposta no tópico

    1 ponto
    Peço desculpas caso esteja postando na área errada, por favor movam o tópico. Isso é um tutorial O script já existe na base que o @WooX postou aqui mas quando tentei passar pro meu sv 0.4 ficava dando debug dai eu desisti na época. Dai eu tava tentando ajudar nesse tópico, tentei mais uma vez e consegui fazer funcionar. Exemplo de como fica ingame Vamos a instalação em data/globalevents/scripts crie um arquivo chamado eventcheck.lua e cole isso dentro local EventsListalist = { {time = "01:00", name = "Snowball Event"}, {time = "02:00", name = "DesertWar Event"}, {time = "03:00", name = "Capture The Flag"}, {time = "04:00", name = "FireStorm Event"}, {time = "09:00", name = "Defend The Tower"}, {time = "10:00", name = "Snowball Event"}, {time = "11:00", name = "DesertWar Event"}, {time = "12:00", name = "Capture The Flag"}, {time = "13:00", name = "FireStorm Event"}, {time = "15:00", name = "Battlefield Event"}, {time = "16:00", name = "Defend The Tower"}, {time = "17:00", name = "Snowball Event"}, {time = "18:00", name = "DesertWar Event",}, {time = "19:00", name = "Capture The Flag",}, {time = "20:00", name = "FireStorm Event"}, {time = "21:00", name = "Real Castle"}, {time = "22:00", name = "Battlefield Event"}, {time = "23:00", name = "Defend The Tower"} } local position = {x = 129, y = 58, z = 7} -- posição do mapa onde o efeito vai sair function onThink(interval, lastExecution) local people = getPlayersOnline() if #people == 0 then return true end local Count = 0 for _, t in ipairs(EventsListalist) do local eventTime = hourToNumber(t.time) local realTime = hourToNumber(os.date("%H:%M:%S")) if eventTime >= realTime then doCreatureSay(people[1], "Proximo evento as {"..t.time.."h} "..t.name..", faltam "..timeString(eventTime - realTime)..".", TALKTYPE_ORANGE_1, false, 0, position) -- não use acentos aqui ou eles serão alterados por simbolos ingame return true end Count = Count + 1 end return true end Em data/globalevents/globalevents.xml adicione <globalevent name="eventos" interval="10000" event="script" value="eventcheck.lua"/> Depois adicione no fim de data/lib/050-function.lua function hourToNumber(str) -- By Killua local hour = (tonumber(str:sub(1,2))*3600) + (tonumber(str:sub(4,5)) * 60) if #str > 5 then hour = hour + tonumber(str:sub(7,8)) end return hour end function timeString(timeDiff,english) -- créditos: Killua local dateFormat = {} if english then dateFormat = { {"day", timeDiff / 60 / 60 / 24}, {"hour", timeDiff / 60 / 60 % 24}, {"minute", timeDiff / 60 % 60}, {"second", timeDiff % 60} } else dateFormat = { {"dia", timeDiff / 60 / 60 / 24}, {"hora", timeDiff / 60 / 60 % 24}, {"minuto", timeDiff / 60 % 60}, {"segundo", timeDiff % 60} } end local out = {} for k, t in ipairs(dateFormat) do local v = math.floor(t[2]) if(v > 0) then table.insert(out, (k < #dateFormat and (#out > 0 and ', ' or '') or ' e ') .. v .. ' ' .. t[1] .. (v ~= 1 and 's' or '')) end end return table.concat(out) end Créditos: @WooX que postou a base onde eu peguei o script Aparentemente o Killua que criou a função hourToNumber Seja lá quem criou o script, tem o nome de um tal "Henrique" no arquivo original, talvez tenha sido ele E eu por algumas pequenas alterações pra fazer o script funcionar em tfs 0.4 CASO VOCÊ QUEIRA O MESMO SISTEMA PARA OTX 2 PROVAVELMENTE O DA BASE POSTADO PELO WOOX VAI FUNCIONAR desde que você adicione o hourToNumber na lib
  11. [Retirado](Action Autoloot System) 2020

    Kyle Bellini reagiu a El Reverso por uma resposta no tópico

    1 ponto
    CONTEUDO RETIRADO!
  12. Olá pessoal! Vamos resolver esse problema dos monstros não passarem por cima de outros corpse para te atacarem... Trata-se de uma pequena modificação no rev3777 tfs 0.4, um bug comum nesse TFS. Aqui está a alteração que fiz para que funcione! Tile.cpp: if(!creature->canWalkthrough(*cit)) return NOTPOSSIBLE; //NOTPOSSIBLE Mude para: if (!creature->canWalkthrough(*cit) && (!cit->isCreature() || cit->isCorpse())) return NOTPOSSIBLE; // NOTPOSSIBLE Após isso, exclua todo o conteúdo da pasta "obj" e compile novamente. Pronto, o problema estará resolvido! Créditos para mim, @L3K0T
  13. 1 ponto
    local storageCoolDown = 6547 -- Valor da Storage, local storageTime = 5 -- Tempo em Segundos local time_between_hits = 0.3 --seconds local combat = Combat() combat:setParameter(COMBAT_PARAM_TYPE, COMBAT_PHYSICALDAMAGE) combat:setParameter(COMBAT_PARAM_EFFECT, 32) combat:setParameter(COMBAT_PARAM_DISTANCEEFFECT, CONST_ANI_ETHEREALSPEAR) function onCastSpell(creature, var) local player = Player(creature:getId()) if player:getStorageValue(storageCoolDown) < os.time() then player:setStorageValue(storageCoolDown, os.time() + storageTime * 1000) combat:execute(creature, var) addEvent(function() combat:execute(creature, var) end, time_between_hits * 1000) else player:sendTextMessage(MESSAGE_STATUS_DEFAULT, "Você deve aguardar no mínimo " .. storageTime .. " segundos antes de utilizar esse feitiço.") return false end return true end Tenta agora, acho que vai, foi mal a demora kkk
  14. Spell que bloqueia o target do player

    BangxD reagiu a LeoTK por uma resposta no tópico

    1 ponto
    @Lurk como ficaria uma spell em área que tira o target de todos menos de quem esta em party ou da mesma guilda ficaria legal também usar magia em área não permitir atacar quem tomar essa spell tanto durante 5 segundos quanto remover apenas 1 vez
  15. 1 ponto
    local storageCoolDown = 6547, -- Valor da Storage, local storageTime = 5, -- Tempo em Segundos local time_between_hits = 0.3 --seconds local combat = Combat() combat:setParameter(COMBAT_PARAM_TYPE, COMBAT_PHYSICALDAMAGE) combat:setParameter(COMBAT_PARAM_EFFECT, 32) combat:setParameter(COMBAT_PARAM_DISTANCEEFFECT, CONST_ANI_ETHEREALSPEAR) function onCastSpell(creature, var) local player = Player(creature:getId()) if player:getStorageValue(storageCoolDown) < os.time() then player:setStorageValue(storageCoolDown, os.time() + storageTime * 1000) combat:execute(creature, var) addEvent(function() combat:execute(creature, var) end, time_between_hits * 1000) else player:sendTextMessage(MESSAGE_STATUS_DEFAULT, "Você deve aguardar no mínimo " .. storageTime .. " segundos antes de utilizar esse feitiço.") return false end return true end @Thensus Warrior, Tenta ai, estou meio enferrujado com os.time e storage, eu nem testei antes de te enviar... Eu acho que vai funcionar, se não funcionar me avise que eu volto.
  16. SPELL/ Cancelar Target

    ITALOx reagiu a Lurk por uma resposta no tópico

    1 ponto
    @diarmaint editei minha primeira resposta do tópico aqui, olha lá @RicK Sanchez @BangxD atualizem tb @leozincorsair atualizei dnv atualizado dnv, acessa aqui https://tibiaking.com/forums/topic/100214-spell-que-bloqueia-o-target-do-player/ @diarmaint @RicK Sanchez @BangxD
  17. SPELL/ Cancelar Target

    ITALOx reagiu a Lurk por uma resposta no tópico

    1 ponto
    @BangxD @RicK Sanchez acabei de testar aqui, em spells.xml troca por isso aqui <instant name="Cancel Enemy Target" words="Cancel Enemy Target" lvl="12" mana="20" range="3" blockwalls="1" needtarget="1" exhaustion="2000" needlearn="0" event="script" value="canceltarget.lua"> </instant>
  18. [TFS 0.x] Função doPlayerTargetCreature

    BangxD reagiu a Lurk por uma resposta no tópico

    1 ponto
    @BangxD comentei no seu tópico, da uma olhada lá
  19. [TFS 0.x] Função doPlayerTargetCreature

    BangxD reagiu a WooX por uma resposta no tópico

    1 ponto
    Daria sim, como mencionado acima seria só fazer o player targetar a si mesmo, a source faz o resto do trabalho e cancela o target dele.
  20. Você só tem que apagar as samples (no MySQL) e fazer outros com os mesmos nomes e dados (Vocation, Looktype, Manamax, healthmax, etc). Se não souber como fazer, no meu perfil tem uma publicação sobre isso que tem uma explicação mais detalhada.
  21. [CreatureScript] Sugestão de balanceamento

    Lurk reagiu a Movie por uma resposta no tópico

    1 ponto
    Tem essa opção também, mas pegaria tecnicamente todas... Caso fosse somente a 1 e a 3, teria que ser pelo or mesmo. Mas boa observação!
  22. [CreatureScript] Sugestão de balanceamento

    Movie reagiu a Lurk por uma resposta no tópico

    1 ponto
    @Movie @Mor3nao @diarmaint acho q da p simplesmente fazer um if creature:isPlayer() and (creature:getVocation():getClientId()) >= 1 then q deve funfar pra todas
  23. ERRO NO TFS

    Bruce Pereira reagiu a diarmaint por uma resposta no tópico

    1 ponto
    Fique sempre atento ao que o erro informa "Wrong vocation name" você mudou o nome das vocações em vocations.xml? Edit-- o server está lendo as magias e não encontrando as vocações ditas lá, visto que vc refez elas. Esse erro vai parar apenas se não tiver nenhum poder com vocação do tibia.
  24. Chest daily (Vip)

    Lurk reagiu a raicont por uma resposta no tópico

    1 ponto
    Thank you very much. It served me perfectly. Just tweak the messages a bit and i separated them. What do you think? ... Thank you! function onUse(cid, item, fromPosition, itemEx, toPosition) local daysvalue = 1 * 24 * 60 * 60 local daily = getPlayerStorageValue(cid, 13541) local rewards = { { item = 12832, count = 1 }, { item = 2160, count = 100 }, { item = 12227, count = 1 }, { item = 12331, count = 1 }, { item = 12618, count = 5 }, { item = 12242, count = 1 }, { item = 2145, count = 1 } } if (daily == -1) then daily = 0 end if getPlayerStorageValue(cid, 13540) - os.time() <= 0 and getPlayerLevel(cid) >= 300 then local random = math.random(1, #rewards) doPlayerAddItem(cid, rewards[random].item, rewards[random].count) time = os.time() + daysvalue setPlayerStorageValue(cid, 13540, time) setPlayerStorageValue(cid, 13541, daily+1) local daily = getPlayerStorageValue(cid, 13541) doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "You done your " .. daily .. " Daily Chest.") elseif getPlayerLevel(cid) < 300 then doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "You must be at least level 300.") elseif getPlayerLevel(cid) < 300 or not isPremium(cid) then doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "You need to have premium account to do this chest.") else doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "You must wait 24 Hours to get your daily chest. Next avaiable will be at: " .. os.date("%H:%M:%S", getPlayerStorageValue(cid, 13540)) .. ".") end return true end
  25. [CreatureScript] Sugestão de balanceamento

    Cat reagiu a Movie por uma resposta no tópico

    1 ponto
    Só uma observação, mas nada demais... Esse tipo de verificação não é necessária if balance.canBlock == true then Você pode fazer apenas if balance.canBlock then Caso seja true, ele vai passar normalmente, caso for false ele para ali e nem termina de executar o código.
  26. Arrumando o ERRO UPTIME; 00:00:00

    Zabalos reagiu a L3K0T por uma resposta no tópico

    1 ponto
    UPTIME 00:00:00 Olá pessoal tudo bem? espero que sim! Sou o(a) L3K0T e hoje irei ensinar, como remover aquele erro de uptime do servidor que sempre ficar em "00:00:00" toda vez que dissemos !uptime, algumas source tem esses problemas, uma forma que achei pra resolver foi seguindo o tutorial de explicação abaixo. vá em data\creaturescripts\scripts e abra o arquivo.lua chamado login.lua;; lá no final de login.lua, antes de;; return true end Adicione;; getWorldUpTime() feito isso é só salvar e reiniciar o servidor. Quando você entrar pela primeira vez e já vai conta o uptime no servidor. Parece tão simples né? pois é!!! algumas pessoas vivem quebrando a cabeça pra arrumar isso. *melhor você ser quem você é do que fingir que sabe alguma coisa e não sabe de nada, fica a dica.
  27. Lembram do NTO antigo sem sprites top down?

    Lurk reagiu a Jazz por uma resposta no tópico

    1 ponto
    Ilustração perfeita, Léo. @Tópic, Creio que a hora de solicitar o fechamento do tópico em formações de equipe se aproxima. Uma boa noticia sobre o projeto, Woox e eu voltamos a trabalhar juntos nessa empreitada. Essa primeira semana eu conclui algumas coisas pequenas, nada muito grande mas me serviu como uma provação própria, fiquei feliz de fazer pois lembro-me que em dois mil e dezenove isso era totalmente impossível. Quando será que as coisas começaram a fazer sentido? ? Mas longe de querer bancar o babaca, essa semana que entra vou começar a trabalhar com modificações no sistema de NPC. O servidor está sendo arquitetado aos poucos e mesmo a ideia atual ser uma mecânica mais simples do que quando imaginado anteriormente, ainda sim contará com suas inovações e complexidades. Essa talvez seja uma das últimas postagens pois assim que o servidor contar com uma ou outra inovação pretendo criar um tópico na área de show-off.
  28. 1 ponto
    • Extensions Customizadas I - Grounds • Extensions Customizadas II - Walls > Extensions Customizadas III - Doodads (objetos montados) Os arquivos que serão editados serão estes abaixo, faça um backup antes de começar: • Mostrarei 4 tipos de Doodads que podem ser criados na paleta: 1 - Um item único simples. 2 - Itens que se conectam. 3 - Vários itens sortidos. 4 - Peças no andar superior e inferior, vertical e horizontal. Agora vou mostrar como funcionam os códigos desses doodads. Eles podem ser usados como modelo para criar outros. 1 - Item único. Em RME - data - versão - doddads.xml Usarei o item Lava Fountain como exemplo: <brush name="lava fountain" type="doodad" server_lookid="5074" draggable="true" on_blocking="false" thickness="100/100"> <alternate> -- south -- <item id="5074" chance="10"/> </alternate> <alternate> -- east -- <item id="5075" chance="10"/> </alternate> </brush> Brush Name: o nome que será identificado posteriormente em tilesets.xml, para ser cadastrado na paleta Type: Não mude. Server_lookid: Id do item que aparecerá na paleta. Draggable: Se o item é arrastável ou não. On_blocking: Se o item poderá ser colocado em cima de outros objetos ou void, ou apenas em um piso andável. Thickness: Não mude. • Para este item simples, veja que é possível adicionar outras versões do mesmo item, como por exemplo ele virado para outras direções, para isso você usa a tag: <alternate> conteúdo </alternate>. • No map editor, para alternar a direção do item utilize a tecla Z. Não precisa definir a direção do item no código, conforme você utilizar a tecla Z o item será alternado de acordo com a ordem que os objetos foram adicionados no código. 2 - Itens que se conectam: Em RME - data - versão - doddads.xml Usarei o item Stone Wall como exemplo: <brush name="stone railing2" type="wall" server_lookid="3481"> <wall type="pole"> <item id="3483" chance="1"/> </wall> <wall type="horizontal"> <item id="3481" chance="1"/> </wall> <wall type="vertical"> <item id="3482" chance="1"/> </wall> <wall type="corner"> <item id="3480" chance="1"/> </wall> </brush> • Type wall permite usar as tags "pole, horizontal, vertical e corner", para definir como os itens serão conectados, portanto não mude. Não esqueça de sempre fechar a tag corretamente <wall type...> ... </wall>. Wall type Pole id: Wall type Horizontal id: Wall type Vertical id: Wall type corner id: 3 - Itens sortidos: Em RME - data - versão - doddads.xml Usarei o item Stone Rocks como exemplo: <brush name="tiny stone rocks" type="doodad" server_lookid="3614" draggable="true" on_blocking="true" on_duplicate="true" thickness="50/100"> <item id="3610" chance="4"/> <item id="3611" chance="7"/> <item id="3613" chance="7"/> <item id="3614" chance="10"/> </brush> • Parecido com o código do Lava Fountain, a diferença é que nesse caso não tem a tag alternate, pois os itens não possuem uma direção específica. Mas possuem variedades, e isso pode ser feito simplesmente duplicando o código <item id..../> • Chance irá definir qual item aparecerá mais vezes e menos vezes. 4 - Peças no andar superior e inferior Em RME - data - versão - doddads.xml Usarei o item Waterfall como exemplo: <brush name="waterfall" type="doodad" server_lookid="3569" draggable="true" on_blocking="true" on_duplicate="true" thickness="100/100"> <alternate> <composite chance="10"> <tile x="0" y="0" z="0"> <item id="3569" chance="10"/> </tile> <tile x="0" y="1" z="0"> <item id="3573" chance="10"/> </tile> <tile x="0" y="0" z="-1"> <item id="3571" chance="10"/> </tile> </composite> </alternate> <alternate> <composite chance="10"> <tile x="0" y="0" z="0"> <item id="3570" chance="10"/> </tile> <tile x="1" y="0" z="0"> <item id="3574" chance="10"/> </tile> <tile x="0" y="0" z="-1"> <item id="3572" chance="10"/> </tile> </composite> </alternate> </brush> • Veja que para adicionar um item que contém uma parte dele no andar superior, usamos o esquema x, y, z dentro da tag <composite></composite>. Lembrando que: (o centro = 0 é o SQM onde for aplicado o conjunto de itens) - X representa a linha horizontal, positivo = vai para a direita, negativo = vai para a esquerda. - Y a vertical, positivo = vai para o sul, negativo = para o norte. - e Z floors (andares), sendo que Z negativo = para subir e Z positivo = para descer, Z = 0 representa o andar-centro (onde o item for aplicado). - Composite chance: mantenha o mesmo valor para ambas as opções • Nesse código foi usado a tag <Alternate></alternate> por que a cachoeira possui duas direções, e para alterná-las use a tecla Z. • Observando a primeira tag <alternate> veja a posição dos três itens: • Cadastre os doodads em tilesets.xml, use a ferramenta CTRL + F para procurar itens próximos ou paletas que você quer adicionar os itens e acrescente as tags: Exemplo: <brush name="lava fountain"/> • Use os códigos de modelo para criar novos itens. • O estilo de doodad (exemplo 4) pode ser usado para criar pontes, estátuas e outros objetos que possam ser montadas as partes. • Dúvidas? Comente.
  29. (Resolvido)Erro stamina system

    Joaogabriel reagiu a ikaroangelo21 por uma resposta no tópico

    1 ponto
    eventsId = {} local function rechargeStamina(cid) if not isPlayer(cid) then eventsId[cid] = nil return end doPlayerAddStamina(cid, 1) eventsId[cid] = addEvent(rechargeStamina, 3 * 60 * 1000, cid) end function onStepIn(cid, item, position, lastPosition, fromPosition, toPosition, actor) if isPlayer(cid) then eventsId[cid] = addEvent(rechargeStamina, 3 * 60 * 1000, cid) doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, "Bem vindo aos trainers VIP's " .. getCreatureName(cid) .."! Você receberá 1 minuto de stamina a cada 3 minutos nos trainers VIP's.") end return true end function onStepOut(cid, item, position, lastPosition, fromPosition, toPosition, actor) if isPlayer(cid) then stopEvent(eventsId[cid]) eventsId[cid] = nil end return true end Onde tem 1 = ganho de stamina. Onde tem 3 = o tempo para ganhar 1 minuto. Somente modificar, testado em otx 8.60.
  30. [TFS 1.x] antiTheft para casas

    Thensus Warrior reagiu a vankk por uma resposta no tópico

    1 ponto
    Quem não está invitado na casa não pode jogar lixo na casa, ou pessoas que são "convidadas" não podem mexer nos items da casa. Vai em events/events.xml e ative o onMoveItem, trocando de 0 para 1. eg: <event class="Player" method="onMoveItem" enabled="1" /> Então vai em events/scripts/player.lua copia isso o code abaixo em baixo da funcão: function Player:onMoveItem(item, count, fromPosition, toPosition) local antiTrash = true local antiTheft = true if antiTrash then local tile = Tile(toPosition) if tile and tile:hasFlag(TILESTATE_HOUSE) then local house = tile:getHouse() if house then local accessList = House.getAccessList local playerName = self:getName():lower() if house ~= self:getHouse() and (playerName ~= accessList(house, GUEST_LIST):lower() or playerName ~= accessList(house, SUBOWNER_LIST):lower()) then self:sendTextMessage(MESSAGE_STATUS_SMALL, "You cannot throw items into players houses, which you are not invited to.") return false end end end end if antiTheft then local tile = Tile(fromPosition) if tile and tile:hasFlag(TILESTATE_HOUSE) then local house = tile:getHouse() if house then if house ~= self:getHouse() and self:getName():lower() ~= house:getAccessList(SUBOWNER_LIST):lower() then self:sendTextMessage(MESSAGE_STATUS_SMALL, "You cannot move items from house, which you are only guest to.") return false end end end end Voce configura o script na linha 1 e 2 do code acima. Créditos: Printer.
  31. 0 pontos
    Fico feliz por ajudar, o motivo de ser 1000 é que eu pensei que era milisegundos, fazia mais de ano que eu não mexia com a biblioteca os.time de Lua ?
Líderes está configurado para São Paulo/GMT-03:00

Informação Importante

Confirmação de Termo