Magias Mistas

Xiaoxu
Por Xiaoxu
em Tutoriais de Scripting

Xiaoxu

avatar
Campones
Campones

INFOS

Grupo: CamponesRegistrado: 16/11/05Posts: 13

Olá a todos! Estou aqui para tentar mostrar como se faz uma magia "mista", com vários efeitos e etc...

 

Para começar abra a pasta spells\scripts e crie um novo arquivo .lua(ou copie um e apague tudo de dentro).

Vamos dar uma olhada nessa spell já pronta.

 

local combat1 = createCombatObject()
setCombatParam(combat1, COMBAT_PARAM_TYPE, COMBAT_PHYSICALDAMAGE)
setCombatParam(combat1, COMBAT_PARAM_EFFECT, CONST_ME_EXPLOSIONAREA)
setCombatFormula(combat1, COMBAT_FORMULA_LEVELMAGIC, 2.0, -150, 1.6, -150)

local combat2 = createCombatObject()
setCombatParam(combat2, COMBAT_PARAM_TYPE, COMBAT_PHYSICALDAMAGE)
setCombatParam(combat2, COMBAT_PARAM_EFFECT, CONST_ME_ENERGYAREA)
setCombatFormula(combat2, COMBAT_FORMULA_LEVELMAGIC, 2.0, -150, 1.6, -150)

local combat3 = createCombatObject()
setCombatParam(combat3, COMBAT_PARAM_TYPE, COMBAT_PHYSICALDAMAGE)
setCombatParam(combat3, COMBAT_PARAM_EFFECT, CONST_ME_MORTAREA)
setCombatFormula(combat3, COMBAT_FORMULA_LEVELMAGIC, 2.0, -150, 1.6, -150)

local combat4 = createCombatObject()
setCombatParam(combat4, COMBAT_PARAM_TYPE, COMBAT_PHYSICALDAMAGE)
setCombatParam(combat4, COMBAT_PARAM_EFFECT, CONST_ME_POISONAREA)
setCombatFormula(combat4, COMBAT_FORMULA_LEVELMAGIC, 2.0, -150, 1.6, -150)

local combat5 = createCombatObject()
setCombatParam(combat5, COMBAT_PARAM_TYPE, COMBAT_PHYSICALDAMAGE)
setCombatParam(combat5, COMBAT_PARAM_EFFECT, CONST_ME_WHIRLWIND)
setCombatFormula(combat5, COMBAT_FORMULA_LEVELMAGIC, 2.0, -150, 1.6, -150)

arr1 = {
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0},
{0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0},
{0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0},
{0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
}

arr2 = {
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0},
{0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0},
{0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0},
{0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
}

arr3 = {
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0},
{0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0},
{0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0},
{0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
}

arr4 = {
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0},
{0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0},
{0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0},
{0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
}

arr5 = {
{0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0},
{1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1},
{0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0},
}

local area1 = createCombatArea(arr1)
local area2 = createCombatArea(arr2)
local area3 = createCombatArea(arr3)
local area4 = createCombatArea(arr4)
local area5 = createCombatArea(arr5)
setCombatArea(combat1, area1)
setCombatArea(combat2, area2)
setCombatArea(combat3, area3)
setCombatArea(combat4, area4)
setCombatArea(combat5, area5)

local function onCastSpell1(parameters)
doCombat(parameters.cid, parameters.combat1, parameters.var)
end

local function onCastSpell2(parameters)
doCombat(parameters.cid, parameters.combat2, parameters.var)
end

local function onCastSpell3(parameters)
doCombat(parameters.cid, parameters.combat3, parameters.var)
end

local function onCastSpell4(parameters)
  doCombat(parameters.cid, parameters.combat4, parameters.var)
end

local function onCastSpell5(parameters)
  doCombat(parameters.cid, parameters.combat5, parameters.var)
end

function onCastSpell(cid, var) 
local parameters = { cid = cid, var = var, combat1 = combat1, combat2 = combat2, combat3 = combat3, combat4 = combat4, combat5 = combat5 }
addEvent(onCastSpell1, 0, parameters) 
addEvent(onCastSpell2, 0, parameters) 
addEvent(onCastSpell3, 0, parameters) 
addEvent(onCastSpell4, 0, parameters)
addEvent(onCastSpell5, 0, parameters)

end

 

Cada um dos

 

local combatx = createCombatObject()
setCombatParam(combatx, COMBAT_PARAM_TYPE, COMBAT_PHYSICALDAMAGE)
setCombatParam(combatx, COMBAT_PARAM_EFFECT, ME_EXPLOSIONAREA)
setCombatFormula(combatx, COMBAT_FORMULA_LEVELMAGIC, 2.0, -150, 1.6, -150)

 

é o tipo de dano(aqui no caso fisico), efeito visual(aqui no caso explosão) e cálculo de dano de cada uma das partes da magia(aqui no caso por ML).

 

As partes como

 

arr1 = {
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0},
{0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0},
{0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0},
{0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
}

 

são as áreas de cada parte da magia(cada número de area corresponde ao mesmo número nas linhas de tipo de dano, etc...

 

Esta parte

 

function onCastSpell(cid, var) 
local parameters = { cid = cid, var = var, combat1 = combat1, combat2 = combat2, combat3 = combat3, combat4 = combat4, combat5 = combat5 }
addEvent(onCastSpell1, 0, parameters) 
addEvent(onCastSpell2, 0, parameters) 
addEvent(onCastSpell3, 0, parameters) 
addEvent(onCastSpell4, 0, parameters)
addEvent(onCastSpell5, 0, parameters)

 

corresponde ao tempo de execução de cada uma das partes da magia(aqui todos estão 0, a magia inteira é executada instantaneamente) em milissegundos a partir do momento em que o player pronuncia as palavras. Claro, cada um dos "addEvent(onCastSpellx, x, parameters)" corresponde ao tempo de execução de cada uma das partes da magia.

 

damnationyp7.jpg

 

Esse exemplo é uma espécie de UE com 5 efeitos diferentes, um central e quatro nas diagonais. Você pode editar cada um dos tempos, efeitos, cálculo de dano, áreas para que a magia possa ser executada de inúmeras maneiras diferentes. Pode-se botar áreas iguais, com tempos e efeitos diferentes, para que elas se sobreponham uma atrás da outra, dando vários hits. Sintam-se livres para usar o meu exemplo de qualquer maneira que achem útil. Exijo apenas créditos se forem postar em algum lugar.

 

Espero ter ajudado, dúvidas por favor postem.

 

Créditos para mim e para um usuário de outro fórum, que criou uma UE progressiva que me inspirou o tutorial.

Nostradamus

Serviços Prestados ao XTibia.com
avatar
Visconde
Visconde

INFOS

Grupo: ViscondeRegistrado: 10/06/06Posts: 338Char no Tibia: Setyte Berseker

Parabéns pela tradução do tutorial, deixe o tópico mais bonito para facilitar ao usuário.

 

A BlackOnix usava muito isso, mas agora, nosso sistema avançado de magias faz muito mais ;)

[twitter]ThomazYuji[/twitter]

Xiaoxu

avatar
Campones
Campones

INFOS

Grupo: CamponesRegistrado: 16/11/05Posts: 13

Hmmm... Tradução?

Archblade

avatar
Campones
Campones

INFOS

Grupo: CamponesRegistrado: 18/07/07Posts: 33

Parabéns! :D

belo tutorial

Xiaoxu

avatar
Campones
Campones

INFOS

Grupo: CamponesRegistrado: 16/11/05Posts: 13

Valeu.

MarcolinoGOD

Byte que eu gosto! (TI na veia)
avatar
Visconde
Visconde

INFOS

Grupo: ViscondeRegistrado: 19/06/07Posts: 267Gênero: MasculinoChar no Tibia: Rambocop Infernus

@Xiaoxu

Otimo tutorial mas só

ta faltando mas cor e vida! :p

 

@Nostradamus

A equipe BlackOnix esta de parabens

e cada vez vem inovando mais e mais... ;)

--

Xiaoxu

avatar
Campones
Campones

INFOS

Grupo: CamponesRegistrado: 16/11/05Posts: 13

Obrigado Albert José, infelizmente eu estava sem paciência, verdade seja dita.

Aoria

avatar
Artesão
Artesão

INFOS

Grupo: ArtesãoRegistrado: 01/06/07Posts: 123

Faltou mais cor, pra dar uma melhor explicação.

Se a pessoa ler sem prestar atenção, não entende.

 

Por exemplo.

 

[color="#0000FF"]Palavra1[/color]      [color="#FF0000"]Palavra2[/color]

 

Significa Isso...

 

Signifika Akilo

 

Assim, facilita o entendimento.

 

Mas o conteúdo está ótimo, parabéns.

 

Creio que irá ajudar muitos iniciantes.

 

Abraço.

Xiaoxu

avatar
Campones
Campones

INFOS

Grupo: CamponesRegistrado: 16/11/05Posts: 13

Obrigado.

capeta7

avatar
Barão
Barão

INFOS

Grupo: BarãoRegistrado: 22/04/06Posts: 238

otimo tutorial msmo ;]

eh pra que versao ?

e se eu quizer fazer uma magia tpw

 

::: ::: ::: :::

 

::: = fire

::: = poison

::: = energy

::: = sd ^.-

 

tpw um exevo vis lux... soh que com "magias mistas"

 

\/ says : Exevo vis flam pox death hur.

0

/|\ ::::::::::::

.|

/ \

-----------

 

acho q deu pra entende o q eu quero fazer neh ?!?!? asehasheuiahse

QUOTE
21:51 Gabriel Stoll [12]: aki é thais?
21:51 Gabriel Stoll [12]: ?
21:51 Gabriel Stoll [12]: ?
21:52 Djinn Middow [20]: n.. eh northport ^.-

-----------------
mithi_9@hotmail.com
-----------------
----> Bars <----

gonn_carrerinha

avatar
Campones
Campones

INFOS

Grupo: CamponesRegistrado: 20/07/07Posts: 98Char no Tibia: Bloker Denn

HAHA CAPETA,, mt bem explikdo mlk

 

 

pra q versão q eh tbm gostaria d usar

 

 

zuo né capeta ashaushuahsuahsuahsusha

 

 

flws

 

meu topic n° 100

 

flws

X TIBIA THE BEST





BARS:


Xiaoxu

avatar
Campones
Campones

INFOS

Grupo: CamponesRegistrado: 16/11/05Posts: 13

É para versão 8.0, não testei com outras versões.

 

@capeta7 Bom, você teria que criar quatro áreas, com um quadrado cada, consecutivos em linha reta a partir do 2(que seria a posição do player que usa a magia). Cada uma das áreas deveria ter o seu respectivo efeito definido no começo da magia e o tempo de execução de cada uma das partes seria igual a 0.

Xiaoxu

avatar
Campones
Campones

INFOS

Grupo: CamponesRegistrado: 16/11/05Posts: 13

@gmcp Claro, é só definir na parte inicial onde ficam as fórmulas de dano.

Mister's

avatar
Campones
Campones

INFOS

Grupo: CamponesRegistrado: 22/08/07Posts: 59
Valeu.

Valeu ?

Creio que não é necessario ficar agradecendo.

 

@Post.

Parabéns ai gostei muito da pra ter uma ideia e por tal fazer divesas outras magias.

Vou fazer um Teste aqui qualquer dúvida em edito.