×

Langue

Fermer
Atelier 801
  • Forums
  • Dev Tracker
  • Connexion
    • English Français
      Português do Brasil Español
      Türkçe Polski
      Magyar Română
      العربية Skandinavisk
      Nederlands Deutsch
      Bahasa Indonesia Русский
      中文 Filipino
      Lietuvių kalba 日本語
      Suomi עברית
      Italiano Česky
      Hrvatski Slovensky
      Български Latviešu
      Estonian
  • Langue
  • Forums
  • /
  • Transformice
  • /
  • Modules
  • /
  • [Tutorial] Classe para NPCs
1 / 2 › »
[Tutorial] Classe para NPCs
Bolodefchoco
« Sénateur »
1529685720000
    • Bolodefchoco#0095
    • Profil
    • Derniers messages
    • Tribu
#1
  3
  • NPC
  • Tree
  • Fields
  • Funções
  • Coleção de frames
https://github.com/a801-luadev/useful-classes/blob/master/NPC.lua
Uma classe para a manipulação de NPCs com animação e callback.

O que você pode fazer?

https://i.gyazo.com/efbd6a89387eadf03a9c5e59b453b521.gif



Code Lua

1
2
3
4
5
6
7
8
9
10
11
12
13
local bot = npc.new("Wu", {	
sit = { "164c8600043.png" },
run = { "164c85b34f5.png", "164c85b4cd1.png", "164c85b6580.png", "164c85bc5d0.png", "164c85bddac.png" }
}, "!0"):setPosition(-30, 310):setState("run")

bot:setAction(function(self, i)
self.x = self.x + 10

if self.x >= 430 then
self.x = self.x + 30
self:setState("sit"):setStatic()
end
end):loop()

https://github.com/a801-luadev/useful-classes/blob/master/NPC.lua
npc
    :new
    :deleteCallback
    :destroy
    :display
    :displayName
    :loop
    :resetAction
    :setAction
    :setCallback
    :setCollection
    :setDimension
    :setLayer
    :setName
    :setNameColor
    :setNamePosition
    :setPosition
    :setState
    :setStatic

    collection
    currentState
    h
    id
    isStatic
    layer
    looping
    nameX
    nameY
    w
    x
    y

    TICKS

    __iter
    __get
https://github.com/a801-luadev/useful-classes/blob/master/NPC.lua
[desatualizado]

• npc.x
 A posição horizontal do NPC.

• npc.y
 A posição vertical do NPC.

• npc.w
 A largura do NPC.

• npc.h
 A altura do NPC.
https://github.com/Lautenschlager-id/Transformice/blob/master/Others/NPC%20class.lua
[desatualizado]
• npc ( name, collection, layer )
 Cria uma instância de NPC.
 Parâmetros:
  - name (string) : nome do NPC. (default = nil)
  - collection (table) : coleção de frames do NPC.
  - layer (string) : camada (target) da imagem do NPC.
 Retorna: (npc) self


• npc:deleteCallback ( [ playerName ] )
 Remove a callback do NPC, caso definida.
 Parâmetros:
  - playerName (string) : nome do jogador que terá a callback removida
 Retorna: (npc) self


• npc:destroy ( super )
 Remove o NPC.
 Parâmetros:
  - super (boolean) : se o nome também deve ser removido.


• npc:getAction ( )
 Obtém a ação/animação do NPC.
 Retorna: (function | nil) ação do NPC


• npc:getCollection ( )
 Obtém a coleção de frames do NPC.
 Retorna: (table) coleção de frames do NPC


• npc:getId ( )
 Obtém a id única do NPC.
 Retorna: (int) id do NPC


• npc:getLayer ( )
 Obtém a camada/target do NPC.
 Retorna: (string) target do NPC


• npc:getName ( )
 Obtém o nome do NPC.
 Retorna: (string | nil) nome do NPC


• npc:getState ( )
 Obtém a coleção atual de frames do NPC
 Retorna: (string) coleção atual de frames do NPC


• npc:removeAction ( )
 Destrói a animação do seu NPC, caso definida.
 Retorna: (npc) self


• npc:removeName ( [ playerName ] )
 Remove o nome do NPC.
 Parâmetros:
  - playerName (string) : nome do jogador que não verá mais o nome
 Retorna: (npc) self


• npc:setAction ( [ event[, static] ] )
 Define a ação/animação do NPC.
 Parâmetros:
  - event (function) : função a ser realizada para cada frame da animação. Recebe o número do frame atual e pode alterá-lo com um retorno
  - static (boolean) : se o NPC estará estático ou não
 Retorna: (npc) self


• npc:setCallback ( eventName[, event ] )
 Define a callback do NPC, para que haja o disparo quando o mesmo for clicado.
 Parâmetros:
  - eventName (string) : o nome da callback
  - event (function) : a função a ser executada quando a callback for ativada
 Retorna: (npc) self


• npc:setDimension ( width, height )
 Define o tamanho do NPC (para fins de callback, apenas).
 Parâmetros:
  - width (int) : a largura do NPC. (default = 1)
  - height (int) : a altura do NPC. (default = 1)
 Retorna: (npc) self


• npc:setPosition ( x, y )
 Define a posição do NPC.
 Parâmetros:
  - x (int) : a posição horizontal do NPC. (default = 0)
  - y (int) : a posição vertical do NPC. (default = 0)
 Retorna: (npc) self


• npc:setState ( newState )
 Define a coleção atual de frames do NPC.
 Parâmetros:
  - newState (string) : o nome da coleção de frames.
 Retorna: (npc) self


• npc:static ( )
 Define o NPC como uma imagem estática (que não se move) e finalize todas as ações definidas.
 Retorna: (npc) self

https://github.com/a801-luadev/useful-classes/blob/master/NPC.lua
Para iniciar seu NPC, crie uma nova instância dele com a coleção de frames.
Cada coleção é uma tabela, contendo seu nome e as imagens em índices numéricos.

Code Lua

1
2
3
4
5
6
{ -- Coleções
sit = { -- Nome da coleção
"164c8600043.png" -- Imagens da coleção, em ordem
},
run = { "164c85b34f5.png", "164c85b4cd1.png", "164c85b6580.png", "164c85bc5d0.png", "164c85bddac.png" }
}


Dernière modification le 1587654060000
Ninguem
« Consul »
1529686080000
    • Ninguem#0095
    • Profil
    • Derniers messages
    • Tribu
#2
  1
Que daora, daria pra fazer uns rpg maneiro com isso. Uns cara andando pra lá e pra cá ou até alguém seguindo o teu rato.

Ele só anda pra direita por enquanto?

Ah, fica a sugestão pra fazer também uma função de pulo.

Dernière modification le 1529686140000
Bolodefchoco
« Sénateur »
1529686440000
    • Bolodefchoco#0095
    • Profil
    • Derniers messages
    • Tribu
#3
  0
Não tem movimentos pré-definidos. Você manipula as coordenadas como desejar.

No caso, o exemplo que usei tem uma variável x que tem seu valor somado a 10 a cada frame.
x = x + 10

Ai você pode fazer - 10 para ir pra trás, etc.

O pulo seria uma função mais complicada, onde o x aumenta gradualmente enquanto o y age como um gráfico seno.

No caso, você teria que pegar os frames do rato e fazer. A classe só ajuda a manipulá-lo.

Utilizo o https://projects.fewfre.com/a801/transformice/dressroom/ para obter alguns frames. Dependendo da velocidade que for usada, hospedar 200 imagens da SWF não se torna uma necessidade.

Dernière modification le 1529686500000
Fofinhoppp
« Consul »
1529698380000
    • Fofinhoppp#0000
    • Profil
    • Derniers messages
    • Tribu
#4
  1
Ótimo tutorial
O que acha de fazer a animação de pulo simplesmente removendo a imagem e substituindo temporariamente ela por uma vinculada a um shaman object que será levemente lançado e irá cair de volta? Não sei se ficou muito compreensível e nem funcional, mas é uma ideia.
Bolodefchoco
« Sénateur »
1529698620000
    • Bolodefchoco#0095
    • Profil
    • Derniers messages
    • Tribu
#5
  0
O problema é a gravidade que pode fufu tudo, mas usar objetos é viável :v
Bolodefchoco
« Sénateur »
1529699820000
    • Bolodefchoco#0095
    • Profil
    • Derniers messages
    • Tribu
#6
  0
Editei a classe para que os timers sejam usados uma única vez para todos os NPCs (mais leve).

Agora a action é tratada como valor, setAction / getAction.

Tendo um loop só, a velocidade é constante para todos os NPCs. Altere-a caso necessário.
Zash1eh
« Censeur »
1529701980000
    • Zash1eh#0000
    • Profil
    • Derniers messages
#7
  1
Ui Amey
Hugotitas
« Citoyen »
1529788440000
    • Hugotitas#0000
    • Profil
    • Derniers messages
    • Tribu
#8
  1
Que legal bolo!
Rap
« Citoyen »
1532902860000
    • Rap#9678
    • Profil
    • Derniers messages
#9
  0
Olá eu sou burro tentei fazer mas n tenho paciência sera q auguem possa me informar como colocar tudo no lugar?
Bolodefchoco
« Sénateur »
1532903460000
    • Bolodefchoco#0095
    • Profil
    • Derniers messages
    • Tribu
#10
  0
Tópico atualizado com novas funções.
Rap
« Citoyen »
1532903520000
    • Rap#9678
    • Profil
    • Derniers messages
#11
  0
a onde?
Bolodefchoco
« Sénateur »
1532903580000
    • Bolodefchoco#0095
    • Profil
    • Derniers messages
    • Tribu
#12
  0
Rap a dit :
Olá eu sou burro tentei fazer mas n tenho paciência sera q auguem possa me informar como colocar tudo no lugar?

Você só pode usar imagens se for um membro da module team. :/
Rap
« Citoyen »
1532903640000
    • Rap#9678
    • Profil
    • Derniers messages
#13
  0
mas tipo n posso usa npc pra colocar cafofo e tipo ele pode vender as coisas
Rap
« Citoyen »
1532903700000
    • Rap#9678
    • Profil
    • Derniers messages
#14
  0
Você só pode usar imagens se for um membro da module team. :/[/quote]

como assim?
Bolodefchoco
« Sénateur »
1532904600000
    • Bolodefchoco#0095
    • Profil
    • Derniers messages
    • Tribu
#15
  0
Cara, você devia falar tudo em uma mensagem só..

Mó vacilo permitirem double :P

Rap a dit :
como assim?

Aqui estão mais informações sobre a module team. De qualquer forma, não, você não pode

@edit: nada te impede de usar o script, você só não verá a imagem
Rap
« Citoyen »
1532904660000
    • Rap#9678
    • Profil
    • Derniers messages
#16
  0
:( porq n posso
se puder me ajudar queria npc pra fica cafofo

Dernière modification le 1532904720000
Bolodefchoco
« Sénateur »
1532904720000
    • Bolodefchoco#0095
    • Profil
    • Derniers messages
    • Tribu
#17
  0
Rap a dit :
:( porq n posso

Acabei de responder, colega.

Apenas membros da module team tem a permissão de usarem a função tfm.exec.addImage
Rap
« Citoyen »
1532904780000
    • Rap#9678
    • Profil
    • Derniers messages
#18
  0
como faço para poder entrar?
Bolodefchoco
« Sénateur »
1532904960000
    • Bolodefchoco#0095
    • Profil
    • Derniers messages
    • Tribu
#19
  0
Rap a dit :
como faço para poder entrar?

Você deve ser capaz de programar em Lua.

Se você se considera capaz, envie seu formulário aqui em inglês

Para perguntas não relacionadas a este tópico, por favor utilize este outro tópico
Rap
« Citoyen »
1532905020000
    • Rap#9678
    • Profil
    • Derniers messages
#20
  0
mano tem como eu fazer um npc?
se tiver me ajuda
  • Forums
  • /
  • Transformice
  • /
  • Modules
  • /
  • [Tutorial] Classe para NPCs
1 / 2 › »
© Atelier801 2018

Equipe Conditions Générales d'Utilisation Politique de Confidentialité Contact

Version 1.27