Ir para conteúdo

Tutorial De Actions - Completissimo


Dark-X

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:

CODE

 

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

 

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

CODE

 

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

CODE

 * 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

CODE

 

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 :

CODE

 

doSendMagicEffect(topos,14)

 

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

agora adicione isto no final

CODE

 

elsedoPlayerSendCancel(cid,"Sorry, not possible.")endreturn 1end

 

Sua action terminada deve estar assim :

CODE

 

function onUse(cid, item, frompos, item2, topos)if item.uid == 3002 thendoSummonCreature("Demon",topos)doSendMagicEffect(topos,14)elsedoPlayerSendCancel(cid,"Sorry, not possible.")endreturn 1end

 

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 :

CODE

 

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)  Força 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 magicodoSummonCreature("Dragon",topos) Ali sumona um dragon na posição do item usado ! Ele pode ser usado pra sumonar em determinada coordenada exemplo :doSummonCreature("Dragon", {x=138, y=281, z=8})

Esspecial Alavancas de Mil maneiras

1 - Removendo pedras -

Vejam o Ex:

CODE

 

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 thendoRemoveItem(getgate.uid,1)doTransformItem(item.uid,item.itemid+1)elseif item.uid == 3002 and item.itemid == 2712 and getgate.itemid == 0 thendoCreateItem(1822,1,gatepos)doTransformItem(item.uid,item.itemid-1)elsedoPlayerSendCancel(cid,"Sorry, not possible.")endreturn 1end

 

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

CODE

 

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 wink.gif

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

Vamos ver mais uma vez o exemplo

CODE

 

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 thendoRemoveItem(getgate.uid,1)doTransformItem(item.uid,item.itemid+1)elseif item.uid == 3002 and item.itemid == 2712 and getgate.itemid == 0 thendoCreateItem(1822,1,gatepos)doTransformItem(item.uid,item.itemid-1)elsedoPlayerSendCancel(cid,"Sorry, not possible.")endreturn 1end

 

Vamos Pensar o que podemos fazer ...

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

CODE

 

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 wink.gif [409 é o id da hole]

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

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

Vamos Falar de Runas e MFs

Este exemplo do Joao será nossa Base:

CODE

 

-- 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 thendoSendMagicEffect(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                        endif item2.itemid == 1 and ml <= 1 thendoSendMagicEffect(frompos,2)doPlayerSendCancel(cid,"You dont Have Magic Level to use this rune.")endif item2.itemid >= 2 thendoPlayerSendCancel(cid,"You can only use this rune in you or in players.")doSendMagicEffect(frompos,2)endreturn 1end

 

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

Se vocês testarem essa versão verã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

CODE

 

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:

CODE

 

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 :

CODE

 

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.

CODE

 

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 MudCODEif item.type > 1 then                         doChangeTypeItem(item.uid,item.type-1)                         else                             doRemoveItem(item.uid,1)                            end                        end

 

Isso remove 1 carga

CODE

 

if item2.itemid == 1 and ml <= 1 thendoSendMagicEffect(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)

CODE

 

endif item2.itemid >= 2 thendoPlayerSendCancel(cid,"You can only use this rune in you or in players.")doSendMagicEffect(frompos,2)endreturn 1end

 

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 :

CODE

 

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.")   endendreturn 1end

 

Ou senão o item :

CODE

 

doPlayerAddItem(cid,2400,1)

 

É muito facil é apenas adicionar as funções cool.gif

Agora vou falar sobre quests laugh.gif

CODE

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

CODE

 

function onUse(cid, item, frompos, item2, topos)if item.uid == (UID) thenqueststatus = getPlayerStorageValue(cid,[uID])if queststatus == -1 or queststatus == 0 thendoPlayerSendTextMessage(cid,22,"You have found an Tutorial Rox.")doSendMagicEffect(topos,12)coins_uid = doPlayerAddItem(cid,[iD Do Item],{Quantidade})setPlayerStorageValue(cid,[uID],1)elsedoPlayerSendTextMessage(cid,22,"This chest is empty.")endelseif item.uid == [uID] thenqueststatus = getPlayerStorageValue(cid,[uID])if queststatus == -1 or queststatus == 0 thendoPlayerSendTextMessage(cid,22,"You have found a Tutorial.")doSendMagicEffect(topos,12)coins_uid = doPlayerAddItem(cid,[iD do Item],{quantidade})setPlayerStorageValue(cid,[uID],1)elsedoPlayerSendTextMessage(cid,22,"This chest is empty.")endelsereturn 0endreturn 1end

 

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

Editando LvLDoors

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

CODE

 

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

CODE

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

Bom com sua porta add vamos ao script

CODE

 

function onUse(cid, item, frompos, item2, topos)doorpos = {x=frompos.x, y=frompos.y, z=frompos.z}playerpos = getPlayerPosition(cid)playerlevel = getPlayerLevel(cid)--shadowtempleif item.itemid == 1629 and doorpos.x == 265 and doorpos.y == 118 and doorpos.z == 8 thenif playerlevel > 29 thendoTeleportThing(cid,doorpos)elseif playerlevel < 30 thendoPlayerSendTextMessage(cid,22,"You need to be level 30 or higher.")end--DOMSelseif item.itemid == 1627 and doorpos.x == 133 and doorpos.y == 250 and doorpos.z == 8 thenif playerlevel > 39 thendoTeleportThing(cid,doorpos)elseif playerlevel < 40 thendoPlayerSendTextMessage(cid,22,"You need to be level 40 or higher.")endendreturn 1end

 

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

CODE

 

function onUse(cid, item, frompos, item2, topos)tilepos = {x=topos.x, y=topos.y, z=topos.z}if item2.itemid == 0 thenreturn 0endif item2.itemid == 782 and tilepos.x == 56 and tilepos.y == 49 and tilepos.z == 8 thenplayer1pos = {x=56, y=50, z=8, stackpos=253}player1 = getThingfromPos(player1pos)if player1.itemid > 0 thennplayer1pos = {x=56, y=49, z=9}doSendMagicEffect(player1pos,2)doTeleportThing(player1.uid,nplayer1pos)doSendMagicEffect(nplayer1pos,10)elsedoSendMagicEffect(frompos,2)doPlayerSendCancel(cid,"You are not in the right place!")endendreturn 1end

 

Explicando o código:

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" lá ai que entra a code do actions.xml.

CODE

 

<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

CODE

 

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

 

E por utimo como colokar o temple do player clikando tipo dando use na estatua e nasce senpre la

ex

CODE

 

newpos = {x=20, y=20, z=7}doPlayerSetMasterPos(cid,newpos)

 

e so add isso num lugar kalker de um script c vc leu tudo vai saber como e que faiz

flw

Tutorial:By Skoll

Adaptado por:Dark-X

Obrigado

Dark-X

Link para o comentário
Compartilhar em outros sites

  • 5 months later...

Legal!

Muito bom!

Mas eu queria algo do tipo, um chest (quest), com uma UniqueID, onde quem desse use no chest, ganha-se um addon.

Tem como?!

Espero uma resposta!

Link para o comentário
Compartilhar em outros sites

Oi

eu tenho uma dúvida,

nos arquivos que contém os acc eu não sei identificar o password e o acc você(s) poderia(m) me ajudar aparece mais ou menos assim:

<?xml version="1.0" ?>

- <account pass="blabla" type="1" premDays="90">

- <characters>

<character name="Goma" />

</characters>

</account>

qual é o account e qual é o password?

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

  • 1 month later...

Gostei pra caramba.

 

so tenho uma duvida sera que da pra fazer uma coisa nesse estilo:

 

quando o player clica na estatua sumona alguns bichos e aparece uma mensgem não so pra ele mais pra todos os palyers online no estilo de invasões?

 

 

to esperando a resposta ^^

Link para o comentário
Compartilhar em outros sites

×
×
  • Criar Novo...