Ir para conteúdo

Xafixav

Membro
  • Registro em

  • Última visita

Histórico de Curtidas

  1. Gostei
    Xafixav deu reputação a xWhiteWolf 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"/>
  2. Gostei
    A diferença é que, um edita o Items.otb, que é na pasta do server e o outro edita o Client.
    :x
    Baixe o ItemEditor 0.5.1 este edita o item no server.
    E o que passei edita o Client.
    Creio que tenha aqui no forum.

    Abraços e boa sorte.
  3. Gostei
    Xafixav recebeu reputação de Vodkart em Get player Reset   
    function getPlayerReset(cid) local query = db.getResult("SELECT `reset` FROM `players` WHERE `id`= "..getPlayerGUID(cid)) return query:getDataInt("reset") <= 0 and 0 or query:getDataInt("reset") end  
    function getPlayerReset(cid) return db.getResult("SELECT `reset` FROM `players` WHERE `id = "..getPlayerGUID(cid)):getDataInt("resets") end Ambas são funcionais.
    Exemplo:
    function onSay(cid, words, param, channel) doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "You already reset : "..getPlayerReset(cid).." times.") return true end Adicione uma das duas primeiras funções no arquivo 050-function  (Data->lib->050-function)
    Créditos:
    @Vodkart pela função
    @Xafixav
     
  4. Gostei
    Xafixav recebeu reputação de Wakon em Get player Reset   
    function getPlayerReset(cid) local query = db.getResult("SELECT `reset` FROM `players` WHERE `id`= "..getPlayerGUID(cid)) return query:getDataInt("reset") <= 0 and 0 or query:getDataInt("reset") end  
    function getPlayerReset(cid) return db.getResult("SELECT `reset` FROM `players` WHERE `id = "..getPlayerGUID(cid)):getDataInt("resets") end Ambas são funcionais.
    Exemplo:
    function onSay(cid, words, param, channel) doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "You already reset : "..getPlayerReset(cid).." times.") return true end Adicione uma das duas primeiras funções no arquivo 050-function  (Data->lib->050-function)
    Créditos:
    @Vodkart pela função
    @Xafixav
     
  5. Gostei
    Xafixav deu reputação a xWhiteWolf em (Resolvido)SPELLS PARA RESET   
    --Created with OSM-- local combat = createCombatObject() setCombatParam(combat, COMBAT_PARAM_TYPE,COMBAT_ICEDAMAGE) setCombatParam(combat, COMBAT_PARAM_EFFECT,CONST_ME_PURPLEENERGY) setCombatFormula(combat, COMBAT_FORMULA_LEVELMAGIC, -1.0, -50000000, 1.6, -55000000) arr = { {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0}, {0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0}, {0, 0, 0, 1, 1, 3, 1, 1, 0, 0, 0}, {0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0}, {0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, } local area = createCombatArea(arr) setCombatArea(combat, area) function onCastSpell(cid, var) if getPlayerStorageValue(cid, 378378) >=3 then doCombat(cid, combat, var)  return true  else doPlayerSendCancel(cid, "You need to have at least 3 resets to cast this spell.") return false end end  vc tem que garantir que o storage dos resets é esse 378378, de resto tá tudo certo
  6. Gostei
    o link clients.tibiaking esta quebrado sla eu...
    fiz um novo video p6

  7. Gostei
    Xafixav deu reputação a xWhiteWolf em Mining System   
    Antes de tudo queria agradecer ao cara do suporte que me pediu pra fazer isso, achei muito legal a idéia. Fala galera do TK, vim trazer um script bem simpleszinho mas que abre um leque de opções de RPG e diversão pro seu OT.. Trata-se do Mining System, um sistema que você pode utilizar a pick normal (ou uma outra pick especial) para minerar a terra e tentar conseguir items que você pode trocar por dinheiro, items ou utilizar para craftar items. São 70 leveis de Mining que vão upando conforme vc minera.
    Enfim, vamos ao script:
    actions\scripts\mining.lua:
    terra = {351,352,353,354,355}  levels = { [-1] = 2229, ---- skull [0] = 1294, --- small stone [1] = 3976, --- worm [10] = 2149, -- Small Emerald [12] = 2146, -- Small Sapphire [15] = 2145, -- Small Diamond  [17] = 2150, -- Small Amethyst [20] = 2147, -- Small Ruby [25] = 2144, -- Black Pearls  [27] = 2143, -- White Pearls [30] = 2157, -- Gold Nuggets [35] = 2156, --- red gem [36] = 2158, -- blue gem  [37] = 2155, -- green gem  [38] = 2153, -- violet gem [39] = 2154, -- yellow gem [40] = 7761, -- small enchanted emerald  [42] = 7759, -- Small Enchanted Sapphiire [45] = 7762, -- Small Enchanted Amethyst [50] = 7760, -- Small Enchanted Ruby [70] = 2177  -- Life Crystal } local config = { storage = 19333, chance = 40, --- chance de achar um item ou não k = 2, --- constante de level.. quanto maior, mais fácil é upar. (a fórmula é level ao quadrado dividido pela constante) experience = 19334 } function onUse(cid, item, fromPosition, itemEx, toPosition) local drops = {} function getDrops(cid) for i= -1,getPlayerStorageValue(cid, config.storage) do if levels[i] then table.insert(drops, levels[i]) end end return true end if isInArray(terra, itemEx.itemid) then getDrops(cid) doPlayerSetStorageValue(cid, config.experience, getPlayerStorageValue(cid, config.experience)+1) local experience = getPlayerStorageValue(cid, config.experience) if experience >= (8+(getPlayerStorageValue(cid, config.storage)^2))/config.k then doPlayerSetStorageValue(cid, config.storage, getPlayerStorageValue(cid, config.storage)+1) doPlayerSendTextMessage(cid, 27, "Congratulations, you have leveled! Your currect level is "..getPlayerStorageValue(cid, config.storage) ..".") if getPlayerStorageValue(cid, config.storage) == 50 then doPlayerSendTextMessage(cid, 20, "For reaching level "..getPlayerStorageValue(cid, config.storage) .." you have been awarded with Mining Helmet.") doPlayerAddItem(cid, 7497, 1, true) end end if config.chance >= math.random(1,100) then if #drops >= 1 then local item = drops[math.random(1,#drops)] doPlayerSendTextMessage(cid, 27, "You have found a "..getItemNameById(item)..".") doPlayerAddItem(cid, item, 1, true) end doSendMagicEffect(toPosition, 3) else doSendMagicEffect(toPosition, 2) return true end elseif itemEx.itemid == item.itemid then doPlayerSendTextMessage(cid, 27, "You're currenctly level "..getPlayerStorageValue(cid, config.storage)..".") else return false end return true end em terra vc coloca os ids dos chãos em que é possível minerar, levels é o level da skill e o ID do respectivo item que você fica capaz de conseguir após alcançar esse nível. Em outras palavras, no começo vc só consegue minerar skull, no nv 70 vc vai ter a chance de conseguir todos os items anteriores e não só life crystal. O restante das configurações está no meio do script:
    local config = {
    storage = 19333,
    chance = 40, --- chance de achar um item ou não
    k = 2, --- constante de level.. quanto maior, mais fácil é upar. (a fórmula é level ao quadrado dividido pela constante)
    experience = 19334
    }
    o storage é onde vai salvar o seu nível
    chance é a chance de pegar um item cada vez que minera.
    k é a constante de level, o nivel 10 precisa de 10*10/k de experiencia para ser alcançado (com k sendo 2 dá 50 de experiencia), ou seja, com 50 picaretadas na terra vc pega nivel 10.
    experience é o storage que fica salvo sua experiencia.
    Bônus: Ao alcançar level 50 você ganha o Mining Helmet como prêmio, ele não faz nada de especial mas é como se fosse um troféu. No meu server tem uma série de troféus que voce pode colecionar e fica como sendo uma conquista épica para os players.
    e no actions.xml:
    <action itemid="2553" script="mining.lua"/> OBS: Sugiro que vcs utilizem uma outra pick pra não dar conflito mas você faz oque quiser.
    PS: Uma fotinha pra vcs verem
    Espero que tenham gostado!  
  8. Gostei
    Xafixav recebeu reputação de subhe em [PEDIDO] Utamo vita "Name   
    Recentemente tive uma ideia, uma magia da qual um MS/ED possa proteger os outros, da mesma forma em que se protege, com a mana.
     
    Gostaria de pedir uma magia da qual o jogador coloca um "utamo vita" em um jogador, o mesmo não pode sair da tela (acho que 30x30 sqm) se não a magia se desfaz.Se o mesmo MS/ED do qual jogou a a magia ficar sem mana, ela acaba também. ( Só pode ser utilizada em 1 alvo por vez)

    Toda vez que o Alvo com o Utamo tomar dano,  o dano vai ser descontado da mana de quem conjurou a magia nele.
    EX:
     
     
    REP++ para solução.
  9. Gostei
    pra ser sincero não sei mexer com spells, nunca tive o gosto... mas valeu!
  10. Gostei
    Xafixav recebeu reputação de Vodkart em (Resolvido)[Duvida] Função de chamar informação da database   
    @Vodkart Nesta magia:

     
     
    Agora que eu tenho a função, como eu posso utilizar ela para multiplicar o dano final da magia? (pelo numero de resets que o player tem)
     
    -----------
    Cara, sobre a função, funcionou perfeitamente. Muito obrigado! REP+
     

    ------------------
    Peguei uma formula que @xWhiteWolf postou em outro tópico e fiz umas "mudanças" nela, para tentar adaptar a esse sistema, com essa função que você me passou.
    \/ Abaixo segue meu "LOG" de garranchos modificações nas magias. (modifiquei o exori e fiz um "exori reset" )

    Desculpe se a formatação ficou meio "desagradável" ou feia, quando tiver mais tempo eu melhoro.
  11. Gostei
    function getPlayerReset(cid) local query = db.getResult("SELECT `reset` FROM `players` WHERE `id`= "..getPlayerGUID(cid)) return query:getDataInt("reset") <= 0 and 0 or query:getDataInt("reset") end ou
     
    function getPlayerReset(cid) return db.getResult("SELECT `reset` FROM `players` WHERE `id = "..getPlayerGUID(cid)):getDataInt("resets") end  
    as 2 funcionam normalmente
  12. Gostei
    Xafixav deu reputação a Executer em Adicionando comando !spells   
    Acho que fica melhor com esse na pasta data/talkactions/script/
    function onSay(cid, item, words, param)
    local count = getPlayerInstantSpellCount(cid)
    local text = ""
    local t = {}
    local prevLevel = -1
    local line = ""
    for i = 0, count - 1 do
    local spell = getPlayerInstantSpellInfo(cid, i)
    if spell.level ~= 0 then
    if spell.manapercent > 0 then
    spell.mana = spell.manapercent .. "%"
    end
    table.insert(t, spell)
    end
    end
    table.sort(t, function(a, b) return a.level < b.level end)
    for i, spell in ipairs(t) do
    if prevLevel ~= spell.level then
    if i ~= 1 then
    line = ""
    end
    line = line .. "- Spells for Level " .. spell.level .. ":\n"
    prevLevel = spell.level
    end
    text = text .. line .."• ".. spell.words .." - " .. spell.name .. ": " .. spell.mana .. "\n"
    end
    doShowTextDialog(cid, 7528, text)
    return TRUE
    end
  13. Gostei
    Xafixav deu reputação a xWhiteWolf em Mostrar o tempo da Magic Wall   
    Eae galera, hoje vou fazer uma pequena demonstração de como usar a função doShowTimeByPos, uma das mais novas funções adicionadas na New Lib, que agora está em versão 1.2.

    A função:



    Se seu server for 0.3.6/0.4 você só vai precisar adicionar essa linha marcada:




    do contrário, se ele for das revs mais novas como 1.0 você irá adicionar essa linha:




    Esses valores são a duração (20 segundos que é o tempo de duração da magic wall) e 20/35 é o TALKTYPE do tipo monster (cor laranja), seguindo a tabela do data\lib\constant.lua:
    TALKTYPE_FIRST = 1 TALKTYPE_WHISPER = 2 TALKTYPE_YELL = 3 TALKTYPE_PRIVATE_PN = 4 TALKTYPE_PRIVATE_NP = 5 TALKTYPE_PRIVATE = 6 TALKTYPE_CHANNEL_Y = 7 TALKTYPE_CHANNEL_W = 8 TALKTYPE_RVR_CHANNEL = 9 TALKTYPE_RVR_ANSWER = 10 TALKTYPE_RVR_CONTINUE = 11 TALKTYPE_BROADCAST = 12 TALKTYPE_CHANNEL_RN = 13 TALKTYPE_PRIVATE_RED = 14 TALKTYPE_CHANNEL_O = 15 TALKTYPE_CHANNEL_RA = 17 TALKTYPE_MONSTER = 19 TALKTYPE_MONSTER_YELL = 20 Aqui tem uma imagem de como fica no server.




    Note que eu fiz pra magic wall mas vale pra qualquer item que tenha duration, pra quests, pra contar tempo de invencibilidade de alguma spell ou oque você quiser, use a criatividade e explore o máximo dessa função. Abraços.
  14. Gostei
    Xafixav deu reputação a Vodkart em Mostrar o tempo da Magic Wall   
    tenta assim
     
    spells > scripts > support   magic wall rune.lua   local combat = createCombatObject() setCombatParam(combat, COMBAT_PARAM_DISTANCEEFFECT, CONST_ANI_ENERGY) setCombatParam(combat, COMBAT_PARAM_CREATEITEM, 1497) function onCastSpell(cid, var) function MagicWallTime(pos, delay) doSendAnimatedText(pos, delay, 145) if delay ~= 1 then addEvent(MagicWallTime, 1000, pos, delay -1) end end local pos,duration = variantToPosition(var),20 MagicWallTime(pos,duration) return doCombat(cid, combat, var) end
  15. Gostei
    Xafixav deu reputação a xWhiteWolf 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"/>

Informação Importante

Confirmação de Termo