Ir para conteúdo

Tutorial Movements


frerety

Posts Recomendados

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!

Link para o comentário
Compartilhar em outros sites

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:

Link para o comentário
Compartilhar em outros sites

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

Link para o comentário
Compartilhar em outros sites

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:

Link para o comentário
Compartilhar em outros sites

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!

Link para o comentário
Compartilhar em outros sites

  • 2 weeks later...

É 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

Link para o comentário
Compartilhar em outros sites

@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:

Link para o comentário
Compartilhar em outros sites

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!

Link para o comentário
Compartilhar em outros sites

×
×
  • Criar Novo...