Jump to content
Korean Random

GPCracker

User
  • Content Count

    2,827
  • Joined

  • Last visited

  • Days Won

    61

Everything posted by GPCracker

  1. Для работы прицела необходимо изменить стандартную текстуру (точнее векторное изображение) на свою (отредактировать флэш) и закинуть скрипт для запрета масштабирования. От XVM мод никак не зависит, просто XVM тоже патчит этот файл (a.k.a. конфликтная точка модов), поэтому для использования данного мода совместно с XVM необходимо редактировать minimap.swf из XVM, но ничто не мешает отредактировать любой файл миникарты любого мода, должно работать. В первом посте есть инструкция (точнее в архивах в исходниками).
  2. Классный мод, только фпс немного просаживает... Оптимизировать надо...
  3. Классная идея... только масштабы как у XVM... тут не человек, а команда разработчиков нужна...
  4. Ну вообще-то как-бы за рисунок прицела отвечает SWF-файл, а скрипт нужен для "убирания масштабирования". Вот тебе народ и советует SWF качнуть от Дакасика, а скрипт взять из архива Юши. Просто нужно выборочно файлы из архивов копировать.
  5. Не совсем верно. У тебя полюбому вываливается ошибка типа UnicodeDecodeError: 'ascii' codec can't decode byte 0xcc in position 0: ordinal not in range(128)Дело в том, что это не utf-8 не может закодировать строку, а ASCII не может ее декодировать... Просто основная таблица ASCII - это 128 символов. 128-255 - это региональные дополнения, для региона может быть несколько с разными символами. У каждой такой расширенной (128 стандартных и 128 дополнительных символов) таблицы есть свое название (например cp866, она же DOS, windows-1251 и т.д.)Не нужно путать ASCII (там реально 128 символов) и ANSI (256 символов) (ANSI насколько я помню, пруфлинк - это кодировка системы по умолчанию) В одном из новых XML-конфигов HEX-редактором подцепил кусочек (байты windows-1251): s = 'CCEEE4E8F4E8EAE0F2EEF0202D20E4EEEBE6E5ED20E7E0E6E8ECE0F2FCF1FF20EFE5F0E5E420EDE0E6E0F2E8E5EC20EEF1EDEEE2EDEEE920EAEBE0E2E8F8E82E'.decode('hex') print s.encode('utf-8')Так вылетает ошибка.А так в орионе все выводится нормально (русский текст): s = 'CCEEE4E8F4E8EAE0F2EEF0202D20E4EEEBE6E5ED20E7E0E6E8ECE0F2FCF1FF20EFE5F0E5E420EDE0E6E0F2E8E5EC20EEF1EDEEE2EDEEE920EAEBE0E2E8F8E82E'.decode('hex').decode('windows-1251') print s.encode('utf-8')Немного другой пример: print 'D09AD183D09AD1832C20D081D0BFD182D0B021'.decode('hex')Байты взяты из файла в UTF-8. В орионе выводится русский текст.Вот только блин логику методов encode и decode я пока полностью понять не могу... Одна из кодировок известна (начальная - decode, конечная - encode), а другая? От сырости появляется внезапно...
  6. Когда-то давно (точнее 3-4 патча назад копал эту тему, конкретно отображение танков на миникарте вне зоны видимости). Напрягало, что быстро двигающийся танк вне "квадрата отрисовки" двигается на миникарте рывками (а хотелось плавно), то есть его позиция обновляется не так часто... Позиции танков вне квадрата отрисовки прикручены каким-то неведомым способом по системе "костыли-велосипеды", ибо для клиента этих танков попросту НЕ СУЩЕСТВУЕТ. Потому и обновляется не так часто, ибо стрелять по ним вряд ли кто-то будет, определяя по миникарте их координаты. Однако, между координатами миникарты и реальными в пространстве существует связь (а как иначе рисовались бы значки танков?) Значит можно и из значка обратно конвертнуть позицию, насчет высоты не знаю, но X и Z точно можно (приблизительно по крайней мере, если не точно) (для тех кто не знал - Y вертикальная координата в BigWorld'e) Если пренебречь наличием мостов и иных "крыш" над танками, то высоту можно определить при помощи коллижн-теста "вертикальная прямая" (python в помошь, да тут вообще чисто питона хватит и модели-маркера). На три координаты модельку спавнить... только не стоит забывать, что максимальное расстояние выстрела НЕ арты - приблизительно 720м (ТОЧНО СКАЗАТЬ НЕ МОГУ) - чуть больше диагонали квадрата, так что лупить через всю карту все равно не получится. Некоторые танки (низкоуровневые пулеметы) - 300м. Но стрелять чуть дальше видимости вполне можно, плюс противник вряд ли ответит, даже если ты в свете. Пробитие правда малое будет... но фугасу и кумулятиву на расстояние... Но что такой мод можно реализовать (модель-маркер на позиции танка), я даже не сомневаюсь. Так что вполне вероятно, что он уже существует. Upd. Собственно как и предполагал - "костыли-велисипеды" def __getEntryMatrixByLocation(self, id, location): m = None matrix = None if location == VehicleLocation.AOI: m = Math.WGTranslationOnlyMP() matrix = BigWorld.entities[id].matrix elif location == VehicleLocation.AOI_TO_FAR: m = Math.WGTranslationOnlyMP() matrix = Math.Matrix(BigWorld.entities[id].matrix) elif location == VehicleLocation.FAR: matrix = Math.Matrix() pos = BigWorld.player().arena.positions[id] matrix.setTranslate(pos) m = Math.WGSmoothTranslationOnlyMP() m.source = matrix return m def updatePositions(self, indices, positions): self.__positions.clear() lenPos = indices and len(positions) lenInd = len(indices) if not lenPos == 2 * lenInd: raise AssertionError indexToId = self.__vehicleIndexToId for i in xrange(0, lenInd): if indices[i] in indexToId: positionTuple = (positions[2 * i], 0, positions[2 * i + 1]) self.__positions[indexToId[indices[i]]] = positionTuple self.onPositionsUpdated()Как видно из кода, вертикальная координата не передается... Так что коллижн-тест в помощь def collideStatic(startPoint, endPoint, collisionFlags = 128): collisionPoints = BigWorld.wg_collideSegment(BigWorld.player().spaceID, startPoint, endPoint, collisionFlags) return collisionPoints[0] if collisionPoints is not None else None
  7. На оф. форуме подкинули идею. Подсвет контуров ТРУПОВ за препятствиями на некотором расстоянии в некотором секторе по курсу танка. Дабы на лт не влетать в стоящие за холмом/в кустах трупы (типа камикадзе). Не знаю пока, получится ли реализовать, но в общем как вам такая идея?
  8. Эта идея была на оф. форуме. Там один из модераторов высказался, что если появится, скорее всего забанят... Не особо понятно за что, если Тут еще один момент... чтобы мод работал, он должен быть у большинства игроков + промахи арты при реализации от дамажки учитываться не будут. Есть альтернативная идея - реализовать детектор сплеша (непонятно правда условие его "отрисовки"). Если сплеш разорвался поблизости - арта отстрелялась, если вне зоны обзора - сначит не сведена... А если она стоит и тебя персонально ждет? И по сплешу идентифицировать арту не получится... Она не светится, по трассеру выстрел не проконтролишь, как с обычным танком (а вы думали как работает мод на перезарядку противников?). Так что мне кажется реализовать такой мод технически вряд ли получится, слишком мало информации приходит к конкретному игроку.
  9. Раньше ID командного канала валялся в from ChatManager import chatManager chatManager.battleTeamChannelIDсоответственно, мод подменял это значение ID взводного канала. ВСЕ сообщения перенаправлялись во взвод. Теперь ID вычисляется на лету. Потому и старый мод чинить неэффективно - изменилась база, причем сильно... Возможно, с этим и связана неработоспособность хоткеев. Скрипты переделали, флеш - не успели... Или оно изначально не работало. Фиксить нужно однозначно SWF. Альфа-версия мода на перенаправление быстрых команд реализована где-то на 80%. Осталось дописать проверку "взводности" игрока (при активации мода), ну и так некоторые мелочи. Проблема в отсутствии нормального компа, так что бета будет скорее всего только в сентябре. Если вообще будет (не факт что реализация заработает).Реализовывать перенаправление пользовательских сообщений не вижу смысла, нужно просто починить хоткеи. ИМХО работающее Ctrl+Enter (всем) и Shift+Enter (взводу) - самый удобный вариант из всех возможных. Я не умею работать с флешем, но наводку дам. За изменение получателя по хоткею отвечает скрипт Sprite673, поиск по changeReceiverByKeyMod() в battle.swf по данным Sothink SWF Decompiler.
  10. Ну обфускатор и так можно найти в инете. Но он "сбивает" только имена локальных переменных, общий алгоритм все равно видно. Декомпилится нормально, но читать и понимать тяжело, поскольку вместо имен переменных "абракадабра". А протектор базируется на делении скомпилированного байт-кода на участки, перемешиванием с сохранением порядка выполнения (google: goto) и "забивании" пустых мест между участками "мусором". Сбивает с толку декомпилятор, по скольку тот не понимает как декомпилить "мусор". Ну иногда делают попадание при невыполнимом условии в "мусор" (типа если 0 равен 1). Часто комбинируется с "сериализацией и вложением". Помогает защитить алгоритм от "копи-пастинга", но правда и мешает "поднять из пепла" брошенный мод. Защиты такого типа выпиливаются при помощи "трекера" и забивания пустых мест NOP'ами. Такая защита используется в основном при написании "платных читов модов", чтобы осложнить написание "халявной" версии. На бесплатных продуктах ставить защиту, ИМХО, бессмысленно. Плюс такая защита требует вычислительной мощности при старте игры и сильно замедляет загрузку клиента. Особенно если модов много. Вообще байт-код питона - это что-то наподобие ассемблера, только более высокого уровня.
  11. NooBooL, спасибо, вроде всё правильно. Очевидно, что функционал Shift+Enter предусмотрен, но почему-то не работает... Только вот в момент ввода сообщения клавиатура перехватывается флэшем, и ловить c нее что-нибудь не получится... Дыра скорее всего лежит в Battle.swf, но я во флеше не шарю. Было бы неплохо самому потестить, жаль комп не тянет танки... Вся проблема в этом "захвате клавиатуры", однозначно проблема лечится только правкой SWF. В моде XVM этот файлик вроде тоже патчат, м.б. разработчики XVM смогут пофиксить баг?
  12. Так что насчет Shift+Enter (во взвод)? Работает? "Сочетания клавиш" "Полезная инфа" Значит не фикс... Хотя в 0.8.11 такого бага не встречал. Логи питона сохранились? Смотрел?
  13. Хм... Не знаю тогда, с чем это может быть связано... Может с виндой/фреймворком...
  14. Я пока сижу на калькуляторе, танки тут запустить можно, но в бой заходить не вариант... В моем предыдущем посте #25 я выложил кусок кода GUI/messenger.xml. В подсказках написано, что Shift+Enter отправляет сообщение взводу. [_(#controls:keyboard/sequence_shift_enter)] - _(#messenger:battle/toolTips/withSquad) Эта фича работает или нет? Если нет, то будет ли работать, если 161 (см. спойлер поста #25) заменить на 16 - код Shift'a (17 - Ctrl, см. "as3 key codes")? P.S. Для замены 161/16 скачать wotTools, расшифровать указанный XML, закинуть его в папку с модами (res_mods/0.9.2/gui). P.S.S. ID командного канала теперь вычисляется непосредственно перед отправкой очередного сообщения (возможно это фикс бага, когда сообщения в чат иногда не отправлялись, до перезапуска клиента или захода в другой бой). Поэтому починить старый мод не получится, там придется переписывать 90% кода, проще новый написать. Нашел точку для перехвата отправки команд в чат, попробую что-нибудь накодить...
  15. print '03f30d0a5ff1d85363'.decode('hex') print 'Check'В родной консоли питона все выводится нормально. А тут не выводится ничего. Даже 'Check'. Вывод всего скрипта вешается намертво. Приходилось перезапускать клиент танков. Когда сообразил в чем дело, через encode('hex') все заработало... Это я так понимаю проблема Delphy? Попробуй реализовать что-то вроде '\x03\xf3\r\n_\xf1\xd8Sc'Что-нибудь, главное чтоб не вешалось...
  16. Под 9.2 пока могу только попробовать перекомпилить версию 0.0.1 Beta, без дебага (не на чем дебажить). Нормальная версия будет где-то в начале сентября, когда у меня будет нормальный комп. 0.0.1 Beta, перекомпилированная под 0.9.2. Без дебага (изменена только требуемая версия клиента и все). Edge Detect Mod.zip
  17. В сентябре, если будет время, займусь. Основная логика мода мне известна, необходимые функции для запроса идентификаторов каналов чата тоже вроде имеются. Под что делал функции уже не помню, но вроде должно было остаться.P.S. Скриптовые моды перестали работать в 0.8.11 из-за обновления версии питона с 2.6 до 2.7. Там разный байт-код, поэтому скомпилированные файлы несовместимы между этими версиями (Пруфлинк). А этот мод с защитой, его просто так не перекомпилить. То, что выложил ТС в первом посте - исходный мод со сломанной защитой. М.б. небольшое проседание фпс из-за callback(). Во взводный чат отправить Shift+Enter? Работает? GUI/messenger.xml Upd. Еще раз прочитал цитату... все сообщения перенаправляются из командного чата во взводный (а надо только "быстрые команды")?
  18. Под 9.2 пока могу только попробовать перекомпилить версию 0.0.4 Beta, без дебага (не на чем дебажить). Нормальная версия будет где-то в начале сентября, когда у меня будет нормальный комп. Еще раз скажу, что сложно устранять баги, если нет точной информации, где возникает этот баг. Поэтому, комментарии типа "скачет прицел" - это не описание проблемы. Описание - это подробно в каких случаях (что нужно сделать, чтоб получить баг), скрины и python.log. Все вместе. Описание проблемы должно быть таким, чтобы баг можно было ПОВТОРНО ВОСПРОИЗВЕСТИ или хотя-бы понять в каком методе он возникает. Просто AAS - не такой уж и маленький мод (около 700 строк кода), если для нормальной работы его приходится разбивать на несколько файлов. И искать в нем "причину скачков прицела" - все равно что искать иголку в стогу сена. P.S. Возможно, скачки прицела связаны со сбросом захвата цели. В момент сброса пушка начинает подниматься вверх (а не сразу рывком), поэтому в этот момент сведение может немного проваливаться. Возможно поможет увеличение таймаута сброса цели. Будет норм комп, проверю эту версию. 0.0.4 Beta, перекомпилированная под 0.9.2. Без дебага (изменена только требуемая версия клиента и все). Advanced Aiming System.zip
  19. Обновления будут не раньше конца августа - начала сентября, сейчас не на чем дебажить.... Если больше багов в моде не найду, то, скорее всего, следующая версия будет релизом с косметическим апдейтом. Возможно, сразу обнова под 0.9.2. Версия 0.0.4 Beta тестировалась на Рудниках. Брался МС1, ставился на горку на фоне неба, по нему брался захват (в ручном и автоматическом режиме), после этого переводился на небо или землю ближе. Никаких серьезных "провалов" сведения не было. Пиксель-два не больше. Это практически не заметно. Скорее всего имеет место какая-то ошибка в других хуках на методы, используемые в этом моде. Еще раз по секрету скажу, что все хуки на метод в питоне выполняются последовательно и ошибка в хуке одного мода выбивает работу всех остальных модов, хуки которых выполняются после. Мод написан таким образом, что хуки мода выполняются последними или где-то ближе к концу. Поэтому, Stare, маленькая просьба, скинуть лог питона, взятый после боя с багами. Это файлик python.log в корневой папке игры. Скрины с "багом" тоже приветствуются.
  20. Накидал немного... с танком проще, есть атрибуты, а вот с боекомплектом и модулями... их состояние нигде не сохраняется по ходу... только изменяется по команде сервера... так что там нужно ставить хуки на методы. Модули из DamagePanel, снаряды - consumablesPanel import BigWorld, Math #Данные о технике playerVehicle = BigWorld.entity(BigWorld.player().playerVehicleID) if playerVehicle is not None: position = playerVehicle.position direction = Math.Matrix(playerVehicle.matrix).applyVector(Math.Vector3(0, 0, 1)) gunPosition = playerVehicle.appearance.modelsDesc['gun']['model'].position gunDirection = Math.Matrix(playerVehicle.appearance.modelsDesc['gun']['model'].matrix).applyVector(Math.Vector3(0, 0, 1)) speedVector = playerVehicle.velocity speed = playerVehicle.velocity.length speed2 = playerVehicle.getSpeed() HP = playerVehicle.health operatable = playerVehicle.isCrewActive and playerVehicle.health > 0 isAlive = playerVehicle.isAlive() typeDescriptor = vehicle.typeDescriptor ##Тут есть вся информация о конкретной технике как классе. ##Вся инфа в ангаре берется отсюда, но отображается в ангаре лишь малая часть того, что тут есть... #сами панели (объекты) from gui.WindowsManager import g_windowsManager DamagePanel = g_windowsManager.battleWindow.damagePanel consumablesPanel = g_windowsManager.battleWindow.consumablesPanel #классы панелей from gui.Scaleform.Battle import ConsumablesPanel, DamagePanel И еще. Немного инфы на тему получения информации об объектах http://www.ibm.com/developerworks/ru/library/l-pyint/ Описание модуля, на английском, правда https://docs.python.org/2/library/inspect.html
  21. Уважаю. Сам на инженера учусь) Код по части захвата телеметрии там немного, с состоянием модулей и снарядов не знаю, пока не сталкивался. callback вряд ли удастся обойти, так что некоторая просадка fps все равно будет. Вот портами тут не все так просто, возможно, придется на си кодить... С внедрением си в питон, пока тоже не работал, не знаю, но говорят можно). В общем, если будет время, мож накидаю чего в общем виде, только дебажить на моем калькуляторе пне4 (а я с ним до сентября) не получится.
  22. Прикольная тема, главное время на отладке вычислительных функций нехило экономит... (не надо сто раз перезапускать клиент) Правда через полчаса после использования раскопал исходники трансмиттера и поменял print str(E) на import traceback #В начало файла print traceback.format_exc() Иными словами, вернул трассировщик ошибок на место) Не ну без него никак)
  23. Вектор скорости цели получается в 1 строчку. Вектор ствола - посложнее, но реализуемо (точнее где-то уже было). Баллистические данные - из дескриптора. Дальше векторная алгебра. Ангем и линал тут решают) Все реально, но с расчетами придется немного попотеть... Пока нет возможности этим заниматься... Скорее большей проблемой будет флэш для индикатора чем скрипт...
  24. Насчет автоприцела с упреждением (сам одно время занимался, потом бросил эту тему): это практически нереализуемо (ну по крайней мере точность будет сильно хромать), т.к. 1. есть такое понятие как пинг. То что пишется в клиенте это СРЕДНИЙ пинг, время доставки каждого пакета может быть +/- 50-70%. При большой скорости цели и приличном пинге получается разброс с 0,5-1,5 корпуса танка!, но это не самое главное. 2. перед выстрелом необходимо подождать для совпадения клиентского прицела с серверным, и, самое главное, до ПОЛНОГО сведения, чтобы получить приемлемую точность, автоприцел вообще вечно двигает стволом, о каком сведении и синхроне может идти речь... 3. Не факт, что баллистические данные в клиенте являются точными... Относительно арт сомнений почти нет, а вот танки... На сервер передается не угол возвышения ствола, а точка, куда у вас наведет прицел... 4. ну это касается вообще игры. Как я понял (ЭТО НЕ ФАКТ) информация на сервере обрабатывается потактово с интервалом где-то 0,1 сек. (файл констант питона: SERVER_TICK_LENGTH = 0.1). То есть если ваша инфа пришла сразу после такта, то вы ждете след. такта на обработку (или на сервер инфа отправляется с таким интервалом, не суть). По крайней мере эта константа имеет какой-то смысл, поскольку она учитывается в расчете пинга. ping = BigWorld.LatencyInfo().value[3] - 0.5 * constants.SERVER_TICK_LENGTH ping = max(1, ping * 1000) Упс, немного спалил код на пинг)Короче, если еще и точность понерфят, овчинка вообще не будет выделки стоить, она и сейчас не особо ценится... ******************************* получение вектора скорости танка, а так же баллистических данных самая простая часть всей затеи... Это вообще не проблема, кода строчек 5. Максимум. Ну пинг я уже спалил) ******************************* Что касается точки упреждения.... неплохая идея, но как реализовать без просадки fps, это вопрос... BigWorld.callback() сразу отпадает... хотя и других вариантов немного (точнее их пока не вижу)... а с проседанием fps такой мод никому нафиг не сдался. Тоже хорошая идея... Вернусь в Москву, м.б. поразвлекаюсь, благо база есть...
×
×
  • Create New...