Ir para conteúdo
MaXwEllDeN

Como funcionam os scripts?

Posts Recomendados

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

Please login or register to see this link.

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.

NOTA: Seu OT possui várias criaturas, para seu servidor, todas as criaturas são representadas por um Número Único(Não é possível ter duas criaturas com o mesmo UniqueID(UID)). Esse número nunca é o mesmo, sempre que você loga no servidor ele muda, e é um número geralmente gigante, do tipo 11789789. Para o programador não é necessário conhecer o número, só saber que ele é representado na maioria das vezes pelo cid(CreatureID).


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):

item = {actionid = 0, uid = 70000, itemid = 7618, type = 18}
Onde actionid é a actionid do item.

uid é o UniqueID do item, é parecido com o CreatureID das criaturas, só muda que ele serve para identificar itens, não criaturas, mas a ideia dele é a mesma, ele serve para identificar um item entre todos os itens que tem no seu servidor.

itemid é o id do item que foi usado, no caso um Health Potion.

type - Ele indica a quantidade de itens que tem no grupo que foi usado. Nesse caso eu tinha 18 Health Potions.

 



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:

Please login or register to see this spoiler.



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

Compartilhar este post


Link para o post
Compartilhar em outros sites
function onUse(cid, item, frompos, item2, topos)

if isCreature(itemEx.uid) then
doCreatureSay(itemEx.uid, "Aí, isso doi") then

end

return true
end

Editado por AlexandreGiacobo

Compartilhar este post


Link para o post
Compartilhar em outros sites

 

 


Muito bom Max!
Essa aula com certeza, abre a mente das pessoas
que querem fazer scripts.
Parabéns!
Abraços.


Obrigado ^^.

 


Ótimo tutorial Max.

Please login or register to see this spoiler.



Quase certo, mas dá uma olhada. No seu script, o alvo do item está sendo chamado de item2. Tem duas soluções para o seu problema. Ou você muda o nome da variável para itemEx, ou usa item2 no lugar de itemEx.

Mudando o nome da variável para itemEx:

Antes:

function onUse(cid, item, frompos, item2, topos)
if isCreature(itemEx.uid) then
doCreatureSay(itemEx.uid, "Aí, isso doi") then
end
return true
end



Depois:

function onUse(cid, item, frompos, itemEx, topos)
if isCreature(itemEx.uid) then
doCreatureSay(itemEx.uid, "Aí, isso doi")
end
return true
end

Usando item2 no lugar de itemEx:

Antes:

function onUse(cid, item, frompos, item2, topos)
if isCreature(itemEx.uid) then
doCreatureSay(itemEx.uid, "Aí, isso doi") then
end
return true
end

Depois:

function onUse(cid, item, frompos, item2, topos)
if isCreature(item2.uid) then
doCreatureSay(item2.uid, "Aí, isso doi")
end
return true
end

Abraço! Editado por MaXwEllDeN

Compartilhar este post


Link para o post
Compartilhar em outros sites

só esqueceu de checar se é um player,n faria semtido uma slime falar ou um ghost falar que doi
ashusahusahsau

seriam sempre bom pensar nos minimos,tanto pela jogabilidade, quanto para n cometer erros como esquecer que os player podem estar usando utamo vita.

Editado por lordbug99

Compartilhar este post


Link para o post
Compartilhar em outros sites

só esqueceu de checar se é um player,n faria sendito uma slime falar ou um ghost falar que doi

ashusahusahsau

 

seriam sempre bom pensar nos minomos,tanto pela jogabilidade, quanto para n cometer erros como esquecer que os player podem estar usando utamo vita.

 

Cara, esse script é só pra exercitar as funções, não é útil pra ninguém um script como esse. E se fosse pra alguém usar em um servidor, seria mais viável criar uma tabela e dentro dela colocar o nome das criaturas que não falam, e se o alvo fosse uma delas, retornaria falso. Pois não são só players que falam, certo?

Compartilhar este post


Link para o post
Compartilhar em outros sites

sim mas to falando, mas porque as veses as pessoas esquecem de considerar fatores que podem prejudicar o script(no caso de script é meio inutel).

 

como um script que mate o player instanteneamente

function onSay(cid,param)
 local player = getPlayerByName(param)
 if player then
   doTargetCombatHealth(cid, player, COMBAT_PHYSICALDAMAGE, -getCreatureMaxHealth(player), -getCreatureMaxHealth(player), CONST_ME_MORTAREA)
   return true
 end
end

 

ve qual é o erro desse script?

Compartilhar este post


Link para o post
Compartilhar em outros sites

sim mas to falando, mas porque as veses as pessoas esquecem de considerar fatores que podem prejudicar o script(no caso de script é meio inutel).

 

como um script que mate o player instanteneamente

function onSay(cid,param)
 local player = getPlayerByName(param)
 if player then
doTargetCombatHealth(cid, player, COMBAT_PHYSICALDAMAGE, -getCreatureMaxHealth(player), -getCreatureMaxHealth(player), CONST_ME_MORTAREA)
return true
 end
end

 

ve qual é o erro desse script?

Tlg, esquecem mesmo. Mas o objetivo do tópico foi ensinar sobre as funções. Isso ai que você tá falando é PENSAR e isso é algo que eu não posso ensinar a alguém.

 

Bem, isso que você esqueceu de colocar não é considerado um erro, se o script carregar e rodar, está tudo certo, já que ele foi feito pra ser rodado assim, então não tem nenhum erro. A falta da verificação se a criatura existe já é falha do programador em não pensar na possibilidade da criatura não existir, e é como eu disse, isso depende se o cara sabe pensar.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom pessoal o meu script ficou diferente, porque eu fiz ele diferente...

 

ai esta o script:

 

 

Please login or register to see this spoiler.

 

 

nesse meu script além de ele falar a palavra, ele da 15000 de Experiencia...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom pessoal o meu script ficou diferente, porque eu fiz ele diferente...

 

ai esta o script:

 

 

Please login or register to see this spoiler.

 

áa,, você poderia me explicar o porque? que o Return true tem que ficar naquele lugar?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom pessoal o meu script ficou diferente, porque eu fiz ele diferente...

 

ai esta o script:

 

 

Please login or register to see this spoiler.

Porque tipo, do modo que você colocou, ele estava fora da função e, fora da função principal ele é inútil, ai ele tem que ser colocado no final da função principal, antes do último end, pra indicar que ocorreu tudo bem!

Compartilhar este post


Link para o post
Compartilhar em outros sites

  • Conteúdo Similar

    • Por Legnus
      Achei isso perdido em um servidor antigo e decidi compartilhar. No vídeo fica fácil entender como funciona, espero que seja útil.
       
       
       
       
       
       
       
       
      data/npc:
       
      Please login or register to see this spoiler.
       
    • Por Dbko
      bom olá galerinha tudo bem, eu voltei a ativa. e hoje resolvi por umas coisas, novas em uns servidores, a partir de hoje, vou ser um desenvolvedor de servidores. e de scripter. então vou editar um, NTO 8.60 pra vocês mas pra que vamos ver o que teremos no nto
       
      NTO
       
      25 vocation free 4 Vip
      Voc Vips serão
       
      MADARA = Heal, genjutsu e power forte, e traps.
      MINATO, = Teleports, Jutsus de paralyze, e grande fuin jutsus, passivas.
      HASHIRAMA = Traps, heal. e alta defesa. como passivas. e armadilhas
      TOBIRAMA = Teleports, com selos, edo anbu igual ntoultimate, e alguns sistemas novos nele
       
       
      vocações todos equilibrado combo de 2 magias mas com renge, ou seja cada vocation vai ter. sua seu renge igual a outra pra não pergunta qual a melhor vocação tudo a mesma coisa, mas se vai ser assim ninguém mata ninguém oky vamos lá, no servidor tem um sistema, de meleedamage, e o magedamege, quando ml tiver 100, ele vai dar um magedamege, e quando skill tiver 100 ou 40 é em 10 e 10 vai dando renge e vocês vai bater mas
       
      caves concertadas, items novos. remekes em algumas scripter.
       
      sistemas adicionados,
       
      Bunshin : com nome
      Anti-divulge : já ativo
      Boss com nome com cores diferente : em fase de implantações
      e Talvez teja remeke em algumas sprites feitas por min
      ...
       
      vou editar o mapa do ntofo, mesmo que foi o que eu estava editando e tinha prometido antes de fechar o eks, mas vamos voltar ao treino e cumprir a promeça
       
    • Por RadioJovemTp
      Quero saber oque voces acham desses profissionais cobrarem por seus serviços ?
       
      Esses dias fui oferecer meu trabalho como mapper e resebi a seguinte resposta
       
      " Para que vou te pagar para mappear se eu posso aprender e mappear eu mesmo "
       
      Eu Disse _ Olha , voce que sabe , mais aposto que não vai por tanta dedicação em aprender a mappear , e fará seus mappas horriveis , inquanto um profissional fará com toda atenção e dedicação.
       
      Quero saber de Voces
    • Por skybia
      Olá pessoal.
       
       
      Bom venho aqui para mostrar um projeto que esta sendo desenvolvido a algum tempo,ja criaram outros post sobre esse projeto mas não era eu ou seja não era o dono apenas players.
       
       
       
      Bom para comessar vou falar mais um pouco sobre esse projeto game skybia,bom pessoal eu via vários topicos por ae falando do ot perfeito,bom não existe o ot perfeito mas eu cheguei a conclusão que o ot que jega quase a perfeição é aquele inovador ou seja aquele que não tem nada aver com tibia aquele que a única coisa a ver com tibia é o pvp e a jogabilidade.
      O skybia é baseado ne um mundo derivado ou seja ne um mundo diferente com historias muitas aventuras com muitas coisa para cê fase
      i não so upar i ir para uma war em skybia você tem escolha em ir para uma guerra ficar pklizando e upando ou aproveitar o rpg que esse mundo oferece os lugares e coisas totalmente novas que poderá descobrir,skybia é um jogo rpg ou seja tem muitas e muitas coisas para fase é bem difisio de se enjoar,e alem disso o skybia é mundo que sempre sera aumentado ou seja sempre tera coisas novas.Para jogadores que deseja ce divertir.
       
      Bom o nosso game esta sendo construido por 3 pessoas 1 maper 1 scripter que sou eu e um game disainer,bom eles estão meio desanimados por que não temos nem um insentivo para continuarmos por isso criei esse topico para saber oque voces acham.
       
       
       
       
       
       
      No que o skybia é Baseado
       
       
      Todos os ot server são baseados em um desenho skybia tambem mas cauma vou expicar melhor.
       
      Skybia é baseado na pura imaginação de infansia vocêis provavelmente darão risada agora no que eu vou falar mais skybia era uma brincadeira nossa de quando nos tínhamos 10-12 anos bom nos brincavamos de luta e de poder magia tals tudo na imaginação e nessa brincadera personagens surgiam pensavão sentião
      Choravão sorrriam,historias eram criadas poderes inventados personagens e poderes de desenhos aparesiam, era bom so que a idade nos obrigou a parar pq a vida não é uma brincadeira mas ae venho a ideia na minha cabeça por que não criarmos um jogo dessa brincadeira pelo menos la podemos brincar na boa.
       
      Desenhos e games que skybia é Baseado.
       
      The elder scroll Minecreft
       
      Fayri tail Word OF Warcreft
       
      Naruto Avatar
       
      Dragon Ball One Piece
       
      Tibia Piratas do caribe
       
      Sobrenatural Bem 10
       
      The walking dead Hora De Aventura
       
       
       
       
      E o mais importante A imaginação sem limites
       
       
       
       
       
      Informações gerais

      Para explicar melhor nossa ideia, o projeto teria as seguintes características principais
       
      Versão: 9.81 Porta: 7171 Exp rate: 5x Ml rate: 5x Skills rate: 7x Acesso a jogadores free (houses,quase todas as mounts,todos os eventos,todos os itens,e algumas quest) Acesso a jogadores pago a jogadores donate (inclusive houses,todas as mounts, todas as áreas, eventos,todas quests, etc) Oque tera no shop (Preium scroll,change sexy,munts especiais,desbani o char,crystais dos portais são raros no jogo,sementes) Castle War ilha war (Uma ilha onde guild entram em combate para ver quem domina ela la tem quest e mounts exclusivas tanto para free quanto para vips) Magias diferenciadas (Você começara com 30 tipos de magias da sua classe depois você pode obter outras em missões quest,em pedras, pergaminhos ou aprendendo com npcs) Please login or register to see this link.
      Please login or register to see this link.
      Please login or register to see this link.
      Arena PvP Please login or register to see this link.
      Eventos exclusivos Vocações proprias Livros e histórias integradas no jogo Arena PvP Eventos exclusivos  
       
       
       
       
      Para quem se interessar entrem em contato Com a gente no facebook la postaremos imagens e spoliers sobre o projeto.

      Nosso Facebook é Please login or register to see this link.

       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
×