You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

291 lines
15 KiB

/*
<div class="col-xs-8">
<div class="row row-cols-5">
<div class="col-xs-3 col-xl-3" >
<img style="width: 17em;" src="https://media.discordapp.net/attachments/976544929566318613/1035250528554319982/pootisd.png">
</div>
<div class="col-xs-2 col-xl-2">
<img style="width: 17em;" src="https://media.discordapp.net/attachments/976544929566318613/1035250528973754428/pyro.png" >
</div>
<div class="col-xs-2 col-xl-2">
<img style="width: 17em;" src="https://media.discordapp.net/attachments/976544929566318613/1035253201563303967/toilet.png" >
</div>
<div class="col-xs-2 col-xl-2">
<img style="width: 17em;" src="https://media.discordapp.net/attachments/976544929566318613/1035250529389002862/engi_n.png" >
</div>
<div class="col-xs-3 col-xl-3">
<img style="width: 17em;" src="https://media.discordapp.net/attachments/976544929566318613/1035250529883918448/mgesold.png" >
</div>
</div>
</div>
*/
const Keys = { Enter: 13 };
$(async function() {
$(document).on("keypress", "input", function (e) {
var code = e.keyCode || e.which;
if (code === Keys.Enter) {
e.preventDefault();
return false;
}
});
FillCharacters();
FillRules();
await CheckApi();
await RequestAPI();
if(window.location.href.endsWith("#RulesSection")){
// trigger event click
document.getElementById('Rules_Button').click();
}
if(window.location.href.endsWith("#VIPSection")){
document.getElementById('Tab_VIP_Button').click();
}
});
let servers_active = `
<div class="row text-center">
<div class="col">
<hr>
<h6>Где сейчас играют карлики</h6>
</div>
</div>
`
let servers_inactive = `
<div class="row text-center">
<div class="col">
<hr>
<h6>Пустую без дела</h6>
</div>
</div>
`
let servers_dead = `
<div class="row text-center">
<div class="col">
<hr>
<h6>Временно отключены</h6>
</div>
</div>
`
let invalid_captcha = `
<div class="col" id="InvalidCaptcha">
<br>
<h1 style="color: red">ДЯДЯ ТЫ ДУРАЧЕК, КАПЧА НЕПРАВИЛЬНАЯ, ЖМИ СНОВА НА КНОПКУ</h1>
</div>
`
// use templates
function generate_server_card_div(data){
return `
<div class="col-auto justify-content-center align-self-center" style="padding: 1rem;">
<div class="card text-right" style="width: 15rem; height: 15rem;">
<img class="card-img" src="${data.preview}" alt="${data.name}" style="filter: blur(1px); height: 100%;">
<div class="card-img-overlay" style="background-image: linear-gradient(to bottom, rgba(0, 0, 0, 0.02), rgba(0, 0, 0, 0.7))"><!--background-color: rgba(0, 0, 0, 0.205);-->
<a href="steam://connect/${data.address}" class="stretched-link" ${data.status ? "" : "disabled"}></a>
<h4 class="card-title" style="color: whitesmoke;">${data.name}</h4>
<p class="card-text" style="color: whitesmoke; font-family: tf2build; font-size: 3rem; text-align: center;">${data.player_count}/${data.max_players}</p>
<h4 class="card-title" style="color: whitesmoke; text-align: right;">${data.human_name}</h4>
</div>
</div>
</div>
`
}
async function CheckApi() {
let api_request_time = (new Date).getTime();
await fetch("https://tf2.pblr-nyk.pro/api", {headers: {'Cache-Control':'no-cache'}})
.then(res => res.text())
.then(res => {api_request_time = (new Date).getTime() - api_request_time})
.catch(err => {api_request_time = 0});
////////////////////////////////////////////
let player_api_request_time = (new Date).getTime();
await fetch("https://tf2.pblr-nyk.pro/player_api/v1/ping", {headers: {'Cache-Control':'no-cache'}})
.then(res => res.text())
.then(res => {player_api_request_time = (new Date).getTime() - player_api_request_time})
.catch(err => {player_api_request_time = 0});
////////////////////////////////////////////
FillFooter("", api_request_time, player_api_request_time);
}
async function RequestAPI() {
//let api_request_time = (new Date).getTime();
//, {headers: {'Cache-Control':'no-cache'}}
await fetch("https://tf2.pblr-nyk.pro/api/stats", {headers: {'Cache-Control':'no-cache'}})
.then(res => res.json())
.then(res => {
FillServices(res);
// $('#current_players').text(res.servers.statistic.player_now)
document.getElementById("current_players").innerHTML = res.servers.statistic.player_now;
document.getElementById("max_per_day").innerHTML = res.servers.statistic.player_max;
document.getElementById("servers_works").innerHTML = res.servers.statistic.working_servers + '/' + res.servers.statistic.total_servers;
document.getElementById("uniq_day_players").innerHTML = res.uniq.day;
document.getElementById("uniq_month_players").innerHTML = res.uniq.month;
document.getElementById("uniq_year_players").innerHTML = res.uniq.year;
document.getElementById("ServersSectionLastUpdate").innerHTML = `Информация обновлена: ${UNIX2TIMESTAMP(res.updates.servers)}`;
document.getElementById("AboutSection_discord").innerHTML = `${res.discord_users} ГЕЙмеров `;
document.getElementById("AboutSection_vk").innerHTML = `${res.vk_users} Участников `;
document.getElementById("Section_VIP_users").innerHTML = `${res.vip_players} карликов уже имеют випку!`;
let active = false;
let inactive = false;
let dead = false;
let insert_type = "beforeend";
//active servers
let sorted_servers = Object.keys(res.servers).sort((a, b) => {
return res.servers[b].player_count - res.servers[a].player_count;
});
//console.log(sorted_servers);
for (let sort_id in sorted_servers) {
let server = sorted_servers[sort_id];
if (server == `statistic`) {continue;}
if(res.servers[server].status == true && res.servers[server].player_count > 0) {
if(!active) {
document.getElementById("servers_list_v2").insertAdjacentHTML(insert_type,servers_active)
active = true;
}
document.getElementById("servers_list_v2").insertAdjacentHTML(insert_type,generate_server_card_div(res.servers[server]));
}
else if (res.servers[server].status == true && res.servers[server].player_count == 0) {
if(!inactive) {
document.getElementById("servers_list_v2").insertAdjacentHTML(insert_type,servers_inactive)
inactive = true;
}
document.getElementById("servers_list_v2").insertAdjacentHTML(insert_type,generate_server_card_div(res.servers[server]));
}
}
for (let sort_id in sorted_servers) {
let server = sorted_servers[sort_id];
if (res.servers[server].status == false) {
if(!dead) {
document.getElementById("servers_list_v2").insertAdjacentHTML(insert_type,servers_dead)
dead = true;
}
document.getElementById("servers_list_v2").insertAdjacentHTML(insert_type,generate_server_card_div(res.servers[server]));
}
}
}).catch((err) => {
console.log(err);
//FillFooter("", 0, 0);
});
//FillFooter("", api_request_time, "");
}
function FillFooter(data, api_time, player_api_time){
const text = `<p class="current-profile-text">{text}</p>`;
const text_bad = `<p class="current-profile-text current-profile-text-color-alarm">{text}</p>`;
const text_good = `<p class="current-profile-text current-profile-text-color-normal">{text}</p>`;
while(document.getElementById("Footer_Text").firstChild) {
document.getElementById("Footer_Text").lastChild.remove();
}
document.getElementById("Footer_Text").insertAdjacentHTML("beforeend", text.replace("{text}", `2018-${(new Date()).getFullYear()} | `));
document.getElementById("Footer_Text").insertAdjacentHTML("beforeend", text.replace("{text}", `Факты 13 | `));
document.getElementById("Footer_Text").insertAdjacentHTML("beforeend", text.replace("{text}", `JS: `));
document.getElementById("Footer_Text").insertAdjacentHTML("beforeend", text_good.replace("{text}", `on`));
document.getElementById("Footer_Text").insertAdjacentHTML("beforeend", text.replace("{text}", ` | API: `));//${api_time} ms
if(api_time == 0) {
document.getElementById("Footer_Text").insertAdjacentHTML("beforeend", text_bad.replace("{text}", `not work`));
} else {
document.getElementById("Footer_Text").insertAdjacentHTML("beforeend", text_good.replace("{text}", `${api_time} ms`));
}
document.getElementById("Footer_Text").insertAdjacentHTML("beforeend", text.replace("{text}", ` | Player API: `));
if(player_api_time == 0) {
document.getElementById("Footer_Text").insertAdjacentHTML("beforeend", text_bad.replace("{text}", `not work`));
} else {
document.getElementById("Footer_Text").insertAdjacentHTML("beforeend", text_good.replace("{text}", `${player_api_time} ms`));
}
}
function FillServices(data) {
const ping_time = 90;
const text = `<p class="current-profile-text" id="{service_id}"></p>`;
console.log(`${((new Date()).getTime() / 1000) - data.updates.qiwi_bot}`);
console.log(`${((new Date()).getTime() / 1000) - data.updates.steam_bot}`);
if(data.updates.qiwi_bot && ((new Date()).getTime() / 1000) - data.updates.qiwi_bot < ping_time) {
document.getElementById("Footer_Text").insertAdjacentHTML("beforeend", text.replace("{service_id}","Footer_Services_QIWI"));
}
if(data.updates.steam_bot && ((new Date()).getTime() / 1000) - data.updates.steam_bot < ping_time) {
document.getElementById("Footer_Text").insertAdjacentHTML("beforeend", text.replace("{service_id}","Footer_Services_STEAM"));
}
}
function UNIX2TIMESTAMP(unix) {
return (new Date((unix + 3600 * 3) * 1000)).toGMTString().replace("GMT", "MSK");
}
function FillCharacters() {
let CharactersArray = new Array(
["site_content/images/characters/pootisd.png","site_content/sounds/pootis.mp3", ""],
["site_content/images/characters/pyro.png","site_content/sounds/alertmgs.mp3", ""],
["site_content/images/characters/toilet.png","site_content/sounds/puk.mp3", ""],
["site_content/images/characters/engi_n.png","site_content/sounds/nigger.mp3", ""],
["site_content/images/characters/mgesold.png","site_content/sounds/soldier_laughevil03.mp3", ""]
);
let InjectCharacter = ``;
document.getElementById("Main_FunnyСharacters").insertAdjacentHTML("beforeend", `<div class="col-3"></div>`);
for (const element in CharactersArray) {
InjectCharacter = `<div class="col"><img class="img-fluid" src="${CharactersArray[element][0]}" onclick="(new Audio('${CharactersArray[element][1]}')).play();"></div>`;
if(CharactersArray[element][2]){
document.getElementById(CharactersArray[element][2]).insertAdjacentHTML("beforeend", `<div class="col-5"></div>`);
document.getElementById(CharactersArray[element][2]).insertAdjacentHTML("beforeend", InjectCharacter);
document.getElementById(CharactersArray[element][2]).insertAdjacentHTML("beforeend", `<div class="col-5"></div>`);
}
document.getElementById("Main_FunnyСharacters").insertAdjacentHTML("beforeend", InjectCharacter);
}
document.getElementById("Main_FunnyСharacters").insertAdjacentHTML("beforeend", `<div class="col-3"></div>`);
}
function FillRules() {
const rules = new Array(
{"name":"Читы", "about":"Бан навсегда сука", "image":"site_content/images/rules/cheats.jpg"},
{"name":"Реклама серверов", "about":"Кроме мге, бан навсегда сука", "image":"site_content/images/rules/ads.jpg"},
{"name":"Багоюз", "about":"Пиздец тебе, бан навсегда", "image":"site_content/images/rules/bug_use.jpg"},
{"name":"Абуз команды !mir", "about":"Блокировка дверей, открытие спавна и т.д", "image":"site_content/images/rules/abuse.jpg"},
{"name":"Абуз випки на сервере", "about":"Модеры сам решат как и за что", "image":"site_content/images/rules/abuse_vip.jpg"},
{"name":"Делай короче чё хочешь", "about":":troll_face:", "image":"site_content/images/rules/make_everyone.jpg"}
)
let card = ``;
//const shift = ``;//<div class="col-1 pb-4"></div>`;
//let counter = 1
for(const rule in rules) {
//if(counter == 1){document.getElementById("Rules_List").insertAdjacentHTML("beforeend", shift);}
card = `
<div class="col-4 pb-4">
<div class="card" style="height: 18rem; background-image: url('${rules[rule].image}'); background-size: cover;">
<!--<img class="card-img" src="${rules[rule].image}" alt="читы">-->
<div class="card-img-overlay d-flex flex-column" style="background-image: linear-gradient(to bottom, rgba(0, 0, 0, 0.02), rgba(0, 0, 0, 0.7));">
<div class="mt-auto" style="text-align: right;">
<h5 style="color: white;" >${rules[rule].name}</h5>
<hr style="color: white;">
<p style="font-family: tf2secondary; color: white;">${rules[rule].about}</p>
</div>
</div>
</div>
</div>`
document.getElementById("Rules_List").insertAdjacentHTML("beforeend", card);
//counter++;
//if(counter == 4){counter=1;}
}
}