Ola pessoal,
demorou pra sair esta segunda parte, querem saber porque?
naum interessa porque >=(
Neste tópico eu vou falar mais sobre os comandos existentes de actions (talvez não todos, mas grande parte deles) e sobre stackpos
este tutorial vai ser util para os próximos tutos para sabermos o que significam cada comandos sem eu precisar explicar muito
CRÉDITOS: Frerety (estou usando sua lista de comandos)
Link para a lista dele: http://www.xtibia.com/forum/index.php?showtopic=13854
///entrem nesse link para dizer o que acharam da lista dele (eu achei muito boa por isso estou usando neste tópico) vlws
vamos começar:
As actions têm comandos DO e GET com exeção para um que é SET, "do" seguinifica (fazer) por issu é ele ke vai fazer uma ação, "get" significa (obter) então estes comandos ajudarão muito para a formação de actions perfeitas. As actions alem de parecerem em si muito simples (é simples) voce pode fazer milhares de coisas aproveitando tudo a sua volta, no final deste tutorial ensinarei como aproveitar um pouco de uma maneira que eu nunca vejo as pessoas aproveitarem.
Nesta aula eu farei dois exercicios simples no final, sobre o assunto tratado, esta aula vai ser mais informativa sobre comandos e stackpos porque daki pra frente eu naum vou ficar dizendo o que cada comando faz.
///////////////////////////////////////////////////////////////////////////////////////////
nota: uid significa "alguma coisa" por exemplo, item2.uid, item.uid, cid. ou até usando variaveis: pos.uid
/////////DO LIST\\\\\\\\\
doChangeTypeItem
sintaxe => doChangeTypeItem(uid,novo_tipo)
ação => Muda o tipo de um item por exemplo em runas com cargas.
exemplo:
-- Remove 1 carga de uma runa (item.uid)
doChangeTypeItem(item.uid,item.type-1)
doCreateItem
sintaxe => doCreateItem(itemid,quantidade_ou_cargas,position)
ação => Cria um item com um certo numero de cargas(runas) ou quantidade na posição selecionada.
exemplo:
-- Cria uma uh de 99x na posição selecionada(topos).
doCreateItem(2273,99,topos)
doDecayItem
sintaxe => doDecayItem(uid)
ação => Começar o tempo de "volta" para o item anterior.
exemplo1:
-- Iniciar o tempo de "volta" para o item anterior.
doDecayItem(item.uid)
exemplo2:
-- Exemplo (machete) doDecayItem().
function onUse(cid, item, frompos, item2, topos)
if item2.itemid == 2782 then
doTransformItem(item2.uid,item2.itemid-1)
doDecayItem(item2.uid)
else
return 0
end
return 1
end
doPlayerAddHealth
sintaxe => doPlayerAddHealth(uid,health)
ação => Remove Life do player quando e negativo caso contrario aumenta o life.
exemplo1:
-- Adiciona 100 de life ao player quando ele usar o objeto.
doPlayerAddHealth(cid,100)
exemplo2:
-- Remove 100 de life do player quando ele usar o objeto.
doPlayerAddHealth(cid,-100)
OBS => Por mais que você tire life do player com essa action, o player não morre, ele sempre fica com 1 de life
exemplo3:
-- Um player tem 100 de life
doPlayerAddHealth(cid,-200)
-- aki ele ficará com 1 de life, não morrerá
doPlayerAddItem
sintaxe => doPlayerAddItem(uid,itemid,Carga _ou_quantidade)
ação => Cria um item no inventario do player se possível caso contrario, embaixo dele.
exemplo1:
-- Dar uma magic Sword Para o player.
doPlayerAddItem(cid,2400,1)
exemplo2:
-- Quest chest
if item.uid == 5002 then
queststatus = getPlayerStorageValue(cid,5000)
if queststatus == -1 then
doPlayerSendTextMessage(cid,22,"You have found a magic sword.")
doPlayerAddItem(cid,2400,1)
setPlayerStorageValue(cid,5000,1)
else
doPlayerSendTextMessage(cid,22,"The chest is empty.")
end
end
doPlayerAddMana
sintaxe => doPlayerAddMana(uid,mana)
ação => Remove Mana do Player caso seja valor negativo e adiciona caso seja positivo
exemplo1:
-- Adiciona 100 de mana para o player quando ele usar o objeto.
doPlayerAddMana(cid,100)
exemplo2:
-- Remove 100 de mana quando o player usar o objeto
doPlayerAddMana(cid,-100)
doPlayerAddSkillTry
sintaxe => doPlayerAddSkillTry(uid,skillid,numero)
ação => Adiciona uma Try de skill ao player, quando try e um hit q o player de em um monstro por exemplo.
lista:
0, Fist.
1, Club.
2, Sword.
3, Axe.
4, Distance.
5, Shielding.
6, Fishing.
exemplo1:
-- Adiciona 5 "tryes" de fist ao player.
doPlayerAddSkillTry(cid,0,5)
exemplo2:
-- Fishing com skills up
function onUse(cid, item, frompos, item2, topos)
if item2.itemid == 618 then
fishingskill = getPlayerSkill(cid,6)
formula = fishingskill /200+0.85* math.random()
if formula > 0.65 then
doTransformItem(item2.uid,619)
doDecayItem(item2.uid)
doSendMagicEffect(topos,1)
doPlayerAddSkillTry(cid,6,2)
doPlayerAddItem(cid,2667,1)
else
doSendMagicEffect(topos,1)
doPlayerAddSkillTry(cid,6,1)
end
elseif item2.itemid == 619 or item2.itemid == 620 then
doSendMagicEffect(topos,1)
end
return 1
end
doPlayerFeed
sintaxe => doPlayerFeed(uid,food)
ação => Adiciona um tempo em segundos em que o player recuperara life e mana(comida)
exemplo1:
-- Adicionar um tempo de 120 segundos.
doPlayerFeed(cid,120)
exemplo2:
-- Food script
function onUse(cid, item, frompos, item2, topos)
max_food = 1024
if item.itemid == 2667 then
food = 120
elseif item.itemid == 2671 then
food = 240
end
if getPlayerFood(cid) + food > max_food then
doPlayerSendCancel(cid,"You are full.")
else
doPlayerFeed(cid,food)
doRemoveItem(item.uid,1)
end
return 1
end
doPlayerRemoveItem
sintaxe => doPlayerRemoveItem(uid,itemid,count)
ação => Remove um item do inventario do player
exemplo:
-- Remove um item de id 2400 do inventório do player
doPlayerRemoveItem(cid,2400,1)
doPlayerRemoveMoney
sintaxe => doPlayerRemoveMoney(uid,money)
ação => Remove um valor X de dinheiro do player
exemplo:
-- Remove 100 gold from the players inventory.
doPlayerRemoveMoney(cid,100)
doPlayerSay
sintaxe => doPlayerSay(uid,text,type)
ação => Faz o player falar uma msg.
exemplo:
-- Enviar uma msg normal.
doPlayerSay(cid,"Hello world!",2)
doPlayerSendCancel
sintaxe => doPlayerSendCancel(uid,text)
ação => Envia a msg branca embaixo da tela( You cannot use this object)
exemplo:
-- Envia uma msg escrita Desculpe mas isso n e possível.
doPlayerSendCancel(cid,"desculpe mas isso n e possível.")
doPlayerSendTextMessage
sintaxe => doPlayerSendTextMessage(uid,MessageClasses,message)
ação => Envia diferentes tipos de mensagem ao player.
exemplo:
-- SEnvia uma msg verde no meio da tela para o player.
doPlayerSendTextMessage(cid,22,"Hello world!")
doPlayerSetMasterPos
sintaxe => doPlayerSetMasterPos(uid,pos)
ação => Seta uma nova MasterPos (posição do templo) ao player.
exemplo:
-- Posição do novo templo
newpos = {x=20, y=20, z=7}
-- atualizar a posição.
doPlayerSetMasterPos(cid,newpos)
doPlayerSetVocation
sintaxe => doPlayerSetVocation(uid,voc)
ação => Setar uma nova Vocação ao player.
lista:
1, Sorcerer.
2, Druid.
3, Paladin.
4, Knight.
exemplo:
-- Mudar a vocaçao do player para 1.
doPlayerSetVocation(cid,1)
doRemoveItem
sintaxe => doRemoveItem(item_id,numero)
ação => Remover items, so e possivel remover um por tile(exemplo 40 bolts e etc).
exemplo:
-- Remover 5 items dessa posiçao. (Power bolts etc)
doRemoveItem(item.uid,5)
doSendMagicEffect
sintaxe => doSendMagicEffect(position,type)
ação => Fazer um efeito magico.
exemplo:
-- Enviar efetosinhu de fumaça para a posiçao(topos).
doSendMagicEffect(topos,2)
doSetItemActionId
sintaxe => doSetItemActionId(uid,actionid)
ação => Indicar o action id de um item.
exemplo1:
-- Colocar actionID 5020 no item.
doSetItemActionId(item.uid,5020)
exemplo2:
-- Exemplo em loot de quest
function onUse(cid, item, frompos, item2, topos)
if item.uid == 5020 then
queststatus = getPlayerStorageValue(cid,5020)
if queststatus == -1 then
doPlayerSendTextMessage(cid,22,"You have found a silver key.")
key = doPlayerAddItem(cid,2088,1)
doSetItemActionId(key,5020)
setPlayerStorageValue(cid,5020,1)
else
doPlayerSendTextMessage(cid,22,"It is empty.")
end
end
return 1
end
doSetItemSpecialDescription
sintaxe => doSetItemSpecialDescription(uid,description)
ação => Colocar um descrição especial em um item de quest por exemplo.
exemplo1:
-- Colocar uma descrçao especia no item quando o mesmo for usado.
doSetItemSpecialDescription(item.uid,"Hello world!")
exemplo2:
-- exemplo em quest
function onUse(cid, item, frompos, item2, topos)
if item.uid == 3000 then
queststatus = getPlayerStorageValue(cid,3000)
if queststatus == -1 then
doPlayerSendTextMessage(cid,22,"You have found a pair of magic boots.")
boots = doPlayerAddItem(cid,2640,1)
doSetItemActionId(boots,3000)
doSetItemSpecialDescription(boots, "This boots are magical.")
setPlayerStorageValue(cid,3000,1)
else
doPlayerSendTextMessage(cid,22,"It is empty.")
end
end
return 1
end
doSetItemText
sintaxe => doSetItemText(item.uid,"texto") --- para usar a função da tecla "enter" escrever \n
ação => Adiciona um texto a um objeto
exemplo:
doSetItemText(item.uid,"aew\neste livro tem texto.") -- Aparecerá:
aew
este livro tem texto.
doShowTextWindow
sintaxe => doShowTextWindow(item.uid,numero_de_letras,editavel) ---- nu editavel é 0 para não poder alterar e 1 para poder alterar
ação => Abre uma janela com o texto que está setado em um objeto
exemplo:
doShowTextWindow(item.uid,500,1) --- este sera editavel com direito a 500 caracteres
doSendAnimatedText
sintaxe => doSendAnimatedText(position,text,color)
ação => Fazer um efeito animado no client do tibia. (Semelhante a perder hp ou ganhar exp)
exemplo:
-- Mandar um efeito em vemelho escrito 100.
doSendAnimatedText(frompos,100,180)
doSummonCreature
sintaxe => doSummonCreature("nome", posiçao)
ação => Sumonar uma criatura.
exemplo:
-- Summonar um demon para a posição na qual o item foi usado.
doSummonCreature("Demon",topos)
doTeleportThing
sintaxe => doTeleportThing(uid,newpos)
ação => Teleportar um item/player para uma nova posição
exemplo1:
-- Teleportar o player para a posição q o item foi usado.
doTeleportThing(cid,topos)
exemplo2:
-- Teleportar player
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
doTransformItem
sintaxe => doTransformItem(uid,toitemid)
ação => Transformar um item em outro
exemplo1:
-- Trasformar o item usado no item 2400.
doTransformItem(item.uid,2400)
exemplo2:
-- Ex. alavanca
function onUse(cid, item, frompos, item2, topos)
if item.itemid == 1946 then
doTransformItem(item.uid,item.itemid-1)
elseif item.itemid == 1945 then
doTransformItem(item.uid,item.itemid+1)
end
return 1
end
/////////GET LIST\\\\\\\\\
getPlayerAccess
sintaxe => getPlayerAccess(uid)
ação => Pegar o Access do Player.
exemplo1:
-- Pegar o nível de aceso do player.
getPlayerAccess(cid)
exemplo2:
-- Apenas players de access 1 ou + podem usar o item
function onUse(cid, item, frompos, item2, topos)
if getPlayerAccess(cid) >= 1 then
doTransformItem(item.uid,2400)
else
doPlayerSendCancel(cid,"Sorry, not possible.")
end
return 1
end
getPlayerFood
sintaxe => getPlayerFood(uid)
ação => Pega o status da food do player
exemplo:
-- Pegar o status da food do player
getPlayerFood(cid)
getPlayerGuildId
sintaxe => getPlayerGuildId(uid)
ação => Pega o id da guild do player.
exemplo:
-- Pegar o id da quild do player
getPlayerGuildId(cid)
getPlayerHealth
sintaxe => getPlayerHealth(uid)
ação => Pegar a quantidade de life do player.
exemplo:
-- Pega o life do player para alguma ação(se a vida for maior ou igual a 500, no caso abaixo)
if getPlayerHealth(cid) >= 500 then
getPlayerLevel
sintaxe => getPlayerLevel(uid)
ação => Pega o level do player
exemplo:
-- Pegar o level do player para acontecer algo se o lvl for maior q 30.
if getPlayerLevel(cid) >= 30 then
getPlayerMagLevel
sintaxe => getPlayerMagLevel(uid)
ação => Pega o ML do Player
exemplo:
-- Pegar o ml do player.
getPlayerMagLevel(cid)
getPlayerMana
sintaxe => getPlayerMana(uid)
ação => Pega a mana atual do player(não a completa)
exemplo:
-- Pegar o valor atual da mana.
getPlayerMana(cid)
getPlayerMasterPos
sintaxe => getPlayerMasterPos(uid)
ação => Pegar a MasterPos do player (posição do templo)
exemplo:
-- Pegar a MasterPos do Player.
getPlayerMasterPos(cid)
getPlayerName
sintaxe => getPlayerName(uid)
ação => Pega o nome do Player
exemplo:
-- Pegar o nome do Player.
getPlayerName(cid)
getPlayerPosition
sintaxe => getPlayerPosition(uid)
ação => Pega posição atual do Player
exemplo:
-- Pegar a posição atual do Player.
getPlayerPosition(cid)
getPlayerSkill
sintaxe => getPlayerSkill(uid,skillid)
ação => Pega o skill atual do Player
lista:
0, Fist
1, Club
2, Sword
3, Axe
4, Distance
5, Shielding
6, Fishing
exemplo:
-- Pegar o skill de fist do Player.
getPlayerSkill(cid,0)
getPlayerStorageValue
sintaxe => getPlayerStorageValue(uid,valueid)
ação => Pegar o "Storage Value" do player(usado em quests, vide exemplo)
exemplo1:
-- Obter a informçao da quest 5000.
getPlayerStorageValue(cid,5000)
exemplo2:
-- Exemplo do getPlayerStorageValue() (num baú de quest).
if item.uid == 5002 then
queststatus = getPlayerStorageValue(cid,5000)
if queststatus == -1 then
doPlayerSendTextMessage(cid,22,"You have found a magic sword.")
doPlayerAddItem(cid,2400,1)
setPlayerStorageValue(cid,5000,1)
else
doPlayerSendTextMessage(cid,22,"The chest is empty.")
end
end
setPlayerStorageValue
sintaxe => setPlayerStorageValue(uid,valueid, newvalue)
ação => Atualizar o numero do Storage Value
exemplo1:
-- Mudar o StorageValue da quest n° 5000 para 1.
setPlayerStorageValue(cid,5000,1)
exemplo2:
-- Exemplo do setPlayerStorageValue() em um baú de quest
if item.uid == 5002 then
queststatus = getPlayerStorageValue(cid,5000)
if queststatus == -1 then
doPlayerSendTextMessage(cid,22,"You have found a magic sword.")
doPlayerAddItem(cid,2400,1)
setPlayerStorageValue(cid,5000,1)
else
doPlayerSendTextMessage(cid,22,"The chest is empty.")
end
end
getPlayerVocation
sintaxe => getPlayerVocation(uid)
ação => Pega a Vocação do Player
exemplo:
-- Obter a Vocação do Player.
getPlayerVocation(cid)
getThingfromPos
sintaxe => getThingfromPos(pos)
ação => Seleciona um item que está na posição especificada
exemplo1:
-- Adquirir informações da posiçao.
geti = getThingfromPos(topos)
exemplo2:
-- Checar se o uniqueID do item q esta na posição e 5000.
if geti.uid == 5000 then
code
end
getTilePzInfo
sintaxe => getTilePzInfo(pos)
ação => Retorna 1 se o tile for PZ e 0 se não for PZ
PZ => Protection zone (templos, dps, houses)
exemplo1:
-- Checar se o Tile e pz.
getTilePzInfo(topos)
exemplo2:
-- Exemplo do getTilePzInfo() num simples script de remoçao
-- A action funciona só se o player estiver fora d um pz
function onUse(cid, item, frompos, item2, topos)
if getPlayerMagLevel(cid) >= 4 then
ipos = {x=topos.x, y=topos.y, z=topos.z, stackpos=255}
geti = getThingfromPos(ipos)
if geti.itemid > 0 then
if getTilePzInfo(topos) == 0 then
doSendMagicEffect(topos,2)
doRemoveItem(geti.uid,100)
if item.type > 1 then
doChangeTypeItem(item.uid,item.type-1)
else
doRemoveItem(item.uid,1)
end
else
doSendMagicEffect(frompos,2)
doPlayerSendCancel(cid,"This action is not allowed in protection zone.")
end
else
doSendMagicEffect(frompos,2)
return 0
end
else
doSendMagicEffect(frompos,2)
doPlayerSendCancel(cid,"You don't have the required magic level to use that rune.")
end
return 1
end
/////////////////////////////////////////////////////////////////////////////////////////
/////////////////Action de Verficação de cores de letras////////////////////
////////////////////////////////////////////////////////////////////////////////////////
Esta action serve para voce descobrir as cores para letras
funciona para os seguintes comandos:
doPlayerSay
doPlayerSendTextMessage
doSendAnimatedText
ta ai para os 3 tipos:
---------Tester by Colex----------function onUse(cid, item, frompos, item2, topos)max = 24 ----vai testar até este numerotipo = 0 ----vai testar desde este numero + 1 (leia bem istu +1) neste caso começa no 1grupo = 2 -----1 = doPlayerSay, 2 = doPlayerSendTextMessage, 3 = doSendAnimatedTextrepeattipo = tipo + 1if grupo == 1 then doPlayerSay(cid,"Tipo: "..tipo.."",tipo)elseif grupo == 2 then doPlayerSendTextMessage(cid,tipo,"Tipo: "..tipo.."")elseif grupo == 3 then doSendAnimatedText(frompos,"Tipo: "..tipo.."",tipo)enduntil tipo == maxreturn 1end
se der algum debug é porque um tipo de letra entre tipo e max naum existe
////////////////////////////////////////////////////////////////////////////////////////
StAcK PoS
um tile costuma ser o stackpos 0 e os items em cima stackpos 1
se vc se eskecer de colocar um tile e colocar uma parede e tentar remover ela como stackpos 1 naum vai funcionar pq ela estara nu stackpos 0
por exemplo uma rune em cima de otra rune que esta em cima de um tile, a rune de baixu vai ser stackpos 2 e a de cima vai ser 1. (vem por ordem de cima para baixo)
caso seja um balcão em cima de um tile e em cima dele uma alavanca, essa alavanca vai ser stackpos 2 e o balcão stackpos 1
se tiver 7 items em cima do balcão, começa a contar du topo 2 até u ultimo item que neste caso (7º) seria 8 porque começou a contar do 2. e u balcão continua sendo o 1
stackpos 253 é para criaturas
stackpos 254 para fields
stackpos 255 para items e coisas móveis (pega até items em cima de balcões por ordem do mais acima ao mais abaixo)
stackpos 1, 2, 3 é dependendu da posição (como explicado em cima)
esta parte pode originar duvidas por isso caso alguma coisa perguntem ai, dependendo das perguntas eu poderei adicionar mais explicações aqui
///////////////////////////////////////////////////////////////////////////////////////////
Aproveitando o Mundo em Sua Volta
Como é a action?
É uma door que quando voce passa ela, ela diz quantas vezes passaram por la e quantas pessoas (se eu passar duas vezes só vai contar uma).
Mas como a door vai saber isso?
Muito simples, a door vai ter paredes ao lado, vamos aproveitar o actionid da door para as vezes que passaram a door e vamos aproveitar a parede para ver quantas pessoas passaram.
Imagem da Action:
action here:
function onUse(cid, item, frompos, item2, topos)wallpos = {x=545, y=524, z=7, stackpos=1}wall = getThingfromPos(wallpos)verificar = getPlayerStorageValue(cid,1543)if item.actionid >= 1001 and wall.actionid >= 1001 then doSetItemActionId(item.uid,item.actionid+1) if verificar < 1 then doSetItemActionId(wall.uid,wall.actionid+1) setPlayerStorageValue(cid,1543,1) end vezes = item.actionid - 1000 pessoas = wall.actionid - 1000 doPlayerSendTextMessage(cid,22,"Ja passaram por aqui "..vezes.." vezes, "..pessoas.." pessoas diferentes.") doTeleportThing(cid,topos)else doSetItemActionId(item.uid,1001) doSetItemActionId(wall.uid,1001) setPlayerStorageValue(cid,1543,1) doPlayerSendTextMessage(cid,22,"Voce foi a primeira pessoa que passou por aqui.") doTeleportThing(cid,topos)endreturn 1end
Vai ser sempre resetado, mas é só um exemplode como aproveitar o que esta em sua volta. :icon1:
com esse tipo de aproveitamento voce pode fazer grandes scripts
//////////////////////////////////////////////////////////////////////////////////////////
EXERCÍCIOS
aceitarei respostas para os exercícios por pm até o dia: 1 de Junho (eu direi se ta correto)
SE FAZ FAVOR NÃO POSTEM AS RESPOSTAS PARA OS EXERCÍCIOS NESTE TÓPICO
o 1º a me enviar a resposta correta (não precisa ser das duas) por pm terá o DIREITO (ou seja, só se quiser) de me pedir 2 action pelo primeiro exercicio e 3 pelo segundo para o seu ot só para ele. (eu não liberarei, só se a pessoa quiser)
1º Exercício:
- aff, minha action não esta funcionando pessoal, voces podem ver se tem algum erro para mim? a action é o seguinte:
é uma rune que quando uso ela em um cara aparece um animated text nele, a rune perde uma carga, o cara perde 500 de hp e o cara que usou a rune perde 100 de mana (tambem quero que não de para usar em GM access 3 ou mais):
function onUse(cid, item, frompos, item2. topos)if item2.itemid == cid then -----Pista isto não esta errado if getPlayerAccess(cid) >= 3 then doSendAnimatedText(180,"OMG",topos) doPlayerAddHealth(cid,500) doPlayerAddMana(item2.uid,-100) else doPlayerSendCancel(cid,"Voce não pode usar esta rune em GM") endelsereturn 0return 1end
- valeu, espero que me ajudem.
2º Exercício
- aew, to precisando de uma action e pelo que eu vi voce percebe do assunto, queria uma action que voce colocasse uma rapier em cima de um balcão ai eu ia para cima de um tile (numa certa posição) e puxava a alavanca, verificaria se o item esta la e se estivesse eu seria teleportado para uma outra posição e u item desaparecia e aparecia uma msg verde na minha tela "Voce foi Teleportado para a Sala do Panico" ((ñ é preciso fazer a alavanca se mexer), espero que voces me façam esse favor
vlw pessoal.
//////////////////////////////////////////////////////////////////////////////////////
Não postem as respostas para os exercícios, tentem não pedir ajuda para resolve-lo pois é para voce aprender e isto não é uma competição
Postem suas duvidas e se encontrarem algum erro no tutorial avisem (não erros do exercício)
Cya~~