• Как проверить равны ли три переменные через if?

    dollar
    @dollar
    Делай добро и бросай его в воду.
    if (randomBoolean==randomBooleanItemOne && randomBoolean==threeRandomItem) {
      this.returnItemBoolian();
    }
    Ответ написан
    Комментировать
  • В чём отличия между js плагином и библиотекой?

    dollar
    @dollar
    Делай добро и бросай его в воду.
    Плагин - это модуль, который расширяет функционал основного приложения.
    Что такое "js плагин" я не знаю. Вы откуда вообще взяли такое сочетание слов?
    В целом можно сказать, что js плагин - это синоним библиотеке, но так обычно библиотеку не называют.
    Ответ написан
    2 комментария
  • Как использовать кириллицу в js?

    dollar
    @dollar
    Делай добро и бросай его в воду.
    Сам файл должен быть сохранен в кодировке UTF-8.
    Ответ написан
    Комментировать
  • Как запретить скроллинг чата при ручном прокручивании?

    dollar
    @dollar
    Делай добро и бросай его в воду.
    window.scrollTo(999999, 0);
    Ответ написан
  • Как получить элементы html по классу?

    dollar
    @dollar
    Делай добро и бросай его в воду.
    var tabs = document.getElementById('tabs');
    tabs.querySelectorAll('.tab-link').forEach(e=>e.style='color:red;');

    А ещё лучше так
    var tabs = document.getElementById('tabs');
    tabs.querySelectorAll('.tab-link').forEach(e=>e.style.color='red');
    Ответ написан
    Комментировать
  • Как через браузер отследить активность пользователя?

    dollar
    @dollar
    Делай добро и бросай его в воду.
    Активность можно отслеживать только в текущей вкладке. Это банальные требования к безопасности и конфиденциальности браузера.

    Если пользователь увел мышь за пределы окна текущей страницы, то вы никак не отследите движения и активность.

    Если пользователь переключился на другую вкладку, то вы никак не отследите активность там из вашей вкладки. Нужно иметь скрипт в той вкладке. Например, браузерное расширение, которое добавляет юзерскрипт ко всем вкладкам. И даже расширение не сможет поймать мышь на элементах браузера, которые не являются частью страницы - меню, строка адреса, панель закладок и прочее.

    Посмотрите Motivate Clock - это старый проект, один из первых, кто стал измерять время пользователя, потраченное на разные задачи. В какой-то момент они сделали также и расширение для браузера, чтобы там отслеживать активность. Можете у них поучиться всякому.

    Ну а активность вне браузера через JS ясное дело тем более нельзя отслеживать. К сожалению разработчиков. И к спокойствию юзеров, что сайты за ними не следят. Нужно делать нативное приложение для ОС.
    Ответ написан
    Комментировать
  • Наткнулся на подозрительный скрипт в исходниках одного сайта, не вирус ли?

    dollar
    @dollar
    Делай добро и бросай его в воду.
    Данные не слились.

    Хотя теоретически это возможно, если использовалась 0day-уязвимость в самом браузере. Но практически шанс этого настолько мал, что не стоит переживать. Очень много слоев защит в браузере, так что даже переполнение буфера мало что даст.

    Это просто обфусцированный код. А значит, автор просто не хочет, чтобы вы знали, что он делает, но это не обязательно вирус. Что именно он делает см. ниже. Но вообще очень много где встречается обфускация (или хотя бы минификация), и гораздо больших масштабов, на килобайты. Это норма.

    Если хотите практически полностью исключить атаку со стороны JS, отключайте его по-умолчанию. Например, я использую расширение (для хрома) Quick Javascript Switcher. Все сайты у меня без JS и всё прекрасно работает. На известных сайтах типа яндекса гугла, мейла, всё чем нужно пользоваться - включено. Ну и если внезапно надо включить (очень редко) - одним кликом делается. Хотя тема расширений сама по себе интересна с точки зрения ИБ, но это уже другая история (и всегда можно их скачать и использовать локально, особенно мелкие с кодом в 30 строк).

    P.S.
    Распаковка, этап 1
    var arr=[
    	'||x2F|x20|x33|x42|_0x9a4f|x54|hi|x2E|x3A|x74|x31|x52|x37|x4E|x6F|x68|x50|x48|var|x70|x4B|x59|x63|x6C|x67|function|console|x73|x72|x76|x62|x6B|x6D|x6E', //0
    	'split', //1
    	'length', //2
    	'constructor', //3
    	'debugger', //4
    	'toString', //5
    	'replace', //6
    	'\x5cw+', //7
    	'k\x206=[\x22\x5c5\x5cn\x5c3\x5cf\x5c5\x5cd\x5c3\x5c2\x5c2\x5c3\x5cj\x5c7\x5c7\x5ci\x5ca\x5c2\x5c2\x5cf\x5c5\x5cd\x5cc\x5c4\x5c4\x5ce\x5c9\x5c7\x5cm\x5c3\x5c2\x5c2\x5c3\x5ch\x5cb\x5cb\x5cl\x5ct\x5ca\x5c2\x5c2\x5cv\x5cx\x5c9\x5co\x5cg\x5cy\x5c2\x5cz\x5cw\x5cu\x5cc\x5c4\x5c4\x5ce\x22,\x22\x5cp\x5cg\x5cq\x22];r\x208(){s[6[1]](6[0])}8()'
    ];
    
    (function(arr, b) {
      var d = function(c) {
        while (--c) {
          arr['push'](arr['shift']());
        }
      };
      d(++b);
    }(arr, 0x1f4));
    
    var e = function(f) {
      f = f - 0x0;
      var g = arr[f];
      return g;
    };
    
    eval(function(h, nn1, i, j, k, m) {
      k = function(n) {
        return n[e('0x0')](0x24);
      };
      if (!'' [e('0x1')](/^/, String)) {
        while (i--) {
          m[k(i)] = j[i] || k(i);
        }
        j = [function(o) {
          return m[o];
        }];
        k = function() {
          return e('0x2');
        };
        i = 0x1;
      };
      while (i--) {
        if (j[i]) {
          h = h[e('0x1')](new RegExp('\x5cb' + k(i) + '\x5cb', 'g'), j[i]);
        }
      }
      return h;
    }(e('0x3'), 0x24, 0x24, e('0x4')[e('0x5')]('|'), 0x0, {}));
    
    var p = function() {
      function q(r) {
        if (('' + r / r)[e('0x6')] !== 0x1 || r % 0x14 === 0x0) {
          (function() {} [e('0x7')](e('0x8'))());
        } else {
          (function() {} [e('0x7')]('debugger')());
        }
        q(++r);
      }
      try {
        q(0x0);
      } catch (ee) {}
    };
    p();
    setInterval(function() {
      p();
    }, 0xfa0);
    Распаковка, этап 2
    var arr=[
    	'toString', //0
    	'replace', //1
    	'\x5cw+', //2
    	'k\x206=[\x22\x5c5\x5cn\x5c3\x5cf\x5c5\x5cd\x5c3\x5c2\x5c2\x5c3\x5cj\x5c7\x5c7\x5ci\x5ca\x5c2\x5c2\x5cf\x5c5\x5cd\x5cc\x5c4\x5c4\x5ce\x5c9\x5c7\x5cm\x5c3\x5c2\x5c2\x5c3\x5ch\x5cb\x5cb\x5cl\x5ct\x5ca\x5c2\x5c2\x5cv\x5cx\x5c9\x5co\x5cg\x5cy\x5c2\x5cz\x5cw\x5cu\x5cc\x5c4\x5c4\x5ce\x22,\x22\x5cp\x5cg\x5cq\x22];r\x208(){s[6[1]](6[0])}8()',
    	'||x2F|x20|x33|x42|_0x9a4f|x54|hi|x2E|x3A|x74|x31|x52|x37|x4E|x6F|x68|x50|x48|var|x70|x4B|x59|x63|x6C|x67|function|console|x73|x72|x76|x62|x6B|x6D|x6E', //4
    	'split', //5
    	'length', //6
    	'constructor', //7
    	'debugger', //8
    ];
    
    var e = function(num) { //получить строку с номером num (они перемешаны)
      num = num - 0;
      var g = arr[num];
      return g;
    };
    
    function getCode(h, nn1, i, j, k, m) {
      k = function(n) {
        return n.toString(0x24);
      };
      if (!''.replace(/^/, String)) {
        while (i--) {
          m[k(i)] = j[i] || k(i);
        }
        j = [function(o) {
          return m[o];
        }];
        k = function() {
          return '\x5cw+';
        };
        i = 0x1;
      };
      while (i--) {
        if (j[i]) {
          h = h.replace(new RegExp('\x5cb' + k(i) + '\x5cb', 'g'), j[i]);
        }
      }
      return h;
    }
    var code = getCode(e(3), 36, 36, e(4).split('|'), 0, {});
    eval(code);
    
    var p = function() {
      function q(r) {
        if (('' + r / r).length !== 1 || r % 20 === 0) {
          debugger;
        } else {
          debugger;
        }
        q(++r);
      }
      try {
        q(0);
      } catch (ee) {}
    };
    p();
    setInterval(function() {
      p();
    }, 4000);
    Распаковка, этап 3
    //Суть скрипта
    function hi() {
      console['log']('BY NBR // HTTP://NBR1337.TK // https://vk.com/nbr1337')
    }
    hi();
    
    //плюс защита от дебага (удалена)
    Распаковка, этап 4
    console.log('BY NBR // HTTP://NBR1337.TK // https://vk.com/nbr1337');

    Вывод - это просто подпись автора, чтобы он смог доказать авторство в суде, если его код спиратят.
    Ответ написан
    4 комментария
  • Десктопное приложение на javascript,в чем ошибка?

    dollar
    @dollar
    Делай добро и бросай его в воду.
    А приложение вообще работает? alert(123) выводит?

    Если да, то, скорее всего, просто нельзя менять локацию. Попробуйте ajax к www.ok.ru, а контент формируйте динамически тем скриптом, который является частью приложения - это будет как бы ядро вашего приложения, в котором будет вся логика загрузки контента и его отображения.
    Ответ написан
    Комментировать
  • Как организовать серверную (tcp) логику с примитивной игре?

    dollar
    @dollar
    Делай добро и бросай его в воду.
    В простой реализации всё просто. Сорри за тавтологию, но это реально так. Клиент посылает свою позицию серверу (абсолютные координаты) сразу послед изменения. Сервер посылает эти координаты остальным.

    А вот когда появится шанс столкновения (к примеру) и это нужно будет обрабатывать, либо игроки вообще научаться стрелять друг в друга (шутер), вот здесь начнутся проблемы. Проблемы будут заметны при большом пинге. И ответ здесь уже не простой. Придется чем-то жертвовать - точностью, либо возможностью читерить.

    Также есть всякие клиентские оптимизации, когда пакеты приходят с разной задержкой, но движение объекта при этом выглядит плавно. Красота тоже требует жертв.

    P.S. tcp не советую. Если данных мало (т.е. 4 игрока и 0 других объектов), то без разницы. Но на большом трафике даже 0.5% потерь пакетов приведет к лагам. Так что если планируете расти, лучше сразу выбрать udp (хотя вторым соединением по tcp можно административные задачи решать - поиск игроков, создание сессии и т.д.)

    P.P.S. Здесь неплохо иллюстрируется проблема синхронизации.
    Ответ написан
  • Как сделать так, чтобы число не выходило за рамки диапазона?

    dollar
    @dollar
    Делай добро и бросай его в воду.
    Просто делаешь свою функцию и применяешь её.
    Например, такую
    function check($a) {
        while ($a < 100) $a += 11;
        while ($a > 110) $a -= 11;
        return $a;
    }
    
    echo(check(105-7)); // 109

    Конкретно эта функция не очень хорошо оптимизирована, но подойдёт во многих простых случаях, хотя ты в любом случае можешь сделать её лучше при желании.
    Ответ написан
    4 комментария
  • Как удалить скрипт со страницы?

    dollar
    @dollar
    Делай добро и бросай его в воду.
    В общем случае удалить скрипт нельзя.

    Иногда возможен костыль. Для глобальных функций можно их переопределить, заменив другими. И вообще многие глобальные переменные можно удалить. Обработчики можно удалить все, если есть доступ к обработчику, то есть ссылка на функцию не спрятана где-нибудь в замыкании или какой-то локальной области видимости.

    Но если, к примеру, весь код банально обёрнут в анонимную функцию, то он практически невидимый извне. С ним ничего нельзя сделать. Можно только при следующей загрузке страницы не загружать этот скрипт. И обычно много всего спрятано именно так, в замыканиях, в стеке.
    Ответ написан
    Комментировать
  • Как реализовать обратный скролл страницы?

    dollar
    @dollar
    Делай добро и бросай его в воду.
    Думаю, можно сделать легко. Как-то так:
    1) Делаем страницу без скролла, которая умещается в экран.
    2) На странице несколько дивов с размерами 100%, которые накладываются друг на друга, то есть это как бы слои. И вот эти дивы уже со скроллом.
    3) Верхний див сделать невидимым. В нём с некоторой периодичностью, а также по событию проверяется текущая позиция скролла и используется в вычислениях.
    4) Нижний див, соответственно, принимает это значение и программно меняет позицию своего скролла в обратном направлении.

    Проблема только в обычном взаимодействии со страницей. Я не уверен, как можно ловить только скролл верхним дивом, а всё остальное (клики, тапы) пропускать. Можно легко сделать, чтобы вся мышь или тач были прокинуты к нижнему диву, но тогда схема теряет смысл. В общем, думаю, можно как-то ловить клик, считать его координаты и передавать ниже.
    Ответ написан
    Комментировать
  • Как начать делать игры после разработки сайтов?

    dollar
    @dollar
    Делай добро и бросай его в воду.
    Вступить в команду в качестве программиста или геймдизайнера. Учить тот язык, который потребуется. Мне кажется, что (настоящему) программисту выучить любой язык не проблема при желании и необходимости (разве что С++ может показаться излишне сложным, если выбрать его в качестве первого языка, но в качестве второго уже не так страшно).

    Если самому собирать команду, то, скорее всего, придется забыть о программировании, т.к. других хлопот слишком много будет. И другие направления в геймдеве придётся долго и глубоко изучать, так что разумно будет программирование принести в жертву. И нужно будет чётко сформулировать, чем ваша игра будет выделяться, доказать это (хотя бы себе и команде), а потом повесить это в рамку в качестве иконы и всё время помнить об этом - ведь это то, что принесёт деньги. Абстрактная просто игра в вакууме прибыли не генерирует. Ну и всем остальным KPI тоже, конечно, уделять внимания в качестве управленца.

    Хотя, если ваша цель сделать простенькую игру в одиночку, и прибыль с проекта вам не нужна, то можете взять любой игровой движок, тот же Unity, и просто начать что-то делать. А дальше уже в зависимости от степени вашей мотивации и вовлечённости, вы либо добьетесь высот в этом деле, либо бросите, поняв, что это не ваше.
    Ответ написан
    3 комментария
  • С чего начать разработку онлайн игры с использованием клиента сторонних разработчиков?

    dollar
    @dollar
    Делай добро и бросай его в воду.
    готов потратить годы своей жизни

    Так можно говорить, только если желание портировать у вас также наблюдается в течение нескольких лет. Иначе лучше просто подождать - желание пройдёт.

    Сделать такую игру небольшой командой - сложно, заработать на ней ещё сложнее, а делать игру в одиночку - невозможно.

    Я не программист, знаний ноль

    на UE4

    Почему такой выбор? Движок проще выбирать, будучи как раз программистом, а иначе это пальцем в небо. Под ММО больше заточен CryEngine, но здесь уже программисты могут долго перечислять плюсы и минусы.

    Чем мне вскрывать игровые ресурсы с расширением dat?

    Если нет исходников, то проще с нуля всё сделать. Может, конечно, повезет, и удастся легко вытянуть арт и модельки из dat файлов, но это будет графика 10-летней давности. Кому она зайдёт в наше время?
    Ответ написан
    6 комментариев
  • Как растянуть фон только по ширине?

    dollar
    @dollar
    Делай добро и бросай его в воду.
    background-size: 600px 50px;
    Ответ написан
  • Как подключить js файл в html через проверку на js?

    dollar
    @dollar
    Делай добро и бросай его в воду.
    В PHP достоверно проверить действительный адрес нельзя. Но достаточно надёжно можно проверять $_SERVER['HTTP_REFERER']. Если он ссылается на страницу1, то всё ок, а если нет, то скорее всего страница2 открывается в браузере напрямую.

    В JS нет смысла делать что-либо в "проверку на js" (я так понимаю, вы про noscript), потому что в этом случае js не работает вообще. Поэтому делайте в инлайн js скрипте так:
    1) Если JS работает И если это фрейм, то подгрузить js файл.
    Если inline скрипт не сработал, то в noscript можно просто попросить включить JS, и по умолчанию js файл грузиться не будет (в этом просто нет смысла, как я уже сказал).
    Ответ написан
    2 комментария
  • Считается ли коммерческим использование фото в макете для портфолио?

    dollar
    @dollar
    Делай добро и бросай его в воду.
    Не считается. Но формально вы не имеете права даже на некоммерческое использование, если не вы автор фото. Реально, конечно, вы вряд ли кому нужны)
    Ответ написан
  • Как сделать кнопку неактивной при снятии чекбокса?

    dollar
    @dollar
    Делай добро и бросай его в воду.
    Нужно создать глобальную переменную, в которой хранить число активных чекбоксов.
    • Если чекбокс активирован, то активируется кнопка, и переменная увеличивается на +1.
    • Если чекбокс деактивирован, то переменная уменьшается на 1, и если она стала равна 0, то кнопка деактивируется.
    Ответ написан
  • Как вывести самый часто встречаемый элемент в массиве?

    dollar
    @dollar
    Делай добро и бросай его в воду.
    Посчитать
    $arr = [1,2,3,4,5,5,4,1,2,1,2,5,2,2,3,2];
    $cnt = [];
    foreach ($arr as $val) { //Считаем
    	$cnt[$val] = @$cnt[$val] + 1;
    }
    print_r($cnt);
    
    $answer = 0;
    $max = 0;
    foreach ($cnt as $key=>$val) if ($val > $max) { //Ищем максимум
        $max = $val;
        $answer = $key;
    }
    print_r('Answer: '.$answer);
    Ответ написан
    5 комментариев
  • Если стоит индекс в таблице, будет ли операции update/delete медленнее чем были ранее?

    dollar
    @dollar
    Делай добро и бросай его в воду.
    Update - нет, но может и сильно да (зависит от запроса, который меняет индексы).
    Delete - практически нет (редкая реорганизация это мелочь по сравнению с ускорением поиска).

    В целом можно не волноваться об этом, если у вас нет чего-то особенного в запросах.
    Ответ написан
    Комментировать