XI

Magias Mistas

Por Xiaoxu, 25 de ago. de 2007 em Tutoriais de Scripting

script
55
11.4k
XiaoxuX
25 de agosto de 2007 às 03:03

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.

Editado Setembro 11 por Xiaoxu

NostradamusN
25 de agosto de 2007 às 03:07

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 ;)

XiaoxuX
25 de agosto de 2007 às 03:15

Hmmm... Tradução?

ArchbladeA
26 de agosto de 2007 às 11:55

Parabéns! :D

belo tutorial

XiaoxuX
27 de agosto de 2007 às 20:47

Valeu.

MarcolinoGODM
27 de agosto de 2007 às 20:59

@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... ;)

XiaoxuX
27 de agosto de 2007 às 21:55

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

1 mês depois...
AoriaA
04 de setembro de 2007 às 15:14

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.

XiaoxuX
05 de setembro de 2007 às 09:50

Obrigado.

capeta7C
06 de setembro de 2007 às 22:36

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

Editado Setembro 6 por capeta7

06 de setembro de 2007 às 22:45

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

XiaoxuX
07 de setembro de 2007 às 10:30

É 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.

gmcpG
07 de setembro de 2007 às 13:42

Muito bom, mas, tem como fazer por ex, uma parte da magia como fire e outra como poison?

XiaoxuX
07 de setembro de 2007 às 18:30

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

Mister'sM
07 de setembro de 2007 às 18: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.

Editado Setembro 7 por Mister's