parent
b190f03986
commit
a562ddbe12
@ -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 @@ |
||||
{ |
||||
"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 @@ |
||||
{ |
||||
"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,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…
Reference in new issue