Котчкара и ...

Сохраняй посты, комментируй и ставь оценки
На этом острове в Германии свободно живёт стая диких павлинов, а также находится удивительный исторический флигель из белого камня.

Pfaueninsel (нем.), или Павлиний остров, расположен на реке Хафель, протекающей через Берлин, и представляет собой дивное место для любителей уединения, изобилующее старинными зданиями и дикими птицами. Здесь даже есть флигель сказочного замка, возведённого по приказу прусского короля.

Благодатный остров площадью почти 100 га сначала был известен как «Кроличий остров» благодаря маленькой кроличьей ферме, которую основал здесь в XVII веке Фридрих Вильгельм I Бранденбургский. Лишь в конце XVIII века его потомок Фридрих Вильгельм II (Фридрих II Великий) превратил остров в тайное убежище для себя и своей любовницы Вильгельмина Энке. Считается, что он заявил: «На Кроличьем острове ни одно дерево, ни один куст не будут срублены!» Вильгельм II положил начало существованию острова как естественного убежища для растений и животных.

Он же построил для себя и Энке самое знаковое сооружение - двухбашенный белый замок-фолли (каприз). Две башни объединены мостом, соответствующим средневековому стилю.

После смерти Вильгельма II остров перешёл к его сыну, который построил на нём зверинец, где жили разные редкие и даже экзотические животные, включая крокодилов, волков, орлов и, конечно же, павлинов. К середине 1940-х годов большинство животных было перевезено в недавно открытый Берлинский зоопарк. Но некоторые павлины остались, а остров стал заповедным уголком природы.

Сегодня остров по-прежнему можно посетить на пароме от берлинской железнодорожной станции Ванзее. Хотя время королевских особ безвозвратно ушло, дикие павлины продолжают процветать, оставаясь его главным украшением.





Пушистые хвостатики могут и сдачи дать)

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

Когда у Pandora появились брелки с совмещенными метками авторизации R322, R463, R465, R468BT, R500BT, для них долгое время не было в продаже чехлов... Хотя для других брелков Pandora их было купить несложно...

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

И вот, наконец, не так давно на маркетплейсах появились чехольчики по адекватной цене, в 550 рублей. У меня несколько поистёрся чехольчик собственного пошива для брелка моей Pandora DX4, и я купил новый на Озоне.

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

Всем добрый день! И снова я заявляюсь сюда с фотографиями и видео тренировочного процесса. :) Во вторник у нас прошла съемка последней связки, поставленной тренершей, и конечно же я хочу поделиться своими результатами.
На самом деле какой-никакой прогресс все же появился - как минимум тяну носки, как максимум мне стало легче выходить в трюковые элементы.
Заодно затестила новый танцевальный комбинезон, который почти полгода пылился в шкафу. Была удивлена, что не вылезла из размера XS, потому что на стрессе вес скачет туда-сюда, и мне казалось, что я стала выглядеть хуже.

Браслет-четки это мерч Drummatix, но на время съемки пришлось снять. :(

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

Спасибо, что прочитали-посмотрели, чудесных дней и всего наилучшего!
Дисклеймер: в посте будет много фоток и немного нытья.
В моей жизни меня всегда окружали коты. У родителей в двери квартиры была сделано отверстие для входа - и поэтому сложно даже точно сказать сколько котов у нас было - в зимнее время котов становилось больше, в весеннее - меньше, кто то приходил просто пожрать, кто то оставался надолго. Но лично моих котов, за которых лично я нес ответственность за все мои 40 лет было 4. Два из них уже знакомы Капибаре - это Чипочка и Гаечка, я периодически про них тут рассказываю. А сейчас расскажу про второго кота. Имя ему - Себастьян!

Этого кота нашли мои коллеги замерзающим у офиса, где мы тогда работали. Себе взять не смогли, так как улетали в другую страну на ПМЖ, а кот был больной и не прошел бы таможню. Поэтому начали активно искать ему новых хозяев, повесили обьявление на доске у входа в офис - и я не смог пройти мимо.

Свое звучное имя он получил не сразу. У моих родителей (да и у меня тоже) есть традиция - сначала не называть кота, а посмотреть на его поведение, и назвать исходя из его личных качеств. Ну вы знаете, как у индейцев, Длинный Лук там или Большая Печень. Первые пол года Себастьян ходил просто как "Кот", иногда "ей, ты!". Как то у меня в колонках играл "Король и Шут" - "Охотник", а котяришна притащила с балкона 6 этажа голубя, которого он поймал в прыжке. "Ну, охотник!" - подумал я. И вопрос с именем был решен.

Себа был самым человечныым и эмпатичным котом, из всех что я видел - а видел я не мало. Когда нас бросила девушка и мне было плохо - он успокаивал меня. И вообще старался всегда быть рядом. Всегда смотрел человеку в лицо, как бы по губам читал что ему говорят.

Когда я переехал из Москвы в Питер по работе - конечно я забрал кота с собой. Там мне подкинули еще одного бродягу, которого позже назвали Чип. И хотя первая встреча прошла нервно...

Со временем они стали лучшими друзьями!

Себа прожил долгую и, надеюсь, счастливую жизнь. Я не знаю сколько лет было ему, когда его нашли, но со мной он прожил еще 12 лет, в любви и заботе. К сожалению кошачий век короток, а у него нашлось множество болячек.

Но не смотря на это Себа до конца был ласков и общителен, и всегда любил внимание

Себастьяна не стало 26 сентября 2021 года, но он навсегда жив в моей памяти. А теперь еще немного и в вашей.


Привет.
Я разрабатываю эмулятор сервера для Lineage 2 Chronicle 1: Harbingers of war на Node.js.
Столкнулся с проблемой синхронизации скорости персонажа на сервере с клиентом. Когда в игре вы нажимаете мышкой в то место, куда хотите перейти то происходит плавный переход с анимацией движения. На сервере в этот момент тоже происходит движение по таймеру, но не такое плавное.


Для примера я взял сборку написанную на java l2j-lisvus Сборок много. Но все они являются fork’ами проекта l2jserver https://l2jserver.com/И многое наследуется. В том числе и передвижение персонажа.
В l2j-lisvus, как и во всех сборках l2jserver перемещение персонажа на сервере идет при помощи таймера с приростом одинаковых значений.
Проблема проявляется, когда нам надо сделать какое-то действие после того, как персонаж добежал до пункта назначения. Например, нанести удар по NPC.



Как работает передвижение персонажа на сервере.
За основу взяты базовые характеристики персонажа. Скорость бега 126.

На данной схеме идет прирост координат персонажа каждые 1000мс на 126 unit’ов. Исходя из схемы выше пример кода для действий персонажем после достижения пункта назначения:
// Прироста координат нет. Просто считаем когда персонаж дойдет до конечных координат.
const distance = 1500;
const playerSpeed = 126;
const ticks = distance / playerSpeed; // 11.90
const time = ticks * 1000; // 11900mc
setTimeout(() => {
// действие персонажа после бега
}, time);




Зеленой зоной показана точка куда должна ступить нога персонажа если бы не было расхождений.
Рост скорости при развитии персонажа.
126 — это базовая скорость. И по мере развития персонажа будет расти и скорость передвижения. А значит расхождение будет больше. Но перед тем, как создать формулу надо подтвердить теорию, что скорость ходьбы влияет на расхождение.
Данные о характеристиках персонажа передаются от сервера к клиенту.
Пакет UserInfo.js 83 строчка.
writeD(player.runSpeed);
writeD(player.walkSpeed);
Базовые значения:
runSpeed: 126
walkSpeed: 88
Выставляю значения walkSpeed: 126. Если скорость ходьбы будет равна скорости бега, то расхождения должны пропасть.


Персонаж синхронизирован и начинает атаку вовремя. Теперь надо понять, как скорость ходьбы влияет на расхождения между клиентом и сервером.
Сколько же персонаж успевает пройти перед тем, как начинает бежать?
Надо поймать момент когда ходьба переходит в бег. Для этого передадим в клиент данные, где скорость ходьбы будет больше скорости бега. Из-за этой разницы будет виден переход и можно будет рассчитать пройденное расстояние при ходьбе.
runSpeed: 10
walkSpeed: 600

При скорости шага в 600 персонаж успевает пройти 250, прежде чем начинает бежать.
600 / 250 = 2.4
700 / 291 = 2.4
800 / 333 = 2.4
Из этого вывод, что персонаж перед тем, как начать бежать успевает пройти расстояние в 2.4 раза меньше, чем его скорость ходьбы.
Значит при скорости ходьбы 88 персонаж пройдет 36 unit’ов.
88 / 2.4 = 36

Решение
Формула для расчета времени:
сколько_прошли_на_старте = скорость_ходьбы / 2.4
(((дистанция_между_нпц_и_игроком - сколько_прошли_на_старте) / скорость_бега) * 1000мс) + время_которое_прошли
Для примера дистанция 1500.
Из них мы 36 прошли.
1500 - 36 = 1464 расстояние для бега.
Скорость бега 126 в секунду.
1464 / 126 = 11.61 (количество отрезков, которое мы пройдем за секунду).
11.61 * 1000 = 11610мс бега.
к 11610 надо прибавить время ходьбы
Скорость ходьбы 88 в секунду.
1000 / 88 = 11.36мс за 1 unit
36 unit * 11.36мс = 408мс
11610 + 408 = 12018мс
12018мс является точным временем от начала старта и до конца.
Сравниваем со старым временем 11900мс. Разница в 118мс.
setTimeout(() => {
player.attack(npc);
}, 12018);




Как видно выше разница положения ног при разных скоростях отсутствует, а значит решение работает.
Ссылка на проект: https://github.com/lineage2js
Ссылка на блог: https://t.me/lineage2js

Поезда, въезжающие на станционный комплекс, должны были замедлиться, чтобы иметь возможность изменить направление. Но пока состав двигался на более высокой скорости, подшипники колес нагревались.Без достаточной смазки подшипник серьезно нагреться, и работа инспектора заключалась в том, чтобы на участке, где поезд понижает скорость обнаружить дым или раскаленный подшипник из «горячего ящика» и сообщить об этом, чтобы поезд мог остановиться и устранить проблему.
Пожалуйста, зарегистрируйтесь или авторизуйтесь для просмотра содержимого данного поста.
Ты не прав- мне сказал модератор:
очень скоро нарвешься на бан!
А ко мне залетел провокатор
и в комментах насрал на диван!
*
Двери настежь - что делать тут будешь
Хоть просил я повесить запор
Вот и шляются разные люди
И рисуют куйню на забор
*
Возразил ему даже без мата
Не привык я обиды спускать
И завыл-закричал провокатор
И давай модератора звать
*
Ты не прав- мне сказал модератор.
По итогам прошедшего дня
Оказалось, что я - провокатор.
Вот такая, малята, куйня...
