Ir para conteúdo

Tutorial De Action


Fagunz

Posts Recomendados

Tutorial de Actions

 

 

Em primero lugar vamos criar um Script Passo a Passo para acustumar.

 

Crie um arquivo.lua na sua pasta de scripts chamado mineaction e siga os passos abaixo - >

 

Bom , Aconselho sempre começar sua action com:

 

Código:

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

Depois com os famosos "Ifs" função "Se"

 

Código:

if item.uid == 3000 then

Aqui no caso acontecerá alguma coisa se o item que tem a UniqueId 3000 for usado !

 

(UniqueIds são IDs unicas , que são se pode ter 1 no mapa e podem ser facilmente colocadas com qualquer map editor [botão Direito , Properties , e teremos actionID e

UniqueID])

 

Bom apos o if item.uid == 3000 then Temos que colocar as funções desejadas.

 

No caso temos as funções :

Código:

 

* doChangeTypeItem

* doCreateItem

* doDecayItem

* doPlayerAddHealth

* doPlayerAddItem

* doPlayerAddMana

* doPlayerAddSkillTry

* doPlayerFeed

* doPlayerRemoveItem

* doPlayerRemoveMoney

* doPlayerSay

* doPlayerSendCancel

* doPlayerSendTextMessage

* doPlayerSetMasterPos

* doPlayerSetVocation

* doRemoveItem

* doSendMagicEffect

* doSetItemActionId

* doSetItemSpecialDescription

* doSetItemText

* doShowTextWindow

* doSendAnimatedText

* doSummonCreature

* doTeleportThing

* doTransformItem

* getItemRWInfo

* getPlayerAccess

* getPlayerFood

* getPlayerGuildId

* getPlayerHealth

* getPlayerLevel

* getPlayerMagLevel

* getPlayerMana

* getPlayerMasterPos

* getPlayerName

* getPlayerPosition

* getPlayerSkill

* getPlayerStorageValue

* getPlayerVocation

* getThingfromPos

* getTilePzInfo

* setPlayerStorageValue

 

Não falaremos de Todas mas é bom conhece-las ..

 

Então pule uma linha para colocarmos as funções

 

[No Primeiro exemplo aqui colocarei uma action de Sumonar um determinado Montro.]

 

Bom adicione

Código:

doSummonCreature("Demon",topos)

Isso fará que quando eu usar o Item que tem a UID 3000 seja sumonado um monstro na frente do player

 

 

Adicione uma linha abaixo de doSummon o efeito magico :

 

Código:

doSendMagicEffect(topos,14)

Pronto quando o Demon for sumonado agora haverá um efeito magico.

 

agora adicione isto no final

Código:

else

doPlayerSendCancel(cid,"Sorry, not possible.")

end

return 1

end

Sua action terminada deve estar assim :

Código:

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

Â*Â*if item.uid == 3002 then

 

doSummonCreature("Demon",topos)

doSendMagicEffect(topos,14)

 

else

doPlayerSendCancel(cid,"Sorry, not possible.")

end

return 1

end

No caso Else significa Mais e Else IF que tambem é muito usado ( não agora ) mais se end é o chamado fim que é usado no fim dos scripts sempre que finaliza alguma coisa.

 

Agora vamos abrir o map editor criar uma statua e adicionar a UniqueID 3000 e abrir tambem a action.xml e adicionar :

<action uniqueid="3000" script="mineaction.lua" />

 

Se tudo deu certo é porque você esta seguindo nosso tuto normalmente!

 

Agora encinarei um pouco outros comandos para então voltar a pratica !

 

Os mais famosos e usados são :

 

Código:

doPlayerAddMana(cid,100) Neste caso adiciona 100 de mana ao player que usar o item que esta destacado na action !

 

doPlayerAddHealth(cid,100) Mesmo que o acima mas neste caso adiciona life !

 

doPlayerFeed(cid,120) Adiciona Digamos.. food ao player neste caso o player subirá life e mana por 120 seconds.

 

doPlayerSay(cid,"Hicks",2) Faz o player a dizer uma mensagem usado em cachaça e em mana fluid.

 

doPlayerAddItem(cid,2400,1) É usado em quests no caso adiciona um item do id 2400 que eh uma Magic Sword.

 

doPlayerRemoveMoney(cid,100) Tira dinheiro do player , no caso ali 100 gps.

 

doPlayerSendTextMessage(cid,2,"Tutorial") Aparece uma mensagem no screnn(tela) do player, no caso ali Tutorial.

 

doSendMagicEffect(topos,2) Ele é u famoso efeito magico ^^

 

doSummonCreature("Dragon",topos) Ali sumona um demon na posição do item usado ! Ele pode ser usado pra sumonar em determinada coordenada exemplo :

 

doSummonCreature("Dragon", {x=138, y=281, z=8})

 

Bom acho que falei o suficiente por hoje

 

Use sua criatividade em uma suas actions !

 

Continuando ...

 

Especial Alavancas de Mil maneiras

 

1 - Removendo pedras -

 

Vejam o Ex(By Peonso) :

Código:

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

gatepos = {x=181, y=135, z=11, stackpos=1}

getgate = getThingfromPos(gatepos)

 

if item.uid == 3002 and item.itemid == 2711 and getgate.itemid == 1822 then

doRemoveItem(getgate.uid,1)

doTransformItem(item.uid,item.itemid+1)

elseif item.uid == 3002 and item.itemid == 2712 and getgate.itemid == 0 then

doCreateItem(1822,1,gatepos)

doTransformItem(item.uid,item.itemid-1)

else

doPlayerSendCancel(cid,"Sorry, not possible.")

end

return 1

end

Neste caso vamos esclarecer tudo

 

3002 o UID da alavanca (não precisa ser necessariamente alavanca mas este exemplo é alavanca)

 

GatePos , é a posição da pedra , parede , estatua ou outra coisa que esteja bloqueando o caminho

 

1822 É o ID da pedra , parede ...

 

2711 o ID da alavanca

 

Bom ?!? Sim Otimo

 

Mas podemos editar este exemplo para fazer varias coisas ex: Acordar monstros que estavam transformados em Pedra ...

 

Muita gente deve estar pensando" hã?!? oq isso tem haver?"

 

Olhem só se adicionarmos

 

Código:

doSummonCreature("Gargoyle", {x=181, y=135, z=11})

doSendMagicEffect(topos,14)

 

Abaixo do doremoveitem teremos isso basta apenas trocar o ID da pedra para 2015 que é o id da estatua

 

Viram é só usar a criatividade de vocês

 

- Alavancas Sumonando Monstros e colocando Hole No Lugar de uma quest

 

Vamos ver mais uma vez o exemplo do peonso :

 

Código:

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

gatepos = {x=181, y=135, z=11, stackpos=1}

getgate = getThingfromPos(gatepos)

 

if item.uid == 3002 and item.itemid == 2711 and getgate.itemid == 1822 then

doRemoveItem(getgate.uid,1)

doTransformItem(item.uid,item.itemid+1)

elseif item.uid == 3002 and item.itemid == 2712 and getgate.itemid == 0 then

doCreateItem(1822,1,gatepos)

doTransformItem(item.uid,item.itemid-1)

else

doPlayerSendCancel(cid,"Sorry, not possible.")

end

return 1

end

Vamos Pensar o que podemos fazer ...

 

Que tal se nós adicionarmos após o doRemoveItem isso :

 

Código:

doSummonCreature("Dragon", {x=190, y=135, z=11})

doSummonCreature("Dragon", {x=187, y=139, z=11})

doSummonCreature("Dragon", {x=184, y=133, z=11})

doCreateItem(409,1,gatepos)

Neste caso , vai sumonar 3 Dragons e aparecer um Hole é com para ser usado em Quests [409 é o id da hole]

 

Viram como é facil? É só usar a criatividade !

 

Bom agora acho que vocêss entenderam como usar as alavancas ...

 

Vamos Falar de Runas e MFs

 

Este exemplo do Joao será nossa Base:

 

 

Código:

-- New MF rune by Joao Paulo 3.0 version --

 

 

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

 

playerpos = {x=topos.x, y=topos.y, z=topos.z, stackpos=253}Â*Â*Â*Â*

player = getThingfromPos(playerpos)

 

 

ml = getPlayerMagLevel(cid)

lvl = getPlayerLevel(cid)

formula = math.random(((lvl+ml)*2)-(lvl-ml))

 

if item2.itemid == 1 and ml >= 2 then

 

 

 

doSendMagicEffect(playerpos,1)

doPlayerAddMana(player.uid,formula)

doPlayerSay(player.uid,"Ahhhhhh",2)

 

 

if item.type > 1 then

doChangeTypeItem(item.uid,item.type-1)

else

doRemoveItem(item.uid,1)

end

 

end

 

if item2.itemid == 1 and ml <= 1 then

doSendMagicEffect(frompos,2)

doPlayerSendCancel(cid,"You dont Have Magic Level to use this rune.")

 

end

if item2.itemid >= 2 then

doPlayerSendCancel(cid,"You can only use this rune in you or in players.")

doSendMagicEffect(frompos,2)

end

 

 

return 1

end

Ai logo você ve que não é tão dificil assim ...

 

Se vocês testarem essa versão que upa MTTTTT mana de Mages

 

Oque podemos fazer bom eu não gosto de formulas retire a formula e o getplayerlvl

 

E coloque Código:

doPlayerAddMana(cid,100)

no lugar do antigo doPlayerAddMana

 

Com isso você pode reparar que toda hora vai upar 100 de mana..

 

Agora vamos fazer uma runa baseada na do Joao passo a passo :

 

Essa primera runa será pelas actions depois vou encinar uma pela pasta spells.

 

Bom vamos começar igual o exemplo dele:

 

Código:

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

 

playerpos = {x=topos.x, y=topos.y, z=topos.z, stackpos=253}

player = getThingfromPos(playerpos)

Isso mostra as funções a serem usadas e a posição do Player

 

Vamos pular uma linha e colocar :

 

Código:

ml = getPlayerMagLevel(cid)

 

if item2.itemid == 1 and ml >= 2 then

Bom isso pega o ML da pessoa para saber se ela tem o Magic necessario para usar.

 

Código:

doPlayerAddHealth(player.uid,100)

doSendMagicEffect(playerpos,1)

doPlayerAddMana(player.uid,100)

doPlayerSay(player.uid,"This Potion Are Mud",2)

 

Bom com isso adicionará 100 de life e 100 de mana ao player e força ele a dizer This Potion Are Mud

 

Código:

if item.type > 1 then

doChangeTypeItem(item.uid,item.type-1)

else

doRemoveItem(item.uid,1)

end

end

Isso remove 1 carga

 

if item2.itemid == 1 and ml <= 1 then

doSendMagicEffect(frompos,2)

doPlayerSendCancel(cid,"You dont Have Magic Level to use this rune.")

 

Isso mostra qual ML necessario para usar a LMF (Life mana fluid)

 

Código:

end

if item2.itemid >= 2 then

doPlayerSendCancel(cid,"You can only use this rune in you or in players.")

doSendMagicEffect(frompos,2)

end

 

 

return 1

end

Finalizando oque acontece quando erra o player e o end.

 

Viram ? Se quiserem fazer runas de adicionar equipes ou senão de teleport como nesse exemplo :

 

Código:

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

if item2.itemid == 0 then

doPlayerSendCancel(cid,"Sorry, not possible.")

else

if getPlayerAccess(cid) == 3 then

playerpos = getPlayerPosition(cid)

doTeleportThing(cid,topos)

doSendMagicEffect(playerpos,2)

doSendMagicEffect(topos,10)

else

doPlayerSendCancel(cid,"You are not allowed to use this rune.")

end

end

return 1

end

 

Ou senão o item :

Código:

 

doPlayerAddItem(cid,2400,1)

 

É muito facil, apenas adicionar as funções

 

-

 

Agora vou falar sobre quests

 

Bom se você usa YourOts é muito facil

 

Código:

-- Tutorial quest

if item.uid == (uniqueid que você quer) then

queststatus = getPlayerStorageValue(cid,[aconselho colocar a uniqueid])

if queststatus == -1 then

if getPlayerLevel(cid) >= (level necessario) then

doPlayerSendTextMessage(cid,22,"You have found Tutorial Rox Item.")

doPlayerAddItem(cid,(Id Do Item),[Quantidade])

setPlayerStorageValue(cid,(uid),1)

else

doPlayerSendTextMessage(cid,22,"You need level 20 to get prize.")

end

else

doPlayerSendTextMessage(cid,22,"It is empty.")

end

Adicione isso na chest.lua

 

Bom agora edite conforma esta acima só que sem os {} [] ()

 

Se você não usa YourOts -

 

Baixe YourOts (Brincadera a parte)

Ignore o passo acima

 

Vamos ver um exemplo do Peonso

 

Código:

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

 

if item.uid == (UID) then

queststatus = getPlayerStorageValue(cid,[uID])

if queststatus == -1 or queststatus == 0 then

doPlayerSendTextMessage(cid,22,"You have found an Tutorial Rox.")

doSendMagicEffect(topos,12)

coins_uid = doPlayerAddItem(cid,[iD Do Item],{Quantidade})

setPlayerStorageValue(cid,[uID],1)

 

else

doPlayerSendTextMessage(cid,22,"This chest is empty.")

end

 

elseif item.uid == [uID] then

queststatus = getPlayerStorageValue(cid,[uID])

if queststatus == -1 or queststatus == 0 then

doPlayerSendTextMessage(cid,22,"You have found a Tutorial.")

doSendMagicEffect(topos,12)

coins_uid = doPlayerAddItem(cid,[iD do Item],{quantidade})

setPlayerStorageValue(cid,[uID],1)

 

else

doPlayerSendTextMessage(cid,22,"This chest is empty.")

end

else

return 0

end

return 1

end

É só substituir colocando os IDs sem os [] {} ()

 

Editando LvLDoors by Peonso

Bom antes de mais nada temos que adicionar isso no actions.xml

 

Código:

<action itemid="1627" script="lvldoor.lua"/>

<action itemid="1629" script="lvldoor.lua"/>

<action itemid="1645" script="lvldoor.lua"/>

<action itemid="1647" script="lvldoor.lua"/>

<action itemid="1659" script="lvldoor.lua"/>

<action itemid="1661" script="lvldoor.lua"/>

<action itemid="1668" script="lvldoor.lua"/>

<action itemid="1677" script="lvldoor.lua"/>

Essas são as portas mais usadas , quem usa outras pode adicionar facilmente assim:

 

Código:

<action itemid="ID Da Porta" script="lvldoor.lua"/>

Bom com sua porta add vamos ao script do peonso

 

Código:

-- By Peonso, based on Junk Food script

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

 

doorpos = {x=frompos.x, y=frompos.y, z=frompos.z}

playerpos = getPlayerPosition(cid)

playerlevel = getPlayerLevel(cid)

 

--shadowtemple

if item.itemid == 1629 and doorpos.x == 265 and doorpos.y == 118 and doorpos.z == 8 then

if playerlevel > 29 then

doTeleportThing(cid,doorpos)

elseif playerlevel < 30 then

doPlayerSendTextMessage(cid,22,"You need to be level 30 or higher.")

end

 

--DOMS

elseif item.itemid == 1627 and doorpos.x == 133 and doorpos.y == 250 and doorpos.z == 8 then

if playerlevel > 39 then

doTeleportThing(cid,doorpos)

elseif playerlevel < 40 then

doPlayerSendTextMessage(cid,22,"You need to be level 40 or higher.")

end

 

end

return 1

end

 

Explicando :

Ali temos 2 portas os ids são 1627 e 1629 a seguir dos IDS temos as coodernadas o lvl 39 then + que 39 ou seja apenas 40 pra cima doTeleportthing(cid,doorpos) isso é a posição da door ou seja vai teleporta o player para dentro da porta

Facil não? Edite sua porta você mesmo e mude o ID e as coordenadas -

 

Picks System ( Creditos de Thotth )

 

Código:

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

 

tilepos = {x=topos.x, y=topos.y, z=topos.z}

 

 

if item2.itemid == 0 then

return 0

end

 

 

if item2.itemid == 782 and tilepos.x == 56 and tilepos.y == 49 and tilepos.z == 8 then

player1pos = {x=56, y=50, z=8, stackpos=253}

player1 = getThingfromPos(player1pos)

 

if player1.itemid > 0 then

 

nplayer1pos = {x=56, y=49, z=9}

 

doSendMagicEffect(player1pos,2)

 

doTeleportThing(player1.uid,nplayer1pos)

 

doSendMagicEffect(nplayer1pos,10)

 

else

doSendMagicEffect(frompos,2)

doPlayerSendCancel(cid,"You are not in the right place!")

end

end

return 1

end

Explicando o código By Thotth:

 

Agora la em and tilepos.x == 56 and tilepos.y == 49 and tilepos.z == 8 Ai eh as cordenadas do xaozinhu q vc irá usar a pick para ser teleportado.

 

Tamo quase la! Em if item2.itemid == 782 Este 782 eh o id da tile (o xaumzinhu) q vc colocou na coordenada q a pick devera ser usada.

 

Para dar um toke a+ eu puiz la em doPlayerSendCancel(cid,"You are not in the right place!") esta mensagem se a mula do cara usa a pick e naum estiver no lugar certo q vc colocou.

 

OBS: tilepos = {x=topos.x, y=topos.y, z=topos.z} n mexe ai pq se naum vai dar erro!

 

Agora entendendo e execuntando by Skoll

 

Isso é o pick system tem gente que não sabe nem oq é pick eh aquele intrumento que usamos para fazer buracos no chão , nesta aula que você teve retirada de um tuto do thotth com autorização dele é claro ele encinou como executar essa magnifica action , é a primeira vez que trabalhamos com o item2 em nossas aulas , o item2 é aquele segundo item do use with ( ex - eu dou use em uma rope e depois na tile de subir no caso a tile de subir é o item2) ele é utilizado em boa parte das actions ai você pergunta em não vi um "item1", ai que entra a code do actions.xml.

 

Código:

<action itemid="3394" script="pick.lua" />

Em actions gerais (eu gosto de chamar assim) você deve sempre colocar o id do item que da o use na actions.xml

 

 

Código:

 

Glossário

 

Item2 - Serve para itens tipo que você da use e tem que clicar em outro esse outro é o item2

 

Math Random - Define tudo aquilo que é aletorio ou não é pré definido.

 

If - Função 'Se' é usada em 90% das actions

 

Do - As Funções 'Do' representam sempre o fazer , Ex Sumonar , Transformar

 

And - É o famoso "E" usamos ele quando colocamos algo a +

 

Or - Função Ou , serve para as actions não ficarem muito extensas

 

UID - UniqueIds , elas só podem ser usadas em 1 item no jogo elas são unicas

 

Elseif - E se , Mas se , Determina um especie de condição se algo acontecer ela ativará a ação.

 

End - Finaliza as ações

Link para o comentário
Compartilhar em outros sites

  • 5 months later...

Olá Xtibiano,

 

Parabéns, seu tutorial foi aprovado.

 

Estarei movendo ele para a área de tutoriais.

 

Obrigado por trazer conteúdo para o Xtibia.com e espero que continue com o ótimo trabalho.

 

 

Atenciosamente,

JV Chequer *Diretor Xtibia.com*

Link para o comentário
Compartilhar em outros sites

  • 2 weeks later...

ótimo tutorial, cara.

Muito bom mesmo.

Só não tive coragem de tentar ainda...

E como os outros disseram, pra ficar perfeito, poderia ter adicionado codes, ou letras de outras cores pra não embolar.

Link para o comentário
Compartilhar em outros sites

Po kra ate q kuase n da pre entender tenta fazr com 'Quotes' pra entender melhor =D

Vlw manow

 

---------------------------------------------

Ta meuh Doidão é? faz isso ai!

barbievettedoriftowf6gfrk6.gif

 

----------------------------------------------

Meu Fan? Usa Aiiiii!

banner_break_06_19_2007_11_41_00_30571.gif

 

----------------------------------------------

Me Procurando Em Ots?---My Char, Fan Tolbar---

cloundtolbaruj6.th.png

 

----------------------------------------------

Eu Sou:

 

Scripter

 

----------------------------------------------

CyA!

Link para o comentário
Compartilhar em outros sites

Que isso cara! Não entendi nada... =D

Não sei mexer com essa área de actions, nunca entendo nada.

Mas pelo que diz o povão ai, seu tutorial deve tar muito perfeito.

Continue assim então e traga mais novidades ao XTibia Forum. Estaremos esperando! =D

 

Um abraço.

Link para o comentário
Compartilhar em outros sites

×
×
  • Criar Novo...