Tutorial Movements

frerety
em Tutoriais de Scripting

frerety

DVNO
avatar
Artesão
Artesão

INFOS

Grupo: ArtesãoRegistrado: 08/04/06Posts: 133

HiHo!

 

Como prometido, escrevi o tutorial de Movements =) Bom... demorei 5 horas pra escrever isso. Eu sei que o número de pessoas que vai ler isso com intusiasmo e interesse eh quase nulo mas se eu conseguir ajudar uma pessoa apenas já estou feliz =)

 

Provavelmente você não vai intender tudo da primeira vez que você ler (talvez nem da segunda) pois eh muita coisa para aprender. Leia com atenção, com calma, com carinho ( =p ), analise vários scripts/movements (todos que ver na frente de preferência \o/) e o mais importante: tenha persistência ;) Tentei facilitar ao máximo, tentei organizar mais porém se eu sintetizasse mais iria perder conteúdo =x... Se você ainda tiver alguma dúvida me mande uma pm ou poste aki mesmo =p Ficarei feliz em te ajudar a resolver seu problema.

 

Se você não souber programar em lua ou não conhecer direito as funções do SVN(antigo CVS) dê uma olhadinha no tutorial de actions do colex primeiro. Olhar aqui antes de ter experiência com actions provavelmente não irá adiantar muita coisa =)

 

PS .: Faço apenas um pedido, se você for postar esse tutorial em outro lugar me mande uma pm me contando onde que eu mando o tópico até com o BBC pra não precisar reformatar tudo =)

 

Pergunta ~> Tá... Vou ler um tutorial de Movements, mais o que isso faz?!?

Resposta ~> Toda vez que você movimentar alguma coisa (itens, você mesmo, outros players - enfim, todo tipo de movimento) ou criar itens em algum lugar (ex. criar firefields) poderá acontecer alguma coisa. Podemos configurar BoH, rings com movements, adicionar damage nos fields, configurar traps e muuuito mais =)

 

Começaremos analizando o movements.xml (data/movements/)

Vamos estudá-lo um pouco:

<?xml version="1.0"?>

<movements>

<movevent event="EVENT" (... argumentos ...) />

</movements>

</xml>

Para cada event você vai usar um argumento < (...) >. Por isso vamos estudar movements divididos em seções - events.

 

EVENTS:

<movevent event="StepIn" (...) />

Usada quando o player mover para alguma coisa. Corresponde à antiga função de actions OnWalkIn

Argumentos:

itemid/uniqueid/actionid ~> use apenas um deles, nunca mais de um (se usar itemid não use uniqueid, se usar actionid não use itemid, etc). Quando o player andar em cima de um item com itemid/uniqueid/actionid X, executar o movement.

script/function ~> use (também) apenas um deles (se usar script não usar function). Function vai ser explicado mais tarde, não se preocupe =). Script é o caminho do arquivo lua(onde ele está) a ser executado quando o player pisa em algum item de itemid/uniqueid/actionid X

Exemplo: <movevent event="StepIn" itemid="1487" script="arquivo.lua" />

 

<movevent event="StepOut" (...) />

Usada quando o player mover para fora (sair de cima) de um item X. Corresponde à antiga função para actions OnWalkOut

Argumentos:

itemid/uniqueid/actionid ~> use apenas um deles, nunca mais de um (se usar itemid não use uniqueid, se usar actionid não use itemid, etc). Quando o player mover pra fora de um item com itemid/uniqueid/actionid X, executar o movement.

script/function ~> use (também) apenas um deles (se usar script não usar function). Function vai ser explicado mais tarde, não se preocupe =). Script é o caminho do arquivo lua(onde ele está) a ser executado quando o player "sai" de cima de algum item de itemid/uniqueid/actionid X

Exemplo: <movevent event="StepOut" itemid="1487" script="arquivo.lua" />

 

<movevent event="Equip" (...) />

Usada quando o player colocar um equipamento no corpo(pro corpo, não para a bp =p) em algum slot

Argumentos:

itemid/uniqueid/actionid ~> use apenas um deles (se usar itemid não use uniqueid ou actionid). Quando o player mover um item de itemid/uniqueid/actionid X para o corpo, executar o movement.

script/function ~> use (também) apenas um deles (se usar script não usar function). Function vai ser explicado mais tarde, não se preocupe =). Script é o caminho do arquivo lua(onde ele está) a ser executado quando o player "veste" algum item de itemid/uniqueid/actionid X.

slot ~> o slot (mão, pé, corpo, etc) que o item deverá ficar pra executar a ação. Pode ser:

.: head ~> cabeça

.: necklace ~> colar

.: backpack ~> slot da backpack

.: armor ~> armadura

.: right-hand ~> mão direita

.: left-hand ~> mão esquerda

.: legs ~> calça

.: feet ~> pé

.: ring ~> rings (anéis)

Exemplo: <movevent event="Equip" itemid="2168" slot="ring" script="arquivo.lua" />

 

<movevent event="deEquip" (...) />

Usada quando o player retirar um equipamento de um certo slot do corpo

Argumentos:

itemid/uniqueid/actionid ~> use apenas um deles (se usar itemid não use uniqueid ou actionid). Quando o player mover um item de itemid/uniqueid/actionid X para fora do corpo, executar o movement.

script/function ~> use (também) apenas um deles (se usar script não usar function). Function vai ser explicado mais tarde. Script é o caminho do arquivo lua(onde ele está) a ser executado quando o player tira algum item de itemid/uniqueid/actionid X do corpo.

slot ~> o slot (mão, pé, corpo, etc) que o item deverá ficar pra executar a ação. Pode ser:

.: head ~> cabeça

.: necklace ~> colar

.: backpack ~> slot da backpack

.: armor ~> armadura

.: right-hand ~> mão direita

.: left-hand ~> mão esquerda

.: legs ~> calça

.: feet ~> pé

.: ring ~> rings (anéis)

Exemplo: <movevent event="DeEquip" itemid="2168" slot="ring" script="arquivo.lua" />

 

 

<movevent event="AddItem" (...) />

Usada quando o player adicionar um item x em algum tile (mover de um tile pro outro, quando o player taca uma runa de field ofensiva em alguém)

Argumentos:

itemid/uniqueid/actionid ~> use apenas um deles (se usar itemid não use uniqueid ou actionid). Quando o player "criar" um item de itemid/uniqueid/actionid X, executar o movement.

script/function ~> use (também) apenas um deles (se usar script não usar function). Function vai ser explicado mais tarde. Script é o caminho do arquivo lua(onde ele está) a ser executado quando o player adiciona/move alguma coisa pro tile.

tileitem ~> pode ser 0(false - desativado) ou 1(true - ativado). Se for 0, o script é executado assim que você move/cria o item no chão. Se for 1, o script só é adicionado quando você taca outro item em cima do item de itemid/uniqueid/actionid X

Exemplo: <movevent event="AddItem" tileitem="0" itemid="2424" script="script.lua" />

 

 

<movevent event="RemoveItem" (...) />

Usada quando o player remover um item x (mover de um tile pro outro, usar destroy field)

Argumentos:

itemid/uniqueid/actionid ~> use apenas um deles (se usar itemid não use uniqueid ou actionid). Quando o player "remover/tirar" um item de itemid/uniqueid/actionid X de um tile, executar o movement.

script/function ~> use (também) apenas um deles (se usar script não usar function). Function vai ser explicado mais tarde. Script é o caminho do arquivo lua(onde ele está) a ser executado quando o player tira algum item de itemid/uniqueid/actionid X do corpo.

tileitem ~> pode ser 0(false - desativado) ou 1(true - ativado). Se for 0, o script é executado assim que você move/cria o item no chão. Se for 1, o script só é adicionado quando você tira outro item de cima do item de itemid/uniqueid/actionid X

Exemplo: <movevent event="RemoveItem" tileitem="0" itemid="2424" script="script.lua" />

 

ARQUIVOS.LUA:

Nas actions o modelo básico é:

function onUse(cid,item,frompos,item2,topos)

return 1

end

Porém em movements o modelo depende do Event adicionado no xml. Cada event tem seu modelo básico... Irei explicar um por um.

 

StepIn

Seu modelo básico é:

function onStepIn(cid, item, pos)

-- aqui ficam as instruções

return 1

end

Argumentos:

.: cid ~> o UID do player que andou em cima de item;

.: item ~> o item que o player cid pisou. Possui: item.uid, item.itemid, item.type, item.actionid

.: pos ~> a posição do item que o player cid pisou

 

StepOut

Seu modelo básico é:

function onStepOut(cid, item, pos)

-- aqui ficam as instruções

return 1

end

Argumentos:

.: cid ~> o UID do player que saiu de cima de item;

.: item ~> o item que o player cid saiu. Possui: item.uid, item.itemid, item.type, item.actionid

.: pos ~> a posição do item que o player cid saiu

 

Equip

Seu modelo básico é:

function onEquip(cid, item, slot)

-- aqui ficam as instruções

end

Argumentos:

.: cid ~> o UID do player que "vestiu" o item;

.: item ~> o item que o player cid "vestiu". Possui: item.uid, item.itemid, item.type, item.actionid

.: slot ~> o lugar do corpo que o item foi colocado. Pode ser:

.:. 1 ~> cabeça

.:. 2 ~> colar

.:. 3 ~> slot da backpack

.:. 4 ~> armadura

.:. 5 ~> mão direita

.:. 6 ~> mão esquerda

.:. 7 ~> calça

.:. 8 ~> pé

.:. 9 ~> anel

 

DeEquip

Seu modelo básico é:

function onDeEquip(cid, item, slot)

-- aqui ficam as instruções

end

Argumentos:

.: cid ~> o UID do player que tirou o item do corpo;

.: item ~> o item que o player cid tirou do corpo. Possui: item.uid, item.itemid, item.type, item.actionid

.: slot ~> o lugar do corpo que o item foi retirado. Pode ser:

.:. 1 ~> cabeça

.:. 2 ~> colar

.:. 3 ~> slot da backpack

.:. 4 ~> armadura

.:. 5 ~> mão direita

.:. 6 ~> mão esquerda

.:. 7 ~> calça

.:. 8 ~> pé

.:. 9 ~> anel

 

AddItem

Seu modelo básico é:

function onAddItem(moveitem, tileitem, pos)

-- aqui ficam as instruções

return 1

end

Argumentos:

.: moveitem ~> O item que está sendo movido. Tem os seguintes atributos: moveitem.uid, moveitem.itemid, moveitem.type, moveitem.actionid. OBSERVAÇÃO: se você marcou tileitem="1" o item que está no xml não vai ser moveitem e sim tileitem. Moveitem será o item que você arrastou em cima do item que está no xml!!! (dêem outra olhada no xml do event AddItem na parte do tileitem para intenderem melhor. Se precisar olhem os exemplos mais em baixo

.: tileitem ~> você irá usar isso apenas se marcou tileitem="1" no xml. tileitem é o item que você colocou no xml, o item que os players irão mover outros items em cima (se precisar dêem outra olhada no xml do event AddItem na parte do tileitem para intenderem melhor. Se precisar olhem os exemplos mais em baixo). OBSERVAÇÃO: Por mais que esteja escrito tileitem, o tileitem não precisa ser necessáriamente um tile =) pode ser qualquer item que você possa mover coisas em cima dele.

.: pos ~> a posição que o o moveitem foi movido/criado. (posição depois de mover)

 

RemoveItem

Seu modelo básico é:

function onRemoveItem(moveitem, tileitem, pos)

-- aqui ficam as instruções

return 1

end

Argumentos:

.: moveitem ~> O item que está sendo movido. Tem os seguintes atributos: moveitem.uid, moveitem.itemid, moveitem.type, moveitem.actionid. OBSERVAÇÃO: se você marcou tileitem="1" o item que está no xml não vai ser moveitem e sim tileitem. Moveitem será o item que você arrastou de cima do item que está no xml!!! (dêem outra olhada no xml do event AddItem na parte do tileitem para intenderem melhor. Se precisar olhem os exemplos mais em baixo

.: tileitem ~> você irá usar isso apenas se marcou tileitem="1" no xml. tileitem é o item que você colocou no xml, o item que os players irão mover outros items em cima (se precisar dêem outra olhada no xml do event AddItem na parte do tileitem para intenderem melhor. Se precisar olhem os exemplos mais em baixo). OBSERVAÇÃO: Por mais que esteja escrito tileitem, o tileitem não precisa ser necessáriamente um tile =) pode ser qualquer item que você possa mover coisas em cima dele.

.: pos ~> a posição que o o moveitem foi removido (posição antes de mover).

 

FUNCTIONS vs SCRIPTS:

Bom... Quando eu estava explicando os xmls eu falei que você pode usar script ou function. Provavelmente você já está acostumado a usar script. script="arquivo.lua" etc etc =) Mas... pra que serve function e porque eu não uso script quando uso function?!?

Em movements você tem algumas funções especiais para fazer seu trabalho "andar mais rápido". Você não precisa criar nenhum aruqivo.lua! Basta saber quais são as funções especiais e como/quando usá-las ;)

OBS: Os items que serão usados nas funções especiais precisam estar configurados em data/items/items.xml!!!

 

1ª função ~> onStepInField

Como o próprio nome já diz ela deve ser usada com o event StepIn =p Serve para adicionar damage em fields...

Você não precisa de um arquivo.lua, apenas coloque:

<movevent event="StepIn" itemid="ID_DO_FIELD" function="onStepInField" />

e seu field já estará dando damage assim que alguém pisa em cima dele =p

 

2ª função ~> onAddField

Usada com o event AddItem =p Serve para adicionar damage quando o player está em um tile e outro player taca um firefield em baixo do player.

<movevent event="AddItem" tileitem="0" itemid="ID_DO_FIELD" function="onAddField" />

OBS: Aconselho sempre que você usar onStepInField (1ª função) adicionar onAddField com o mesmo id para dar um ar mais real ao server.

 

3ª função ~> onEquipItem

Usada com o event Equip. Serve para configurar rings, amuletos, etc etc...

<movevent event="Equip" itemid="ID_DO_ITEM" slot="ring" function="onEquipItem" />

OBS: é bom você colocar 2 tags, uma com o ID_DO_ITEM não usado e outra com o ID_DO_ITEM usando, gastando tempo.

 

4ª função ~> onDeEquipItem

Usada com o event DeEquip. Serve para quando o player tirar o ekip especial cancelar os efeitos desse equipamento.

<movevent event="DeEquip" itemid="ID_DO_ITEM_ATIVO" slot="ring" function="onDeEquipItem" />

OBS: ID_DO_ITEM_ATIVO é o id do item sendo usado...

 

EXEMPLOS:

Bom... depois de toooooda essa teoria vamos ao que interessa o/ exemplos =) (tem poucos - até mesmo porque existem vários exemplos na pasta scripts dos ots - mais se eu achar que precisa com o tempo vou adicionando novos exemplos)

 

Exemplo 01 .:. Configurando Stealth Ring

Abra data/movements/movements.xml e adicione:

<movevent event="Equip" itemid="2165" slot="ring" function="onEquipItem" />
<movevent event="Equip" itemid="2202" slot="ring" function="onEquipItem" />
<movevent event="DeEquip" itemid="2202" slot="ring" function="onDeEquipItem" />

Agora vá em data/items/items.xml e adicione:

	<item id="2165" name="stealth ring">
 <attribute key="transformEquipTo" value="2202"/>
 <attribute key="canDecay" value="0"/>
 <attribute key="showduration" value="1"/>
</item>

<item id="2202" name="stealth ring">
 <attribute key="transformDeEquipTo" value="2165"/>
 <attribute key="duration" value="600"/>
 <attribute key="showduration" value="1"/>
 <attribute key="invisible" value="1"/>
</item>

E pronto, seu Stealth Ring já está prontinho para funcionar ;)

Exemplo 02 .:. Como usar tileitem

Vamos fazer pão a partir da massa (ja com a massa pronta - id 2693) pra aprendermos =p

Você precisa da massa do pão(2693) e de um forno aceso(1786). Arraste a massa para cima do forno e a massa esquentará e virará um pão \o/

em data/movements/movements.xml

<movevent event="AddItem" tileitem="1" itemid="1786" script="pao.lua" />

Observe o detalhe: o itemid é do forno e tileitem está ativado(tileitem="1"), ou seja, o script irá ser ativado quando você arrastar alguma coisa pra cima do forno, não quando você arrastar o forno!

Agora crie um arquivo chamado pao.lua em data/movements/scripts/ e coloque isso:

function onAddItem(moveitem, tileitem, pos)
if moveitem.itemid == [b]2693[/b] then -- ID da massa do pão
 doTransformItem(moveitem.uid,2689) -- transforma a massa em pão(2689)
end

return 1
end

Assim sempre que você arrastar um item de id 2693 pro forno (tileitem="1", lembra?) o moveitem(que no caso vai ser a massa do pão) vai se transformar em pão o/

ÚLTIMAS PALAVRAS:

Difícil? Talvez =p

Se você tiver chegado até aqui e intendido, o que está esperando? vá fazer seus próprios movements \o/

Se você não tiver intendido, levante do pc, dê uma andadinha básica pela casa de uns 10 minutinhos para assimilar as informações e volte para reler o/

 

Boa sorte =)

 

FlW

CyA!

It's the hunger; the hunger for an alternative and the refusal to accept a life of unhappiness.


Kydrai

"Keep Your Mind Wide Open"
avatar
Visconde
Visconde

INFOS

Grupo: ViscondeRegistrado: 21/08/06Posts: 250

Nossa 5h, isso deve ser muito bom, por enquanto só li o começo e uns pedaços importantes pra intende melhor, mas ja salvei a pagina e vo le o resto(vo imprimi pra le), pq agora to sem tempo pra mexe.

 

Só no que eu li ja achei ele muito explicado!

Vlw pelo exelente tuto!

:hi:

~ Kydrai
Programador / Scripter

 

sign.png

soulblaster

avatar
Cavaleiro
Cavaleiro

INFOS

Grupo: CavaleiroRegistrado: 22/10/05Posts: 196

kOAKeokeoa ^^

 

Hiho!

Muuito bem explicado, dessa vez vc se superou! ;D

gostei bastaaaaaaaaaante do tutorial, + eu ja sabia tudo =P

vai ajudar bastante gente ;]

 

^^

cya... :hi:

Assinatura feita por Kilerzinhow:
untitled3mg3.jpg
| Wey.Ctba | Wey.Ctba | Rafix | UnderNight | Xedegux |

denilson6

avatar
Campones
Campones

INFOS

Grupo: CamponesRegistrado: 18/10/06Posts: 50

OMG! merece fix!!

o soulblaster disse tudo mas eu n sabia de td que tava no seu tuto =]

 

:hi:



-~-~-~-~-~-~-~-~-~-~-~-~-

Eu não sei que armas serão usadas na 3ª Guerra Mundial, mas as armas usadas na 4ª Guerra Mundial serão paus e pedras - Albert Eisten

-==-
-==-
-==-
-=Três caras que sabem fazer um OTServ Perfeito!=-

QUOTE
03:46 Escadinha [26]: mas vc nem fez nda
03:46 Escadinha [26]: UIHAEUIAEHIHAUEIAH
03:46 Forest Soul [17]: eu sei
03:46 Escadinha [26]: zuera
03:46 Escadinha [26]: fez sim
03:46 Escadinha [26]: :p
03:46 Forest Soul [17]: fiz n

colex

Serviços Prestados a Comunidade
avatar
Visconde
Visconde

INFOS

Grupo: ViscondeRegistrado: 03/10/05Posts: 301Gênero: Masculino

ficou muito bom o tutorial

 

eu achei ele muito bem explicado!

 

parabens pelo tutorial

 

 

@down

 

isso é só um exemplo e a questão não é ser igual ao tibia, os ots devem ser criativos nos seus sistemas e não ficarem presos onde o tibia ficar.

 

:p

tibiaa4e

Ex amante de Tibia
avatar
Conde
Conde

INFOS

Grupo: CondeRegistrado: 18/12/05Posts: 912Gênero: MasculinoChar no Tibia: Kohzete

Ae parabens

a preguissa saiu heim

fora q mando tanto spam q qdo entrei no msn travo o pc ¬¬

+ tudo bem

tirou duvidas minhas

E me ajudo agora vem + 4 actions

(pensei q ia ser facil + vais er + dificil do q pensei :/)

 

@pão

O pão no rl tibia se da use msm naum arrasta 2º vez q vejo isso

e me deixa irritado :p

Boa pra fazer tapestrie system

 

merece fix msm

 

flws :hi:

Aposentado de OTserver e Tibia

Meus melhores tutoriais
Enciclopédia Pasta Data
Tutorial de quest

Chakau

Banido
avatar
Banidos
Banidos

INFOS

Grupo: BanidosRegistrado: 09/11/06Posts: 278

mtu bom

APROVADO

[Usuário banido, Ofensas/Xingamentos a Equipe]
Addict

frerety

DVNO
avatar
Artesão
Artesão

INFOS

Grupo: ArtesãoRegistrado: 08/04/06Posts: 133

HiHo!

 

@errata

Corrigido a seção FUNÇÕES vs SCRIPTS (removida a função onStepOutField que existe mas é uma função que não faz nada - não implementada ainda)

 

@todos

obrigado pelos elogios

 

@ta4e

ofajofAJKoFA eu neim lembrava q tinha que dar use =p foi o único que eu pensei o/ depois penso em outra coisa pra alterar o exemplo =p

 

FlW

CyA!

It's the hunger; the hunger for an alternative and the refusal to accept a life of unhappiness.


Natanael Beckman

Administrador
avatar
Conde
Conde

INFOS

Grupo: CondeRegistrado: 06/08/06Posts: 554Char no Tibia: Balacky

Tutorial bem explicado gostei parabéns frerety

 

 

 

:hi: :hi: :hi: :hi:

znExesyD.png

servercore.png

Cidinho

avatar
Campones
Campones

INFOS

Grupo: CamponesRegistrado: 07/11/05Posts: 12

É boa a intenção mas acho que do jeito que o otserv ta nao vale a pena ler tudo. Otserv não tem mais nada de legal... não em 99% dos servers

 

Pelo menos a parte que eu li eu aprendi :p

tibiaa4e

Ex amante de Tibia
avatar
Conde
Conde

INFOS

Grupo: CondeRegistrado: 18/12/05Posts: 912Gênero: MasculinoChar no Tibia: Kohzete

@up

+ pode ter :p

num é mto dificil isso só num sabia tileitem

 

 

@frerety

ja falei pra mudar o exemplo do pão e se num mudo

to ficando nervoso :p

e muda a assinatura o M volto :D

 

 

@topic

pq num ta fix ainda o0

o de talk actions foi esse ta bem melhor e num foi :p

 

flws :hi:

Aposentado de OTserver e Tibia

Meus melhores tutoriais
Enciclopédia Pasta Data
Tutorial de quest

victor bacchi

avatar
Barão
Barão

INFOS

Grupo: BarãoRegistrado: 11/09/06Posts: 202

vlws fi!

pow kd vc no msn!

eu te deixava num grupo especial mais ai eu joguei todos os contatos para o grupo de amigos...

e agora eu te perdi buaaa!

 

 

 

mais esse topico ta mto rox!

 

 

SOH FALTAZ 1 VERSAO 7.92 COM 1 MAPA DESCENTE E SEM BUGS!

Conheça o Marujos Marotos!

marujo.jpg

mikiube

avatar
Campones
Campones

INFOS

Grupo: CamponesRegistrado: 15/01/06Posts: 41

parabens veio foi fods vlw a pena essas 5 horas (eu axo )

http://www.travian.com.br/?uc=br2_34560
http://www.travian.com.br/?uc=br2_34707
N me subestime
Eu sou:
--------------------------------------
-Web-disigner(Full image+ flash)
-Hoster(Pentium 4 2.6 Dual Core/1 Gb Ram/160 gb HD/Net 1 mb)
-Action Maker(1 ano trabalhando com action)
-Npc Maker(full)
-Rpg Maker(n eh o programa -.-/ Full)




Links:
Flash preview FFR OTs!

Conde do Monte Cristo

Eu sempre vou ser o Conde. =)
avatar
Visconde
Visconde

INFOS

Grupo: ViscondeRegistrado: 16/09/06Posts: 464Gênero: MasculinoChar no Tibia: Yonlu

wow! ótimo tutorial! meus parabens você me ajudou a entender pela primeira vez! XD

Te falar, sinto saudade de quando eu era jovem, muita saudade.