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