Полёты в map-chat

Здравствуй, дорогой юзернейм. Если ты видишь этот пост, то очевидно тег mapchat у тебя не в игноре и ты, вероятно, не прочь посидеть в этой флудильне. Предлагаю тебе не только наблюдать за тамошним мясцом, но и принять участие в этом веселье. Зачем? Разумеется, лулзов ради. Итак, приступим.
Для начала, неплохо было бы научиться просто перемещаться по карте. Что для этого надо? Зайти в консоль своего браузера (обычно её довольно легко найти после нажатия F12, она будет подписана console) и вставить туда некий свой скрипт. У нас это будет:

var x = 33, y = 33;
function up(delt){
y = y+delt;
}
function down(delt){
y = y-delt;
}
function left(delt){
x = x-delt;
}
function right(delt){
x = x+delt;
}
setInterval(function() {userLocation = new google.maps.LatLng(y, x)}, 1000);
setInterval(function() {fuzzyUserLocation = new google.maps.LatLng(Math.round(y100) / 100, Math.round(x100) / 100)}, 1000);


Копируем, вставляем, жмём enter, пишем сообщение в чат и вуаля - мы находимся практически на экваторе, около Африки (по координатам (x; y), которые в данном случая являются градусной мерой, то есть "x" у нас от -180 до +180, а "y" от -85 (южный полюс) до +85 (северный полюс). Да-да, "y" лежит НЕ в пределах от -90 до +90 -- понятия не имею почему, но автор чата видимо решил, что так лучше.

Что мы теперь можем? Например, передвигаться в нужную сторону, путём ввода в консоль "команд" up, down, right, left и передачи в них параметра - числа градусов, на которое хотим сместиться. Например, пишем в консоль left(40), жмём enter, пишем сообщение в чат (позиция обновляется только после этого пункта) и смотрим как точка целеустремлённо прыгнула в сторону устья амазонки.
При желании, можно задать координаты вручную, написав в консоль x=число; y=число;, обновление позиции произойдёт так же только после того, как вы что-то напишете в чат.

Думаю, прописывать все эти передвижения вручную вам уже малость надоело. Почему бы процесс не автоматизировать?
Чтобы стартовать:
var i = setInterval (function(){left(2); down(1);}, 2000);
когда надоело неудержимо ползти в каком-то направлении:
clearInterval(i);

Теперь по пунктам. Куда двигаться пишем в фигурных скобках после function() через точку с запятой. Как быстро двигаться - число после запятой (в примере - 2000) в миллисекундах. Не рекомендую ставить меньше 1500-1000 -- прилетит автобан по ip, придётся менять его.

Если хотим двигаться и автоматически при этом что-то писать, то добавляем в setInterval функцию publish(topic, "text"); (содержимое кавычек, разумеется, произвольное. Хоть "text", хоть "nuke from korea":))
Итого:
var i = setInterval (function(){left(2); down(1);publish(topic, "text");}, 2000);
остановка такая же:
clearInterval(i);

1
Автор поста оценил этот комментарий

Кто-то в самом чатике спросил: "а если открыть много браузеров, можно сделать много точек?"
Можно. И не открывая много браузеров. Даже много вкладок не открывая. Фактически, создать новую точку можно одной строкой:
initialiseEventBus();

вуаля, теперь вы страдаете раздвоением (растроением и далее по списку) личности.


Для любителей нарисовать известно что:
1) открываем вкладку

2) закрываем вкладку, идём читать кто вы по Фрейду

Для художников:
1) открываем вкладку
2) вбиваем в консоль "базу" для работы

var x = 0, y = 0;

function up(delt){

y = y+delt;

}

function down(delt){

y = y-delt;

}

function left(delt){

x = x-delt;

}

function right(delt){

x = x+delt;

}

setInterval(function() {userLocation = new google.maps.LatLng(y, x)}, 1000);


setInterval(function() {fuzzyUserLocation = new google.maps.LatLng(Math.round(y*100) / 100, Math.round(x*100) / 100)}, 1000);

3) перемещаем точку на нужную стартовую позицию
4) чередуем initialiseEventBus(); отправку сообщений (хотя порой и без них срабатывает, если интервал большой выставлен), и функции смещения.


Передвигаться будет только НОВАЯ точка. От старой вы, так сказать, отвязываетесь и она будет висеть там, где её бросили. Точки, разумеется, пропадают после перезагрузки страницы. 

Автор поста оценил этот комментарий

Вчера всё нормально работало и летало в Хроме через эмуляцию. Сегодня зашёл через IE, минут 5 поработало (я при этом ни чего не прописывал), а потом перестало соединяться в обоих браузерах. Сегодня только у меня не соединяется?

раскрыть ветку (1)
1
Автор поста оценил этот комментарий

Я получаю Connection lost, scheduling reconnect и скрипт пытается автоматически переподключиться - безрезультатно

показать ответы
Автор поста оценил этот комментарий

Выдаёт сообщение в IE11 и GoogleChrome

Connection lost, please refresh :(

при обычном входе без изменения положения, хотя вчера работало. Как это можно исправить?


В консоле GoogleChrome

Navigated to http://idoco.github.io/map-chat/


map.js:69 getCurrentPosition() and watchPosition() are deprecated on insecure origins, and support will be removed in the future. You should consider switching your application to a secure origin, such as HTTPS. See https://goo.___________gl/rStTGz for more details.


9main.js:18 Connection lost, scheduling reconnect

___________ нет, но без него местный антиспам ругается


Зашёл через https, выдало такое

Navigated to https://idoco.github.io/map-chat/


sockjs.min.js:2 Mixed Content: The page at 'https://idoco.github.io/map-chat/' was loaded over HTTPS, but requested an insecure XMLHttpRequest endpoint 'http://chatmap.cloudapp.net/chat/info?t=1440871640020'. This request has been blocked; the content must be served over HTTPS.17.r._start @ sockjs.min.js:2(anonymous function) @ sockjs.min.js:2


main.js:18 Connection lost, scheduling reconnect
раскрыть ветку (1)
1
Автор поста оценил этот комментарий

Видимо, переписали скрипт, не смотрел ещё. Скорей всего теперь на сервере проверяют перемещалась ли точка или нет, и чтобы обмануть проверку надо изначально отправлять нужные данные (полетать уже не выйдет старым способом :с)

показать ответы
Автор поста оценил этот комментарий

Подтверждаю, работает, продаю гараж в атлантике :D

Иллюстрация к комментарию
раскрыть ветку (1)
1
Автор поста оценил этот комментарий

Продаёшь уплывающий гараж? :D

1
Автор поста оценил этот комментарий

К сожалению, pikabu крайне не дружит с символом звёздочки, принимая его за что угодно, кроме.. символа звёздочки, именно. В самом же первом куске скрипта, в последней функции вместо "y100" и "x100" будет, соответственно, "y*100" и "x*100"