Jump to content
Korean Random

SoprachevAK

User
  • Posts

    323
  • Joined

  • Last visited

  • Days Won

    26

Everything posted by SoprachevAK

  1. Эти методы дают на выходе некое число, характеризующие качество случайности, ну и ожидается что это качество будет как минимум одинаковым у всех. Игроки ожидают случайное поведение рандома лично для себя, и именно его и стоит проверять.
  2. А ещё там на WGMods предложили поколлаборировать с другими модниками, так что какие есть предложения по этому поводу? Я думаю что можно добавить возможность другим модам устанавливать теги на события, и тогда можно будет строить графики в зависимости от тегов, что даст как минимум бесплатную аналитику модам. Например можно будет посмотреть с какой дистанции стреляют игроки с тегом "JOVEMODPACK" и сравнить со среднесервеным. На какую нибудь битву блоггеров было бы интересно кто сколько и как играет.
  3. Обновил шапку темы, релизнул на гитхаб основу новой версии. Можете глянуть на общую архитектуру и покритиковать её. А можете добавить новые события, по идеи это должно быть изи ту юз.
  4. Выглядит как будто бы да Вообще с увеличением количества выстрелов распределение становится весьма странной формы.
  5. Могу позволить, новая версия использует колоночную СУБД (увеличение количества столбцов не влияет на производительность) Спорно. Есть методы нуждающиеся в полной исходной последовательности. Тае же нашел свой университетский учебник, где 70 страниц посвящено анализу псевдослучайных последовательностей. Со 118 по 200 страницы, лично я в универе по нему делал тесты Кнута, крайне неприятное занятие, но может кому будет интересно глянуть Иванов М.А., Чугунков И.В._Теория, применение и оценка качества генераторов псевдослучайных последовательностей.pdf
  6. Они являются выстрелами, траекторию которых определил рандом. Если не учитывать часть выстрелов, в итоговом распределение получится ошибка выжившего. Понятное дело, что таких выстрелов мало, и на распределение они повлияют не сильно, но например на алгоритмы анализа случайных последовательностей, повлиять могут. Буду собирать и трассёры и точки попаданий если такие есть.
  7. Всё ок, всё работает. Думаю правильно, единственный вопрос остаётся, что делать с выстрелом в скайбокс или на расстояние дальше дистанции стрельбы Там нет ни взрыва ни урона Возможно такая ситуация будет ещё с выстрелом по незамеченному противнику, там вроде бы снаряд просто пропадает, но ещё не тестил Вообще я немного сомневаюсь в использование такого способа, он конечно точнее с точки зрения механик, однако получаются разные способ расчёта для разных типов попаданий Например попадание по танку может отправляться более точно, чем по рельефу, и получится что точность попаданий будет отличаться от точности промахов, а это нехилый камень в огород отсутствия подкрутки Я конечно буду собирать всё и можно будет сравнить, но как показывает практика, если не решить сразу, не решится никогда
  8. Думаю тут всё ещё мало выстрелов, как показали мои эксперименты, среднее для 100 выстрелов может колебаться от 0.36 до 0.43 (погрешность = 7%) для 1000 не пробовал, но допустим в 10 раз меньше, стало быть 0.7% и тогда внутри РУ сервера вроде бы никто сильно и не выбивается Тут есть нюанс доверительного интервала, тк я эти 7% получил на глаз, и хрен знает какова вероятность такой погрешности, так что небольшие отклонения в редких случаях допустимы В принципе методика оценки интересная, надо будет подумать в каком виде её можно внедрить на сайт, но это КТТС, в первую очередь разработка новой версии мода, как только зарелижу, постараюсь договориться с разрабами модпаков, чтоб они добавили. Есть идея дать возможность из других модов добавлять теги на события, а на сайте по тегам фильтровать, получится такая вот бесплатная и достоверная подробная аналитика. Никакая гугл аналитика не скажет с каким разбросом играют на модпаке джова
  9. В этой выборке нет, но во вложениях есть файл с исходными данными в том числе и регионом. Мне кажется сомнительным, что на разных регионах разное распределение рандома внутри одной игры. Это можно будет проверить когда будет больше боёв на других регионах Они гладкие пока в них всего 10 секций, если секуции увеличивать появляется сильный шум, и к тому же, это графики не NA и EU сервера, а одного игрока с NA и однго игрока с EU
  10. Да, сейчас у меня считается круг разброса как будто это снайперский прицел обычного танка, а надо считать так, тогда и с артой всё будет хорошо Вот подогнанный Рэлей с возможностью масштабироваться и двигаться во всех направлениях Тоже так себе. Сейчас такое распределение стало, что и экспонентой плохо аппроксимируется, но когда я начинал тот пост писать, экспонентой было норм Наверное аппроксимацию гистограммы надо вообще просто сплайном искать да и всё. Такое падение на 0.05-0.1 тяжело чем то адекватным описать
  11. HipPoint правильно брать от сюда (мне кажется сомнительным тк тоже связано с трассером, но другого я не нашел)? И ещё назрел вопрос о результатах боя, насколько я нагуглил у картошки нет способа через API их получить и если человек закрыл игру не дождавшись результата, то я его никак не узнаю. А если не закрыл, то результат брать от сюда? мне надо в том числе и во время другого боя, и по завершению текущего, в игре ещё не тыкал, сейчас совсем времени нет в танки играть.
  12. Генератор случайных чисел как в танках Задача. Написать генератор случайных чисел чтоб получить распределение как в танках, каким либо общеизвестным методом оно не описывается. Шаг 1. Берём много выстрелов, можем от сюда и строим по ним гистограмму распределения, пусть на N = 100 столбцов data = readtable("./server.csv", opts); data = data{:,[1,2,3]}; N = 100; h = hist(data(:,3), N); Шаг 2. Находим аппроксимацию полученной гистограммы, экспериментальным путём лучше всего описывается с помощью функции вида a*exp(b*x) + c*exp(d*x) fitResult = fit(linspace(0, 1, N)', h', 'exp2'); [a, b, c, d] = deal(fitResult.a, fitResult.b, fitResult.c, fitResult.d) vpa([a, b, c, d], 30) F = @(x) (a*exp(b*x) + c*exp(d*x)); Шаг 3. Нормируем получившуюся плотность. Интеграл плотности от 0 до 1 = 1, для этого делим функцию на интеграл PDF = @(x) (a*exp(b*x) + c*exp(d*x)) / integral(F, 0, 1); Шаг 4. Находим функцию распределения как интеграл от плотности. В качестве константы при интегрирование вычитаем значение интеграла в 0, чтоб распределение имело значения от 0 до 1 CDF = matlabFunction(int(sym(PDF))); CDF = matlabFunction(sym(CDF) - CDF(0)); Шаг 5. Находим функцию обратную данной, аналитически не вышло, делаем численно. xx = linspace(0, 1, 100); yy = CDF(xx); revCDF = @(x) interp1(yy, xx, x); Шаг 6. Аппроксимируем обратную функцию. Тут хоть сколько нибудь адекватной аппроксимацией получился полином 9 степени (p1*x^9 + p2*x^8 + p3*x^7 + p4*x^6 + p5*x^5 + p6*x^4 + p7*x^3 + p8*x^2 + p9*x + p10) X = linspace(0, 1, N); revCDF = fit(X', revCDF(X)', 'poly9', 'Robust', 'Lar'); [p1, p2, p3, p4, p5, p6, p7, p8, p9, p10] = deal(revCDF.p1, revCDF.p2, revCDF.p3, revCDF.p4, revCDF.p5, revCDF.p6, revCDF.p7, revCDF.p8, revCDF.p9, revCDF.p10) revCDF = matlabFunction(p1*x^9 + p2*x^8 + p3*x^7 + p4*x^6 + p5*x^5 + p6*x^4 + p7*x^3 + p8*x^2 + p9*x + p10); Шаг 7. Готово. Теперь для получение случайных чисел достаточно вызвать revCDF(Rand()), где Rand() генерирует случайное число равномерно распределённое от 0 до 1. Чтоб убедиться строим гистограмму от 10 миллионов случайных чисел и сравниваем с исходной гистограммой histogram(data(:,3), 50,'Normalization','probability'); hold on histogram(revCDF(rand(10e6, 1)), 50,'Normalization','probability'); Результат: Коэффициенты формул: PDF: a = 170303.75999096324085 b = -3.9596481004599288767 c = -169770.0697609304043 d = -4.0490033841995565211 a*exp(b*x) + c*exp(d*x) invCDF: p1 = 60.643177737472981903 p2 = -268.4866364087093870 p3 = 511.04790264076154926 p4 = -545.3738964542347957 p5 = 358.28863739253199583 p6 = -150.0669928063029487 p7 = 40.683377765003896798 p8 = -7.116679640521884842 p9 = 1.3780439852440364845 p10 = 0.0024099699685065862 p1*x^9 + p2*x^8 + p3*x^7 + p4*x^6 + p5*x^5 + p6*x^4 + p7*x^3 + p8*x^2 + p9*x + p10 PDF = 171.67590541705826929*exp(-3.9596481004599288767*x) - 171.13791521967221624*exp(-4.0490033841995565211*x) CDF = 42.266676261003986781*exp(-4.0490033841995574093*x) - 43.356354166199118083*exp(-3.9596481004599288767*x) + 1.0896779051951310802 revCDF = 60.643177737472981903*x^9 - 268.48663640870938707*x^8 + 511.04790264076149242*x^7 - 545.37389645423479578*x^6 + 358.28863739253199583*x^5 - 150.06699280630289195*x^4 + 40.683377765003896798*x^3 - 7.116679640521884842*x^2 + 1.3780439852440360404*x + 0.0024099699685065862145 Полный код в матлаб: clear clc close all syms x opts = delimitedTextImportOptions("NumVariables", 4); opts.DataLines = [1, Inf]; opts.Delimiter = ","; opts.VariableNames = ["VarName1", "VarName2", "VarName3", "VarName4"]; opts.VariableTypes = ["double", "double", "double", "datetime"]; opts.ExtraColumnsRule = "ignore"; opts.EmptyLineRule = "read"; opts = setvaropts(opts, "VarName4", "InputFormat", "yyyy-MM-dd HH:mm:ss.SSS"); data = readtable("./wot-stat-filtered.csv", opts); data = data{:,[1,2,3]}; N = 100; h = hist(data(:,3), N); fitResult = fit(linspace(0, 1, N)', h', 'exp2'); %Исходная аппроксимация [a, b, c, d] = deal(fitResult.a, fitResult.b, fitResult.c, fitResult.d) vpa([a, b, c, d], 30) F = @(x) (a*exp(b*x) + c*exp(d*x)); %Нормируем PDF = @(x) (a*exp(b*x) + c*exp(d*x)) / integral(F, 0, 1); %CDF = integral(PDF) CDF = matlabFunction(int(sym(PDF))); CDF = matlabFunction(sym(CDF) - CDF(0)); %Находим численно обратную xx = linspace(0, 1, 100); yy = CDF(xx); revCDF = @(x) interp1(yy, xx, x); %Аппроксимируем обратную X = linspace(0, 1, N); revCDF = fit(X', revCDF(X)', 'poly9', 'Robust', 'Lar'); [p1, p2, p3, p4, p5, p6, p7, p8, p9, p10] = deal(revCDF.p1, revCDF.p2, revCDF.p3, revCDF.p4, revCDF.p5, revCDF.p6, revCDF.p7, revCDF.p8, revCDF.p9, revCDF.p10) revCDF = matlabFunction(p1*x^9 + p2*x^8 + p3*x^7 + p4*x^6 + p5*x^5 + p6*x^4 + p7*x^3 + p8*x^2 + p9*x + p10); %Рисуем хистограмму для сравнения histogram(data(:,3), 50,'Normalization','probability'); hold on histogram(revCDF(rand(10e6, 1)), 50,'Normalization','probability'); rng(0) window = 100; smooth = smoothdata(data(:,3), 'movmean', window); smoothCorrect = smoothdata(revCDF(rand(length(data(:,3)), 1)), 'movmean', window); figure plot(data(:,1), smooth) hold on plot(data(:,1), smoothCorrect) PDFCDF.m
  13. Знаю. Читал его, по этому и написал согласно общему представлению, а в общем представление патент виноват во всех бедах жизни Понял. Спасибо. Мне конечно уже рассказали что спойлеры лучше не юзать, они вредны для SEO, но пригодится Ну звучит как единственное логичное объяснение, но конечно странно, что распределение выстрелов разное на серверах, но можно будет потом проверить, когда сделаю новую версию мода, напишу Европейским стримерам, может быть попиарят. В новой версии опять таки будет можно, а ещё можно искать корреляции между разбросом, уроном и пробитием. Если предположить, что все выстрелы всегда летят без учёта рандома, всегда в 0.395 от сведения, то для отклонения выборки из 100 выстрелов до 0.43 понадобится 5 выстрелов в самый край, ровно как и для отклонения до 0.36 понадобится 5 выстрелов ровно в центр. Весьма периодичные перепады графика от 0.36 до 0.43, означают разницу в 10 выстрелов полетевших вместо идеального центра в идеальный край. Понятное дело что на самом деле разница будет не в 10 выстрелах центр/край, а в 20+ выстрелах полетевших почти в центр/почти в край Возможно именно это и вызывает ощущение "подкрутки", когда есть серия в которой много выстрелов летят почти в центр, а потом серия, в которой много выстрелов летит в край. Лично для меня всё ещё странно, что бегущее среднее по рандому получись не прямой с шумом, а пилообразным графиком с шумом (я пытался найти ответ, и даже спрашивал знающих людей, но так и не понял) 10к выстрелов -> бегущее среднее по 100 -> фильтр нижних частот И синусоида, так что пики и впадины весьма периодичны
  14. Не доказательство подкрутки Есть различные метрики анализа случайных последовательностей, отличие метрики отдельно взятого игрока от серверного значения может являться следствием подкрути. Сейчас мод умеет записывать траекторию трассера, и считать точку пересечение трассера с маркером прицела на момент перед выстрелом. Точка попадания считается в том месте, где её видит человек из снайперского прицела (разброс -- круг в плоскости параллельной монитору), такой способ не совсем правильный с точки зрения механики разброса, однако близок к нему, и отображает то, что видит человек на мониторе. Хранятся точки в полярных координатах, далее оценивается относительное расстояние (0 означает что снаряд попал ровно в центр прицела, 1 -- снаряд попал ровно на границу сведения). Дальнейшие вычисления проводятся на выборке с 01.06.2021 по 18.08.2021, выстрелы артиллерии исключены (старая версия мода записывала их с багом), режим боя: стандартный 1. Гистограмма распределения: Отображает распределение снарядов внутри круга разброса, на горизонтальной оси -- секции прицела (как на стрелковых мишенях), на вертикальной -- относительное количество выстрелов, попавших в эту секцию (чем выше левые столбики, тем чаще снаряды летели в центр) Я выбрал игрока JlOnATKA, у него 3294 выстрела, построил график распределения и сравнил его со среднесерверным распределением на (58773 выстрелов) Распределения почти совпадают, в пределах погрешности, так что примитивной подкрутки тут нет. В среднем все выстрелы этого игрока летели ровно так же, как летят в среднем по серверу. Постоянная ссылка на интерактивный график 2. Скользящее среднее по подряд идущим выстрелам одного аккаунта Можно предположить, что выстрелы сначала "откручивают", а потом "подкручивают", согласно общему представлению патента кислого "чем лучше играешь, тем хуже летит, чем хуже играешь, тем летит лучше". В среднем будет всё верно, однако должны быть серии подряд идущих "неудач", для этих целей есть график скользящего среднего. Он выбирает N выстрелов, берёт расстояние от центра до точки попадания, и строит среднее по W элементам (точка, стоящая на X месте будет равна среднему от промежутка [X-W, X]. На графике индекс означает сколько выстрелов назад случился текущей выстрел, то есть самый последний выстрел был 0 выстрелов назад, находится справа) Всё по тому же игроку При окне усреднения = 30 уже винды некоторе пики и падения. Что если увеличить окно усреднения: Уже больше похоже на подкрутку, с 715 по 623 выстрел летело "плохо", в среднем в 43% разброса, зато с 577 по 508 выстрел летело "хорошо" в среднем в 36% разброса Постоянная ссылка на группу этих графиков На этом мои познания в мат статистике закончились, и я не нашел ничего лучшего, чем сгенерить выстрелы вручную и посмотреть чё там у заведомо честного генератора. И у него всё примерно так же, для окна в 100 элементов значения прыгают от 0.31 до 0.48, значит этот промежуток можно считать пределами нормы. Синим танки, красным моё. Окно = 100 3. Анализ генератора псевдослучайных чисел. Прошлый способ даёт визуально понять подкрутку по времени путём выявления пиков, выходящих за пределы допустимой зоны, однако если пики внутри допустимой зоны, и частота пиков вверх чаще "нормы", это тоже является подкруткой. Для таких случаев разработаны различные способы анализа качества генераторов случайных чисел, к сожалению, кроме того что они разработаны, я о них не знаю ничего. PS. Я вот писал всё это, и хотел в качестве примера взять аккаунт, на котором настреляно максимум выстрелов, однако топ2 игрока по количеству выстрелов в моём моде это игроки с NA и EU клиентов игры. И вот у них чёртова подкрутка есть даже на распределение. Вот график. И я не знаю, как это объяснить. Сравнить распределение серверов я не могу, тк слишком мало пока что играет не на RU PS2. Прикладываю два csv файла. Full (189к строк) полные данные о выстрелах, Filtered (98к строк) выстрелы за 7 версию мода (исправлены баги), без арты с которой есть погрешность и с убранными выстрелами когда снаряд полетел за пределы круга сведения, для анализа советую использовать именно эту. wot-stat-filtered.csvwot-stat-Full.csv
  15. Новая тема идеологически вообще о другом моде Тут обсуждались тупые вопросы мол "как сделать" анализ полёта снаряда, там общий сбор различных событий, где траектория снаряда лишь частный случай. Менять общую повестку на 3 странице я не сторонник, как по мне, лучше много маленьких тем, чем одна большая Уже накидал примерную основу нового мода, думаю на этой неделе начну делать бэк, а дальше добавление новых событий будет лишь вопросом питона в моде Название темы поменяю на кликбейт)
  16. Создал тему с планами на 2 версию мода, идеи предложения туда Ну а сюда тогда вопрос, можно ли хоть сколько нибудь достоверно получать информацию о толщине брони в точке по вектору, был раньше модик который показывал приведённю броню и шанс пробития, можно ли такое сейчас считать и можно ли например считать для своего танка, мол какая была вероятность что меня пробили бы Я видел мод для расчёта реальной точки попадания, но насколько я понял это уже после боя, а мне хотелось бы во время игры и чтоб не лагало
  17. Таких выстрелов по всей бд 4%, из них 2.3% с дистанции < 50м, и 0.6% с дистанции < 10м, выстрелы полетевшие вне круга исключены из аналитических графиков. Причин их появления может быть 5 Не совсем корректная формула расчёта точки попадания, сейчас круг параллелен плоскости монитора в снайперском прицеле, а надо немного не так Пулемётные танки, когда на одно нажатие ЛКМ вылетает более 1 снаряда, причём первый летит правильно, а остальные хрен знает как, и прицел можно отвести, и сидение может поменяться Рассинхрон между сервером и клиентом, сейчас я записываю трассер снаряда и току в которую человек целился в момент нажатия ЛКМ, если мод записал снаряд непонятно куда, значит человек на клиенте увидел, что он летит непонятно куда, и как говорил Панков "Это нормально" (когда играл часто замечал, что такое случается при стрельбе в упор, круг сведения не совпадает с местом куда смотрит пушка, и не совпадает с тем, куда попадает выстрел) Выстрелы со старой версии мода на серверном прицеле (был баг с его записью, из за этого распределение арты отличается от верного, тк большинство боёв на арте сделано на старой версии) Неверная отрисовка трассера, в новой версии буду считать по точке попадания Забыл добавить, обновил. https://github.com/SoprachevAK/wot-stat
  18. Было бы круто если бы вы покидали сюда функций для хукания (как ссылку на исходный код) которые могли бы быть интересны, на основе их параметров соберу таблицы Я многого могу просто не знать, например как в текущей версии я не знал, что можно через код включить получение серверного прицела, оставив при этом отрисовку клиентского у игрока, и из за этого писал костыли для работы с любым прицелом
  19. Оглавление (актуально для старой версии < 1.0) Прошлая тема с техническими вопросами Не доказательство подкрутки Генератор случайных чисел как в танках
  20. Мод по сбору внутриигровой статистики Версия 1.0 Сервис который собирает события боя и сохраняет их в базу данных. Любой бой будет начинаться с события загрузки боя, заканчиваться его результатом. Сайт со всей информацией: wotstat.info, там же актуальная версия мода. Просмотр инфографики. Что собирается Событие входа в бой. Время в очереди, в загрузке Выстрел и его результат. Откуда, куда, как полетел трассер, какой результат у выстрела (это урон, куда и в кого попал, поджог ли кого то) Результаты боя. Подробная информация о результатах боя с результатами каждого игрока, его командой Интересная инфографика Распределение выстрелов для серверного и клиентского прицела. 67% снарядов попадает в первую половину сведения. Анализ времени боя по картам, в среднем бои на 8-10 уровнях длятся 7 минут В среднем в ожидании боя (очередь + загрузка + таймер) игроки тратят 36 секунд, что целых 9% от времени игры Анализ урона. Распределение, как будто бы, нормальное, в отличии от выстрелов урон по шотным танкам проходит так же нормально, без подкруток в пользу засейвить шотного. В любом случае на больших дистанциях танки с 1хп остаются так же часто как и с 2хп, так и с 3хп. При победах, топ1 по фрагам делает в среднем 3.5 фрага Турбобои (я определил как бой быстрее 5 минут с разницей во фрагах более 10) случаются, бывает что 4 боя из 10, но в среднем 1 бой из 10 Можно посмотреть лично для себя разбивку по картам, сколько времени вы на них выживаете, сколько урона/фрагов/света делаете Анализ "стримснайперов" даже обычным игрокам довольно часто в бои попадаются одни и те-же люди, но больше полезно конечно стримерам. Исходные данные База данных со всеми актуальными исходными данными открыта на чтение, так что кому интересно, можно прямо на SQL писать любые запросы. А интересных графиков из этих данных можно ещё много построить Подробнее про подключение на сайте, а поиграться можно тут: db.wotstat.info/play?user=public Немного скриншотов графиков Микросервисная архитектура полностью в опенсорс. Список событий github.com/WOT-STAT/Description. (возможно частично устарел) Исходник мода github.com/WOT-STAT/WOTMOD. Чтоб не потерялось Пересечение трассера и разброса url url url Связь выстрела и попадания url Механика отрисовки сведения url
  21. Думаю так и сделаю, когда допишу всё и появится время В этом преимущество проекта, на сайте ты можешь посмотреть график по любой выборке, в том числе и исключая низкие уровни и САУ, как например настроено здесь https://wotstat.soprachev.com/analytics/61065e454c2ef064639d3004 Ну а лично мне тут интересно управление высокими нагрузками, для этого конечно надо бд заполнить побольше
  22. Делать привязку к аккаунту я точно не буду, потому что это крайне некомфортно для пользователей, а вот ratelimit думаю есть смысл, хотя бы на бои, потому что выстрелы могут быть с пулемётного танка по 400 за бой Ну и если делать ограничение по ip, нет никакого смысла делать привязку к аккаунту И всё таки, даже детская защита, способная отбить 95% хакеров (детей), лучше чем её отсутствие. Если оставлять только защиту по ip, то будет много желающих 400 раз за 8 минут поспамить. И получается, что делать защиту от детей надо, а делать защиту от хакеров бессмысленно, её всё равно найдут способ обойти, а я не банковский сервис делаю, и деньги не потеряю, так на кой тогда черт париться и усложнять пользователям жизнь
  23. Самое смешное в этой ситуации, что все расчёты вынесены на сервер. Мод всего лишь хукает и отправляет исходные данные Я подумаю как можно открыть проект. Сейчас он состоит из 4х частей 1. Мод который просто получает и отправляет данные 2. C# веб сервер, задача которого получить данные от мода и положить их в бд, попутно досчитав недостающие значения. Его код писал не я, и лично мне крайне не нравится что там получилось, как по мне оверархитектура, разбитая ещё на 3 подпроекта, да ещё и с отсутствием стилистики, но человек хотел попробовать и грех отказываться от бесплатной рабочий силы 3. VueJS сайт 4. NodeJS кеш веб сервер, достаёт данные из бд, все графики считаются напрямую на бд, и этот веб сервер просто формирует SQL запрос и сохраняет его в кеш бд, а ещё занимается всякой дополнительной работой необходимой для обеспечения работы сайта *5. Продет на Unity для визуализации записанной модом инфы, просто потому что самый простой 3д рендер. Вот например выстрел арты по записи трассера. И по хорошему для автономного существования и развития проекта надо публиковать всё, что весьма долго
  24. Ну насколько я понял, он как раз показал, что сервер НЕ оперирует распределение Релея, в отличие от новости на портале. Тк распределение Релея = 0 в центре круга, а в танках оно нулю не равно, что видно из его же графика ниже. Что неправильно, но "Зачем ломать то, что и так приносит неплохой доход" Судя по моим данным, с 2015 года ничего так и не поменялось
  25. Считается в 15 элементарных операций и 3 корня, и считается на сервере. Клиент отправляет только исходные данные static float intersectTime(Vector3 velosity, Vector3 start, Vector3 marker, float gravity) { Vector3 norm = marker - start; double C1 = norm.magnitude * norm.magnitude; double C2 = Vector3.Dot(norm, velosity); double C3 = norm.y * -gravity / 2.0; double time = (-C2 + System.Math.Sqrt(C2 * C2 + 4 * C1 * C3)) / (2.0 * C3); return (float)time; } Ну а дальше по времени находилась точка на траектории трассера, что вообще легко Если так, то согласен, трассёр использовать плохо. Думаю можно считать, что для игрока точка попадания снаряда пришедшая с сервера, это и есть фактический "разброс" выстрела. Что если строить обратную траекторию, как параболу через опорную точку и место попадания, зная скорость снаряда и гравитацию это можно сделать. Так можно избавиться от векторов присланных сервером. Ближе к вечеру попробую сравнить разные способы. Из того что я тестил, и трассер даёт приемлемый результат (визуально)
×
×
  • Create New...