XGM Forum
Сайт - Статьи - Проекты - Ресурсы - Блоги

Форуме в режиме ТОЛЬКО ЧТЕНИЕ. Вы можете задать вопросы в Q/A на сайте, либо создать свой проект или ресурс.
Вернуться   XGM Forum > Warcraft> Барахолка
Ник
Пароль
Войти через VK в один клик
Сайт использует только имя.

Ответ
 
d07RiV

offline
Опыт: 219
Активность:
rdep - наработка депротектора
Я в процессе написания своего депротектора; у меня было ощущение что xdep не работает во многих случаях (насколько я помню, доту у меня им открыть не получилось, хотя это было давно и вполне возможно, что я что-то делал не так).
Функциональность примерно следующая:
  • Восстановление listfile: с этим проблем нет, судя по отзывам моя программа RMPQEx с этим справляется отлично.
  • Исправление самых простых способов "защиты" типа поломка w3i или прятание war3map.j - это само собой
  • Восстановление файлов объектов: это уже работает, проверено на доте (правда редактор довольно долго заполняет деревья объектов).
  • Восстановление списка импортированных файлов в war3map.imp
  • Восстановление максимального количества данных из war3map.j: над этим я сейчас работаю, только что дописал парсер jass, планирую восстанавливать звуки/регионы/камеры/юниты со всеми опциями. Возможно добавлю систему, способную разделить триггеры по смыслу (например, триггеры, относящиеся к одному заклинанию)
Jass записывается в удобочитаемом виде (см. RMPQEx->Jass deobfuscate), для удобства по умолчанию будут использоваться возможность vJass (globals..endglobals блоки в отдельных триггерах, порядок включения), возможно сделаю вывод в виде Zinc.
Все библиотеки самописные, включая читалку/писалку MPQ.
Если кто заинтересован, пишите.
Ещё, есть пара вещей с которыми я не успел разобраться, если кто знает, буду благодарен за информацию.
  1. Каким образом в функцию config в доте попал код, шарящий управление игрока 15 (магазины) всем остальным. В игре это заметно (например, можно забиндить магазины на клавиши, что возможно только если расшарено управление), но где в редакторе находятся опции, добавляющие этот код в config? Разве что если он был добавлен туда вручную, что было бы нелогично (зачем, когда можно поместить этот код в обычную инициализацию).
  2. Как редактор определяет, для каких исходных юнитов надо создавать глобальные переменные (gg_unit_xxxx_####)? Это нужно, иначе будут ошибки при сохранении (undefined variable). Я пытался эксперементировать, добавляя и убирая обращение к юниту из триггеров и сохраняя и открывая карту, но поведение редактора довольно странное. Мои наблюдения - эта информация получается только на основе war3map.j/wct/wtg, возможно редактор составляет список переменных в war3map.j с именами типа gg_unit_xxxx_####, затем при сохранении определяет, к каким из них обращаются в триггерах (даже в комментариях, наверное используется простой поиск в тексте), и сохраняет только их. Но кажется с этим тоже что-то несогласовывалось.

Отредактировано d07RiV, 24.01.2010 в 01:34.
Старый 24.01.2010, 01:23
zibada

offline
Опыт: отключен
могу в помощь исходник xdep скинуть, вдруг пригодится.
где в редакторе находятся опции, добавляющие этот код в config? Разве что если он был добавлен туда вручную, что было бы нелогично (зачем, когда можно поместить этот код в обычную инициализацию).
это как раз логично, т.к. ломает работу депротекторов, про это не знающих =)
правда, нестандартных функций config я на момент написания xdep не встречал, но нестандартные main он обрабатывать умеет, именно переносом их содержимого в обычную инициализацию.
Старый 24.01.2010, 01:28
Kemodonn

offline
Опыт: 1,665
Активность:
d07RiV, будет очень хорошо если сделаешь, а то старый автор к сожалению забросил :(
Старый 24.01.2010, 01:31
d07RiV

offline
Опыт: 219
Активность:
То есть утверждается, что строки call SetPlayerAlliance(Player(15),Player(#),ConvertAllianceType(6),true) вставлены в config вручную? И при снятии защиты их надо просто поместить в начало инициализации?

На всякий случай уточню, в редакторе нет опций, позволяющих расшарить контроль нейтрального игрока остальным, не используя триггеров? (Что-то похожее есть в настройках Scenario->Force properties)

Отредактировано d07RiV, 24.01.2010 в 03:00.
Старый 24.01.2010, 01:37
DioD

offline
Опыт: 45,134
Активность:
могу ответить на все интересующие вопросы как на форме так и в персональном порядке.
на форуме офк будет веселее.
код доты пишется командой ! inject config
подробное описание есть в справке к vJass
кроме того можно переписать main командой ! inject main
которая заменяет конфиг (main) на тот что желает автор, данная штука сделана для того чтобы сообщение о расшаривании контроля нейтралом не было показано в игре.
если переместить куда либо в другое место осображение будет иметь место, мелочь конечно но лучше не ломать.
редактор создаёт переменные только для юнитов чьё упоминание есть в GUI, в последствии при считывании\записи war3map.j эти переменные трогаться не будут, если о них есть упоминание в wtg\wts если упоминания нет то они вписаны не будут.
для сохранения переменных надо просто создать триггер плана set gg_unit_xxxx_#### = gg_unit_xxxx_####
DioD добавил:
учитывая возможности vjass редактора дота тепротектиться полностью вручную вставлением одного огромного триггера и это будет компилироваться без ошибок, правда долго.
Старый 24.01.2010, 07:49
FunkieFoO

offline
Опыт: 7,159
Активность:
А когда ждать работоспособную версию?
и какое будет исполнение, консоль или же в графическом интерфейсе?
Старый 24.01.2010, 08:56
d07RiV

offline
Опыт: 219
Активность:
DioD: спс за информацию,

Тогда я просто добавлю лишний код из конфига с помощью тех же //! inject config (тем самым программа будет требовать вджасс, могу добавить опцию чтобы это отключить).

По поводу переменных, значит редактор всё-таки не пересоздаёт war3map.j с нуля при каждом сохранении, а создаёт новый код на базе старого? А что же он делает если ему подсунуть war3map.j из исходной карты (то есть обфусцированный)?
Я бы предпочёл не создавать гуи-триггеров специально для этого, если так возможно. Но получается что для этого надо будет пересоздать war3map.j в вот виде, в котором его пишет редактор?

А одного большого триггера я хотел бы избежать так как это довольно неудобно редактировать.

Да и ещё, насколько я понимаю данные об исходных локациях, указанные в war3mapUnits.doo (в виде объектов sloc) имеют приоритет над теми, которые указаны в war3map.w3i? Ибо данные в w3i доты не совпадают с локациями, заданными в функции config.

И ещё вопрос тогда, где можно прочитать подробное описание того, что оптимизатор (vex?) делает с BJ функциями? В доте несколько функций продублированы почти без изменений (первые несколько функций в скрипте - PolledWait, PolarProjectionBJ, GetPlayerEnemies, UpdateEachStockBuilding, PerformStockUpdates, StartStockUpdates). Единственное отличие, которое я нашёл - замена null булэкспра на другой, всегда возвращяющий true. Это связано с очередным мак-багом? И можно ли это всю эту развёртку InitBlizzard безопасно убрать, понадеявшись что на этапе обратной оптимизации этот фикс внесётся опять?

FunkieFoO: по поводу сроков точно сказать не могу, я бы хотел по крайней мере доделать обработку джасса (сейчас пишу исполняющую часть) и восстановление звуков/регионов/камер/юнитов. Вообще говоря, работоспособную версию могу выложить и сейчас (убрав лишний код), если тупо создать огромный триггер со всем кодом карты и ничего из него не извлекать. Но тогда мне придётся писать программу в нелогичном порядке (сначала интерфейс потом начинку???).
Я думаю что сделаю гуи программку со всякими чекбоксами для настроек, благо для этого просто требуется добавить один диалог что есть дело 15 минут. А может сделаю консольную програмку с ini файлом подобно xdep плюс гуишную программу с чекбоксами, которая этот ini файл пишет и запускает сам депротектор.
Старый 24.01.2010, 14:12
XOR

offline
Опыт: 38,159
Активность:
а то старый автор его к сожалению забросил (
собственно это и есть ! =)
Могу еще порекомендовать обратиться к S, т.к. он отлично шарит в депротекте. Насколько я понял, автор пытается еще и восстановить еще и различные вjass плюшки? И кстати, что насчет восстановления в виде сjass ? Удачи
Старый 24.01.2010, 14:19
DioD

offline
Опыт: 45,134
Активность:
vJass даёт ровно те возможности которые необходимы для эффективной разработки, ни больше ни меньше, отказ от его использования совсем не айс, как в принципе и переход на cJass и ZINC которые полностью скрывают реальный код еще круче чем GUI.
Редактор пересоздаёт war3map.j каждый раз при сохранении, это можно увидеть если внести случайные изменения прямо в код и сохраниться, от внесённых изменений не будет ни следа.
(этим пользуются некоторые карты где GUI код не соответствует внутреннему коду, при пересохранении карта портиться)
Редактор с кодом как бы не работает, он обрабатывает wtg и wct файлы, которые и хранят всю информацию о триггерах и переменных, что не указано в этих файлах в код не попадёт.
функция config как бы не решает особо ничего, данные которые содержаться в w3i идут в большем приоритете и работать надо с ними, конфиг вообще можно задействовать под иные нужды по большему счёту.
эта ересь в оптимизаторе отключается, можно и нужно в последствии при оптимизации выключить это, так как проблема исправлена 100500 версий назад, связана с утечкой памяти, но очень и очень минорной, да кстати этот код добавляется во все карты которые подверглись оптимизации, даже если эти функции нигде не используются.
Старый 24.01.2010, 14:53
d07RiV

offline
Опыт: 219
Активность:
На самом деле это не так важно, чтобы вывести код в виде cJass или ZINC надо всего лишь поменять функцию вывода, так как структура кода та же самая (естественно, если не использовать фичи типа безымянных функций).

У меня возникает ощущение что редактор читает глобальные переменные в war3map.j и находит среди них те, которые имеют вид gg_unit_xxxx_####. У меня получается что-то вроде следующего:
1. Редактор читает список глобальных переменных war3map.j, похожих на названия юнитов, и добавляет их в список, если они упоминаются в war3map.wct/wtg
2. Если через ГУИ-редактор выбирается юнит, он добавляется в список
3. При сохранении список пишется в глобальные переменные
4. Независимо от этого списка, при генерации функции CreateUnitsForPlayerX редактор ищет упоминание gg_unit_<id>_<#> в wct/wtg, если найдено то пишет set gg_unit_<id>_<#> = CreateUnit (...), иначе set u = CreateUnit (...). Например если ничего в ГУИ редакторе не выбирать, просто поставить ферму и написать триггер call KillUnit (gg_unit_hhou_0001) то ругатся редактор будет не на эту строчку, а на строчку в своей же инициализации (правда, возможно, это ошибка jasshelper).
Я потестирую ещё немного и посмотрю что получится.

А вообще странно, почему бы не научить jasshelper тупо создавать недостающие переменные gg_unit_xxxx_####...
Старый 24.01.2010, 18:54
DioD

offline
Опыт: 45,134
Активность:
на самом деле проблема автоматического создания переменных не является проблемой, если переменной нет - создать переменную нужного типа даже дополнительных проверок не надо, так как уже известно что имя переменной свободно, осталось решить тип переменной, который опять таки решается просто, если значение из переменной извлекается, то глобальная, если устанавливается то локальная, так как извлекать значение из переменной которой нет нет смысла, это будет вполне правильно.
все эти свистелкоперделки накручиваются но из за выхода ск2 в ближайшее время всем по барабану.
Старый 24.01.2010, 19:27
Скайнет
Kicked by ZlaYa1000
offline
Опыт: 8,234
Активность:
Я так понимаю прога готовится на взламывание хорошо защищённых карт и в этом случае это дота, только какой смысл? Дота весит принципиально много и при обнаружении разницы ни 1 игрок не станет качать, даже раскрутка доты 6х6 далась очень трудно и вряд ли достигает хоть одного процента всей дота аудитории.
Собственно вопрос автору - зачем ломать доту, если любые изменения сразу пропалятся, да и раскручивать дота мод дело очень долгое и бессмысленное?
из за выхода ск2 в ближайшее время всем по барабану.
+1000
Старый 24.01.2010, 19:53
JEKA1234

offline
Опыт: 2,375
Активность:
Зачем доту ломать, вам даёт что-то это????? Ну импорт ладно ну спелы и прочие системы не сделаете сами???(кто умеет)

Отредактировано JEKA1234, 24.01.2010 в 22:10.
Старый 24.01.2010, 20:23
d07RiV

offline
Опыт: 219
Активность:
Вообще-то я хотел попробовать написать свой AI; я понимаю что это делается не так и AI скрипты в конечном счёте вставляются в карту программно, но было бы удобней писать скрипт в редакторе. А может это мне кажется...
И потом, делали же люди ОпенДоту и ничего...
Конечно правда, что ск2 может это всё очень быстро накрыть... ну тогда я просто возобновлю вов аккаунт и мне на всё снова по барабану будет.

И вообще для меня эта программа имеет чисто теоретический интерес, так как пользоваться я ей буду вряд ли (очевидно произведение указанных преобразований вручную один раз гораздо проще).

Да и по поводу 6х6: сравни с OMG дотой, она появилась значительно позже 6х6, и гораздо более популярна. Аналогично AI карты.
Старый 25.01.2010, 00:00
Скайнет
Kicked by ZlaYa1000
offline
Опыт: 8,234
Активность:
d07RiV, можно сделать в ск2 любое по желанию с гораздо меньшим временем и большим толком.
d07RiV = d07RiV который делает vampirism fire 5.07+?
Старый 25.01.2010, 00:02
d07RiV

offline
Опыт: 219
Активность:
Да, я делаю vampirism fire и dota replay manager

Но на ск2 я переходить наверное не буду, я и не особо увлекался ск1, хз.
Старый 25.01.2010, 01:00
Скайнет
Kicked by ZlaYa1000
offline
Опыт: 8,234
Активность:
d07RiV, 90% скиллов доты будет делаться в РО без поддержки кода вообще (+полная функциональность нового гуи(естественно который будет значительно удобнее) и многие-многие другие плюшки), думаю из-за мощности этого редактора уже не важно играл ли в ск1.
Старый 25.01.2010, 09:11
YellowStar
poon
offline
Опыт: 15,144
Активность:
Изза крутого редактора ск - количество поклоников не вырастет. Весь понт редактора был бы в том чтобы он депротектил объекты. тупо разместил на карте. большего не надо 0.о
Старый 27.01.2010, 11:44
Скайнет
Kicked by ZlaYa1000
offline
Опыт: 8,234
Активность:
narayan, популярность вк3 давно держится только на существовании мощного редактора; абсолютно тоже самое будет в ск2, независимо от изначальных игроков ск1, да и тем более атмосфера вк3 может быть восстановлена и на движке ск2 с затратами на импорт.
Старый 27.01.2010, 12:11
DioD

offline
Опыт: 45,134
Активность:
близы однозначно дадут плюшек достаточно чтобы даже с импортом париться не надо было особо, например совместимость с моделями вара запросто делается.
Старый 27.01.2010, 12:13
Ответ

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы можете скачивать файлы

BB-коды Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход



Часовой пояс GMT +3, время: 02:31.