Ir para conteúdo

Tutorial De Actions


Imperi

Posts Recomendados

Tutorial de Actions!

Em primero lugar vamos criar um Script Passo a Passo para pegar o geito!

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

Bom , Aconselho sempre começar sua action com:

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

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

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 :

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

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 :

doSendMagicEffect(topos,14)

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

agora adicione isto no final

else

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

end

return 1

end

Sua action terminada deve estar assim :

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 :

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 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 e use bastantes ações em uma só action !

Continuando ...

Especial Alavancas de Mil maneiras

1 - Removendo pedras -

Vejam o Ex(By Peonso) :

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

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

-Apartir daqui , não da pra usar mais o Quote parece que já atingi o limite ..

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

Vamos ver mais uma vez o exemplo do peonso :

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 :

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ês entenderam como usar as alavancas ...

Vamos Falar de Runas e MFs

Este exemplo do Joao será nossa Base:

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

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 :

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.

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

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)

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 :

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 :

doPlayerAddItem(cid,2400,1)

É muito facil é apenas adicionar as funções

Agora vamos fazer uma runa pelas Spells só pra animar (sei que não é action mas...)

Va na pasta spells/runes

crie um arquivo.lua com nome de SkollBomb

abra ele

Em Primero Lugar a area

area = {

{1, 1, 1, 1, 1},

{1, 1, 1, 1, 1},

{1, 1, 1, 1, 1}

}

attackType = ATTACK_PHYSICAL

needDirection = false

areaEffect = NM_ME_EXPLOSION_AREA

animationEffect = NM_ANI_FIRE

Os Tipos de ataque e as animações e se precisa de direção.

hitEffect = NM_ME_EXPLOSION_DAMAGE

damageEffect = NM_ME_DRAW_BLOOD

animationColor = 193

offensive = true

drawblood = true

Aqui temos os Efeitos do Demage a cor o sangue

ExplosionObject = MagicDamageObject(attackType, animationEffect, hitEffect, damageEffect, animationColor, offensive, drawblood, 0, 0)

No caso retirei da explosion é tudo citado acima que será resumido (eu acho :p)

function onCast(cid, creaturePos, level, maglv, var)

centerpos = {x=creaturePos.x, y=creaturePos.y, z=creaturePos.z}

ExplosionObject.minDmg = (level * 1 + maglv *1) * 3.5

ExplosionObject.maxDmg = (level * 1 + maglv *1) * 2.1

return doAreaMagic(cid, centerpos, needDirection, areaEffect, area, ExplosionObject:ordered())

end

Quanto demage vai dar (Minha formula ta dando muitooo) e efeito da area e o end.

Adicionem no Spells.xml

<rune name="Light Magic Missle" id="3112" charges="5" maglv="0" mana="0" enabled="1"></rune>

testem agr

Agora vou falar sobre quests

Bom se você usa YourOts é muito facil

-- 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 (Se não fosse ele eu não estaria aqui) :

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

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

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

Bom com sua porta add vamos ao script do peonso

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

Bom se alguem tiver alguma duvida nesse ponto poste aki!

Picks System ( Creditos de Thotth )

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 Too

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.

<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

Pessoal queria agradecer ao Thotth por conceder esse tuto , Thotth muito responsa e gente fina - Vlw Brow

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

Cid -O player que da o use no item.

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

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

Manual do GriZzm0 no qual este topico foi baseado. (inglês)

Font [Retirado].

f

u

i

Link para o comentário
Compartilhar em outros sites

Imperi..eu tava vendo esse tutorial hj de manha..heuheuheue...ve lá na seção de actions que eu tentei fzr uma action..mas nao funcionou =/

ps: Coloca os créditos do Skoll tb...

Link para o comentário
Compartilhar em outros sites

Sinceramente eu num peguei do skoll, eu peguei esse tutorial naquele site, tanto que eu coloquei lah embaixo Senhor GM ROTCIV.

Porem, nao era o nome dele q estava lah, era outro.

Porem nao me lembro, soh coloquei a fonte q peguei de lah.

Desculpe eu peguei daquele site, que num eh permitido coloca aqui, e pelo fato de que, aqui nesse site na havia nenhum desses tutoriais tao detalhado como esse.

Espero q me entenda, nao quero os meritos pra mim, nem ligo.

Porem quero apenas que o site avance cada ve mais, quero q qm vier procurar algo aqui, sempre encontre !!!

f

u

i

i

Link para o comentário
Compartilhar em outros sites

Obrigado, por todos que aqui leem meus tutoriais, notem que nao faço isso por mim, e sim pelo XTIBIA, e pelas pessoas que aqui comentam.

Tanto que ajudo todos aqui.

Obrigado.

Eu tbm achei otima esse tuto... tanto que ateh agora eu to tentando faze uma action.

Quero ser scripter !!

Dificil ?????

Naooooo.... imagina !!!

To me fudendo aqui, pra tenta faze uma

f

u

i

Link para o comentário
Compartilhar em outros sites

Sinceramente eu num peguei do skoll, eu peguei esse tutorial naquele site, tanto que eu coloquei lah embaixo Senhor GM ROTCIV.

Porem, nao era o nome dele q estava lah, era outro.

Porem nao me lembro, soh coloquei a fonte q peguei de lah.

Desculpe eu peguei daquele site, que num eh permitido coloca aqui, e pelo fato de que, aqui nesse site na havia nenhum desses tutoriais tao detalhado como esse.

Espero q me entenda, nao quero os meritos pra mim, nem ligo.

Porem quero apenas que o site avance cada ve mais, quero q qm vier procurar algo aqui, sempre encontre !!!

f

u

i

i

 

 

 

fmza mano...só disse pra por do skoll pq ele que coloco lá...mas to nem ai...só sei que acho esse tuto rox d+

só tipo...da uma arrumada nele..coloca as TAGS CODES pra fikar melhor de lê como ta no outro.. ;)::P:

Link para o comentário
Compartilhar em outros sites

O Tutorial está excelente, pena que não foi voce que fez 100%

Mas mesmo assim ele é bastante importante então vou deixá-lo aqui em avaliações até todos esclarecerem dúvidas.

Atenciosamente,

Rafix

Link para o comentário
Compartilhar em outros sites

Vlw,

e nao fui eu qm fiz mesmo.

pq eu to tentando faze uma actions com ele tbm, adorei.

e Espero que nao soh eu veja mas tbm muitas outras passem por aqui e veja, e que rende bastante este TUTO.

Abraço ai, sorte pra ti KNOX.

f

u

i

i

Link para o comentário
Compartilhar em outros sites

×
×
  • Criar Novo...