Postado Outubro 27, 2012 12 anos 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? – É 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): 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"/>
Postado Outubro 27, 2012 12 anos Muito boa a aula Max, meus parabéns! Tópico impecável na organização e conteúdo
Postado Dezembro 8, 2012 12 anos Autor Muito boa a aula Max, meus parabéns! Tópico impecável na organização e conteúdo perfeito max, muito bom mesmo! Obrigado. Tô com vontade de fazer mais tutoriais, se alguém tiver alguma dúvida aí!
Postado Dezembro 13, 2012 12 anos 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.