Jump to content
Korean Random

SoprachevAK

User
  • Posts

    323
  • Joined

  • Last visited

  • Days Won

    26

Everything posted by SoprachevAK

  1. Так я переживаю не за привязанность данных к человеку, а за среднесерверные показатели, которые можно испортить спамя данными со своего аккаунта. И система с активацией через сайт, как раз и , которые будут хотеть просто играть. И вот людей которые хотят просто и легко играть, в сотни раз больше, чем людей которые хотят бесплатно писать чужой мод. Я привык судить по себе, лично я его взломать не смогу (быстрее чем за несколько часов, а это уже нерационально долго), а имея исходный код или же без шифрования на клиенте, смог бы напакостить за 5 минут, и сделал бы, записав на сервер серию боёв с посланием о плохой защите. Вот мод, вот сайт который в реалтайм отображает состояние бд, более чем уверен, что не сможешь взломать быстрее, чем пропадёт энтузиазм, именно для 95% таких взломщиков и существует защита mod.wotStat_0.0.7.wotmod
  2. Ну я же там в скобочках написал, что если так сделать, найдут модель данных, которая в этот модуль передаётся. Ну или придётся делать функцию Send на 100500 параметров и собирать модель уже внутри, что мне конечно не очень нравится Но если есть жалеющие улучшать и допиливать, тогда подумаю как там можно правильно декомпозировать
  3. Ну слушай, сделать защиту от данных, которые пользователи должны отправлять сами -- невозможно никак. Можно только усложнить жизнь злоумышленникам, это как кодовый замок на сейфе, взломать можно, но если не выкладывать его код в открытый доступ на гитхаб, это будет сильно сложнее. В качестве такого усложнения у меня шифрование отправляемых данных, а значит просто перехватив их, злоумышленник не получит желаемого результата и ему придётся разбираться в декомпиляция мода
  4. Проверю, попробую, добавлю Тут есть проблема: снаряд мог попасть по траектории сильно дальше или сильно ближе EndPos, а мог и в целом улететь очень далеко (например при выстреле по танку на холме, промазать и улететь в скайбокс, тут ещё отдельный вопрос о попадание по скайбоксу) Ты уверен, что плоскость разброса (зелёная полоска на картинке) ортогональна вектору скорости снаряда (производной траектории)? Если да, deviation можно найти аналитически двумя способами 1. найти nearestPoint, как точку траектории EndPos, лежащую на плоскости заданной hitPoint и нормалью = производной от траектории 2. найти пересечение траектории hitPoint с плоскостью через EndPos Я сейчас использую второй способ, но беру траекторию трассера, однако с плоскостью разброса вопрос остаётся открытым
  5. Реквизиты сервера легко можно считать монитором http трафика, ровно как содержание запроса, однако имея эти данные, можно только отправить их повторно, что проигнорируется сервером и никак на статистику не повлияет. Мод от примитивной декомпиляии защищён обфускацией и протекцией Следующий шаг "хакера" найти исходник мода и посмотреть что он там вообще отправляет, и найдя на гитхабе мод, где он увидит и полный запрос и алгоритм шифрования (если вынести алгоритм шифрования в отдельный модуль, то имея модель запроса и результат её шифрования, можно вычислить алгоритм) Думаю такие шаги защиты отбросят 90% взломщиков. Если человек специалист и очень будет хотеть взломать, он взломает при любых защитах, но есть люди которые хотят взломать по приколу, напакостить, сломать статистику, вот от них, я надеюсь, мод защищён
  6. Есть повторяемая проблема обфускации кода. Шаги: Иерархия папок: -modTest --res\scripts\client\gui\mods ---mod_test.py --meta.xml mod_test.py: # -*- coding: utf-8 -*- print('Hello world') Через PjOrion делаю Bytecode->Obfuscate->Compile py-file и выбираю mod_test.py >>> Obfuscating... Please wait the completion message! >>> Compile obfuscated file 'mod_test.py' [0.03 seconds] Собираю в .wotmod файл, кидаю в mods чистого клиент танков. Запускаю игру, в лог выводится /------------------------------------------------------------------------------------------\ WorldOfTanks(x86) 0.0.0.0 (compiled at 07:18:44 Jul 8 2021) starting on Sat Jul 31 02:15:09 2021 2021-07-31 02:15:09.864: INFO: [Config] Command line: C:/Games/World_of_Tanks_RU/win32/WorldOfTanks.exe "" 2021-07-31 02:15:11.778: INFO: [SOUND] Start loading Main task 2021-07-31 02:15:11.778: INFO: [SOUND] Start loading Mod task 2021-07-31 02:15:11.779: INFO: [Scaleform] Create Scaleform Manager... 2021-07-31 02:15:11.854: INFO: Scaleform initialized 2021-07-31 02:15:11.867: INFO: [Scaleform] Scaleform Manager created. 2021-07-31 02:15:11.867: INFO: Unbound initialized 2021-07-31 02:15:12.469: INFO: WOT-Transmission initialization completed! 2021-07-31 02:15:12.471: INFO: You are in the __main__ module, use a WOT-Transmission menu command to work with the client 2021-07-31 02:15:12.472: INFO: ===================================================================================== 2021-07-31 02:15:12.568: TRACE: monkeyPatchOpen: BWUtil.monkeyPatchOpen: Patching open() True 2021-07-31 02:15:12.570: INFO: [Config] Default encoding set to utf-8 2021-07-31 02:15:12.572: TRACE: revertPatchedOpen: BWUtil.revertPatchedOpen: Reverting open() 2021-07-31 02:15:12.610: INFO: [PY_DEBUG] Release Client - Content Type: sd 2021-07-31 02:15:12.610: INFO: [PY_DEBUG] Checking C:/Games/World_of_Tanks_RU/res_mods/1.13.0.1/: mods not found 2021-07-31 02:15:12.610: INFO: [PY_DEBUG] Checking C:/Games/World_of_Tanks_RU/mods/1.13.0.1/: mods found 2021-07-31 02:15:12.611: INFO: [PY_DEBUG] Mod package 'c:/games/world_of_tanks_ru/mods/1.13.0.1/mod.testmod_0.0.1.wotmod' loaded 2021-07-31 02:15:14.530: INFO: [Scaleform] Create GUI Component: 'empty' 2021-07-31 02:15:14.530: INFO: [Scaleform] Change Owner on GUI Component: 'empty' -> 'loading_screen.gui' 2021-07-31 02:15:14.542: INFO: [Scaleform] Create GUI Component: 'FlashGUIComponent' 2021-07-31 02:15:14.542: INFO: [Scaleform] Change Owner on GUI Component: 'FlashGUIComponent' -> 'gui/flash/gameLoadingApp.swf' 2021-07-31 02:15:14.543: INFO: [gui.Scaleform.game_loading] Build: RELEASE 07:18:44 Jul 8 2021. Version: 2.8.0 2021-07-31 02:15:14.544: INFO: [gui.Scaleform.game_loading] App Startup 2021-07-31 02:15:14.616: DEBUG: [helpers.uniprof.regions] Region is entered: label=offline.game_loading, color=0xCE2606 2021-07-31 02:15:14.730: INFO: [gui.Scaleform.game_loading] Registering graphics settings 2021-07-31 02:15:14.747: INFO: [gui.Scaleform.game_loading] Preloading Resources 2021-07-31 02:15:23.843: WARNING: [web.web_client_api] Do not use "required" and "default" at the same time! 2021-07-31 02:15:23.844: WARNING: [web.web_client_api] Do not use "required" and "default" at the same time! 2021-07-31 02:15:23.845: WARNING: [web.web_client_api] Do not use "required" and "default" at the same time! 2021-07-31 02:15:23.846: WARNING: [web.web_client_api] Do not use "required" and "default" at the same time! 2021-07-31 02:15:24.022: INFO: [Scaleform] Create GUI Component: 'FlashGUIComponent' 2021-07-31 02:15:24.022: INFO: [Scaleform] Change Owner on GUI Component: 'FlashGUIComponent' -> 'gui/flash/waitingTransitionsApp.swf' 2021-07-31 02:15:24.745: INFO: Hello world После чего игра крашится без каких либо дополнительных ошибок. Тот же самый мод скомпиленный без обфускации игру не крашит, hello world выводит В чём может быть проблема?
  7. Если у кого то будет интерес к моду и желание чёнить допилить, могу пригласить в гитхаб. Публичным делать не буду из соображений защиты от мамкиных хацкеров, которые захотят заспамить сервер левыми пакетами
  8. Весьма интересная инфа, спасибо. Однако, сведение который отрисовывается в игре, и которое по факту на сервере весьма разные вещи. Моя задачам -- определить насколько выстрел отклонился от маркера относительно разброса на момент выстрела. Я вижу 2 пути: Запоминать состояние маркера на момент выстрела и в момент попадания искать пересечение плоскости маркера с лучом от опорной точки до попадания Запоминать состояние маркера на момент выстрела, хукать трасер, после чего искать пересечение параболы с плоскостью маркера. Так я делаю сейчас, не самый простой способ, зато даёт больше информации для дебага Где плоскость маркера это плоскость ортогональная направлению от маркера к опорной точки танка Ну и вопрос в том, насколько это корректно для всех типов танков.
  9. Ну тут вопрос в архитектуре и в его задумке. Если идея юзать C или C++ обусловленна просто хотелкой, то это конечно ошибка, никто не разрабатывает такие комплексные системы привязываясь к одному языку. Если вопрос в совместимости с оборудованием и производительности, то Юнити компилит C# в IL код, Burst проходится по нему и заменяет циклы на векторные вычисления на ассемблере, после чего il2cpp конвертирует IL code в C++ и компилирует этот C++ в бинарник. По производительности написать такой же код сразу на плюсах практически невозможно Из своих знаний, серверная архитектура таких игр выглядит так Есть мастер сервер который распределяет нагрузку и отвечает за связь с клиентом Есть игровой сервер который считает непосредственно саму игру Мастер сервер собирает арену и запускает для этой арены инстанс игрового сервера, который уже отвечает за просчёт одной конкретной арены. Конкретно у BigWorld инстансы делят не полные арены, а отдельные части внутри одной карты, балансирую эти части по нагрузке Есть ещё отдельный сервер для чата и экономики Из С# можно вызывать extern "C" функции, но твой мастер сервер можно просто общаться с инстансом для арены через любой протокол, хоть через iostream текст отправлять, в одну сторону действия игроков, в другую стороны просчитанное состояние мира. Если у тебя есть рабочий способ общения с клиентом, а как мне кажется именно это самое сложное, то почему бы не попробовать. Сетевую часть будет тяжело, тк писать нормальный предикшен с учётом физики весьма нетривиальная задача, но на неё можно положить на ранних версиях
  10. Клиент оставить (рендер, оптимизация, ui, возможность модов, пиар)
  11. @Dragon armor Неужели тема живёт и всё ещё разрабатывается из последних нескольких страниц понял, что проблема в сервере как в процессе обсчёта арены, по сему предлагаю заюзать в качестве такого сервера -- Unity3D, полноценный игровой движок, на котором можно считать и физику и рейкасты и любую другую игровую логику, имеет сервер билд (опция специально для серверов, компилируется в консольное приложение без графических модулей), есть ESC + Burst система, которая на обычном компе в 60фпс считает Havok'ом 30к физических тел. Если со стороны клиентской части нет проблем, могу предложить свою помощь с Unity, опыт у меня там большой. Хотя бы попробовать демку и если всё ок, можно будет в танковое ММО РПГ развить, с прокачкой и донатами)
  12. @MoD @StranikS_Scan, за материалы спасибо, однако я ооочень сомневаюсь, что ленивые программисты в 2012 году писали для артиллерии новую уникальную механику, причём весьма сложную с точки зрения математики. Я на выходных тестировал, и у меня появилось предположение, что берётся координата маркера, на ней строится плоскость перпендикулярная вектору от САУ до маркера, на этой плоскости строится круг разброса и в нём рандомится точка, через которую пойдёт траектория снаряда (пока что ровно так же как и у обычных танков), а уже потом, в арт прицеле, этот круг проецируется на рельеф продолжая траекторию трассера. Если так, то это даже не конус получается, это получается банан (не знаю как по науке называется конус с параболической осью) Если так, то на сервере вообще не надо считать ничего, там просто дискретно летит трассер по простой траектории пока не пересечётся с препятствием, причём арта ничем не отличается от других танков в этом случае в таком случае полностью игнорируются пулемётные танки, хотя они у меня и так не работают, потому что корректно считывать разброс для них я не смог И надо ещё проверить когда именно вызывается функция, и не считаются ли всякие тараны, пожары или расходники DamageFromShot'ом, потому что я тут недавно узнал, что дымы в спецрежимах являются трассером, который принадлежит игроку который их запустил Вообще да, решение простое и скорее всего действенное, о словаре я чёт не подумал)
  13. Тыкался тут тыкался и уже сам начал сомневаться, новая версия покажет, возможно реально 1 в 1 как у обычных танков, а не работало из-за другого бага Конечно это было бы интересно, однако я не нашел как связать нанесённый урон с выстрелом, что в данной концепции хотелось бы. Типа список выстрелов и рядом с каждым результат выстрела. def showTracer(self, attackerID, shotID, isRicochet, effectsIndex, refStartPoint, velocity, gravity, maxShotDist, *a, **k) def showDamageFromShot(self, attackerID, points, effectsIndex, damageFactor, *a, **k) showTracer я юзаю для записи выстрела, showDamageFromShot можно было бы использовать для подсчёта дамага, но к сожалению у неё нет shotID и я не нашел как связать по другому. Так что отложу на неопределённое время, если будет большой интерес к модику, обновлю и допишу
  14. А я да, сама актуальность) О подписях к кругам много кто говорил, но я постоянно ленюсь добавить их красиво, некрасиво добавлять нет смысла, тк понять какой круг за что отвечает можно потыкав галочки в настройках Квантиль считаю не теоретическую, а практическую по текущей выборке. Например выбрано 100 попаданий, сортирую их по расстоянию до центра относительно разброса на момент выстрела, и беру радиус от выстрела с индексом желаемой квантили. Для 60% квантили будет R = shots.sort()[count * 0.6], что означает: 60% выстрелов попали в радиус <= R при нормализации разброса на момент выстрела. Круги не помню как раньше, а сейчас по умолчанию включен 1 — базовый разброс на момент старта боя. Для группового выбора выстрелов отображается ещё круг выбранной квантили. Ну и советы с критикой всегда важны. Сейчас вот появилось время/желание и запилил аналитический раздел, можешь глянуть мб будет интересно. Взглянув на график распределения снарядов от класса техники возникает предположение, что я неправильно считаю арту https://wotstat.soprachev.com/analytics/60fa42ff8149f07093332402 Собственно внимание вопрос, как к человеку, куда лучше знакомому с игровыми механиками, как расположен конус разброса у САУ? Кажется что не так, как у обычных танков, и если да, то ещё от какого расстояния у них зависит фактический размер круга разброса? Сейчас я нахожу точку пересечения траектории трассера с плоскостью заданной нормалью от маркера до пушки в момент выстрела. Для арты это не работает.
  15. @StranikS_Scan а почему скорость трассера меньше ттх скорости снаряда? Ты в своём моде делишь её на 0.8, что видимо было посчитано эмпирически, тк в движке я никаких упоминаний об этих магических константах я не нашел ps. Если интересно вот что получилось, пока в альфа версии https://soprachev.com/wot-shoot/
  16. Ну если предположить, что ProjectileMover.add получает refVelocity достаточную для вычисления траектории, то да, остальное вроде бы гладко И судя по всему это то что надо
  17. Ну в твоём моде с артой есть серверный тангенс разброса Вместо нормального можно брать среднее по всем боям, думаю оно будет весьма точным Это проблема, я согласен, однако я и планировал искать пересечение с плоскостью заданной нормалью от прицела до пушки, но как посчитать траекторию я не представляю, но тогда интересно как рисуются трассеры, ведь для их отрисовки надо в момент выстрела уже точно знать траекторию проходящую через плоскость разброса Спорно, большинство выстрелов делается в стоячем положение с полным или почти полным сведением, что нивелирует рассинхронизацию, и остаётся научиться считать траекторию, либо засчитывать лишь те выстрелы, у которых F(скорость полёта снаряда, расстояние от прицела до попадания) < X, где функцию F и константу X взять с потолка Это вроде бы и так показывается в послебоевой статистике, однако из 20 выстрелов обидно иметь не 5 попаданий по танку, а 15 промахов когда улетело в край разброса, обидны выстрелы, которые могли бы попасть, если бы не рандом В заключение остаётся вопрос о вычисление траектории
  18. Ну тут вопрос в том как эту информацию отображать, я хочу сделать визуальную инфографику, которая будет по списку боёв показывать точку попадания каждого выстрела относительно круга сведения, будет опция переключение на нормализованное отображение, когда круги сведения приводятся к одному размеру, будет отображаться суммарный круг, где на одной картинке будут все точки попаданий выбранных боёв, на ней будет 50% квантиль нормального распределения и 50% квантиль фактического, по их взаимному расположению можно будет однозначно определить везло или нет в выбранных боях У многих стримеров горит с того как не летят снаряды и им было бы интересно чем то оправдать своё горение, ровно так же, как многие стримеры юзают модик показывающий точки попадания по танку после боя, пару стримеров которых я спросил с аудиторией 100к-150к, подтвердили интерес За модики спасибо, из них суммарно я смогу взять координату пушки до выстрела и координату попадания как по ландшафу, так и по технике, однако под вопросом остаётся способ получения текущего разброса танка в момент перед выстрелом, тк далеко не все выстрелы производятся с полным сведением И если не сложно, ткни в мануал как запустить исходники твоих модов, через .wotmod работают, через орион и exec, import/reload scripts from file/folder выдаёт ошибки по типу ImportError: No module named hook, тесторый скрипт print(BigWorld.player().name) работает
  19. Появилась идея собрать статистику по "везентю" стрельбы. Веб сервер, мат статистика, сайт с отображением для меня легко и просто ибо умею. Встаёт вопрос о том как получить инфу от клиента, как то год назад уже писал модик, крайне неприятный опыт, так что проще всего спросить совета, а не рандомно тыкаться в исходник Собственно мне нужно: Хук в старт битвы Получение общей инфы (ник игрока, техника, пушка, её урон и продибие по типу снарядов, разброс с учётом перков и модулей) Хук в момент выстрела Координата маркера прицела Текущий разброс (надеюсь он в хук выстрела ещё не разбрасывается) Танк на который наведён прицел (буду брать хп шотных совков) Тип снаряда которым произведён выстрел Хук? в момент попадания снаряда в коллайдер (видел как то на форму такой коллбэк, но сейчас найти не получается) Координата куда снаряд попал Инфа о попадание если попал в танк (тип попадания (пробитие/рикошет/не пробил), урон) Буду очень признателен за помощь, потенциально модик интересный, обговорил с некоторыми стримерами и они готовы информационно поддержать, так что данные для анализа будут
  20. А как ты в итоге рисуешь прямоугольники? или это уже машинное зрение дорисовывает
  21. А где такие исходники заваливаются?) я бы там остальные посмотрел. Это не совсем то что надо, тут переопределяют модельки для созданного экземпляра Vehicle, а мне надо из моделек собрать свой, ну и чтоб башня располагалась на корпусе, а пушка в башне. Были такие модики которые рисовали модельки за кругом отрисовки, и были которые рисовали модельки в месте где противник пропал из засвета.
  22. @StranikS_Scan , Спасибо большое! Пойду изучать Так и поступил, однако в нетипизированном языке сигнатура функции говорит не очень много. А Scripting Api подразумевают к каждой сигнатуре ещё и небольшое описание, хотя бы что делает и что принимает, не всегда это очевидно по названию Как пример тот же StaticObjectMarker3D и BigWorld.Model Ещё раз благодарю за такой подробный и развёрнутый ответ. Через MarkerFactory уже пробовал создавать, но в бою ничего не отображается, ошибок в консоле тоже нет import BigWorld from gui.Scaleform.daapi.view.battle.event.markers import MarkerFactory, EventAreaPointUIMarkerController RADIUS = 10000 markerID = 0 ctrl = EventAreaPointUIMarkerController() ctrl.init() marker = MarkerFactory.createMarker((0, 10, 0), RADIUS, isVisible=True) ctrl.addMarker(markerID, marker, RADIUS) ctrl.showMarkersByObjId(markerID) Через _StaticWorldMarker2D как в MarkerFactory тоже не работает import BigWorld from bootcamp.BootcampMarkers import _StaticWorldMarker2D RADIUS = 0 markerID = 1 DefaultMarkerStyle = {'offset': (0, 10, 0), 'shape': 'arrow', 'blindShape': 'arrow'} marker2d = _StaticWorldMarker2D(markerID, DefaultMarkerStyle, (0, 0, 0), RADIUS)
  23. Я шарю в программирование, но для танков пишу что от впервые. Движок декомпилировал, что то общее поизучал. Возникает риторический вопрос, если у нас есть сигнатуры всех функций, то почему нет никакого фан Scripting API, где каждый мог бы добавить своё описание? Как правильно сделать создание 3д модельки танка? Пока что рабочая идея tutorial.control.battle.functional.StaticObjectMarker3D({'path': r'vehicles/russian/R56_T-127/normal/lod4/Hull.model'}, (0, 0, 0)) Однако части танка (корпус башня пушка) это разные модельки, так ещё и не во всех лодах они есть. То есть корпус может быть в 0, 2 и 4 лоде, а у другого танка только в 3. И перебирать не очень круто. Ещё проблема в том, что pivot у башни и корпуса в разных точках, то есть нельзя просто так взять и заспавнить все чатси танка в одной координате. Ещё нашел scripts/client/vehicle_systems/model_assembler.py, но пока что не смог его применить никак. У такого способа создание модельки можно задать position и yaw, но как же наклоны в других плоскостях, или же можно как то прилепить модельку к террейну (пока что пытаюсь создать просто в своих координатах) Исходник мода теней пропавших из засвета танков помог бы, но такого я не нашел Ещё вопрос как сделать обводку этой созданной модельки, это должно быть возможно, тк во время ивентов в ангаре обводятся интерактивные модельки Как создать 2д маркер в 3д пространстве _StaticWorldMarker2D(self, objectID, markers2D, data, position, distance) принимает непонятные мне параметры. Если ткнёте в пример буду очень благодарен Если обобщить все вопросы, то с технической точки зрения мне пока что нужно сделать тень своего танка которая будет например с небольшим оффсетом повторять действия моего танка в бою, будет обведена и обладать маркером Ну а нафига мне это надо Заранее очень благодарен за ответы! Самому разбираться в исходниках сложновато
×
×
  • Create New...