Histórico de Curtidas
-
leliofritsch deu reputação a xBen em (Resolvido)Arma que evolui (wtf)Crie um arquivo lua em creaturescripts/scripts , coloque o nome de weaponLevelup.lua e adicione o script dentro.
depois vai em creaturescripts.xml adicione a tag, depois va no script login e adicione o registro
tag:
<event type="kill" name="weaponLevelUp" event="script" value="weaponLevelUp.lua"/> script:
function onKill(cid, target, lastHit) local monster = { --["nome do monstro minuscuolo"] = {storage = storage de contagem, reward = arma que vai ser transformar, weapon = arma necessaria, kill = quantidade de monstro que tem que matar} ["bat"] = {storage = 10376, reward = 2392, weapon = 2376, kill = 5}, ["rat"] = {storage = 10377, reward = 1255, weapon = 2376, kill = 20}, } if isPlayer(cid) then if isMonster(target) then local name = getCreatureName(target) local name_monster = monster[string.lower(name)] if name_monster then local weapon = monster[name:lower()].weapon if getPlayerSlotItem(cid, 6).itemid == weapon then local reward = monster[name:lower()].reward local storage = monster[name:lower()].storage local count = getPlayerStorageValue(cid, storage) local kill = monster[name:lower()].kill if count == -1 then count = 0 end count = count+1 setPlayerStorageValue(cid, storage, count) doSendAnimatedText(getPlayerPosition(target), " #"..count.." / #"..kill.." ", 65) if count == kill then doPlayerSendTextMessage(cid, 27, "Success! You have upgraded your weapon.") setPlayerStorageValue(cid, storage, -1) doTransformItem(getPlayerSlotItem(cid, 6).uid, reward) doSendMagicEffect(getPlayerPosition(cid), 7) doSendAnimatedText(getPlayerPosition(cid), " Done ", 32) end end end end end return true end registro:
registerCreatureEvent(cid, "weaponLevelUp") lembrando que a arma tem que estar no slot 6 que é o esquerdo, qualquer duvida só perguntar que eu respondo se ajudei REP+
EDIT - faltava uma verificação e estava causando bug, já foi concertado
-
leliofritsch deu reputação a Wise em Remover Vocação Vip de narutibia do acc managerBasta alterar o parâmetro da tag da vocação desejada, onde está needpremium, mude para o valor 1.
needpremium="1" -
leliofritsch deu reputação a xWhiteWolf em (Resolvido)Sistema de Magias Dependentes!ele não casta a A? ps: usa os.time() pq assim se ele castar a A uma vez ele vai poder castar a B sempre porque o storage vai permanecer;
A:
B:
-
leliofritsch deu reputação a xWhiteWolf em (Resolvido)Sistema de Magias Dependentes!vc pode setar um storage na transform A e só permitir a B se tiver o storage da A.. e dps fazer a mesma coisa pra B e C. Também dá pra vc checar pelo outfit
-
leliofritsch deu reputação a Shizuo Silva em (Resolvido)Addon ao usar o item ! Ajuda Aqui!function onUse(cid, item) local cfg = { addon_name = "Citizen", -- NOME DO ADDON addon_male = xxx, addon_female = xxx, storage = 9784 -- Lembre-se de trocar o numero da storage em cada item } if getPlayerStorageValue(cid, cfg.storage) < 1 then doPlayerAddOutfit(cid, cfg.addon_male, 3) doPlayerAddOutfit(cid, cfg.addon_female, 3) doSendMagicEffect(getThingPos(cid), 29) doPlayerSendTextMessage(cid, 19, "Addon " .. cfg.addon_name .. "full adicionado!!") doRemoveItem(item.uid, 1) setPlayerStorageValue(cid, cfg.storage, 1) else doPlayerSendTextMessage(cid, 19, "you already have this adon.") end return true end <action itemid="IDDOITEM" event="script" value="ARQUIVO.LUA"/>
-
leliofritsch deu reputação a Eytor em [8.54] Servidor + Client Naruto B&W [EXCLUSIVO]OLÁ USUARIOS DO TIBIA KING .. HOJE ESTAREI TRAZENDO UMA NOVIDADE .. O SERVIDOR DE NTO EXCLUSIVO DO NTO BLACK & WHITE(AKELE OT NOVO QUE FOI CRIADO A 1 MES POR E MIN E POR O [ADM] Johnatan).
VALE LEMBRAR QUE O NTO BLACK WHITE FOI UM DOS SERVIDORES DE NARUTIBIA QUE MAIS CRESCEU NOS ULTIMOS TEMPOS .. EM APENAS 1 SEMANA DE NTO JÁ ATINGIMOS A META DE 70 ~ 80 USUARIOS ONLINE FIXOS DIARIOS, E ESSE É O SERVIDOR MAIS RECENTE DO NTO BLACK WHITE BASEADO NO DO SERVIDOR MADARA RINNEGAN EDITADO POR MIN E POR O JOHNATA.
ANTES DE MAIS NADA GOSTARIA DE EXPLICAR O MOTIVO DE TAR POSTANDO O SERVER .. BEM O JOHNATAN ERA QUEM FAZIA PRATICAMENTE TUDO NAS ATUALIZAÇÕES E TAALS .. POREM ELE PAROU COM NTO AI TIVE QUE DESMONTAR O NTO B&W PORQUE EU NÃO TINHA CONDIÇÕES PRA DAR CONTA DO NTO SOZINHO.
CHEGA DE BLABLA E VAMOS LÁ!!
[+] NOVIDADES & CARACTERISTICAS
[+] ERROS E BUGS
[+] PRINTS DO SERVER
[+] DOWNLOAD
[+] CREDITOS
[+] NOVIDADES & CARACTERISTICAS
[+] ERROS E BUGS
[+] PRINTS DO SERVER
[+] Downloads
Servidor Naruto B&W: Clique Aqui
Client(descompilado): Clique Aqui
[+] Creditos
- Madara Rinnegan (servidor base)
- [ADM] Johnata Editar Praticamente Todo o Servidor
- Eu Por umas Besteiras q eu Coloquei e Por Postar
GOSTOU DO SERVIDOR?
DA UM REP++
-
leliofritsch deu reputação a zipter98 em (Resolvido)Sistema rare!Sabe fazer a tag?
local price = {itemid, count} --Troque itemid pelo ID do item que será cobrado, e count pela quantia. local items = { --[itemid] = {chance, count}, >> Onde itemid é o ID do item, chance, obviamente, a chance dele ser sorteado, e count, a quantidade. --Exemplo: >> Para adicionar mais items, siga o modelo indicado acima. [itemid] = {chance, count}, --[2160] = {50, 10}, >> Assim, o item de ID 2160 teria 50% de chance de ser sorteado. Quantidade -> 10. } function onUse(cid) local _table = {} local number = math.random(1, 100) local item = 0 if doPlayerRemoveItem(cid, price[1], price[2]) then for itemid, chance in pairs(items) do if item == 0 then item = itemid table.insert(_table, item) else if number <= chance[1] then local new_chance = math.abs(chance[1] - number) local old_chance = math.abs(items[item][1] - number) if new_chance < old_chance then if #_table > 0 then _table = {} end table.insert(_table, itemid) item = itemid elseif new_chance == old_chance then table.insert(_table, itemid) end end end end if item ~= 0 then if #_table > 1 then item = _table[math.random(#_table)] end local count = items[item][2] if not isItemStackable(item) then if count > 1 then for i = 1, count do doPlayerAddItem(cid, item, 1) end else doPlayerAddItem(cid, item, 1) end else doPlayerAddItem(cid, item, count) end doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, "You received: "..count.."x "..getItemNameById(item)..(count > 1 and "s" or "")..".") end else return doPlayerSendCancel(cid, "You do not have "..price[2].." "..getItemNameById(price[1])..".") end return true end -
leliofritsch deu reputação a xWhiteWolf em [PEDIDO] Script que aumenta atk speedMesmo com esse comando precisa descompilar o server e editar a source direto. Oque dá pra fazer sem mexer na source é o seguinte
1) criar uma arma com mais attack speed e colocar pro ataque e a defesa dela serem iguais a arma que vc tá utilizando no momento, ele remove a arma atual, coloca a nova no lugar e ela vai ter mesmo attack e defesa só que mais attack speed (o script fica enorme e é bem provavel que os players consigam dupar itens com esse novo sistema mas é possível sim
2) aumentar o attack speed de todo mundo de uma determinada vocação usando um comando q lançou no TFS 0.3.6 mas provavelmente vai bugar muito e se duas pessoas utilizarem ao mesmo tempo vai bugar a porra toda.. daí vc teria que colocar storage e um monte de merda pra evitar bugs (só dor de cabeça)
Sugiro que vc aguarde primeiro a Cipsoft lançar alguma função do gênero para que seja possivel a criação de tal magia, caso contrário, a unica coisa que dá pra fazer são diversas gambiarras nos scripts pra tornar isso possível (de uma forma bem bugada)
-
leliofritsch deu reputação a xWhiteWolf em (Resolvido)[PEDIDO] Editar Items.eu tive todo o trabalho do mundo pra escrever esse post e eu te garanto que ele tá todo certinho, vc tem que adicionar essa linha no items.xml na parte da bota
<attribute key="magiclevelpoints" value="1" /> e dps colocar o id dela no movements do mesmo jeito que citei anteriormente
-
leliofritsch 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"/> -
leliofritsch deu reputação a xWhiteWolf em Volatile SpiderlingFala 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
-
leliofritsch deu reputação a xWhiteWolf em Hirashin Ni No DanFala galera do TK, um cara tinha pedido no suporte pra eu fazer essa spell aqui http://youtu.be/ZWrsRvVYgys?t=1m54s e eu fiz rapidinho e ficou uma bosta, então eu decidi melhorar ela e postar aqui pra vocês.
O vídeo é bem explicativo então eu acho que não preciso ficar prologando isso daqui, se vc não quiser ver o vídeo tente entender pelas fotos:
Bom, antes de tudo vá em spells.xml e coloque isso daqui:
<instant name="Tibia King" words="Hirashin ni no dan" lvl="50" mana="100" prem="1" range="6" needtarget="1" blockwalls="1" exhaustion="1000" needlearn="0" event="script" value="especiais/playerport.lua"> <vocation id="5"/> <vocation id="6"/> <vocation id="7"/> <vocation id="8"/> </instant> aqui vc configura nome da magia, palavras pra usar ela, level pra usar, mana que custa, se precisa ser premio, o alcance máximo dela, se precisa de um target (nessa magia em específico eu vou pedir pra que vc não mexa nisso), se ela é bloqueada pelas paredes (1 quer dizer que sim), a exaustão entre um uso e outro (nesse caso vc usa a magia e precisa esperar 1 segundo (1000 milisegundos) pra usá-la novamente) se ela precisa ser aprendida (0 significa que vc já vem com ela) e em value você tem o diretório em que ela vai ficar (no caso dentro da pasta spells\scripts vai ter uma pasta chamada especiais e dentro dessa pasta vai ter um arquivo chamado playerport.lua
Feito isso crie o arquivo playerport.lua que deverá conter o seguinte:
local config = { storage = 49708, tempo = 1.5, effect = 65 } local exception = {"Trainer", "Training Monk", "GOD"} function onCastSpell(cid, var) local name = getCreatureName(getCreatureTarget(cid)) if not isInArray(exception, name) then if getPlayerStorageValue(cid, config.storage) <= 0 then doPlayerSetStorageValue(cid, config.storage, 1) doSendMagicEffect(getThingPos(cid), config.effect) doSendMagicEffect(getThingPos(variantToNumber(var)), config.effect) addEvent(function() doPlayerSetStorageValue(cid, config.storage, 0) if isCreature(cid) and isCreature(variantToNumber(var)) then if isWalkable(getCreaturePosition(variantToNumber(var)), false, true, true) then doTeleportThing(cid, getThingPos(variantToNumber(var)), true) arr = {3} doAreaCombatHealth(cid, 1, getThingPos(variantToNumber(var)), arr, -getPlayerLevel(cid), -2*(getPlayerLevel(cid)), 0) elseif isCreature(cid) and not isWalkable(getCreaturePosition(variantToNumber(var)), false, true, true) then doPlayerSendCancel(cid, "You can't reach your target") end end end, 1000*config.tempo) elseif getPlayerStorageValue (cid, config.storage) > 0 then doSendMagicEffect(getThingPos(cid), 2) doPlayerSendCancel(cid, "You've already set your target.") end else doPlayerSendCancel (cid, "You can't use this spell in this creature.") return false end return true end Ali no começo é possível configurar algumas coisas do script:
o script em si é bem fácil de se configurar.
Agora pra evitar possíveis bugs você deve ir em creaturescripts\scripts\login.lua e adicionar essas linhas antes do ultimo return true:
---------- PlayerPort--------------- if getPlayerStorageValue(cid, 49708) ~= 0 then setPlayerStorageValue(cid, 49708, 0) end Lembrando que o storage no login.lua tem que ser igual ao storage no script!!
OBS: a fórmula pode ser mudada nessa linha aqui:
doAreaCombatHealth(cid, 1, getThingPos(variantToNumber(var)), arr, -getPlayerLevel(cid), -2*(getPlayerLevel(cid)), config.effectdamage) aqui é a fórmula:
-getPlayerLevel(cid), -2*(getPlayerLevel(cid)) sendo min, max respectivamente. Em outras palavras, o mínimo que a magia tira é o level do player e o máximo que ela tira é 2x o level;
Espero que vcs tenham gostado :]
-
leliofritsch deu reputação a xWhiteWolf em [SPELL] Kamui inFala galera do TK, tirei essa madrugada pra trazer um conteúdo novo a pedido do membro @alanmtd1, trata-se da spell Kamui do Obito só que eu fiz ela um pouquinho diferente;
Testado em TFS 0.3.6, cliente 8.54;
Descrição pra quem não conhece:
O player fala 'kamui in', se ele tiver com um target vai entrar e o target; do contrário entra ele e todos que estiverem à sua volta;
Feito isso eles serão teleportados para o Kamui, um lugar que você vai criar no seu mapa editor e colocar NO-PVP ZONE, spawn de monstro e NO Logout.
Preste bem atenção nisso porque se você esquecer quaisquer um desses vai dar bug.
Depois de X segundos todos os players/monstros que vc teleportou voltarão para onde estavam (a menos que eles morram no kamui).
Porque isso ocorre? Simples, eu só fui perceber como os caras do Naruto Online fizeram esse script depois de ter terminado a minha versão e eu to com preguiça demais de refazer tudo pra ficar igualzinho à versão deles hahauhauhauh então é importante que o kamui seja um local onde não haja mortes, justamente pra não haverem mensagens de erro tipo essa:
[26/07/2014 04:27:46] [Error - Spell Interface] [26/07/2014 04:27:46] In a timer event called from: [26/07/2014 04:27:46] data/spells/scripts/especiais/kamui.lua:onCastSpell [26/07/2014 04:27:47] Description: [26/07/2014 04:27:47] (luaDoTeleportThing) Thing not found Bom, vamos ao script:
Agora em spells.xml: <instant name="KAMUI" words="kamui in" lvl="120" mana="200" prem="1" blockwalls="1" exhaustion="1000" needlearn="0" event="script" value="especiais/kamui.lua"> <vocation id="5"/> <vocation id="6"/> <vocation id="7"/> <vocation id="8"/> </instant> Bom, pra configurar vc mexe na parte inicial do script e ja tá tudo explicadinho... quem sabe um dia eu refaça esse script pra ficar igualzinho o deles auhuhea até lá usem essa versão aí que até que está bem caprichadinha. Toda vez que alguém morrer no kamui vai aparecer uma mensagem de erro mas ela não afeta em nada, podem ficar relaxados. O único jeito de remover isso é impedindo as mortes dentro do kamui oque tira toda a graça da coisa, espero que tenham gostado ;]
-
leliofritsch deu reputação a xWhiteWolf em New Library v. 1.2Fala 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.
-
leliofritsch deu reputação a xWhiteWolf em Dois Tipo De Spell Que Teleporta1)
itemport.lua:
local config = { storage = 49607, tempo = 10, itemid = 6217 } local positions = {} function onCastSpell(cid, var) if getPlayerStorageValue(cid, config.storage) <= 0 then table.insert(positions, getThingPos(cid)) doPlayerSetStorageValue(cid, config.storage, #positions) doCreateItem(config.itemid, getThingPos(cid)) doSendMagicEffect(getThingPos(cid), 3) addEvent(function() if isCreature(cid) then doPlayerSendTextMessage(cid, 22, "Your item has expired.") doPlayerSetStorageValue(cid, config.storage, 0) table.remove(positions, getPlayerStorageValue(cid, config.storage)) end end, 1000*config.tempo) elseif getPlayerStorageValue (cid, config.storage) > 0 then doTeleportThing(cid, positions[getPlayerStorageValue(cid, config.storage)]) doSendMagicEffect(getThingPos(cid), 10) end return true end 2)
playerport.lua
local config = { storage = 49608, tempo = 10 } function onCastSpell(cid, var) if isPlayer(getCreatureTarget(cid)) then local name = getCreatureName(getCreatureTarget(cid)) if getPlayerStorageValue(cid, config.storage) <= 0 then doPlayerSetStorageValue(cid, config.storage, 1) doSendMagicEffect(getThingPos(cid), 65) doSendMagicEffect(getThingPos(getCreatureByName(name)), 65) addEvent(function() if isCreature(cid) then doPlayerSetStorageValue(cid, config.storage, 0) doTeleportThing(cid, getThingPos(getCreatureByName(name))) end end, 1000*config.tempo) elseif getPlayerStorageValue (cid, config.storage) > 0 then doSendMagicEffect(getThingPos(cid), 2) doPlayerSendCancel(cid, "You've already set your target.") end else doPlayerSendCancel (cid, "You can only use this spell on players.") end return true end e no spells.xml:
<instant name="TK SUPORT" words="itemport" lvl="50" mana="100" prem="1" exhaustion="1000" needlearn="0" event="script" value="especiais/itemport.lua"> <vocation id="5"/> <vocation id="6"/> <vocation id="7"/> <vocation id="8"/> </instant> <instant name="TK SUPORT" words="playerport" lvl="50" mana="100" prem="1" range="7" needtarget="1" blockwalls="1" exhaustion="1000" needlearn="0" event="script" value="especiais/playerport.lua"> <vocation id="5"/> <vocation id="6"/> <vocation id="7"/> <vocation id="8"/> </instant> agora vá em creaturescripts\scripts\login.lua e adicione essas linhas antes do ultimo return true
if getPlayerStorageValue(cid, 49607) == -1 then setPlayerStorageValue(cid, 49607, 0) end if getPlayerStorageValue(cid, 49608) ~= 0 then setPlayerStorageValue(cid, 49608, 0) end