Histórico de Curtidas
-
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"/> -
Xafixav deu reputação a Adriano SwaTT em [Resolvido] Tibia .dat e spr que funcione em Item editor 8.60A 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.
-
Xafixav recebeu reputação de Vodkart em Get player Resetfunction 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
-
Xafixav recebeu reputação de Wakon em Get player Resetfunction 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
-
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
-
Xafixav deu reputação a Gaant em [Video] Arrumando erro de itens vermelhos e items com sprites diferenteso link clients.tibiaking esta quebrado sla eu...
fiz um novo video p6
-
Xafixav deu reputação a xWhiteWolf em Mining SystemAntes 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!
-
Xafixav recebeu reputação de subhe em [PEDIDO] Utamo vita "NameRecentemente 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.
-
Xafixav deu reputação a Vodkart em (Resolvido)[Duvida] Função de chamar informação da databasepra ser sincero não sei mexer com spells, nunca tive o gosto... mas valeu!
-
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.
-
Xafixav deu reputação a Vodkart em (Resolvido)[Duvida] Função de chamar informação da databasefunction 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
-
Xafixav deu reputação a Executer em Adicionando comando !spellsAcho 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
-
Xafixav deu reputação a xWhiteWolf em Mostrar o tempo da Magic WallEae 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.
-
Xafixav deu reputação a Vodkart em Mostrar o tempo da Magic Walltenta 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 -
Xafixav deu reputação a xWhiteWolf em [Boss Skill] Aegis of ImmortalFala 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"/>