Jump to content
Korean Random

GPCracker

User
  • Posts

    2,827
  • Joined

  • Last visited

  • Days Won

    62

Everything posted by GPCracker

  1. Так после эпидемии с тем читом на засвет вплоть от разъезда... им даже дыру пришлось латать, тот файл в рес_модс помнишь? Еще бы, танки противника на старте светятся у некоторых особо о***вших 3,14******сов. Ну про блайнды от арты я вообще молчу. Вот и напряглись.
  2. Не прокатит такое, имея доступ к клиенту, ты можешь загрузить любой питоновский скрипт. А моды нереально делать без доступа к коду или документации. Даже если они так залатают, то выдача подписей и т.д. процесс сам понимаешь.
  3. Мне кажется, или все будет как всегда через *опу? ИМХО, эти ребята попробуют разобраться, сколько нужно сделать для нормальной работы большинства известных модов, после чего, понятное дело, забьют на все это дело, увидев масштабы работы. Или запилят для отмазы таки кастрированный API, через который ничего нельзя будет нормально запилить. Вот где реально API уже давно напрашивается - так это прицелы. Необходимость прицельного скрипта для работы любого нормального прицела, коих в открытом доступе не валяется, создает реальные угрозы эпидемий, типа того, что было не так давно с "перманентным светом".
  4. Это не только костыль. Это еще нарушает логику системы. Все равно что к тебе будет гугл или яндекс коннектиться. Обычно именно ты к ним коннектишься. К тому же сетевая структура такова, что обратные коннекты не всегда возможны. Как пример - появление пассивного режима FTP.
  5. С сигналом проблематично, не позволяет система организации соединения. Максимум можно сделать dead-loop, т.е. периодично "долбиться" на нужный адрес/порт, но непонятно пока, как оно себя поведет... Или как вариант что-то типа port-scan, но на питоне такое вряд ли получится запилить. Будет время - подумаю. Если прям так реально напрягает, попробуй запустить это в консоли Sublime. D:\\autoconnect.py ## exec(open("D:\\autoconnect.py").read()) import time, threading def connect_loop(): while True: window.run_command("script_terminal_connect") time.sleep(5.0) thread = threading.Thread(target=connect_loop, name='connect_loop') thread.daemon = True thread.start()Скрипт будет просто методично раз в 5 сек. пытаться подключиться. Костыль конечно, но вроде работает.
  6. Да, виноваты кодировки. Но юникод в терминале работает. Все по порядку, чтобы все поняли, в чем тут косяк и как делать не надо.Лог файл пишется игрой в кодировке utf-8. Об этом написано в самом верху лога. /------------------------------------------------------------------------------------------\ BigWorld WorldOfTanks 2.8.0 (compiled at 02:17:39 Mar 22 2016) starting on 04/15/16 19:20:49 INFO: [Config] Command line: C:/Games/World_of_Tanks/WorldOfTanks.exe C:\Games\World_of_Tanks\w_20160311_0146_france-F28_105_leFH18B2_07_lakeville.wotreplay INFO: [Config] Default encoding set to utf-8Открываем лог в Sublime и смотрим кодировку. Текст на русском, который написан в логе, закодирован в Windows-1251, а не UTF-8. Она и определяется как кодировка лога. В ней все видно нормально, текст читаем. "Скрин 1" Далее переключаем кодировку на UTF-8 (как должно быть) и вместо русских символов, как и ожидалось, видим знаки вопроса. Так видит этот лог перехватчик "терминала". Он не умеет определять кодировки г**на в логах, он считает что лог в кодировке UTF-8, т.к. разрабы игры его так определили. "Скрин 2" Теперь сделаем еще более веселую вещь - откроем этот файл в HEX. Найдем там нужное место, я его выделил. "Скрин 3" Длина 0х15==21, т.е. выделение заканчивается аккурат перед первой русской буквой в строке, а ее позиция в строке 21 ("[iNFO] " - это добавляет движок игры и притом только в лог в файле, в перехваченных логах этого нет, поэтому оно и не считается). Следующий за выделением байт - 0xCA - как раз первая русская буква в строке. Думаю теперь все поняли, откуда что взялось. Вообще, использовать языки везде, кроме как в GUI, есть плохая идея. И нормальные программисты так никогда не делают. Не пишут в коде комментарии на русском и не пишут по-русски в логи. Потому что, во-первых, не все знают русский, и не факт что у всех он будет нормально отображаться (так же как у вас в том же блокноте какой-нить китайский), во-вторых, временами возникают проблемы с кодировками во многих моментах. "Вот, кстати, бородатый пример с хабра" А раз уж разрабы и добавили поддержку локализованных сообщений в логе, выставив там кодировку UTF-8 (кстати, оптимальное решение в том плане, что на UTF-8 можно закодировать любую локализацию), то ее нужно соблюдать, а не кодировать текст в свободной форме. Лог - это, *****, текстовый файл, а никак не бинарный, он должен быть единообразен в плане кодировки. Если каждый начнет использовать свою - ничего хорошего не выйдет. Вообще, от локализации много проблем... Только вы начинаете использовать что-либо кроме латиницы, сразу вылезает проблема с кодировками и процессом кодирования. Это в питоне все нормально реализовано. Такое встречается далеко не во всех языках программирования. Хотя разные типы для текстовых и бинарных строк догадались запилить только в 3.х Python, однако. Коннект к клиенту игры возможен только после полной загрузки серверного модуля. Когда он прогрузится - сильно зависит от того, насколько быстрая машина, и сколько модов еще навешено.Именно поэтому и запилена буферизация логов - чтобы логи сразу после старта тоже было видно.
  7. py4wot - это приложение, реализующее консоль. Что-то вроде этого, только написанное на С++, опять же если я правильно понял код. В питоне для консолей обычно используется несколько другой метод компиляции (ЕМНИП, single вместо exec). В подробности касаемо py4wot я не вдавался особо. Мое приложение работает со скриптами, а не с консольными командами. К тому же использование сторонних приложений без особой на то необходимости не самая крутая идея. Питон нормально стартует на любой операционной системе, в отличие от С++ кода, заточенного чисто под Windows. Серверную часть не обязательно запускать в игровом клиенте, она нормально стартует и на простом питоне. Там даже модуль для этого есть. Плюс использование сетевой инфраструктуры позволяет (если правильно сконфигурировать) использовать мультиконнект и подключаться с другой машины. Два монитора есть не у всех, а вот ноутбук или планшет почти всегда найдется.
  8. Все дело в том, что та часть, которая является модом игрового клиента картохи, по своей сути является TCP сервером, расшаренным на localhost, а Sublime-плагин - это TCP клиент (+меню), который подключается моду-серверу и через него имеет доступ на выполнение python-скриптов в игровом клиенте картохи. Для некоторого разграничения понятий клиент и сервер картоха/мое приложение я называю TCP-сервер моего приложения "серверной частью" приложения. Такая вот сложная для понимания с первого раза логика, но на самом деле тут нет ничего сложного. Что касаемо того, что можно делать через терминал - тут уже полная свобода почти, единственно, нужно четко осознавать, что скрипт запускается асинхронно (отдельным потоком) по отношению ко всему остальному игровому процессу, и некоторые функции уже успели выполниться. Это я к тому, что через терминал хуки нужно ставить осторожно. Все остальное в принципе работает нормально, можно спокойно к примеру через терминал послать сообщение в чат (ну если в реальном бою / трене), либо просто его туда добавить (только отобразить), скажем, вывести сообщение справа, где фраги, запустить какой-нить звук, добавить чего-нить на экран, передвинуть, отресайзить и т.д. Если отлаживаешь мод, можно к примеру в реалтайме перемещать при помощи терминала всякие панельки, ресайзить их, менять текст, подбирать какие-то параметры и т.д. Причем делать это независимо от остальной логики, главное чтобы это не сбило с толку сам мод, который ты дебажишь. Много что можно делать, в принципе.
  9. 1. Нужно ставить в клиент серверную часть, чтобы игровой клиент мог принимать подключения от Sublime. 2. Клиентскую часть на Sublime, как я понял, ты уже развернул, раз меню появилось. 3. У Sublime есть своя внутренняя консоль, вызывается через Ctrl+~, ЕМНИП. Если что-то в плагине идет не так - там будут логи. 4. Не нужно брать сходу скрипты. Тестируется все довольно просто. 4.1. Коннектимся к клиенту. Состояние не важно, главное чтобы он прогрузился. 4.2. Открываем в Sublime лог-файл или лог-панель. Там должен появиться весь лог, если параметр fetch_logs включен (ЕМНИП он включен по дефолту). 4.3. Создаем пустой файлик, где мы будем писать наш скрипт. Пишем туда что-то типа "print 'Hello world!'". 4.4. Запускаем это дело. В лог-файле/лог-панели должна появиться строка "Hello world!". 4.5. PROFIT. 5. Некоторые скрипты интегрируются в клиент на стадии загрузки, поэтому их запуск через терминал без ручной интеграции (контролируемая интеграция) невозможен. 6. Из пункта 5 следует, что терминал используется для отладки модулей с использованием их ручной интеграции или проверки работоспособности каких-то кусков кода. Готовые скрипты следует отлаживать уже нормальным методом (устанавливать как мод). В последствии (если скрипт такое нормально воспримет) можно управлять состоянием этого скрипта через терминал, как и любым другим модулем картофана или пользовательским модом. Если конечно вы знаете, что надо делать.
  10. Уметь там особо ничего не надо... Ставишь и пользуешь. Что касаемо ошибки - 325 строка, функция is_enabled return terminal is not None and self.window.active_view().id() in terminal.viewsAttributeError: 'NoneType' object has no attribute 'id' По отчету все совпадает, строка с таким номером действительно принадлежит функции is_enabled Атрибут 'id' используется только в одном месте, и судя по логам, получается что self.window.active_view() возвращает None То-есть в момент проверки нет активной вьюшки. Скорее всего, все документы в этот момент были закрыты. Или возник какой-то баг в самом Sublime. Черкну себе в ToDo, допилю тут немного, когда время будет, чтобы не крашилось. По сути ... and self.window.active_view() is not None and ...должно быть достаточно.
  11. НЯП, проблема у @ger Gauf состоит в том что у него не работает захват цели в артиллерийском режиме. В остальных режимах все ок, так? Значит проблема явно не в загрузчиках. А вот товарищам, у кого вообще не стартует, это следует проверить в первую очередь.
  12. Вроде пока конфликтов особых не обнаружено, имеющиеся траблы корректируются задержкой загрузки. Смотря какой захват ты имеешь в виду - есть внутренний, для баллистического вычислителя в основном используется, а есть автоприцел. Это разные механики в принципе. Смотри что пишет в логах. Если есть какие-то траблы в плане загрузки скрипта - там оно будет описано. Есть небольшие проблемы с очередностью запуска модов, исправляется корректировкой задержки старта мода, в теме выше все описано. Либу и Мод можно скачать в разделе релизов на GitHub. Ссылка на необходимую версию либы там есть.
  13. Не знаю, в чем прикол... Но все параметры в конфиге вроде ОК. Возможно, опять картоха чего намудрила. До обновы работало же?
  14. Лично я никаких проблем в файле не увидел, все необходимые параметры вроде ОК. Синтаксис не проверял, глянь сам, грузится конфиг вообще или нет. Хотя я если честно не понимаю в чем прикол. Все должно ок работать. "Немного офтопа"
  15. Наверное это одна из причин, по которым я не хочу пока играть в танки - и так времени нет, так еще и на танки тратить :) У них все хорошо, у них все зае**сь. Кто несогласен - получает 3,14***лей и идет лесом. Типичная политика практически любой конторы, которая работает с населением непосредственно. Только в некоторых местах это выражается только в скрытии фактов / статистики с выдачей населению ложных причин (типа к вас руки кривые) до момента исправления косяка (неохота статку конторы портить и агрить юзеров - пока ищут у себя причину - мы пофиксим, не всегда прокатывает, если население попадается грамотное), а где-то уже идут на агрессивные меры (заминают траблу удалением постов / банами пользователей в группе / на форуме и т.д.). Ничего необычного я тут не вижу. В некоторых случаях помогает стабилизировать положение / снизить уровень баттхерта за счет заминания проблем. Но при превышении определенного лимита таких действий контора начинает терять адекватную часть аудитории, что мы и видим - уже в течении нескольких лет из танков стабильно уходят хорошие игроки, и "средний скилл по больнице" неумолимо падает. А неадекватные комментарии, тем более с нецензурной лексикой в больших количествах и при отсутствии фактуры (объективных доказательств) трут везде, где есть адекватные админы.
  16. Так точно. Ошибки там по большому счету нет. По сути то же самое, только немного более другими словами. По сути, сказанное @StranikS_Scan выше и есть причина, по которой код исходного модуля (код картофана) загружается руками. Ты имеешь ввиду хитрые финты ушами в виде маршала и обрезки 8 байт? 4 байта магическое число, определяет версию питона, с которой собрали. 4 байта timestamp остальное marshalled code object модуля. Вот пример "ручной компиляции", первая функция.
  17. @Scharfhobel, это не ко мне, а к автору мода с обфуцированным кодом.
  18. Походу кто-то не вдавался в смысл кода вообще, просто сагрился на строку.Там идет чтение xml на предмет пути, содержащего res_mods. for key, section in ResMgr.openSection('../paths.xml/Paths').items(): if section.asString.find('res_mods') != -1: res_mods = os.path.normpath(section.asString)Код, да, писал я когда еще был относительно далекий 0.9.0. Можно было вообще пустую строку оставить, оставил так, чтобы было видно формат строки...
  19. XModLib should be placed in lib folder. Post here their python sys.path, please.
  20. Большинство загрузчиков содержат исходный (картохин) код перегружаемого файла внутри себя. Мой камеранод грузит картохин код из оригинала в папке res, поэтому по логике не должен ломаться на обновах. Проблема с загрузчиками, насколько я понял, была в этом. Иных причин для крашей я не вижу... Насколько я понял из всего этого *****, народ негативно относится к старому пути, из-за того, что с загрузчиками идут какие-то краши?
  21. Народ, кому не влом, проверьте, может с этими файликами заведется... Им конечно что лет в обед, писал очень давно, да и сыроваты они мальца, но по крайней мере у меня проблем с ними никогда не возникало. Там впилен один хитрый алгоритм, который грузит код из оригинального файла CameraNode из папки res. Так что с ним по логике никаких проблем в плане обновы быть не должно. Если кому особо интерено - сорцы в комплекте, ставить нужно только *.pyc ModLoader.zip
  22. В трейсе ошибки нет AAS. Так что скорее всего это картохин косяк.
×
×
  • Create New...