Ir para conteúdo

Sonark

Membro
  • Registro em

  • Última visita

Histórico de Curtidas

  1. Curtir
    Sonark deu reputação a Reds em [Spell] Descanso para curar mana   
    Olá, hoje estou trazendo um script de uma spell que uso no meu servidor. Quando o jogador utiliza, recupera mana a cada segundo, porém não pode se mover e caso leve algum dano a spell é cancelada. Adicionei também para que o jogador só possa utilizar a magia caso esteja com a condição "SOUL", então ele precisa ter matado algum monstro recentemente.
     
    Em spells crie um arquivo chamado rest.lua e coloque o seguinte:
     
    local config = { storage = 3482142, -- storage para verificar se a spell ta ativa antes de healar cooldownStorage = 3910229, --- storage do cooldown cooldown = 23, --- tempo entre um uso e outro duration = 6, --- duração effect = 12 -- efeito que sai ao falar a spell } function onCastSpell(cid, var) if getCreatureCondition(cid, CONDITION_SOUL) then if os.time() - getPlayerStorageValue(cid, config.cooldownStorage) >= 0 then setPlayerStorageValue(cid, config.storage, os.time() + config.duration) setPlayerStorageValue(cid, config.cooldownStorage, os.time() + config.cooldown) doSendMagicEffect(getCreaturePosition(cid), config.effect) doCreatureSay(cid,"Rest!!!", 19) for i=1,5 do addEvent(healMana, i * 1000, cid) end doCreatureSetNoMove(cid, true) addEvent(doCreatureSetNoMove, 5000, cid, false) return true else doPlayerSendCancel(cid, "Rest in cooldown, you must wait "..(-1 * (os.time() - getPlayerStorageValue(cid, config.cooldownStorage))).." seconds.") return false end else doPlayerSendCancel(cid, "You are not in fight") return false end end function healMana(cid) if getPlayerStorageValue(cid, config.storage) > 0 then local level = getPlayerLevel(cid) local extraMana = math.ceil(level/2) local manaToAdd = 50 + extraMana local maxMana = getCreatureMaxMana(cid) if (manaToAdd > math.ceil(maxMana / 10)) then manaToAdd = math.ceil(maxMana/10) end doCreatureAddMana(cid, manaToAdd) end end  
    Em spells.xml coloque:
     
    <instant name="Rest" words="exura kor" lvl="35" manapercent="5" prem="1" range="4" exhaustion="2000" needlearn="0" event="script" value="rest.lua"> <vocation id="9"/> </instant> Em creaturescripts crie um arquivo chamado rest.lua e coloque:
    function onStatsChange(cid, attacker, type, combat, value) if value >= 1 and (type == STATSCHANGE_HEALTHLOSS) or (getCreatureCondition(cid, CONDITION_MANASHIELD) and type == (STATSCHANGE_MANALOSS)) then if (getPlayerStorageValue(cid,3482142) - os.time() > 0) and isCreature(attacker) then setPlayerStorageValue(cid, 3482142, -1) doCreatureSetNoMove(cid, false) return true end end return true end Adicione no creaturescript.xml
    <event type="statschange" name="sleepcancel" event="script" value="rest.lua"/>  
    Agora para garantir que funcione é necessário adicionar no login.lua o creatureevent:
    registerCreatureEvent(cid, "rest") if getPlayerStorageValue(cid, 3482142) ~= 0 then setPlayerStorageValue(cid, 3482142, 0) end  
     
    Se eu não esqueci de nada, é para funcionar, agora vou mostrar um gif da spell:
     
    https://giphy.com/gifs/5nrWO73TnLj4Bkra24
     
    Sugestão: também é possível mudar o cálculo da cura utilizando um math.random, assim não fica valores estáticos.
     

     
  2. Curtir
    Sonark deu reputação a Designer Walox em água transparente ( Walox Edit )   
    Olá!
    Bom venho trazer para vocês sprites com animações que eu editei para o meu servidor!
    Vi que muitas pessoas tem dificuldade para mexer no PHOTOSHOP e como para mim é o contrario pretendo ajudar no que puder
    Bom vamos parar de frescura e ir para o conteudo haha, Espero que gostem e colaborem com o UP ❤️    

     
    Baixe e use com moderação haha qualquer coisa só chamar no chat
    Baixar Conteudo
     
     
  3. Curtir
    Sonark deu reputação a Dwarfer em Item Key System   
    Fala, galerinha! Há um tempo atrás tinha feito esse sisteminha simples, como achei que não seria muito útil, acabou sumindo nas profundezas das pastas do meu computador. No entanto, como vi o pedido do membro @DboHere, acho que outras pessoas podem precisar.
     
    Como funciona:
    Uma key única que pode ser usada somente uma vez adicionará um item ao player quando for utilizada.
     
    - Criando uma key contendo 10 crystal coins: 
    !createkey 2160,10 ou !createkey crystal coin,10 
     
    O player receberá a mensagem: "You have created the key: rXo-980376. You can add other items using !addkey."
     
    - Adicionando novos itens à mesma key:
    !addkey rXo-980376,2463,1
     
    O player receberá a mensagem: "You have added other items to the key rXo-980376."
     
    - Checando os itens que uma key possui:
    !checkkey rXo-980376
     

     
    - Utilizando a key o player receberá todos os itens associados a essa key. Depois disso, a key ficará inválida.
    !key rXo-980376
     
    - Deletando a key da database (apenas se necessário):
    !deletekey rXo-980376
     
    Configuração:
     
    Execute o seguinte comando no mysql do seu servidor:
     
    CREATE TABLE `code_key` ( `id` INT NOT NULL AUTO_INCREMENT, `key` VARCHAR(255) NOT NULL, `item_id` INT NOT NULL, `count` INT NOT NULL, `invalid` INT NOT NULL DEFAULT 0, PRIMARY KEY (`id`) );  
    Em talkactions/scripts, crie um arquivo:
     
    keysystem.lua
     
     
    Em "access" edite o grupo que pode utilizar cada comando. No exemplo abaixo, apenas players com acesso maior que 3 podem utilizar o comando !createkey.
     
    ["!createkey"] = {access = 3}, 
     
    Em talkactions.xml, adicione a tag: <talkaction words="!key;!createkey;!deletekey;!checkkey;!addkey" event="script" value="keysystem.lua"/>
     
    E é isso, espero que seja útil  
  4. Curtir
    Sonark deu reputação a Camilo Salvadori em Show Off - Khronus (Iniciante)   
    Oi pessoal, tudo bem? Bom... como podem ver me chamo Camilo e sempre acompanhei showoff de mapas tanto daqui quanto de outros forums. Há um tempo atrás, iniciei meu projeto, mas não sabia nem por onde começar mapeando... me faltava inspiração e criatividade! 
    Com o tempo fui aprimorando lentamente os detalhes e fui ficando satisfeito com o progresso... Sei que sou iniciante ainda, mas como fico responsável por todas as áreas do servidor não consigo passar horas e horas treinando! Mas digo para vocês: fazer um mapa e gostar do que tu estás fazendo e imaginar gente jogando nele é terapeutico.
     
    Bom, sem mais delongas, vou compartilhar aqui alguns ambientes... Lembrando que não vou usar nenhum programa de edição de imagem nem nada do tipo... só o mapa nu e cru direto do editor... bem amador mesmo, mas espero que gostem!
     
    Só mais um adendo para levarem em consideração: Os sprites que não são custom, são do tibia 7.3 e 7.4 e que ainda pretendo, em algumas destas fotos, polir mais os cenários/biomas
     
    Aqui é uma cave do jogo... Acredito que eu deveria diminuir um pouco o número de stalagmites
     
     
     
    Aqui é uma repaginação do famoso "single resp de dragon" próximo a Dwarf Bridge. Créditos ao Mapper da Cipsoft
     
     
     
    Aqui um acampamento simples de "Ogres"
     
     
     
    Aqui é estrutura de uma hunt no mesmo estilo "Plains of Havoc", com bixos soltos, no seus devidos biomas: Lembrando que as sprites são do tibia antigo... (na sua maior parte)
     
     
    Esta aqui é o andar debaixo, mostrando os segredos desta cratera:
     
     
     
    Aqui um vasto deserto com seus mistérios, abrigando criaturas que "viveriam" neste local
     
     
     
    Aqui mais um pouco deste bioma do deserto e um single resp:
     
     
     
     
     
    Ainda sobre este bioma desértico (esta foto coloquei no post do projeto, mas acho que o lugar certo é aqui):
     
     
    Aqui fiz uma experiência de misturar biomas para ver como ficava e gostei!
     
     
     
    Este aqui (sul de Thais) retrata uma ambientação "mística".
     
     
     
    Aqui fiz uma experiência em criar uma árvore (supostamente o habitat original dos Elfos) para ver como ficava com criaturas..
     
     
     
    Isto é uma brincadeira que eu fiz com as perspectivas do Tibia... Todo este cenário se encontra no mesmo floor: tudo no mesmo andar, porém dando a impressão que são vários!
     
     
     
    As fotos abaixo são uma inspiração direta desta mesma hunt no Medivia! (Como eu só vi stream ali, acabei fazendo bem do meu jeito mesmo..)
     
    A entrada clássica, acima de Thais:
     
     
     
    Aqui dei uma brincada com os andares...
     
     
     
    Este é o andar debaixo:
     
     
     
    Aqui criei uma espécie de adega/depósito de cerveja (a idéia é que as coisas sejam entupidas e meio bagunçadas lá dentro)
     
     
     
    Aqui de novo quis retratar uma perspectiva de andar:
     
    Superior:
     
     
     
    Inferior:
     
     
     
    Por enquanto é isto, pessoal! Não me xinguem se acharem ruim... lembrem que é para o meu servidor e estou fazendo tudo sozinho... Estou compartilhando, pois apesar de tudo, sou apaixonado por criação de mapas, tanto pela criação em si, quanto por imaginar que um dia alguém pode gostar do que está vendo ou se imaginar jogando!
     
    Uma boa tarde a todos!
  5. Curtir
    Sonark deu reputação a Deadpool em Pedido Cliente pra download que contenha sprites remake do PXG   
    Download Spr e dat
    Print
     

    Creditos:
    Kaleudd
  6. Curtir
    Sonark deu reputação a Vodkart em (Resolvido)[pedido] Remover parede em x dia e x hora   
    wall.lua
    local config = { pos = {x = 183, y = 59, z=7}, -- posição da parede id = 8476, -- id da parede time = 5 -- vai voltar a parede em 5 minutos } local days = {"Monday","Wednesday","Friday","Saturday"} -- coloque os dias que vc quer function removeParede() local t = getTileItemById(config.pos, config.id).uid return t > 0 and doRemoveItem(t) and doSendMagicEffect(config.pos, CONST_ME_POFF) end function onTimer() if isInArray(days, os.date("%A")) then removeParede() doBroadcastMessage("[Evento] A parede foi removida!!", 22) addEvent(function() local x = getTileItemById(config.pos, config.id).uid if x == 0 then doCreateItem(config.id, 1, config.pos) end end, config.time*60*1000) end return true end  
    TAG
     
    <globalevent name="remove wall" time="19:00" event="script" value="wall.lua"/>  
     
    Caso der erro na função main, troque o "onTimer()" por "onTime()"
  7. Curtir
    Sonark deu reputação a rodrigorodriguess em Teleport Automático em X dias e X horas   
    Bom.. eu pesquisei e pesquisei, achei vários tutoriais ensinando, mas nenhum funcionava, tenho um aqui comigo que já veio em meu otserver, não sei quem é o dono mas espero ajudar a todos.
    a função do script é aparecer um teleport em tal dia e em tal hora no seguinte local e que irá enviá-lo para outro local e depois de um tempo desapareça.
     
    Primeiramente abra data/globalevents/scripts e crie o seguinte:
     
    teleporteautomatico.lua
     
    local config = {         day = "Monday","Wednesday","Friday","Sunday",         pos = {x=151, y=77, z=6},         topos = {x=550, y=34, z=7},         time = 5, -- tempo que o teleport ira sumir em minutos         msg_open = "O Portal vai se abrir em 5 minutos.",         msg_close = "O Portal se fechou." } local function DelTp()         local t = getTileItemById(config.pos, 1387)         if t then                 doRemoveItem(t.uid, 1)                 doSendMagicEffect(config.pos, CONST_ME_POFF)         end end function onTimer()                 if (os.date("%A") == config.day) then                 doCreateTeleport(1387, config.topos, config.pos)                 doBroadcastMessage(config.msg_open)                 addEvent(DelTp, config.time*60*1000)                 addEvent(doBroadcastMessage, config.time*60*1000, config.msg_close)         end         return true end adicione em globalevents.xml a seguinte tag:
    <globalevent name="Teleport Automatico" time="15:30" event="script" value="teleportautomatico.lua"/> está configurado para 15:30, caso queira trocar.. se pode trocar de 00:00 até 23:59
     
    para configurá-lo é fácil:
     
            day = "Monday","Wednesday","Friday","Sunday",  -- Dias em que o teleport irá aparecer
            pos = {x=151, y=77, z=6}, -- Posição aonde será criado o teleport
            topos = {x=550, y=34, z=7}, -- Posição pra onde o teleport ira levar o player
            time = 5, -- tempo que o teleport ira sumir em minutos,
     
            msg_open = "SUA MENSAGEM AO ABRIR O TELEPORT"
            msg_close = "MENSAGEM AO FECHAR O TELEPORT"
     
    Espero ter ajudado um colega que pediu ai, REP+ se puderem 
     
    CRÉDITOS: luanluciano93
  8. Obrigado
    Sonark deu reputação a LeoTK em [NTO NS] Source 0.3.6 8.54 OTX Windows/Linux   
    Fala galera, bom eu vi que é difícil achar uma source 0.3.6 sem bugs, então resolvi disponibilizar a source do meu servidor 0.3.6 8.54
    1- Magic Effects e ShotyEffect Extendido 2- Magic Effect até 700+ / Shoty Effect até 150 se não me engano 3- Sistema de Dupla Empunhadura 4- Tem a função doplayeropenchannel para abrir os chats ao logar 5- Todos os danos de elementos estão configurado para o magiceffect 131 que no meu client é vazio 6- Auto Stacking ao jogar item que se junta por quantidade ele junta automaticamente 7- No Blocking Respawn o monstro da respawn mesmo tendo jogadores perto e com magic effect (não lembro o número do magic effect) 8- Novo Elemento Wind Adicionado 9- Algumas modificações que não lembro
     
    Linux Compile
    Tem um arquivo.txt que tem os códigos para compilar no linux lá tem o nome da biblioteca e o código.
     
    Windows Compile
     
    Software necessário : Stian's_Repack_Dev-Cpp_0.2,_64bit.rar    Scan
     
    Use a pasta Dev-Cpp/test esqueça do conteúdo da pasta dev-cpp e use o projeto criado na pasta test a diferença é o parâmetro usado para compilar a source.
     
    OBS: Caso tiver erros ou problemas abra um tópico na área de Suporte. 
     
    DOWNLOADS:
    [NTO_NS]_Source_0.3.6_8.54.rar
    SCAN
  9. Gostei
    Sonark deu reputação a Dwarfer em (Resolvido)Quest por Tempo   
    Caso seja tfs 0.4:

    Em talkactions/scripts crie um arquivo.lua:
    local quests = { ["demon"] = { min_level = 10, enter_pos = {x = 1, y = 1, z = 1}, area = {fromPos = {x = 1, y = 1, z = 1}, toPos = {x = 1, y = 1, z = 1}}, time_to_finish = {10, "min"}, time_to_make_again = {1, "hour"} }, ["dragon"] = { min_level = 10, enter_pos = {x = 1, y = 1, z = 1}, area = {fromPos = {x = 1, y = 1, z = 1}, toPos = {x = 1, y = 1, z = 1}}, time_to_finish = {10, "min"}, time_to_make_again = {1, "hour"} } } local time_storage = 87870 -- só modifique se necessário function onSay(cid, words, param, channel) local param, p, check = param:lower(), getPlayerPosition(cid), false if not param or param == "" then local str, n = '~~ [Available Quests] ~~\n\n', 1 for quest, info in pairs(quests) do str = str .. n .. " - " .. Fupper(quest) .. " (Level: "..info.min_level..")\n" n = n + 1 end doShowTextDialog(cid, 1955, str) return true end local t = quests[param] if not t then return doPlayerSendCancel(cid, "Quest not found.") end if getPlayerLevel(cid) < t.min_level then return doPlayerSendCancel(cid, "Only players level "..t.min_level.." or higher can go the "..param.." quest.") end if isInRange(p, t.area.fromPos, t.area.toPos) then return doPlayerSendCancel(cid, "You are already inside the "..param.." quest area.") end for quest, info in pairs(quests) do if isInRange(p, info.area.fromPos, info.area.toPos) then check = true end end if check then return doPlayerSendCancel(cid, "You cannot go to another quest inside a quest.") end local stor = getPlayerStorageValue(cid, time_storage) if stor > os.time() then return doPlayerSendCancel(cid, "You can go to a quest again at "..os.date("%d %B %Y %X", stor)..".") end doSendMagicEffect(p, CONST_ME_POFF) local destination = t.enter_pos doTeleportThing(cid, destination) doSendMagicEffect(destination, CONST_ME_TELEPORT) doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "Good luck in "..param.." quest! You have "..getStrTime(t.time_to_finish).." to finish or you will be kicked.") setPlayerStorageValue(cid, time_storage, mathtime(t.time_to_make_again) + os.time()) addEvent(function() if isPlayer(cid) then if isInRange(getPlayerPosition(cid), t.area.fromPos, t.area.toPos) then doSendMagicEffect(getPlayerPosition(cid), CONST_ME_POFF) local temple = getTownTemplePosition(getPlayerTown(cid)) doTeleportThing(cid, temple) doSendMagicEffect(temple, CONST_ME_TELEPORT) doPlayerSendTextMessage(cid, MESSAGE_STATUS_WARNING, "Your time is over!") end end end, mathtime(t.time_to_finish) * 1000) return true end function mathtime(table) -- by dwarfer local unit = {"sec", "min", "hour", "day"} for i, v in pairs(unit) do if v == table[2] then return table[1]*(60^(v == unit[4] and 2 or i-1))*(v == unit[4] and 24 or 1) end end return error("Bad declaration in mathtime function.") end function getStrTime(table) -- by dwarfer local unit = {["sec"] = "second",["min"] = "minute",["hour"] = "hour",["day"] = "day"} return tostring(table[1].." "..unit[table[2]]..(table[1] > 1 and "s" or "")) end function Fupper(str) return (str:gsub("^%l", string.upper)) end Em talkactions.xml, adicione a tag:
     
    <talkaction words="!quest" event="script" value="NOMEDOARQUIVO.lua"/>  
    Configuração:
     
    ["demon"] = { -- nome da quest min_level = 10, -- level mínimo para ir para a quest enter_pos = {x = 1, y = 1, z = 1}, -- posição de entrada na quest area = { fromPos = {x = 1, y = 1, z = 1}, -- posição do canto superior esquerdo da área toPos = {x = 1, y = 1, z = 1} -- posição do canto inferior direito da área }, time_to_finish = {10, "min"}, -- tempo que o player terá para finalizar a quest ("sec", "min", "hour", "day") time_to_make_again = {1, "hour"} -- tempo para poder fazer uma quest novamente },  
    Utilização:
    !quest -> mostra as quests disponíveis !quest nome da quest -> leva o player para a quest Ex.: !quest demon

Informação Importante

Confirmação de Termo