fix: Migrating project to the new Gitea Host.

main
KyMAN 4 months ago
parent b190f03986
commit a562ddbe12
  1. 8
      .gitignore
  2. 187
      HTML/base.dptw.html
  3. 1
      JSON/html.files.json
  4. 267
      MariaDB/DPTW.01.builder.my.sql
  5. 120
      MariaDB/DPTW.02.views.my.sql
  6. 118
      MariaDB/DPTW.03.base.my.sql
  7. 121
      MariaDB/DPTW.04.sessions.my.sql
  8. 213
      MariaDB/DPTW.05.scores.my.sql
  9. 54
      PHP/DPTW.Dictionary.php
  10. 86
      PHP/DPTW.MySQL.php
  11. 202
      PHP/DPTW.php
  12. 12
      PHP/includes.php
  13. 5
      Public/api.php
  14. 6
      Public/api/.htaccess
  15. 5
      Public/api/index.php
  16. 44
      Public/ecma/DPTW.Dictionary.ecma.js
  17. 137
      Public/ecma/DPTW.Errors.ecma.js
  18. 72
      Public/ecma/DPTW.I18N.ecma.js
  19. 342
      Public/ecma/DPTW.Scores.ecma.js
  20. 838
      Public/ecma/DPTW.ecma.js
  21. 4
      Public/git_update.php
  22. 46
      Public/index.html
  23. 14
      Public/json/DPTW.dictionary copy.json
  24. 4
      Public/json/DPTW.dictionary.json
  25. 61
      Public/json/DPTW.settings.json
  26. 49
      Public/json/DPTW.sounds.json
  27. 222
      Public/json/DPTW.sprites.json
  28. 50
      Public/json/i18n/DPTW.i18n.alarabiyah.json
  29. 50
      Public/json/i18n/DPTW.i18n.azerbaycanca.json
  30. 54
      Public/json/i18n/DPTW.i18n.catala.json
  31. 50
      Public/json/i18n/DPTW.i18n.cestina.json
  32. 50
      Public/json/i18n/DPTW.i18n.dansk.json
  33. 50
      Public/json/i18n/DPTW.i18n.deutsch.json
  34. 71
      Public/json/i18n/DPTW.i18n.ellinika.json
  35. 50
      Public/json/i18n/DPTW.i18n.english.json
  36. 49
      Public/json/i18n/DPTW.i18n.espanol.json
  37. 50
      Public/json/i18n/DPTW.i18n.esperanto.json
  38. 50
      Public/json/i18n/DPTW.i18n.farsi.json
  39. 54
      Public/json/i18n/DPTW.i18n.francais.json
  40. 50
      Public/json/i18n/DPTW.i18n.gaeilge.json
  41. 50
      Public/json/i18n/DPTW.i18n.hangugeo.json
  42. 50
      Public/json/i18n/DPTW.i18n.hindi.json
  43. 50
      Public/json/i18n/DPTW.i18n.indonesia.json
  44. 50
      Public/json/i18n/DPTW.i18n.italiano.json
  45. 50
      Public/json/i18n/DPTW.i18n.ivrit.json
  46. 50
      Public/json/i18n/DPTW.i18n.magyar.json
  47. 50
      Public/json/i18n/DPTW.i18n.nederlands.json
  48. 50
      Public/json/i18n/DPTW.i18n.nihongo.json
  49. 50
      Public/json/i18n/DPTW.i18n.polski.json
  50. 50
      Public/json/i18n/DPTW.i18n.portugues.json
  51. 50
      Public/json/i18n/DPTW.i18n.russkiy.json
  52. 50
      Public/json/i18n/DPTW.i18n.slovencina.json
  53. 50
      Public/json/i18n/DPTW.i18n.suomi.json
  54. 50
      Public/json/i18n/DPTW.i18n.svenska.json
  55. 50
      Public/json/i18n/DPTW.i18n.thai.json
  56. 80
      Public/json/i18n/DPTW.i18n.turkce.json
  57. 50
      Public/json/i18n/DPTW.i18n.ukrainska.json
  58. 50
      Public/json/i18n/DPTW.i18n.zhongwen.json
  59. 64
      Public/scss/DPTW.base.scss
  60. 53
      Public/scss/DPTW.css
  61. 7
      Public/scss/DPTW.css.map
  62. 1
      Public/scss/DPTW.scss
  63. 11
      Public/scss/DPTW.settings.scss
  64. 6
      Public/wmd.php
  65. 21
      Public/wmd_scripts.php
  66. 20
      Tools/MariaDB.sh
  67. 2
      Tools/sass.sh
  68. 37
      WMD/doc/index.w.md

8
.gitignore vendored

@ -0,0 +1,8 @@
Data
Public/data
Public/json/DPTW.settings.secrets.json
Public/doc
PHP/DPTW.Secrets.php
Tools/Secrets.sh
Tools/.sass-cache
DPTW.apache2.conf

@ -0,0 +1,187 @@
<!DOCTYPE html>
<html lang="{language}" dir="ltr">
<head>
<title>{title}</title>
<meta http-equiv="content-type" content="text/html; charset=utf-8" />
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width,initial-scale=1.0" />
<link rel="icon" href="/images/DPTW-32.webp" sizes="32x32" />
<link rel="icon" href="/images/DPTW-192.webp" sizes="192x192" />
<link rel="icon" href="/images/DPTW-512.webp" sizes="512x512" />
<link rel="apple-touch-icon-precomposed" href="/images/DPTW-180.webp" />
<meta name="msapplication-TileImage" content="/images/DPTW-270.webp" />
<meta name="licence:text" content="© 2020-2021 CopyLeft. GPLv3" />
<meta name="licence:link" content="https://www.gnu.org/licenses/gpl-3.0.txt" />
<meta name="licence:icon" content="https://www.gnu.org/graphics/gplv3-88x31.png" />
<meta name="xdoc:link" content="{url}" />
<meta name="xdoc:author" content="{author}" />
<meta name="xdoc:since" content="{since}" />
<meta name="xdoc:version" content="{version}" />
<meta name="xdoc:access" content="public" />
<meta name="description" data-i18n="dptw_description" content="{description}" />
<meta name="keywords" data-i18n="dptw_keywords" content="{key_words}" />
<meta name="author" content="{author}" />
<meta name="copyright" content="© 2020-2021 CopyLeft" />
<meta name="robots" content="index,follow" />
<meta name="googlebot" content="index,follow,max-snippet:-1,max-image-preview:large,max-video-preview:-1" />
<meta name="bingbot" content="index,follow,max-snippet:-1,max-image-preview:large,max-video-preview:-1" />
<!--<meta http-equiv="refresh" content="30" />-->
<!--<meta http-equiv="cache-control" content="no-cache" />-->
<!--<meta http-equiv="expires" content="0" />-->
<link rel="canonical" href="{url}" />
<link rel="alternate" href="{url}" hreflang="es" />
<meta property="og:locale:alternate" content="es_ES" />
<meta name="referrer" content="origin" />
<meta name="fragment" content="!" /><!-- Para uso AJAX -->
<meta name="language" content="es" />
<meta name="revisit-after" content="7 days" /><!-- Regreso de las arañas. Información Crawl. -->
<meta name="rating" content="general" /><!-- Tipo de contenido: general, mature, restricted, adult, 14 years, safe for kids. -->
<meta name="author" content="{author}" />
<meta name="owner" content="{author}" />
<meta property="og:locale" content="es_ES" />
<meta property="og:type" content="website" />
<meta property="og:title" data-i18n="dptw_title" content="{title}" />
<meta property="og:description" data-i18n="dptw_description" content="{description}" />
<meta property="og:url" content="{url}" />
<meta property="og:site_name" content="{project}" />
<meta property="og:image" content="{logo}" />
<!--<meta property="fb:admins" content="FB-AppID" />-->
<meta name="twitter:card" content="summary" />
<meta name="twitter:description" data-i18n="dptw_description" content="{description}" />
<meta name="twitter:title" data-i18n="dptw_title" content="{title}" />
<!--<meta name="twitter:site" content="@DPTW" />-->
<!--<meta name="twitter:creator" content="@DPTW" />-->
<meta name="SKYPE_TOOLBAR" content="SKYPE_TOOLBAR_PARSER_COMPATIBLE" />
<!--<meta name="google-site-verification" content="123456789" />--><!-- Verificación en el Google Search Console. -->
<meta name="google" content="nositelinkssearchbox" />
<link rel="dns-prefetch" href="{url}" />
<!--<link rel="amphtml" href="{url}index.amp.html" />--><!-- Indica si tiene página para móviles. Tecnología AMP. -->
<link type="text/css" rel="stylesheet" data-language="CSS3" href="https://cdn.k3y.pw/css/fonts/local/Roboto.css" data-crossorigin="anonymous" charset="utf-8" />
<link type="text/css" rel="stylesheet" data-language="CSS3" href="https://cdn.k3y.pw/css/fonts/local/RobotoMono.css" data-crossorigin="anonymous" charset="utf-8" />
<link type="text/css" rel="stylesheet" data-language="CSS3" href="https://cdn.k3y.pw/css/fonts/local/FontAwesome5Free.css" data-crossorigin="anonymous" charset="utf-8" />
<link type="text/css" rel="stylesheet" data-language="CSS3" href="https://cdn.k3y.pw/css/highlight.js/11.7.0/default.min.css" data-href="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.7.0/styles/default.min.css" data-source="https://highlightjs.org/download/" data-crossorigin="anonymous" charset="utf-8" />
<script data-type="text/javascript" data-language="JavaScript 1.8.5" src="https://cdn.k3y.pw/js/mermaidjs/10.2.4/mermaid.min.js" data-src="https://cdn.jsdelivr.net/npm/mermaid@10.2.4/dist/mermaid.min.js" data-source="https://www.jsdelivr.com/package/npm/mermaid" data-crossorigin="anonymous" charset="utf-8"></script>
<script data-type="text/javascript" data-language="JavaScript 1.8.5" src="https://cdn.k3y.pw/js/highlight.js/11.7.0/highlight.min.js" data-src="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.7.0/highlight.min.js" data-source="https://highlightjs.org/download/" data-crossorigin="anonymous" charset="utf-8"></script>
<script data-type="text/javascript" data-language="ECMAScript 2015" src="https://cdn.k3y.pw/js/MathJax/3.2.2/tex-mml-chtml.min.js" data-src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/3.2.2/es5/tex-mml-chtml.min.js" data-source="https://cdnjs.com/libraries/mathjax" data-crossorigin="anonymous" charset="utf-8"></script>
<script data-type="text/javascript" data-language="ECMAScript 2015" src="https://kstats.k3y.pw/ecma/KStats.ecma.js"></script>
<script>
kstats = new KStats({url : "https://kstats.k3y.pw/api/SbfXgp4r3fAtuthpzXdZw2JTLKZqZFYzLhWTkQiQr4kYWsrcZvvsbKrHt/{session}/json/set"});
</script>
<link type="text/css" rel="stylesheet" data-language="SASS/CSS3" href="https://wmarkdown.k3y.pw/scss/WMarkDown.css" data-scss="https://wmarkdown.k3y.pw/scss/WMarkDown.scss" data-css-map="https://wmarkdown.k3y.pw/scss/WMarkDown.css.map" data-crossorigin="anonymous" charset="utf-8" />
<link type="text/css" rel="stylesheet" data-language="CSS3" href="https://wmarkdown.k3y.pw/css/WMarkDown.icons.css" data-crossorigin="anonymous" charset="utf-8" />
<link type="text/css" rel="stylesheet" data-language="CSS3" href="/css/DPTW.icons.css" data-crossorigin="anonymous" charset="utf-8" />
<style data-type="text/css" data-rel="stylesheet" data-language="CSS3" charset="utf-8">
html,body{
height : 100%;
margin : 0px;
}
</style>
<script data-type="text/javascript" data-language="ECMAScript 2015" src="https://wmarkdown.k3y.pw/ecma/WMarkDown.ecma.js" data-crossorigin="anonymous" charset="utf-8"></script>
<script data-type="text/javascript" data-language="ECMAScript 2015" src="https://wmarkdown.k3y.pw/ecma/WMarkDown.Dictionary.ecma.js" data-crossorigin="anonymous" charset="utf-8"></script>
<script data-type="text/javascript" data-language="ECMAScript 2015" src="https://wmarkdown.k3y.pw/ecma/WMarkDown.Multimedia.ecma.js" data-crossorigin="anonymous" charset="utf-8"></script>
<script data-type="text/javascript" data-language="ECMAScript 2015" charset="utf-8">
wmarkdown = new WMarkDown({
dictionary_links : "https://wdictionaries.k3y.pw/?es/values,own_projects,projects,digital,common,kyman",
dictionary_title : "Diccionario"
});
</script>
</head>
<body class="wmarkdown dptw">
<header>
<h1 class="logo">
<a href="https://dptw.k3y.pw#">
<span class="image">
<span style="background-image:url('/images/DPTW.webp');"></span>
<img src="/images/DPTW.webp" alt="DPTW" />
</span>
<span class="text">DPTW</span>
</a>
</h1>
<nav class="main-menu">
<ul>
<li><a href="/doc" data-i18n="home" data-i18n-without="true" title="Home" target="_self">
<span data-icon="home"></span>
<span data-i18n="home">Home</span>
</a></li>
<li><a href="/" data-i18n="game" data-i18n-without="true" title="Juego" target="_blank">
<span data-icon="game"></span>
<span data-i18n="game">Juego</span>
</a></li>
<li><a href="/dev" data-i18n="developt" data-i18n-without="true" title="Desarrollo" target="_self">
<span data-icon="developt"></span>
<span data-i18n="developt">Desarrollo</span>
</a></li>
<li><a href="https://git.k3y.pw/KyMAN/DPTW" data-i18n="git" data-i18n-without="true" title="Git" target="_blank">
<span data-icon="git"></span>
<span data-i18n="git">Git</span>
</a></li>
</ul>
</nav>
</header>
<main class="body" data-headers-menu-deployed="true" data-files-menu-deployed="true">
<fieldset class="headers-menu">
<legend data-i18n="headers_menu" title="Menu">Menu</legend>
<nav>
<ul>{menu}</ul>
</nav>
<div class="menu-buttons">
<button type="button" data-i18n="hide" data-i18n-without="true" title="Hide" onclick="wmarkdown.hide_menu(this, event);" data-visible="true">
<span data-icon="hide"></span>
<span data-i18n="hide">Hide</span>
</button>
<button type="button" data-i18n="show" data-i18n-without="true" title="Show" onclick="wmarkdown.show_menu(this, event);" data-visible="false">
<span data-icon="show"></span>
<span data-i18n="show">Show</span>
</button>
</div>
</fieldset>
<fieldset class="content">
<legend data-i18n="content" title="Content">Content</legend>
<div class="content-box">{content}</div>
</fieldset>
<fieldset class="files">
<legend data-i18n="files" title="Files">Files</legend>
<nav>
<ul>{files}</ul>
</nav>
<div class="menu-buttons">
<button type="button" data-i18n="hide" data-i18n-without="true" title="Hide" onclick="wmarkdown.hide_menu(this, event);" data-visible="true">
<span data-icon="hide"></span>
<span data-i18n="hide">Hide</span>
</button>
<button type="button" data-i18n="show" data-i18n-without="true" title="Show" onclick="wmarkdown.show_menu(this, event);" data-visible="false">
<span data-icon="show"></span>
<span data-i18n="show">Show</span>
</button>
</div>
</fieldset>
</main>
<footer>
<a href="https://www.gnu.org/licenses/gpl-3.0.txt" target="_blank" title="GPLv3" class="license">
<span data-i18n="license_text">© 2021-2022 CopyLeft.</span>
<img src="https://www.gnu.org/graphics/gplv3-127x51.png" alt="GPLv3" />
</a>
<div data-preload="wmarkdown-preloader"></div>
</footer>
</body>
</html>

@ -0,0 +1 @@
{"files":["\/home\/git\/DPTW\/Public\/doc\/index.html"],"directories":["\/doc"]}

@ -0,0 +1,267 @@
create database if not exists DPTW character set utf8mb4 collate utf8mb4_general_ci;
use DPTW;
delimiter ;^
drop procedure if exists tables_remove;^
create procedure tables_remove() begin
-- Level 2.
drop table if exists Scores;
drop table if exists Exceptions;
drop table if exists Logs;
-- Level 1.
drop table if exists Sessions;
drop table if exists Procedures;
-- Level 0.
drop table if exists Modes;
drop table if exists Nicks;
drop table if exists Parameters;
drop table if exists Messages;
drop table if exists `Databases`;
drop table if exists UserAgents;
drop table if exists Ips;
end;^
drop procedure if exists tables_create;^
create procedure tables_create() begin
-- Level 0.
create table if not exists Ips(
id integer not null auto_increment,
address varchar(39) not null,
date_in datetime not null default now(),
date_out datetime,
constraint ips_id primary key(id)
);
create table if not exists UserAgents(
id integer not null auto_increment,
`data` text not null,
date_in datetime not null default now(),
date_out datetime,
constraint user_agents_id primary key(id)
);
create table if not exists `Databases`(
id integer not null auto_increment,
name varchar(64) not null,
date_in datetime not null default now(),
date_out datetime,
constraint databases_id primary key(id)
);
create table if not exists Parameters(
id integer not null auto_increment,
`data` text,
date_in datetime not null default now(),
date_out datetime,
constraint parameters_id primary key(id)
);
create table if not exists Messages(
id integer not null auto_increment,
`text` text,
date_in datetime not null default now(),
date_out datetime,
constraint messages_id primary key(id)
);
create table if not exists Nicks(
id integer not null auto_increment,
name varchar(32) not null,
date_in datetime not null default now(),
date_out datetime,
constraint nicks_id primary key(id)
);
create table if not exists Modes( -- For different game settings.
id integer not null auto_increment,
name varchar(32) not null,
description text,
date_in datetime not null default now(),
date_out datetime,
constraint nicks_id primary key(id)
);
-- Level 1.
create table if not exists Sessions(
id integer not null auto_increment,
ip integer not null,
user_agent integer not null,
date_in datetime not null default now(),
date_last datetime not null default now(),
date_out datetime,
constraint sessions_id primary key(id),
constraint sessions_ip foreign key(ip) references Ips(id),
constraint sessions_user_agent foreign key(user_agent) references UserAgents(id)
);
create table if not exists Procedures(
id integer not null auto_increment,
`database` integer not null,
name varchar(64) not null,
date_in datetime not null default now(),
date_out datetime,
constraint procedures_id primary key(id),
constraint procedures_database foreign key(`database`) references `Databases`(id)
);
-- Level 2.
create table if not exists Logs(
id integer not null auto_increment,
`session` integer,
`procedure` integer not null,
parameters integer not null,
error bigint,
date_in datetime not null default now(),
date_out datetime,
constraint logs_id primary key(id),
constraint logs_session foreign key(`session`) references Sessions(id),
constraint logs_procedure foreign key(`procedure`) references Procedures(id),
constraint logs_parameters foreign key(parameters) references Parameters(id)
);
create table if not exists Exceptions(
id integer not null auto_increment,
`session` integer,
`procedure` integer not null,
parameters integer not null,
error bigint,
message integer not null,
status varchar(16),
code integer,
date_in datetime not null default now(),
date_out datetime,
constraint exceptions_id primary key(id),
constraint exceptions_session foreign key(`session`) references Sessions(id),
constraint exceptions_procedure foreign key(`procedure`) references Procedures(id),
constraint exceptions_parameters foreign key(parameters) references Parameters(id),
constraint exceptions_message foreign key(message) references Messages(id)
);
create table if not exists Scores(
id integer not null auto_increment,
`session` integer not null,
`procedure` integer not null,
mode integer not null,
nick integer not null,
score integer not null,
date_in datetime not null default now(),
date_out datetime,
constraint scores_id primary key(id),
constraint scores_session foreign key(`session`) references Sessions(id),
constraint scores_procedure foreign key(`procedure`) references Procedures(id),
constraint scores_mode foreign key(mode) references Modes(id),
constraint scores_nick foreign key(nick) references Nicks(id)
);
end;^
drop procedure if exists tables_update;^
create procedure tables_update() begin
declare `$database` varchar(64) default 'DPTW';
-- Level 0.
if (select 1 from information_schema.columns where table_schema = `$database` && table_name = 'Ips' && column_name = 'address' limit 1) is null then
alter table Ips add column address varchar(39) not null after id;
end if;
if (select 1 from information_schema.columns where table_schema = `$database` && table_name = 'UserAgents' && column_name = 'data' limit 1) is null then
alter table UserAgents add column `data` text not null after id;
end if;
if (select 1 from information_schema.columns where table_schema = `$database` && table_name = 'Databases' && column_name = 'name' limit 1) is null then
alter table `Databases` add column name varchar(64) not null after id;
end if;
if (select 1 from information_schema.columns where table_schema = `$database` && table_name = 'Parameters' && column_name = 'data' limit 1) is null then
alter table Parameters add column `data` text not null after id;
end if;
if (select 1 from information_schema.columns where table_schema = `$database` && table_name = 'Messages' && column_name = 'text' limit 1) is null then
alter table Parameters add column `text` text not null after id;
end if;
if (select 1 from information_schema.columns where table_schema = `$database` && table_name = 'Nicks' && column_name = 'name' limit 1) is null then
alter table Nicks add column name varchar(32) not null after id;
end if;
if (select 1 from information_schema.columns where table_schema = `$database` && table_name = 'Modes' && column_name = 'name' limit 1) is null then
alter table Modes add column name varchar(32) not null after id;
end if;
if (select 1 from information_schema.columns where table_schema = `$database` && table_name = 'Modes' && column_name = 'description' limit 1) is null then
alter table Modes add column description text not null after name;
end if;
-- Level 1.
if (select 1 from information_schema.columns where table_schema = `$database` && table_name = 'Sessions' && column_name = 'ip' limit 1) is null then begin
alter table Sessions add column ip integer not null after id;
alter table Sessions add constraint sessions_ip foreign key(ip) references Ips(id);
end;end if;
if (select 1 from information_schema.columns where table_schema = `$database` && table_name = 'Sessions' && column_name = 'user_agent' limit 1) is null then begin
alter table Sessions add column ip integer not null after ip;
alter table Sessions add constraint sessions_user_agent foreign key(user_agent) references UserAgents(id);
end;end if;
if (select 1 from information_schema.columns where table_schema = `$database` && table_name = 'Sessions' && column_name = 'date_last' limit 1) is null then
alter table Sessions add column date_last datetime not null default now() after date_in;
end if;
if (select 1 from information_schema.columns where table_schema = `$database` && table_name = 'Procedures' && column_name = 'database' limit 1) is null then begin
alter table Procedures add column `database` integer not null after id;
alter table Procedures add constraint procedures_database foreign key(`database`) references `Databases`(id);
end;end if;
if (select 1 from information_schema.columns where table_schema = `$database` && table_name = 'Procedures' && column_name = 'name' limit 1) is null then
alter table Procedures add column name varchar(64) not null after `database`;
end if;
-- Level 2.
if (select 1 from information_schema.columns where table_schema = `$database` && table_name = 'Logs' && column_name = 'parameters' limit 1) is null then begin
alter table Logs add column parameters integer not null after `procedure`;
alter table Logs add constraint logs_parameters foreign key(parameters) references Parameters(id);
end;end if;
if (select 1 from information_schema.columns where table_schema = `$database` && table_name = 'Logs' && column_name = 'error' limit 1) is null then
alter table Logs add column error bigint not null after parameters;
end if;
if (select 1 from information_schema.columns where table_schema = `$database` && table_name = 'Exceptions' && column_name = 'parameters' limit 1) is null then begin
alter table Exceptions add column parameters integer not null after `procedure`;
alter table Exceptions add constraint exception_parameters foreign key(parameters) references Parameters(id);
end;end if;
if (select 1 from information_schema.columns where table_schema = `$database` && table_name = 'Exceptions' && column_name = 'error' limit 1) is null then
alter table Exceptions add column error bigint not null after parameters;
end if;
if (select 1 from information_schema.columns where table_schema = `$database` && table_name = 'Exceptions' && column_name = 'message' limit 1) is null then begin
alter table Exceptions add column message integer not null after error;
alter table Exceptions add constraint exception_message foreign key(message) references Messages(id);
end;end if;
if (select 1 from information_schema.columns where table_schema = `$database` && table_name = 'Exceptions' && column_name = 'status' limit 1) is null then
alter table Exceptions add column status varchar(16) after message;
end if;
if (select 1 from information_schema.columns where table_schema = `$database` && table_name = 'Exceptions' && column_name = 'code' limit 1) is null then
alter table Exceptions add column code integer after message;
end if;
if (select 1 from information_schema.columns where table_schema = `$database` && table_name = 'Scores' && column_name = 'mode' limit 1) is null then begin
alter table Scores add column mode integer not null after `procedure`;
alter table Scores add constraint exception_mode foreign key(mode) references Modes(id);
end;end if;
if (select 1 from information_schema.columns where table_schema = `$database` && table_name = 'Scores' && column_name = 'nick' limit 1) is null then begin
alter table Scores add column nick integer not null after mode;
alter table Scores add constraint exception_nick foreign key(nick) references Nicks(id);
end;end if;
if (select 1 from information_schema.columns where table_schema = `$database` && table_name = 'Scores' && column_name = 'score' limit 1) is null then
alter table Scores add column score integer not null after nick;
end if;
end;^
call tables_remove();^
call tables_create();^
call tables_update();^
delimiter ;

@ -0,0 +1,120 @@
create database if not exists DPTW character set utf8mb4 collate utf8mb4_general_ci;
use DPTW;
delimiter ;^
drop view if exists ProceduresView;^
create view ProceduresView as select
`databases`.id as database_id,
`databases`.name as `database`,
procedures.id as procedure_id,
procedures.name as `procedure`
from Procedures procedures
join `Databases` `databases` on procedures.`database` = `databases`.id;^
drop view if exists SessionsView;^
create view SessionsView as select
sessions.id as id,
ips.id as ip_id,
ips.address as ip,
user_agents.id as user_agent_id,
user_agents.`data` as user_agent,
sessions.date_in as date_in,
sessions.date_last as date_last,
sessions.date_out as date_out
from Sessions sessions
join Ips ips on sessions.ip = ips.id
join UserAgents user_agents on sessions.user_agent = user_agents.id;^
drop view if exists LogsView;^
create view LogsView as select
logs.id as id,
sessions.id as session_id,
sessions.ip_id as ip_id,
sessions.ip as ip,
sessions.user_agent_id as user_agent_id,
sessions.user_agent as user_agent,
procedures.database_id as database_id,
procedures.`database` as `database`,
procedures.procedure_id as procedure_id,
procedures.`procedure` as `procedure`,
parameters.id as parameters_id,
parameters.`data` as parameters,
logs.error as error,
logs.date_in as date_in
from Logs logs
left join SessionsView sessions on logs.`session` = sessions.id
join ProceduresView procedures on logs.`procedure` = procedures.procedure_id
join Parameters parameters on logs.parameters = parameters.id;^
drop view if exists ExceptionsView;^
create view ExceptionsView as select
exceptions.id as id,
sessions.id as session_id,
sessions.ip_id as ip_id,
sessions.ip as ip,
sessions.user_agent_id as user_agent_id,
sessions.user_agent as user_agent,
procedures.database_id as database_id,
procedures.`database` as `database`,
procedures.procedure_id as procedure_id,
procedures.`procedure` as `procedure`,
parameters.id as parameters_id,
parameters.`data` as parameters,
exceptions.error as error,
messages.id as message_id,
messages.`text` as message,
exceptions.status as status,
exceptions.code as code,
exceptions.date_in as date_in
from Exceptions exceptions
left join SessionsView sessions on exceptions.`session` = sessions.id
join ProceduresView procedures on exceptions.`procedure` = procedures.procedure_id
join Parameters parameters on exceptions.parameters = parameters.id
join Messages messages on exceptions.message = messages.id;^
drop view if exists ScoresView;^
create view ScoresView as select
scores.id as id,
modes.id as mode_id,
modes.name as mode,
nicks.id as nick_id,
nicks.name as nick,
scores.score as score,
scores.date_in as date_in
from Scores scores
join Modes modes on scores.mode = modes.id
join Nicks nicks on scores.nick = nicks.id
where
scores.date_out is null &&
modes.date_out is null &&
nicks.date_out is null
order by
scores.score desc,
scores.date_in asc;^
drop view if exists ScoresFullView;^
create view ScoresFullView as select
scores.id as id,
sessions.id as session_id,
sessions.ip_id as ip_id,
sessions.ip as ip,
sessions.user_agent_id as user_agent_id,
sessions.user_agent as user_agent,
procedures.database_id as database_id,
procedures.`database` as `database`,
procedures.procedure_id as procedure_id,
procedures.`procedure` as `procedure`,
modes.id as mode_id,
modes.name as mode,
nicks.id as nick_id,
nicks.name as nick,
scores.score as score,
scores.date_in as date_in
from Scores scores
join SessionsView sessions on scores.`session` = sessions.id
join ProceduresView procedures on scores.`procedure` = procedures.procedure_id
join Modes modes on scores.mode = modes.id
join Nicks nicks on scores.nick = nicks.id;^
delimiter ;

@ -0,0 +1,118 @@
create database if not exists DPTW character set utf8mb4 collate utf8mb4_general_ci;
use DPTW;
delimiter ;^
drop function if exists sessions_validate;^
create function sessions_validate(
$id integer
) returns bigint begin
return (case
when $id is null then 1 << 0
when $id < 0 then 1 << 1
else ifnull((
select (case
when date_out is not null then 1 << 3
when timestampdiff(second, now(), date_last) > 30 then 1 << 4
else 0 end) from Sessions where id = $id limit 1
), 1 << 2) end);
end;^
drop function if exists sessions_exists;^
create function sessions_exists(
$id integer
) returns bool begin
return (select 1 from Sessions where id = $id limit 1) is not null;
end;^
drop procedure if exists procedures_get;^
create procedure procedures_get(
in `$database` varchar(64),
in `$procedure` varchar(64),
out $procedure_id integer
) begin
declare $database_id integer default (select id from `Databases` where date_out is null && name = `$database` limit 1);
if $database_id is null then begin
insert into `Databases`(name) values(`$database`);
set $database_id := last_insert_id();
end;end if;
set $procedure_id := (select id from Procedures where date_out is null && `database` = $database_id && name = `$procedure` limit 1);
if $procedure_id is null then begin
insert into Procedures(`database`, name) values($database_id, `$procedure`);
set $procedure_id := last_insert_id();
end;end if;
end;^
drop procedure if exists parameters_get;^
create procedure parameters_get(
in $parameters text,
out $parameters_id integer
) begin
set $parameters_id := (select id from Parameters where date_out is null && `data` = $parameters limit 1);
if $parameters_id is null then begin
insert into Parameters(`data`) values($parameters);
set $parameters_id := last_insert_id();
end;end if;
end;^
drop procedure if exists logs_set;^
create procedure logs_set(
in `$session` integer,
in `$database` varchar(64),
in `$procedure` varchar(64),
in $parameters text,
in $error bigint,
in $register bool
) begin
if $register then begin
declare $procedure_id integer;
declare $parameters_id integer;
call procedures_get(`$database`, `$procedure`, $procedure_id);
call parameters_get($parameters, $parameters_id);
insert into Logs(`session`, `procedure`, parameters, error) values
(if(sessions_exists(`$session`), `$session`, null), $procedure_id, $parameters_id, $error);
end;end if;
end;^
drop procedure if exists exceptions_set;^
create procedure exceptions_set(
in `$session` integer,
in `$database` varchar(64),
in `$procedure` varchar(64),
in $parameters text,
in $error bigint,
in $message text,
in $status varchar(16),
in $code integer
) begin
declare $procedure_id integer;
declare $parameters_id integer;
declare $message_id integer default (select id from Messages where date_out is null && `text` = $message limit 1);
call procedures_get(`$database`, `$procedure`, $procedure_id);
call parameters_get($parameters, $parameters_id);
if $message_id is null then begin
insert into Messages(`text`) values($message);
set $message_id := last_insert_id();
end;end if;
insert into Exceptions(`session`, `procedure`, parameters, error, message, status, code) values
(if(sessions_exists(`$session`), `$session`, null), $procedure_id, $parameters_id, $error, $message_id, $status, $code);
end;^
delimiter ;

@ -0,0 +1,121 @@
create database if not exists DPTW character set utf8mb4 collate utf8mb4_general_ci;
use DPTW;
delimiter ;^
drop procedure if exists sessions_full_validate;^
create procedure sessions_full_validate(
in `$session` text,
out $error bigint,
out $id integer,
out $ip_id integer,
out $user_agent_id integer
) begin
set $error := (case
when `$session` is null then 1 << 0
when `$session` = '' then 1 << 1
when !position(':' in `$session`) then 1 << 2
else 0 end) << 1;
if !$error then begin
declare $separator_i integer default position(':' in `$session`);
declare $id_string varchar(16) default substring(`$session`, 1, $separator_i - 1);
set $error := (case
when $id_string = '' then 1 << 0
when $id_string != 'null' && $id_string not regexp '^[\-\+]?[0-9]+$' then 1 << 1
else 0 end) << 4;
if !$error then begin
set $id := if($id_string = 'null', null, cast($id_string as signed));
set `$session` := substring(`$session`, $separator_i + 1, length(`$session`));
set $separator_i := position(':' in `$session`);
set $error := (
if($separator_i, 0, 1 << 0) |
(sessions_validate($id) & ~(1 << 0) << 1) |
0) << 6;
if !$error then begin
declare $ip varchar(39) default substring(`$session`, 1, $separator_i - 1);
declare $user_agent text default substring(`$session`, $separator_i + 1, length(`$session`));
set $error := (
if($ip = '', 1 << 0, 0) |
if($user_agent = '', 1 << 0, 0) |
0) << 8;
if !$error then begin
set $ip_id := (select id from Ips where address = $ip limit 1);
set $user_agent_id := (select id from UserAgents where `data` = $user_agent limit 1);
if $ip_id is null then begin
insert into Ips(address) values($ip);
set $ip_id := last_insert_id();
end;end if;
if $user_agent_id is null then begin
insert into UserAgents(`data`) values($user_agent);
set $user_agent_id := last_insert_id();
end;end if;
set $error := if($id is null, 0, ifnull((
select (
if(ip = $ip_id, 0, 1 << 1) |
if(user_agent = $user_agent_id, 0, 1 << 2) |
0) from Sessions where id = $id limit 1
), 1 << 0) << 10);
end;end if;
end;end if;
end;end if;
end;end if;
end;^
drop procedure if exists sessions_update;^
create procedure sessions_update(
in `$session` text,
out $error bigint,
out $id integer
) begin
declare `$database` varchar(64) default 'DPTW';
declare `$procedure` varchar(64) default 'sessions_update';
declare $parameters text default '{}';
declare $ip_id integer;
declare $user_agent_id integer;
declare exit handler for sqlexception begin
get diagnostics condition 1
@_status = returned_sqlstate,
@_code = mysql_errno,
@message = message_text;
set $error := $error | 1 << 0;
call exceptions_set($id, `$database`, `$procedure`, $parameters, $error, @message, @_status, @_code);
end;
call sessions_full_validate(`$session`, $error, $id, $ip_id, $user_agent_id);
set $error := $error & ~(1 << 7);
if !($error & ~(1 << 11)) then
if $error || $id is null then begin
insert into Sessions(ip, user_agent) values($ip_id, $user_agent_id);
set $id := last_insert_id();
end;else begin
select $id as id;
update Sessions set date_last := now() where id = $id;
end;end if;
end if;
call logs_set($id, `$database`, `$procedure`, $parameters, $error, !!$error);
end;^
delimiter ;

@ -0,0 +1,213 @@
create database if not exists DPTW character set utf8mb4 collate utf8mb4_general_ci;
use DPTW;
delimiter ;^
drop function if exists scores_set_validate;^
create function scores_set_validate(
$mode varchar(32),
$nick varchar(32),
$score integer
) returns bigint begin
return (
((case
when $mode is null then 1 << 0
when $mode = '' then 1 << 1
/*else ifnull((
select 0 from Modes where date_out is null && name = $mode limit 1
), 1 << 2) end) << 0) | */
else 0 end) << 0) |
((case
when $nick is null then 1 << 0
when $nick = '' then 1 << 1
else 0 end) << 3) |
((case
when $score is null then 1 << 0
when $score < 0 then 1 << 1
else 0 end) << 5) |
0);
end;^
drop procedure if exists modes_get;^
create procedure modes_get(
in $mode varchar(32),
out $id integer
) begin
set $id := (select id from Modes where date_out is null && name = $mode limit 1);
if $id is null then begin
insert into Modes(name) values($mode);
set $id := last_insert_id();
end;end if;
end;^
drop procedure if exists nicks_get;^
create procedure nicks_get(
in $nick varchar(32),
out $id integer
) begin
set $id := (select id from Nicks where date_out is null && name = $nick limit 1);
if $id is null then begin
insert into Nicks(name) values($nick);
set $id := last_insert_id();
end;end if;
end;^
drop procedure if exists scores_set;^
create procedure scores_set(
in `$session` text,
in $mode varchar(32),
in $nick varchar(32),
in $score integer,
out $error bigint,
out $id integer
) begin
declare `$database` varchar(64) default 'DPTW';
declare `$procedure` varchar(64) default 'scores_set';
declare $parameters text default json_set('{}',
'$.mode', $mode,
'$.nick', $nick,
'$.score', $score,
'$.id', 0
);
declare $session_id integer;
declare $ip_id integer;
declare $user_agent_id integer;
declare exit handler for sqlexception begin
get diagnostics condition 1
@_status = returned_sqlstate,
@_code = mysql_errno,
@message = message_text;
set $error := $error | 1 << 0;
call exceptions_set($session_id, `$database`, `$procedure`, $ip_id, $user_agent_id, $parameters, $error, @message, @_status, @_code);
end;
set $id := 0;
call sessions_full_validate(`$session`, $error, $session_id, $ip_id, $user_agent_id);
set $error := $error | (scores_set_validate($mode, $nick, $score) << 13);
if !$error then begin
declare $mode_id integer;
declare $nick_id integer;
declare $procedure_id integer;
call modes_get($mode, $mode_id);
call nicks_get($nick, $nick_id);
call procedures_get(`$database`, `$procedure`, $procedure_id);
insert into Scores(`session`, `procedure`, mode, nick, score) values
($session_id, $procedure_id, $mode_id, $nick_id, $score);
set $id := last_insert_id();
set $parameters := json_set($parameters, '$.id', $id);
end;end if;
call logs_set($session_id, `$database`, `$procedure`, $parameters, $error, true);
end;^
drop function if exists scores_list_validate;^
create function scores_list_validate(
$mode varchar(32),
$page integer,
$items_per_page integer,
$nicks varchar(32)
) returns bigint begin
return (
((case
when $mode is null then 1 << 0
when $mode = '' then 1 << 1
else ifnull((
select 0 from Modes where date_out is null && name = $mode limit 1
), 1 << 2) end) << 0) |
((case
when $page is null then 1 << 0
when $page < 1 then 1 << 1
else 0 end) << 3) |
((case
when $items_per_page is null then 1 << 0
when $items_per_page < 1 then 1 << 1
else 0 end) << 5) |
(if($nicks is null, 1 << 0, 0) << 7) |
0);
end;^
drop procedure if exists scores_list;^
create procedure scores_list(
in `$session` text,
in $mode varchar(32),
in $page integer,
in $items_per_page integer,
in $nicks varchar(32),
out $error bigint,
out $pages integer,
out $items integer
) begin
declare `$database` varchar(64) default 'DPTW';
declare `$procedure` varchar(64) default 'scores_list';
declare $parameters text default json_set('{}',
'$.page', $page,
'$.items_per_page', $items_per_page,
'$.nicks', $nicks,
'$.pages', 0,
'$.items', 0
);
declare $session_id integer;
declare $ip_id integer;
declare $user_agent_id integer;
declare exit handler for sqlexception begin
get diagnostics condition 1
@_status = returned_sqlstate,
@_code = mysql_errno,
@message = message_text;
set $error := $error | 1 << 0;
call exceptions_set($session_id, `$database`, `$procedure`, $parameters, $error, @message, @_status, @_code);
end;
set $pages := 0;
set $items := 0;
call sessions_full_validate(`$session`, $error, $session_id, $ip_id, $user_agent_id);
set $error := $error | (scores_list_validate($mode, $page, $items_per_page, $nicks) << 13);
if !$error then begin
declare $item_from integer;
declare $mode_id integer default (select id from Modes where date_out is null && name = $mode limit 1);
drop temporary table if exists DPTW_SCORES_LIST_TEMPORARY;
create temporary table DPTW_SCORES_LIST_TEMPORARY as select * from (
select *, rownum() as `position` from (select * from DPTW.ScoresView where mode_id = $mode_id) sublevel
) subtable where ifnull($nicks, '') = '' || nick like concat('%', $nicks, '%');
set $items := (select count(1) from DPTW_SCORES_LIST_TEMPORARY limit 1);
set $pages := ceil($items / $items_per_page);
if $page > $pages then
set $page := $pages;
end if;
set $item_from := ($page - 1) * $items_per_page;
select * from DPTW_SCORES_LIST_TEMPORARY limit $item_from, $items_per_page;
set $parameters := json_Set($parameters,
'$.pages', $pages,
'$.items', $items
);
end;end if;
call logs_set($session_id, `$database`, `$procedure`, $parameters, $error, true);
end;^
delimiter ;

@ -0,0 +1,54 @@
<?php
namespace DPTW;
class Dictionary{
public $dptw;
public function __construct($dptw){
$this->dptw = $dptw;
}
public function update(){
$urls = null;
$results = "";
$words = [];
$key = isset($_GET["key"]) ? $_GET["key"] : null;
try{
isset($_GET["urls"]) && ($urls = ($json = json_decode($urls = base64_decode($_GET["urls"]), true)) ? $json : [$urls]);
}catch(Exception $exception){};
!$urls && ($urls = is_array($urls = $this->dptw->settings("dictionary_urls")) ? $urls : [$urls]);
foreach($urls as $url)
$results .= file_get_contents($url);
$results = "<body" . preg_split('/<\/head>[\s]*<body/i', $results)[1];
foreach(["script", "style", "data", "object"] as $tag)
$results = preg_replace('/<' . $tag . '(?!(<\/' . $tag . '>)).+<\/' . $tag . '>/i', "", $results);
$results = preg_replace('/<[^<>]+>/', " ", $results);
foreach(preg_split('/\s+/', $results) as $word)
if(strlen($word) > 1 && !preg_match('/[^a-záéúíóàèùìòäëüïÖâêûîôÁÉÚÍÓÀÈÙÌÒÄËÜÏÖÂÊÛÎÔñçÑÇ]/i', $word) && !in_array($word, $words))
$words[] = $word;
$words = json_encode([
"urls" => $urls,
"words" => $words
], JSON_UNESCAPED_UNICODE);
$key && DPTW::save_file(__DIR__ . "/../Public/data/json/" . $key . ".json", $words);
header("content-type: application/json");
echo $words;
}
};

@ -0,0 +1,86 @@
<?php
namespace DPTW;
class MySQL{
public $dptw;
private $connection = null;
private $inputs;
public function __construct($dptw, $inputs = null){
$this->dptw = $dptw;
$this->inputs = $inputs;
}
public static function process_query($query){
$subquery = "";
preg_replace_callback('/(, |\()\@([a-z0-9_]+)/i', function($values) use(&$subquery){
$subquery .= ($subquery ? ", " : "") . "@" . $values[2] . " as `" . $values[2] . "`";
}, $query);
return preg_replace('/;+$/', "", $query) . ($subquery ? ";select " . $subquery . ";" : "");
}
public static function variable_type($value){
return $value;
}
public function query($query, $variables = []){
$error = 0;
$results = null;
if(!$this->connection){
try{
$this->connection = new \PDO(\DPTW::string_variables($this->dptw->settings(["mysql_string_connection", "string_connection"]), [
"engine" => $this->dptw->settings(["mysql_engine", "engine"], $this->inputs),
"database" => $this->dptw->settings(["mysql_database", "database"], $this->inputs),
"host" => $this->dptw->settings(["mysql_host", "host"], $this->inputs),
"port" => $this->dptw->settings(["mysql_port", "port"], $this->inputs)
]), $this->dptw->settings(["mysql_user", "user"], $this->inputs), $this->dptw->settings(["mysql_password", "password"], $this->inputs));
}catch(Exception $exception){
$error |= 1 << 0;
};
};
if(!($error |= $this->connection ? 0 : 1 << 1)){
$query_processed = \DPTW::string_variables(self::process_query($query), array_merge($variables, [
"session" => "'" . ($this->dptw->session_get() ?? "null") . ":" . (\DPTW::get_ip() ?? "null") . ":" . $_SERVER["HTTP_USER_AGENT"] . "'"
]));
// print_r($query_processed);
($statement = $this->connection->prepare($query_processed))->execute();
do{
try{
$table = [];
$fetch_all = $statement->fetchAll(\PDO::FETCH_ASSOC);
foreach($statement->rowCount() == 0 ? [] : $fetch_all as $new_row){
$row = [];
foreach($new_row as $key => $value){
$row[$key] = self::variable_type($value);
};
$table[] = $row;
};
$results["tables"][] = $table;
}catch(\Exception $exception){};
}while($statement->nextRowset());
if(preg_match('/(,\s+?|\()\@/', $query)){
$l = count($results["tables"]) - 1;
foreach($results["tables"][$l][0] as $key => $value)
$results["variables"][$key] = self::variable_type($value);
unset($results["tables"][$l]);
};
};
return [$results, $error];
}
}

@ -0,0 +1,202 @@
<?php
class DPTW{
private static $default_settings = [
"dictionary_urls" => "https://inciclopedia.org/wiki/Frikipedia",
"request_root" => "/api"
];
private $inputs = [];
private $request_variables = [];
public $dictionary;
public function __construct($inputs = null){
is_array($inputs) && ($this->inputs = $inputs);
class_exists('\DPTW\Dictionary') && ($this->dictionary = new \DPTW\Dictionary($this));
class_exists('\DPTW\MySQL') && ($this->mysql = new \DPTW\MySQL($this));
$route = substr($_SERVER["REQUEST_URI"], strlen($this->settings("request_root")));
($uri_variables_i = strpos($route, "?")) && ($route = substr($route, 0, $uri_variables_i));
isset(($_GET["v"])) && ($this->request_variables = json_decode(base64_decode($_GET["v"]), true));
switch($route){
case "/dictionary/update":
$this->dictionary->update();
break;
case "/sessions/update":
$this->session_update(true);
break;
case "/scores/set":
$this->set_score();
break;
case "/test/1":
$this->test_1();
break;
case "/scores/list":
$this->list_scores();
break;
default:
self::response(404, "unknown_route");
break;
};
}
public function request($key){
return isset($this->request_variables[$key]) ? $this->request_variables[$key] : null;
}
private static function save_file($path, $data){
$directory = "";
$slash = strpos($path, "/") ? "/" : "\\";
if(preg_match('/^[a-z]\:/', $path)){
$directory = substr($path, 0, 2);
$path = substr($path, 2);
};
$directory = preg_replace('/^(.+)[\/\\\\][^\/\\\\]+$/', "$1", $path);
!file_exists($directory) && mkdir($directory, 0777, true);
file_put_contents($path, $data);
}
public function settings($keys, $inputs = null){
if(is_string($keys))
$keys = [$keys];
elseif(!is_array($keys))
$keys = [];
foreach([$inputs, $this->inputs, \DPTW\Secrets::settings, self::$default_settings] as $subinputs)
if(is_array($subinputs))
foreach($keys as $key)
if(isset($subinputs[$key]))
return $subinputs[$key];
return null;
}
public static function string_variables($string, $variables){
return preg_replace_callback('/\{([^\{\}]+)\}/', function($values) use($variables){
return isset($variables[$values[1]]) ? $variables[$values[1]] : $values[0];
}, $string);
}
public static function get_ip(){
foreach(["HTTP_X_REAL_IP", "HTTP_CLIENT_IP", "HTTP_X_FORWARDED_FOR", "REMOTE_ADDR"] as $key){
if(!empty($_SERVER[$key]))
return explode(",", $_SERVER[$key])[0];
if($ips = getenv($key))
return explode(",", $ips)[0];
};
return null;
}
public function session_get(){
return isset($_SESSION["dptw_session_id"]) ? $_SESSION["dptw_session_id"] : null;
}
public static function response($code, $data){
header("content-type: application/json");
echo json_encode([
"ok" => true,
"code" => $code,
"content" => $data
]);
}
private function session_update($response = false){
$results = $this->mysql->query("call sessions_update({session}, @error, @id);");
$data = [
"error" => $results[0]["variables"]["error"],
"id" => $results[0]["variables"]["id"]
];
if(!isset($_SESSION["dptw_session_id"]) || $_SESSION["dptw_session_id"] != $results[0]["variables"]["id"])
$_SESSION["dptw_session_id"] = $results[0]["variables"]["id"];
$response && $this->response(200, $data);
return [$data["id"], $data["error"]];
}
private function test_1(){
self::response(200, base64_encode(json_encode([
"mode" => "testing_game",
"page" => 1,
"items_per_page" => 20,
"nicks" => ""
])));
}
private function set_score(){
list($session_id, $error) = $this->session_update();
$id = null;
if(!$error){
$results = $this->mysql->query("call scores_set({session}, '{mode}', '{nick}', {score}, @error, @id);", [
"mode" => $this->request("mode"),
"nick" => $this->request("nick"),
"score" => $this->request("score")
]);
$error |= $results[0]["variables"]["error"];
$id = $results[0]["variables"]["id"];
};
self::response(200, [
"error" => $error,
"id" => $id
]);
return [$id, $error];
}
private function list_scores(){
list($session_id, $error) = $this->session_update();
$pages = null;
$items = null;
$scores = null;
if(!$error){
$results = $this->mysql->query("call scores_list({session}, '{mode}', {page}, {items_per_page}, '{nicks}', @error, @pages, @items);", [
"mode" => $this->request("mode"),
"page" => $this->request("page"),
"items_per_page" => $this->request("items_per_page"),
"nicks" => $this->request("nicks")
]);
$error |= $results[0]["variables"]["error"];
$pages = $results[0]["variables"]["pages"];
$items = $results[0]["variables"]["items"];
$scores = $results[0]["tables"][0];
};
self::response(200, [
"error" => $error,
"pages" => $pages,
"items" => $items,
"scores" => $scores
]);
return [$pages, $items, $scores, $error];
}
};

@ -0,0 +1,12 @@
<?php
session_start();
foreach([
"DPTW",
"DPTW.Secrets",
"DPTW.MySQL",
"DPTW.Dictionary"
] as $file)
if(file_exists($full_path = __DIR__ . "/" . $file . ".php"))
include $full_path;

@ -0,0 +1,5 @@
<?php
include __DIR__ . "/../PHP/includes.php";
$dptw = new DPTW();

@ -0,0 +1,6 @@
Header set Access-Control-Allow-Origin "*"
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ api/index.php?q=$1 [L,QSA]

@ -0,0 +1,5 @@
<?php
include __DIR__ . "/../../PHP/includes.php";
$dptw = new DPTW();

@ -0,0 +1,44 @@
DPTW.Dictionary = function(dptw, input){
const self = this,
words = [];
let started = false;
this.maximum_characters = 0;
const construct = () => {};
this.start = callback => {
const end = status => typeof callback == "function" && callback(status);
if(started){
end(false);
return false;
};
started = true;
self.add(dptw.settings("dictionary_files"), () => {
end(true);
});
return true;
};
this.add = (inputs, callback) => dptw.load_blocks(
dptw.set_array(inputs),
json => json.words.forEach(word => {
if(!words.includes(word)){
words.push(word);
word.length > self.maximum_characters && (self.maximum_characters = word.length);
};
}),
callback,
0
);
this.get_random_word = () => words[Math.random() * words.length >> 0];
construct();
};

@ -0,0 +1,137 @@
DPTW.Errors = function(dptw, inputs){
const self = this;
let started = false,
thread, toast_timer,
toast_show_default,
toast_show_ok,
toast_show_info,
toast_show_warn,
toast_show_error;
let item_self = this.item_self;
const construct = () => {};
this.start = callback => {
const end = status => typeof callback == "function" && callback(status);
if(started){
end(false);
return false;
};
started = true;
end(true);
return true;
};
this.build_toast = () => {
item_self = self.item_self = dptw.kanvas.item_self.appendChild(document.createElement("ul"));
item_self.setAttribute("class", "toast");
toast_timer = dptw.settings("toast_timer");
toast_show_default = dptw.settings("toast_show_default");
toast_show_ok = dptw.settings("toast_show_ok");
toast_show_info = dptw.settings("toast_show_info");
toast_show_warn = dptw.settings("toast_show_warn");
toast_show_error = dptw.settings("toast_show_error");
thread = dptw.kanvas.threads_add(thread_method);
};
const thread_method = () => {
const date = Date.now(),
for_delete = [];
item_self.querySelectorAll(".toast-item").forEach(item => {
if(date - Number(item.getAttribute("data-date")) > toast_timer)
for_delete.push(item);
});
for_delete.forEach(item => item.remove());
};
this.add_toast = (type, message, variables) => {
const text = dptw.i18n.get(message, variables),
log_mode = {
info : "log",
warn : "warn",
erro : "error",
error : "error",
ok : "log"
}[type] || "log";
type = type.toLowerCase();
if(
(type == "ok" && toast_show_ok) ||
(type == "warn" && toast_show_warn) ||
(["error", "erro"].includes(type) && toast_show_error) ||
(type == "info" && toast_show_info) ||
(!["ok", "warn", "error", "erro", "info"].includes(type) && toast_show_default)
){
const item = item_self.appendChild(document.createElement("li"));
item.setAttribute("class", "toast-item");
item.setAttribute("data-date", Date.now());
item.setAttribute("data-type", type);
item.setAttribute("data-i18n", message);
variables && item.setAttribute("data-i18n-variables", btoa(JSON.stringify(variables)));
item.setAttribute("title", text);
item.innerHTML = text;
};
console[log_mode]("%c" + text.replace(/<([^> ]+)[^>]*>/g, (...arguments) => {
const tag = arguments[1].toLowerCase();
return (
tag == "li" ? "\n - " :
["p", "/p", "br", "br/"].includes(tag) ? "\n" :
"");
}), {
info : "color:#00F;",
ok : "color:#0F0;"
}[type] || null);
};
this.validate = (code, messages, variables, error_message, ok_message) => {
const variables_base64 = btoa(JSON.stringify(variables || (variables = {})));
variables.list = ``;
variables.code = code;
for(let i = 0; 1 << i <= code; i ++)
if((1 << i) & code){
const i18n = messages[i] || "error_message_" + i,
text = dptw.i18n.get(i18n, variables);
variables.list += `<li class="error" data-i18n="` + i18n + `" data-i18n-variables="` + variables_base64 + `" title="` + i18n + `">` + text + `</li>`;
};
if(code)
error_message && self.add_toast("error", error_message, variables);
else
ok_message && self.add_toast("ok", ok_message, variables);
return !code;
};
construct();
};

@ -0,0 +1,72 @@
DPTW.I18N = function(dptw, input){
const self = this,
sentences = {};
let started = false,
overwrite_add, default_text,
selected = null;
const construct = () => {};
this.start = callback => {
const end = status => typeof callback == "function" && callback(status);
if(started){
end(false);
return false;
};
started = true;
overwrite_add = dptw.settings(["i18n_overwrite", "overwrite"]);
selected = dptw.settings(["default_language", "language"]);
default_text = dptw.settings("default_text");
self.add(dptw.settings("i18n_files"), true, () => {
end(true);
});
return true;
};
this.add = (inputs, overwrite, callback) => dptw.load_blocks(
dptw.set_array(inputs),
json => {
typeof overwrite != "boolean" && (overwrite = overwrite_add);
for(const language in json){
!sentences[language] && (sentences[language] = {});
for(const key in json[language])
(overwrite || sentences[language][key] === undefined) && (sentences[language][key] = json[language][key]);
};
},
callback,
0
);
const get = keys => {
const l = (keys = (
keys instanceof Array ? keys :
typeof keys == "string" ? [keys] :
[]).filter((key, i, array) => typeof key == "string" && array.indexOf(key) == i)).length;
if(l){
const languages = [selected].concat(Object.keys(sentences)),
m = languages.length;
for(let j = 0; j < m; j ++)
if(languages[j] && sentences[languages[j]])
for(let i = 0; i < l; i ++)
if(keys[i] && sentences[languages[j]][keys[i]] !== undefined)
return sentences[languages[j]][keys[i]];
return keys[0];
};
return default_text;
};
this.get = (keys, variables) => dptw.string_variables(get(keys), variables);
construct();
};

@ -0,0 +1,342 @@
DPTW.Scores = function(dptw, inputs){
const self = this;
let started = false,
nick_maximum_length, zeros_fill_score,
pages,
scores_show_save_ok_message,
scores_show_save_error_message,
scores_show_load_ok_message,
scores_show_load_error_message,
game_mode_name;
const SETTER = 10;
const construct = () => {};
this.start = callback => {
const end = status => typeof callback == "function" && callback(status);
if(started){
end(false);
return false;
};
started = true;
nick_maximum_length = dptw.settings("nick_maximum_length");
zeros_fill_score = dptw.settings("zeros_fill_score");
scores_show_save_ok_message = dptw.settings("scores_show_save_ok_message");
scores_show_save_error_message = dptw.settings("scores_show_save_error_message");
scores_show_load_ok_message = dptw.settings("scores_show_load_ok_message");
scores_show_load_error_message = dptw.settings("scores_show_load_error_message");
game_mode_name = dptw.settings("game_mode_name");
end(true);
return true;
};
const button = (key, x, y, width, height) => ({
type : "rectangle",
x : x,
y : y,
width : width,
height : height,
background : "rgba(255, 255, 255, .3)",
border_color : "#000",
border_width : .1,
childs : [{
type : "text",
x : width / 2,
y : height / 2,
baseline : "middle",
align : "center",
text : dptw.i18n.get(key),
size : height,
background : "#FFF",
shadow : [[0, 0, .2, "#000"]]
}],
on_click : "{object_name}.scores." + key
});
const label_text = (x, y, align, text) => ({
type : "text",
x : x,
y : y,
baseline : "middle",
align : align,
size : 1.5,
style : "bold",
background : "#FFF",
shadow : [[0, 0, .2, "#000"]],
text : text
});
this.build = () => {
const half = dptw.kanvas.cells / 2;
dptw.kanvas.map[SETTER] = {type : "block", x : -half, y : -half, childs : [
{type : "rectangle", x : 0, y : 0, width : dptw.kanvas.cells, height : dptw.kanvas.cells, background : "#000", alpha : .8},
button("previous", 2, dptw.kanvas.cells - 4, 11, 2.5),
button("next", dptw.kanvas.cells - 13, dptw.kanvas.cells - 4, 11, 2.5),
button("back", 14, dptw.kanvas.cells - 4, 12, 2.5),
label_text(2, dptw.kanvas.cells - 5.5, "left", dptw.i18n.get("page")),
label_text(dptw.kanvas.cells - 2, dptw.kanvas.cells - 5.5, "right", 1),
{type : "block", x : 2, y : 2, childs : []}
]};
load_scores();
};
this.build_add = () => {
const half = dptw.kanvas.cells / 2,
key_size = dptw.kanvas.cells / 12,
margin = dptw.kanvas.cells - (key_size * 10),
items = [],
key_margin = key_size * .05,
key_width = key_size - (2 * key_margin),
character_position = key_width / 2,
half_key = key_size / 2;
let keys_x = half_key,
keys_y = key_size;
items.push({
type : "rectangle",
x : key_size - .1,
y : key_size * 6,
width : key_size * 10,
height : key_size,
background : "rgba(255, 255, 255, .3)",
border_color : "#000",
border_width : .1,
childs : [{
type : "text",
x : key_size * 5,
y : half_key,
baseline : "middle",
align : "center",
text : "",
size : key_width,
background : "#FFF",
shadow : [[0, 0, .2, "#000"]]
}]
});
[
"1234567890<",
"qwertyuiop",
"asdfghjkl",
"zxcvbnm"
].forEach((set, i) => set.split("").forEach((character, j) => items.push({
type : "rectangle",
x : (i * half_key) + keys_x + ((j * key_size) + key_margin),
y : keys_y + ((i * key_size) + key_margin),
width : key_width,
height : key_width,
background : "rgba(255, 255, 255, .3)",
border_color : "#000",
border_width : .1,
childs : [{
type : "text",
x : character_position,
y : character_position,
baseline : "middle",
align : "center",
text : (character = character.toUpperCase()),
size : key_width,
background : "#FFF",
shadow : [[0, 0, .2, "#000"]]
}],
on_click : "(() => {object_name}.scores.set_nick('" + character + "'))"
})));
["not_save", "save"].forEach((key, i) => items.push({
type : "rectangle",
x : (key_size * 5 * i) + half_key + (key_size * i),
y : key_size * 8,
width : key_size * 5,
height : key_size,
background : "rgba(255, 255, 255, .3)",
border_color : "#000",
border_width : .1,
childs : [{
type : "text",
x : key_size * 2.5,
y : half_key,
baseline : "middle",
align : "center",
text : dptw.i18n.get(key),
size : key_width,
background : "#FFF",
shadow : [[0, 0, .2, "#000"]]
}],
on_click : "{object_name}.scores." + key
}));
dptw.kanvas.map[SETTER] = {type : "block", x : -half, y : -half, childs : items};
};
this.set_nick = character => {
if(character == "<")
with(dptw.kanvas.map[SETTER].childs[0].childs[0])text = text.substr(0, text.length - 1);
else
with(dptw.kanvas.map[SETTER].childs[0].childs[0])text.length < nick_maximum_length && (text += character);
};
this.save = () => {
const nick = dptw.kanvas.map[SETTER].childs[0].childs[0].text;
if(!nick){
alert("need_nick");
return;
};
const variables = {
mode : game_mode_name,
nick : nick,
score : Number(dptw.kanvas.map[dptw.SCORE].text)
}
dptw.load_file("/api/scores/set?v=" + btoa(JSON.stringify(variables)), response => {
response = JSON.parse(response);
if(dptw.errors.validate(
response.content.error,
[].concat(
dptw.sql_session_errors,
[
"mode_null",
"mode_empty",
"mode_not_exists",
"nick_null",
"nick_empty",
"score_null",
"score_lower_0"
]
),
variables,
scores_show_save_error_message && "save_scores_error",
scores_show_save_ok_message && "save_scores_ok"
)){
dptw.kanvas.map[SETTER] = null;
dptw.show_menu();
};
});
};
this.not_save = () => {
dptw.kanvas.map[SETTER] = null;
dptw.show_menu();
};
this.back = () => {
dptw.kanvas.map[SETTER] = null;
dptw.show_menu();
};
this.next = () => {
const page_block = dptw.kanvas.map[SETTER].childs[5],
page = Number(page_block.text);
if(page < pages){
page_block.text = page + 1;
load_scores();
};
};
this.previous = () => {
const page_block = dptw.kanvas.map[SETTER].childs[5];
if(page_block.text != 1){
page_block.text = Number(page_block.text) - 1;
load_scores();
};
};
const score_text = (x, y, align, text) => ({
type : "text",
x : x,
y : y,
baseline : "middle",
align : align,
size : 2.5,
style : "bold",
background : "#FFF",
shadow : [[0, 0, .2, "#000"]],
text : text
});
const load_scores = () => {
const variables = {
mode : "testing_game",
page : Number(dptw.kanvas.map[SETTER].childs[5].text),
items_per_page : 15,
nicks : ""
};
dptw.load_file("/api/scores/list?v=" + btoa(JSON.stringify(variables)), response => {
response = JSON.parse(response);
dptw.kanvas.map[SETTER].childs[6].childs = [];
pages = response.content.pages;
dptw.errors.validate(
response.content.error,
[].concat(
dptw.sql_session_errors,
[
"mode_null",
"mode_empty",
"mode_not_exists",
"page_null",
"page_lower_1",
"items_per_page_null",
"items_per_page_lower_1",
"nicks_null"
]
),
variables,
scores_show_load_error_message && "load_scores_error",
scores_show_load_ok_message && "load_scores_ok"
) &&
response.content.scores.forEach((score, i) => {
const y = 1 + (i * 2);
dptw.kanvas.map[SETTER].childs[6].childs.push(
score_text(0, y, "left", (zeros_fill_score + score.position).slice(-zeros_fill_score.length)),
score_text(10, y, "left", score.nick),
score_text(20, y, "left", score.date_in.replace(/^[0-9]{2}([0-9]{2})\-([0-9]{2})\-([0-9]{2}) .+$/, "$1$2$3")),
score_text(dptw.kanvas.cells - 4, y, "right", (zeros_fill_score + score.score).slice(-zeros_fill_score.length))
);
});
});
};
construct();
};

@ -0,0 +1,838 @@
DPTW = function(input){
const self = this,
default_settings = {
object_name : "dptw",
dptw_autostart : true,
settings_files : [
"/json/DPTW.settings.json",
"/json/DPTW.settings.secrets.json"
],
position : "body",
ajax_timeout : 2000,
dictionary_file : "/json/DPTW.dictionary.json",
class : "dptw"
},
sprites = {},
sounds = {},
images = {};
let started = false,
game_working = false,
game_thread = null,
difficulty, character_size, last_word_y, velocity, velocity_increment, current_velocity,
text_box, text_cache = "",
destruction_animations, destruction_size, destruction_sounds,
overwrite_sprites, overwrite_sounds,
scream_sounds, ok_sounds,
characters_sizer, reduce_life_value, increase_life_value, allow_alter_style, characters_color,
allow_reduce_score, character_ok_points, character_wrong_points, word_ok_points, word_wrong_points,
multiplier, allow_points_multiplier,
zeros_fill_score, allow_pause,
game_status = "loading",
font_family, main_background, secondary_background,
session_time_update, session_last_update = 0,
sessions_show_update_ok_message,
sessions_show_update_error_message,
word_number, word_proportional_timeout, last_word_time, word_enabled_random_timer,
allow_ignore_case,
multiplier_value;
this.sql_session_errors = [
"sql_exception",
"session_string_null",
"session_empty",
"session_bad_format",
"session_id_string_empty",
"session_id_string_bad",
"session_string_incompleted",
"session_null",
"session_not_id",
"session_not_exists",
"session_date_out",
"session_timeout",
null
];
let main_menu = self.main_menu;
let kanvas = self.kanvas;
let i18n = this.i18n;
let errors = this.errors;
let dictionary = this.dictionary;
let scores = this.scores;
const GAME = 2;
const MAIN_MENU = 5;
const FPS = 4;
const WORDS = 0;
const SHOTS = 1;
const DESTRUCTIONS = 2;
const LIFE = 6;
const PAUSE = 7;
const SCORE = this.SCORE = 8;
const construct = () => {
self.kanvas = kanvas = new Kanvas({
...default_settings,
...(typeof input != "object" ? {} : input),
autostart : false
});
kanvas.extends(self);
DPTW.I18N && (i18n = self.i18n = new DPTW.I18N(self, input));
DPTW.Errors && (errors = self.errors = new DPTW.Errors(self, input));
DPTW.Dictionary && (dictionary = self.dictionary = new DPTW.Dictionary(self, input));
DPTW.Scores && (scores = self.scores = new DPTW.Scores(self, input));
self.settings("dptw_autostart") && self.start();
};
this.start = callback => {
const end = status => typeof callback == "function" && callback(status);
if(started){
end(false);
return false;
};
started = true;
self.load_blocks(
self.set_array(self.settings("settings_files")),
json => self.settings_add(json, true),
() => {
difficulty = self.settings("difficulty");
velocity = self.settings("velocity");
velocity_increment = self.settings("velocity_increment");
destruction_size = self.settings("destruction_size");
overwrite_sprites = self.settings(["overwrite_sprites", "overwrite"]);
overwrite_sounds = self.settings(["overwrite_sounds", "overwrite"]);
characters_sizer = self.settings("characters_sizer");
reduce_life_value = self.settings("reduce_life_value");
increase_life_value = self.settings("increase_life_value");
allow_alter_style = self.settings("allow_alter_style");
characters_color = self.settings("characters_color");
word_proportional_timeout = self.settings("word_proportional_timeout");
word_enabled_random_timer = self.settings("word_enabled_random_timer");
allow_ignore_case = self.settings("allow_ignore_case");
allow_reduce_score = self.settings("allow_reduce_score");
character_ok_points = self.settings("character_ok_points");
word_ok_points = self.settings("word_wrong_points");
character_wrong_points = self.settings("character_wrong_points");
word_wrong_points = self.settings("word_wrong_points");
allow_points_multiplier = self.settings("allow_points_multiplier");
zeros_fill_score = self.settings("zeros_fill_score");
allow_pause = self.settings("allow_pause");
multiplier_value = self.settings("multiplier_value");
font_family = self.settings("font_family");
main_background = self.settings("main_background");
secondary_background = self.settings("secondary_background");
session_time_update = self.settings("session_time_update");
sessions_show_update_ok_message = dptw.settings("sessions_show_update_ok_message");
sessions_show_update_error_message = dptw.settings("sessions_show_update_error_message");
i18n.start(status => {
self.load_sprites(self.settings("sprites_files"), true, () => {
const destruction_animations_keys = self.settings("destruction_animations");
destruction_animations = [];
(
destruction_animations_keys instanceof Array ? destruction_animations_keys : typeof destruction_animations_keys == "string" ? [destruction_animations_keys] : []
).forEach(key => sprites[key] && destruction_animations.push({
sprite : sprites[key].path,
animation : sprites[key].animation,
frames_per_second : sprites[key].frames_per_second
}));
self.load_sounds(self.settings("sounds_files"), true, () => {
const sets = {
destruction_sounds : destruction_sounds = [],
scream_sounds : scream_sounds = [],
ok_sounds : ok_sounds = []
};
for(const key in sets){
const set = self.settings(key);
(set instanceof Array ? set : typeof set == "string" ? [set] : []).forEach(subkey => sounds[subkey] && sets[key].push({
sound : sounds[subkey].path,
fragments : sounds[subkey].fragments,
volume : sounds[subkey].volume || 1
}));
};
kanvas.start(status => {
dictionary.start(status => {
scores.start(status => {
builder();
game_thread = dptw.threads_add(game_thread_method);
end(status);
});
});
});
});
});
});
},
0
);
return true;
};
this.load_file = (url, callback) => {
let ended = false;
const ajax = new XMLHttpRequest(),
end = error_message => {
if(ended)
return;
ended = true;
callback(ajax.responseText, ajax.status, ajax.readyState, error_message == "OK", error_message);
},
date = Date.now(),
timeout = self.settings(["ajax_timeout", "timeout"]);
ajax.open("get", url, true);
ajax.timeout = timeout;
ajax.onreadystatechange = () => {
if(ended)
return;
if(ajax.readyState == 4)
end((ajax.status >= 200 && ajax.status < 300) || [301, 302, 304].includes(ajax.status) ? "OK" : "HTTP_ERROR");
else if(Date.now() - date > timeout)
end("FORCED_TIMEOUT");
};
ajax.send(null);
ajax.onerror = () => end("ERROR");
ajax.onabort = () => end("ABORTED");
ajax.ontimeout = () => end("TIMEOUT");
return ajax;
};
this.set_array = variable => (
variable instanceof Array ? variable :
["string", "object"].includes(typeof variable) ? [variable] :
[])
this.load_blocks = (inputs, fragment_callback, callback, i) => {
if(i == inputs.length){
typeof callback == "function" && callback();
return;
};
const end = () => self.load_blocks(inputs, fragment_callback, callback, i + 1);
if(inputs[i]){
if(inputs[i] instanceof Array)
self.load_blocks(inputs[i], fragment_callback, end, 0);
else if(typeof inputs[i] == "object"){
fragment_callback(inputs[i]);
end();
}else if(typeof inputs[i] == "string"){
let json;
try{
json = JSON.parse(inputs[i]);
}catch(exception){};
if(json)
self.load_blocks(self.set_array(json), fragment_callback, end, 0);
else
self.load_file(inputs[i], response => {
try{
json = JSON.parse(response);
}catch(exception){};
self.load_blocks(self.set_array(json), fragment_callback, end, 0);
});
}else
end();
}else
end();
};
this.load_sprites = (inputs, overwrite, callback) => this.load_blocks(inputs instanceof Array ? inputs : inputs ? [inputs] : [], json => {
typeof overwrite != "boolean" && (overflow = overwrite_sprites);
(json.sprites || []).forEach(sprite => {
if(
sprite &&
sprite.enabled &&
sprite.key
){
if(sprite.animation)
(overwrite || !sprites[sprite.key]) && (sprites[sprite.key] = sprite);
else
(overwrite || !images[sprite.key]) && (images[sprite.key] = sprite);
};
});
}, callback, 0);
this.load_sounds = (inputs, overwrite, callback) => this.load_blocks(inputs instanceof Array ? inputs : inputs ? [inputs] : [], json => {
typeof overwrite != "boolean" && (overflow = overwrite_sounds);
(json.sounds || []).forEach(sound => (
sound &&
sound.enabled &&
sound.key &&
(overwrite || !sounds[sound.key]) &&
(sounds[sound.key] = sound)
));
}, callback, 0);
const create_button = (key, x, y, width, height) => ({
type : "rectangle",
x : x,
y : y,
width : width || 16,
height : height || 3,
background : "rgba(255, 255, 255, .3)",
on_click : "{object_name}.go_to_" + key,
childs : [{
type : "text",
x : 8,
y : .5,
align : "center",
baseline : "top",
text : i18n.get(key),
background : "#FFF",
size : 2,
border_width : .05,
border_color : "#000",
style : "bold",
family : font_family,
shadows : [
[0, 0, .125, "#000"],
[0, 0, .25, "#000"],
[0, 0, .5, "#000"],
[0, 0, 1, "#000"]
]
}]
});
const show_menu = this.show_menu = () => {
const half = kanvas.cells / 2,
menu = {type : "block", x : -half, y : -half, childs : [
{type : "rectangle", x : 0, y : 0, width : kanvas.cells, height : kanvas.cells, background : "#000", alpha : .7},
{type : "block", x : half - 8, y : half - 9.5, childs : [{
type : "text",
x : 8,
y : -5,
align : "center",
baseline : "top",
text : i18n.get("test_mode"),
background : "#FFF",
size : 4,
border_width : .05,
border_color : "#000",
style : "bold",
family : font_family,
shadows : [
[0, 0, .25, "#000"]
]
}]}
]};
game_status = "main_menu";
["start", "settings", "scores", "manual", "credits"].forEach((key, i) => menu.childs[1].childs.push(create_button(key, 0, (i * 4) + .5)));
kanvas.map[MAIN_MENU] = menu;
};
const hide_menu = () => kanvas.map[MAIN_MENU] = null;
const builder = () => {
const half = kanvas.cells / 2,
margin = kanvas.cells / 8,
padding = half + margin,
full_padding = padding * 2,
margined = half - margin;
game_status = "building";
errors.build_toast();
kanvas.map.push(
{type : "rectangle", x : -kanvas.cells_x, y : -kanvas.cells_y, width : kanvas.cells_x * 2, height : kanvas.cells_y * 2, background : "#000", childs : images[secondary_background] ? [
{type : "image", x : 0, y : 0, width : kanvas.cells_x * 2, height : kanvas.cells_y * 2, url : images[secondary_background].path},
{type : "rectangle", x : 0, y : 0, width : kanvas.cells_x, height : kanvas.cells_y, background : "#000", alpha : .85}
] : []},
{type : "cache", name : "main_background_back", x : -padding, y : -padding, width : full_padding, height : full_padding, childs : [
images[main_background] ? {type : "image", x : -half, y : -half, width : kanvas.cells, height : kanvas.cells, url : images[main_background].path} : null,
{type : "rectangle", x : -half, y : -half, width : kanvas.cells, height : kanvas.cells, background : "#246", alpha : .5}
]},
null,
{type : "cache", name : "main_background_fore", x : -half, y : -half, width : kanvas.cells, height : kanvas.cells, childs : [
{type : "rectangle", x : -half, y : -half, width : kanvas.cells, height : margin, background : [0, -half, 0, -margined, [
[0, "#000"],
[1, "rgba(0, 0, 0, 0)"]
]]},
{type : "rectangle", x : -half, y : -half, width : margin, height : kanvas.cells, background : [-half, 0, -margined, 0, [
[0, "#000"],
[1, "rgba(0, 0, 0, 0)"]
]]},
{type : "rectangle", x : -half, y : margined, width : kanvas.cells, height : margin, background : [0, half, 0, margined, [
[0, "#000"],
[1, "rgba(0, 0, 0, 0)"]
]]},
{type : "rectangle", x : margined, y : -half, width : margin, height : kanvas.cells, background : [half, 0, margined, 0, [
[0, "#000"],
[1, "rgba(0, 0, 0, 0)"]
]]},
{type : "rectangle", x : -half, y : -half, width : kanvas.cells, height : kanvas.cells, border_color : "#147", border_width : .4, shadow : [
[0, 0, .5, "#28F"]
]}
]},
{type : "text", x : kanvas.cells_x, y : -kanvas.cells_y, align : "right", baseline : "top", text : "0.00", background : "#FFF"},
null,
{type : "rectangle", x : -half + 1, y : -half + 1, width : kanvas.cells - 2, height : 1, alpha : .3, border_color : "#000", border_width : .1, background : "#F00", shadow : [
[0, 0, .1, "#FFF"]
], childs : [
{type : "rectangle", x : .1, y : .1, width : kanvas.cells - 2.2, full : kanvas.cells - 2.2, height : .8, background : "#0F0"}
]},
null,
{type : "text", x : kanvas.cells_x, y : kanvas.cells_y, baseline : "bottom", align : "right", text : zeros_fill_score, style : "bold", background : "#FFF", size : 2},
null
);
show_menu();
kanvas.on_screen_change.add(() => {
with(kanvas.map[0]){
x = -kanvas.cells_x;
y = -kanvas.cells_y;
};
[kanvas.map[0], kanvas.map[0].childs[0], kanvas.map[0].childs[1]].forEach(level => {
if(level){
level.width = kanvas.cells_x * 2;
level.height = kanvas.cells_y * 2;
};
});
with(kanvas.map[FPS]){
x = kanvas.cells_x - 1;
y = -kanvas.cells_y + .3;
};
with(kanvas.map[SCORE]){
x = kanvas.cells_x;
y = kanvas.cells_y;
};
});
kanvas.threads_add(() => {
kanvas.map[FPS].text = kanvas.get_real_fps().toFixed(2);
});
text_box = kanvas.item_self.appendChild(document.createElement("textarea"));
["up", "down"].forEach(action => text_box.addEventListener("key" + action, check_characters));
kanvas.item_self.querySelector(".kanvas-ui").addEventListener("click", set_focus);
};
this.go_to_start = (item, event) => {
hide_menu();
start_game();
};
this.go_to_settings = (item, event) => console.log(["settings", item, event]);
this.go_to_scores = (item, event) => {
kanvas.map[MAIN_MENU] = null;
scores.build();
};
this.go_to_manual = (item, event) => window.open("/doc", "_blank");
this.go_to_credits = (item, event) => console.log(["credits", item, event]);
const start_game = () => {
self.map[GAME] = {type : "block", x : -kanvas.cells / 2, y : -kanvas.cells / 2, childs : [
{type : "block", x : 0, y : 0, childs : []},
{type : "block", x : 0, y : 0, childs : []},
{type : "block", x : 0, y : 0, childs : []}
]};
character_size = kanvas.cells / dictionary.maximum_characters,
last_word_y = kanvas.cells;
current_velocity = 0 + velocity;
text_cache = "";
text_box.value = "";
self.map[LIFE].childs[0].width = self.map[LIFE].childs[0].full;
self.map[GAME].childs[WORDS].childs = [];
kanvas.map[SCORE].text = zeros_fill_score;
multiplier = 1;
word_number = 0;
last_word_time = 0;
game_status = "running";
game_working = true;
};
const reduce_life = () => {
if((self.map[LIFE].childs[0].width -= reduce_life_value * difficulty) < 0){
self.map[LIFE].childs[0].width = 0;
end_game();
};
};
const increase_life = () => (
(self.map[LIFE].childs[0].width += increase_life_value * (1 - difficulty)) > self.map[LIFE].childs[0].full &&
(self.map[LIFE].childs[0].width = self.map[LIFE].childs[0].full
));
const set_score = points => {
if(allow_reduce_score || points > 0){
const new_points = Number(kanvas.map[SCORE].text) + points;
kanvas.map[SCORE].text = (zeros_fill_score + (new_points < 0 ? 0 : new_points)).slice(-zeros_fill_score.length);
};
};
const game_thread_method = () => {
const date = Date.now();
if(date - session_last_update > session_time_update){
session_last_update = date;
self.load_file("/api/sessions/update", response => {
console.log(response);
response = JSON.parse(response);
session_last_update = Date.now();
errors.validate(
response.content.error,
[].concat(self.sql_session_errors),
{},
sessions_show_update_error_message && "session_update_error",
sessions_show_update_ok_message && "session_update_ok"
);
});
};
if(!game_working)
return;
const real_velocity = (current_velocity += (kanvas.delta_time * velocity_increment * difficulty));
if(
!word_number ||
(
word_enabled_random_timer &&
last_word_y >= character_size && Math.random() * (1 / kanvas.get_real_fps()) < difficulty / 10000
) ||
(
word_proportional_timeout &&
date - last_word_time > word_proportional_timeout * (1 - (real_velocity / kanvas.cells))
)
){
let i = 0;
const l = self.map[GAME].childs[WORDS].childs.length,
word = dictionary.get_random_word();
last_word_y = 0;
word_number ++;
last_word_time = date;
for(; i < l; i ++)
if(!self.map[GAME].childs[WORDS].childs[i])
break;
const x = Math.random() * (dictionary.maximum_characters - word.length + 1) >> 0,
characters = [],
half = character_size / 2;
word.split("").forEach((character, j) => characters.push({
type : "text",
x : (character_size * j) + half,
y : half,
align : "center",
baseline : "middle",
text : character,
size : character_size * (allow_alter_style ? (1 - characters_sizer) + (Math.random() * characters_sizer) : 1),
style : allow_alter_style ? Math.random() > .5 ? "bold" : null : "bold",
background : characters_color || "rgb(" + [0, 0, 0].map(_ => Math.random() * 256 >> 0).join(",") + ")",
shadow : [
[0, 0, .5, "#FFF"],
[0, 0, .35, "#FFF"],
[0, 0, .2, "#000"]
]
}));
self.map[GAME].childs[WORDS].childs[i] = {type : "block", x : character_size * x, y : 0, alpha : 0, childs : characters};
};
last_word_y += real_velocity;
self.map[GAME].childs[WORDS].childs.forEach((word, j) => {
if(word){
if(word.y > kanvas.cells - character_size){
word.childs.forEach(character => {
if(!character)
return;
set_destruction(word.x + character.x, word.y);
play_audios_from(scream_sounds);characters_color
reduce_life();
set_score(character_wrong_points);
});
self.map[GAME].childs[WORDS].childs[j] = null;
set_score(word_wrong_points);
multiplier = 1;
}else{
word.alpha != 1 && (word.alpha += real_velocity / 5) > 1 && (word.alpha = 1);
word.y += real_velocity;
};
};
});
};
const set_focus = event => text_box.focus();
this.go_to_resume = () => self.end_pause();
this.go_to_left_match = () => {
self.end_pause();
end_game();
};
this.start_pause = () => {
if(allow_pause && game_status == "running"){
const half = kanvas.cells / 2;
game_status = "stopped";
game_working = false;
kanvas.map[PAUSE] = {type : "block", x : -half, y : -half, childs : [
{type : "rectangle", x : 0, y : 0, width : kanvas.cells, height : kanvas.cells, background : "#000", alpha : .7},
{type : "text", x : half, y : half - 10, baseline : "middle", align : "center", text : i18n.get("paused"), size : 4, style : "bold", shadow : [
[0, 0, .35, "#BBB"]
]},
create_button("resume", half - 8, half - 3),
create_button("left_match", half - 8, half + 1)
]}
return true;
};
return false;
};
this.end_pause = () => {
if(game_status == "stopped"){
game_status = "running";
game_working = true;
kanvas.map[PAUSE] = null;
return true;
};
return false;
};
const check_characters = event => {
if(event.type == "keyup")
switch(event.keyCode){
case 27:
self.start_pause() || self.end_pause();
default:
break;
};
if(text_box.value == text_cache)
return;
const last_changed = text_cache.length == text_box.value.length,
characters = text_box.value.substr(text_cache.length - (last_changed ? 1 : 0)).split("");
text_cache = text_box.value;
if(game_status != "running")
return;
characters.forEach(own_character => {
allow_ignore_case && (own_character = own_character.toLowerCase());
if(!self.map[GAME].childs[WORDS].childs.some((word, i) => {
const ok = word && word.childs.some((character, j) => {
const ok = character && (allow_ignore_case ? character.text.toLowerCase() : character.text) == own_character;
if(ok){
with(self.map[GAME].childs[WORDS].childs[i].childs[j])
set_destruction(
self.map[GAME].childs[WORDS].childs[i].x + x,
self.map[GAME].childs[WORDS].childs[i].y + y
);
self.map[GAME].childs[WORDS].childs[i].childs[j] = null;
set_score(character_ok_points * (allow_points_multiplier ? multiplier : 1));
multiplier += multiplier_value;
};
return ok;
});
if(ok && self.map[GAME].childs[WORDS].childs[i].childs.every(character => !character)){
self.map[GAME].childs[WORDS].childs[i] = null;
play_audios_from(ok_sounds);
increase_life();
set_score(word_ok_points);
};
return ok;
})){
if(!['`', '´', '^',, '¨'].includes(own_character)){
play_audios_from(scream_sounds);
reduce_life();
set_score(character_wrong_points);
multiplier = 1;
};
};
});
};
const play_audios_from_uri = (uri_data, volume, from, to) => {
const audio = new Audio(uri_data);
audio.load();
audio.currentTime = from;
audio.volume = volume;
audio.play();
setTimeout(() => audio.pause(), (to ? to - from : audio.duration) * 1000);
};
const play_audios_from = set => {
const sound = set.length ? set[Math.random() * set.length >> 0] : null,
[from, to] = sound.fragments ? sound.fragments[Math.random() * sound.fragments.length >> 0] : [0, 0];
if(!sound)
return;
if(sound.uri_data){
play_audios_from_uri(sound.uri_data, sound.volume, from, to);
return;
}else if(sound.loading)
return;
const ajax = new XMLHttpRequest();
sound.loading = true;
ajax.open("get", sound.sound, true);
ajax.responseType = "blob";
ajax.onload = () => {
if(ajax.readyState == 4){
ajax.loading = false;
ajax.status == 200 && play_audios_from_uri(sound.uri_data = URL.createObjectURL(ajax.response), sound.volume, from, to);
};
};
ajax.send(null);
};
const set_destruction = (x, y) => {
const i = Math.random() * destruction_animations.length >> 0,
m = self.map[GAME].childs[DESTRUCTIONS].childs.length,
half = (character_size / 2) - (destruction_size / 2);
let thread,
j = 0,
k = 0;
for(; j < m; j ++)
if(!self.map[GAME].childs[DESTRUCTIONS].childs[j])
break;
self.map[GAME].childs[DESTRUCTIONS].childs[j] = {
type : "image",
x : x + half,
y : y + half,
width : destruction_size,
height : destruction_size,
cut_x : destruction_animations[i].animation[0][0],
cut_y : destruction_animations[i].animation[0][1],
cut_width : destruction_animations[i].animation[0][2],
cut_height : destruction_animations[i].animation[0][3],
url : destruction_animations[i].sprite
};
play_audios_from(destruction_sounds);
thread = kanvas.threads_add(() => {
if(k < destruction_animations[i].animation.length){
const _k = k >> 0;
with(self.map[GAME].childs[DESTRUCTIONS].childs[j]){
cut_x = destruction_animations[i].animation[_k][0];
cut_y = destruction_animations[i].animation[_k][1];
cut_width = destruction_animations[i].animation[_k][2];
cut_height = destruction_animations[i].animation[_k][3];
};
k += destruction_animations[i].frames_per_second / kanvas.get_real_fps();
}else{
kanvas.threads_remove(thread);
self.map[GAME].childs[DESTRUCTIONS].childs[j] = null;
};
});
};
const end_game = () => {
game_status = "ended";
game_working = false;
scores.build_add();
};
construct();
};

@ -0,0 +1,4 @@
<?php
header("content-type: text/plain");
echo shell_exec("git pull 2>&1");

@ -0,0 +1,46 @@
<!DOCTYPE html>
<html lang="en" dir="ltr">
<head>
<title>DPTW</title>
<meta http-equiv="content-type" content="text/html;charset=utf-8" />
<meta charset="utf-8" />
<link type="text/css" data-language="CSS3" rel="stylesheet" href="/scss/DPTW.css" data-scss="/scss/DPTW.scss" data-css-map="/scss/DPTW.css.map" crossorigin="anonymous" charset="utf-8" />
<link type="text/css" data-language="CSS3" rel="stylesheet" href="https://fonts.googleapis.com/css2?family=VT323&display=swap" data-source="https://fonts.google.com/specimen/VT323?category=Monospace" crossorigin="anonymous" charset="utf-8" />
<style data-type="text/css" data-language="CSS3" data-rel="stylesheet" charset="utf-8">
html,body{
height : 100%;
margin : 0px;
}
body{overflow : hidden;}
/*.kanvas{
position : absolute;
top : 0px;
left : 0px;
width : 100%;
height : 100%;
}*/
</style>
<script data-type="text/javascript" data-language="ECMAScript 2015" src="https://kanvas.k3y.pw/ecma/version/20230707/Kanvas.ecma.js" data-crossorigin="anonymous" charset="utf-8"></script>
<script data-type="text/javascript" data-language="ECMAScript 2015" src="/ecma/DPTW.ecma.js" data-crossorigin="anonymous" charset="utf-8"></script>
<script data-type="text/javascript" data-language="ECMAScript 2015" src="/ecma/DPTW.I18N.ecma.js" data-crossorigin="anonymous" charset="utf-8"></script>
<script data-type="text/javascript" data-language="ECMAScript 2015" src="/ecma/DPTW.Errors.ecma.js" data-crossorigin="anonymous" charset="utf-8"></script>
<script data-type="text/javascript" data-language="ECMAScript 2015" src="/ecma/DPTW.Dictionary.ecma.js" data-crossorigin="anonymous" charset="utf-8"></script>
<script data-type="text/javascript" data-language="ECMAScript 2015" src="/ecma/DPTW.Scores.ecma.js" data-crossorigin="anonymous" charset="utf-8"></script>
<script data-type="text/javascript" data-language="ECMAScript 2015" charset="utf-8">
dptw = new DPTW();
</script>
</head>
<body></body>
</html>

@ -0,0 +1,14 @@
{
"urls" : [],
"words" : [
"KyMAN", "SrD", "GTJL", "TST", "Slenderman", "MUGEN", "Ginosaji", "DPTW",
"type", "writer", "pro", "tecla", "teclado", "mecanografía", "juego",
"videojuego", "game", "videogame", "test", "prueba", "testeo", "Troll",
"Minecraft", "Troleo", "Youtube", "Auron", "Auronplay", "perxitaa", "Ibai",
"Zorman", "Twitch", "Stream", "directo", "edición", "editar", "crear",
"programar", "programación", "programador", "ECMA", "Script", "ECMAScript",
"JavaScript", "HTML", "Kanvas", "Canvas", "CSS", "SASS", "SCSS", "estrés",
"tensión", "explosión", "explosiones", "destrucción", "Mac", "MacTiny",
"Tiny", "mitasnow", "Tarsier"
]
}

@ -0,0 +1,4 @@
{
"urls" : [],
"words" : ["Se","caracteriza","por","sus","videoclips","parodiando","a","todo","tipo","de","tribus","urbanas","compone","produce","y","canta","él","mismo","canciones","o","su","más","reciente","saga","películas","YouTubers","en","segundos","con","la","que","tuvo","polémica","Vegetta","Diego","Mattaz","Mexiv","rgas","Aparte","los","youtubers","hace","este","vídeos","pero","celebridades","políticos","personajes","ficticios","Tiene","un","sarcasmo","humor","único","enojar","hacer","reír","muchas","personas","canal","secundario","llamado","ZormanWorld","cuenta","suscriptores","En","se","centra","principalmente","gameplays","concretamente","antiguos","Pero","ya","desde","antes","era","casi","igual","principal","subiendo","random","preguntas","respuestas","serios","aunque","inicios","empezaba","también","subía","emblemática","sección","series","como","ha","mencionado","Según","sube","dos","videos","al","día","cada","Algunos","son","Resident","Evil","CS","GO","Super","Mario","Bros","juegos","franquicia","I","wanna","be","etc","Cabe","acalarar","el","es","totalmente","diferente","puesto","cuerdo","sencillo","contraste","sarcástico"]
}

@ -0,0 +1,61 @@
{
"dictionary_files" : "/json/DPTW.dictionary.json",
"i18n_files" : [
"/json/i18n/DPTW.i18n.espanol.json",
"/json/i18n/DPTW.i18n.espanol.json",
"/json/i18n/DPTW.i18n.galego.json",
"/json/i18n/DPTW.i18n.nihongo.json",
"/json/i18n/DPTW.i18n.russkiy.json"
],
"default_text" : "",
"language" : "espanol",
"i18n_overwrite" : true,
"difficulty" : 0.9,
"frames_per_second" : 60,
"velocity" : 0.01,
"velocity_increment" : 0.001,
"destruction_size" : 15,
"overwrite_sounds" : false,
"overwrite_sprites" : false,
"sounds_files" : "/json/DPTW.sounds.json",
"sprites_files" : "/json/DPTW.sprites.json",
"destruction_animations" : ["explosion_1", "explosion_2", "explosion_3", "explosion_4"],
"destruction_sounds" : "explosions",
"scream_sounds" : "screams",
"ok_sounds" : "ok",
"characters_sizer" : 0.1,
"reduce_life_value" : 1,
"increase_life_value" : 5,
"allow_alter_style" : false,
"characters_color" : "#000",
"allow_reduce_score" : false,
"character_ok_points" : 1,
"word_ok_points" : 5,
"character_wrong_points" : -1,
"word_wrong_points" : -5,
"allow_points_multiplier" : true,
"multiplier_value" : 1,
"zeros_fill_score" : "00000000",
"allow_pause" : true,
"font_family" : "VT323",
"main_background" : "metal_background",
"secondary_background" : "shibe_inu_background",
"nick_maximum_length" : 8,
"session_time_update" : 5000,
"toast_timer" : 5000,
"toast_show_default" : true,
"toast_show_ok" : true,
"toast_show_info" : true,
"toast_show_warn" : true,
"toast_show_error" : true,
"scores_show_save_ok_message" : true,
"scores_show_save_error_message" : true,
"scores_show_load_ok_message" : true,
"scores_show_load_error_message" : true,
"sessions_show_update_ok_message" : true,
"sessions_show_update_error_message" : true,
"word_proportional_timeout" : 10000,
"word_enabled_random_timer" : true,
"allow_ignore_case" : false,
"game_mode_name" : "testing_game"
}

@ -0,0 +1,49 @@
{
"sounds" : [{
"url" : "https://freesound.org/people/SonicStash/sounds/691028/",
"enabled" : true,
"license" : "Creative Commons Attribution NonCommercial",
"path" : "/data/audios/691028__sonicstash__screamings.ogg",
"key" : "screams",
"fragments" : [[0, 2], [3, 6], [8, 11], [11, 14], [14, 17], [17, 19], [20, 22], [23, 25]]
}, {
"urls" : [
"https://freesound.org/people/alienbomb/sounds/39069/",
"https://freesound.org/people/Zangrutz/sounds/155235/",
"https://freesound.org/people/AyaDrevis/sounds/649191/",
"https://freesound.org/people/Robinhood76/sounds/66098/",
"https://freesound.org/people/tgerginov/sounds/665092/"
],
"enabled" : true,
"license" : "Creative Commons Attribution NonCommercial",
"path" : "/data/audios/explosions.ogg",
"key" : "explosions",
"fragments" : [[0, 3], [3, 5], [5, 7], [7, 9], [9, 12]],
"volume" : 0.3
}, {
"urls" : [
"https://freesound.org/people/Robinhood76/sounds/103133/",
"https://freesound.org/people/AUDACITIER/sounds/634674/",
"https://freesound.org/people/klankbeeld/sounds/559092/",
"https://freesound.org/people/michellelindemann1/sounds/527852/",
"https://freesound.org/people/bogenseeberg/sounds/500154/",
"https://freesound.org/people/metrostock99/sounds/345086/",
"https://freesound.org/people/Huminaatio/sounds/189279/",
"https://freesound.org/people/bogenseeberg/sounds/475444/",
"https://freesound.org/people/ImKoryu/sounds/171261/",
"https://freesound.org/people/jburunet/sounds/509407/",
"https://freesound.org/people/Jekteir/sounds/541381/"
],
"enabled" : true,
"license" : "Creative Commons Attribution NonCommercial",
"path" : "/data/audios/ok.ogg",
"key" : "ok",
"fragments" : [
[0, 3], [3, 5], [5, 7], [7, 9], [9, 13], [13, 15], [15, 18],
[18, 19], [19, 21], [21, 22], [22, 23], [24, 25], [25, 26],
[26, 28], [28, 30], [30, 32], [32, 34], [34, 35], [35, 37],
[37, 38], [38, 39], [39, 40], [40, 41], [41, 42], [42, 43],
[43, 44], [44, 45], [46, 48]
]
}]
}

@ -0,0 +1,222 @@
{
"sprites" : [{
"url" : "https://toppng.com/attached-are-various-explosion-sprites-created-with-2d-explosion-sprite-sheet-PNG-free-PNG-Images_213951",
"path" : "/data/sprites/toppng.com-attached-are-various-explosion-sprites-created-with-2d-explosion-sprite-sheet-764x845.png",
"license" : "Personal free use",
"enabled" : true,
"key" : "explosion_1",
"frames_per_second" : 60,
"animation" : [
[0, 0, 127, 127],
[130, 0, 127, 127],
[260, 0, 127, 127],
[390, 0, 127, 127],
[520, 0, 127, 127],
[650, 0, 127, 127],
[0, 128, 127, 127],
[130, 128, 127, 127],
[260, 128, 127, 127],
[390, 128, 127, 127],
[520, 128, 127, 127],
[650, 128, 127, 127],
[0, 256, 127, 127],
[130, 256, 127, 127],
[260, 256, 127, 127],
[390, 256, 127, 127],
[520, 256, 127, 127],
[650, 256, 127, 127],
[0, 384, 127, 127],
[130, 384, 127, 127],
[260, 384, 127, 127],
[390, 384, 127, 127],
[520, 384, 127, 127],
[650, 384, 127, 127],
[0, 512, 127, 127],
[130, 512, 127, 127],
[260, 512, 127, 127],
[390, 512, 127, 127],
[520, 512, 127, 127],
[650, 512, 127, 127],
[0, 640, 127, 127],
[130, 640, 127, 127],
[260, 640, 127, 127],
[390, 640, 127, 127],
[520, 640, 127, 127],
[650, 640, 127, 127]
]
}, {
"url" : "https://toppng.com/b-explosion-sprite-sheet-2d-PNG-free-PNG-Images_188094",
"path" : "/data/sprites/toppng.com-b-explosion-sprite-sheet-2d-395x387.png",
"license" : "Personal free use",
"enabled" : true,
"key" : "explosion_2",
"frames_per_second" : 30,
"animation" : [
[0, 0, 139, 139],
[140, 0, 139, 139],
[281, 0, 139, 139],
[421, 0, 139, 139],
[562, 0, 139, 139],
[702, 0, 139, 139],
[0, 140, 139, 139],
[140, 140, 139, 139],
[281, 140, 139, 139],
[421, 140, 139, 139],
[562, 140, 139, 139],
[702, 140, 139, 139],
[0, 280, 139, 139],
[140, 280, 139, 139],
[281, 280, 139, 139],
[421, 280, 139, 139],
[562, 280, 139, 139],
[702, 280, 139, 139],
[0, 420, 139, 139],
[140, 420, 139, 139],
[281, 420, 139, 139],
[421, 420, 139, 139],
[562, 420, 139, 139],
[702, 420, 139, 139],
[0, 560, 139, 139],
[140, 560, 139, 139],
[281, 560, 139, 139],
[421, 560, 139, 139],
[562, 560, 139, 139],
[702, 560, 139, 139],
[0, 700, 139, 139],
[140, 700, 139, 139],
[281, 700, 139, 139],
[421, 700, 139, 139],
[562, 700, 139, 139],
[702, 700, 139, 139]
]
}, {
"url" : "https://www.pngwing.com/en/free-png-plgdq",
"path" : "/data/sprites/pngwing.com.png",
"license" : "DCMA",
"enabled" : false
}, {
"url" : "https://toppng.com/free-image/brave-frontier-fire-sprite-sheets-pixelated-fire-sprite-sheet-PNG-free-PNG-Images_251102",
"path" : "/data/sprites/toppng.com-brave-frontier-fire-sprite-sheets-pixelated-fire-sprite-sheet-1024x960.png",
"license" : "Personal free use",
"enabled" : true,
"key" : "explosion_3",
"frames_per_second" : 30,
"animation" : [
[0, 520, 220, 220],
[220, 520, 220, 220],
[440, 520, 220, 220],
[660, 520, 220, 220],
[0, 740, 220, 220],
[220, 740, 220, 220],
[440, 740, 220, 220],
[660, 740, 220, 220]
]
}, {
"url" : "https://toppng.com/free-image/sprite-sheet-list-of-synonyms-and-antonyms-of-the-word-sprite-sheet-explosion-PNG-free-PNG-Images_184309",
"path" : "/data/sprites/toppng.com-sprite-sheet-list-of-synonyms-and-antonyms-of-the-word-sprite-sheet-explosion-633x461.png",
"license" : "Personal free use",
"enabled" : true
}, {
"url" : "https://toppng.com/free-image/explosion-sprite-png-2d-explosion-sprite-sheet-PNG-free-PNG-Images_163425",
"path" : "/data/sprites/toppng.com-explosion-sprite-png-2d-explosion-sprite-sheet-899x857.png",
"license" : "Personal free use",
"enabled" : true,
"key" : "explosion_4",
"frames_per_second" : 60,
"animation" : [
[0, 0, 92, 88],
[92, 0, 92, 88],
[185, 0, 92, 88],
[278, 0, 92, 88],
[371, 0, 92, 88],
[463, 0, 92, 88],
[556, 0, 92, 88],
[649, 0, 92, 88],
[742, 0, 92, 88],
[0, 92, 92, 88],
[92, 92, 92, 88],
[185, 92, 92, 88],
[278, 92, 92, 88],
[371, 92, 92, 88],
[463, 92, 92, 88],
[556, 92, 92, 88],
[649, 92, 92, 88],
[742, 92, 92, 88],
[0, 185, 92, 88],
[92, 185, 92, 88],
[185, 185, 92, 88],
[278, 185, 92, 88],
[371, 185, 92, 88],
[463, 185, 92, 88],
[556, 185, 92, 88],
[649, 185, 92, 88],
[742, 185, 92, 88],
[0, 278, 92, 88],
[92, 278, 92, 88],
[185, 278, 92, 88],
[278, 278, 92, 88],
[371, 278, 92, 88],
[463, 278, 92, 88],
[556, 278, 92, 88],
[649, 278, 92, 88],
[742, 278, 92, 88],
[0, 371, 92, 88],
[92, 371, 92, 88],
[185, 371, 92, 88],
[278, 371, 92, 88],
[371, 371, 92, 88],
[463, 371, 92, 88],
[556, 371, 92, 88],
[649, 371, 92, 88],
[742, 371, 92, 88],
[0, 463, 92, 88],
[92, 463, 92, 88],
[185, 463, 92, 88],
[278, 463, 92, 88],
[371, 463, 92, 88],
[463, 463, 92, 88],
[556, 463, 92, 88],
[649, 463, 92, 88],
[742, 463, 92, 88],
[0, 556, 92, 88],
[92, 556, 92, 88],
[185, 556, 92, 88],
[278, 556, 92, 88],
[371, 556, 92, 88],
[463, 556, 92, 88],
[556, 556, 92, 88],
[649, 556, 92, 88],
[742, 556, 92, 88],
[0, 649, 92, 88],
[92, 649, 92, 88],
[185, 649, 92, 88],
[278, 649, 92, 88],
[371, 649, 92, 88],
[463, 649, 92, 88],
[556, 649, 92, 88],
[649, 649, 92, 88],
[742, 649, 92, 88],
[0, 742, 92, 88],
[92, 742, 92, 88],
[185, 742, 92, 88],
[278, 742, 92, 88],
[371, 742, 92, 88],
[463, 742, 92, 88],
[556, 742, 92, 88],
[649, 742, 92, 88],
[742, 742, 92, 88]
]
}, {
"url" : "https://unsplash.com/es/fotos/Nc3gR9gNw4o",
"key" : "metal_background",
"path" : "/data/background/metal_background.webp",
"license" : "Unplash",
"enabled" : true
}, {
"url" : "https://unsplash.com/es/fotos/YOCDD-D4oOM",
"path" : "/data/background/ferhat-deniz-fors-YOCDD-D4oOM-unsplash.webp",
"key" : "shibe_inu_background",
"license" : "Unplash",
"enabled" : true
}]
}

@ -0,0 +1,50 @@
{
"alarabiyah" : {
"start" : "ابدأ",
"settings" : "الترتيبات",
"scores" : "الكشافة",
"credits" : "الأرصدة الدائنة",
"paused" : "وقف",
"resume" : "استمر",
"left_match" : "Abandon",
"previous" : "سابقا",
"next" : "التالي",
"back" : "العودة",
"page" : "الصفحة",
"save" : "أنقذ",
"not_save" : "لا تنقذ",
"test_mode" : "نمط الأدلة",
"manual" : "الدليل",
"sql_exception" : "كان هناك إستثناء من SQL. من فضلك حاول الاتصال بمدير.",
"session_string_null" : "The String of the session is null.",
"session_empty" : "الدورة فارغة.",
"session_bad_format" : "للدورة شكل سيئ.",
"session_id_string_empty" : "إن هوية الدورة في شكل سترينج فارغة.",
"session_id_string_bad" : "إن تحديد هوية الدورة في شكل خط خاطئ.",
"session_string_incompleted" : "The String of the session is incomplete.",
"session_null" : "الدورة لاغية.",
"session_not_id" : "الدورة ليست هوية.",
"session_not_exists" : "ولا توجد الدورة.",
"session_date_out" : "واختتمت الدورة.",
"session_timeout" : "لقد فاتت الجلسة الوقت لعدم النشاط القسري.",
"session_update_ok" : "وتم تحديث الدورة الحالية بشكل صحيح.",
"session_update_error" : "There was an mistake with '{code}' code when trying to update the current session. {list}",
"mode_null" : "نمط اللعبة هو صفر.",
"mode_empty" : "نمط اللعبة فارغ.",
"mode_not_exists" : "لا وجود لطريقة لعبة '{mode}'.",
"page_null" : "رقم الصفحة صفر.",
"page_lower_1" : "رقم الصفحة يجب أن يكون على الأقل 1.",
"items_per_page_null" : "عدد البنود في كل صفحة هو صفر.",
"items_per_page_lower_1" : "ويجب عرض بند واحد على الأقل في كل صفحة.",
"nicks_null" : "متغير (نيك) للبحث فارغ.",
"load_scores_error" : "كان هناك خطأ مع رمز '{code}' عند محاولة تحميل الدرجات على صفحة MKVBXGP مع عناصر MKVBYRV. {list}",
"load_scores_ok" : ُمّلت على نحو سليم درجات '{page}' مع عناصر '{items_per_page}'",
"nick_null" : "(نيك) باطل.",
"nick_empty" : "الـ(نيك) فارغ.",
"score_null" : "الخياطة باطلة.",
"score_lower_0" : "النتيجة أقل من صفر.",
"save_scores_error" : "كان هناك خطأ مع رمز '{code}' عند محاولة لانقاذ النتيجة الجديدة '{score}' على نيك '{nick}'. {list}",
"save_scores_ok" : "(السجل الجديد لـ (م.م.ب.ت.م.م.م.م.م.م.م.م.م.م.م.م.م.م.ت."
}
}

@ -0,0 +1,50 @@
{
"azerbaycanca" : {
"start" : "Başlıq",
"settings" : " Settings",
"scores" : "Qeydiyyat",
"credits" : "Kredit",
"paused" : " Pa",
"resume" : "Oxunub",
"left_match" : "Axtar",
"previous" : " Previous",
"next" : "Next",
"back" : "Oxunub",
"page" : " Page",
"save" : "Daxil ol",
"not_save" : "Qeydiyyat",
"test_mode" : "İdman rejimi",
"manual" : "Elmi",
"sql_exception" : "Bir SQL istisna idi. Sertifikatlaşdırmaq.",
"session_string_null" : " session String.",
"session_empty" : " session boşdur.",
"session_bad_format" : " session pis format var.",
"session_id_string_empty" : "String formatındaki sessiya ID boşdur.",
"session_id_string_bad" : "String formatında seans ID yanlışdır.",
"session_string_incompleted" : " session String.",
"session_null" : " session nu.",
"session_not_id" : " session bir ID deyil.",
"session_not_exists" : "İştirak mövcud deyil.",
"session_date_out" : " session .",
"session_timeout" : "İştirakçılıq üçün vaxtsız vaxt.",
"session_update_ok" : "Cari sessiya düzgün yeniləndi.",
"session_update_error" : "Cari seansı yeniləməyə çalışır zaman '{code}' kodu ilə bir məlumat var. {list}",
"mode_null" : "Oyun rejimi sıfırdır.",
"mode_empty" : "Oyun rejimi boşdur.",
"mode_not_exists" : "'{mode}' oyun rejimi mövcud deyil.",
"page_null" : " page növü sıfırdır.",
"page_lower_1" : "Səhifə nömrəsi ən azı olmalıdır 1.",
"items_per_page_null" : " page başına maddələr sayı sıfırdır.",
"items_per_page_lower_1" : "Ən azı bir səhifənin göstərilməlidir.",
"nicks_null" : "Nicks axtarış növü boşdur.",
"load_scores_error" : "'{items_per_page}' elementləri ilə '{page}' səhifələri yükləməyə çalışır zaman '{code}' kodu ilə bir məlumat idi. {list}",
"load_scores_ok" : "'{items_per_page}' elementləri ilə '{page}' puanları düzgün yüklənmişdir",
"nick_null" : "Nick azad.",
"nick_empty" : "Nick verilmiş boşdur.",
"score_null" : "Konfransı qızdır.",
"score_lower_0" : "'{score}' puanı 0-dan az.",
"save_scores_error" : "Nick '{nick}' üzrə yeni '{score}' puanını qəbul etmək üçün çalışır zaman '{code}' kodu ilə bir səviyyə var. {list}",
"save_scores_ok" : "Nick MKVBNBG üzrə yeni '{score}' hesablaşdırılmışdır."
}
}

@ -0,0 +1,54 @@
{
"catala" : {
"start" : "Inici",
"settings" : "Configuració",
"scores" : "Partitures",
"credits" : "Crèdits",
"paused" : "Pausa",
"resume" : "Continuar",
"left_match" : "Abandonament",
"previous" : "Següent",
"next" : "Següent",
"back" : "Tornar",
"page" : "Pàgina",
"save" : "Save",
"not_save" : "No guardar",
"test_mode" : "Mode d'evidència",
"manual" : "Manuals",
"sql_exception" : [
"Hi havia una excepció SQL. Si us plau, introdueix dins de la ",
"caixa de text els caràcters que veu a la imatge de sota. Això és ",
"requerit per evitar enviaments automàtics."
],
"session_string_null" : "La Corda de la sessió és nul·la.",
"session_empty" : "La sessió està buida.",
"session_bad_format" : "La sessió té un format dolent.",
"session_id_string_empty" : "La sessió ID en format String està buida.",
"session_id_string_bad" : "L'ID de sessió en format String està malament.",
"session_string_incompleted" : "La Corda de la sessió està incompleta.",
"session_null" : "La sessió és nul·la.",
"session_not_id" : "La sessió no és un DNI.",
"session_not_exists" : "La sessió no existeix.",
"session_date_out" : "La sessió es va tancar.",
"session_timeout" : "La sessió es va perdre Temps per inactivitat forçada.",
"session_update_ok" : "La sessió actual s’ha actualitzat correctament.",
"session_update_error" : "Hi ha un error amb el codi '{code}' en intentar actualitzar la sessió actual. {list}",
"mode_null" : "El mode de joc és zero.",
"mode_empty" : "El mode de joc és buit.",
"mode_not_exists" : "El mode de joc '{mode}' no existeix.",
"page_null" : "El número de pàgina és zero.",
"page_lower_1" : "El número de pàgina ha de ser almenys 1.",
"items_per_page_null" : "El nombre d'articles per pàgina és zero.",
"items_per_page_lower_1" : "S'ha de mostrar almenys un element per pàgina.",
"nicks_null" : "La variable de cerca de Nicks és buida.",
"load_scores_error" : "Hi ha un error amb el codi '{code}' en tractar de carregar les partitures de la pàgina '{page}' amb elements '{items_per_page}'. {list}",
"load_scores_ok" : "Les puntuacions de la pàgina '{page}' amb elements '{items_per_page}' es van carregar correctament",
"nick_null" : "Nick és nul.",
"nick_empty" : "El Nick donat és buit.",
"score_null" : "La puntada és nul.",
"score_lower_0" : "La puntuació '{score}' és inferior a 0.",
"save_scores_error" : "Hi va haver un error amb el codi '{code}' en tractar de guardar la nova puntuació '{score}' en Nick '{nick}'. {list}",
"save_scores_ok" : "La nova puntuació '{score}' en Nick '{nick}' es va guardar correctament."
}
}

@ -0,0 +1,50 @@
{
"cestina" : {
"start" : "Hledat",
"settings" : "Nastavení",
"scores" : "Výsledky",
"credits" : "Přihlášení",
"paused" : "Čeština",
"resume" : "Pokračovat",
"left_match" : "Čeština",
"previous" : "Předchozí",
"next" : "Čeština",
"back" : "Zpět",
"page" : "Čeština",
"save" : "Čeština",
"not_save" : "Neuchovávejte",
"test_mode" : "Režim důkazů",
"manual" : "Čeština",
"sql_exception" : "Bylo to SQL výjimka. Kontaktujte správce.",
"session_string_null" : "Řetěz relace je null.",
"session_empty" : "Relace je prázdný.",
"session_bad_format" : "Relace má špatný formát.",
"session_id_string_empty" : "ID relace ve formátu String je prázdný.",
"session_id_string_bad" : "ID relace ve formátu řetězce je špatné.",
"session_string_incompleted" : "Smyčcovna relace je neúplná.",
"session_null" : "Relace je null.",
"session_not_id" : "Relace není ID.",
"session_not_exists" : "Relace neexistuje.",
"session_date_out" : "Schodiště byla uzavřena.",
"session_timeout" : "Relace zmeškal čas na nucenou nečinnost.",
"session_update_ok" : "Aktuální relace byla správně aktualizována.",
"session_update_error" : "Byla chyba s kódem '{code}' při pokusu o aktualizaci aktuální relace. {list}",
"mode_null" : "Režim hry je nulový.",
"mode_empty" : "Režim hry je prázdný.",
"mode_not_exists" : "Režim hry '{mode}' neexistuje.",
"page_null" : "Číslo stránky je nulová.",
"page_lower_1" : "Číslo stránky musí být nejméně 1.",
"items_per_page_null" : "Počet položek na stránce je nulová.",
"items_per_page_lower_1" : "Na stránce musí být zobrazena alespoň jedna položka.",
"nicks_null" : "Přeměna hledání Nicks je prázdný.",
"load_scores_error" : "Byla chyba s kódem '{code}' při pokusu o načtení stránky '{page}' s prvky '{items_per_page}'. {list}",
"load_scores_ok" : "'{page}' skóre stránky s prvky '{items_per_page}' byly správně načteny",
"nick_null" : "Nick je null.",
"nick_empty" : "Nick je prázdný.",
"score_null" : "Širok je null.",
"score_lower_0" : "'{score}' skóre je méně než 0.",
"save_scores_error" : "Bylo chyba s '{code}' kód, když se snaží uložit nový '{score}' skóre na Nick '{nick}'. V-Strom",
"save_scores_ok" : "Nové skóre '{score}' na Nick '{nick}' byl správně uložen."
}
}

@ -0,0 +1,50 @@
{
"dansk" : {
"start" : "Start start",
"settings" : "Indstillinger for indstillinger",
"scores" : "Målscorer",
"credits" : "Credits",
"paused" : "Sæt pause",
"resume" : "Fortsæt med at fortsætte",
"left_match" : "Abandon",
"previous" : "Forrige Forrige Forrige Forrige Forrige",
"next" : "Næste Næste Næste",
"back" : "Tilbage Tilbage Tilbage",
"page" : "Sideside",
"save" : "Gem Gem Gem Gem Gem Gem",
"not_save" : "Gem ikke",
"test_mode" : "Bevistilstand",
"manual" : "Manuel manual",
"sql_exception" : "Der var en SQL undtagelse. Prøv venligst at kontakte en administrator.",
"session_string_null" : "The String of te session er null.",
"session_empty" : "Sessionen er tom.",
"session_bad_format" : "Sessionen har et dårligt format.",
"session_id_string_empty" : "Session ID i String format er tomt.",
"session_id_string_bad" : "Session ID i String format er forkert.",
"session_string_incompleted" : "The String of te session er ufuldstændig.",
"session_null" : "Sessionen er null.",
"session_not_id" : "Sessionen er ikke et ID.",
"session_not_exists" : "Sessionen findes ikke.",
"session_date_out" : "Sessionen var lukket.",
"session_timeout" : "Sessionen gik glip af Timeout for tvangs inaktivitet.",
"session_update_ok" : "Den aktuelle session blev korrekt opdateret.",
"session_update_error" : "Der var en fejl med '{code}' kode, når du forsøger at opdatere den aktuelle session. I nærheden af {list}",
"mode_null" : "Spillets tilstand er nul.",
"mode_empty" : "Spillets tilstand er tom.",
"mode_not_exists" : "'{mode}' spil mode eksisterer ikke.",
"page_null" : "Sidens nummer er nul.",
"page_lower_1" : "Sidenummeret skal være mindst 1.",
"items_per_page_null" : "Antallet af varer pr. side er nul.",
"items_per_page_lower_1" : "Mindst én vare pr. side skal vises.",
"nicks_null" : "Nicks søgevari er tomt.",
"load_scores_error" : "Der var en fejl med '{code}' kode, når du forsøger at indlæse '{page}' side scores med '{items_per_page}' elementer. {list}",
"load_scores_ok" : "Sidescore '{page}' med '{items_per_page}' elementer blev korrekt indlæst",
"nick_null" : "Nick er null.",
"nick_empty" : "Nick givet er tom.",
"score_null" : "Masken er null.",
"score_lower_0" : "'{score}' score er mindre end 0.",
"save_scores_error" : "Der var en fejl med '{code}' kode, når du forsøger at gemme den nye '{score}' score på Nick '{nick}'. I nærheden af {list}",
"save_scores_ok" : "Den nye '{score}' score på Nick '{nick}' blev korrekt gemt."
}
}

@ -0,0 +1,50 @@
{
"deutsch" : {
"start" : "Start",
"settings" : "Einstellungen",
"scores" : "Scores",
"credits" : "Kredite",
"paused" : "Pause",
"resume" : "Fortsetzung",
"left_match" : "Abandon",
"previous" : "Vorherige",
"next" : "Nächste",
"back" : "Zurück",
"page" : "Seite",
"save" : "Speichern",
"not_save" : "Nicht retten",
"test_mode" : "Nachweismodus",
"manual" : "Handbuch",
"sql_exception" : "Es gab eine SQL Ausnahme. Bitte kontaktieren Sie einen Administrator.",
"session_string_null" : "Der String der Sitzung ist null.",
"session_empty" : "Die Sitzung ist leer.",
"session_bad_format" : "Die Sitzung hat ein schlechtes Format.",
"session_id_string_empty" : "Die Session-ID im String-Format ist leer.",
"session_id_string_bad" : "Die Session-ID im String-Format ist falsch.",
"session_string_incompleted" : "Der String der Sitzung ist unvollständig.",
"session_null" : "Die Sitzung ist null.",
"session_not_id" : "Die Sitzung ist keine ID.",
"session_not_exists" : "Die Sitzung existiert nicht.",
"session_date_out" : "Die Sitzung wurde geschlossen.",
"session_timeout" : "Die Sitzung verfehlte Timeout für Zwangsinaktivität.",
"session_update_ok" : "Die aktuelle Sitzung wurde korrekt aktualisiert.",
"session_update_error" : "Es gab einen Fehler mit '{code}'-Code, wenn es darum ging, die aktuelle Sitzung zu aktualisieren. MKVBKMG",
"mode_null" : "Der Spielmodus ist null.",
"mode_empty" : "Der Spielmodus ist leer.",
"mode_not_exists" : "Der '{mode}' Spielmodus existiert nicht.",
"page_null" : "Die Seitennummer ist Null.",
"page_lower_1" : "Die Seitennummer muss mindestens 1 sein.",
"items_per_page_null" : "Die Anzahl der Elemente pro Seite ist Null.",
"items_per_page_lower_1" : "Es muss mindestens ein Element pro Seite angezeigt werden.",
"nicks_null" : "Nicks Suchvariable ist leer.",
"load_scores_error" : "Es gab einen Fehler mit '{code}'-Code beim Versuch, die Punkte auf der '{page}' Seite mit '{items_per_page}'-Elementen zu laden. {list}",
"load_scores_ok" : "Die '{page}'-Seitenpunkte mit '{items_per_page}'-Elementen wurden richtig geladen",
"nick_null" : "Nick ist null.",
"nick_empty" : "Der Nick ist leer.",
"score_null" : "Der Stich ist null.",
"score_lower_0" : "Der '{score}'-Score beträgt weniger als 0.",
"save_scores_error" : "Es gab einen Fehler mit '{code}'-Code, wenn versuchte, die neue '{score}'-Score auf Nick '{nick}' zu speichern. {list}",
"save_scores_ok" : "Die neue '{score}'-Score auf dem Nick '{nick}' wurde korrekt gespeichert."
}
}

@ -0,0 +1,71 @@
{
"ellinika" : {
"start" : "Ξεκινήστε",
"settings" : "Ρυθμίσεις",
"scores" : "Scores Scores",
"credits" : "Πιστώσεις",
"paused" : "Pause",
"resume" : "Συνεχίστε να συνεχίζετε",
"left_match" : "Abandon",
"previous" : "Προηγουμενο Previous",
"next" : [
"Next Next Next Next Next Next Next Next Next Next Next Next Next ",
"Next Next Next Next Next Next Next Next Next Next Next Next Next ",
"Next Next Next Next Next Next Next Next Next Next Next Next Next ",
"Next Next Next Next Next Next Next Next Next Next Next Next Next ",
"Next Next Next Next Next Next Next Next Next Next Next Next Next ",
"Next Next Next Next Next Next Next Next Next Next Next Next Next ",
"Next Next Next Next Next Next Next Next Next Next Next Next Next ",
"Next Next Next Next Next Next Next Next Next Next Next Next Next ",
"Next Next Next Next Next Next Next Next Next Next Next Next Next ",
"Next Next Next Next Next Next Next Next Next Next Next Next Next ",
"Next Next Next Next Next Next Next Next Next Next Next Next Next ",
"Next Next Next Next Next Next Next Next Next Next Next Next Next ",
"Next Next Next Next Next Next Next Next Next Next Next Next Next ",
"Next Next Next Next Next Next Next Next Next Next Next Next Next ",
"Next Next Next Next Next Next Next Next Next Next Next Next Next ",
"Next Next Next Next Next Next Next Next Next Next Next Next Next ",
"Next Next Next Next Next Next Next Next Next Next Next Next Next ",
"Next Next Next Next Next Next Next Next Next Next Next Next Next ",
"Next Next Next Next Next Next Next Next Next Next Next Next Next ",
"Next Next Next Next Next Next Next Next Next"
],
"back" : "Πίσω",
"page" : "Page Page",
"save" : "Εξοικονομήστε",
"not_save" : "Μην σώζεις",
"test_mode" : "Στοιχεία λειτουργίας",
"manual" : "Εγχειρίδιο εγχειρίδιο εγχειρίδιο εγχειρίδιο εγχειρίδιο εγχειρίδιο",
"sql_exception" : "Υπήρξε εξαίρεση SQL. Προσπαθήστε να επικοινωνήσετε με έναν διαχειριστή.",
"session_string_null" : "Η έλξη της συνεδρίας είναι άκυρη.",
"session_empty" : "Η συνεδρία είναι άδεια.",
"session_bad_format" : "Η συνεδρία έχει κακή μορφή.",
"session_id_string_empty" : "Το ID συνεδρίας στη μορφή String είναι άδειο.",
"session_id_string_bad" : "Το ID συνεδρίας στη μορφή String είναι λάθος.",
"session_string_incompleted" : "Η έλξη της συνεδρίας είναι ελλιπής.",
"session_null" : "Η συνεδρία είναι άκυρη.",
"session_not_id" : "Η συνεδρία δεν είναι ID.",
"session_not_exists" : "Η συνεδρία δεν υπάρχει.",
"session_date_out" : "Η συνεδρία έκλεισε.",
"session_timeout" : "Η συνεδρία έχασε το Timeout για αναγκαστική αδράνεια.",
"session_update_ok" : "Η τρέχουσα συνεδρία ενημερώθηκε σωστά.",
"session_update_error" : "Υπήρχε ένα λάθος με τον κωδικό '{code}' όταν προσπαθούσε να ενημερώσει την τρέχουσα συνεδρία. {list}",
"mode_null" : "Ο τρόπος παιχνιδιού είναι μηδέν.",
"mode_empty" : "Η λειτουργία του παιχνιδιού είναι άδεια.",
"mode_not_exists" : "Ο τρόπος παιχνιδιού '{mode}' δεν υπάρχει.",
"page_null" : "Ο αριθμός σελίδας είναι μηδέν.",
"page_lower_1" : "Ο αριθμός σελίδας πρέπει να είναι τουλάχιστον 1.",
"items_per_page_null" : "Ο αριθμός των αντικειμένων ανά σελίδα είναι μηδέν.",
"items_per_page_lower_1" : "Τουλάχιστον ένα στοιχείο ανά σελίδα πρέπει να εμφανίζεται.",
"nicks_null" : "Η μεταβλητή αναζήτησης του Nicks είναι άδεια.",
"load_scores_error" : "Υπήρχε ένα λάθος με τον κωδικό '{code}' όταν προσπαθούσε να φορτώσει τα στοιχεία σελίδας '{page}' με στοιχεία '{items_per_page}'. {list}",
"load_scores_ok" : "Τα στοιχεία της σελίδας '{page}' με στοιχεία '{items_per_page}' φορτώθηκαν σωστά",
"nick_null" : "Ο Nick είναι άκυρος.",
"nick_empty" : "Ο Νικ που δίνεται είναι άδειος.",
"score_null" : "Το ράμμα είναι άκυρο.",
"score_lower_0" : "Η βαθμολογία '{score}' είναι λιγότερο από 0.",
"save_scores_error" : "Υπήρχε ένα λάθος με τον κωδικό '{code}' όταν προσπαθούσε να σώσει το νέο σκορ '{score}' στο Nick '{nick}'. {list}",
"save_scores_ok" : "Η νέα βαθμολογία '{score}' στο Nick '{nick}' ήταν σωστά αποθηκευμένη."
}
}

@ -0,0 +1,50 @@
{
"english" : {
"start" : "Start",
"settings" : "Settings",
"scores" : "Scores",
"credits" : "Credits",
"paused" : "Pause",
"resume" : "Continue",
"left_match" : "Abandon",
"previous" : "Previous",
"next" : "Next",
"back" : "Back",
"page" : "Page",
"save" : "Save",
"not_save" : "Don't save",
"test_mode" : "Evidence mode",
"manual" : "Manual",
"sql_exception" : "There was an SQL exception. Please try to contact an administrator.",
"session_string_null" : "The String of the session is null.",
"session_empty" : "The session is empty.",
"session_bad_format" : "The session has a bad format.",
"session_id_string_empty" : "The session ID in String format is empty.",
"session_id_string_bad" : "The session ID in String format is wrong.",
"session_string_incompleted" : "The String of the session is incomplete.",
"session_null" : "The session is null.",
"session_not_id" : "The session is not an ID.",
"session_not_exists" : "The session does not exist.",
"session_date_out" : "The session was closed.",
"session_timeout" : "The session missed Timeout for forced inactivity.",
"session_update_ok" : "The current session was correctly updated.",
"session_update_error" : "There was an error with '{code}' code when trying to update the current session. {list}",
"mode_null" : "The game mode is zero.",
"mode_empty" : "The game mode is empty.",
"mode_not_exists" : "The '{mode}' game mode does not exist.",
"page_null" : "The page number is zero.",
"page_lower_1" : "The page number must be at least 1.",
"items_per_page_null" : "The number of items per page is zero.",
"items_per_page_lower_1" : "At least one item per page must be displayed.",
"nicks_null" : "Nicks's search variable is empty.",
"load_scores_error" : "There was an error with '{code}' code when trying to load the '{page}' page scores with '{items_per_page}' elements. {list}",
"load_scores_ok" : "The '{page}' page scores with '{items_per_page}' elements were correctly loaded",
"nick_null" : "Nick is null.",
"nick_empty" : "The Nick given is empty.",
"score_null" : "The stitch is null.",
"score_lower_0" : "The '{score}' score is less than 0.",
"save_scores_error" : "There was an error with '{code}' code when trying to save the new '{score}' score on Nick '{nick}'. {list}",
"save_scores_ok" : "The new '{score}' score on the Nick '{nick}' was correctly stored."
}
}

@ -0,0 +1,49 @@
{
"espanol" : {
"start" : "Empezar",
"settings" : "Configuración",
"scores" : "Puntuaciones",
"credits" : "Créditos",
"paused" : "Pausado",
"resume" : "Continuar",
"left_match" : "Abandonar",
"previous" : "Anterior",
"next" : "Siguiente",
"back" : "Volver",
"page" : "Página",
"save" : "Guardar",
"not_save" :"No guardar",
"test_mode" : "Modo de pruebas",
"manual" : "Manual",
"sql_exception" : "Hubo una excepción SQL. Por favor, intente contactar con algún administrador.",
"session_string_null" : "El String de la sesión es nulo.",
"session_empty" : "La sesión está vacía.",
"session_bad_format" : "La sesión tiene mal el formato.",
"session_id_string_empty" : "El ID de la sesión en formato String está vacío.",
"session_id_string_bad" : "El ID de la sesión en formato String está mal.",
"session_string_incompleted" : "El String de la sesión está incompleto.",
"session_null" : "La sesión es nula.",
"session_not_id" : "La sesión no es un ID.",
"session_not_exists" : "La sesión no existe.",
"session_date_out" : "La sesión ya fue cerrada.",
"session_timeout" : "A la sesión le saltó el Timeout por tiempo de inactividad forzada.",
"session_update_ok" : "La sesión actual se actualizó correctamente.",
"session_update_error" : "Hubo un error con código '{code}' al intentar actualizar la sesión actual.{list}",
"mode_null" : "El modo de juego es nulo.",
"mode_empty" : "El modo de juego está vacío.",
"mode_not_exists" : "El modo de juego '{mode}' no existe.",
"page_null" : "El número de página es nulo.",
"page_lower_1" : "El número de página ha de ser mínimo 1.",
"items_per_page_null" : "El número de elementos por página es nulo.",
"items_per_page_lower_1" : "Al menos se ha de mostrar un elemento por página.",
"nicks_null" : "La variable de búsqueda de Nicks está vacía.",
"load_scores_error" : "Hubo un error con código '{code}' al intentar cargar las puntuaciones de la página '{page}' con '{items_per_page}' elementos.{list}",
"load_scores_ok" : "Las puntuaciones de la página '{page}' con '{items_per_page}' elementos fueron cargadas correctamente",
"nick_null" : "El Nick es nulo.",
"nick_empty" : "El Nick dado está vacío.",
"score_null" : "La puntación es nula.",
"score_lower_0" : "La puntuación '{score}' es inferior a 0.",
"save_scores_error" : "Hubo un error con código '{code}' al intentar guardar la nueva puntuación '{score}' sobre el Nick '{nick}'.{list}",
"save_scores_ok" : "La nueva puntuación '{score}' sobre el Nick '{nick}' fue almacenada correctamente."
}
}

@ -0,0 +1,50 @@
{
"esperanto" : {
"start" : "Komencu komenci",
"settings" : "Settings",
"scores" : "Dudekopo",
"credits" : "Kreditoj",
"paused" : "Pause",
"resume" : "Daŭrigu daŭrigi",
"left_match" : "La [[maldekstro (politiko)|maldekstran mondbildon]]",
"previous" : "Antaŭa Antaŭa Antaŭa Antaŭa Antaŭa",
"next" : "La sekva",
"back" : "Malantaŭa dorso",
"page" : "Paĝo",
"save" : "Savi",
"not_save" : "Ne ŝparu",
"test_mode" : "Indico",
"manual" : "Manlibro",
"sql_exception" : "Estis SQL escepto. Bonvolu kontakti administranton.",
"session_string_null" : "La ŝnuro de la sesio estas nula.",
"session_empty" : "La sesio estas malplena.",
"session_bad_format" : "La sesio havas malbonan formaton.",
"session_id_string_empty" : "La sesio ID en arĉformato estas malplena.",
"session_id_string_bad" : "La sesio ID en arĉformato estas malĝusta.",
"session_string_incompleted" : "La ŝnuro de la sesio estas nekompleta.",
"session_null" : "La sesio estas nula.",
"session_not_id" : "La sesio ne estas identigilo.",
"session_not_exists" : "La sesio ne ekzistas.",
"session_date_out" : "La sesio estis fermita.",
"session_timeout" : "La sesio maltrafis Timeout por malvola neaktiveco.",
"session_update_ok" : "La aktuala sesio estis ĝuste ĝisdatigita.",
"session_update_error" : "Ekzistis eraro kun '{code}'-kodo dum provado ĝisdatigi la nunan sesion. {list}",
"mode_null" : "La ludo estas nul.",
"mode_empty" : "La ludo estas malplena.",
"mode_not_exists" : "La '{mode}'-ludreĝimo ne ekzistas.",
"page_null" : "La paĝo estas nul.",
"page_lower_1" : "La paĝo nombro devas esti almenaŭ 1.",
"items_per_page_null" : "La nombro da eroj per paĝo estas nul.",
"items_per_page_lower_1" : "Almenaŭ unu ero per paĝo devas esti montrita.",
"nicks_null" : "La serĉvariablo de Nicks estas malplena.",
"load_scores_error" : "Ekzistis eraro kun '{code}'-kodo dum provado ŝarĝi la '{page}'-paĝan dudekopon kun '{items_per_page}'-elementoj. {list}",
"load_scores_ok" : "Paĝo gajnas '{page}' kun '{items_per_page}'-elementoj estis ĝuste ŝarĝitaj",
"nick_null" : "Nick estas nulo.",
"nick_empty" : "La Nick donita estas malplena.",
"score_null" : "La kudristo estas nulo.",
"score_lower_0" : "La '{score}'-poentaro estas malpli ol 0.",
"save_scores_error" : "Ekzistis eraro kun '{code}'-kodo dum provado ŝpari la novan '{score}' poentaron sur Nick '{nick}'. {list}",
"save_scores_ok" : "La nova '{score}'-poentaro sur Nick '{nick}' estis ĝuste stokita."
}
}

@ -0,0 +1,50 @@
{
"farsi" : {
"start" : "شروع کار",
"settings" : "تنظیمات",
"scores" : "امتیازات",
"credits" : "اعتبار",
"paused" : "Pause",
"resume" : "ادامه ادامه ادامه",
"left_match" : "رها کردن",
"previous" : "Previous Previous Previous post",
"next" : "بعدی Next Next Next Next",
"back" : "بازگشت بازگشت",
"page" : "صفحه صفحه صفحه",
"save" : "Save Save",
"not_save" : "پس انداز نکنید",
"test_mode" : "روش شواهد",
"manual" : "Manual",
"sql_exception" : "یک استثناء SQL وجود داشت. سعی کنید با یک مدیر تماس بگیرید.",
"session_string_null" : "رشته جلسه خنثی است.",
"session_empty" : "جلسه خالی است.",
"session_bad_format" : "جلسه یک فرمت بد دارد.",
"session_id_string_empty" : "شناسه جلسه در فرمت رشته خالی است.",
"session_id_string_bad" : "شناسه جلسه در فرمت رشته اشتباه است.",
"session_string_incompleted" : "رشته جلسه ناقص است.",
"session_null" : "جلسه باطل است.",
"session_not_id" : "جلسه یک ID نیست.",
"session_not_exists" : "جلسه وجود ندارد.",
"session_date_out" : "جلسه بسته شد.",
"session_timeout" : "این جلسه زمان را برای عدم فعالیت اجباری از دست داد.",
"session_update_ok" : "جلسه فعلی به درستی به روز شد.",
"session_update_error" : "خطایی با کد '{code}' در هنگام تلاش برای به روز رسانی جلسه فعلی وجود داشت. {list}",
"mode_null" : "حالت بازی صفر است.",
"mode_empty" : "حالت بازی خالی است.",
"mode_not_exists" : "حالت بازی '{mode}' وجود ندارد.",
"page_null" : "شماره صفحه صفر است.",
"page_lower_1" : "شماره صفحه باید حداقل 1.",
"items_per_page_null" : "تعداد موارد در هر صفحه صفر است.",
"items_per_page_lower_1" : "حداقل یک مورد در هر صفحه باید نمایش داده شود.",
"nicks_null" : "متغیر جستجوی نیک ها خالی است.",
"load_scores_error" : "خطایی با کد '{code}' در هنگام تلاش برای بارگیری امتیازات صفحه '{page}' با عناصر '{items_per_page}' وجود داشت. {list}z",
"load_scores_ok" : "امتیازات صفحه '{page}' با عناصر '{items_per_page}' به درستی بارگذاری شدند",
"nick_null" : "نیک باطل است.",
"nick_empty" : "نیک داده شده خالی است.",
"score_null" : "چسب ها خنثی هستند.",
"score_lower_0" : "نمره '{score}' کمتر از 0 است.",
"save_scores_error" : "خطایی با کد '{code}' در هنگام تلاش برای نجات امتیاز جدید '{score}' در نیک '{nick}' وجود داشت. {list}",
"save_scores_ok" : "نمره جدید '{score}' در نیک '{nick}' به درستی ذخیره شده است."
}
}

@ -0,0 +1,54 @@
{
"francais" : {
"start" : "Commencez",
"settings" : "Réglages",
"scores" : "Partitions",
"credits" : "Crédits",
"paused" : "Pause",
"resume" : "Continuer",
"left_match" : "Abandon",
"previous" : "Précédent",
"next" : "Suivant",
"back" : "Retour",
"page" : "Page",
"save" : "Save",
"not_save" : "Ne sauve pas",
"test_mode" : "Mode de preuve",
"manual" : "Manuel",
"sql_exception" : "Il y avait une exception SQL. Veuillez contacter un administrateur.",
"session_string_null" : "La corde de la session est nulle.",
"session_empty" : "La session est vide.",
"session_bad_format" : "La session a un mauvais format.",
"session_id_string_empty" : "L'ID de session en format String est vide.",
"session_id_string_bad" : "L'ID de session en format String est incorrect.",
"session_string_incompleted" : "The String of the session is incomplete.",
"session_null" : "La session est nulle.",
"session_not_id" : "La session n'est pas une pièce d'identité.",
"session_not_exists" : "La session n ' existe pas.",
"session_date_out" : "The session was closed.",
"session_timeout" : "La session a raté Timeout for forced inactivité.",
"session_update_ok" : "La session en cours a été correctement mise à jour.",
"session_update_error" : "Il y a eu une erreur avec le code '{code}' lors de la mise à jour de la session en cours. {list}",
"mode_null" : "Le mode de jeu est zéro.",
"mode_empty" : "Le mode de jeu est vide.",
"mode_not_exists" : "Le mode de jeu '{mode}' n'existe pas.",
"page_null" : "Le numéro de page est zéro.",
"page_lower_1" : "Le numéro de page doit être au moins 1.",
"items_per_page_null" : "Le nombre d'articles par page est nul.",
"items_per_page_lower_1" : "Au moins un article par page doit être affiché.",
"nicks_null" : "La variable de recherche de Nicks est vide.",
"load_scores_error" : [
"Il y a eu une erreur avec le code '{code}' lorsque vous essayez ",
"de charger les scores sur la page '{page}' avec des éléments ",
"'{items_per_page}'. {list}"
],
"load_scores_ok" : "Les scores de la page '{page}' avec des éléments '{items_per_page}' ont été correctement chargés",
"nick_null" : "Nick est nul.",
"nick_empty" : "Le Nick est vide.",
"score_null" : "La maille est nulle.",
"score_lower_0" : "Le score '{score}' est inférieur à 0.",
"save_scores_error" : "Il y a eu une erreur avec le code '{code}' lorsque vous essayez de sauvegarder le nouveau score '{score}' sur Nick '{nick}'. {list}",
"save_scores_ok" : "Le nouveau score '{score}' sur Nick '{nick}' a été correctement stocké."
}
}

@ -0,0 +1,50 @@
{
"gaeilge" : {
"start" : "Tosaigh",
"settings" : "An tSraith Shinsearach",
"scores" : "ScóirÃ",
"credits" : "Creidmheasanna",
"paused" : "Riachtanais uisce: measartha",
"resume" : "Leanúint ar aghaidh",
"left_match" : "Amharc ar gach eolas",
"previous" : "Roimhe Seo",
"next" : "Ar Aghaidh",
"back" : "Ar ais chuig clár",
"page" : "Leathanach Baile",
"save" : "Sábháil Sábháil",
"not_save" : "Ná shábháil",
"test_mode" : "Modh fianaise",
"manual" : "Lámhleabhar Lámhleabhar",
"sql_exception" : "Bhí eisceacht SQL. Déan iarracht teagmháil le riarthóir.",
"session_string_null" : "Tá an Curtain an tseisiúin ar neamhní.",
"session_empty" : "Tá an seisiún folamh.",
"session_bad_format" : "Tá an seisiún formáid dona.",
"session_id_string_empty" : "Is é an ID seisiún i bhformáid Curtain folamh.",
"session_id_string_bad" : "Is é an ID seisiún i bhformáid Curtain mícheart.",
"session_string_incompleted" : "Tá an Curtain an tseisiúin neamhiomlán.",
"session_null" : "Tá an seisiún ar neamhní.",
"session_not_id" : "Níl an seisiún ID.",
"session_not_exists" : "Níl an seisiún ann.",
"session_date_out" : "Dúnadh an seisiún.",
"session_timeout" : "Chaill an seisiún Timeout le haghaidh neamhghníomhaíochta éigean.",
"session_update_ok" : "Tugadh an seisiún reatha cothrom le dáta i gceart.",
"session_update_error" : "Bhí earráid le '{code}' cód nuair ag iarraidh a thabhairt cothrom le dáta an seisiún reatha. {list}",
"mode_null" : "Is é an modh cluiche náid.",
"mode_empty" : "Is é an modh cluiche folamh.",
"mode_not_exists" : "Ní dhéanann an modh cluiche '{mode}' ann.",
"page_null" : "Is é an uimhir leathanach nialas.",
"page_lower_1" : "Ní mór uimhir an leathanaigh a bheith ar a laghad 1.",
"items_per_page_null" : "Is é an líon na n-ítimí in aghaidh an leathanaigh náid.",
"items_per_page_lower_1" : "Ní mór ar a laghad mír amháin in aghaidh an leathanaigh a thaispeáint.",
"nicks_null" : "Tá athróg cuardaigh Nicks folamh.",
"load_scores_error" : "Bhí earráid le '{code}' cód nuair ag iarraidh a luchtú an scór leathanach '{page}' le heilimintí '{items_per_page}'. Seirbhís do Chustaiméirí",
"load_scores_ok" : "Rinneadh scóir leathanach '{page}' le heilimintí '{items_per_page}' a luchtú i gceart",
"nick_null" : "Tá Nick null.",
"nick_empty" : "Tá an Nick thabhairt folamh.",
"score_null" : "Tá an stitch ar neamhní.",
"score_lower_0" : "Is é an scór '{score}' thíos 0.",
"save_scores_error" : "Bhí earráid le cód '{code}' nuair a iarraidh a shábháil ar an scór '{score}' nua ar an '{nick}' Nick. {list}",
"save_scores_ok" : "Stóráileadh an scór '{score}' nua ar Nick '{nick}' i gceart."
}
}

@ -0,0 +1,50 @@
{
"hangugeo" : {
"start" : "지원하다",
"settings" : "계정 설정",
"scores" : "이름 *",
"credits" : "계정 만들기",
"paused" : "팟캐스트",
"resume" : "계속하기",
"left_match" : "아바돈",
"previous" : "이름 *",
"next" : "이름 *",
"back" : "이름 *",
"page" : "- 연혁",
"save" : "제품 정보",
"not_save" : "저장하지 마십시오",
"test_mode" : "Evidence 모드",
"manual" : "제품정보",
"sql_exception" : "SQL 예외가 있습니다. 자주 묻는 질문.",
"session_string_null" : "세션의 문자열은 null입니다.",
"session_empty" : "세션은 비어 있습니다.",
"session_bad_format" : "세션에는 나쁜 형식이 있습니다.",
"session_id_string_empty" : "String 형식의 세션 ID가 비어 있습니다.",
"session_id_string_bad" : "문자열 형식의 세션 ID는 잘못된다.",
"session_string_incompleted" : "세션의 문자열은 불완전합니다.",
"session_null" : "세션은 null입니다.",
"session_not_id" : "세션은 ID가 아닙니다.",
"session_not_exists" : "세션은 존재하지 않습니다.",
"session_date_out" : "세션이 종료되었습니다.",
"session_timeout" : "강제적인 inactivity를 위한 Session missed Timeout.",
"session_update_ok" : "현재 세션이 제대로 업데이트되었습니다.",
"session_update_error" : "현재 세션을 업데이트하려고 할 때 '{code}' 코드와 오류가 있었습니다. 모델 번호: {list}",
"mode_null" : "게임 모드는 0입니다.",
"mode_empty" : "게임 모드가 비어 있습니다.",
"mode_not_exists" : "'{mode}' 게임 모드는 존재하지 않습니다.",
"page_null" : "페이지 번호는 0입니다.",
"page_lower_1" : "페이지 번호는 적어도 1이어야 합니다.",
"items_per_page_null" : "페이지 당 항목의 수는 0입니다.",
"items_per_page_lower_1" : "페이지 당 최소 1개의 항목이 표시되어야 합니다.",
"nicks_null" : "Nicks의 검색 변수는 비어 있습니다.",
"load_scores_error" : "'{page}' 점수를 '{items_per_page}' 요소로 로드하려고 할 때 '{code}' 코드와 오류가 있었습니다. {list}의 특징",
"load_scores_ok" : "MKVBNDY 요소가 제대로 로드된 '{page}'",
"nick_null" : "Nick은 null입니다.",
"nick_empty" : "주어진 닉은 비어 있습니다.",
"score_null" : "스티치는 null입니다.",
"score_lower_0" : "'{score}' 점수는 0 미만입니다.",
"save_scores_error" : "Nick '{nick}'의 새로운 '{score}' 점수를 저장할 때 '{code}' 코드와 오류가 있었습니다. 모델 번호: {list}",
"save_scores_ok" : "Nick '{nick}'의 새로운 '{score}' 점수가 제대로 저장되었습니다."
}
}

@ -0,0 +1,50 @@
{
"hindi" : {
"start" : "पभ",
"settings" : "सिस",
"scores" : "सर",
"credits" : "ऋण",
"paused" : "Pause",
"resume" : "ज",
"left_match" : "Abandon",
"previous" : "पिछल",
"next" : "अगल",
"back" : "वपस",
"page" : "पठ",
"save" : "सह",
"not_save" : "नह बचओ",
"test_mode" : "सय मड",
"manual" : "मअल",
"sql_exception" : "वह एक SQL अपवद थ। कपय एक परशसक सपरक करनरयस कर।.",
"session_string_null" : "सतर किग शय ह।.",
"session_empty" : "सतर ख।.",
"session_bad_format" : "सतर म एक बप ह।.",
"session_id_string_empty" : "सिग पप म सतर आईड।.",
"session_id_string_bad" : "सिग पप म सतर आईड गलत ह।.",
"session_string_incompleted" : "सतर किग अध।.",
"session_null" : "सतर शय ह।.",
"session_not_id" : "सतर आईड नह।.",
"session_not_exists" : "सतर मद नह।.",
"session_date_out" : "सतर बद ह गय।.",
"session_timeout" : "सतर क मजबर निियतिए टइमआउट यद कि गय।.",
"session_update_ok" : "वरतमन सतर क सहग स अदयतन कि गय।.",
"session_update_error" : "वरतमन सतर क अदयतन करनिश करत समय '{code}' कड कथ एक ति। {list}",
"mode_null" : "गम मड शय ह।.",
"mode_empty" : "गम मड ख।.",
"mode_not_exists" : "'{mode}' खल मड मद नह।.",
"page_null" : "पठ सय ह।.",
"page_lower_1" : "पठ स कम स कम 1 हिए।.",
"items_per_page_null" : "परतिठ आइटम कय ह।.",
"items_per_page_lower_1" : "परतिठ कम स कम एक आइटम परदरित कििए।.",
"nicks_null" : "Nicks कज चर ख।.",
"load_scores_error" : "'{items_per_page}' ततथ '{items_per_page}'C पज सर कड करनिश करत समय '{code}' कड कथ एक ति। {list}",
"load_scores_ok" : "'{items_per_page}' ततथ '{page}' पज पर सर क सहग सड कि गय।",
"nick_null" : "निक शय ह।.",
"nick_empty" : "दिए गए निक ख।.",
"score_null" : "सिई शय ह।.",
"score_lower_0" : "'{score}' सर 0 स कम ह।.",
"save_scores_error" : "Nick '{nick}' पर नए '{score}' सर क बचिश करत समय '{code}' कड कथ एक ति। {list}",
"save_scores_ok" : "Nick '{nick}' पर नए '{score}' सर क सहग सरहत कि गय।."
}
}

@ -0,0 +1,50 @@
{
"indonesia" : {
"start" : "Login",
"settings" : "Login",
"scores" : "Login",
"credits" : "Login",
"paused" : "Login",
"resume" : "Sitemap",
"left_match" : "Login",
"previous" : "Sitemap",
"next" : "Sitemap",
"back" : "Login",
"page" : "Login",
"save" : "Sitemap",
"not_save" : "Jangan menyimpan",
"test_mode" : "Modus",
"manual" : "Login",
"sql_exception" : "Ada pengecualian SQL. Silakan hubungi administrator.",
"session_string_null" : "String sesi adalah null.",
"session_empty" : "Sesi kosong.",
"session_bad_format" : "Sesi memiliki format yang buruk.",
"session_id_string_empty" : "ID sesi dalam format String kosong.",
"session_id_string_bad" : "ID sesi dalam format String salah.",
"session_string_incompleted" : "String sesi tidak lengkap.",
"session_null" : "Sitemap.",
"session_not_id" : "Sesinya bukan ID.",
"session_not_exists" : "Sesi tidak ada.",
"session_date_out" : "Sesi ditutup.",
"session_timeout" : "Sesi melewatkan Timeout untuk ketidakaktifan paksa.",
"session_update_ok" : "Sesi saat ini diperbarui dengan benar.",
"session_update_error" : "Ada kesalahan dengan kode '{code}' ketika mencoba untuk memperbarui sesi saat ini. Login",
"mode_null" : "Mode permainan adalah nol.",
"mode_empty" : "Mode permainan kosong.",
"mode_not_exists" : "Mode permainan '{mode}' tidak ada.",
"page_null" : "Jumlah halaman adalah nol.",
"page_lower_1" : "Jumlah halaman harus minimal 1.",
"items_per_page_null" : "Jumlah item per halaman adalah nol.",
"items_per_page_lower_1" : "Setidaknya satu item per halaman harus ditampilkan.",
"nicks_null" : "Variabel pencarian Nicks kosong.",
"load_scores_error" : "Ada kesalahan dengan kode '{code}' ketika mencoba memuat skor halaman MKVBQYN dengan elemen '{items_per_page}'. Login",
"load_scores_ok" : "Nilai halaman '{page}' dengan elemen '{items_per_page}' dimuat dengan benar",
"nick_null" : "Login.",
"nick_empty" : "Nick yang diberikan adalah kosong.",
"score_null" : "Jahitan adalah null.",
"score_lower_0" : "Skor '{score}' kurang dari 0.",
"save_scores_error" : "Ada kesalahan dengan kode '{code}' ketika mencoba untuk menyimpan skor '{score}' baru di Nick '{nick}'. Login",
"save_scores_ok" : "Skor '{score}' baru di Nick '{nick}' disimpan dengan benar."
}
}

@ -0,0 +1,50 @@
{
"italiano" : {
"start" : "Inizio",
"settings" : "Impostazioni impostazioni",
"scores" : "Punteggio",
"credits" : "Crediti",
"paused" : "Pausa",
"resume" : "Continua",
"left_match" : "Abandon",
"previous" : "Precedente",
"next" : "Il prossimo",
"back" : "Indietro",
"page" : "Pagina",
"save" : "Salva",
"not_save" : "Non salvare",
"test_mode" : "Modalità di prova",
"manual" : "Manuale",
"sql_exception" : "C'era un'eccezione SQL. Si prega di provare a contattare un amministratore.",
"session_string_null" : "Lo stress della sessione è nullo.",
"session_empty" : "La sessione è vuota.",
"session_bad_format" : "La sessione ha un cattivo formato.",
"session_id_string_empty" : "L'ID di sessione in formato String è vuoto.",
"session_id_string_bad" : "L'ID di sessione in formato String è sbagliato.",
"session_string_incompleted" : "Lo stress della sessione è incompleto.",
"session_null" : "La sessione è nulla.",
"session_not_id" : "La sessione non è un documento d'identità.",
"session_not_exists" : "La sessione non esiste.",
"session_date_out" : "La sessione era chiusa.",
"session_timeout" : "La sessione ha mancato Timeout per l'inattività forzata.",
"session_update_ok" : "La sessione corrente è stata correttamente aggiornata.",
"session_update_error" : "C'è stato un errore con il codice '{code}' quando si cerca di aggiornare la sessione corrente. {list}",
"mode_null" : "La modalità di gioco è zero.",
"mode_empty" : "La modalità di gioco è vuota.",
"mode_not_exists" : "La modalità di gioco '{mode}' non esiste.",
"page_null" : "Il numero di pagina è zero.",
"page_lower_1" : "Il numero di pagina deve essere almeno 1.",
"items_per_page_null" : "Il numero di articoli per pagina è zero.",
"items_per_page_lower_1" : "Almeno un elemento per pagina deve essere visualizzato.",
"nicks_null" : "La variabile di ricerca di Nicks è vuota.",
"load_scores_error" : "C'è stato un errore con il codice '{code}' quando si cerca di caricare i punteggi della pagina '{page}' con gli elementi '{items_per_page}'. {list}",
"load_scores_ok" : "I punteggi della pagina '{page}' con elementi '{items_per_page}' sono stati caricati correttamente",
"nick_null" : "Nick e' nullo.",
"nick_empty" : "Il Nick dato è vuoto.",
"score_null" : "Il punto è nullo.",
"score_lower_0" : "Il punteggio '{score}' è inferiore a 0.",
"save_scores_error" : "C'è stato un errore con il codice '{code}' quando si cerca di salvare il nuovo punteggio '{score}' su Nick '{nick}'. {list}",
"save_scores_ok" : "Il nuovo punteggio '{score}' su Nick '{nick}' è stato memorizzato correttamente."
}
}

@ -0,0 +1,50 @@
{
"ivrit" : {
"start" : "התחל",
"settings" : "הגדרות הגדרות",
"scores" : "תוצאות",
"credits" : "אשראי",
"paused" : "Pause",
"resume" : "המשך",
"left_match" : "Abandon",
"previous" : "הקודם",
"next" : "הבא",
"back" : "בחזרה",
"page" : "Page",
"save" : "להציל",
"not_save" : "אל תציל",
"test_mode" : "ראיות",
"manual" : "ידני",
"sql_exception" : "היה יוצא דופן של SQL. נסו ליצור קשר עם מנהל.",
"session_string_null" : "החתירה של הפגישה היא אפס.",
"session_empty" : "המפגש ריק.",
"session_bad_format" : "למפגש יש פורמט רע.",
"session_id_string_empty" : "מזהה הפגישה בפורמט סטרינג הוא ריק.",
"session_id_string_bad" : "מזהה הפגישה בפורמט סטרינג שגוי.",
"session_string_incompleted" : "החתירה של הפגישה אינה שלמה.",
"session_null" : "הפגישה היא אפס.",
"session_not_id" : "המפגש אינו מזהה.",
"session_not_exists" : "המפגש לא קיים.",
"session_date_out" : "המפגש נסגר.",
"session_timeout" : "המפגש החמיץ את הזמן לפעילות בכפייה.",
"session_update_ok" : "המפגש הנוכחי עודכן כראוי.",
"session_update_error" : "הייתה טעות עם קוד '{code}' בעת ניסיון לעדכן את הפגישה הנוכחית. {list}",
"mode_null" : "מצב המשחק הוא אפס.",
"mode_empty" : "מצב המשחק ריק.",
"mode_not_exists" : "מצב משחק '{mode}' אינו קיים.",
"page_null" : "מספר העמוד הוא אפס.",
"page_lower_1" : "מספר העמוד חייב להיות לפחות 1.",
"items_per_page_null" : "מספר הפריטים בעמוד הוא אפס.",
"items_per_page_lower_1" : "לפחות פריט אחד בעמוד חייב להיות מוצג.",
"nicks_null" : "משתנה החיפוש של ניקס הוא ריק.",
"load_scores_error" : "הייתה טעות עם קוד '{code}' בעת ניסיון לטעון את ציוני העמוד MKV-KL עם רכיבי '{items_per_page}'. {list}",
"load_scores_ok" : "ציוני דף '{page}' עם רכיבי '{items_per_page}' היו טעון כראוי",
"nick_null" : "ניק הוא אפס.",
"nick_empty" : "הניק נתן ריק.",
"score_null" : "תפרים הם אפס.",
"score_lower_0" : "הציון '{score}' פחות מ-0.",
"save_scores_error" : "הייתה טעות עם קוד '{code}' בעת ניסיון להציל את הציון החדש '{score}' על ניק '{nick}'. {list}",
"save_scores_ok" : "הציון החדש של '{score}' ב-Nick '{nick}' נשמר כראוי."
}
}

@ -0,0 +1,50 @@
{
"magyar" : {
"start" : "Kezdőlap",
"settings" : "Beállítások",
"scores" : "Skorpiók",
"credits" : "Hitelek",
"paused" : "Üzenet",
"resume" : "Tovább",
"left_match" : "Anál",
"previous" : "Előző",
"next" : "Kezdőlap >",
"back" : "Vissza",
"page" : "Oldal",
"save" : "Mentés",
"not_save" : "Ne ments",
"test_mode" : "Bizonyíték mód",
"manual" : "Kézikönyv",
"sql_exception" : "Volt egy SQL kivétel. Kérjük, próbáljon kapcsolatba lépni egy adminisztrátorral.",
"session_string_null" : "Az ülés húrja null.",
"session_empty" : "Az ülés üres.",
"session_bad_format" : "Az ülésnek rossz formátuma van.",
"session_id_string_empty" : "Az ülési azonosító a String formátumban üres.",
"session_id_string_bad" : "Az ülési azonosító a String formátumban rossz.",
"session_string_incompleted" : "Az ülés húrja nem teljes.",
"session_null" : "Az ülés null.",
"session_not_id" : "Az ülés nem egy ID.",
"session_not_exists" : "Az ülés nem létezik.",
"session_date_out" : "Az ülés zárva volt.",
"session_timeout" : "Az ülés hiányzott a Timeout kényszerített inaktivitásért.",
"session_update_ok" : "A jelenlegi ülést helyesen frissítették.",
"session_update_error" : "Volt egy hiba az '{code}' kóddal, amikor megpróbálta frissíteni a jelenlegi ülést. {list}",
"mode_null" : "A játék mód nulla.",
"mode_empty" : "A játék mód üres.",
"mode_not_exists" : "Az '{mode}' játékmód nem létezik.",
"page_null" : "Az oldalszám nulla.",
"page_lower_1" : "Az oldalszámnak legalább 1-nek kell lennie.",
"items_per_page_null" : "Az oldalonkénti elemek száma nulla.",
"items_per_page_lower_1" : "Az oldalonként legalább egy elemet kell megjeleníteni.",
"nicks_null" : "Nicks keresési változója üres.",
"load_scores_error" : "Volt egy hiba az '{code}' kóddal, amikor megpróbálta betölteni a pontszámokat az '{page}' oldalon '{items_per_page}' elemekkel. {list}",
"load_scores_ok" : "Az '{page}' oldal pontszáma az '{items_per_page}' elemekkel helyesen betöltött",
"nick_null" : "Nick null.",
"nick_empty" : "A Nick adott üres.",
"score_null" : "A boszorkány null.",
"score_lower_0" : "Az '{score}' pontszám kevesebb, mint 0.",
"save_scores_error" : "Volt egy hiba az '{code}' kóddal, amikor megpróbálta megmenteni az új MKVBVG pontszámot a Nick '{nick}'-en. {list}",
"save_scores_ok" : "Az új '{score}' pontszámot Nick '{nick}'-n tárolták helyesen."
}
}

@ -0,0 +1,50 @@
{
"nederlands" : {
"start" : "Begin",
"settings" : "Setting",
"scores" : "Scores",
"credits" : "Credits",
"paused" : "Pauze",
"resume" : "Ga door",
"left_match" : "Verlaat",
"previous" : "Vertaling:",
"next" : "Volgende",
"back" : "Terug",
"page" : "Pagina",
"save" : "Red",
"not_save" : "Niet redden",
"test_mode" : "Bewijs",
"manual" : "Handboek",
"sql_exception" : "Er was een SQL uitzondering. Probeer contact op te nemen met een beheerder.",
"session_string_null" : "De String van de sessie is waardeloos.",
"session_empty" : "De sessie is leeg.",
"session_bad_format" : "De sessie heeft een slechte formaat.",
"session_id_string_empty" : "De sessie ID in String format is leeg.",
"session_id_string_bad" : "De sessie ID in String is verkeerd.",
"session_string_incompleted" : "De String van de sessie is onvolledig.",
"session_null" : "De sessie is klote.",
"session_not_id" : "De sessie is geen ID.",
"session_not_exists" : "De sessie bestaat niet.",
"session_date_out" : "De sessie was gesloten.",
"session_timeout" : "De sessie miste Timeout voor gedwongen inactiviteit.",
"session_update_ok" : "De huidige sessie was correct geüpload.",
"session_update_error" : "Er was een fout met MKVBQBY code toen hij de huidige sessie wilde updaten. {list}",
"mode_null" : "De game mode is nul.",
"mode_empty" : "De game mode is leeg.",
"mode_not_exists" : "De '{mode}' game mode bestaat niet.",
"page_null" : "Het paginanummer is nul.",
"page_lower_1" : "Het paginanummer moet minstens 1 zijn.",
"items_per_page_null" : "Het aantal items per pagina is nul.",
"items_per_page_lower_1" : "Tenminste één item per pagina moet getoond worden.",
"nicks_null" : "Nicks' zoektocht is leeg.",
"load_scores_error" : "Er was een fout met MKVBBXD code toen hij probeerde de scores te laden op de '{page}' pagina met '{items_per_page}' elementen. {list}",
"load_scores_ok" : "De MKVLRXN pagina scores met '{items_per_page}' elementen waren correct geladen",
"nick_null" : "Nick is gek.",
"nick_empty" : "De Nick gaf is leeg.",
"score_null" : "De hechting is niet goed.",
"score_lower_0" : "De '{score}' score is minder dan 0.",
"save_scores_error" : "Er was een fout met '{code}' code toen hij probeerde de nieuwe MKVBYB score te redden op Nick '{nick}'. MKVBFT",
"save_scores_ok" : "De nieuwe MKVPFHL score op Nick '{nick}' werd correct opgeslagen."
}
}

@ -0,0 +1,50 @@
{
"nihongo" : {
"start" : "スタート",
"settings" : "コンテンツ",
"scores" : "スコア",
"credits" : "クレジット",
"paused" : "パデュース",
"resume" : "お問い合わせ",
"left_match" : "アバンドン",
"previous" : "新着情報",
"next" : "次へ",
"back" : "バックナンバー",
"page" : "サイトマップ",
"save" : "保存する",
"not_save" : "保存しない",
"test_mode" : "証拠モード",
"manual" : "マニュアル",
"sql_exception" : "SQL例外がありました。 管理者に連絡してください。.",
"session_string_null" : "セッションの文字列は null です。.",
"session_empty" : "セッションは空です。.",
"session_bad_format" : "セッションは悪い形式です。.",
"session_id_string_empty" : "文字列形式のセッションIDは空です。.",
"session_id_string_bad" : "文字列形式のセッションIDは間違っています。.",
"session_string_incompleted" : "セッションの文字列は不完全です。.",
"session_null" : "セッションは null です。.",
"session_not_id" : "セッションはIDではありません。.",
"session_not_exists" : "セッションは存在しない。.",
"session_date_out" : "セッションは終了いたしました。.",
"session_timeout" : "セッションは、強制的な非アクティブのためのタイムアウトを逃しました。.",
"session_update_ok" : "現在のセッションを正しく更新しました。.",
"session_update_error" : "現在のセッションを更新しようとすると、'{code}'コードでエラーが発生しました。 {list}の特長",
"mode_null" : "ゲームモードはゼロです。.",
"mode_empty" : "ゲームモードは空です。.",
"mode_not_exists" : "'{mode}'のゲームモードは存在しません。.",
"page_null" : "ページ番号はゼロです。.",
"page_lower_1" : "ページ番号は少なくとも1でなければなりません。.",
"items_per_page_null" : "1ページあたりの項目数がゼロです。.",
"items_per_page_lower_1" : "1ページにつき1件以上表示する必要があります。.",
"nicks_null" : "Nicksの検索変数は空です。.",
"load_scores_error" : "'{page}'ページのスコアを'{items_per_page}'要素にロードしようとすると、MKVBLVDコードでエラーがありました。 {list}の特長",
"load_scores_ok" : "ページスコア '{page}' と '{items_per_page}' 要素が正しく読み込まれました",
"nick_null" : "Nick は null です。.",
"nick_empty" : "与えられたニックは空です。.",
"score_null" : "ステッチはnullです。.",
"score_lower_0" : "'{score}'スコアは0未満です。.",
"save_scores_error" : "Nick '{nick}'で新しい'{score}'スコアを保存しようとすると、'{code}'コードでエラーがありました。 サイトマップ",
"save_scores_ok" : "Nick '{nick}'の新しい'{score}'スコアが正しく保存されました。."
}
}

@ -0,0 +1,50 @@
{
"polski" : {
"start" : "Start",
"settings" : "Setting",
"scores" : "Scores",
"credits" : "Credits",
"paused" : "Pause",
"resume" : "Kontynuacja",
"left_match" : "Abandon",
"previous" : "Previously",
"next" : "Next Next Next Next Next Next Next Next",
"back" : "Back",
"page" : "Strona internetowa",
"save" : "Save",
"not_save" : "Nie ratuje się",
"test_mode" : "Tryb Evidence",
"manual" : "Podręcznik",
"sql_exception" : "Było to wyjątek SQL. Postanawia skontaktować się z administratorem.",
"session_string_null" : "Rozgrywki sesji są nieważne.",
"session_empty" : "Sesja jest pusta.",
"session_bad_format" : "Sesja ma zły format.",
"session_id_string_empty" : "Sesja ID w formacie String jest pusta.",
"session_id_string_bad" : "Sesja ID w formacie String jest błędna.",
"session_string_incompleted" : "Rozgrywka sesji jest niekompletna.",
"session_null" : "Sesja jest nieważna.",
"session_not_id" : "Sesja nie jest ID.",
"session_not_exists" : "Sesja nie istnieje.",
"session_date_out" : "Sesja została zamknięta.",
"session_timeout" : "Sesja omyłkowo straciła czas na nieaktywność.",
"session_update_ok" : "Obecna sesja została poprawnie aktualizowana.",
"session_update_error" : "Istnieje błąd z kodem '{code}', kiedy próbował aktualizować aktualizację sesji. '{code}'",
"mode_null" : "Tryb gry jest zero.",
"mode_empty" : "Tryb gry jest pusty.",
"mode_not_exists" : "Tryb gry '{mode}' nie istnieje.",
"page_null" : "Liczba stron jest zero.",
"page_lower_1" : "Liczba stron musi być co najmniej 1.",
"items_per_page_null" : "Liczba przedmiotów na stronie jest zero.",
"items_per_page_lower_1" : "Należy do nich przynajmniej jeden fragment na stronę.",
"nicks_null" : "Różnica wyszukiwania Nicksa jest pusta.",
"load_scores_error" : "Pojawił się błąd z kodem '{code}', kiedy próbował załadować punkty na stronie MKVBLNV z elementami '{items_per_page}'. {list}",
"load_scores_ok" : "Strony '{page}' z elementami '{items_per_page}' zostały prawidłowo załadowane",
"nick_null" : "Nick jest nieważny.",
"nick_empty" : "Nick jest pusty.",
"score_null" : "Wiatr jest pusty.",
"score_lower_0" : "Wyniki '{score}' są mniejsze niż 0.",
"save_scores_error" : "Pojawił się błąd z kodem '{code}', kiedy próbował uratować nowy wynik '{score}' na Nick '{nick}'. {list}",
"save_scores_ok" : "Nowy wynik MKVBQZG na torze Nick '{nick}' został poprawnie przechowywany."
}
}

@ -0,0 +1,50 @@
{
"portugues" : {
"start" : "Começar",
"settings" : "Configurações",
"scores" : "Resultados",
"credits" : "Créditos",
"paused" : "Pausa",
"resume" : "Continue",
"left_match" : "Abandonar",
"previous" : "Anterior",
"next" : "Próximo",
"back" : "Voltar",
"page" : "Página",
"save" : "Salvar",
"not_save" : "Não salve",
"test_mode" : "Modo de evidência",
"manual" : "Manual",
"sql_exception" : "Houve uma exceção SQL. Por favor, tente contactar um administrador.",
"session_string_null" : "O String da sessão é nulo.",
"session_empty" : "A sessão está vazia.",
"session_bad_format" : "A sessão tem um formato ruim.",
"session_id_string_empty" : "O ID da sessão no formato String está vazio.",
"session_id_string_bad" : "O ID da sessão no formato String está errado.",
"session_string_incompleted" : "A corda da sessão é incompleta.",
"session_null" : "A sessão é nula.",
"session_not_id" : "A sessão não é uma identificação.",
"session_not_exists" : "A sessão não existe.",
"session_date_out" : "A sessão foi fechada.",
"session_timeout" : "A sessão falhou Timeout por inatividade forçada.",
"session_update_ok" : "A sessão atual foi atualizada corretamente.",
"session_update_error" : "Houve um erro com o código '{code}' ao tentar atualizar a sessão atual. {list}",
"mode_null" : "O modo de jogo é zero.",
"mode_empty" : "O modo de jogo está vazio.",
"mode_not_exists" : "O modo de jogo '{mode}' não existe.",
"page_null" : "O número da página é zero.",
"page_lower_1" : "O número da página deve ser pelo menos 1.",
"items_per_page_null" : "O número de itens por página é zero.",
"items_per_page_lower_1" : "Pelo menos um item por página deve ser exibido.",
"nicks_null" : "A variável de pesquisa do Nicks está vazia.",
"load_scores_error" : "Houve um erro com o código '{code}' ao tentar carregar os escores de página '{page}' com elementos '{items_per_page}'. MKVBMVX",
"load_scores_ok" : "Os resultados da página '{page}' com elementos '{items_per_page}' foram carregados corretamente",
"nick_null" : "O Nick é nulo.",
"nick_empty" : "O Nick dado está vazio.",
"score_null" : "O ponto é nulo.",
"score_lower_0" : "A pontuação do '{score}' é inferior a 0.",
"save_scores_error" : "Houve um erro com o código '{code}' ao tentar salvar a nova pontuação '{score}' no Nick '{nick}'. {list}",
"save_scores_ok" : "A nova pontuação do '{score}' no Nick '{nick}' foi armazenada corretamente."
}
}

@ -0,0 +1,50 @@
{
"russkiy" : {
"start" : "Начало",
"settings" : "Настройка",
"scores" : "Оценки",
"credits" : "Кредиты",
"paused" : "Pause",
"resume" : "Продолжить",
"left_match" : "Abandon",
"previous" : "Предыдущий",
"next" : "Следующий",
"back" : "Назад",
"page" : "Страница",
"save" : "Сохранить",
"not_save" : "Не экономи",
"test_mode" : "Режим проверки",
"manual" : "Руководство",
"sql_exception" : "Было исключение SQL. Попробуйте связаться с администратором.",
"session_string_null" : "The String of the session is null.",
"session_empty" : "Заседание пусто.",
"session_bad_format" : "Заседание имеет плохой формат.",
"session_id_string_empty" : "ID сеанса в формате String пуст.",
"session_id_string_bad" : "Идентификатор сеанса в формате String неправильный.",
"session_string_incompleted" : "Запись сессии является неполной.",
"session_null" : "Заседание является нулевым.",
"session_not_id" : "Заседание не является идентификатором.",
"session_not_exists" : "Сессии не существует.",
"session_date_out" : "Заседание было закрыто.",
"session_timeout" : "Сессия пропустила таймаут для вынужденной бездействия.",
"session_update_ok" : "Нынешняя сессия была правильно обновлена.",
"session_update_error" : "Была ошибка с кодом '{code}' при попытке обновления текущей сессии. {list}",
"mode_null" : "Режим игры равен нулю.",
"mode_empty" : "Режим игры пуст.",
"mode_not_exists" : "Режим игры '{mode}' не существует.",
"page_null" : "Номер страницы равен нулю.",
"page_lower_1" : "Номер страницы должен быть не менее 1.",
"items_per_page_null" : "Количество пунктов на страницу равно нулю.",
"items_per_page_lower_1" : "По крайней мере один элемент на страницу должен быть отображен.",
"nicks_null" : "Поисковая переменная Никса пуста.",
"load_scores_error" : "Была ошибка с кодом '{code}' при попытке загрузить баллы '{page}' с элементами '{items_per_page}'. {list}",
"load_scores_ok" : "Рейтинги страниц '{page}' с элементами '{items_per_page}' были правильно загружены",
"nick_null" : "Ник не работает.",
"nick_empty" : "Ник пуст.",
"score_null" : "Стежка пуста.",
"score_lower_0" : "Рейтинг '{score}' меньше 0.",
"save_scores_error" : "Была ошибка с кодом '{code}' при попытке сохранить новый балл '{score}' на Nick MKVBPTB. {list}",
"save_scores_ok" : "Новый балл '{score}' на Nick '{nick}' был правильно сохранен."
}
}

@ -0,0 +1,50 @@
{
"slovencina" : {
"start" : "Začiatok",
"settings" : "Nastavenie",
"scores" : "Skóre",
"credits" : "Kreditíva",
"paused" : "Pauza",
"resume" : "Pokračovať",
"left_match" : "Abandon",
"previous" : "Predchádzajúci",
"next" : "Ďalšie",
"back" : "Späť",
"page" : "Stránka",
"save" : "Uložiť",
"not_save" : "Uložiť",
"test_mode" : "Režim dôkazu",
"manual" : "Ručné",
"sql_exception" : "Tam bol výnimkou SQL. Prosím, skúste kontaktovať správcu.",
"session_string_null" : "String relácie je null.",
"session_empty" : "Sedenie je prázdne.",
"session_bad_format" : "Stretnutie má zlý formát.",
"session_id_string_empty" : "ID relácie v String formáte je prázdny.",
"session_id_string_bad" : "ID relácie v String formáte je zle.",
"session_string_incompleted" : "String relácie je neúplná.",
"session_null" : "Reláciu je null.",
"session_not_id" : "Reláciu nie je ID.",
"session_not_exists" : "Reláciu neexistuje.",
"session_date_out" : "Stretnutie bolo uzavreté.",
"session_timeout" : "Reláciu vynechal čas pre nútenú nečinnosť.",
"session_update_ok" : "Aktuálne sedenie bolo správne aktualizované.",
"session_update_error" : "Tam bola chyba s '{code}' kód pri pokuse o aktualizáciu aktuálneho zasadnutia. {list}",
"mode_null" : "Režim hry je nula.",
"mode_empty" : "Režim hry je prázdny.",
"mode_not_exists" : "Režim hry '{mode}' neexistuje.",
"page_null" : "Číslo stránky je nula.",
"page_lower_1" : "Číslo stránky musí byť aspoň 1.",
"items_per_page_null" : "Počet položiek na stranu je nula.",
"items_per_page_lower_1" : "Najmenej jedna položka na stránke musí byť zobrazená.",
"nicks_null" : "Nicks vyhľadávanie premenná je prázdne.",
"load_scores_error" : "Tam bola chyba s '{code}' kód pri pokuse o načítanie '{page}' stránky skóre s '{items_per_page}' prvkami. {list}",
"load_scores_ok" : "Stránky skóre '{page}' s prvkami '{items_per_page}' boli správne načítané",
"nick_null" : "Nick je null.",
"nick_empty" : "Nick je prázdny.",
"score_null" : "Steh je null.",
"score_lower_0" : "Skóre '{score}' je menšia ako 0.",
"save_scores_error" : "Tam bola chyba s '{code}' kód pri pokuse zachrániť nové '{score}' skóre na Nick '{nick}'. {list}",
"save_scores_ok" : "Nový '{score}' skóre na Nick '{nick}' bol správne uložený."
}
}

@ -0,0 +1,50 @@
{
"suomi" : {
"start" : "Aloita",
"settings" : "Asetukset",
"scores" : "Pisteitä",
"credits" : "Luottoa",
"paused" : "Pako",
"resume" : "Jatka",
"left_match" : "Hylkääminen",
"previous" : "Edellinen Edellinen Edellinen",
"next" : "Seuraava Seuraava Seuraava Seuraava Seuraava",
"back" : "Takaisin",
"page" : "Sivut",
"save" : "Säästäminen",
"not_save" : "Älä säästä",
"test_mode" : "Näyttötila",
"manual" : "Manuaalinen",
"sql_exception" : "SQL-poikkeus oli olemassa. Ole hyvä ja ota yhteyttä ylläpitäjään.",
"session_string_null" : "Istunnon lavastus on nolla.",
"session_empty" : "Istunto on tyhjä.",
"session_bad_format" : "Istunnossa on huono muoto.",
"session_id_string_empty" : "Istuntotunnus Stringissä on tyhjä.",
"session_id_string_bad" : "Istuntotunnus Stringissä on väärä.",
"session_string_incompleted" : "Istunto on epätäydellinen.",
"session_null" : "Istunto on nolla.",
"session_not_id" : "Istunto ei ole henkilöllisyys.",
"session_not_exists" : "Istuntoa ei ole olemassa.",
"session_date_out" : "Istunto oli suljettu.",
"session_timeout" : "Istunto on menettänyt Timeoutin pakkotyöhön.",
"session_update_ok" : "Nykyinen istunto päivitettiin oikein.",
"session_update_error" : "'{code}'-koodilla oli virhe, kun se yritettiin päivittää. {list}",
"mode_null" : "Pelitila on nolla.",
"mode_empty" : "Pelitila on tyhjä.",
"mode_not_exists" : "'{mode}'-pelitilaa ei ole olemassa.",
"page_null" : "Sivumäärä on nolla.",
"page_lower_1" : "Sivumäärän on oltava vähintään yksi.",
"items_per_page_null" : "Esineiden määrä per sivu on nolla.",
"items_per_page_lower_1" : "Vähintään yksi kohde sivua kohden on näytettävä.",
"nicks_null" : "Nicksin hakuvaihtoehto on tyhjä.",
"load_scores_error" : "'{code}'-koodilla oli virhe, kun yritettiin ladata MKVBCDV-sivun tulokset '{items_per_page}'-elementeillä. {list}",
"load_scores_ok" : "'{page}'-sivun pisteet '{items_per_page}'-elementeillä ladattiin oikein",
"nick_null" : "Nick on null.",
"nick_empty" : "Nick on tyhjä.",
"score_null" : "Otsikko on nukke.",
"score_lower_0" : "'{score}'-pistemäärä on alle 0.",
"save_scores_error" : "'{code}'-koodilla oli virhe, kun yritettiin tallentaa uusi '{score}'-pistemäärä Nick '{nick}':llä. {list}",
"save_scores_ok" : "Nick '{nick}':n uudet '{score}'-pisteet tallennettiin oikein."
}
}

@ -0,0 +1,50 @@
{
"svenska" : {
"start" : "Börja",
"settings" : "Inställningar",
"scores" : "Scores",
"credits" : "Krediter",
"paused" : "Paus",
"resume" : "Fortsätt",
"left_match" : "Abandon",
"previous" : "Föregående",
"next" : "Nästa Nästa",
"back" : "Tillbaka",
"page" : "Sidan",
"save" : "Spara",
"not_save" : "Inte rädda",
"test_mode" : "Bevis läge",
"manual" : "Manuell",
"sql_exception" : "Det fanns ett SQL undantag. Försök att kontakta en administratör.",
"session_string_null" : "Strängen av sessionen är null.",
"session_empty" : "Sessionen är tom.",
"session_bad_format" : "Sessionen har ett dåligt format.",
"session_id_string_empty" : "Session ID i String format är tomt.",
"session_id_string_bad" : "Session ID i String-format är fel.",
"session_string_incompleted" : "Strängen för sessionen är ofullständig.",
"session_null" : "Sessionen är null.",
"session_not_id" : "Sessionen är inte ett ID.",
"session_not_exists" : "Sessionen existerar inte.",
"session_date_out" : "Sessionen stängdes.",
"session_timeout" : "Sessionen missade Timeout för påtvingad inaktivitet.",
"session_update_ok" : "Den aktuella sessionen uppdaterades korrekt.",
"session_update_error" : "Det fanns ett fel med '{code}'-kod när du försökte uppdatera den aktuella sessionen. {list}",
"mode_null" : "Spelläget är noll.",
"mode_empty" : "Spelläget är tomt.",
"mode_not_exists" : "'{mode}' spelläge existerar inte.",
"page_null" : "Sidnumret är noll.",
"page_lower_1" : "Sidnumret måste vara minst 1.",
"items_per_page_null" : "Antalet objekt per sida är noll.",
"items_per_page_lower_1" : "Minst ett objekt per sida måste visas.",
"nicks_null" : "Nicks sökvariabel är tom.",
"load_scores_error" : "Det fanns ett fel med '{code}'-kod när man försökte ladda '{page}'-sidpoängen med '{items_per_page}'-element. {list}",
"load_scores_ok" : "'{page}'-sidorna med '{items_per_page}'-element var korrekt laddade",
"nick_null" : "Nick är null.",
"nick_empty" : "Nick är tom.",
"score_null" : "Stygnet är null.",
"score_lower_0" : "'{score}' poäng är mindre än 0.",
"save_scores_error" : "Det fanns ett fel med '{code}'-kod när man försökte spara den nya '{score}'-poängen på Nick '{nick}'. {list}",
"save_scores_ok" : "Den nya '{score}'-poängen på Nick '{nick}' lagrades korrekt."
}
}

@ -0,0 +1,50 @@
{
"thai" : {
"start" : "เรมตน",
"settings" : "การตงคา",
"scores" : "คะแนน",
"credits" : "บตรเครดต",
"paused" : "แม",
"resume" : "อานตอ",
"left_match" : "Abandon",
"previous" : "กอนหนาน",
"next" : "ถดไป",
"back" : "ดานหลง",
"page" : "หนา",
"save" : "บนทก",
"not_save" : "อยาประหยด",
"test_mode" : "โหมด",
"manual" : "คอ",
"sql_exception" : "มอยกเวน SQL โปรดลองตดตอผแลระบบ.",
"session_string_null" : "เวทของปลาย.",
"session_empty" : "เซสชนวาง.",
"session_bad_format" : "เซสชนมปแบบทไม.",
"session_id_string_empty" : "เซสชนของรหสในหนาจอ.",
"session_id_string_bad" : "เซสชนของรหสในหนาจอ.",
"session_string_incompleted" : "เวทของเซสชนนนไมสมบรณ.",
"session_null" : "เซสชนคอ.",
"session_not_id" : "เซสชนไมได.",
"session_not_exists" : "เซสชนไมไดอย.",
"session_date_out" : "เซสชนปด.",
"session_timeout" : "เซสชนทพลาดเวลาสาหรบบงคบ.",
"session_update_ok" : "เซสชนปจจนถกตอง.",
"session_update_error" : "มอผดพลาดกบ '{code}' เมอพยายามทจะอปเดตชวงปจจน '{code}'",
"mode_null" : "โหมดเกมคอเปนศนย.",
"mode_empty" : "โหมดเกมเปนทางเปลา.",
"mode_not_exists" : "โหมด '{mode}'.",
"page_null" : "จานวนหนา.",
"page_lower_1" : "จานวนหนาจะตองอยางนอย 1.",
"items_per_page_null" : "จานวนรายการตอหนา.",
"items_per_page_lower_1" : "อยางนอยรายการตอหนาจะตองแสดง.",
"nicks_null" : "การคนหาตวแปรเปนทางเปลา.",
"load_scores_error" : "มอผดพลาดกบ '{code}'Q เมอพยายามทจะโหลดรหส MKVBNBS กบ MKVBVH {list}",
"load_scores_ok" : "หนา '{page}' หนากบ MKVBVGG เปนองคประกอบทกตอง",
"nick_null" : "เสอ.",
"nick_empty" : "ผเสอจะวางเปลา.",
"score_null" : "เยบปลาย.",
"score_lower_0" : "ดชน '{score}' ตากวา 0.",
"save_scores_error" : "มอผดพลาดกบ '{code}' เมอพยายามทจะประหยดเงน '{score}' คะแนนใหมบน MKVBBS MKVBYS",
"save_scores_ok" : "คะแนนใหม '{score}' บนหนาจอ '{nick}' จะถกเกบไว."
}
}

@ -0,0 +1,80 @@
{
"turkce" : {
"start" : "Start Start Start Start Start",
"settings" : "Ayarlar",
"scores" : "Puanlar",
"credits" : "Krediler",
"paused" : "Pause",
"resume" : "Devam etmeye devam et",
"left_match" : "Terndon",
"previous" : [
"Önceki Önceki Önceki Önceki Önceki Önceki Önceki Önceki Önceki ",
"Önceki Önceki Önceki Önceki Önceki Önceki Önceki Önceki Önceki ",
"Önceki Önceki Önceki Önceki Önceki Önceki Önceki Önceki Önceki ",
"Önceki Önceki Önceki Önceki Önceki Önceki Önceki Önceki Önceki ",
"Önceki Önceki Önceki Önceki Önceki Önceki Önceki Önceki Önceki ",
"Önceki Önceki Önceki Önceki Önceki Önceki Önceki Önceki Önceki ",
"Önceki Önceki Önceki Önceki Önceki Önceki Önceki Önceki Önceki ",
"Önceki Önceki Önceki Önceki Önceki Önceki Önceki Önceki Önceki ",
"Önceki Önceki Önceki Önceki Önceki Önceki Önceki Önceki Önceki ",
"Önceki Önceki Önceki Önceki Önceki Önceki Önceki Önceki Önceki ",
"Önceki Önceki Önceki Önceki Önceki Önceki Önceki Önceki Önceki ",
"Önceki Önceki Önceki Önceki Önceki Önceki Önceki Önceki Önceki ",
"Önceki Önceki Önceki Önceki Önceki Önceki Önceki Önceki Önceki ",
"Önceki Önceki Önceki Önceki Önceki Önceki Önceki Önceki Önceki ",
"Önceki Önceki Önceki Önceki Önceki Önceki Önceki Önceki Önceki ",
"Önceki Önceki Önceki Önceki Önceki Önceki Önceki Önceki Önceki ",
"Önceki Önceki Önceki Önceki Önceki Önceki Önceki Önceki Önceki ",
"Önceki Önceki Önceki Önceki Önceki Önceki Önceki Önceki Önceki ",
"Önceki Önceki Önceki Önceki Önceki Önceki Önceki Önceki Önceki ",
"Önceki Önceki Önceki Önceki Önceki Önceki Önceki Önceki Önceki ",
"Önceki Önceki Önceki Önceki Önceki Önceki Önceki Önceki Önceki ",
"Önceki Önceki Önceki Önceki Önceki Önceki Önceki Önceki Önceki ",
"Önceki Önceki Önceki Önceki Önceki Önceki Önceki Önceki Önceki ",
"Önceki Önceki Önceki Önceki Önceki Önceki Önceki Önceki Önceki ",
"Önceki Önceki Önceki Önceki Önceki Önceki Önceki Önceki Önceki ",
"Önceki Önceki Önceki Önceki Önceki Önceki Önceki Önceki Önceki ",
"Önceki Önceki Önceki Önceki Önceki Önceki Önceki Önceki Önceki ",
"Önceki Önceki Önceki Önceki Önceki Önceki Önceki Önceki Önceki ",
"Önceki Önceki Önceki Önceki"
],
"next" : "Sonraki Sonraki Sonraki Sonraki Sonraki Sonraki Sonraki Sonraki",
"back" : "Geri dön",
"page" : "Page Page Page",
"save" : "Kaydet Kaydet Kaydet",
"not_save" : "Don't save",
"test_mode" : "Kanıt modu",
"manual" : "Manual Manual",
"sql_exception" : "Bir SQL istisnaı vardı. Lütfen bir yönetici ile temasa geçmeyi deneyin.",
"session_string_null" : "Oturumun Stringi null.",
"session_empty" : "Oturum boş.",
"session_bad_format" : "Oturumun kötü bir formatı var.",
"session_id_string_empty" : "String formatındaki oturum ID boş.",
"session_id_string_bad" : "String formatındaki oturum ID yanlış.",
"session_string_incompleted" : "Oturumun Stringi eksik.",
"session_null" : "Oturum null.",
"session_not_id" : "Oturum bir kimlik değildir.",
"session_not_exists" : "Oturum mevcut değildir.",
"session_date_out" : "Oturum kapalıydı.",
"session_timeout" : "Oturum zorlayıcı inaktivite için Zamanout kaçırdı.",
"session_update_ok" : "Mevcut oturum doğru bir şekilde güncellendi.",
"session_update_error" : "Mevcut seansı güncellemeye çalışırken '{code}' kodu ile bir hata vardı. MVBQXZN",
"mode_null" : "Oyun modu sıfır.",
"mode_empty" : "Oyun modu boş.",
"mode_not_exists" : "'{mode}' oyun modu mevcut değildir.",
"page_null" : "Sayfa numarası sıfır.",
"page_lower_1" : "Sayfa numarası en az 1. olmalıdır.",
"items_per_page_null" : "Sayfadaki öğelerin sayısı sıfır.",
"items_per_page_lower_1" : "Sayfa başına en az bir öğe görüntülenmelidir.",
"nicks_null" : "Nicks'in arama değişkeni boş.",
"load_scores_error" : "'{page}' sayfa puanlarını '{items_per_page}' elementleriyle yüklemeye çalışırken '{code}' kodu ile bir hata vardı. {list}",
"load_scores_ok" : "'{page}' sayfa puanları '{items_per_page}' elementleri ile doğru yüklendi",
"nick_null" : "Nick çıplak.",
"nick_empty" : "Nick verilen boş.",
"score_null" : "Perde çıplaktır.",
"score_lower_0" : "'{score}' puanı 0'dan daha az.",
"save_scores_error" : "Nick '{nick}''de yeni '{score}' puanını kurtarmaya çalışırken '{code}' kodu ile bir hata vardı. MVBTPNP",
"save_scores_ok" : "Nick '{score}' puanı doğru depolandı."
}
}

@ -0,0 +1,50 @@
{
"ukrainska" : {
"start" : "Почати",
"settings" : "Налаштування",
"scores" : "Результати",
"credits" : "Кредитування",
"paused" : "Пауза",
"resume" : "Продовжити",
"left_match" : "Абанон",
"previous" : "Попереднє",
"next" : "Про нас",
"back" : "Зареєструватися",
"page" : "На головну",
"save" : "Зберегти",
"not_save" : "Не заощаджуйте",
"test_mode" : "Режим доступу",
"manual" : "Керівництво",
"sql_exception" : "За винятком SQL. Будь ласка, спробуйте звернутися до адміністратора.",
"session_string_null" : "Стрінг сеансу нуль.",
"session_empty" : "Порожня сеанс.",
"session_bad_format" : "У сеансі є поганий формат.",
"session_id_string_empty" : "Код сеансу у форматі String порожній.",
"session_id_string_bad" : "Ідентифікатор сеансу у форматі String неправильно.",
"session_string_incompleted" : "Стрінг сеансу неповний.",
"session_null" : "Сесія нуль.",
"session_not_id" : "Сесія не є ідентифікатором.",
"session_not_exists" : "Не існує сеансу.",
"session_date_out" : "Закрило сеанс.",
"session_timeout" : "Сесія пропущена часом для вимушеної бездіяльності.",
"session_update_ok" : "Поточна сесія була правильно оновлена.",
"session_update_error" : "При спробі оновити поточну сеанс. МКВБМФБ",
"mode_null" : "Режим гри нульовий.",
"mode_empty" : "Режим гри порожній.",
"mode_not_exists" : "Режим гри '{mode}' не існує.",
"page_null" : "Номер сторінки нульовий.",
"page_lower_1" : "Номер сторінки повинен бути принаймні 1.",
"items_per_page_null" : "Кількість елементів на сторінці нульова.",
"items_per_page_lower_1" : "Принаймні один елемент на сторінку необхідно показати.",
"nicks_null" : "Змінний пошук Nicks є порожнім.",
"load_scores_error" : "На сторінці '{page}' з елементами '{code}' була помилка з кодом '{code}'. МКВБНХГ",
"load_scores_ok" : "Презентовано рейтинги '{page}' з елементами '{items_per_page}'",
"nick_null" : "Ніка нуль.",
"nick_empty" : "Ніка дається порожній.",
"score_null" : "Стібок нуль.",
"score_lower_0" : "'{score}' рахунок менше 0.",
"save_scores_error" : "При спробі зберегти новий бал '{score}' на Nick '{nick}'. АКВАСИ",
"save_scores_ok" : "Новий показник '{score}' на Nick '{nick}' був правильно збережений."
}
}

@ -0,0 +1,50 @@
{
"zhongwen" : {
"start" : "开始",
"settings" : "背景",
"scores" : "Ores",
"credits" : "信贷",
"paused" : "分娩",
"resume" : "继续",
"left_match" : "Abandon",
"previous" : "曾任",
"next" : "下一步",
"back" : "背 景",
"page" : "页 次",
"save" : "Save",
"not_save" : "Don't Save",
"test_mode" : "证据模式",
"manual" : "手册",
"sql_exception" : "有一个例外。 请试图与一名管理人联系。.",
"session_string_null" : "届会的长短不一。.",
"session_empty" : "会议空洞。.",
"session_bad_format" : "会议形式不好。.",
"session_id_string_empty" : "用Sting格式编写的会议设计书是空洞的。.",
"session_id_string_bad" : "用Sting格式编写的会议设计书是错误的。.",
"session_string_incompleted" : "本届会议的任务不完整。.",
"session_null" : "会议无效。.",
"session_not_id" : "本届会议不是国际发展学会。.",
"session_not_exists" : "本届会议不存在。.",
"session_date_out" : "会议闭幕。.",
"session_timeout" : "本届会议由于被迫无所作为而失去了时间。.",
"session_update_ok" : "本届会议得到正确更新。.",
"session_update_error" : "在试图更新本届会议时,存在'{code}'编码的错误。 {list}",
"mode_null" : "游戏模式是零。.",
"mode_empty" : "游戏模式是空的。.",
"mode_not_exists" : "不存在'{mode}'游戏模式。.",
"page_null" : "页: 1.",
"page_lower_1" : "页: 1.",
"items_per_page_null" : "每页件数为零。.",
"items_per_page_lower_1" : "每一页至少必须展示一个项目。.",
"nicks_null" : "镍的搜索变量是空的。.",
"load_scores_error" : "在试图用'{page}'网页上的记分数与'{items_per_page}'分子一道装载时,存在'{code}'代码的错误。 {list}",
"load_scores_ok" : "'{page}'页面分数和'{items_per_page}'元素正确装载",
"nick_null" : "尼克是无效的。.",
"nick_empty" : "尼克岛是空洞的。.",
"score_null" : "Itch子是无效的。.",
"score_lower_0" : "'{score}'的分数不到0分。.",
"save_scores_error" : "'{code}'公司试图在Nick '{nick}'上拯救新的'{score}'记分时出现错误。 {list}",
"save_scores_ok" : "镍的'{nick}'的新'{score}'enoBM记分被正确地储存。."
}
}

@ -0,0 +1,64 @@
.dptw{
position : absolute;
top : 0em;
left : 0em;
width : 100%;
height : 100%;
font-family : $font-family;
overflow : hidden;
textarea{
position : absolute;
top : 50%;
left : 50%;
width : 40em;
height : 40em;
margin-top : -20em;
margin-left : -20em;
font-size : 1em;
box-sizing : border-box;
}
.toast{
position : absolute;
top : 2em;
right : 1em;
margin : 0em;
padding : 0em;
list-style-type : none;
text-align : right;
z-index : 50;
&>li{
display : block;
margin : 0em;
margin-bottom : 1em;
padding : .5em;
background-color : mix(rgba(0, 0, 0, 0), $color-default, 70%);
border : .1em solid $color-default;
color : $color-default;
// border-radius : 1em;
&[data-type=ok]{
background-color : mix(rgba(0, 0, 0, 0), $color-ok, 70%);
border-color : $color-ok;
color : $color-ok;
}
&[data-type=info]{
background-color : mix(rgba(0, 0, 0, 0), $color-info, 70%);
border-color : $color-info;
color : $color-info;
}
&[data-type=warn]{
background-color : mix(rgba(0, 0, 0, 0), $color-warn, 70%);
border-color : $color-warn;
color : $color-warn;
}
&[data-type=erro],&[data-type=error]{
background-color : mix(rgba(0, 0, 0, 0), $color-error, 70%);
border-color : $color-error;
color : $color-error;
}
}
}
}

@ -0,0 +1,53 @@
.dptw {
position: absolute;
top: 0em;
left: 0em;
width: 100%;
height: 100%;
font-family: "VT323";
overflow: hidden; }
.dptw textarea {
position: absolute;
top: 50%;
left: 50%;
width: 40em;
height: 40em;
margin-top: -20em;
margin-left: -20em;
font-size: 1em;
box-sizing: border-box; }
.dptw .toast {
position: absolute;
top: 2em;
right: 1em;
margin: 0em;
padding: 0em;
list-style-type: none;
text-align: right;
z-index: 50; }
.dptw .toast > li {
display: block;
margin: 0em;
margin-bottom: 1em;
padding: .5em;
background-color: rgba(0, 0, 0, 0.3);
border: 0.1em solid #000;
color: #000; }
.dptw .toast > li[data-type=ok] {
background-color: rgba(0, 255, 0, 0.3);
border-color: #0F0;
color: #0F0; }
.dptw .toast > li[data-type=info] {
background-color: rgba(0, 0, 255, 0.3);
border-color: #00F;
color: #00F; }
.dptw .toast > li[data-type=warn] {
background-color: rgba(255, 255, 0, 0.3);
border-color: #FF0;
color: #FF0; }
.dptw .toast > li[data-type=erro], .dptw .toast > li[data-type=error] {
background-color: rgba(255, 0, 0, 0.3);
border-color: #F00;
color: #F00; }
/*# sourceMappingURL=DPTW.css.map */

@ -0,0 +1,7 @@
{
"version": 3,
"mappings": "AAAA,KAAK;EAED,QAAQ,EAAG,QAAQ;EACnB,GAAG,EAAG,GAAG;EACT,IAAI,EAAG,GAAG;EACV,KAAK,EAAG,IAAI;EACZ,MAAM,EAAG,IAAI;EACb,WAAW,ECCA,OAAO;EDAlB,QAAQ,EAAG,MAAM;EAEjB,cAAQ;IACJ,QAAQ,EAAG,QAAQ;IACnB,GAAG,EAAG,GAAG;IACT,IAAI,EAAG,GAAG;IACV,KAAK,EAAG,IAAI;IACZ,MAAM,EAAG,IAAI;IACb,UAAU,EAAG,KAAK;IAClB,WAAW,EAAG,KAAK;IACnB,SAAS,EAAG,GAAG;IACf,UAAU,EAAG,UAAU;EAG3B,YAAM;IACF,QAAQ,EAAG,QAAQ;IACnB,GAAG,EAAG,GAAG;IACT,KAAK,EAAG,GAAG;IACX,MAAM,EAAG,GAAG;IACZ,OAAO,EAAG,GAAG;IACb,eAAe,EAAG,IAAI;IACtB,UAAU,EAAG,KAAK;IAClB,OAAO,EAAG,EAAE;IACZ,iBAAI;MACA,OAAO,EAAG,KAAK;MACf,MAAM,EAAG,GAAG;MACZ,aAAa,EAAG,GAAG;MACnB,OAAO,EAAG,IAAI;MACd,gBAAgB,EAAG,kBAA0C;MAC7D,MAAM,EAAG,gBAAyB;MAClC,KAAK,ECrCA,IAAI;MDuCT,+BAAe;QACX,gBAAgB,EAAG,oBAAqC;QACxD,YAAY,ECtChB,IAAI;QDuCA,KAAK,ECvCT,IAAI;MDyCJ,iCAAiB;QACb,gBAAgB,EAAG,oBAAuC;QAC1D,YAAY,EC7Cd,IAAI;QD8CF,KAAK,EC9CP,IAAI;MDgDN,iCAAiB;QACb,gBAAgB,EAAG,sBAAuC;QAC1D,YAAY,ECjDd,IAAI;QDkDF,KAAK,EClDP,IAAI;MDoDN,qEAAoC;QAChC,gBAAgB,EAAG,oBAAwC;QAC3D,YAAY,ECpDb,IAAI;QDqDH,KAAK,ECrDN,IAAI",
"sources": ["DPTW.base.scss","DPTW.settings.scss"],
"names": [],
"file": "DPTW.css"
}

@ -0,0 +1 @@
@import "DPTW.settings.scss", "DPTW.base.scss";

@ -0,0 +1,11 @@
// Colors.
$color-default : #000;
$color-info : #00F;
$color-warn : #FF0;
$color-ok : #0F0;
$color-error : #F00;
// Fonts.
$font-family : "VT323";
$toast-transparency : .3;

@ -0,0 +1,6 @@
<?php
include __DIR__ . "/../../WMarkDown/PHP/include.php";
include __DIR__ . "/../PHP/DPTW.Secrets.php";
$wmd = new WMarkDown(DPTW\Secrets::wmarkdown);

@ -0,0 +1,21 @@
<?php
include __DIR__ . "/../../WMarkDown/PHP/include.php";
include __DIR__ . "/../PHP/DPTW.Secrets.php";
$wmd = new WMarkDown(array_merge([
"action" => "update_scripts",
"author" => "SrD & KyMAN",
"project" => "DPTW",
"class" => "DPTW",
"object" => "dptw",
"url" => "https://dptw.k3y.pw",
"project_author" => "KyMAN",
"key_words" => "srd,kyman,dptw,kanvas,juego,mecanografía,arcade",
"logo" => "/images/DPTW.png",
"language" => "es",
"wmd_file" => "/../WMarkDown/HTML/script.w.md",
"wmd_file_empty" => "/../WMarkDown/HTML/file.w.md",
"ignore_script_paths" => [],
"only" => "/Public"
], DPTW\Secrets::wmarkdown));

@ -0,0 +1,20 @@
#!/bin/bash
if command -v mysql &> /dev/null; then
mariadb_host="127.0.0.1"
mariadb_port="3306"
mariadb_user="root"
mariadb_password=""
root="$(pwd)"
[[ -f Secrets.sh ]] && source Secrets.sh
for i in $(find ../MariaDB -type f|grep .sql|sort|cat); do
echo $root/$i
mysql --host=$mariadb_host --port=$mariadb_port --user=$mariadb_user --password=$mariadb_password < $root/$i
done
else
echo "Please, install mariadb-client or mysql-client."
fi

@ -0,0 +1,2 @@
#!/bin/bash
sass ../Public/scss/DPTW.scss ../Public/scss/DPTW.css;

@ -0,0 +1,37 @@
[[post_data {
"author" : "KyMAN",
"since" : 20230715,
"version" : 20230715
}]]
# DPTW
[[links_group [{
"images" : ["https://libretranslateplus.k3y.pw/images/flags/espanol.svg", "https://i.imgur.com/im1o0gc.png"],
"text" : "Español",
"link" : "/doc/es",
"self" : true
}] ]]
> [[! note NOTA]]: Crear un "index.php" con URL friendly para que cara Request sea un modo de juego el cual tenga "key", "language" y "Difficulty". De esta forma se puede hacer un creador de modos, y por URL, se podrían compartir los modos de juego. Sólo hay que compartir el JSON de configuración.
[[header_level 0]]
[[include /WMD/doc/es/projects.w.md]]
[[header_level 0]]
[[include /WMD/doc/es/bugs.w.md]]
[[header_level 0]]
[[include /WMD/doc/es/targets.w.md]]
[[html_data {
"title" : "Idiomas - DPTW",
"url" : "https://dptw.k3y.pw/doc/",
"author" : "KyMAN",
"since" : 20230715,
"version" : 20230715,
"key_words" : "kyman,srd,dptw,kanvas,game,arcade,mechanography",
"description" : "Selector de idiomas del juego DPTW.",
"project" : "DPTW",
"logo" : "https://dptw.k3y.pw/images/DPTW.png",
"language" : "es"
}]]
Loading…
Cancel
Save