×

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
  • /
  • [Script] data_manager
[Script] data_manager
Esh
« Censeur »
1508201100000
    • Esh#0095
    • Profil
    • Derniers messages
    • Tribu
#1
  13
  • Inicio
  • Documentação

data_controller.lua


A classe data_controller surgiu da necessidade de ter um sistema que permitisse manipular dados de jogadores facilmente entre vários minigames, sem correr o risco de sobreescrever dados no processo. Este tópico explica os metódos e a forma de utilização deles.

Abaixo você tem um exemplo de código utilizando a classe:
Code Lua

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
local handler = data_controller('halloween2017')
handler:add_column('int', 'captured_ghosts', 0)
:add_column('int', 'batteries', 0)
:add_column('boolean', 'has_title', false)
:add_column('string', 'community', 'br') -- é possivel utilizar as funções em forma de corrente

handler:load('Esh#0095', '')
local p1 = handler:player('Esh#0095')

p1:update({
{'captured_ghosts', '+', 1},
{'batteries', '+', 5}
}) -- note que você pode utilizar mais de um valor de coluna em :update

print(p1:stringify()) -- dados do jogador Esh#0095

local value = handler:load('Esh#0000', '##halloween2017##[0|0|0]')
:update('community', '=', 'es')
:get('batteries') -- você também pode fazer tudo em uma linha só
print(value)

local players = handler:where({
{'community', '=', 'br'},
{'batteries', '<', 10}
}):update('has_title', '=', true):get_names()

print(p1:stringify()) -- dados do jogador Esh#0095 depois da atualização do where
print(table.concat(players, ',')) -- jogadores afetados pelo where anterior

Link para o código Lua: data_controller.library.lua

data_controller(module_id)
    É a função essencial do código, com ela você pode iniciar uma nova instância onde module_id é um código que deve ser único para cada minigame (a não ser que você queira utilizar os mesmos dados entre scripts).

data_controller:add_column(data_type, column_name, default_value)
    Cria uma nova coluna de dados, É importante que essa função seja chamada antes de qualquer carregamento de dados de jogador na classe.
    Os valores admitidos para data_type são boolean, int, string e table.

data_controller:load(player_name, player_data)
    Carrega um novo jogador na classe data_controller. Caso player_data seja nil ou não seja possível encontrar dados para module_id, o jogador receberá dados padrão fornecidos em add_column.

data_controller:player(player_name)
    Inicia uma instância de jogador, com ela você pode manipular os dados do jogador com facilidade.
    player:get(column)
      Retorna o valor de uma coluna nos dados do jogador.

    player:stringify()
      Retorna a string com os dados do jogador, você pode utilizar essa string em system.savePlayerData.

    player:update(column, operator, value)
      É utilizado para atualizar as colunas de dados de jogador.
      Utilize os operadores + / e * para manipular os dados já existentes ou = para sobreescrever eles.

data_controller:where(column, conditional, value)
    Utilize a função where para facilmente retornar e manipular dados de multiplos jogadores, desde que os mesmos atendam as condições dadas.
    As condicionais permitidas são =, >, <, <=, >= e ~.
    where:get(column)
      Possui a mesma função de player:get mas retorna uma tabela com jogador = valor.

    where:get_names()
      Retorna uma lista de jogadores que atenderam os requerimentos anteriores.

    where:update(column, operator, value)
      Possui a mesma função de player:update, atualizando os dados de todos os jogadores que cumpriram os requerimentos de where.


Dernière modification le 1547302560000
Gamedroit
« Citoyen »
1508206140000
    • Gamedroit#3347
    • Profil
    • Derniers messages
    • Tribu
#2
  0
Legal esh, não é útil para mim mas pode ser útil para muitos programadores :D (Eu dei like no tópico)
Hydroper
« Citoyen »
1508243280000
    • Hydroper#0528
    • Profil
    • Derniers messages
    • Tribu
#3
  0
Similiar à storage :f a única diferença mesmo é que seu utilitário já sabe identificar minigames nativamente.

Também devo adicionar que minha biblioteca, em sua última versâo, armazena dados num formato binário que não precisa de delimitadores.

Dernière modification le 1508258040000
Impressorahp
« Citoyen »
1508252040000
    • Impressorahp#2775
    • Profil
    • Derniers messages
    • Tribu
#4
  0
Contistente3 a dit :
Legal esh, não é útil para mim mas pode ser útil para muitos programadores :D (Eu dei like no tópico)

vrdd (dxa de frete viu ¬¬)
Bolodefchoco
« Sénateur »
1513790520000
    • Bolodefchoco#0095
    • Profil
    • Derniers messages
    • Tribu
#5
  0
Muito útil.
Você poderia criar algumas funções para evitar incompatibilidade (ou talvez formatar) com dados em formatos diferentes utilizados antes dessa classe.
Bloom
« Héliaste »
1535320140000
    • Bloom#6766
    • Profil
    • Derniers messages
#6
  0
Parabéns
Esh
« Censeur »
1545617340000
    • Esh#0095
    • Profil
    • Derniers messages
    • Tribu
#7
  1
Fiz uma atualização no tópico documentando a nova versão do (agora) data_controller. Não fiz nenhum tipo de teste intensivo na classe, então não deixe de reportar qualquer tipo de problema.
Bolodefchoco
« Sénateur »
1545672000000
    • Bolodefchoco#0095
    • Profil
    • Derniers messages
    • Tribu
#8
  0
Utilizar table.insert para algo semelhante a um string.split destrói a performance do seu sistema (quando usando no transformice), opte por um counter.

Vale também substituir o gmatch por gsub

Code Lua

1
2
3
4
5
6
7
8
function string.split(s, p)
local f, counter = { }, 0
string.gsub(s, "[^" .. p .. "]+", function(v)
counter = counter + 1
f[counter] = v
end)
return f
end

Dernière modification le 1545672060000
  • Forums
  • /
  • Transformice
  • /
  • Modules
  • /
  • [Script] data_manager
© Atelier801 2018

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

Version 1.27