Ir para conteúdo
  • Cadastre-se

xWhiteWolf

Héroi
  • Total de itens

    3604
  • Registro em

  • Última visita

  • Dias Ganhos

    154

Histórico de Curtidas

  1. Obrigado
    xWhiteWolf recebeu reputação de koyotestark em Gran Castle Event (8.54+)   
    Olá pessoa, hoje vim trazer pra vocês um script bem requisitado que inclusive é vendido por alguns scripters. Algumas versões "pioradas" dessse script podem ser encontradas em servidores cópias do Fox World porém nenhum desses scripts chegará aos pés desse daqui que foi arrumado por mim.
    Eu não sou o criador do Script, eu peguei qualquer um na internet e só fui arrumando e adicionando coisas que as pessoas reclamavam que não tinha.
    O cara que criou a versão que eu editei é esse daqui:

    Não vou me prolongar e nem falar mal da versão do Roksas, apenas saibam que eu editei ela praticamente inteira e que agora está 100%.

    Aqui tem um pequeno vídeo de como funciona o evento:
     
     

    Explicação: Gran Castle é um evento para ser feito sozinho ou com a guild, há um limite configurável no script de membros que podem entrar da mesma guild. Em dias determinados é aberto o evento e os players podem entrar ao falar com o NPC Melkrapo. Uma vez dentro do castelo os players batalharão para subir os andares e chegar até a Gran Tower, um monstro lendário que dará glória para aqueles que o derrotarem. Será que você é capaz? Instale no seu server e descubra! Um evento para redefinir o conceito de PVP e onde o seu maior inimigo serão seus semelhantes.


    Sem mais delongas vamos começar  a instalar esse monstrinho.. porque ele é grande pra caralho.
     
     
     


    Agora crie um arquivo em creaturescripts\scripts chamado Gran Tower.lua e adicione o seguinte:

    em data\lib crie um arquivo chamado 046-Gran Tower.lua e adicione o seguinte dentro dele:
    Agora voltando aos creaturescripts crie um arquivo em scripts chamado Gran Aura.lua e adicione:


    E um arquivo chamado Barrier.lua na mesma pasta com o seguinte conteúdo:
    Agora em globalevents\globalevents.xml adicione a seguinte linha:
    <globalevent name="Gran Tower" interval="60" event="script" value="Gran Tower.lua"/> E adicione o script associado em globalevents\scripts com o nome de Gran Tower.lua:
    Agora na pasta monster procure o seu monsters.xml e adicione essas duas linhas:
    <monster name="Gran Tower" file="8.4/Gran Tower.xml"/> <monster name="Barrier" file="8.4/barrier.xml"/> Feito isso crie os monstros na pasta data\monster\8.4:
    O primeiro se chama barrier.xml e deverá conter:


    O segundo se chamará Gran Tower.xml e deverá conter:
    Agora vamos para NPC, vá em data\npc e crie um arquivo chamado Melkrapo.xml com o seguinte conteúdo:


    Agora em npc\scripts crie um arquivo chamado Melkrapo.lua e adicione o seguinte:

     
    Agora partindo pra spells vá em data\spells e adicione no spells.xml essas linhas:
  2. Gostei
    xWhiteWolf recebeu reputação de paulo thush em New Library v. 1.2   
    Fala galera, hoje vim trazer pra vocês uma nova biblioteca de funções que eu venho desenvolvendo, pretendo ir atualizando esse tópico constantemente sempre adicionando funções novas e explicando a utilização delas. Algumas funções que eu coloquei aqui estão presentes na OTAL também, porém algumas eu fiz pequenas correções de forma que essa lib poderia facilmente substituir a OTAL sem grandes problemas (pelo menos se você utilizava apenas as funções básicas da otal)
    Todas as funções que não tem -- nome do autor do lado dela foram feitas por mim, xWhiteWolf ou Night Wolf (NW). O restante delas são créditos dos devidos autores, apenas coloquei pois considero funções vitais no server de cada um. Crie um arquivo em data/lib chamado 075 - White Wolf Functions.lua e coloque o seguinte código dentro:



     
    Agora eu vou explicar oque cada função faz porque de nada adianta lançar uma lib e não explicar oque ela faz não é mesmo? hahaha
    Obs inicial: quando uma função tiver em seus parametros um [] significa que oque está dentro do colchetes não é um parâmetro obrigatório.



    Como usar: doShowTimeByPos(cid, getCreaturePosition(cid), 20, 20)
    Irá fazer uma contagem regressiva na posição que o player se encontra começando de 20 e mandando a mensagem na mesma cor da fala dos monstros.
    Essa função é bem útil em actions/spells para fazer contagem de tempo em runas como a magic wall e ver quanto tempo falta pra magic wall sumir)

     
    Obs: Espero que ajude bastante pessoas a entender sobre funções, eu utilizei cid como o principal uid das funções nos exemplos mas você pode muito bem utilizar outros uids, fica a critério seu.

    Qualquer dúvida comentem abaixo que eu vou tentar ajudar da melhor maneira.
    Ahhh, isso daí foi testado em 8.54 mas deve funcionar em quase todas as versões que tenham as funções básicas do TFS. 

    EDIT: Pessoal, agora é sério, essa lib tem fácil umas 600 linhas, das quais umas 500 eu devo ter codado sozinho (na mão, linha por linha). Eu tive todo o trabalho de testar cada uma delas e oque eu peço é o mínimo de gratidão e respeito. Se eu te ajudei clique em Gostei, se você tiver alguma dúvida eu to me colocando a disposição de responder qualquer coisa relacionada ao tópico, mesmo que você não saiba nem oque é uma lib apenas venha aqui e escreva sua dúvida.

    EDIT 2: Duas novas funções adicionas, espero que gostem!

    EDIT 3: Três novas funções adicionadas juntamente com suas respectivas explicações.
  3. Gostei
    xWhiteWolf recebeu reputação de Claudio Marcio em Volatile Spiderling   
    Fala galera do TK, hoje eu venho mais uma vez trazer uma das magias mais incríveis que eu já vi até hoje (sério). A magia original foi feita em outro fórum mas para a versão 10.1... como eu vi que ninguém conseguiu adaptar pra versões inferiores eu decidi criar a minha própria volatile spiderling.
    Confesso que no começo eu tive muita dificuldade em achar as funções certas mas depois de tentar ajudar o membro @234567890z no suporte eu tive uma epifania. Sem mais delongas eu vou explicar oque o script faz e em seguida ensinar a colocá-lo no seu server.

    • Explicação: A magia foi feita baseada na personagem Elise do jogo League of Legends: você faz uma cria que anda até os oponentes e se explodem causando dano em area e deixando eles envenenados. Aqui tem um gif da magia funcionando  
    obs: note que esse gif não fui eu que fiz mas ele demonstra exatamente como a magia funciona.
     
     
    • Instalação: Pra instalá-lo no seu servidor vai ser um pouco complicado pois ele requer diversas modificações... antes de mais nada, coloque essas linhas no seu spells.xml:
    <instant name="Volatile Spiderling" words="utevo res tera" lvl="40" mana="20" prem="1" selftarget="1" exhaustion="2000" groups="1,2000" icon="88" needlearn="0" event="script" value="especiais/spiderling.lua"> <vocation id="3"/> <vocation id="7"/> </instant> <instant name="poison explosion" words="poison explosion" lvl="0" mana="0" prem="0" aggressive="1" exhaustion="3000" needlearn="1" event="script" value="especiais/newspider.lua"> </instant> Agora você vai ter que criar os dois arquivos na pasta spells\scripts\especiais.
    Em newspider.lua coloque o seguinte:
    agora em spiderling.lua coloque o seguinte: Agora feito isso vc vai precisar criar o monstro que usará essa spell.. vá em monster\monsters.xml e adicione a seguinte linha: <monster name="Clone Spider" file="arachnids/newspider.xml"/> agora crie o arquivo data\monsters\arachnids\newspider.xml e adicione o seguinte nele:
    Agora eu vou ensinar vocês a editarem... não tem muito oque mudar, apenas se vc quiser alterar os danos da spell vá em newspider.lua e será possível editar os danos do poison e da explosão:
     
    local damageTable = {     {4, -3},     {9, -2},     {20, -1} }   aqui você muda quantos danos serão e quanto cada um tirará.. no caso serão 4 hits de -3, depois 9 hits de -2 e por fim 20 hits de -1 até o poison parar. Lembrando que esses danos saem de 4 em 4 segundos. Se você quiser que eles sejam mais rápidos é só editar aqui:
    addDamageCondition(poisonpowder, t[1], 4000, t[2]) (4000 significa 4 segundos).
    Feito isso será possível editar também a area e o dano da explosão respectivamente em: Area:    
    Dano:
    doAreaCombatHealth(cid, 1, getThingPos(cid), area, -1, -30, 20)
    Em vermelho temos o dano mínimo, analogamente, em azul, temos o dano máximo.
    Em verde é possível editar o efeito da explosão
    Só lembrando que as edições que forem feitas no newspider.lua devem ser feitas no spider.lua para que a magia tenha graça.. se não o dano da explosão/poison ao explodir será diferente caso ela morrer antes.  Em spiderling.lua vc pode editar a quantidade máxima de crias que um player pode ter... o normal está setado para 2 mas vc pode sentir-se livre pra colocar quantas queira.
    local maxsummon = 2   (Só lembre-se que ao explodir uma aranha pode acertar outra então não é muito bom deixar um numero maior que 3);
     
    Se você for daqueles bem chatinhos com a magia você ainda pode editar algumas coisas importantes tais como:
    O efeito que sai quando ela explode por morte ou pela spell:
     doSendMagicEffect(getThingPos(cid), 16) O tempo em que ela executa a spell, a chance da spell sair naquele tempo e quantos sqm de distancia a criatura alvo deve estar pra aranha se explodir: 
    <attack name="poison explosion" interval="1000" range="1" chance="50"/> interval = de quantos em quantos segundos ela executa a spell
    range = distancia em sqm que o alvo deve estar pra que ela execute a spell
    chance = chance de executar a spell a cada interval (nesse caso a cada 1 segundo tem 50% de chance dela soltar a magia)
     
    Você ainda pode editar aqui em vermelho:
    o tempo que leva pra criatura executar a magia.. Por padrão eu deixei 2 segundos, ou seja... eu sumono a aranha, ela vai até o alvo e a cada segundo q ela passa grudada no alvo (1 sqm de distancia) ela tem 50% de chance de ativar a spell e ficar parada no lugar durante 2 segundos até explodir. Se você quiser que ela leve menos tempo pra explodir é só baixar o 2000 (em milisegundos).. Se você quiser aumentar o dano e deixar ela parada por mais tempo até explodir pode editar a vontade aumentando os 2000.

    • Bom, isso é tudo que dava pra eu explicar... é óbvio que dá pra editar muito mais coisa mas se você não é scripter e não tem muita idéia de como editar eu dei uma ensinada básica doque você está autorizado a mexer. Espero que vocês curtam a spell e deem aquele REP+ pra fortalecer kkkk
    Eu não pretendia liberar essa spell visto que ela é extremamente complexa e nenhum servidor tem ela, mas, acho que seria muito babaca da minha parte ficar guardando um script tão bonito hahaha. Qualquer erro ou dúvida postem nos comentários que eu tento ajudar.
     
    ah, mais uma coisa: Os créditos são 90% meus visto que eu fiz praticamente tudo.. 9% é pro cara que fez a magia original (se vcs derem uma procurada vcs vão ver que não tem quase nada a ver com a minha mas os créditos dele são por ele ter me dado a idéia) e 1% pro cara no suporte que me pediu ajuda numa spell do mesmo gênero e me fez correr atrás de uma forma de fazer essa magia pra versões inferiores a TFS 1.0
  4. Gostei
    xWhiteWolf recebeu reputação de Claudio Marcio em Chain Lightning   
    Hoje vim trazer à pedidos uma spell do League of Legends que é a chain Lightning do personagem Ryze:

    Aqui tem um vídeo explicativo: 


    Teoricamente está idêntico porém não tive a chance de testar então vou postar aqui e esperar que vocês me falem sobre os erros que podem dar (apesar de eu achar que não vai dar nenhum)

    Crie um arquivo em data\spells\scripts chamado chainlight.lua e coloque isso dentro dele:


    E agora no spells.xml:
    <instant name="TK" words="chainlight" lvl="8" manapercent="8" maglv="15" prem="0" exhaustion="1500" range="4" needtarget="1" needlearn="0" event="script" value="especiais/chainlight.lua"> </instant> Qualquer duvida postem aí, e se gostou da spell é só clicar em "gostei". Vou dormir agora que faz umas 20 horas to acordado scriptando pro tk auheuha flw pra vcs

    EDIT: Troquei o arquivo, a outra versão estava bugada então refiz do 0 e agora está funcionando.

    EDIT2: Se você usa a New Lib ela já possui uma função pra essa spell então apenas use esse arquivo aqui:




  5. Gostei
    xWhiteWolf recebeu reputação de luanluciano93 em Canary 3.1.2 - Servidor Completo Mapa Global 13x   
    Obrigado por espalhar a palavra do canary @luanluciano93, lembro quando você chegou no projeto e ainda tinha algumas ressalvas se deveria usar ou não, que bom que conseguimos trazer você pro lado amarelo da força.
    Muita gente daqui do TK me conhece e o canary vem na verdade de uma ideia que tive anos atrás depois do fim do projeto BlackOnix (lá em 2008) que era juntar as pessoas + incríveis da comunidade pra fazer um servidor fodástico e completo que seria público. A ideia de ter um produto incrivelmente bom seria avançar o desenvolvimento, unificar esforços e ter uma base comum que fosse atrativa pra qualquer um desenvolver em cima e contribuir de volta.
    Quando eu conheci o pessoal da OTBR e vi que eles já estavam realizando essa ideia, foi um match instantâneo e estou acompanhando o projeto desde então. Eu cheguei a fazer umas contribuições pontuais e até trazer várias correções e melhorias do meu projeto pessoal, o Empire, pra esse futuro que nós acreditávamos.

    Infelizmente levou mais de 15 anos pra eu ver uma iniciativa do tipo aqui na comunidade isso me venceu pelo cansaço, hoje em dia eu diria que estou mais pra eu "conselheiro" que dá um apoio moral e suporte de forma pontual já que não estou mais envolvido de forma ativa na comunidade e nem tenho mais servidor.
    Vale ressaltar que mesmo sob intenso hate e racismo (sobretudo de algumas pessoas da otland), a galera da otbr continua fazendo um trampo SEM PALAVRAS.
    Usem, divulguem e defendam!
    O canary é top e é brasileiro. É a melhor base e de longe o projeto que mais continua evoluindo o cenário do open tibia.

    O pessoal por trás desse projeto é sensacional e muito focado em evoluir o projeto com muito carinho e cuidado, eles merecem ser sempre citados:
    Eduardo Dantas, Lucas Grossi, Renato "Foot", "Majesty", Luan "Ardent" (cfcluan), "Beats", Murilo, "Marcosvf132" e Renato "Mehah" são alguns dos maiores contribuidores.
  6. Gostei
    xWhiteWolf recebeu reputação de JowL em Experience Weapon System   
    [1] = {required = 1000}, -- qnt de exp precisa pra cada nivel no formato [nv] = {required = experiencia requerida}
    [2] = {required = 10000},
    [3] = {required = 100000},
    [4] = {required = 1000000},
    [5] = {required = 10000000}
    }

    [nv] = {required = experiencia requerida}

    pro nivel 1 precisa de 1000 de exp pra upar, dai vc vai pro nv 2 com 0 de exp.
    pro nv 2 precisa de 10000 de exp pra upar, dai qnd vc atinge isso vc vai pro nv 3 com 0 de exp... etc.


    @HallsSantos, o céu é o limite.. pensa noque vc quer e depois pensa em como fazer.
  7. Gostei
    xWhiteWolf recebeu reputação de JowL em Experience Weapon System   
    Eai galera, hoje eu to trazendo pra vocês o meu Experience Weapon System. Pra quem não conhece é um sistema em que conforme você vai matando os monstros sua arma vai adquirindo parte da experiencia e upando de nível junto com você!

    Eu abri um tópico pra sugestões mas os players foram tão criativos que eu decidi seguir meus instintos e fazer da minha própria maneira se não ia ficar muito ruim pra servers que não fossem derivados.

    Testado em TFS 0.3.6 mas deve funcionar em qualquer um que tenha getThing(Pos) e onAttack e onKill ;]
    Foi decidido por mim então fazer da seguinte maneira:

    • Axes/ Swords/ Bows/ Crossbows:
    Tem 5% de chance (pra cada nivel) de ferir gravemente o oponente e deixar ele sangrando, o nível do ferimento é proporcional ao nível da arma.

    • Clubs:
    Tem 5% de chance (pra cada nivel) de bater com tanta força que faça todos ao redor sentirem o tremor do seu ataque e levarem um dano baseado no nivel da arma e no ataque da mesma.

    • Wands/ Rods:
    Tem 5% de chance (pra cada nivel) de retirar uma quantidade de mana do player (proporcional ao nivel da arma) e ficar recuperando mana mais rapidamente durante 5 segundos após isso
     
    Dito isso vamos ao que interessa:

    Adiciona essas duas linhas no seu creaturescripts.xml:
    <event type="kill" name="itemexp" script="itemexp.lua"/> <event type="attack" name="conditionitem" script="conditionitem.lua"/> e no login.lua:
    --------------- Experience System ---------------- registerCreatureEvent(cid,"itemexp") registerCreatureEvent(cid,"conditionitem") Agora crie um arquivo em data\lib\ chamado 037 - Experience System.lua e coloque isso dentro dele:



    Feito isso crie um arquivo em creaturescripts\scripts chamado itemexp.lua e adicione isso daqui:




    Agora crie outro arquivo em creaturescripts\scripts, adicione isso daqui nele e chame de conditionitem.lua:



    Agora configurando:




    Bom, é isso aí, a minha idéia era trazer um pouco a mais de RPG e fazer o pessoal pensar 2x antes de sair trocando suas armas pela primeira que ele dropa que tenha + ataque que a dele pois assim ele passa a ter que valorizar mais os itens que já possui a um bom tempo;

    Outro motivo é que agora os items vão valer mais e agora seu server vai ter mais movimento nas trocas ;]

    Espero que tenham gostado e qualquer coisa é só falar nos comentários. Abraço do lobinho.

    Ps: aqui tem duas fotinhas mas o resto só instalando mesmo porque tem bastante coisa pra mostrar.

    E lembrando, se te ajudei clica em Gostei aqui embaixo. Fuis
  8. Gostei
    xWhiteWolf recebeu reputação de JowL em (Resolvido)[Ajuda] Como fazer magias "vip"   
    é bem simples, acompanha.


    ------------------------PARTE EM QUE EU CRIO OS COMBATS------------------------
    local combat = createCombatObject()
    setCombatParam(combat, COMBAT_PARAM_BLOCKARMOR, 1)
    setCombatParam(combat, COMBAT_PARAM_BLOCKSHIELD, 1)
    setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_PHYSICALDAMAGE)
    setCombatParam(combat, COMBAT_PARAM_EFFECT, 34)
    setCombatFormula(combat, COMBAT_FORMULA_SKILL, 1, 0, 1, 0)

    local xCombat = createCombatObject()
    setCombatParam(xCombat, COMBAT_PARAM_BLOCKARMOR, 1)
    setCombatParam(xCombat, COMBAT_PARAM_BLOCKSHIELD, 1)
    setCombatParam(xCombat, COMBAT_PARAM_TYPE, COMBAT_PHYSICALDAMAGE)
    setCombatParam(xCombat, COMBAT_PARAM_EFFECT, 34)
    setCombatFormula(xCombat, COMBAT_FORMULA_SKILL, 1, 0, 1, 0)
    --------------------------- PARTE EM QUE CRIO AS AREAS ------------------------

    local area = createCombatArea({
        {0, 1, 1, 1, 0},
        {1, 1, 1, 1, 1},
        {1, 1, 3, 1, 1},
        {1, 1, 1, 1, 1},
        {0, 1, 1, 1, 0}
    })

    local area1 = createCombatArea({
        {0, 0, 0},
        {0, 3, 0},
        {0, 0, 0}
    })
    -------------------- PARTE EM QUE EU ASSOCIO O COMBAT COM A AREA ----------------
    setCombatArea(xCombat, area)
    setCombatArea(combat, area1)
    ------------------------------------------------------------------------------------------------

    Feito isso é como se eu tivesse duas spells numa só, agora eu só uso storage pra definir qual delas eu vou soltar qnd falar as palavras... essa parte vem aqui:

    -------------------------------- DEFININDO O STORAGE --------------------------
    local config = {
    storageativ = 76650    
    }

    -------------------------------- PARTE QUE EU SELECIONO QUAL COMBAT USAR --------------------------

    function onCastSpell(cid, var)
    if getPlayerStorageValue(cid, config.storageativ) == 1 then ---- SE O STORAGE DEFINIDO ACIMA FOR IGUAL A 1 ENTÃO SOLTA A MAGIA PREMIUM, DO CONTRÁRIO SOLTA ELA NORMAL
    retorn = doCombat(cid, xCombat, var)
    else
        retorn = doCombat(cid, combat, var)
    end
    return retorn
    end
  9. Gostei
    xWhiteWolf recebeu reputação de JowL em (Resolvido)[Ajuda] Como fazer magias "vip"   
    isso é bem simples meu jovem, você cria dois combats numa mesma spell e faz por storage pra ver qual vc tem que soltar.

    aqui tem um exemplo:
     
    local combat = createCombatObject() setCombatParam(combat, COMBAT_PARAM_BLOCKARMOR, 1) setCombatParam(combat, COMBAT_PARAM_BLOCKSHIELD, 1) setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_PHYSICALDAMAGE) setCombatParam(combat, COMBAT_PARAM_EFFECT, 34) setCombatFormula(combat, COMBAT_FORMULA_SKILL, 1, 0, 1, 0) local xCombat = createCombatObject() setCombatParam(xCombat, COMBAT_PARAM_BLOCKARMOR, 1) setCombatParam(xCombat, COMBAT_PARAM_BLOCKSHIELD, 1) setCombatParam(xCombat, COMBAT_PARAM_TYPE, COMBAT_PHYSICALDAMAGE) setCombatParam(xCombat, COMBAT_PARAM_EFFECT, 34) setCombatFormula(xCombat, COMBAT_FORMULA_SKILL, 1, 0, 1, 0) local area = createCombatArea({ {0, 1, 1, 1, 0}, {1, 1, 1, 1, 1}, {1, 1, 3, 1, 1}, {1, 1, 1, 1, 1}, {0, 1, 1, 1, 0} }) local area1 = createCombatArea({ {0, 0, 0}, {0, 3, 0}, {0, 0, 0} }) setCombatArea(xCombat, area) setCombatArea(combat, area1) local config = { storageativ = 76650 } function onCastSpell(cid, var) if getPlayerStorageValue(cid, config.storageativ) == 1 then retorn = doCombat(cid, xCombat, var) else retorn = doCombat(cid, combat, var) end return retorn end
  10. Obrigado
    xWhiteWolf recebeu reputação de Kranxz em Dash.   
    Uma magia que solta um dash, que é controlado ao mudar a direção que você está olhando (ctrl + seta)
    ~~~~Script baseado no AvaOT/Korelin
    dash.lua
    -- dash as it was in avaOT by Night Wolf local damage = 20 -- dano que toma qnd bate em algum obstáculo local speed = 910 -- velocidade do player ao usar o dash (vai de 0 a mil) local pzprotect = true -- nao deixa entrar em pz com a spell local distance = 15 -- quantos sqms anda local function isWalkable(pos, creature, proj, pz)-- by Nord if getTileThingByPos({x = pos.x, y = pos.y, z = pos.z, stackpos = 0}).itemid == 0 then return false end if getTopCreature(pos).uid > 0 and creature then return false end if getTileInfo(pos).protection and pz then return false, true end local n = not proj and 3 or 2 for i = 0, 255 do pos.stackpos = i local tile = getTileThingByPos(pos) if tile.itemid ~= 0 and not isCreature(tile.uid) then if hasProperty(tile.uid, n) or hasProperty(tile.uid, 7) then return false end end end return true end function onWalk(cid) if isCreature(cid) then local poslook = getCreatureLookPosition(cid) poslook.stackpos = STACKPOS_TOP_MOVEABLE_ITEM_OR_CREATURE if isWalkable(poslook, false, false, pzprotect) then if not isCreature(getThingfromPos(poslook).uid) then doMoveCreature(cid, getPlayerLookDirection(cid)) doSendMagicEffect(getPlayerPosition(cid), 14) else doCreatureAddHealth(cid, -damage) doSendMagicEffect(getPlayerPosition(cid), 31) doSendAnimatedText(getPlayerPosition(cid), "-"..damage , 180) end else doCreatureAddHealth(cid, -damage) doSendMagicEffect(getPlayerPosition(cid), 31) doSendAnimatedText(getPlayerPosition(cid), "-"..damage , 180) end end return true end function onCastSpell(cid, var) for i = 0, distance do addEvent(onWalk, (1001- math.min(speed, 1000)) *i, cid) end return true end no começo você edita o dano que recebe ao bater num obstáculo e aqui
     local distance = 15 você configura a distancia máxima que o player percorre antes do dash acabar.

    no Spells.xml você adiciona essa tag aqui
    <instant name="Dash" words="utani dash hur" direction="1" lvl="100" mana="200" prem="1"  exhaustion="7000"  event="script" value="dash.lua"> <vocation id="7"/> <vocation id="6"/> <vocation id="5"/> </instant> EDIT:: ALGUMAS IMAGENS


  11. Obrigado
    xWhiteWolf recebeu reputação de Kranxz em (Resolvido)Bônus no Conjunto de itens   
    adorei a ideia mas não sei ao certo como fazer.. vou tentar aqui e te dou um feedback dos meus avanços. Ao que o jeito seria criar uma condition que desse o atributo a mais em questão e fazer um creaturescripts q se tivesse com o set adicionaria a condition.. como se fosse uma magia mesmo
  12. Obrigado
    xWhiteWolf recebeu reputação de Kranxz em (Resolvido)Bônus no Conjunto de itens   
    segue essa lógica:

    movements\scripts\set.lua:
    -- NW SET SYSTEM local config = { slot1 = 4, slot2 = 8, item1 = 8889, item2 = 11234 } local condition = createConditionObject(CONDITION_ATTRIBUTES) setConditionParam(condition, CONDITION_PARAM_TICKS, -1) setConditionParam(condition, CONDITION_PARAM_SKILL_CLUB, 50) setConditionParam(condition, CONDITION_PARAM_SKILL_SWORD, 50) setConditionParam(condition, CONDITION_PARAM_SKILL_AXE, 50) setConditionParam(condition, CONDITION_PARAM_SKILL_DISTANCE, 50) function onEquip(cid, item, slot) if getPlayerSlotItem(cid, config.slot2).itemid == config.item2 and getPlayerSlotItem(cid, config.slot1).itemid == config.item1 then doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Now that you're using the full set you'll receive a special bonus...") doAddCondition(cid, condition) doSendMagicEffect(getCreaturePos(cid), 10) end return true end function onDeEquip(cid, item, slot) doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "You're no longer receiving the special bonus..") doRemoveCondition(cid, CONDITION_ATTRIBUTES) return true end movements.xml
    <!-- Set Items --> <movevent type="Equip" itemid="11234" slot="feet" event="script" value="set.lua"/> <movevent type="Equip" itemid="8889" slot="armor" event="script" value="set.lua"/> <movevent type="DeEquip" itemid="11234" slot="feet" event="script" value="set.lua"/> <movevent type="DeEquip" itemid="8889" slot="armor" event="script" value="set.lua"/>
  13. Obrigado
    xWhiteWolf recebeu reputação de Kranxz em Experience Weapon System   
    Eai galera, hoje eu to trazendo pra vocês o meu Experience Weapon System. Pra quem não conhece é um sistema em que conforme você vai matando os monstros sua arma vai adquirindo parte da experiencia e upando de nível junto com você!

    Eu abri um tópico pra sugestões mas os players foram tão criativos que eu decidi seguir meus instintos e fazer da minha própria maneira se não ia ficar muito ruim pra servers que não fossem derivados.

    Testado em TFS 0.3.6 mas deve funcionar em qualquer um que tenha getThing(Pos) e onAttack e onKill ;]
    Foi decidido por mim então fazer da seguinte maneira:

    • Axes/ Swords/ Bows/ Crossbows:
    Tem 5% de chance (pra cada nivel) de ferir gravemente o oponente e deixar ele sangrando, o nível do ferimento é proporcional ao nível da arma.

    • Clubs:
    Tem 5% de chance (pra cada nivel) de bater com tanta força que faça todos ao redor sentirem o tremor do seu ataque e levarem um dano baseado no nivel da arma e no ataque da mesma.

    • Wands/ Rods:
    Tem 5% de chance (pra cada nivel) de retirar uma quantidade de mana do player (proporcional ao nivel da arma) e ficar recuperando mana mais rapidamente durante 5 segundos após isso
     
    Dito isso vamos ao que interessa:

    Adiciona essas duas linhas no seu creaturescripts.xml:
    <event type="kill" name="itemexp" script="itemexp.lua"/> <event type="attack" name="conditionitem" script="conditionitem.lua"/> e no login.lua:
    --------------- Experience System ---------------- registerCreatureEvent(cid,"itemexp") registerCreatureEvent(cid,"conditionitem") Agora crie um arquivo em data\lib\ chamado 037 - Experience System.lua e coloque isso dentro dele:



    Feito isso crie um arquivo em creaturescripts\scripts chamado itemexp.lua e adicione isso daqui:




    Agora crie outro arquivo em creaturescripts\scripts, adicione isso daqui nele e chame de conditionitem.lua:



    Agora configurando:




    Bom, é isso aí, a minha idéia era trazer um pouco a mais de RPG e fazer o pessoal pensar 2x antes de sair trocando suas armas pela primeira que ele dropa que tenha + ataque que a dele pois assim ele passa a ter que valorizar mais os itens que já possui a um bom tempo;

    Outro motivo é que agora os items vão valer mais e agora seu server vai ter mais movimento nas trocas ;]

    Espero que tenham gostado e qualquer coisa é só falar nos comentários. Abraço do lobinho.

    Ps: aqui tem duas fotinhas mas o resto só instalando mesmo porque tem bastante coisa pra mostrar.

    E lembrando, se te ajudei clica em Gostei aqui embaixo. Fuis
  14. Curtir
    xWhiteWolf deu reputação a luanluciano93 em Canary 3.1.2 - Servidor Completo Mapa Global 13x   
    Olá galera, em 02/12/23 o projeto Canary atualizou seu release para a versão 3.1.2 e como estou desenvolvendo um servidor usando esta base decidi divulga-la, pois a cada dia ela melhor muito, é um projeto promissor.

    Para quem não conhece, Canary é um projeto desenvolvido no github de um servidor completo na versão 13.21 (atualmente) com todas as features do tibia global. Ele tem duas opções de datapack que seriam o global e um custom.

    Aqui está o link do projeto para quem quiser conhecer melhor: https://github.com/opentibiabr/canary
    Aqui está o link do lançamento do release para a versão 3.1.2 e suas mudanças e melhorias: https://github.com/opentibiabr/canary/compare/v3.1.1...v3.1.2
    Aqui está o link do discord do projeto para dúvidas e etc: https://discord.com/invite/gvTj5sh9Mp
    Aqui está o link de tutoriais e a documentação do projeto: https://docs.opentibiabr.com/home/welcome

    Algumas das features existentes no projeto:

    BOOSTED CREATURE:

     
    EVENT SCHEDULE:

     
    CYCLOPEDIA:

     
    CHARMS:

     
    DAILY REWARD: 

     
    PREY:

     
    IMBUEMENTS:

     
    MARKET:

     
    STORE:

     
    CUSTOM CHARACTERS:


     
    DENTRE MUITOS OUTROS!
  15. Gostei
    xWhiteWolf recebeu reputação de shirudev em Glacier Set dando conditions em área   
    Eai galera, esse script eu fiz para um membro aqui do TibiaKing no suporte e achei que ficou bem legal então decidi postar.

    Explicação: Ao tomar um dano maior que 300, se o player tiver usando a glacier robe, uma área em volta dele vai ser congelada e todos dentro dessa área ficarão com slow. Caso o player estiver com o full glacier set, além do paralyze, as pessoas dentro da área receberão dano de freezing

    crie um arquivo em creaturescripts\scripts chamado glacierrobe.lua e adicione isso daqui dentro dele


    agora vá em creaturescripts\scripts e procure um arquivo chamado login.lua.
    dentro dele coloque isso (de preferencia embaixo dos outros registerCreatureEvent):
    registerCreatureEvent(cid, "glacierrobe") Lembre-se que se vc quiser repetir isso pra outros set's você tem que repetir todo o processo, tanto no creaturescripts.xml quanto no login.lua


    no meu server além do set glacier eu uso os outros 3 set's elementais, ficando assim:


    EDIT:: Algumas imagens pra vocês verem como o script funciona:







     
  16. Obrigado
    xWhiteWolf recebeu reputação de koyotestark em [Boss Skill] Aegis of Immortal   
    Fala galera do TK, hoje vim trazer pra vocês um script de um server bem famoso, trata-se de nada mais e nada menos doque a Aegis of Immortal do Fox World. Quase nenhum OTserver consegue me deixar com vontade de jogar, mas se tem um que chegou bem próximo foi o Fox e o motivo é a criatividade dos caras. É muito fácil aprender lua e ser um ótimo scripter mas ter criatividade pra criar esse tipo de script é bem mais raro. Sem mais delongas vou apresentar a idéia do script e logo em seguida ensinar a instalar no seu servidor. 
      Aegis of the Immortal
    Descrição: É obtida 1 carga ao vencer o boss Aegis (aparece em invasões). Com esta técnica, o jogador ganha a aura do boss, e se morrer é teleportado para a Aegis Dimension, e após 3 segundos volta para o lugar que estava, com life e mana full como se não tivesse sido tocado. (limite de 1 carga) Tipo: (B.Skill) Vocações: All Vocations Elemento: n/a fonte: site do fox


    Well, o script é bem simpleszinho mas eu apanhei pra caramba pra fazer ele funcionar certinho (acredito que nem o script dos caras do Fox funcione da maneira correta, mas esse daqui vai funcionar)

    Antes de tudo você tem que criar uma área no seu map editor e colocar ela inteira como no-pvp e no-logout. Essa vai ser a área que você vai ser teleportado, será a sua "Aegis Dimension".




    Feito isso você vai precisar adicionar essa linha em creaturescripts.xml:
       <event type="statschange" name="reborn" script="reborn.lua"/> obs: eu levei muito tempo tentando fazer por onPrepareDeath mas aparentemente essa função não funciona tão bem quanto statschange e acabava chamando a si mesma repetidas vezes.

    agora crie um arquivo chamado reborn.lua na pasta creaturescripts\scripts e coloque isso dentro dele:




    Agora você só tem que adicionar essa linha no creaturescripts\scripts\login.lua (de preferencia antes do ultimo return true)
    --- BOSS SKILLS ---- registerCreatureEvent(cid, "reborn") if getPlayerStorageValue(cid, 19332) == -1 then         setPlayerStorageValue(cid, 19332, 0)      end Agora seu server possui a Aegis of Immortal e você pode configurar essa skill passiva de diferentes maneiras:
    1) Pode ser uma quest que dá como prêmio X quantidades dessa skill
    2) Um npc que vende X quantidades da skill
    3) Um item que ao ser equipado ativa a skill
    4) Um boss que vc mata e ganha quantidades dela
    5) Um bonus em algum evento
    6) Um item de shop
    etc.

    Tudo que vc precisa fazer é criar um script que dê o storage 19332, o valor do storage é o numero de vezes que vc vai utilizar a skill.

    aqui tem um exemplo de uma quest que ganha 5 charges da Aegis of Immortal:
    function onUse(cid, item) local storage = 19332 if getPlayerStorageValue(cid, storage) ~= 5 then doPlayerSetStorageValue(cid, storage, 5) doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "You have habilited your [BOSS SKILL]") else doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "Your [BOSS SKILL] is already with "..getPlayerStorageValue(cid, storage).." charges.") end return true end e aqui tem algumas fotos de como fica no seu server:












     
    Espero que vcs tenham gostado.. 
    Vou dar 20% de Crédito pro Kilua porque sem o tutorial dele de addEvent isso daqui não seria possível e 30% pro pessoal do Fox por terem me dado a idéia do script.   

    EDIT: Fiz um monstro q dá essa skill ao morrer, só que eu inovei um pouquinho e fiz ele tendo a skill, ou seja, vc tem que matar ele um numero X de vezes pra valer de verdade kkk A graça é que esse numero de X é inerente ao player (fiz por storage), então se um grupo de 10 pessoas for fazer e cada hora uma matar, serão (X+1) vezes no mínimo auhauhauh Só que como ele não dá loot e o unico premio dele é a skill pra quem matar X vezes, então o pessoal dá KS mesmo. Enfim, aproveitem:

    creaturescripts\scripts\aegis.lua
    local config = { storagekill = 19500, --- storage q conta a quantidade de kills storageaegis = 19332, --- storage da skill tempo = 5, -- tempo até ele renascer times = 2, --- quantidade de vezes que tenho que matar charges = 1, --- cargas da skill q ganha ao matar definitivamente effect1 = 66, -- efeito ao morrer effect2 = 10 --- efeito ao renascer } function onKill(cid, target, lastHit) local killed = getPlayerStorageValue(cid,config.storagekill) local skill = getPlayerStorageValue(cid, config.storageaegis) if isMonster(target) and getCreatureName(target):lower() == 'aegis' then if killed < config.times then doCreatureSay(target, "I'll be back mortal...", 20) doSendMagicEffect(getThingPos(target), config.effect1) setPlayerStorageValue(cid, config.storagekill, killed+1) addEvent(doSendMagicEffect, 1000*config.tempo, getThingPos(target), config.effect2) addEvent(doCreateMonster, 1000*config.tempo, "Aegis", getCreaturePosition(target), true) end if killed >= config.times then setPlayerStorageValue(cid, config.storagekill, 0) if skill < config.charges then doPlayerSendTextMessage(cid,22,"Congratulations, you just killed "..getCreatureName(target).." and earned Aegis of Immortal skill!") setPlayerStorageValue(cid, config.storageaegis, config.charges) end end end return true end
    creaturescripts\scripts\login.lua registerCreatureEvent(cid, "aegis") if getPlayerStorageValue(cid, 19500) == -1 then         setPlayerStorageValue(cid, 19500, 0)      end creaturescripts.xml
    <event type="kill" name="aegis" script="aegis.lua"/> monster\aegis.xml
    <?xml version="1.0" encoding="UTF-8"?> <monster name="Aegis" nameDescription="Aegis, the immortal" race="blood" experience="0" speed="605" manacost="0"> <health now="100000" max="100000"/> <look type="287" head="0" body="0" legs="0" feet="0" corpse="0"/> <targetchange interval="2000" chance="15"/> <strategy attack="60" defense="5"/> <flags> <flag summonable="0"/> <flag attackable="1"/> <flag hostile="1"/> <flag illusionable="0"/> <flag convinceable="0"/> <flag pushable="0"/> <flag canpushitems="1"/> <flag canpushcreatures="1"/> <flag targetdistance="1"/> <flag runonhealth="0"/> </flags> <attacks> <attack name="melee" interval="2000" skill="210" attack="260"/> <attack name="lifedrain" interval="1000" chance="20" range="3" min="-550" max="-1050"/> <attack name="firecondition" interval="1000" chance="7" range="2" min="-800" max="-1200"> <attribute key="shootEffect" value="fire"/> <attribute key="areaEffect" value="yellowspark"/> </attack> <attack name="physical" interval="1000" chance="7" radius="6" target="0" min="-250" max="-750"> <attribute key="areaEffect" value="explosion"/> </attack> <attack name="death" interval="1000" chance="50" radius="5" target="0" min="-200" max="-500"> <attribute key="areaEffect" value="mortarea"/> <attribute key="shootEffect" value="suddendeath"/> </attack> <attack name="firefield" interval="1000" chance="4" radius="5" target="0"> <attribute key="areaEffect" value="explosion"/> </attack> <attack name="fire" interval="1000" chance="34" range="7" radius="7" target="1" min="-350" max="-850"> <attribute key="shootEffect" value="fire"/> <attribute key="areaEffect" value="firearea"/> </attack> <attack name="fire" interval="1000" chance="13" length="8" spread="0" min="-500" max="-1000"> <attribute key="areaEffect" value="explosion"/> </attack> <attack name="fire" interval="1000" chance="10" length="8" spread="3" min="-300" max="-1500"> <attribute key="areaEffect" value="firearea"/> </attack> </attacks> <defenses armor="165" defense="150"> <defense name="healing" interval="1000" chance="25" min="2000" max="3000"> <attribute key="areaEffect" value="blueshimmer"/> </defense> <defense name="speed" interval="1000" chance="10" speedchange="1800" duration="4000"> <attribute key="areaEffect" value="redshimmer"/> </defense> </defenses> <immunities> <immunity physical="0"/> <immunity energy="1"/> <immunity fire="1"/> <immunity poison="0"/> <immunity lifedrain="1"/> <immunity paralyze="1"/> <immunity outfit="1"/> <immunity drunk="1"/> <immunity invisible="1"/> </immunities> <voices interval="5000" chance="50"> <voice sentence="Poor innocent, I CAN'T DIE HAHAHAHAAHA"/> <voice sentence="Your soul will be mine!"/> <voice sentence="MUAHAHAHAAHAHA, I TOLD YOU" yell="1"/> </voices> </monster> OBS: edite ele porque eu coloquei ele muito forte, com muita vida e com muita recuperação de vida.


    monster\monsters.xml
    <monster name="Aegis" file="aegis.xml"/>
  17. Gostei
    xWhiteWolf recebeu reputação de Pedrok22 em Experience Weapon System   
    Eai galera, hoje eu to trazendo pra vocês o meu Experience Weapon System. Pra quem não conhece é um sistema em que conforme você vai matando os monstros sua arma vai adquirindo parte da experiencia e upando de nível junto com você!

    Eu abri um tópico pra sugestões mas os players foram tão criativos que eu decidi seguir meus instintos e fazer da minha própria maneira se não ia ficar muito ruim pra servers que não fossem derivados.

    Testado em TFS 0.3.6 mas deve funcionar em qualquer um que tenha getThing(Pos) e onAttack e onKill ;]
    Foi decidido por mim então fazer da seguinte maneira:

    • Axes/ Swords/ Bows/ Crossbows:
    Tem 5% de chance (pra cada nivel) de ferir gravemente o oponente e deixar ele sangrando, o nível do ferimento é proporcional ao nível da arma.

    • Clubs:
    Tem 5% de chance (pra cada nivel) de bater com tanta força que faça todos ao redor sentirem o tremor do seu ataque e levarem um dano baseado no nivel da arma e no ataque da mesma.

    • Wands/ Rods:
    Tem 5% de chance (pra cada nivel) de retirar uma quantidade de mana do player (proporcional ao nivel da arma) e ficar recuperando mana mais rapidamente durante 5 segundos após isso
     
    Dito isso vamos ao que interessa:

    Adiciona essas duas linhas no seu creaturescripts.xml:
    <event type="kill" name="itemexp" script="itemexp.lua"/> <event type="attack" name="conditionitem" script="conditionitem.lua"/> e no login.lua:
    --------------- Experience System ---------------- registerCreatureEvent(cid,"itemexp") registerCreatureEvent(cid,"conditionitem") Agora crie um arquivo em data\lib\ chamado 037 - Experience System.lua e coloque isso dentro dele:



    Feito isso crie um arquivo em creaturescripts\scripts chamado itemexp.lua e adicione isso daqui:




    Agora crie outro arquivo em creaturescripts\scripts, adicione isso daqui nele e chame de conditionitem.lua:



    Agora configurando:




    Bom, é isso aí, a minha idéia era trazer um pouco a mais de RPG e fazer o pessoal pensar 2x antes de sair trocando suas armas pela primeira que ele dropa que tenha + ataque que a dele pois assim ele passa a ter que valorizar mais os itens que já possui a um bom tempo;

    Outro motivo é que agora os items vão valer mais e agora seu server vai ter mais movimento nas trocas ;]

    Espero que tenham gostado e qualquer coisa é só falar nos comentários. Abraço do lobinho.

    Ps: aqui tem duas fotinhas mas o resto só instalando mesmo porque tem bastante coisa pra mostrar.

    E lembrando, se te ajudei clica em Gostei aqui embaixo. Fuis
  18. Gostei
    xWhiteWolf recebeu reputação de koyotestark em (Resolvido)Spell kamui   
    a de se teleportar eu ja fiz.. a outra eu não vou fazer porque ela requer um nível de detalhes que eu não to afim de ficar discutindo com você até você me explicar.
     
    local config = { pos = {x=42, y=234, z=7}, -- posição da aegis dimension tempo = 15, -- tempo pra voltar effect1 = 66, -- efeito ao ser teleportado effect2 = 10, -- efeito ao voltar storage = 19329 } local cooldown = 60 function onCastSpell(cid, var) if isPlayer(cid) then if os.time() - getPlayerStorageValue(cid, config.storage) >= cooldown then doPlayerSetStorageValue(cid, config.storage, os.time()) addEvent(doTeleportThing, 1000*config.tempo, cid, getThingPos(cid), true) addEvent(doSendMagicEffect, 1000*config.tempo, getThingPos(cid), config.effect2) doSendMagicEffect(getThingPos(cid), config.effect1) doTeleportThing(cid, config.pos) if isCreature(cid) then doPlayerSendTextMessage(cid, 27, "You were teleported by yourself.") end for i = 1,config.tempo do addEvent(function() if isCreature(cid) then doPlayerSendTextMessage(cid,25,"You'll be back in " .. config.tempo -i +1 .. " second(s)") end end, 1000*i) end else doPlayerSendCancel(cid, "Your skill is in cooldown, you must wait "..(cooldown - (os.time() - getPlayerStorageValue(cid, config.storage))).." seconds.") end end return true end
  19. Gostei
    xWhiteWolf recebeu reputação de koyotestark em (Resolvido)Spell kamui   
    local config = { pos = {x=42, y=234, z=7}, -- posição da aegis dimension tempo = 15, -- tempo pra voltar effect1 = 66, -- efeito ao ser teleportado effect2 = 10 -- efeito ao voltar } function onCastSpell(cid, var) if isPlayer(getCreatureTarget(cid)) then target = getCreatureTarget(cid) addEvent(doTeleportThing, 1000*config.tempo, target, getThingPos(target), true) addEvent(doSendMagicEffect, 1000*config.tempo, getThingPos(target), config.effect2) doSendMagicEffect(getThingPos(target), config.effect1) doTeleportThing(target, config.pos) if isCreature(cid) then doPlayerSendTextMessage(target, 27, "You were teleported by ".. getCreatureName(cid) ..".") end if isPlayer(cid) and isCreature(target) then doPlayerSendTextMessage(cid, 27, "You teleported ".. getCreatureName(target) .."!") end for i = 1,config.tempo  do addEvent(function() if isCreature(target) then doPlayerSendTextMessage(target,25,"You'll be back in " .. config.tempo -i +1 .. " second(s)") end end, 1000*i) end else doPlayerSendCancel(cid, "You can only use this spell in players") end return true end
  20. Gostei
    xWhiteWolf recebeu reputação de Asuma men em Magnus Task System 1.2   
    Fala galera, pra quem não sabe eu fiz um novo task system pro meu servidor pessoal Empire e por isso decidi publicar a versão antiga dele já que não temos nenhuma intenção de usá-la mais.
    ele é muito similar a um sistema que eu já havia compartilhado aqui, só que pras versões 0.X. 

    O que é: um npc que te dá pequenas missões de matar monstros, qnd você terminar ele te paga uma recompensa pré definida.
    O que ele tem de melhor comparado com a versão 0.4: Basicamente ele permite vc definir qualquer hierarquia entre as tasks, permite que tasks deem diversas formas de recompensas (isso era bem engessado no modelo antigo) porém ele não aceita tasks de coletar itens, nem tem dificuldades diferentes com premiações multiplicadas (ao menos não explicitamente).
     
    Aqui tá a hierarquia que ele segue atualmente. Ou seja, para fazer task de Tarantula você precisa fazer Rat, depois Spider e por fim Tarantula.


    O sistema é muito completo e eu vou postá-lo da exata forma que usávamos então prestem bastante atenção nos detalhes. Já aviso de antemão que eu não darei muito suporte aqui e que não irei explicar muita coisa, o sistema funciona e foi usado por uns 2 anos sem nenhum problema com o tfs original.

    crie um arquivo em data/lib chamado tasklib.lua e coloque isso dentro dele:
    Aqui temos todas as tasks e storages. Se você quiser adicionar recompensas novas vc só precisa fazer um elseif na função de getRewards. Siga o exemplo dos comentários para as rewards e se quiser todas as tasks liberadas sem precisar seguir uma ordem é só colocar needed = 0 para todas.


    Agora crie um arquivo em creaturescripts/scripts chamado killtasksystem.lua e coloque isso dentro dele:
    Tirando as mensagens, não acho que tenha nada que você possa editar aqui. Essa tabela racetypes eu coloquei pq queria fazer task de criaturas de um mesmo tipo: fire, undead, poison. Ele puxa esse valor de dentro do race definido no xml do monstro. (Veja a undead monsters como exemplo.)

    em creaturescripts.xml coloque:
     
    <event type="kill" name="tasksystem" script="killtasksystem.lua"/> E em creaturescripts/scripts/login.lua antes do ultimo return true:
    player:registerEvent("tasksystem") Agora criaremos o npc chamado tasksystem.xml na pasta data/npcs:

    E o script dele em data/npcs/scripts chamado tasksystem.lua: (sim, eu não sou criativo com nomes)
     

    Por fim insira essa talkaction aqui no seu server, ela serve para gerar um arquivo chamado orderedtask.html na pasta do seu servidor (a mesma do executavel) com o código html do sistema de task (sim, eu tenho preguiça de escrever as coisas no site)

     

    Coloque o nome que vc quiser e depois coloque a tag em talkactions.xml:
    <talkaction words="/generatehtml" script="nome que vc quiser.lua" />
    Note que o arquivo pode levar um tempinho para aparecer, até pq ele tá percorrendo toda a tabela pegando todas as informações e criando um arquivo html disso, é um processo que pode levar alguns segundos.

    Se você quiser ser hackudo e pegar o html direto do meu site, seja livre: https://www.empirebr.com/tasks

    Bom uso, se tiver qualquer dúvida ou comentário ou sugestão diz aí. 
  21. Gostei
    xWhiteWolf recebeu reputação de premii em Critical Skill System   
    agora dá
    --[[Critical System By Night Wolf]] local lvlcrit = 48913 local multiplier = 1.5 local efeito = 2 --- efeito que vai sair do player/criatura que tomar o crítico function onStatsChange(cid, attacker, type, combat, value) if type == STATSCHANGE_HEALTHLOSS or type == STATSCHANGE_MANALOSS and isCreature(attacker) then if (getPlayerStorageValue(attacker, lvlcrit)*3) >= math.random (0,1000) then dano = math.ceil(value*(multiplier)) doTargetCombatHealth(attacker, cid, combat, -dano, -dano, 255) doSendAnimatedText(getCreaturePos(attacker), "CRITICAL!!", 144) doSendMagicEffect(getCreaturePos(attacker), efeito) return false end end return true end
  22. Curtir
    xWhiteWolf recebeu reputação de emerson1495 em Magnus Challenger   
    Fala galera, hoje vim trazer o projeto pronto do Magnus Challenger pra vocês instalarem no servidor de vocês!   

    Pra quem não conhece é um sistema de Tasks baseado no Zezenia onde você pode escolher entre tasks de matar monstros ou de coletar certos items para o npc Magnus, um guerreiro famoso da cidade que está atolado de tarefas e precisa da sua ajuda!

    Peguei os aspectos que eu julguei serem os principais do modelo do Zezenia e editei com algumas coisas que eu achei que ficariam melhores.
    Quem quiser pode ver um vídeo comentado de como o sistema funciona:




    Dito isso vou ensinar vocês como instalar isso no server:
    Pra começar vá em data\creaturescripts\scripts e procure login.lua, agora vá até o final do arquivo e antes do último return true coloque essas linhas abaixo

    ainda em creaturescripts procure creaturescripts.xml e adicione essa linha junto com as outras que já estão lá (seguindo o padrão)
    <!-- TASK SYSTEM --> <event type="kill" name="tasksystem" script="tasksystem.lua"/> Agora crie um arquivo em creaturescripts\scripts com o nome de tasksystem.lua e adicione o seguinte à ele:




    Terminada a parte da contagem de kill vamos ao NPC em si.
    Crie um arquivo chamado Magnus.xml em data\npc e coloque isso dentro dele:




    Agora em data\npc\scripts crie um arquivo chamado zezeniaa.lua e adicione esse conteúdo dentro do arquivo:





    ~~~~~~~~~~~~~~~~ FEITO ISSO ESTÁ TERMINADO ~~~~~~~~~~~~~~~~~~

    Agora aprendendo a configurar:
     
    No tasksystem vc pode editar isso daqui:
    Eu fiz um sistema onde se vc estiver em party com alguém e a pessoa matar os bixos conta como se você tivesse matado; Assim incentiva o pessoal a ir numa cave de Dragon e ao invés de matar quem está lá pra ficar sozinho na cave, eles vão chamar party pra fazerem a task juntos.. assim fazer amigos fica mais fácil e com maiores laços é maior a chance do povo não abandonar o seu server.

    Apenas digite "true" ou "false" pra ativar/desativar esse sistema e em baixo temos a distancia máxima pro monstro estar do cara que está fazendo a task pra contar o kill. Se a distancia entre o monstro e a pessoa for maior que 7 não vai contar pra ele a kill.


    No zezeniaa.lua as coisas que dão pra configurar são maiores mas são igualmente simples:
    Toda vez que vc pedir uma task short (curta) vc vai ter de 100 a 400 monstros pra matar, ele gera um número de 0 a 6 e multiplica por 5 e soma com os 100 iniciais.. o mesmo vale pra todos os outros valores.

    levelcollect é o level mínimo pra fazer tasks do tipo collect.
    time é o tempo em segundos que você vai ficar sem poder falar com o npc caso desista de alguma task, o padrão é 8 * 60 * 60 (8 horas)
    bonus é por quanto vai multiplicar caso vc permita que o npc escolha aleatoriamente entre todas as opções.. o padrão é 20% de bonus (1.2)
    multiplicador é uma coisa que eu adicionei pra ficar mais fácil mexer na fórmula sem cometer cagadas, se vc tá ganhando 10% de exp e quer ganhar 80% é só colocar 8 no multiplicador.

     
    Isso daqui é o banco de dados principal do sistema de kill, toda vez que vc escolher uma task do tipo fácil, médio, dificil ele vai acessar essas tabelas contendo o nome das criaturas.. vc pode facilmente adicionar novos nomes, o npc já está programado pra lidar com isso, apenas siga o padrão e mantenha sempre o último sem vírgula!

    Ex: adicionando Morgaroth na tabela de hard
    local hard = { [1] = "Giant Spider", [2] = "Dragon Lord", [3] = "Grim Reaper", [4] = "Demon", [5] = "Crystal Spider", [6] = "Demon Skeleton", [7] = "Juggernaut", [8] = "Destroyer", [9] = "Hand of Cursed Fate", [10] = "Morgaroth" } atente-se também pra não repetir o número no index.. se o anterior era [9] use [10].

    O restante das tabelas são separadas para o banco de dados das tasks de collect:
     
    segue a mesma lógica da de kill só que aqui você tem o id dos itens que serão usados... aquela count não tem nada a ver com o item pois ele vai gerar tanto o item aleatoriamente quanto à count;
    Ex: 
    [1] = {id = 5880, count = 20}, -- iron ore isso não significa que se cair iron ore (id 5880) irá cair sempre 20.. até porque eu poderia escolher uma task long e easy e pegar a task de trazer até 50 iron ores, apenas tente manter os padrões que são os intervalos definidos.
    No easy ele varia de 10 a 20, no medium ele varia de 20 a 35 e no hard de 40 a 50.



    Espero que vocês tenham curtido, é um sistema grande mas bem simples de se mexer... se tiverem quaisquer problemas podem comentar aqui. Deu trabalho fazer isso então se você gostou deixe o seu comentário aí e o seu "Gostei" que vai me incentivar a trazer mais coisas desse tipo pra cá. Abraços do lobo.


    PS: Pra sumonar o npc digite com o GOD: /n Magnus ou coloque ele pelo map editor.
  23. Obrigado
    xWhiteWolf recebeu reputação de Leo Zanin em Dodge System 8.54+   
    Ae galera do TK, uns caras ficaram me mandando PM pedindo esse sistema aqui.. aparentemente tem em algum server e eles queriam replicar o sistema no OT deles. Não sei como funciona no outro server mas no script que eu fiz vai funcionar assim:
    Serão 100 livros que você poderá comprar de um npc específico, cada livro te dá 1 ponto a mais na skill Dodge e isso acarreta em 0.3% de chance a mais de desviar de um golpe e tomar só 50% de dano. Infelizmente eu nunca joguei no servidor que foi o pioneiro desse sistema (na vdd eu nem sei qual é) então eu não fiz igual o deles, na realidade o meu só funciona ao perder vida então se o mago usar utamo vita acabou os dodge's dele. Outra coisa importante é que o player tem uma chance rara de dar Dodge no Dodge, ou seja, levando 1/4 do dano. Só vai funcionar para ataques de criaturas, tanto melee quanto spells, ou seja, se o cara passar no fogo não tem chance dele desviar do dano 
    Sem mais delongas, vamos ao script:

    Crie um arquivo chamado dodge.lua na pasta creaturescripts\scripts e coloque isso dentro dele:
     

    agora adicione essa linha no creaturescripts.xml:
    <event type="statschange" name="dodge" event="script" value="dodge.lua"/> em creaturescripts\scripts\login.lua adicione isso antes do ultimo return true:
    registerCreatureEvent(cid, "dodge") if getPlayerStorageValue(cid, 48902) == -1 then         setPlayerStorageValue(cid, 48902, 0)      end agora vá em actions.xml e adicione essa linha aqui:
    <action itemid="1950" script="dodgebook.lua"/> note que vc pode mudar o ID do livro a hora que vc quiser.

    em items.xml, procure o item com o ID que vc irá utilizar e deixe ele assim:
    <item id="1950" article="a" name="Skill Book [DODGE]"> <attribute key="weight" value="1300" /> </item> agora crie um arquivo chamado dodgebook em actions\scripts e coloque isso dentro dele:
  24. Gostei
    xWhiteWolf recebeu reputação de Maniaco em (Resolvido)[PEDIDO] Editar Items.   
    Você coloca no items.xml oque vc quer que o item faça, experimenta usar comandos de itens parecidos: 
    Exemplo: Quero que o set de Knight dê skill de club/sword/axe.. daí vc procura algum item que faça isso e só copia a parte que aumenta a skill
    <attribute key="skillSword" value="3" /> <attribute key="skillAxe" value="3" /> <attribute key="skillClub" value="3" /> Se você quiser que aumente distance é só colocar
    <attribute key="skillDist" value="3" /> para absorver danos é bem simples
    <attribute key="absorbPercentPhysical" value="3" /> <attribute key="absorbPercentEarth" value="5" /> <attribute key="absorbPercentDeath" value="6" /> <attribute key="absorbPercentFire" value="-3" /> <attribute key="absorbPercentIce" value="2" /> Perceba que o PercentFire está negativo, é porque ele tem fraqueza contra fogo, positivo ele é bom contra o elemento, negativo ele é fraco contra o elemento.

    Pra aumentar ML é só usar:
    <attribute key="magiclevelpoints" value="1" /> Pra aumentar speed é só procurar a BOH e copiar:
    <attribute key="speed" value="20" /> E não esquece de colocar no final
    <attribute key="showattributes" value="1" /> para que apareçam os atributos quando o player der look no item.


    Em 
    <attribute key="slotType" value="necklace" /> Você escolhe que tipo de item aquilo é, os values são: body, two-handed, one-handed, ammo, ring, necklace, legs, feet, head, backpack




    E PARA FINALIZAR DECLARE TUDO NO MOVEMENTS.XML:
    <movevent type="Equip" itemid="IDDOITEM" slot="TIPO DE SLOT" event="function" value="onEquipItem"/> <movevent type="DeEquip" itemid="IDDOITEM" slot="TIPO DE SLOT" event="function" value="onDeEquipItem"/> itemid="IDDOITEM" troque IDDOITEM pelo ID DO ITEM (BEM ÓBVIO, NÉ?) 
    slot="TIPO DE SLOT" coloque um dos slots possíveis, os que são possiveis estão nessa lista aqui:
    armor feet legs head shield pickupable necklace ring OBSERVAÇÃO FINAL: O SLOT QUE VC DECLARAR NO MOVEMENTS TEM QUE SER DO MESMO TIPO QUE O ITEMS.XML
    -------------------------------------------------------------------------------------------------------------------------------------------------------------------

    Agora as flechas/bows/armas: Essas não precisam declarar no movements.xml mas precisam de um script no weapon.xml 


    1) Flechas
    As flechas são bem simples:
    <attribute key="slotType" value="ammo" /> <attribute key="attack" value="25" /> <attribute key="maxHitChance" value="90" /> <attribute key="weaponType" value="ammunition" /> <attribute key="ammoType" value="arrow" /> <attribute key="shootType" value="arrow" /> slotype = ammo para ficar no lugar da munição (ammo)
    Attack vc muda a vontade pro que vc quiser
    MaxHitChance = chance de acertar o hit, qualquer numero menor que 100 apresenta uma chance do hit falhar
    WeaponType= Tipo de arma, flechas são munições então deixe sempre ammunition
    ammoTyoe = Tipo de munição, pode ser "arrow" ou "bolt" dependendo doque vc quiser usar, um bow ou um crossbow
    shootType é o efeito que vai sair, no caso dessa aí seria uma arrow normalzinha mas vc pode colocar qualquer flecha que exista ou até mesmo copiar efeitos de runas
    Dê ctrl+F no items.xml em shootType e copie diferentes tipos e vá vendo no servidor qual se encaixa melhor na sua opinião.

    2) Bows e Crossbows
    Eu te aconselho copiar de algum item que já exista o modificar oque você quiser
    <attribute key="slotType" value="two-handed" /> <attribute key="weaponType" value="distance" /> <attribute key="ammoType" value="bolt" /> <attribute key="range" value="5" /> <attribute key="hitChance" value="1" /> isso daqui é um crossbow duas mãos que ataca bolt (podia ser arrows tb) a uma distância de no máximo 5 SQM (modifique o range)
    a chance de hit padrão dele é 1  e essa hit chance soma com a da munição

    3) Wands e Rods
    <attribute key="weight" value="2900" /> <attribute key="weaponType" value="wand" /> <attribute key="shootType" value="ice" /> <attribute key="range" value="3" /> peso, tipo (mesmo que seja uma rod o tipo é "wand"), tipo de efeito que sai dela (no caso é o ice), distância que ataca (no caso, 3 sqm)
    Agora no weapons.xml:
    <wand id="2190" level="7" mana="2" min="8" max="18" type="energy" event="function" value="default"> <!-- Wand of Vortex --> <vocation id="1"/> </wand> id do item, level pra usar, custo de mana por hit, dano minimo e maximo, tipo de ataque, event (deixe function para ele fazer tudo que vc colocou no items.xml) value= não mexa a menos que vc seja um programador C++, vocation vc coloca as classes que podem usar.
    1= sorc, 2= druid, 3= pally, 4= kina, 5= master sorc, 6= elder druid, 7= royal pally, 8= elit kina
    OBS: Você pode colocar isso também para que quando o player dê look não apareça o nome da classe que pode usar aquele determinado item (isso é util quando vc declarar que ambos sorceres e master sorcerers podem usar o item, evitando as repetições quando o player der look no item
    <vocation id="5" showInDescription="0"/> <vocation id="1"/> 4) Outros tipos de arma
    É bem simples, só edite oque quiser seguindo o modelo:
    <attribute key="weight" value="6800" /> <attribute key="defense" value="65" /> <attribute key="attack" value="90" /> <attribute key="weaponType" value="sword" /> <attribute key="extradef" value="5" /> <attribute key="elementIce" value="30" /> <attribute key="slotType" value="two-handed" /> <attribute key="decayTo" value="2401" /> <attribute key="duration" value="60" /> weight = peso
    defense= defesa q ela dá
    attack = ataque
    weapontype = Tipo de arma (sword, axe, club)
    extradef = defesa extra (fica Defesa 65 +5 nesse caso)
    ElementIce = adiciona dano elemental à arma, pode usar também ElementFire, ElementEarth e ElementEnergy
    slotType = se a arma é duas mãos ou não (caso não seja apenas retire essa linha)
    decayTo = apos um tempo igual a duration (em segundos) ela vira o item de ID 2401 (se não quiser isso apenas remova essas duas ultimas linhas)


    OBSERVAÇÃO FINAL: Tudo que você não quiser utilizar é só remover a linha do items.xml, e todo tipo de edição em armas deve ser declarado no weapons.xml seguindo o exemplo. (COMO VOCÊ NÃO TÁ CRIANDO NENHUM ITEM E SIM EDITANDO OS QUE JÁ EXISTEM EU TE ACONSELHO A PROCURAR O ITEM LÁ DANDO CTRL F E PROCURANDO PELO ID DOQUE SAIR ADICIONANDO UM MONTE DE LINHA A MAIS QUE TALVEZ DÊ CONFLITO COM AS QUE JÁ EXISTAM).
    OS ITENS QUE VC COLOCAR PRA DAR SKILL, ML OU PORCENTAGEM ELEMENTAL VOCÊ DEVE DECLARAR NO MOVEMENTS.XML E SE ESSE ITEM FOR PARA UMA DETERMINADA VOCAÇÃO VOCÊ DEVE DECLARAR TAMBÉM SEGUINDO O EXEMPLO:
    <movevent type="Equip" itemid="7886" slot="feet" event="function" value="onEquipItem"> <vocation id="1"/> <vocation id="5" showInDescription="0"/> <vocation id="2"/> <vocation id="6" showInDescription="0"/> </movevent> <movevent type="DeEquip" itemid="7886" slot="feet" event="function" value="onDeEquipItem"/>
  25. Gostei
    xWhiteWolf recebeu reputação de joaopedrodepaiva em Sistema de Reset 100%   
    Fala galera do TK, hoje vim pra trazer pra vocês um npc criado por mim e pelo Nogard numa madrugada aí para solucionar a dúvida de um cara no suporte. Eu dei uma melhorada no script original, tirei umas coisas repetidas e adicionei novas funções; 
    Você agora pode configurar se quer que o preço aumente a cada reset, se quer que o level pra resetar aumente e se vc quer que a vida resete junto (e quanto % da vida atual será a vida após resetar).
    Testado em TFS 0.3.6, Versão 8.45

    Sem mais delongas, vamos ao script.
    Antes de tudo crie um arquivo chamado reseter.lua na pasta data\npc\scripts\ e coloque isso daqui dentro dele:


    Você pode editar tudo mexendo aqui:
    local config = {
    minlevel = 150, --- level inical para resetar
    price = 10000, --- preço inicial para resetar
    newlevel = 20, --- level após reset
    priceByReset = 0, --- preço acrescentado por reset
    percent = 100, ---- porcentagem da vida/mana que você terá ao resetar (em relação à sua antiga vida total)
    levelbyreset = 0 --- quanto de level vai precisar a mais no próximo reset
    }
    Feito isso, crie agora o npc que irá utilizar esse script.. em data\npc crie um arquivo.xml chamado Reseter.xml e coloque isso dentro dele:
    Agora é só colocar o seu npc no mapa pelo mapa editor e curtir

    OBS 1: Se seu server for 8.6 ou maior troque no script.lua as funções db.executeQuery por db.query
    OBS 2: Esse script dava pra ser diminuido ainda mais mas por hora deixa ele assim, se vc tiver alguma proposta melhor por favor poste nos comentários que eu testo a sua versão e edito o tópico se for o caso.
    OBS 3: Não remova os créditos, isso é a coisa mais baixa e suja que alguém pode fazer.. eu scripto pra ajudar a comunidade do Tibia a evoluir e libero 99% doque eu faço, se vocês não removerem os créditos e não postarem em outros fórums sem minha permissão isso pode continuar assim.


    --- EDIT: Coloquei algumas imagens pra vcs verem como fica no server  
     
       
     
       

     



    EDIT: Arrumei o problema de o npc não dar bye automáticamente qnd o player se afasta, bugando em algumas versões e impedindo de conversar com outros npcs. Apenas substituam o arquivo em scripts pela versão atualizada, grato.

    EDIT2: Novos erros arrumados, agora o NPC dá bye automaticamente e não buga qnd te reseta.

    EDIT3: Resolvido bug de dar hi, reset, yes várias vezes e derrubar o servidor (troque tanto o xml qnt o script do npc)
    O script também foi identado.
×
×
  • Criar Novo...

Informação Importante

Confirmação de Termo