Ошибки в текстах игры

Artur64

Дворянин
Член команды
Модератор
Оценка реакций
1.166
Ошибка в том, что враги вломились в погреба, а там, между прочем, добра на несколько сотен декалитров. И что, все безнаказанно прошло? Что значит помешать им? Не помешать нужно, а уничтожить таких тварей! Вот где ошибка. Да, напоследок, замки надо поменять и на сигнализацию поставить.
А вышеназванные ошибки легко поправить, переставив местами число и месяц и убрав "в". (13 мая и 17 мая).
 

Korsara

Элитный кавалерист
Оценка реакций
1.083
Ошибка в том, что враги вломились в погреба, а там, между прочем, добра на несколько сотен декалитров. И что, все безнаказанно прошло? Что значит помешать им? Не помешать нужно, а уничтожить таких тварей! Вот где ошибка. Да, напоследок, замки надо поменять и на сигнализацию поставить.
А вышеназванные ошибки легко поправить, переставив местами число и месяц и убрав "в". (13 мая и 17 мая).
Мне не удается отредактировать данное письмо)
 

Great Grave Groove

Элитный кавалерист
Оценка реакций
770
Неверная локализация: в отчётах, в "Время битвы/Время Время пересылки" написано "мая" вместо "май". Названия других месяцев сокращены, и поэтому в них нет ошибок, однако название "май" слишком короткое, и как только появилась возможность, сразу перевели в родительном падеже.
Должно быть в именительном. (Заодно можно двоеточие после" Время битвы" поставить).
Приходится в мае месяце, в скрипте на расчёт времени возврата, вводить месяц "май" вручную.
 
Последнее редактирование:

Bear

Комьюнити менеджер
Член команды
Комьюнити менеджер
Оценка реакций
864
Неверная локализация: в отчётах, в "Время битвы/Время Время пересылки" написано "мая" вместо "май". Названия других месяцев сокращены, и поэтому в них нет ошибок, однако название "май" слишком короткое, и как только появилась возможность, сразу перевели в родительном падеже.
Должно быть в именительном. (Заодно можно двоеточие после" Время битвы" поставить).
Приходится в мае месяце, в скрипте на расчёт времени возврата, вводить месяц "май" вручную.
Спасибо. К сожалению, мы не можем изменить локализацию некоторых переменных, но мы посмотрим, что можно с этим сделать
 

Great Grave Groove

Элитный кавалерист
Оценка реакций
770
Спасибо. К сожалению, мы не можем изменить локализацию некоторых переменных, но мы посмотрим, что можно с этим сделать
В таком разе, если за год исправить не получится, вот версия скрипта для расчёта времени возврата которая будет в мае работать корректно.

JavaScript:
javascript:
var world = TribalWars.getGameData().world.substring(2);
var vid = TribalWars.getGameData().village.id;

var xhr = new XMLHttpRequest();
xhr.open('GET', 'https://ru'+world+'.voyna-plemyon.ru/game.php?village='+vid+'&screen=unit_info&ajax=data', false);
xhr.setRequestHeader('Content-Type', 'text/html');
xhr.send();
//alert( xhr.responseText )
//alert (JSON.parse(xhr.responseText).unit_data.spear.speed);

var win = window;
win.location.contains = function(search_value) {
    return win.document.URL.search(search_value) != -1;
};

var BT = {

    utils: {

        translator: {
            month: {
                en: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec']
            },
            day: {
                en: ['yesterday at', 'today at', 'tomorrow at'],
                ru: ['вчера в', 'сегодня в', 'завтра в'],
                es: ['ayer a las', 'hoy a las', 'maГ±ana a las'],
                ro: ['ieri la ora', 'astДѓzi la ora', 'mГўine la ora']
            },
            translate_month: function(text) {
                var en = this.month.en;
                var months = Format.month_names;
                for (var i = 0; i < en.length; i++) {
                    text = text.replace(months[i].toLowerCase(), en[i].toLowerCase());
                }
                text = text.replace(/\./g, ',').replace(/(\d+),(\d+)/, '$2,$1');
                return text;
            },
            translate_day: function(text) {
                var self = this;
                $.each(self.day, function(lang, days) {
                    for (var i = 0; i < days.length; i++) {
                        text = text.replace(days[i].toLowerCase(), self.day.en[i].toLowerCase());
                    }
                });
                return text;
            },
            validate_date: function(text, server) {
                text = text.replace(' :', ':');
                for (var i = 0; i < this.day.en.length; i++) {
                    var j = i - 1;
                    var date = new Date(server);
                    date.setDate(date.getDate() + j);
                    text = text.replace(this.day.en[i].toLowerCase(), (date.getMonth() + 1) + '/' + date.getDate() + '/' + date.getFullYear());
                }
                text = text.replace(/(\d{1,2}:\d{1,2}:\d{1,2})(:\d{1,3})/, '$1');
                return text;
            }
        },

        get_origin_coord: function() {
            var array = $('#bt_attacker').val().trim().split('|');
            return { x: parseInt(array[0]), y: parseInt(array[1]) };
        },
        get_target_coord: function() {
            var array = $('#bt_defender').val().trim().split('|');
            return { x: parseInt(array[0]), y: parseInt(array[1]) };
        },
        get_server_time: function() {
            var serverTime = $('#serverTime').text().split(':');
            var serverDate = $('#serverDate').text().split('/');
            return new Date(serverDate[2], serverDate[1] - 1, serverDate[0], serverTime[0], serverTime[1], serverTime[2]);
        },
        get_arrival_time: function() {
            var string = $('#bt_arrival_time').val().trim().toLowerCase();
            string = this.translator.translate_month(string);
            string = this.translator.translate_day(string);
            string = this.translator.validate_date(string, this.get_server_time());
            console.log('validated string:');
            console.log(string);
            return new Date(string);
        },
        get_fields: function(origin, target) {
            var x = origin.x - target.x;
            var y = origin.y - target.y;
            return Math.sqrt((x * x) + (y * y));
        },
        get_duration: function(fields, speed) {
            var total_seconds = Math.round(fields / speed);
            var hours = parseInt(total_seconds / 3600);
            var minutes = parseInt( total_seconds / 60 ) % 60;
            var seconds = total_seconds % 60;
            hours = hours > 9 ? hours : '0' + hours;
            minutes = minutes > 9 ? minutes : '0' + minutes;
            seconds = seconds > 9 ? seconds : '0' + seconds;
            return {
                total_seconds: total_seconds,
                formatted_string: hours + ':' + minutes + ':' + seconds
            }
        }
    },

    data : {
        from_report: function() {
            var _time  = $('td.nopad table.vis:eq(1) tr:eq(1) td:eq(1)').text().replace(/\t*\n*/g, '').replace(/ :/, ':');
            var time  = _time.includes('мая')?_time.replace('мая','май'):_time;
            var att = $('#attack_info_att').find('tr:eq(1) td:last').text().replace(/([\S\s]*(\d{3}\|\d{3})[\S\s]*)/, "$2");
            var def = $('#attack_info_def').find('tr:eq(1) td:last').text().replace(/([\S\s]*(\d{3}\|\d{3})[\S\s]*)/, "$2");
            return { arrival: time, attacker: att, defender: def };
        },
        from_info_command: function() {
            var time = $('span[class^=smal]').parent().text();
            var att = $('span[class^=village_anchor]:first').text().replace(/([\S\s]*(\d{3}\|\d{3})[\S\s]*)/, "$2");
            var def = $('span[class^=village_anchor]:last').text().replace(/([\S\s]*(\d{3}\|\d{3})[\S\s]*)/, "$2");
            return { arrival: time, attacker: att, defender: def };
        },
        default: function() {
            return { arrival: '', attacker: '', defender: game_data.village.coord };
        },


        init: function () {
            var data;
            var url = window.document.URL;
            if(win.location.contains(/screen=report/) && win.location.contains(/view=/)){
                data = this.from_report();
            } else if(win.location.contains(/screen=info_command/) && win.location.contains(/id=/)) {
                data = this.from_info_command();
            } else {
                data = this.default();
            }
            $('#bt_arrival_time').val(data.arrival);
            $('#bt_attacker').val(data.attacker);
            $('#bt_defender').val(data.defender);
        }
    },

    init: function() {
        var $main = $('#bt_main');
        if($main.attr('id') != undefined) {
            return;
        }
        $main = $('<div id="bt_main" class="vis" style="z-index: 99999; min-width:500px; display:inline-block; position: absolute; top: 112px; box-shadow: rgba(0, 0, 0, 0.701961) 4px 4px 10px; left: 43px; background: rgb(227, 213, 179);"></div>')
            .draggable( { handle: "h4" } );
        $(win.document.body).append($main);

        var $container = $('<div id="bt_container" style="padding:10px;"></div>')
            .append($('<table class="vis" width="100%"></table>')
                .append($('<tbody></tbody>')
                    .append($('<tr></tr>')
                        .append('<td>Attacker: </td>')
                        .append('<td><input id="bt_attacker" type="text" size="30" placeholder="xxx|yyy"></td>')
                        .append('<td rowspan="3" style="text-align: center;"><input id="bt_calculate" type="button" class="btn" value="Show"></td>'))
                    .append($('<tr></tr>')
                        .append('<td>Defender: </td>')
                        .append('<td><input id="bt_defender" type="text" size="30" placeholder="xxx|yyy"></td>'))
                    .append($('<tr></tr>')
                        .append('<td>Arrival time: </td>')
                        .append('<td><input id="bt_arrival_time" type="text" size="30"></td>'))));

        $main
            .append('<h4>BackTime calculator</h4>')
            .append($container)
            .append('<div id="bt_result"></div>');

        $('#bt_calculate').on('click', this.calculate);
        this.data.init();
    },

    calculate: function() {

        var $table = $('<table style="border-spacing:2px;border-collapse:separate;width:100%"></table>');
        var $tbody = $('<tbody><tr><th style="min-width: 25px"></th><th>Sent time</th><th>Duration</th><th>Back time</th></tr></tbody>');
        $table.append($tbody);

        var origin = BT.utils.get_origin_coord();
        var target = BT.utils.get_target_coord();
        var fields = BT.utils.get_fields(origin, target);
        var arrival = BT.utils.get_arrival_time();

        var date_format = {
            day: 'numeric',
            month: 'numeric',
            year: 'numeric',
            hour: 'numeric',
            minute: 'numeric',
            second: 'numeric'
        };

        $.each(JSON.parse(xhr.responseText).unit_data, function(name, unit) {
            if(name != 'militia') {
                var duration = BT.utils.get_duration(fields, unit.speed);
                var sentTime = new Date(arrival);
                var backTime = new Date(arrival);
               
                sentTime.setSeconds(sentTime.getSeconds() - duration.total_seconds);
                backTime.setSeconds(backTime.getSeconds() + duration.total_seconds);
               

                var $tr = $('<tr></tr>')
                    .append('<td style="text-align:center"><img src="https://dsru.innogamescdn.com/asset/33438c05/graphic/unit/unit_' + name + '.png"></td>')
                    .append('<td style="text-align:center">' + sentTime.toLocaleString('ru', date_format) + '</td>')
                    .append('<td style="text-align:center">' + duration.formatted_string + '</td>')
                    .append('<td style="text-align:center">' + backTime.toLocaleString('ru', date_format) + '</td>');
                $tbody.append($tr);
            }
        });

        $('#bt_result').html($table);
    }
};
BT.init();
void(0);
2021-06-01_01-30-07.png
 
Последнее редактирование:

GodVHS

Кавалерист
Оценка реакций
593
Вот версия скрипта для расчёта времени возврата

Посмотреть вложение 5081
Время выхода +- пригодиться, время хода наиболее бесполезный столбец.
К скрипту бы кнопочки прикрутить на против каждой строки, для сохранения времени возврата в буфер обмена. А то с телефона выделять для копирования- максимально неприятная операция.
 

Йыулувана

Кавалерист
Оценка реакций
108

Уважаемые!!
ну сколько можно издеваться гад Велик Могучим Русский Языка!

Больше не будет после - это не по русски!!!
это покаковскиугодно! но НЕ по-русски!
 

Йыулувана

Кавалерист
Оценка реакций
108
Ивент закончится в во столько то сегодня. Предметов больше не будет!
почему так нельзя написать? зачем ломать мои глаза???!