Ir para conteúdo

Featured Replies

Postado
  • Este é um post popular.

Como funcionam os Scripts?

Você já deve ter se perguntado como os scripts funcionam ou não. Por exemplo: Como o servidor sabe que quando eu apertar com o botão direito em um Health Potion ele terá que healar o player alvo?

Em primeiro lugar devemos entender o que são callbacks. Do modo mais simples callback é algo que acontece devido a uma reação, é como a Terceira Lei de Newton que diz que toda ação gera uma reação, esse callback é a nossa reção, é uma função que vai ser executada assim que algo acontecer, no caso do Health Potion assim que ele for usado.

Quando um item é usado ele provoca a chamada de um callback dessa função:


function onUse(cid, item, fromPosition, itemEx, toPosition)

end

Max, que parâmetros são esses? :hum:– É simples.
cid - É o CreatureID de quem usou o item. item - É uma tabela contendo as informações do item que foi usado, em servidores 8.60 essa tabela tem a seguinte estrutura(provavelmente em versões superiores a estrutura é a mesma):
700zUt.png
fromPosition - Essa é a posição que os Potions estavam quando eu usei eles. itemEx - Se o alvo for um item vai retornar uma tabela igual à item, mas com as informações do item-alvo. Se o alvo for uma criatura, o itemEx.uid, será o CreatureID do alvo. toPosition - Retorna uma tabela da posição do alvo(Do SQM que estava na mira do Crosshair).
O Script do Health Potion ficaria +/- assim:


local config = {

min_heal = 100, -- Minimo que vai healar

max_heal = 200, -- Máximo que vai healar

empty = 7636, -- Id do Potion vazio

}


function onUse(cid, item, fromPosition, itemEx, toPosition)

if isCreature(itemEx.uid) then

doCreatureSay(cid, "Aaaah...", 19)

doSendMagicEffect(toPosition, 12)

doCreatureAddHealth(itemEx.uid, math.random(config.min_heal, config.max_heal))

doTransformItem(item.uid, config.empty)

else

doPlayerSendCancel(cid, "You cannot use this object.")

end


return true

end

Funções usadas: isCreature(uid) - Retorna um booleano, que indica se o parâmetro dado é uma criatura. doCreatureSay(uid, words, type) - Faz a criatura uid, falar as palavras que estiverem no parâmetro word, e type é o tipo da Talk. Esses são os types existentes: Types:


TALKTYPE_FIRST = 1

TALKTYPE_SAY = TALKTYPE_FIRST

TALKTYPE_WHISPER = 2

TALKTYPE_YELL = 3

TALKTYPE_PRIVATE_PN = 4

TALKTYPE_PRIVATE_NP = 5

TALKTYPE_PRIVATE = 6

TALKTYPE_CHANNEL_Y = 7

TALKTYPE_CHANNEL_W = 8

TALKTYPE_RVR_CHANNEL = 9

TALKTYPE_RVR_ANSWER = 10

TALKTYPE_RVR_CONTINUE = 11

TALKTYPE_BROADCAST = 12

TALKTYPE_CHANNEL_RN = 13

TALKTYPE_PRIVATE_RED = 14

TALKTYPE_CHANNEL_O = 15

TALKTYPE_CHANNEL_RA = 17

TALKTYPE_MONSTER = 19

TALKTYPE_MONSTER_YELL = 20

TALKTYPE_LAST = TALKTYPE_MONSTER_YELL

doSendMagicEffect(pos, id) - Manda um efeito de ID, id, na posição pos. Lista dos ids de efeito:


CONST_ME_DRAWBLOOD = 0

CONST_ME_LOSEENERGY = 1

CONST_ME_POFF = 2

CONST_ME_BLOCKHIT = 3

CONST_ME_EXPLOSIONAREA = 4

CONST_ME_EXPLOSIONHIT = 5

CONST_ME_FIREAREA = 6

CONST_ME_YELLOW_RINGS = 7

CONST_ME_GREEN_RINGS = 8

CONST_ME_HITAREA = 9

CONST_ME_TELEPORT = 10

CONST_ME_ENERGYHIT = 11

CONST_ME_MAGIC_BLUE = 12

CONST_ME_MAGIC_RED = 13

CONST_ME_MAGIC_GREEN = 14

CONST_ME_HITBYFIRE = 15

CONST_ME_HITBYPOISON = 16

CONST_ME_MORTAREA = 17

CONST_ME_SOUND_GREEN = 18

CONST_ME_SOUND_RED = 19

CONST_ME_POISONAREA = 20

CONST_ME_SOUND_YELLOW = 21

CONST_ME_SOUND_PURPLE = 22

CONST_ME_SOUND_BLUE = 23

CONST_ME_SOUND_WHITE = 24

CONST_ME_BUBBLES = 25

CONST_ME_CRAPS = 26

CONST_ME_GIFT_WRAPS = 27

CONST_ME_FIREWORK_YELLOW = 28

CONST_ME_FIREWORK_RED = 29

CONST_ME_FIREWORK_BLUE = 30

CONST_ME_STUN = 31

CONST_ME_SLEEP = 32

CONST_ME_WATERCREATURE = 33

CONST_ME_GROUNDSHAKER = 34

CONST_ME_HEARTS = 35

CONST_ME_FIREATTACK = 36

CONST_ME_ENERGYAREA = 37

CONST_ME_SMALLCLOUDS = 38

CONST_ME_HOLYDAMAGE = 39

CONST_ME_BIGCLOUDS = 40

CONST_ME_ICEAREA = 41

CONST_ME_ICETORNADO = 42

CONST_ME_ICEATTACK = 43

CONST_ME_STONES = 44

CONST_ME_SMALLPLANTS = 45

CONST_ME_CARNIPHILA = 46

CONST_ME_PURPLEENERGY = 47

CONST_ME_YELLOWENERGY = 48

CONST_ME_HOLYAREA = 49

CONST_ME_BIGPLANTS = 50

CONST_ME_CAKE = 51

CONST_ME_GIANTICE = 52

CONST_ME_WATERSPLASH = 53

CONST_ME_PLANTATTACK = 54

CONST_ME_TUTORIALARROW = 55

CONST_ME_TUTORIALSQUARE = 56

CONST_ME_MIRRORHORIZONTAL = 57

CONST_ME_MIRRORVERTICAL = 58

CONST_ME_SKULLHORIZONTAL = 59

CONST_ME_SKULLVERTICAL = 60

CONST_ME_ASSASSIN = 61

CONST_ME_STEPSHORIZONTAL = 62

CONST_ME_BLOODYSTEPS = 63

CONST_ME_STEPSVERTICAL = 64

CONST_ME_YALAHARIGHOST = 65

CONST_ME_BATS = 66

CONST_ME_SMOKE = 67

CONST_ME_INSECTS = 68

CONST_ME_DRAGONHEAD = 69

CONST_ME_NONE = 255

CONST_ME_LAST = CONST_ME_DRAGONHEAD

doCreatureAddHealth(uid, amount) - Adiciona amount de health à criatura uid. math.random(interval1, interval2) - Pega um número aleatório entre interval1 e interval2. doTransformItem(uid, newid) - Muda o id do item uid, para newid.
Bem, esse aí é o script, agora só é você salvar, colocar na sua pasta actions/scripts e pronto! – Max, se existem vários scripts na pasta actions/scripts, como meu OT sabe qual usar? – Por causa das chamadas TAGs. TAGs? – Sim, é uma linha que é colocada no .xml para dizer ao seu servido que o Callback para um item x será a função daquele script. As Tags das actions seguem esse modelo:

<action itemid = "7618" event = "script" value = "HealthPotion.lua" />

itemid - É o id do item, que ao ser usado o callback dele vai ser o script que está em value, no caso HealthPotion.lua event - Indica o que vai acontecer quando usar o item, no caso vai ler o script. Não precisa se preocupar com isso por enquanto. value - É o nome do script que tem o callback que você quer usar no item 7618
Exercício: Crie uma Action que quando eu usar uma Warlord Sword em alguém essa pessoa diga "Aí, isso doi". Poste a TAG também! Resposta SÓ ABRA DEPOIS DE RESOLVER:

É isso aí pessoal, essa foi a primeira aula de Scriptwriting que eu escreví, espero que gostem :3



function onUse(cid, item, fromPosition, itemEx, toPosition)

   if isCreature(itemEx.uid) then

      doCreatureSay(itemEx.uid, "Aí isso doi", 1)         

   end


   return true

end

Tag:

<action itemid = "2408" event = "script" value = "Warlord.lua"/>

  • Respostas 8
  • Visualizações 2.5k
  • Created
  • Última resposta

Top Posters In This Topic

Most Popular Posts

  • Como funcionam os Scripts? Você já deve ter se perguntado como os scripts funcionam ou não. Por exemplo: Como o servidor sabe que quando eu apertar com o botão direito em um Health Potion

  • Muito boa a aula Max, meus parabéns! Tópico impecável na organização e conteúdo

  • Obrigado. Tô com vontade de fazer mais tutoriais, se alguém tiver alguma dúvida aí!

  • 1 month later...
Postado

Opa... tenho uma dúvida...

Mas é bem especifica, na verdade é sobre o Tibiabot ng, tem algum modo de carregar os scripts todos de uma vez, ou até mesmo, juntar todos os scripts em um só arquivo???

Sei que não é o local ideal para essa pergunta, portanto, não precisa responder... quando chegar em casa vou testar alguma maneira para fazer isso...

é muito chat ochegar abrir o bot e ficar dando load/run em todos os scripts(por enquanto são 10)

Participe da conversa

Você pode postar agora e se cadastrar mais tarde. Se você tem uma conta, faça o login para postar com sua conta.

Visitante
Responder

Quem Está Navegando 0

  • Nenhum usuário registrado visualizando esta página.

Estatísticas dos Fóruns

  • Tópicos 96.9k
  • Posts 519.6k

Informação Importante

Confirmação de Termo