Histórico de Curtidas
-
Guilherme Kaercher deu reputação a Adventure em Como colocar som no mapa no OTClientOlá pessoal.
Venho trazer para vocês um novo mod já que nenhum outro esta funcionando.
Oque você fez ?
'' Bom simplesmente peguei uma base.
A base só tinha umas 5 linhas '-' foi dureza fazer o resto kkkk.
Ai compilei no OT Cliente para funcionar só no meu cliente para ninguém roubar ! ''
Mas um amiguinho aqui do Tibia King e também uma galera estava com o mesmo problema que eu , então tive de refazer e tirar a proteção do script para disponibilizar para vocês.
Para vocês não precisar copiar os script eu montei tudo bonitinho e deixei em uma pasta.
Basta apenas: Entra na pasta do seu otclient e na pasta Mod você colocar a pasta que irei disponibilizar. Simples
Como configurar:
Vá no rcsound.lua
Abra ele !
Na parte:
{fromPos = {x=1089, y=1110, z=8}, toPos = {x=1135, y=1142, z=8}
Como voces podem ver deve ser colocado em fromPos a primeira ponta do lado esquerdo e em toPos a outra ponta da parte de baixo.
É importante configurar corretamente.
Na parte:
{fromPos = {x = 985, y = 1069, z = 8}, toPos = {x = 1378, y = 1290, z = 8}, sound = "Fairy Tail - Main.ogg"},
Deve ser colocada a musica em formato ( ogg ) para converter é bem simples
Vá neste site http://online-audio-converter.com/pt/
Que por sinal é muito bom !
Você converte sua musica para ogg.
Não mecha na qualidade se tentar melhorar a qualidade do som na hora da conversão o som pode sair muito estranho kkk vá por mim.
Coloque as musicas em formato OGG dentro da pasta music ! NÃO É A PASTA QUE FICA NO DATA , É A PASTA QUE ESTA DENTRO DO MOD COM O NOME DE MUSIC PELO AMOR DO PAEE
Deixei uma musica na pasta para que vocês possam testar o sistema.
Caso der algum erro no Console poste e tentaremos arrumar.
Normalmente estou sempre ON pelo celular
Download:
*Upei em dois lugares diferentes vocês podem escolher onde querem baixar
Scan para aquela galerinha paranoica kkk:
EM BREVE VEM AI O : -ADVENTURE WORLD- PARA AQUELES QUE GOSTAM DO BOM E VELHO RPG EM UM MUNDO CERCADO DE AVENTURAS E UMA HISTORIA ENVOLVENTE !
-
Guilherme Kaercher recebeu reputação de elipe em [SPELL] Exori frigo que dá slow (lentidão)Opa pessoal,
Sou novo aqui e estou trazendo pra vocês uma spell que eu estava procurando e não achei em lugar nenhum. A spell é um "ice strike"(exori frigo) que dá lentidão. É uma ótima idéia para quem quer brincar com os efeitos dos elementos (congelar, queimar e etc...). Não sei como botar aquele botãozinho do spoiler, se alguém quiser me ensinar... =).
No Spells.xml:
<instant name="Slowing Ice Strike" words="exori frigo" lvl="16" mana="20" prem="0" range="3" casterTargetOrDirection="1" blockwalls="1" exhaustion="1000" groups="1,2000" icon="87" needlearn="0" event="script" value="attack/slowing ice strike.lua"> <!--ajuste suas vocations ID aqui embaixo--> <vocation id="5"/> <vocation id="6"/> <vocation id="7"/> </instant>
Na pasta "data\spells\scripts\attack":
crie um arquivo com o nome slowing ice strike.lua e coloque o seguinte código:
local combat = createCombatObject() setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_ICEDAMAGE) setCombatParam(combat, COMBAT_PARAM_DISTANCEEFFECT, CONST_ANI_SMALLICE) function onGetFormulaValues(cid, level, maglevel) local min = level / 5 + maglevel * 5.5 + 32 local max = level / 5 + maglevel * 7.7 + 48 return -min, -max end local speed = createConditionObject(CONDITION_PARALYZE) setConditionParam(speed, CONDITION_PARAM_TICKS, 5000) setConditionFormula(speed, -0.7, 56, -0.7, 56) setCombatCondition(combat, speed) setCombatCallback(combat, CALLBACK_PARAM_LEVELMAGICVALUE, "onGetFormulaValues") function onCastSpell(cid, var) return doCombat(cid, combat, var) end Se gostarem da REP+!
-
Guilherme Kaercher recebeu reputação de Lurk em [SPELL] Exori frigo que dá slow (lentidão)Opa pessoal,
Sou novo aqui e estou trazendo pra vocês uma spell que eu estava procurando e não achei em lugar nenhum. A spell é um "ice strike"(exori frigo) que dá lentidão. É uma ótima idéia para quem quer brincar com os efeitos dos elementos (congelar, queimar e etc...). Não sei como botar aquele botãozinho do spoiler, se alguém quiser me ensinar... =).
No Spells.xml:
<instant name="Slowing Ice Strike" words="exori frigo" lvl="16" mana="20" prem="0" range="3" casterTargetOrDirection="1" blockwalls="1" exhaustion="1000" groups="1,2000" icon="87" needlearn="0" event="script" value="attack/slowing ice strike.lua"> <!--ajuste suas vocations ID aqui embaixo--> <vocation id="5"/> <vocation id="6"/> <vocation id="7"/> </instant>
Na pasta "data\spells\scripts\attack":
crie um arquivo com o nome slowing ice strike.lua e coloque o seguinte código:
local combat = createCombatObject() setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_ICEDAMAGE) setCombatParam(combat, COMBAT_PARAM_DISTANCEEFFECT, CONST_ANI_SMALLICE) function onGetFormulaValues(cid, level, maglevel) local min = level / 5 + maglevel * 5.5 + 32 local max = level / 5 + maglevel * 7.7 + 48 return -min, -max end local speed = createConditionObject(CONDITION_PARALYZE) setConditionParam(speed, CONDITION_PARAM_TICKS, 5000) setConditionFormula(speed, -0.7, 56, -0.7, 56) setCombatCondition(combat, speed) setCombatCallback(combat, CALLBACK_PARAM_LEVELMAGICVALUE, "onGetFormulaValues") function onCastSpell(cid, var) return doCombat(cid, combat, var) end Se gostarem da REP+!
-
Guilherme Kaercher deu reputação a Danihcv em [TUTORIAL] Adicionando novas mountsAqui no TK tem alguns tutoriais ensinando a botar novas mounts em seus servers, porém não achei nenhum que trouxesse uma informação fundamental: existe um limite de mounts que vc pode ter em seu server ao mesmo tempo.
Por exemplo, em meu server o limite é de 50 mounts. Se eu colocar, no arquivo mounts.xml, 51 mounts, o player quando abrir a tela pra escolher a mount ou irá tomar debug, ou a mount simplesmente não estará lá.
Tendo isso em mente, vamos ao tutorial:
1°) Colocando a criatura como mount
Abra seu arquivo mounts.xml que se encontra na pasta data/XML.
Dentro dele adicione a seguinte tag:
Em vermelho vc irá colocar o id da mount. Para descobrir qual o id da mount que vc está adicionando, basta ver o id da mount anterior e colocar o numero seguinte. Por exemplo, a mount anterior a essa tem o id 19.
Em azul vc irá colocar o looktype da criatura (monstro). Para descobrir o looktype do monstro que vc qr adicionar, basta ver o looktype no arquivo .xml do monstro. Por exemplo no arquivo Crystal spider.xml:
Em verde vc irá colocar o nome que irá aparecer para os players na tela de escolher a mount. Por exemplo, se eu tivesse colocado essa tag em mounts.xml:
O player iria visualizar o seguinte:
Em laranja vc irá colocar a speed da mount, ou seja, a velocidade com que o player irá se locomover quando estiver montado na mount.
E por fim em roxo vc irá colocar se pra usar a mount é necessário ser premium (premium="yes") ou se qualquer player, premium ou não, poderá usar a mount (premium="no").
2°) Colocando mounts proprias
É o mesmo jeito de configurar, porém o outfit (looktype) vc irá pegar pelo seu dat (e spr) editor. Por exemplo, eu peguei a mount Emperor Deer da versão 10.71 e coloquei em meu client 10.10. No meu editor de dat e spr, ficou assim:
Ou seja, a minha tag pra essa mount ficaria assim:
Em breve farei um tutorial de como adicionar essas sprites de mounts proprias pra seu client. Quando o fizer, postarei o link aqui para complementar mais o tutorial.
E isso é tudo, pessoal! Se gostaram do tutorial, não esquece o REP+ sahusahusa
Se têm alguma sugestão de tutorial para me dar, manda pm.
-
Guilherme Kaercher deu reputação a xWhiteWolf em [CMS] Campeonato Mensal de Scripting #01Fala galera do Tibia King, hoje eu trago a vocês a primeiríssima edição do Campeonato Mensal de Scripting. Essa é sua chance de mostrar suas melhores criações e concorrer contra outros membros à prêmios incríveis!
TEMA DESSA EDIÇÃO: QUESTS
Para este tema especificamente vocês podem utilizar quaisquer pastas do server, pode ser desde uma quest simples em actions como uma quest super complexa. Surpreendam-me com sua criatividade pois inovação será levada em consideração.
Como vai funcionar: Para participar, a partir de hoje (17/01/2015) os membros terão 2 semanas para fazer um script em torno do tema acima e postar-lo na Seção de participação do CMS, lá seu tópico ficará visível somente para você e nós da equipe do TK, poste também neste tópico apenas avisando que você está participando do concurso. Na seção de participação do CMS seu script será avaliado e a avalização será postada no próprio tópico do autor. Após o término do concurso os links de todos os tópicos de participações deste concurso serão postados no tópico de Resultado desta edição do CMS, os tópicos também serão movidos para a área mais adequada na seção de Scripting (actions, creaturescripts, mods, etc).
O campeonato só será realizado caso tenhamos mais de 5 de participantes. OBS: Todas as instruções dos formatos dos tópicos de participações estão na seção de Participação do CMS.
Os scripts serão analisados por mim e pelo separadamente seguindo os critérios abaixo: [Peso 25] Criatividade e Inovação: O quão criativo e inovador você foi ao criar o script, isso vale tanto no código quanto na idéia de sua utilização. Nesse critério será avaliado a capacidade tanto de criar um código de uma forma nova e ao mesmo tempo o quão criativo ficou o seu script no servidor. Contra exemplo: Fazer um script que seja comum ou igual a várias que tem por aí irá fazer você tirar uma pontuação baixa nesse quesito. [Peso 15] Aplicabilidade: O quão abrangente é o seu código ou o quão aplicável ele é, tanto em diferentes versões de tibia como em servidores derivados. Nesse critério será avaliado se seu script rodaria em diferentes servidores e também se seria uma idéia viável de se colocar em diferentes tipos de servidores. Contra exemplo: Fazer um script que tenha funções exclusivas de algumas versões ou fazer um script cuja idéia não seja concebível no mundo do Tibia irá fazer você tirar uma pontuação baixa nesse quesito. [Peso 10] Simplicidade e Organização. O quão simples e organizado seu código está. Nesse critério será avaliado se seu script está tão simples quanto ele poderia ser e também se ele está organizado (ordem das funções) e identado (estrutura do script) corretamente. Contra exemplo: Fazer um script bagunçado ou de dificil entendimento acarretará em uma pontuação baixa nesse quesito.
No final nós daremos notas de 0 a 10 isoladamente, e ao final compararemos as notas. As notas que possuirem uma discrepância maior que 3 pontos serão reavaliadas em conjunto em prol de obter um padrão nas correções. Após isso, será aplicada uma média ponderada para atribuir os pesos de cada categoria e iremos dar uma nota de 0 a 10 com base nisso.
O script obrigatoriamente deverá ser de sua autoria e não poderá ser nenhum trabalho que você já tenha postado, a idéia aqui é que você faça um script pro campeonato pois além de treinar irá aprender e melhorar suas habilidades. Como vocês viram, a maior parte da pontuação está na ideia e não no código em si, foi uma decisão minha e da equipe pra permitir que qualquer um possa participar e ter chance de ganhar, ou seja, não importa se você for o melhor scripter do país, se sua ideia for ruim, não vai adiantar nada seu código estar impecável.
Recompensas: 1º Lugar --- 20 REP+, Medalha de Ouro do CMS #01, Conquista de Scripter e Conquista de Scripter King *. 2º Lugar --- 15 REP+, Medalha de Prata do CMS #01 e Conquista de Scripter. 3º Lugar --- 10 REP+, Medalha de Bronze do CMS #01 e Conquista de Scripter.
Oponente Honrado: O quarto e quinto lugar receberão a Conquista de Scripter e 3 REP+ caso hajam mais de 8 participantes. * OBS¹: O membro que receber a conquista de Scripter King ficará com ela somente até a próxima edição do CMS, onde o vencedor atual terá que defender o título. Ou seja, para manter sua conquista de Scripter King você terá que ganhar a próxima edição do CMS, caso ao contrário, a conquista irá para o novo vencedor. OBS²: O membro só irá receber a conquista de Scripter caso ele ainda não a possua. OBS³: Todos os membros que participarem ganharão 1 REP+ como gratificação.
Por que Participar? Primeiramente esta é uma chance de realmente competir com outros membros pra saber quem é o melhor, não só quem sabe programar melhor mas sim quem é mais útil programando, nesse concurso as melhores idéias também serão levadas em consideração então mesmo que você não tenha tanta habilidade em Lua, ainda há grandes chances de você vencer! Aqui é sua chance de treinar e aprender cada vez mais sobre scripting! No mais, tem coisa melhor do que começar um projeto com um real incentivo e depois talvez até receber um prêmio por isso? Um campeonato que promete revelar não só os melhores scripters como também as mentes mais criativas do TK! Não perca sua chance de participar! Data final pra envio dos scripts pela seção de participação: 31/01/2015 Resultado dia: 05/02/2015
A equipe deseja uma boa sorte para todos que forem participar. Abraços.
Qualquer dúvida sintam-se a vontade para perguntar nos comentários. -
Guilherme Kaercher deu reputação a Cat em [CMM] Campeonato Mensal de Mapping #01Tema: Castelos
Créditos: Deviantart.com
COMO IRÁ FUNCIONAR
Para participar, a partir de hoje (18/01/2015) os membros terão 2 semanas para fazer um mapa em torno do tema acima e postar-lo na Seção de participação do CMM, lá seu tópico só ficará visível para você e nós da equipe do TK, poste também neste tópico apenas avisando que você está participando do concurso.
Na seção de participação do CMM seu mapa será avaliado e a avalização será postada no próprio tópico do autor. Após o término do concurso os links de todos os tópicos de participações deste concurso serão postados no tópico de Resultado desta edição do CMM, os tópicos também serão movidos para a área downloads de mapas.
OBS: Todas as instruções dos formatos dos tópicos de participações estão na seção de Participação do CMM.
INSTRUÇÕES
- Você deve seguir o tema proposto no tópico; - O mapa deve ser de sua autoria;
- Poste no tópico do download do seu mapa juntamente com o scan.
- Poste no tópico quantas imagens achar necessário;
- As imagens podem ser tiradas in-game (podem conter as bordas do Tibia), porém, não podem conter edições (photoshop, etc);
- Imagens tiradas in-game devem seguir um padrão, clique aqui;
- Mapas já utilizados ou postados serão descartados.
AVALIAÇÃO
PARTICIPAÇÃO - 5 PONTOS
RESPONSABILIDADE (PRAZO) - 2 PONTOS
RESPEITO À TEMÁTICA - 3 PONTOS
DETALHAMENTO - 20 PONTOS
RPG/JOGABILIDADE - 20 PONTOS
CRIATIVIDADE - 50 PONTOS
PRÊMIOS
1º Lugar --- 20 REP+, Medalha de Ouro do CMM #01, Conquista de Mapper e Conquista de Mapper King *.
2º Lugar --- 15 REP+, Medalha de Prata do CMM #01 e Conquista de Mapper.
3º Lugar --- 10 REP+, Medalha de Bronze do CMM #01 e Conquista de Mapper.
Oponente Honrado: O quarto e quinto lugar receberão a Conquista de Mapper e 3 REP+ caso hajam mais de 8 participantes.
* OBS¹: O membro que receber a conquista de Mapper King ficará com ela somente até a próxima edição do CMM, onde o vencedor atual terá que defender o título. Ou seja, para manter sua conquista de Mapper King você terá que ganhar a próxima edição do CMM, caso ao contrário, a conquista irá para o novo vencedor.
OBS²: O membro só irá receber a conquista de Mapper caso ele ainda não a possua.
OBS³: Todos os membros que participarem ganharão 1 REP+ como gratificação.
Prazo final para participar: 31/01/15
Data do resultado: 05/02/15
O CMM só será válido caso haja mais de 5 participantes!
-
Guilherme Kaercher recebeu reputação de Hoad em [Spell] Feral Companion / Invoke Companion (magia de summon)O que?
Magia de summon / Invocar criatura
Qual a ideia?
Já existem spells de summon, porém a ideia dessa é além de ser simples é ser usada para RPGs, por exemplo: um arqueiro sumonar um lobo para ser sua compania.
Qual a diferença para as outras spells desse genero?
Essa permite sumonar apenas um monstro especifico.
Funciona com TFS 1.0. Os outros que eu testei nenhum funcionou.
Observacao1: Ainda da pra melhorar a spell e fazer a cada level ser um monstro mais forte
Observacao2: Meu teclado eh default ingles, entao desculpem pela falta dos acentos.
Observacao3: Esse eh meu primeiro post se gostou da rep+
Enfim a spell:
Em spells.xml
<instant name="Feral Companion" words="utevo res companion" lvl="1" mana="0" soul = "10" prem="1" selftarget="1" exhaustion="2000" groups="1,2000" icon="88" needlearn="0" script="support/feral companion.lua"> <vocation name="Arqueiro"/> </instant> Em scripts crie um arquivo: "feral companion.lua"
function onCastSpell(cid) local player = Player(cid) local summon = getCreatureSummons(cid) local maxSum = 1 if (table.maxn(summon) < maxSum) then local position = player:getPosition() local monster = doConvinceCreature(cid, doSummonCreature("Wolf", position)) return false else doSendMagicEffect(pos, 12) doPlayerSendCancel(cid, "Voce so pode invocar uma fera") end end Nao preciso dizer que voces podem mudar a vocation: "Arqueiro" para as que tem no seu server ne
Bom uso!
-
Guilherme Kaercher deu reputação a Caronte em [MOVE] Caminhada no pantanoBom, olá pessoal, eu não sou de fazer scripts e esse é meu primeiro:
gostaria de saber como ficou, como poderia melhorar e etc...
É um script que onde você colocar a action dele vai tomar paralize e quando sair a paralize sai, como se fosse uma dificuldade na caminhada...
Eu sei que é meio inútil mas ta aí:
Em movements>scripts crie um arquivo chamado pantano.lua
function onStepIn(cid, item, position, fromPosition) local condition = createConditionObject(CONDITION_PARALYZE) setConditionParam(condition, CONDITION_PARAM_TICKS, 20000) setConditionFormula(condition, -0.9, 0, -0.9, 0) setCombatCondition(combat, condition) doSendMagicEffect(getThingPosition(cid), CONST_ME_GREEN_RINGS) doAddCondition(cid, condition) return true end function onStepOut(cid, item, position, fromPosition) doRemoveCondition(cid, 32) return true end E em movement.xml adicione as duas linhas:
<movevent type="StepIn" actionid="3600" event="script" value="pantano.lua"/> <movevent type="StepOut" actionid="3600" event="script" value="pantano.lua"/> Pronto, agora onde você colocar a actionid você vai levar um paralize ao andar, como se fosse um pântano pegajoso
EDIT: Porém, se quiser esse efeito em todo o pântano andável sem ter que colocar action em todos os tiles é só ignorar a tag de cima e fazer assim:
<movevent type="StepIn" itemid="6353" event="script" value="pantano.lua"/> <movevent type="StepOut" itemid="6353" event="script" value="pantano.lua"/> Acima, todo item com ID 6353, o efeito será aplicado..., se quiser mudar , pode mudar ao item que você quiser
É essa merda aí, qualquer incremento que quiser pode requisitar abaixo no tópico.
-
Guilherme Kaercher deu reputação a Slec em Den of Sin. [Slec]Den of sin.
Quote
Quote
Screenshots:
Kind regards,
Slec.
-
Guilherme Kaercher deu reputação a ZORAN em [Tutorial] Compilando TFS v1.0 com MSVC 2013Olá amigos da Comunidade Tibiaking venho trazer a vocês este tutorial de como compilar o TFS v1.0 em windows 32 or 64 bits com Microsoft Visual Studio 2013 (Obs: Eu uso a 2013 Ultimater Recomendo). Vamos ao tutorial >> 1) Primeito baixe os programas abaixo se não tiver claro: MSVS 2013 >> Click Here http://www.visualstudio.com/downloads/download-visual-studio-vs Agora baixar os Programas do TFS v1.0: TFS Sdk >> Click Here - Link 2: (Mirror)
Source Do TFS v1.0 >> Click Here
Atenção Baixe apenas a Boost da versão do Pc 32 or 64 Bits. Boost MSVS 2013 32Bits >> Click Here
Boost MSVS 2013 64Bits >> Click Here
2) Agora vamos começar a instalar os Programs do TFS v1.0 >> Primeiro instale o Boost 32 or 64Bits No diretorio raiz do seu HD: Print >>
Agora coloque o SDK Extraido na raiz do Seu HD: Print >> Faça a mesma coisa com a source do TFS v1.0: Print>> Depois de ter feito tudo isso abra a pasta da source e abra a pasta vc12 e siga a print: ( Obs: Você vera Boost32 isso acontece porque na instalação eu coloquei no diretório como Boost32 (Primeira foto) mas basta você deixar como C:\Boost ( A letra C:\ Refere-se a letrado do seu HD ela pode ser D - H - F e Etc... Varia de Pc a Pc.) ) Print >> Com o Visual Studio (2013 Recomendado) aberto Siga as Prints abaixo: Click com botão direito no projeto e vá em propriedades: Print >> Depois Click em Cofiguration manager: Print >> Vamos as explicações: 1 >> Click la Primeiro Quando abrir a caixa com os passos 2-3 and 4 siga-os abaixo >> 2>> Coloque release e só nada mais. 3>> escolha para qual sistema de 32 or 64Bits. (Lembrado que ali e de acordo com a Boost oks. ) 4>> Só Click lá quando terminar de fazer os passos acima. Rsrs.] ------------------------------------|||||------------------------------- 3) Terceira parte Passos 1 do tutorial vamos lá >> Primeiro agora depois de fazer os passos anteriores faça os seguintes passos Click em C/C++ >>> General e siga a Print: Print>> Caso você não entendeu siga as explicações: Vamos as explicações: 1>> Onde você Deve clicar C/C++ >> General. 2>> Click onde a seta esta apontado e click em edit ou de dois clicks. 3>> Quando abrir a caixa de dialogo deixe os diretórios iguais ao da foto e de um Ok. ( Obs: Você vera Boost32 isso acontece porque na instalação eu coloquei no diretório como Boost32 (Primeira foto) mas basta você deixar como C:\Boost ) Terceira parte passo 2 Click em Linker >> General e siga as Prints >> Prints >> Vamos as explicações: 1>> Onde você deve Clicar depois de fazer os passos anteriores da terceira parte passos 1. Oks. 2>> igual ao passo 2 da parte 1 da terceira parte só que mais explicativo. 3>> Click em Edit e espere abrir a caixa de Dialogo siga a Print 2. Print 2>> Deixe igual a caixa de dialogo onde esta marcado com o 1 Grande Oks. Depois basta da um OK e um Apply e Ok e esperar aparecer Ready >>
Print>> Explicações: 1>> Esperar o Ready. 2>> Click com o botão direito no projeto e depois em BuilD. Basta Esperar terminar a compilação e Pronto. Caso o tutorial não tenha sido bem explicativo Posso melhorá-lo a sugestão e depois posto a foto final da compilação Oks. Se quiser me agradecer eu serei grato pois deu trabalho fazer esse tutorial pois bugo algumas vezes. Um grande abraço e fiquem com Deus! Nota: Eu Tenho permissão do autor do tutorial Original em Inglês para criar o post em PT-Br Não e permitido copiar ou reproduzir sem a devida autorização de Dominique120. Não e permitido postar o Faq do mesmo aqui neste tutorial para ver mais informações siga o LINK ou Veja os #créditos. #Creditos: -------------------///------------------ Dominique120 >> Click aqui para ver o tutorial original -------------------///-------------------- ZORAN >> Click aqui para ver o meu perfil -
Guilherme Kaercher recebeu reputação de Hoad em [SPELL] Exori frigo que dá slow (lentidão)Opa pessoal,
Sou novo aqui e estou trazendo pra vocês uma spell que eu estava procurando e não achei em lugar nenhum. A spell é um "ice strike"(exori frigo) que dá lentidão. É uma ótima idéia para quem quer brincar com os efeitos dos elementos (congelar, queimar e etc...). Não sei como botar aquele botãozinho do spoiler, se alguém quiser me ensinar... =).
No Spells.xml:
<instant name="Slowing Ice Strike" words="exori frigo" lvl="16" mana="20" prem="0" range="3" casterTargetOrDirection="1" blockwalls="1" exhaustion="1000" groups="1,2000" icon="87" needlearn="0" event="script" value="attack/slowing ice strike.lua"> <!--ajuste suas vocations ID aqui embaixo--> <vocation id="5"/> <vocation id="6"/> <vocation id="7"/> </instant>
Na pasta "data\spells\scripts\attack":
crie um arquivo com o nome slowing ice strike.lua e coloque o seguinte código:
local combat = createCombatObject() setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_ICEDAMAGE) setCombatParam(combat, COMBAT_PARAM_DISTANCEEFFECT, CONST_ANI_SMALLICE) function onGetFormulaValues(cid, level, maglevel) local min = level / 5 + maglevel * 5.5 + 32 local max = level / 5 + maglevel * 7.7 + 48 return -min, -max end local speed = createConditionObject(CONDITION_PARALYZE) setConditionParam(speed, CONDITION_PARAM_TICKS, 5000) setConditionFormula(speed, -0.7, 56, -0.7, 56) setCombatCondition(combat, speed) setCombatCallback(combat, CALLBACK_PARAM_LEVELMAGICVALUE, "onGetFormulaValues") function onCastSpell(cid, var) return doCombat(cid, combat, var) end Se gostarem da REP+!
-
Guilherme Kaercher recebeu reputação de lucasmuniz67 em [Resolvido] Coloca Para mostra a quantidade de mana e sague que enche[AJUDA]Opa, blzinha? :3
Seguinte brother, para vida e mana, muda para true estas linhas (no seu config.lua):
showHealthChange = true showManaChange = true e para as spells muda a linha abaixo (no config.lua tambem) :
emoteSpells = true Se ajudei da REP+. Abrs.
-
Guilherme Kaercher recebeu reputação de Jamison Collins em [SPELL] Exori frigo que dá slow (lentidão)Opa pessoal,
Sou novo aqui e estou trazendo pra vocês uma spell que eu estava procurando e não achei em lugar nenhum. A spell é um "ice strike"(exori frigo) que dá lentidão. É uma ótima idéia para quem quer brincar com os efeitos dos elementos (congelar, queimar e etc...). Não sei como botar aquele botãozinho do spoiler, se alguém quiser me ensinar... =).
No Spells.xml:
<instant name="Slowing Ice Strike" words="exori frigo" lvl="16" mana="20" prem="0" range="3" casterTargetOrDirection="1" blockwalls="1" exhaustion="1000" groups="1,2000" icon="87" needlearn="0" event="script" value="attack/slowing ice strike.lua"> <!--ajuste suas vocations ID aqui embaixo--> <vocation id="5"/> <vocation id="6"/> <vocation id="7"/> </instant>
Na pasta "data\spells\scripts\attack":
crie um arquivo com o nome slowing ice strike.lua e coloque o seguinte código:
local combat = createCombatObject() setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_ICEDAMAGE) setCombatParam(combat, COMBAT_PARAM_DISTANCEEFFECT, CONST_ANI_SMALLICE) function onGetFormulaValues(cid, level, maglevel) local min = level / 5 + maglevel * 5.5 + 32 local max = level / 5 + maglevel * 7.7 + 48 return -min, -max end local speed = createConditionObject(CONDITION_PARALYZE) setConditionParam(speed, CONDITION_PARAM_TICKS, 5000) setConditionFormula(speed, -0.7, 56, -0.7, 56) setCombatCondition(combat, speed) setCombatCallback(combat, CALLBACK_PARAM_LEVELMAGICVALUE, "onGetFormulaValues") function onCastSpell(cid, var) return doCombat(cid, combat, var) end Se gostarem da REP+!
-
Guilherme Kaercher deu reputação a GiovaniRodrigo em [ACTION] Change VocaçãoOlá King Tibianos,
A pedido da usuária TathiiCarvalho criei um script que troca de vocação, mas ele apenas não troca de vocação como também adiciona health e mana de acordo com o level e reseta skills.
Eu já havia feito o script de trocar de vocação, mas quando um Sorcerer ou Druid com ML 80 trocava para vocação Knight ele ficava com ML 80. Imagina um Knight ML 80, não da né.
Tinha outro problema, um Sorcerer ou Druid Level 150 com HP 895 e MP 4225, ele muda para vocação Knight e fica com o mesmo HP e MP, como seria um Knight Level 150 com HP 895 e MP 4225? Também não da né.
Então modifiquei o script para fixar esses "erros".
Crie um arquivo chamado changevoc.lua na pasta data/actions/scripts e cole isso
function onUse(cid, item, frompos, item2, topos) level = getPlayerLevel(cid)-8 pid = getPlayerGUID(cid) magehealth = level*5 -- Quantidade de vida que o Sorcerer e Druid ganha a cada level(mude apenas os numeros) magemana = level*30 -- Quantidade de mana que o Sorcerer e Druid ganha a cada level(mude apenas os numeros) paladinhealth = level*10 -- Quantidade de vida que o Paladin ganha a cada level(mude apenas os numeros) paladinmana = level*15 -- Quantidade de mana que o Paladin ganha a cada level(mude apenas os numeros) knighthealth = level*15 -- Quantidade de vida que o Knight ganha a cada level(mude apenas os numeros) knightmana = level*5 -- Quantidade de mana que o Knight ganha a cada level(mude apenas os numeros) if item.uid == 30000 then doSendMagicEffect(topos, 14) doPlayerPopupFYI(cid, 'You changed his vocation to sorcerer.') doPlayerSetVocation(cid, 1) setCreatureMaxHealth(cid, magehealth) setCreatureMaxMana(cid, magemana) doRemoveCreature(cid) db.executeQuery("UPDATE `player_skills` SET `value` = ".. 10 ..", count = ".. 0 .." WHERE `player_id` = ".. pid ..";") db.executeQuery("UPDATE `players` SET `maglevel` = ".. 0 ..", `manaspent` = ".. 0 .." WHERE `id` = ".. pid ..";") end if item.uid == 30001 then doPlayerSetVocation(cid, 2) setCreatureMaxHealth(cid, magehealth) setCreatureMaxMana(cid, magemana) doSendMagicEffect(topos, 14) doPlayerPopupFYI(cid, 'You changed his vocation to druid.') doRemoveCreature(cid) db.executeQuery("UPDATE `player_skills` SET `value` = ".. 10 ..", count = ".. 0 .." WHERE `player_id` = ".. pid ..";") db.executeQuery("UPDATE `players` SET `maglevel` = ".. 0 ..", `manaspent` = ".. 0 .." WHERE `id` = ".. pid ..";") end if item.uid == 30002 then doPlayerSetVocation(cid, 3) setCreatureMaxHealth(cid, paladinhealth) setCreatureMaxMana(cid, paladinmana) doSendMagicEffect(topos, 14) doPlayerPopupFYI(cid, 'You changed his vocation to paladin.') doRemoveCreature(cid) db.executeQuery("UPDATE `player_skills` SET `value` = ".. 10 ..", count = ".. 0 .." WHERE `player_id` = ".. pid ..";") db.executeQuery("UPDATE `players` SET `maglevel` = ".. 0 ..", `manaspent` = ".. 0 .." WHERE `id` = ".. pid ..";") end if item.uid == 30003 then doPlayerSetVocation(cid, 4) setCreatureMaxHealth(cid, knighthealth) setCreatureMaxMana(cid, knightmana) doSendMagicEffect(topos, 14) doPlayerPopupFYI(cid, 'You changed his vocation to knight.') doRemoveCreature(cid) db.executeQuery("UPDATE `player_skills` SET `value` = ".. 10 ..", count = ".. 0 .." WHERE `player_id` = ".. pid ..";") db.executeQuery("UPDATE `players` SET `maglevel` = ".. 0 ..", `manaspent` = ".. 0 .." WHERE `id` = ".. pid ..";") end end
Adicione as seguintes linhas no arquivo actions.xml que se encontra na pasta data/actions
<action uniqueid="30000" event="script" value="changevoc.lua" /> <action uniqueid="30001" event="script" value="changevoc.lua" /> <action uniqueid="30002" event="script" value="changevoc.lua" /> <action uniqueid="30003" event="script" value="changevoc.lua" />
Testado e está 100% funcional.
Dúvidas? Me avise.
Att.
Giovani Rodrigo
-
Guilherme Kaercher deu reputação a Renato em Mapping InspirationsOlá galera.
Bom, pra quem me conhece a bastante tempo sabe que eu já fui mapper. Eu comecei minha jornada no Open Tibia justamente como mapping, e não como programador (como muitos pensam).
Eu sempre tive esse fascínio por criação. Não é a toa que também sou web designer.
Mas hoje em dia para mim mappear não há mais tempo, ainda tão novo e tenho meus compromissos com o trabalho, sobra pouco tempo, e o tempo que resta eu dedico à programação, que é a carreira que eu pretendo seguir.
Pois bem, decidi criar este tópico com as melhores (ao meu ver) imagens de mapping, juntos com o autor é claro, que servirá como inspiração para as novas gerações do mapping que virão (:
Que ponte magnífica, mas vejo estragos, será que é segura?
Autor: Peroxide
Onde estou? é tudo tão diferente, tão... aterrorizador.
Autor: Neon
Que tal uma pontezinha para evitar possíveis quedas? Não queremos ver ninguém se machucar!
Autor: HesteN
Um pouco de natureza, ahh, que ar bom de se respirar em frente à esta linda cachoeira!
Autor: Peroxide
Pena que em lugares tão bonitos, árvores exuberantes, existam caçadores, pior para eles.
Autor: Peroxide
Sente um calafrio na espinha?
Autor: Illusion
Vejo sábios elfos à me guiar.
Autor: Peroxide
Uma casa na montanha, rodeada por natureza.
Autor:
--
Logo logo tem mais, só ficar ligado aqui.
-
Guilherme Kaercher deu reputação a evanz em Evoluindo um mapa a mais de 3 anosEste é um antigo trabalho que estava mechendo, nao sei ainda o que farei com ele [mas pelo menos uma versão mais antiga da ilha de gelo eu vou postar para download], tem muito tempo que estou mapeando, está bastante grande, o plano é fazer o mapa com melhor jogabilidade RPG possivel, como estou com tempo livre resolvi terminar, vou postar algumas imagens de como ele está, algumas eu achei que ficaram bacanas, outras preciso dar uma atualiazada, vou postando como ele vai evoluindo,
o nome do antigo projeto era Horde, então vamos chamar o mapa de Horde!
dicas e sugestões são muito bem vindas!
minimapa [ignorem os nomes, alguns serão alterados, outros não rsrs]
este é a entrada da cidade com tema swamp, está antiga, eu acho que vou mecher um pouco nela, mas estou mapenado por "area" [ilhas] e estou concluindo a ilha com tem de Jungle agora
este seria um grande vulcão, alem de ser o lugar de hunt para leveis altos, tbm é um excelente lugar para quests [ainda estou bolando a ideia de qual, aceito sugestões]:
entrada da cidade principal:
behemoths, como podem ver algumas partes são de mapas conhecidos, mas eu dei uma "repaginada" para ficar mais agradável,
demons
esta é a cidade com tema gelo, em breve posarei mais imagens dela, eu dei uma completa repaginada, eu peguei a ilha original de um antigo mapa que eu tinha feito [mystic storm] e mudei quase completamente,
eu nao entendo NADICA de nada de webmaster/webdesigner, mas fuçando e mechedno, um pouco no ps, um pouco em outros programas, pegando uma versão de um site pronto do tibia, basicamente resolvi alguns bugs e mudei o layout, eu gostei do resultado, apesar de continuar parecendo com o global, espero que se um dia ficar online, o site seja como este:
primeiro, quero agradecer pelo espaço, segundo agradecer novamente pela excelente comunidade, tenho lido os topicos e tenho visto a administração bastante prestativa e ja aprendi mto nesse pouquissimo tempo deste forum,
terceiro, quero pedir críticas e sugestões, nesse momento estou mapenado o continente com tema "jungle" que assim como no tibia global será dividido em uma parte jungle e outra deserto, tem hora que as ideias fogem, apesra que está ficando melhor que o esperado [pra mim pelo menos rsrs] no decorrer da semana vou postar fotos do que fiz nas ultimas duas semanas!
Obrigado!
-
Guilherme Kaercher deu reputação a KekezitoLHP em [SISTEMA] Colisão de MagiasNome: Sistema de Colisão de Magias V. 1.0 Autor: Ramza (Ricardo Ianelli) Versão Testada: TFS 0.3.6PL1 (8.54) "PODERÁ FUNCIONA EM VERSÃO 8.54+ FAÇA O TESTE" Introdução
video:
Funcionamento
Do ponto de vista do jogador:
O jogador usa uma magia, digamos, exori frigo. No mesmo momento, o inimigo usa um exori vis por exemplo. As magias voam, e se colidem no ar. Do ponto de vista do scripter: Toda magia antes de ser lançada, salva um storage value, e checa se o inimigo tem o mesmo storage. Caso tenha, ao invés de mandar a magia, manda os efeitos pra uma posição calculada entre os dois pontos, e um efeito de colisão. Caso o criador queira melhorar ainda a função (pra ficar como na versão 2.0 do sistema), pode-se fazer uma checagem de força pra saber qual das duas 'vence', fazendo com que ela atinja o oponente. Para melhores resultados, magias usando addEvent são mais usadas, por isso usarei um exemplo dessa forma aqui no tutorial. Instalação
Na pasta Data, crie um arquivo chamado colisionLIB.lua. Dentro dele, cole isto:
function checkColision(cid) -- Function by Ramza (Ricardo Ianelli) if getCreatureTarget(cid) ~= 0 then setPlayerStorageValue(cid, 9001, 'casting') local ppos, enemy = getCreaturePosition(cid), getCreatureTarget(cid) local epos = getCreaturePosition(enemy) if getPlayerStorageValue(enemy, 9001) == 'casting' and getCreatureTarget(enemy) == cid then setPlayerStorageValue(enemy, 9001, 'colision') setPlayerStorageValue(cid, 9001, 'colision') if ppos.x > epos.x and ppos.y > epos.y then cpos = {x = ppos.x - ((ppos.x - epos.x) / 2), y = ppos.y - ((ppos.y - epos.y) / 2), z = ppos.z} elseif ppos.x > epos.x and ppos.y < epos.y then cpos = {x = ppos.x - ((ppos.x - epos.x) / 2), y = epos.y - ((epos.y - ppos.y) / 2), z = ppos.z} elseif ppos.x < epos.x and ppos.y < epos.y then cpos = {x = epos.x - ((epos.x - ppos.x) / 2), y = epos.y - ((epos.y - ppos.y) / 2), z = ppos.z} elseif ppos.x < epos.x and ppos.y > epos.y then cpos = {x = epos.x - ((epos.x - ppos.x) / 2), y = ppos.y - ((ppos.y - epos.y) / 2), z = ppos.z} end doSendDistanceShoot(ppos, cpos, CONST_ANI_ENERGY) doSendDistanceShoot(epos, cpos, CONST_ANI_ENERGYBALL) local value = math.random(1, 3) doSendMagicEffect(cpos, 27+value) return true else return false end end end
Agora vamos pegar uma magia bem básica como exemplo para teste. Vamos usar a magia energy strike. Abra o arquivo da magia, estará mais ou menos assim:
local combat = createCombatObject() setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_ENERGYDAMAGE) setCombatParam(combat, COMBAT_PARAM_EFFECT, CONST_ME_ENERGYAREA) setCombatParam(combat, COMBAT_PARAM_DISTANCEEFFECT, CONST_ANI_ENERGY) setCombatFormula(combat, COMBAT_FORMULA_LEVELMAGIC, -1, -10, -1, -20, 5, 5, 1.4, 2.1) function onCastSpell(cid, var) return doCombat(cid, combat, var) end Vamos modificar um pouco para o nosso sistema. Deixe-a assim:
local combat = createCombatObject() setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_ENERGYDAMAGE) setCombatParam(combat, COMBAT_PARAM_EFFECT, CONST_ME_ENERGYAREA) setCombatParam(combat, COMBAT_PARAM_DISTANCEEFFECT, CONST_ANI_ENERGY) setCombatFormula(combat, COMBAT_FORMULA_LEVELMAGIC, -1, -10, -1, -20, 5, 5, 1.4, 2.1) local function spell(cid, var) if getPlayerStorageValue(cid, 9001) ~= 'colision' then doCreatureSay(cid, 'Strike!', TALKTYPE_ORANGE_1) setPlayerStorageValue(cid, 9001, nil) return doCombat(cid, combat, var) end end function onCastSpell(cid, var) checkColision(cid) doCreatureSay(cid, 'Energy...', TALKTYPE_ORANGE_1) addEvent(spell, 2000, cid, var) end
Agora adiciona essa função em todas as magias que você deseja a colisão.
function onCastSpell(cid, var) checkColision(cid) doCreatureSay(cid, 'Energy...', TALKTYPE_ORANGE_1) addEvent(spell, 2000, cid, var) end Hora de testar, a hora mais difícil! Bem, pra testar esse sistema você precisa de um amigo pra te ajudar, ou de ferramentas ilegais e agilidade. Vamos tomar como exemplo caso você fosse com um amigo testar. Simplesmente usem exori vis um no outro, e vejam o que acontece
Comentários
Quem já é mais experiente já deve ter sacado o tanto de possibilidades que isso abre, como fazer com magias mais avançadas, comparar magic level, fazer com que caso o ML de um seja maior que o do outro, ela anule a do inimigo mas a sua ainda acerte, fazer sistemas no estilo 'disputa de kame-hame-has' usando spriters sem ser as do tibia, e muitas outras coisas, só vai depender de você usar a sua CRIATIVIDADE. Esse sistema, apesar de simples, é considerado pra mim um dos meus sistemas mais avançados, pois como dizia o sábio programador: "O verdadeiro gênio não é aquele que usa pilhas, ponteiros, matrizes ou funções complexas, e sim aquele que usa a criatividade." Muita gente ofereceu grana preta nesse sistema já, mas eu postei aqui pra lembrar à todos vocês que o que faz um grande programador não é o quão complexas são as funções que você usa e os codes que você faz, e sim, o quão criativas einovadoras são suas criações.
É isso ai galera, deixo meu abraço pra todos vocês, qualquer dúvida é só me perguntar, e eu quero que vocês lembrem que o melhor code é sempre, de longe, aquele mais criativo, não importa se tenha 3, 100 ou 10.000 linhas. Lembrem-se disso, sempre.
-
Guilherme Kaercher deu reputação a Duda Lima em [MOD] Partner SystemPartner System!
#Descrição: Sistema totalmente inovador e que possui um incrível ponto positivo que, sem sombra de dúvida, é lembrado pelo player ao escolher um servidor para jogar: a cada novo player convidado por um outro player, cujo número é limitado, este ganhará uma certa quantia de experiência definida pelo dono do servidor a cada monstro que o player convidado matar. Portanto, os players irão convidar o maior número possível de amigos. Quando os players convidados atingirem certo level serão retirados da lista de convidados.
#O que possui?
-Script feito em Mods apenas um arquivos, super fácil instalação.
-Area de configuração, te permite editar todas as variáveis do script..
créditos: Duda Lima
ChaitoSoft
Te ajudei +REP!
-
Guilherme Kaercher deu reputação a Sociopata em Retirando Bug Do Rme 8.60Retirando Bug do RME 8.60
Primeiramente, abra seu Remeres MapEditor 8.60. Siga estes passos:
File>Preferences>Client Version> Desmarque a caixa "Check file signatures"> Marque Apply e depois>Ok.
Muito bem, agora iremos enteder um pouco este erro: Ele diz que não consegue encontrar os arquivos necessários e quando você clica para encontrar, dá o mesmo erro. Vejamos, então devemos instalar o Client Tibia pelo site do Remeres!
Então, faremos isso. Segue o link de download do Client:
http://www.remeresma...com/marklar.php
Muito bem, após baixar, instalar. Crie uma pasta em seu Desktop chamada "Mapeditor"> Agora vá na pasta do seu Tibia (normalmente se localiza em: Disco Local>Arquivos de Programas>Tibia), agora copie os arquivos "tibia.dat", "tibia.spr" e "tibia.pic".Vá na pasta "Mapeditor" no Desktop e cole-os lá mesmo. Agora abra seu MapEditor RME 8.6! Pronto, use á vontade. (Para quem não deu certo, aperte "Ok" no erro e aparecerá uma caixa para procurar os arquivos, selecione Desktop>E em seguida a pasta Mapeditor. Irá carregá-los e pronto!)
SE ISSO NÃO FUNCIONAR BAIXE O RME NO SITE OFICIAL SEGUE LINK ACIMA E O CLIENT DE TIBIA DE LA TBM EM 70% DOS CASOS DA CERTO
http://remeresmapeditor.com/marklar.php?clients
Muito obrigado pessoal, espero que dê certo.
Creditos
Roksas
Sociopata
-
Guilherme Kaercher recebeu reputação de manolodede em [Resolvido] Coloca Para mostra a quantidade de mana e sague que enche[AJUDA]Opa, blzinha? :3
Seguinte brother, para vida e mana, muda para true estas linhas (no seu config.lua):
showHealthChange = true showManaChange = true e para as spells muda a linha abaixo (no config.lua tambem) :
emoteSpells = true Se ajudei da REP+. Abrs.
-
Guilherme Kaercher recebeu reputação de MaXwEllDeN em [Resolvido] Coloca Para mostra a quantidade de mana e sague que enche[AJUDA]Opa, blzinha? :3
Seguinte brother, para vida e mana, muda para true estas linhas (no seu config.lua):
showHealthChange = true showManaChange = true e para as spells muda a linha abaixo (no config.lua tambem) :
emoteSpells = true Se ajudei da REP+. Abrs.
-
Guilherme Kaercher deu reputação a Artur Henrique em Paladins atacando e usando potions!Se não estiver na area correta, peço para que algum moderador mude.
Bem gente, eu estava com um problema que era tipo, os paladins não atacavam ao usar potions e runes.. Após uma longa busca de como concertar isso, eu encontrei em outro forum e decidi trazer aqui afinal sei que muita gente tem problemas com isso, é algo bem simples olha:
Abra Weapons.xml, e adicione essa tag em todas as Ammunitions de RP
swing="true"
Vai ficar tipo:
Antes:
<distance id="7367" level="42" event="function" value="default"/>
Depois:
<distance id="7367" level="42" swing="true" event="function" value="default"/>
Bem gente é isso, espero ter ajudado.. vlws ai
-
Guilherme Kaercher recebeu reputação de Cat em [SPELL] Exori frigo que dá slow (lentidão)Opa pessoal,
Sou novo aqui e estou trazendo pra vocês uma spell que eu estava procurando e não achei em lugar nenhum. A spell é um "ice strike"(exori frigo) que dá lentidão. É uma ótima idéia para quem quer brincar com os efeitos dos elementos (congelar, queimar e etc...). Não sei como botar aquele botãozinho do spoiler, se alguém quiser me ensinar... =).
No Spells.xml:
<instant name="Slowing Ice Strike" words="exori frigo" lvl="16" mana="20" prem="0" range="3" casterTargetOrDirection="1" blockwalls="1" exhaustion="1000" groups="1,2000" icon="87" needlearn="0" event="script" value="attack/slowing ice strike.lua"> <!--ajuste suas vocations ID aqui embaixo--> <vocation id="5"/> <vocation id="6"/> <vocation id="7"/> </instant>
Na pasta "data\spells\scripts\attack":
crie um arquivo com o nome slowing ice strike.lua e coloque o seguinte código:
local combat = createCombatObject() setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_ICEDAMAGE) setCombatParam(combat, COMBAT_PARAM_DISTANCEEFFECT, CONST_ANI_SMALLICE) function onGetFormulaValues(cid, level, maglevel) local min = level / 5 + maglevel * 5.5 + 32 local max = level / 5 + maglevel * 7.7 + 48 return -min, -max end local speed = createConditionObject(CONDITION_PARALYZE) setConditionParam(speed, CONDITION_PARAM_TICKS, 5000) setConditionFormula(speed, -0.7, 56, -0.7, 56) setCombatCondition(combat, speed) setCombatCallback(combat, CALLBACK_PARAM_LEVELMAGICVALUE, "onGetFormulaValues") function onCastSpell(cid, var) return doCombat(cid, combat, var) end Se gostarem da REP+!
-
Guilherme Kaercher deu reputação a Garou em Um novo modo de criar magias?UM NOVO MODO DE CRIAR MAGIAS?
Tudo bem com vocês, grandes tibianos desse reino?
Quando eu criava magias, eu sempre notei a quantidade de linhas que uma boa e trabalhada magia adquire ao se finalizar o script.
Por um tempinho, estudei como funcionava toda a estrutura e pensei em como criar um único bloco de código para configurar a magia uma vez só. Os spellmakers de plantão comprovam: Se uma magia com vários efeitos e tipos de dano é criada, você precisa criar muitas variáveis locais.
Então, resolvi criar uma tabela que tratava essas variáveis locais como indexes e seus atributos como conteúdo de tabelas secundárias. Nascia esse novo modo de programar magias, que parece um tanto versátil e ao mesmo tempo, reduz o tamanho de uma magia.
O SCRIPT
O script é bem simples, uma tabela bem básica que qualquer criança configura e se diverte e blocos de códigos que, olha que legal, você não precisa mexer.
Veja abaixo o novo modelo:
local spell = { { damage = COMBAT_ICEDAMAGE, effect = {CONST_ME_ICEATTACK}, formula = {0.2, 3, 0.2, 4.2, 200, 300}, area = createCombatArea({ {0, 0, 0, 0, 0}, {0, 0, 1, 0, 0}, {0, 1, 2, 1, 0}, {0, 0, 1, 0, 0}, {0, 0, 0, 0, 0}}) } } local returnSpell = {} for var, config in ipairs(spell) do returnSpell[var] = createCombatObject() setCombatParam(returnSpell[var], COMBAT_PARAM_TYPE, config.damage) setCombatParam(returnSpell[var], COMBAT_PARAM_EFFECT, (type(config.effect) == "table" and config.effect[1] or config.effect)) if type(config.effect) == "table" and config.effect[2] ~= nil then setCombatParam(returnSpell[var], COMBAT_PARAM_DISTANCEEFFECT, config.effect[2]) end if config.area then setCombatArea(returnSpell[var], config.area) end function getSpellDamage(cid, level, maglevel) local min = ((level*config.formula[1] + maglevel*config.formula[2]) + config.formula[5]) local max = ((level*config.formula[3] + maglevel*config.formula[4]) + config.formula[6]) return -min, -max end setCombatCallback(returnSpell[var], CALLBACK_PARAM_LEVELMAGICVALUE, "getSpellDamage") end function onCallCombat(parameters) return doCombat(unpack(parameters)) end function onCastSpell(cid, var) if #returnSpell > 1 then for i = 1, #returnSpell do addEvent(onCallCombat, (i*280)+32, {cid, returnSpell[i], var}) end else doCombat(cid, ret[1], var) end return true end Parece que eu compliquei tudo, né? Pois bem, finja que você não vê nada aí, apenas essa tabela abaixo: local spell = { { damage = COMBAT_ICEDAMAGE, effect = {CONST_ME_ICEATTACK}, formula = {0.2, 3, 0.2, 4.2, 200, 300}, area = createCombatArea({ {0, 0, 0, 0, 0}, {0, 0, 1, 0, 0}, {0, 1, 2, 1, 0}, {0, 0, 1, 0, 0}, {0, 0, 0, 0, 0}}) } } Aqui que você irá configurar sua magia, como ela vai funcionar, que área que ela irá atingir e etcétera. Vou comentar cada linha da tabela para que você entenda: local spell = { { damage = COMBAT_ICEDAMAGE, effect = {CONST_ME_ICEATTACK}, formula = {0.2, 3, 0.2, 4.2, 200, 300}, area = createCombatArea({ {0, 0, 0, 0, 0}, {0, 0, 1, 0, 0}, {0, 1, 2, 1, 0}, {0, 0, 1, 0, 0}, {0, 0, 0, 0, 0}}) } } Sobre a fórmula, você não precisa mais ter dor de cabeça como você vai diminuir o dano da sua magia e etcétera. Veja o quê cada número significa abaixo: formula = {MIN_LEVEL, MIN_MAGLEVEL, MAX_LEVEL, MAX_MAGLEVEL, MIN_OFFSET, MAX_OFFSET} min = (level*MIN_LEVEL + maglevel * MIN_MAGLEVEL) + MIN_OFFSET max = (level*MAX_LEVEL + maglevel * MAX_MAGLEVEL) + MAX_OFFSET E sobre a área, você pode usar áreas pré-configuras naquele arquivo spells.lua dentro de spells/lib, assim você diminuirá ainda mais o código. area = createCombatArea(AREA_BEAM4) Se a magia for do tipo "strike", você pode configurar o efeito de distância assim: effect = {CONST_ME_ICEATTACK, CONST_ANI_ICE} Para criar uma magia com múltiplos danos, basta duplicar, triplicar, conforme sua necessidade a sub-tabela dentro da tabela principal - atenção - não esqueça de separar as várias subtabelas com uma vírgula, por exemplo: local spell = { { damage = COMBAT_ICEDAMAGE, -- O tipo de dano effect = {CONST_ME_ICEATTACK}, -- Os efeitos da magia formula = {0.2, 3, 0.2, 4.2, 200, 300}, -- A formula de dano da magia area = createCombatArea({ -- Area da magia {0, 0, 0, 0, 0}, {0, 0, 1, 0, 0}, {0, 1, 2, 1, 0}, {0, 0, 1, 0, 0}, {0, 0, 0, 0, 0}}) }, -- virgula { damage = COMBAT_ICEDAMAGE, -- O tipo de dano effect = {CONST_ME_ICEATTACK}, -- Os efeitos da magia formula = {0.2, 3, 0.2, 4.2, 200, 300}, -- A formula de dano da magia area = createCombatArea({ -- Area da magia {0, 0, 0, 0, 0}, {0, 0, 1, 0, 0}, {0, 1, 2, 1, 0}, {0, 0, 1, 0, 0}, {0, 0, 0, 0, 0}}) } } [/code]
[size=3][font=tahoma,geneva,sans-serif]Essa é uma magia com dois hits de gelo, se você entendeu todo o tópico [/font][/size]
[size=3][font=tahoma,geneva,sans-serif][hr][/font][/size]
[size=4][b][font=tahoma,geneva,sans-serif]CONCLUSÃO[/font][/b][/size]
[size=3][font=tahoma,geneva,sans-serif][hr][/font][/size]
[size=3][font=tahoma,geneva,sans-serif]Eu reconheço que esse novo modelo parece um pouco inútil e estranho, mas ele foi criado com intuíto de otimizar magias com múltiplos efeitos e tipos de dano.[/font][/size]
[size=3][font=tahoma,geneva,sans-serif]Até o próximo tópico, abraços.[/font][/size]
[size=3][font=tahoma,geneva,sans-serif][hr][/font][/size]