Ir para conteúdo

rizen

Membro
  • Registro em

  • Última visita

Histórico de Curtidas

  1. Curtir
    rizen recebeu reputação de Nerivalhs em Fist Fighting/Attackspeed   
    Desculpa reviver o topico mas não pega em TFS 0.3.6.
    Sempre dá um erro.
    Alguém que tenha TFS 0.3.6 conseguiu?
  2. Gostei
    rizen deu reputação a BrunoMaia em Old Tibia tirando limite de 255 efeitos   
    Foi testado no TheForgottenServer 0.3.6 no Tibia 8.54
     
    Como o client já está modificado, precisamos modificar a parte do servidor que envia os dados para o client.
    Vamos modificar dois métodos, addMagicEffect e sendMagicEffect.
    Entre na sua source 0.3.6
    Encontre o arquivo protocolgamer.cpp
    Você vai encontrar esse código
    void ProtocolGame::AddMagicEffect(NetworkMessage_ptr msg,const Position& pos, uint8_t type) { msg->AddByte(0x83); msg->AddPosition(pos); msg->AddByte(type + 1); } Percebeu esse parametro uint8_t type?
    Vamos modificar para uint16_t type.
    Mas isso não vai adiantar nada se o msg->AddByte(type + 1) continuar desse jeito...
    Modifique ele para msg->AddU16(type + 1).
    O código modificado deve ficar desse jeito
     
    void ProtocolGame::AddMagicEffect(NetworkMessage_ptr msg,const Position& pos, uint16_t type) { msg->AddByte(0x83); msg->AddPosition(pos); msg->AddU16(type + 1); } Você já deve ter pegado a lógica...
    Onde tiver um método addMagicEffect com o parametro uint8_t type, tem que trocar por uint16_t type, o mesmo serve para sendMagicEffect.
    Mas como sei que tem pessoas que não gostam de trabalhar um pouco, vamos continuar com os arquivos para modificar.
    No mesmo arquivo procure por esse código
    void ProtocolGame::sendMagicEffect(const Position& pos, uint8_t type) { if(type > MAGIC_EFFECT_LAST || !canSee(pos)) return; NetworkMessage_ptr msg = getOutputBuffer(); if(msg) { TRACK_MESSAGE(msg); AddMagicEffect(msg, pos, type); } } Temos alguém conhecido nos parametros, o uint8_t type, já sabemos o que devemos fazer, modifique ele para uint16_t type,
    Código deve está desse jeito
    void ProtocolGame::sendMagicEffect(const Position& pos, uint16_t type) { if(type > MAGIC_EFFECT_LAST || !canSee(pos)) return; NetworkMessage_ptr msg = getOutputBuffer(); if(msg) { TRACK_MESSAGE(msg); AddMagicEffect(msg, pos, type); } } As alterações desse arquivos terminaram, salva as alterações.
    Vamos para outro arquivo, o protocolgamer.h
    Procure por esse código
    void AddMagicEffect(NetworkMessage_ptr msg, const Position& pos, uint8_t type); Novamente troque o uint8_t type por uint16_t type
    Código devera ficar desse jeito
    void AddMagicEffect(NetworkMessage_ptr msg, const Position& pos, uint16_t type); Procure por esse código
     
    void sendMagicEffect(const Position& pos, uint8_t type); Troque o uint8_t type por uint16_t type
    Código devera ficar desse jeito
    void sendMagicEffect(const Position& pos, uint16_t type); Salve as alterações e vamos para o outro arquivo, está cançado de modificar os códigos? é assim mesmo, se quer alguma coisa tem que se esforçar por ela.
    Vamos para o arquivo game.cpp
    Procure por esses códigos
    void Game::addMagicEffect(const Position& pos, uint8_t effect, bool ghostMode /* = false */) { if(ghostMode) return; const SpectatorVec& list = getSpectators(pos); addMagicEffect(list, pos, effect); } void Game::addMagicEffect(const SpectatorVec& list, const Position& pos, uint8_t effect, bool ghostMode/* = false*/) { if(ghostMode) return; Player* player = NULL; for(SpectatorVec::const_iterator it = list.begin(); it != list.end(); ++it) { if((player = (*it)->getPlayer())) player->sendMagicEffect(pos, effect); } } Troque os parametros uint8_t effect por uint16_t effect
    Dexando-os assim
    void Game::addMagicEffect(const Position& pos, uint16_t effect, bool ghostMode /* = false */) { if(ghostMode) return; const SpectatorVec& list = getSpectators(pos); addMagicEffect(list, pos, effect); } void Game::addMagicEffect(const SpectatorVec& list, const Position& pos, uint16_t effect, bool ghostMode/* = false*/) { if(ghostMode) return; Player* player = NULL; for(SpectatorVec::const_iterator it = list.begin(); it != list.end(); ++it) { if((player = (*it)->getPlayer())) player->sendMagicEffect(pos, effect); } } Salve as alterações e vamos para o outro arquivo, game.h
    Procure por esse códigos, está ficando repetitivo, mas é assim mesmo
    void addMagicEffect(const Position& pos, uint8_t effect, bool ghostMode = false); void addMagicEffect(const SpectatorVec& list, const Position& pos, uint8_t effect, bool ghostMode = false); Troque o uint8_t effect por uint16_t effect
    Código tem que ficar desse jeito
    void addMagicEffect(const Position& pos, uint16_t effect, bool ghostMode = false); void addMagicEffect(const SpectatorVec& list, const Position& pos, uint16_t effect, bool ghostMode = false); Essa foi rápido, salve as alterações e vamos para o outro arquivo, player.h
    Procure por esse código
    void sendMagicEffect(const Position& pos, uint8_t type) const Troque por esse código
    void sendMagicEffect(const Position& pos, uint16_t type) const Salve as alterações, esse foi o último arquivo
    Agora compile!
    Uma coisa que você deve saber, se você tentar entrar com o client que não esteja esperando valores do tipo uint16 e algum efeito for executado, vai da um erro no client, não da para jogar...
    Vamos baixar o client modificado.
     
    Download cliente com as seguintes configurações.
    Port:      7171
    IP:         127.0.0.1
    Version: 8.54
    Clique aqui para baixar esse cliente
    Virus total desse client
     
    Download cliente com as seguintes configurações.
    Port:      7272
    IP:         127.0.0.1
    Version: 8.54
    Clique aqui para baixar esse cliente
    Virus total desse client
     
    Modificações dos clientes foram feitos por mim.
    Reporte qualquer bug que ocorrer.
    Esse tutorial ensina como tirar o limite de 255 efeitos do tibia, se você não tiver mais de 255 efeitos colocados em sua source, então coloque para testar, não precisa colocar agora, e se você quiser pode colocar depois e já deixar seu client preparado para suporta mais de 255 efeitos.
    Tutorial para adicionar efeitos na sua source.
     
    Não deixe de agradecer...
  3. Curtir
    rizen deu reputação a Dwarfer em Town somente pra Premium   
    @rizen
    Em creaturescripts/scripts crie um arquivo.lua:
    local freeTownIDS = {1,2,3,4,5} -- ids das cidades free account local defaultTownID = 3 -- id da cidade para qual o player será teleportado function onLogin(cid) if not isPremium(cid) and (not isInArray(freeTownIDS, getPlayerTown(cid))) then doPlayerSetTown(cid, defaultTownID) doTeleportThing(cid, getTownTemplePosition(getPlayerTown(cid))) doPlayerSendTextMessage(cid, MESSAGE_STATUS_WARNING, "Your premium has expired.") end return true end Em creaturescripts.xml, adicione a tag: 
    <event type="login" name="checkPremiumTown" event="script" value="NOMEDOARQUIVO.lua"/>  
  4. Obrigado
    rizen recebeu reputação de grafit em Share exp   
    Vou testar e ja falo.
     
    EDIT: Funcionou perfeitamente, REP+
  5. Curtir
    rizen deu reputação a grafit em Share exp   
    Troca essa linha:
     
    double shareExperience = (experience / (double)(memberList.size() + 1));  
    por

     
    double shareExperience = experience;  
    E apaga essas duas linhas que estão abaixo:
     
    if(experience > (double)g_config.getNumber(ConfigManager::EXTRA_PARTY_LIMIT)) shareExperience += (experience * (double)(g_config.getNumber(ConfigManager::EXTRA_PARTY_PERCENT) / 100));
    Compila de novo e vê se dá certo

     
  6. Curtir
    rizen recebeu reputação de Fearlet em Share exp   
    Gostaria de pedir um share exp que todos da party ganhassem 100% da exp do mob e não que dividisse.
    Uso TFS 0.3.6 e tenho acesso as sources.
    OBS: Não funciona editar pelo config.lua
  7. Curtir
    rizen deu reputação a Rodrigotort em [Talk] Global Storage   
    Bom Estava Aqui Fazendo um Script ....
    E queria uma Forma Rapida de Saber se tinha X Global Storage no Servidor ...
     
    Não Sei Muito de Script , Nem sei se tinha Alguma Forma ... Mais Criei essa Pequena Talkaction ...
    Para Vereficar se tem X Global Storage ...
     
    Espero Que Ajude Alguem ...
     
    1º - em data/talkactions/ talkactions.xml  -- adicione está tag



     
    2º Em data/ talkactions/ scripts crie um arquivo.lua e coloque isto dentro :
     


      Pronto Agora Para Usar Basta Dizer ->   /storageglobal e a global storage que voçê quer ver se tem no Servidor .. Ex -> /storageglobal 5555     Tambem é possivel Adicionar ou Remover as Globais Storages do Servidor ...   Para Remover basta Dizer -> /storageglobal a global storage e -1 Ex -> /storageglobal 5555 , -1   Para Adcionar é só Dizer -> /storageglobal a global storage e 1 ( ou Valor que voçê usa no Seu Sistema ) Ex -> /storageglobal 5555 , 1   Simples Não?... Bom é Isso , Até ...
  8. Curtir
    rizen deu reputação a gabrielzika em Matar monstro e queimar o corpo   
    @rizen veja se é isso que você quer ...
     
    actions/scripts
     
    aomatar.lua
    function onUse(cid, item, fromPos, itemEx, toPos) local corpseID = 1740 -- id do corpse local tpId = 1387 -- id do magic forcefield local pos2 = {x=2534, y=790, z=6} -- posição onde o tp vai aparecer local toPos2 = {x=2530, y=794, z=6} -- posição para onde vai quem entrar no tp local time = 15 -- tempo que o teleport fica aberto local effFire = 35 -- Efeito de Fogo function removeTp(tp) local t = getTileItemById(pos2, tpId) if t then doRemoveItem(t.uid, 1) doSendMagicEffect(pos2, CONST_ME_POFF) end end if(isInArray(corpseID, itemEx.itemid)) then doCreateTeleport(tpId, toPos2, pos2) addEvent(removeTp, time*1000, tp) doSendMagicEffect(toPos, effFire) doRemoveItem(getTileItemById(toPos, corpseID).uid) return true end return true end  
    actions.xml
     
    <action itemid="2341" event="script" value="aomatar.lua" allowfaruse="1" blockwalls="1"/>  
    Coloca para o Monstro Renascer a cada 30 Segundos quando for Morto... ( Pelo Remeres... )
     
    Em items.xml no Corpse do Monstro deixa o duration assim:
     
    <attribute key="duration" value="30" />  
  9. Obrigado
    rizen deu reputação a gabrielzika em Monstros nao atacarem summon   
    @rizen Ve se isso funciona 
     
    function onAttack(cid, target, attacker, type, combat, value) if isPlayer(target) and #getCreatureSummons(target) >= 1 then doMonsterSetTarget(cid, target) end return true end  
    Créditos: @L3K0T
  10. Curtir
    rizen deu reputação a Noninhouh em Monstros nao atacarem summon   
    Acredito que possa ser pela falta da função isSummon...
    No arquivo /server/data/lib/050-function.lua, adicione essa função:
    function isSummon(cid) return getCreatureMaster(cid) end  
  11. Curtir
    rizen deu reputação a L3K0T em Monstro Focando 1° no Summon depois no Player.   
    Fala galera, hoje estarei ensinando você como fazer os monstro (selvagens) focar primeiro no summons, depois no player, sem mexer na source, hoje estarei mostrando em scripts e é o mesmo que uso em meu servidor, então testado!
     
    vai em data/creaturescripts/scripts copia uma arquivo .lua e renomeia pra ataque.lua e coloca isso lá dentro.
     
    function onAttack(cid, target, attacker, type, combat, value) if isPlayer(target) and #getCreatureSummons(target) >= 1 then doMonsterSetTarget(cid, getCreatureSummons(target)[1]) end return true end agora no creaturescripts.xml coloca a tag
     
    <event type="attack" name="BlockHit6" event="script" value="ataque.lua"/> como usar ? é muito simples agora você vai em todos monstros selvagens e vai add lá em baixo.
     
    <script> <event name="BlockHit6"></event> </script> sempre antes do 
     
    </monster>  
    ADICIONA NO LOGIN.LUA 
     
    registerCreatureEvent(cid, "BlockHit6")  
     
    agora é só alegria parceiro  espero ter ajudado! :* 
  12. Gostei
    rizen deu reputação a antharaz em Alavanca que sumona monstro   
    @rizen 
     
    Perdão, esqueci de falar que você tem que mudar o XML do monstro. Abra o XML do monstro que aparece e antes de </monster> coloque:
     
     
  13. Gostei
    rizen deu reputação a antharaz em Alavanca que sumona monstro   
    @rizen 
     
    Será sempre o mesmo monstro nas 5 posições?
     
    --EDIT
     
    Siga as instruções abaixo:
     
    Coloque o código abaixo no final do arquivo 000-constant.lua e configure:
     
     
     
    Tag do creaturescripts.xml:
     
     
     
    Script parede.lua do creaturescripts:
     
     
    A tag da action você já deve ter, então logo abaixo há o script da action:
     
     
     
    Abra o XML do monstro que aparece e antes de </monster> coloque:
     
  14. Gostei
    rizen deu reputação a KotZletY em [Narutibia] Jinchuuriki System - Distro 0.4   
    Salve rápázyádá, recentemente estava de rolê pelo tk, e vi um tópico com o seguinte pedido: "Jinchuuriki System", pra que não conhece irei da um breve resumo.
     
    Para quem conhece o anime naruto sabe sobre as bijuus, e que elas foram seladas em shinobis destinados a carregar tamanha responsabilidade devido a cada biju ter um poder destruidor, como por exemplo a bijuu raposa de nove caldas(Kyuubi), selada dentro do personagem principal chamado de Naruto Uzumaki, a Kyuubi quando dominada, dá ao usuário uma grotesca quantidade de chakra, assim como jutsus e muito mais, cada bijuu tem sua especialidade, jutsus de defesa, assim como a própia defesa e resistência do usuário a tais jutsus, mas claro para você ter a bijuu, é necessário que você sele-a dentro de você, através de um dos jutsus proibidos, como o Shiki Fuujin usado por Minato o 4º Hokage e também pai de naruto, ao usar o selo ele consome a alma de quem usa levando-o a morte após o termino do jutsu, minato como hokage não poderia deixar a kyuubi destruir a vila, então ele invoca o Selo Consumidor do Demônio Morto(Shiki Fuujin) conhecido também como Selo Ceifeiro da Morte, e sela a kyuubi dentro de seu própio filho salvando a vila e morrendo como herói, e naruto desde então passa a ser o Jinchuuriki da raposa de nove caldas.
     
     
    Tendo uma ideia básica de como funciona, vamos a explicação do sistema, que não é diferente.
     
    Ao usar um jutsu(spell) de selo em algum bijuu(monstro), você terá ele selado dentro de você e obterá os jutsus de acordo com cada bijuu, mas para isso, a vida(hp) da bijuu deve está menor que 20%(configurável), e então você durante 2(configurável) dias, terá ele selado dentro de você e poderá usar os jutsus, ao acabar esse tempo você irá perdelo, assim como os jutsus.
    Sistema criado e testado na versão 8.60 usando uma distro na versão 0.4, mesmo assim pode funcionar em versões inferiores!!
     
    Siga os passos corretamente que é sucesso.
     
    Vá em data/lib e crie um arquivo chamado JinchuurikiSystem.lua e coloque o seguinte code dentro:
     
    A tabela está de acordo com a ordem de bijuus existente desde o bijuu de 1 calda, até a biju de nove caldas, então você irá mexer somente em qual ou quais jutsus(spells) cada bijuu irá usar, mais precisamente aqui:
    spells = {""} entre aspas coloque a quantidade que seja de jutsus(spell), como por exemplo:
    Tk no Jutsu 1- Tk no jutsu 2, separados por virgula, assim:
    spells = {"Tk no jutsu 1", "Tk no jutsu 2"} Lembrando que o nome das spells não é a que fica em words, é que  fica em name na xml, por exemplo:
    eu tenho um jutsu chamado kai, quem joga narutibia sabe pra que serve, para usar ela, usamos o nome que está em words, e a que fica em name, será que vai ser mostrada quando for usar, entretanto a função que faz o player aprender a spell, segui pelo nome:
    <instant name="Kai!" words="kai" note que contém uma exclamação no nome da spell, então vai ter que ir exclamação e tudo junto, ficando assim:
    spells = {"Tk no jutsu 1", "Tk no jutsu 2", "Kai!"} e então quando o player for usar a spell pelo words kai, a spell será usada.
     
    Agora vá em data/spells/scripts crie um arquivo chamado selojin.lua e coloque o seguinte code dentro:
     
    Agora vá em data/spells/scripts crie um arquivo chamado buff bijuu.lua e coloque o seguinte code dentro:
     
     
    a tag que você irá colocar na spells.xml para esse jutsu(spell) será a seguinte:
    <instant name="Shiki Fuujin" words="shiki fuujin" lvl="1" mana="1" prem="0" exhaustion="10" enabled="1" needtarget="1" event="script" value="selojin.lua"> </instant> <instant name="Buff Jin" words="buff jin" lvl="1" mana="0" prem="0" selftarget="1" exhaustion="1000" enabled="1" event="script" value="buff bijuu.lua"> </instant>  
     
    Agora vá em data/talkactions/scripts e crie um arquivo chamado jincheck.lua e coloque o seguinte code dentro:
     
    Nota: esse comando serve para você checar quanto tempo você tem de Jinchuuriki, e qual bijuu está selado dentro de você.
    A tag da talkactions.xml para esse jutsu(spell) é a seguinte:
    <talkaction words="!jincheck" event="script" value="jincheck.lua"/>  
    Agora vá em data/globalevents/scripts e crie um arquivo chamado jincheck.lua e coloque o seguinte code dentro:
     
    Nota: esse script checa a cada um minuto, os players online na qual o tempo de Jinchuuriki já expirou, e então remove, para assim ele não continuar com os jutsus.
     
    A tag do globalevents.xml desse script é a seguinte:
    <globalevent name="JinSystem" interval="60000" script="jincheck.lua"/>  
    Agora pra finalizar vá em data/creaturescripts/scripts e crie um arquivo chamado jinsystem.lua e adicione o seguinte code:
     
    e a tag do creaturescripts.xml desse script é a seguinte:
    <!-- Jinchuuriki System --> <event type="look" name="JinSystemLook" event="script" value="jinsystem.lua"/> <event type="death" name="JinSystemDeath" event="script" value="jinsystem.lua"/> <event type="login" name="JinSystemLogin" event="script" value="jinsystem.lua"/> <event type="logout" name="JinSystemLogout" event="script" value="jinsystem.lua"/>  
    Nota: na spells.xml que não precisam ter uma vocação especifica para ser usada e devem conter a tag:
    needlearn="1" contendo essa tag, a spell não irá aparecer para nenhum player e não poderá ser usado até que o player sele a bijuu, após ser aprendida quando o player sela a bijuu, irá aparecer no comando !jutsus que em servidores normais é o spellbook e o !spells, em quanto o player não selar, ele não ver e nem pode usar.
     
    bijuu_outfit é o id da looktype que o player vai ganhar ao usar o buff(se você tem outro buff ou speel que faça o mesmo, remova-o ou então remova a função doSetCreatureOutfit da minha buff, assim não gerando conflito e ficando o outfit que deseja).
    skill_p é a quantidade de pontos que ao usar o buff da bijuu, vai add no player.
    time_buff é quanto tempo o buff vai ficar no player valendo também para a looktype.
    effBuff é o id do efeito que vai sair em cima do player quando ele usar o buff.
     
    Pronto, basta configura a spells que cada bijuu(monstro), e pronto.
    Acho que não preciso explicar como configurar, no própio script deixei umas observações.
     
    É totalmente proibido levar meu sistema para outro blog, site ou fórum, fiz esse sistema exclusivamente para membros da comunidade do TibiaKing.
     
     
    Quaisquer erros, sugestões, críticas(construtivas), fiquem a vontade, caso tenha alguma duvida sobre tal parte do script, ou não entendeu alguma parte de como configurar, basta comentar que estarei dando suporte.
     
    Script feito por mim.
     
     
     
    Abraços, bom uso, e boa noite! xD
  15. Curtir
    rizen deu reputação a LeoTK em [Suporte] Spr e dat não abre usando object builder   
    Eu percebi baixei o client para extender e tirar foto mostrando para você como extender e realmente não abre dessa forma fica difícil trabalhar bom tem uma maneira mas é muito trabalhosa que seria o caso você criar uma spr e dat nova usando o object builder e passar todas as sprites para essa nova spr e dat porém é trabalhoso fazer isso eu tentei usar as signature do client mas da um erro no object builder pode ser que alguém saiba como fazer isso bom já que o problema é com o spr e dat do client vou mover o seu tópico para suporte de client tenho certeza que alguém vai conseguir ajudar você  
     
    @rizen
    tópico movido e titulo alterado para você ter uma ajuda mais eficiente  
  16. Gostei
    rizen deu reputação a xWhiteWolf 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.
  17. Gostei
    rizen deu reputação a Eremin em [Pedido] Spell "Izanagi"   
    Bom, Vo passa o que eu uso no meu server e você ve se da ai..
     
    Crie um arquivo nos creaturescripts com isto dentro


     
    ainda em creaturescripts em login.lua coloquei isto antes do ultimo return true


     
    agora em creaturescripts.xml adicione esta tag
        <event type="statschange" name="reborn" script="izanagi.lua"/>
     
    agora na pasta spells, cri um arquivo .lua e coloque isso


     
    coloquei esta tag no spells.xml
            <instant name="izanagi" words="izanagi" prem="0" selftarget="1" aggressive="0" lvl="150" mana="1000"  exhaustion="1000" event="script" value="nome do seu arquivo.lua">
  18. Gostei
    rizen deu reputação a xWhiteWolf em Swap (Henge no Jutsu)   
    Hoje vim trazer uma spell que eu considero muito legal que eu tenho no meu servidor ja faz alguns meses e esqueci completamente de postar haha

    Trata-se de nada mais nada menos que uma troca entre dois personagens, eles trocam de posição e de outfit confundindo lindamente os adversários.
    Não tenho gif da spell e nem imagem pq to com uma baita preguiça e daqui a 8 minutos eu tenho que ir pra faculdade então testem aí porque é bem legal essa spell. Ps: só funciona em players.

    Instalando: Crie um arquivo chamado swap em data\spells\scripts\especiais que seja com extensão .lua e coloque isso dentro dele:




    e no spells.xml:
    <instant name="Swap" words="swap" lvl="23" mana="25" range="1" needtarget="1" params="1" exhaustion="3000" blockwalls="1" needlearn="0" event="script" value="especiais/swap.lua"> </instant>
    Para usá-la basta dizer swap "nome do player e tem que estar à 1 sqm de distancia dele. Você irá trocar de posição com ele e ambos trocarão de outfit, confundindo os outros players.
     
  19. Gostei
    rizen deu reputação a xWhiteWolf em Buraco Negro   
    Pronto:

    Você vai ter que fazer uma pequena alteração no seu spells.xml, deixando ele assim:
    <instant name="Dark Hole" words="buraco negro" lvl="160" direction="1" mana="500" prem="1" exhaustion="2000" needlearn="0" event="script" value="especiais/buraco negro.lua"> <vocation id="6"/> <vocation id="7"/> <vocation id="5"/> </instant> com esse direction = "1"


    e o script vc deve deixar assim:



  20. Gostei
    rizen deu reputação a MaTTch em (Resolvido)Spell de empurrar   
    Aé, esqueci kk
     
    Aqui:
    local configSpell = {     pushSqms = 3, -- quantos sqm vai empurrar     exhaustStorage = 55230, -- se quiser pode mudar     exhaustTime = 5 -- exhausted em segundos } local combat = createCombatObject() setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_PHYSICALDAMAGE) setCombatParam(combat, COMBAT_PARAM_EFFECT, 20) setCombatFormula(combat, COMBAT_FORMULA_LEVELMAGIC, -6.3, 0, -7.3, 0) local function isWalkable(pos, creature, pz, proj)     if(getTileThingByPos({x = pos.x, y = pos.y, z = pos.z, stackpos = 0}).itemid == 0) then         return false     end     if(getTilePzInfo(pos) and not pz) then         return false     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     if(getTopCreature(pos).uid ~= 0 and not creature) then         return false     end     return true end local function doPushCreature(target, times)     if(isCreature(target) and times > 0) then         local pos = getCreatureLookPosition(target)         if(isWalkable(pos)) then             doTeleportThing(target, pos)             doSendMagicEffect(getThingPos(target), 2)             addEvent(doPushCreature, 1, target, times-1)         end     end end local function doSpell(cid, target, var)     local pos = getThingPos(target)     local config = {         [NORTH] = {SOUTH, {x=pos.x, y=pos.y+1, z=pos.z}},         [EAST] = {WEST, {x=pos.x-1, y=pos.y, z=pos.z}},         [SOUTH] = {NORTH, {x=pos.x, y=pos.y-1, z=pos.z}},         [WEST] = {EAST, {x=pos.x+1, y=pos.y, z=pos.z}}     }     local a, b = config[getCreatureLookDirection(target)], getCreatureLookPosition(target)     if(isWalkable(a[2]) and isWalkable(b)) then         doPushCreature(target, configSpell.pushSqms)         doTeleportThing(cid, a[2], false)         doCreatureSetLookDirection(cid, getCreatureLookDirection(target))         doCombat(cid, combat, var)     else         doPlayerSendCancel(cid, "Position blocked.")         return false     end     return true end function onCastSpell(cid, var)     if(isPlayer(cid) and exhaustion.check(cid, configSpell.exhaustStorage)) then         doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Wait "..exhaustion.get(cid, configSpell.exhaustStorage).." second"..(exhaustion.get(cid, configSpell.exhaustStorage) > 1 and "s" or "")..".")         return false     end     exhaustion.set(cid, configSpell.exhaustStorage, configSpell.exhaustTime)     return doSpell(cid, getCreatureTarget(cid), var) end
  21. Gostei
    rizen deu reputação a Garou em Erro de script   
    Registrou no creaturescripts.xml e colocou a função registerCreatureEvent no login.lua?
  22. Gostei
    rizen deu reputação a Sanieg em Erro de script   
    Ok, mais você esta usando algumas das outfits que estão configuradas para ele mudar =V ?
  23. Gostei
    rizen deu reputação a xBen em Erro de script   
    @rizen ta aí se ajudei rep +

     
    local outfits = { [348] = 385, [349] = 390, } function onAttack(cid, target) doCreatureSetLookDirection(cid, getDirectionTo(getPlayerPosition(cid), getPlayerPosition(target))) if getDistanceBetween(getPlayerPosition(cid), getPlayerPosition(target)) > 1 then return true end local tmp = getCreatureOutfit(cid) if outfits[tmp.lookType] then tmp.lookType = outfits[tmp.lookType] doSetCreatureOutfit(cid, tmp, 900) end return true end @vinicius xxgamexx

    isso não existe

     
    if getDistanceBetween(getPlayerPosition(cid), getPlayerPosition(target)) > 1 then do doCreatureSetLookDirection(cid, getDirectionTo(getPlayerPosition(cid), getPlayerPosition(target))) end

Informação Importante

Confirmação de Termo