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