Jump to content
Korean Random

SoprachevAK

User
  • Posts

    318
  • Joined

  • Last visited

  • Days Won

    25

Everything posted by SoprachevAK

  1. Они являются выстрелами, траекторию которых определил рандом. Если не учитывать часть выстрелов, в итоговом распределение получится ошибка выжившего. Понятное дело, что таких выстрелов мало, и на распределение они повлияют не сильно, но например на алгоритмы анализа случайных последовательностей, повлиять могут. Буду собирать и трассёры и точки попаданий если такие есть.
  2. Всё ок, всё работает. Думаю правильно, единственный вопрос остаётся, что делать с выстрелом в скайбокс или на расстояние дальше дистанции стрельбы Там нет ни взрыва ни урона Возможно такая ситуация будет ещё с выстрелом по незамеченному противнику, там вроде бы снаряд просто пропадает, но ещё не тестил Вообще я немного сомневаюсь в использование такого способа, он конечно точнее с точки зрения механик, однако получаются разные способ расчёта для разных типов попаданий Например попадание по танку может отправляться более точно, чем по рельефу, и получится что точность попаданий будет отличаться от точности промахов, а это нехилый камень в огород отсутствия подкрутки Я конечно буду собирать всё и можно будет сравнить, но как показывает практика, если не решить сразу, не решится никогда
  3. Думаю тут всё ещё мало выстрелов, как показали мои эксперименты, среднее для 100 выстрелов может колебаться от 0.36 до 0.43 (погрешность = 7%) для 1000 не пробовал, но допустим в 10 раз меньше, стало быть 0.7% и тогда внутри РУ сервера вроде бы никто сильно и не выбивается Тут есть нюанс доверительного интервала, тк я эти 7% получил на глаз, и хрен знает какова вероятность такой погрешности, так что небольшие отклонения в редких случаях допустимы В принципе методика оценки интересная, надо будет подумать в каком виде её можно внедрить на сайт, но это КТТС, в первую очередь разработка новой версии мода, как только зарелижу, постараюсь договориться с разрабами модпаков, чтоб они добавили. Есть идея дать возможность из других модов добавлять теги на события, а на сайте по тегам фильтровать, получится такая вот бесплатная и достоверная подробная аналитика. Никакая гугл аналитика не скажет с каким разбросом играют на модпаке джова
  4. В этой выборке нет, но во вложениях есть файл с исходными данными в том числе и регионом. Мне кажется сомнительным, что на разных регионах разное распределение рандома внутри одной игры. Это можно будет проверить когда будет больше боёв на других регионах Они гладкие пока в них всего 10 секций, если секуции увеличивать появляется сильный шум, и к тому же, это графики не NA и EU сервера, а одного игрока с NA и однго игрока с EU
  5. Да, сейчас у меня считается круг разброса как будто это снайперский прицел обычного танка, а надо считать так, тогда и с артой всё будет хорошо Вот подогнанный Рэлей с возможностью масштабироваться и двигаться во всех направлениях Тоже так себе. Сейчас такое распределение стало, что и экспонентой плохо аппроксимируется, но когда я начинал тот пост писать, экспонентой было норм Наверное аппроксимацию гистограммы надо вообще просто сплайном искать да и всё. Такое падение на 0.05-0.1 тяжело чем то адекватным описать
  6. HipPoint правильно брать от сюда (мне кажется сомнительным тк тоже связано с трассером, но другого я не нашел)? И ещё назрел вопрос о результатах боя, насколько я нагуглил у картошки нет способа через API их получить и если человек закрыл игру не дождавшись результата, то я его никак не узнаю. А если не закрыл, то результат брать от сюда? мне надо в том числе и во время другого боя, и по завершению текущего, в игре ещё не тыкал, сейчас совсем времени нет в танки играть.
  7. Генератор случайных чисел как в танках Задача. Написать генератор случайных чисел чтоб получить распределение как в танках, каким либо общеизвестным методом оно не описывается. Шаг 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
  8. Знаю. Читал его, по этому и написал согласно общему представлению, а в общем представление патент виноват во всех бедах жизни Понял. Спасибо. Мне конечно уже рассказали что спойлеры лучше не юзать, они вредны для SEO, но пригодится Ну звучит как единственное логичное объяснение, но конечно странно, что распределение выстрелов разное на серверах, но можно будет потом проверить, когда сделаю новую версию мода, напишу Европейским стримерам, может быть попиарят. В новой версии опять таки будет можно, а ещё можно искать корреляции между разбросом, уроном и пробитием. Если предположить, что все выстрелы всегда летят без учёта рандома, всегда в 0.395 от сведения, то для отклонения выборки из 100 выстрелов до 0.43 понадобится 5 выстрелов в самый край, ровно как и для отклонения до 0.36 понадобится 5 выстрелов ровно в центр. Весьма периодичные перепады графика от 0.36 до 0.43, означают разницу в 10 выстрелов полетевших вместо идеального центра в идеальный край. Понятное дело что на самом деле разница будет не в 10 выстрелах центр/край, а в 20+ выстрелах полетевших почти в центр/почти в край Возможно именно это и вызывает ощущение "подкрутки", когда есть серия в которой много выстрелов летят почти в центр, а потом серия, в которой много выстрелов летит в край. Лично для меня всё ещё странно, что бегущее среднее по рандому получись не прямой с шумом, а пилообразным графиком с шумом (я пытался найти ответ, и даже спрашивал знающих людей, но так и не понял) 10к выстрелов -> бегущее среднее по 100 -> фильтр нижних частот И синусоида, так что пики и впадины весьма периодичны
  9. Не доказательство подкрутки Есть различные метрики анализа случайных последовательностей, отличие метрики отдельно взятого игрока от серверного значения может являться следствием подкрути. Сейчас мод умеет записывать траекторию трассера, и считать точку пересечение трассера с маркером прицела на момент перед выстрелом. Точка попадания считается в том месте, где её видит человек из снайперского прицела (разброс -- круг в плоскости параллельной монитору), такой способ не совсем правильный с точки зрения механики разброса, однако близок к нему, и отображает то, что видит человек на мониторе. Хранятся точки в полярных координатах, далее оценивается относительное расстояние (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
  10. Новая тема идеологически вообще о другом моде Тут обсуждались тупые вопросы мол "как сделать" анализ полёта снаряда, там общий сбор различных событий, где траектория снаряда лишь частный случай. Менять общую повестку на 3 странице я не сторонник, как по мне, лучше много маленьких тем, чем одна большая Уже накидал примерную основу нового мода, думаю на этой неделе начну делать бэк, а дальше добавление новых событий будет лишь вопросом питона в моде Название темы поменяю на кликбейт)
  11. Создал тему с планами на 2 версию мода, идеи предложения туда Ну а сюда тогда вопрос, можно ли хоть сколько нибудь достоверно получать информацию о толщине брони в точке по вектору, был раньше модик который показывал приведённю броню и шанс пробития, можно ли такое сейчас считать и можно ли например считать для своего танка, мол какая была вероятность что меня пробили бы Я видел мод для расчёта реальной точки попадания, но насколько я понял это уже после боя, а мне хотелось бы во время игры и чтоб не лагало
  12. Таких выстрелов по всей бд 4%, из них 2.3% с дистанции < 50м, и 0.6% с дистанции < 10м, выстрелы полетевшие вне круга исключены из аналитических графиков. Причин их появления может быть 5 Не совсем корректная формула расчёта точки попадания, сейчас круг параллелен плоскости монитора в снайперском прицеле, а надо немного не так Пулемётные танки, когда на одно нажатие ЛКМ вылетает более 1 снаряда, причём первый летит правильно, а остальные хрен знает как, и прицел можно отвести, и сидение может поменяться Рассинхрон между сервером и клиентом, сейчас я записываю трассер снаряда и току в которую человек целился в момент нажатия ЛКМ, если мод записал снаряд непонятно куда, значит человек на клиенте увидел, что он летит непонятно куда, и как говорил Панков "Это нормально" (когда играл часто замечал, что такое случается при стрельбе в упор, круг сведения не совпадает с местом куда смотрит пушка, и не совпадает с тем, куда попадает выстрел) Выстрелы со старой версии мода на серверном прицеле (был баг с его записью, из за этого распределение арты отличается от верного, тк большинство боёв на арте сделано на старой версии) Неверная отрисовка трассера, в новой версии буду считать по точке попадания Забыл добавить, обновил. https://github.com/SoprachevAK/wot-stat
  13. Было бы круто если бы вы покидали сюда функций для хукания (как ссылку на исходный код) которые могли бы быть интересны, на основе их параметров соберу таблицы Я многого могу просто не знать, например как в текущей версии я не знал, что можно через код включить получение серверного прицела, оставив при этом отрисовку клиентского у игрока, и из за этого писал костыли для работы с любым прицелом
  14. Оглавление (актуально для старой версии < 1.0) Прошлая тема с техническими вопросами Не доказательство подкрутки Генератор случайных чисел как в танках
  15. Мод по сбору внутриигровой статистики Версия 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
  16. Думаю так и сделаю, когда допишу всё и появится время В этом преимущество проекта, на сайте ты можешь посмотреть график по любой выборке, в том числе и исключая низкие уровни и САУ, как например настроено здесь https://wotstat.soprachev.com/analytics/61065e454c2ef064639d3004 Ну а лично мне тут интересно управление высокими нагрузками, для этого конечно надо бд заполнить побольше
  17. Делать привязку к аккаунту я точно не буду, потому что это крайне некомфортно для пользователей, а вот ratelimit думаю есть смысл, хотя бы на бои, потому что выстрелы могут быть с пулемётного танка по 400 за бой Ну и если делать ограничение по ip, нет никакого смысла делать привязку к аккаунту И всё таки, даже детская защита, способная отбить 95% хакеров (детей), лучше чем её отсутствие. Если оставлять только защиту по ip, то будет много желающих 400 раз за 8 минут поспамить. И получается, что делать защиту от детей надо, а делать защиту от хакеров бессмысленно, её всё равно найдут способ обойти, а я не банковский сервис делаю, и деньги не потеряю, так на кой тогда черт париться и усложнять пользователям жизнь
  18. Самое смешное в этой ситуации, что все расчёты вынесены на сервер. Мод всего лишь хукает и отправляет исходные данные Я подумаю как можно открыть проект. Сейчас он состоит из 4х частей 1. Мод который просто получает и отправляет данные 2. C# веб сервер, задача которого получить данные от мода и положить их в бд, попутно досчитав недостающие значения. Его код писал не я, и лично мне крайне не нравится что там получилось, как по мне оверархитектура, разбитая ещё на 3 подпроекта, да ещё и с отсутствием стилистики, но человек хотел попробовать и грех отказываться от бесплатной рабочий силы 3. VueJS сайт 4. NodeJS кеш веб сервер, достаёт данные из бд, все графики считаются напрямую на бд, и этот веб сервер просто формирует SQL запрос и сохраняет его в кеш бд, а ещё занимается всякой дополнительной работой необходимой для обеспечения работы сайта *5. Продет на Unity для визуализации записанной модом инфы, просто потому что самый простой 3д рендер. Вот например выстрел арты по записи трассера. И по хорошему для автономного существования и развития проекта надо публиковать всё, что весьма долго
  19. Ну насколько я понял, он как раз показал, что сервер НЕ оперирует распределение Релея, в отличие от новости на портале. Тк распределение Релея = 0 в центре круга, а в танках оно нулю не равно, что видно из его же графика ниже. Что неправильно, но "Зачем ломать то, что и так приносит неплохой доход" Судя по моим данным, с 2015 года ничего так и не поменялось
  20. Считается в 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; } Ну а дальше по времени находилась точка на траектории трассера, что вообще легко Если так, то согласен, трассёр использовать плохо. Думаю можно считать, что для игрока точка попадания снаряда пришедшая с сервера, это и есть фактический "разброс" выстрела. Что если строить обратную траекторию, как параболу через опорную точку и место попадания, зная скорость снаряда и гравитацию это можно сделать. Так можно избавиться от векторов присланных сервером. Ближе к вечеру попробую сравнить разные способы. Из того что я тестил, и трассер даёт приемлемый результат (визуально)
  21. Так я переживаю не за привязанность данных к человеку, а за среднесерверные показатели, которые можно испортить спамя данными со своего аккаунта. И система с активацией через сайт, как раз и , которые будут хотеть просто играть. И вот людей которые хотят просто и легко играть, в сотни раз больше, чем людей которые хотят бесплатно писать чужой мод. Я привык судить по себе, лично я его взломать не смогу (быстрее чем за несколько часов, а это уже нерационально долго), а имея исходный код или же без шифрования на клиенте, смог бы напакостить за 5 минут, и сделал бы, записав на сервер серию боёв с посланием о плохой защите. Вот мод, вот сайт который в реалтайм отображает состояние бд, более чем уверен, что не сможешь взломать быстрее, чем пропадёт энтузиазм, именно для 95% таких взломщиков и существует защита mod.wotStat_0.0.7.wotmod
  22. Ну я же там в скобочках написал, что если так сделать, найдут модель данных, которая в этот модуль передаётся. Ну или придётся делать функцию Send на 100500 параметров и собирать модель уже внутри, что мне конечно не очень нравится Но если есть жалеющие улучшать и допиливать, тогда подумаю как там можно правильно декомпозировать
  23. Ну слушай, сделать защиту от данных, которые пользователи должны отправлять сами -- невозможно никак. Можно только усложнить жизнь злоумышленникам, это как кодовый замок на сейфе, взломать можно, но если не выкладывать его код в открытый доступ на гитхаб, это будет сильно сложнее. В качестве такого усложнения у меня шифрование отправляемых данных, а значит просто перехватив их, злоумышленник не получит желаемого результата и ему придётся разбираться в декомпиляция мода
  24. Проверю, попробую, добавлю Тут есть проблема: снаряд мог попасть по траектории сильно дальше или сильно ближе EndPos, а мог и в целом улететь очень далеко (например при выстреле по танку на холме, промазать и улететь в скайбокс, тут ещё отдельный вопрос о попадание по скайбоксу) Ты уверен, что плоскость разброса (зелёная полоска на картинке) ортогональна вектору скорости снаряда (производной траектории)? Если да, deviation можно найти аналитически двумя способами 1. найти nearestPoint, как точку траектории EndPos, лежащую на плоскости заданной hitPoint и нормалью = производной от траектории 2. найти пересечение траектории hitPoint с плоскостью через EndPos Я сейчас использую второй способ, но беру траекторию трассера, однако с плоскостью разброса вопрос остаётся открытым
  25. Реквизиты сервера легко можно считать монитором http трафика, ровно как содержание запроса, однако имея эти данные, можно только отправить их повторно, что проигнорируется сервером и никак на статистику не повлияет. Мод от примитивной декомпиляии защищён обфускацией и протекцией Следующий шаг "хакера" найти исходник мода и посмотреть что он там вообще отправляет, и найдя на гитхабе мод, где он увидит и полный запрос и алгоритм шифрования (если вынести алгоритм шифрования в отдельный модуль, то имея модель запроса и результат её шифрования, можно вычислить алгоритм) Думаю такие шаги защиты отбросят 90% взломщиков. Если человек специалист и очень будет хотеть взломать, он взломает при любых защитах, но есть люди которые хотят взломать по приколу, напакостить, сломать статистику, вот от них, я надеюсь, мод защищён
×
×
  • Create New...