0
10
6 месяцев назад
0

» WarCraft 3 / WFE - Warcraft Feature Extender

Unryze:
  1. В последней версии в интерфейсе не работает функция Лидерборд - всегда отключен
  2. Иногда не показывает скилы в панели скилов при выделении своего другого юнита, скорее всего из-за перехвата панели скилов других игроков. Исправляется выделением уже другого юнита и снова выделением сломанного юнита, неужели никто не сталкивался с этим? И где в вфе отключить перехват скилов (или как правильно называть эту функцию)?
2
10
4 года назад
2

» WarCraft 3 / 120+ FPS interp и мультиплеер

Ясно, пойду сделаю мили на стандарте...
1
10
4 года назад
1

» WarCraft 3 / Анимация и её нюансы при использовании способности. Задержки.

Proshel_Doty:
У меня в каком-то переводе еще было применяет эффекты способности, но и остальные что ты скинул на русском вроде тоже были, хотя возможно это как раз и было вместо приводит способность в действие
0
10
4 года назад
0

» WarCraft 3 / Анимация и её нюансы при использовании способности. Задержки.

Proshel_Doty:
В оригинале как-то не понятно или мне так кажется, сначала на русском с этим работал и там
Начинает применять способность
Приводит способность в действие
Применяет эффекты способности
Прерывает способность
Завершает применение
Когда без рус установил, будто бы все перепуталось, до этого все как в событиях написано так и было.
UNIT_SPELL_ENDCAST насколько помню cast это подготовка перед применением способности, должно же тогда означать завершение подготовки и начало использования?
0
10
4 года назад
Отредактирован Lotus101
0

» WarCraft 3 / ТРЕЙЛЕР - WarCraft 3 Reforged Beta 3.0 MOD

Proshel_Doty:
и что это? что с этим делать дальше?
Плакать над убогостью близов

Никита29))))
0
10
4 года назад
0

» WarCraft 3 / Анимация и её нюансы при использовании способности. Задержки.

Юнит начинает применять способность или похоже UNIT_SPELL_EFFECT как у тебя указано, странно что не работает, в идеале можно давать приказ отставить и поворачивать мгновенно в точку способности, но тогда он прошлый приказ сбросит(для этого есть стандартный берсерк и другие) и перезарядки не будет(но можно например заставлять его после этого кастовать скил на созданного дамика и кд пойдет, и тд)
0
10
4 года назад
0

» WarCraft 3 / Как притянуть юнита

На гуи гигантское количество примеров, наработок и карт, поиск в помощь, а когда поймешь, то можно и через координаты будет сделать SetUnitPosition или SetUnitXY
0
10
4 года назад
Отредактирован Lotus101
0

» WarCraft 3 / Заклинания на заказ

Заказ

Название: Небесная звезда
Метод: GUI или Jass, главное как можно меньше утечек
MUI: Не обязательно
Цель: Точка
Количество уровней: 1
Версия игры для 1.26, хотя если там никак такое нельзя, а на 1.32 можно, то лучше на нем(на самом последнем лицушном)
Описание: При касте в точке "цель способности" создается даммик, он начинает каждые 0.01секунды подниматься в высоте(+5 постоянно) и в области вокруг себя(300+постоянное увеличение на 10) создавать рандомно огромные глыбы размером примерно с мост(рандомный размер), по которым можно ходить и текстура пути такая, что юниты которые ниже глыбы не могут на нее взобраться, а те что выше, могут на нее упасть, и притягивает эти глыбы к себе(скорость +5 в сторону даммика) и соответственно глыбы поднимаются в высоте к нему. И вот тут интересно, как это сделать получится, постоянное создание декорации и удаление прошлой путем GetLocationXYZ, а также как юниты будут ходить по ним, сделав им высоту как у глыбы? Продолжительность спелла 20 секунд.
Технические характеристики: Прочие нюансы сам сделаю
0
10
4 года назад
0

» WarCraft 3 / Помогите с триггером

Думаю у тебя при выборе группы приказ каждый раз переназначается и кастует только на последнего выбранного, надо наверно очередь приказов делать или автокаст с бафом на время, но намного проще сделать копии через триггер
3
10
4 года назад
3

» WarCraft 3 / Чем сейчас пользуются для создания карт?

GetLocalPlayer:
Пока что стандартный редактор Рефоржа не дотягивает до JNGP.
В Рефорже работают преимущественно кодеры топящие за Lua.
GUI триггеры аналогичные JNGP не завезли.
По ощущениям играют больше в 1.26. На одном айкапе игр ощущается значительно, больше чем не всеевропейском сервере Близзард.
Вот только на айкапе играют лишь в одну мапу, поэтому рассматривать его для картоделов смысла нет
0
10
4 года назад
Отредактирован Lotus101
0

» WarCraft 3 / Группа - юниты игрока вызывает утечку


цитата
как вариант, в конце каждого тика таймера:
call DestroyGroup(udg_Group)
pro100master:
Удалять надо лол. Статьи плохо наверное читали.
Итак удаляю, все что с группой связано
Bergi_Bear:
цитата
Страшны не как сам утечки, а как количество юнитов в переборе

Продебаж количество вызовов, а конкретно количество юнитов при каждом переборе
Даже если указываю игрока, которого нет в карте, все равно есть утечка


Вообщем дело было в чертовом гуишном "Юниты игрока/юниты игрока типа/юнита игрока при условии/юниты игрока в области" в любом случае создавал утечку, и как удалять не знаю
set udg_Group = GetUnitsOfPlayerAll(GetEnumPlayer())
но если писать вручную:
call GroupEnumUnitsOfPlayer( udg_Group, GetEnumPlayer(), null)
то все работает отлично.
Так что лучше это PlayerAll не использовать. Всем спасибо.


Осталось придумать как оптимизировать чтобы не провисало и проц не дымился при таком переборе, если юнитов на карте мало, то все нормально, если более 100 + даммики создаются, то начинаются проблемы... (а перед этой функцией еще спамятся даммики...) Есть идеи?
вот этот монстр
function Move_ConditTime10 takes nothing returns boolean
    if ( not ( udg_Time == 10 ) ) then
        return false
    endif
    return true
endfunction

function Move_ConditTypeDelete takes nothing returns boolean
    if ( ( GetUnitTypeId(GetEnumUnit()) == 'h044' ) ) then
        return true
    endif
    if ( ( GetUnitTypeId(GetEnumUnit()) == 'h045' ) ) then
        return true
    endif
    if ( ( GetUnitTypeId(GetEnumUnit()) == 'h046' ) ) then
        return true
    endif
    return false
endfunction

function Move_ConditDelete takes nothing returns boolean
    if ( not Move_ConditTypeDelete() ) then
        return false
    endif
    return true
endfunction

function Move_ConditTypeEnum takes nothing returns boolean
    if ( not ( IsUnitType(GetEnumUnit(), UNIT_TYPE_STRUCTURE) == false ) ) then
        return false
    endif
    if ( not ( GetEnumUnit() != udg_Caster ) ) then
        return false
    endif
    if ( not ( GetEnumUnit() != udg_DummyCaster ) ) then
        return false
    endif
    return true
endfunction

function Move_ConditTime6000 takes nothing returns boolean
    if ( not ( udg_Time >= 6000 ) ) then
        return false
    endif
    return true
endfunction

function Move_GroupActions takes nothing returns nothing   ??//двигаем всех юнитов от точки кастера??
    local real Speed = 8   //скорость движения                                                 //снизу проверяем минимальное расстояние от выбранного юнита до точки кастера + Time
    if SquareRoot((GetWidgetX(GetEnumUnit()) - udg_CasterX) * (GetWidgetX(GetEnumUnit()) - udg_CasterX) + (GetWidgetY(GetEnumUnit()) - udg_CasterY) * (GetWidgetY(GetEnumUnit()) - udg_CasterY)) <= udg_Time/10*8  then 
    if RAbsBJ(GetWidgetX(GetEnumUnit())) <= 4000 and RAbsBJ(GetWidgetY(GetEnumUnit())) <= 4000 then    //чтобы не двигал если юнит на краю карты
    if ( Move_ConditTime6000() ) then       //выключение триггера спустя 6 секунд
        if ( Move_ConditDelete() ) then
            call RemoveUnit( GetEnumUnit() )
        else
            call UnitDamageTargetBJ( udg_Caster, GetEnumUnit(), 2000.00, ATTACK_TYPE_CHAOS, DAMAGE_TYPE_UNKNOWN )
        endif
        call PauseUnitBJ( false, udg_Caster )
        call DisableTrigger( GetTriggeringTrigger() )
    else
        if ( Move_ConditTypeEnum() ) then
            set udg_MoveAngle = Atan2(udg_CasterY-GetWidgetY(GetEnumUnit()), udg_CasterX-GetWidgetX(GetEnumUnit()))    //угол между координатами кастера и коорд юнита
            set udg_MoveX = GetWidgetX(GetEnumUnit())-Speed*Cos(udg_MoveAngle)  //X куда двигать юнита??
            set udg_MoveY = GetWidgetY(GetEnumUnit())-Speed*Sin(udg_MoveAngle)  //Y куда двигать юнита??
            if GetTerrainType(udg_MoveX, udg_MoveY) != 'Jdrt'  then
            call SetTerrainType( udg_MoveX, udg_MoveY, 'Jdrt', -1, 1, 0 )       //если тип земли не изменен на этот, изменить его
            endif                                                              //снизу проверяем проходима ли местность для юнита чтобы двигать
            if IsTerrainPathable(udg_MoveX+RAbsBJ(50), udg_MoveY+RAbsBJ(50), PATHING_TYPE_FLYABILITY) == false or GetUnitTypeId(GetEnumUnit()) == 'h045' or GetUnitTypeId(GetEnumUnit()) == 'h046' then
            call UnitDamageTargetBJ( udg_Caster, GetEnumUnit(), 3.00, ATTACK_TYPE_CHAOS, DAMAGE_TYPE_UNKNOWN )
            call SetUnitX(GetEnumUnit(), udg_MoveX)  //двигаем юнита
            call SetUnitY(GetEnumUnit(), udg_MoveY)
            endif
        else
        endif
    endif
    endif
    endif
endfunction

function MoveGetEnum takes nothing returns nothing  //для каждого игрока выбираем всех его юнитов
    set udg_Group = CreateGroup()   //каждый раз создаем группу(надо ли?)
    set bj_wantDestroyGroup = true   //скрипт на автоудаление группы(надо ли?)
    call GroupEnumUnitsOfPlayer( udg_Group, GetEnumPlayer(), null)  //выбираем группу
    call ForGroupBJ( udg_Group, function Move_GroupActions )
    call GroupClear( udg_Group )  //очищаем группу(надо ли?)
    call DestroyGroup(udg_Group)  //удаляем группу(?)
    set udg_Group = null    ??//переменная группы равна 0(?, вроде и без этого всего не было утечек, но навсякий)
endfunction

function Move_Actions takes nothing returns nothing
    set udg_Time = ( udg_Time + 10 )
    if ( Move_ConditTime10() ) then  //в начале создаются даммики 45 штук...
        set bj_forLoopAIndex = 1
        set bj_forLoopAIndexEnd = 45
        loop
            exitwhen bj_forLoopAIndex > bj_forLoopAIndexEnd
            set udg_MoveAngle = ( I2R(GetForLoopIndexA()) * 8.00 )
            set udg_MoveX = udg_CasterX-200*Cos(udg_MoveAngle)
            set udg_MoveY = udg_CasterY-200*Sin(udg_MoveAngle)
            set udg_Dummy[GetForLoopIndexA()] = CreateUnit(GetOwningPlayer(udg_Caster), 'h045', udg_MoveX, udg_MoveY, ( I2R(GetForLoopIndexA()) * 8.00 ))
            set bj_forLoopAIndex = bj_forLoopAIndex + 1
        endloop
    else
    endif
    call ForForce( GetPlayersAll(), function Move_GetEnum )  //выбор каждого игрока
endfunction

//===========================================================================
function InitTrig_Move takes nothing returns nothing
    set gg_trg_Move = CreateTrigger(  )
    call DisableTrigger( gg_trg_Move )
    call TriggerRegisterTimerEventPeriodic( gg_trg_Move, 0.01 )
    call TriggerAddAction( gg_trg_Move, function Move_Actions )
endfunction
1
10
4 года назад
1

» Melee RTS Raganrok / Главная страница

Загадка человечества как из стандарта можно было сделать целый гигобайт
0
10
4 года назад
0

» WarCraft 3 / Рандомный Герой

Centyrion:
Lotus101, я раньше так и делал...спрашиваю как перенести зеленного на синий слот...мне только это нужно знать....от 1 до макс кол-во игроков сделал раньше и нормально работало
Тогда это другой вопрос, похоже никак, но с другой стороны зачем это если можно сделать не меняя слот
0
10
4 года назад
0

» WarCraft 3 / Как отследить удар из невидимости?

Yury13:
easypeasy, есть проблемы, что инвиз может уйти раньше Например, герой кастанет что-либо.
Если баффа нет, обнулять таймер
0
10
4 года назад
0

» WarCraft 3 / Рандомный Герой

Centyrion:
Lotus101:
Недавно писал про выбор рандомных героев с таверны, глянь, может тебе лучше подойдет, а то у тебя слишком много каши...
я создал сам эту систему, мне только нужно узнать как переносить игрока на слот который играет и создать виспа для него
Потому что у тебя в цикле указывается от 1 игрока до последнего, то есть их два, но плеер с индексом 2 тогда будет игрок синий(или бирюзовый, а индекс 0 - красный),а не зеленей, сделай вместо цикла выбор всех игроков по контроллеру юзер, статус играет
0
10
4 года назад
Отредактирован Lotus101
0

» WarCraft 3 / Рандомный Герой

Недавно писал про выбор рандомных героев с таверны, глянь, может тебе лучше подойдет, а то у тебя слишком много каши...
0
10
4 года назад
Отредактирован Lotus101
0

» WarCraft 3 / Заставить ИИ выбрать юнита

МрачныйВорон:
Lotus101, выше скидывал как приказом покупать у здания. ну и на гуи можно
там отдаем магазину приказ "smart" (короче переключаем абилкой выбор на юнита. локально интерфейс у игрока переключается на магазин) и затем отдаем иммитирующий от нужного игрока приказ IssueNeutralImmediateOrderById где id-приказ равен id-итему или id-юнита (если нанимаете юнитов)
xgm.guru/p/blog-steal-nerves/ability3 раздел для магазинов. там пишут: Побочным эффектом способности ‘Aneu’ (Выбрать героя) или ‘Ane2’ (Выбор воина) является доступ к другим заклинаниям боевой единицы. Даже, вражеский воин может использовать способности обладателя выборки. Это же очевидно, помните, есть способность "разведка" в мастерской гоблинов, чтобы обследовать территорию, нужно подойти и кликнуть. Или способность "поставка ресурсов" - производит обмен. Точно, также происходит и с наймом юнитов, игре нужно знать какой игрок нажал, затем продает ему юнита. Есть даже нативки с приказами, иммитирующие действия магазина от другого игрока. Даже атакующие абилки срабатывают.
PT153:
Lotus101, гуи нет, можно через кастом написать.
IssueNeutralImmediateOrderById(твой_игрок, твоё_строение, равкод_предмета)
Спасибо большое, очень помогло чтобы не делать костыли. Сделал такую системку рандомного пика героев для ботов.
В иницилизации заносим переменную типа юнитов с массивом, указываем число типов.
При пике выбираем всех игроков-ботов, устанавливаем переменную случайного числа для массива переменнйо типа юнита и выбираем виспа, заставляем таверну с выпавшим типом кликать на этого виспа и продаем этого героя.
Есть вариант проще и красивее выбирать все таверны, заставлять кликать на виспа и продавать юнита, но цикл будет больше.
В триггере юнит продан узнаем под каким массивом проданный юнит и устанавливаем, что переменная типа юнита с этим массивом теперь тип юнита с последним текущем массивом, то есть меняем их местами, уменьшаем количество типов героев.
Таким образом при каждом пике героя все время выбирается новое случайно число, число типов героя уменьшается и последний на данный момент тип меняется на только что выпавший массив и каждый раз есть кого-то пикнуть. Проверял вроде повторов не было и у каждого компа всегда кто-то пикнут. Подправьте пожалуйста если есть серьезные ошибки или утечки.
0
10
4 года назад
0

» WarCraft 3 / Мои мысли об устаревших механиках Warcraft 3 и....

IceWhoYeaPriest:
Vlod:
Так реакция же и идёт от того, что игра на стратегию. Тут очевидная закономерность.
И для доты быть игрой тактичной - плохо. Возьмём мипо как пример невозможных требований к игроку как минимум в микро игре. Полный потенциал героя раскрыть не сможет ни один человек просто из-за физических ограничений рук и монитора игры. Но стоит понимать, что если бы все игроки на карте играли героями, которые были бы одинаково сложны также, как и мипо, то все были бы на изначально равных условиях.
Тактическая составляющая в доте же вещь абсолютно рандомная и от тактики игроков зависит частично. Неравные (но не очень критично) по макроигре плееры постоянно будут уступать друг другу, чередуясь поражениями, потому что в доте настолько огромное количество несбалансированных между собой факторов, что предугадать наверняка последствия большинства своих действий ты не сможешь. Не сможешь, потому что это не человеческого мозга уровень. Выходит, что в равной по скилу игре победит тот, кому сегодня зарандомит на тактическое преимущество, не более.
А что будет, если стереть границы, как между технарями и гуманитариями? Разграничение чисто условное, как и макроигра с микроигрой. Получится такая ядреная каша из явно неработающих в тесной связи механик, что это расписать никогда не выйдет, потому что, в случае доты, один фейл игровой механики налаживается на другую игровую механику и так до бесконечного рекурсивного цикла.
Вопрос о том, как же заставить играть между собой лишь равных игроков - это дикий баян. Просто хватит игроков заставлять наяривать на циферки и пусть рейтинг твоих способностей будет зависеть от твоих способностей, а не от побед или поражений. Рейтинг игрока не должен повышаться или понижаться до нужного уровня слишком долго. Игрок стал сильнее? Так поскорее закидывай его к тем, к какой касте он принадлежит, а не устраивай прелюдии.
Как вообще можно подумать, что человек может быть хорошим геймдизайнером и он способен принять хотя бы одно верное решение, если в его игре можно апнуть ммр на одном герое, при этом на апнутом рейтинге иметь возможность играть на всех остальных. Лягуха, как в целом и все остальные в моба жанре - бездарь, который не понимает того, что на каждого отдельного героя нужен отдельный рейтинг, с его динамическим изменением, как я предложил выше. А для этого нужно и систему пиков отменить, а для этой отмены нужно игру сбалансировать, а для баланса игры нужно убрать у героев принадлежность к разным импакт-таймам, принадлежность героя к пушащим/сплитящим/непушащим/скейлящимся/нескейлящимся/и-т.д.. Не должно в одной игре быть настолько много концептуально разных героев, при этом чтобы на эту концептуальность игрок никак не мог влиять, придумать как эти различия стереть и победить. Игра не даёт средств играть, а показывает какую-то визуальную новеллу, где ты просто кликаешь на одну кнопку и ждёшь пока игра сама за тебя решит весь сюжет.
Я не хочу сказать, что в доте совсем нет выбора, но игра тебя постоянно вынуждает принимать лишь одно верное решение и почти никогда не даёт выбор между несколькими равноценными решениями, которые порождают целую ветку остальных решений. А если и даёт, то это значит, что этот выбор слишком сложен для анализа человеком.
И, предвещая: да, я за то, чтобы полностью лишить героев "индивидуальности". Способности не должны иметь слишком разноплановый характер и должны иметь возможность соотносится друг с другом. А то один герой хорошо башни херачит, а другой героев бьёт. И кто из них победит, как это понять? Ты либо этого никогда не поймёшь, либо поймёшь сразу, зная про состояние экономики в игре, выгодно ли бить башни или же героев и т.д.. И тогда один из плейстайлов автоматически улетает в мусорку и здравствуй дисбаланс. В другом случае победа, как всегда, зависит от чистого рандома.
По поводу слтжности, казуальности героев полностью согласен. Или делать по сложности более менее всех равными, или пусть сложные персы при должном скиле выносят любого легкого, как бы тот не старался(скил то не нужен пару кнопок нажать)

Bergi_Bear:
Neo48, разброс атаки в 10 единиц ничего не решает, а решает критический удар x 10 рандомный, который может быть а может и не быть.
А по нормальному решают нормальные механики, такие как:
  1. Разоружение
  2. Конроль
  3. Усиление/ослабление урона
  4. Физическая неуязвимость
Есть ещё такие вещи как внезапность и право первого хода, вон они решают. Когда какой-нить герой наносящий 300 магического урона по площади бьёт толпу этих крипов с такой 35-45 единиц, и они вообще не бьют даже
А если в карте только такие юниты и у них ничего вообще нет, то сами играйте в эту карту
Про механики, была одна идея сделать герою пасиву при атаке сравниваются защита врага и ловкость твоего героя, если процент защиты минус шанс больше нужного атака как бы не проходит и у врага происходит блок урона с эффектом(типо щит подставил и тд), если же меньше, то герой попадает по врагу и получает другую способность для нанесения урона по врагу(или например урон по этому врагу увеличивается на время, не суть), вместо рандома как сейчас в одной карте, когда ты используешь полуультимативный скил есть 15/20/25/30/35 получить этот дополнительный скил по врагу с тонной урона. Не повезло, не убил и скорее всего умер. Повезло, то скорее всего убил или снес 50%+, повезло еще больше и ты сделаешь даблкил. Еще в моей задумке хп юнитов можно сделать как щит, соответственно когда хп заканчивается щит якобы уночтожается и по тебе начинают проходить уже прямые атаки с анимацией крови и юнит получает дебафы(кровотечение, замедление). Люблю реализм вообщем)
0
10
4 года назад
0

» WarCraft 3 / Заставить ИИ выбрать юнита

МрачныйВорон:
Lotus101, там нужно специальную абилку добавить, если правильно понял вашу проблему.

ссылка пункт 2.9
PT153:
Lotus101, удалить можно только тех, кто был добавлен триггерно.
Да я понял так и сделал, а вот приказ нейтральному зданию продать игроку юниту где находится, на гуи нет? Нужно компьютеру продать или он сам купил, пришлось костыли использовать
0
10
4 года назад
0

» WarCraft 3 / Конвертер карты в 1.26

Hodor:
NaxefirYT, уже обновил, надо подождать пока модератор утвердит
Спасибо огромное! На будущее, есть ли какой-то способ конвертировать на более новых версиях, может что-то в файлах карты прописать или проги? А то я новые нативки и прочее не использую, да их вроде и не добавляют.
0
10
4 года назад
0

» WarCraft 3 / Заставить ИИ выбрать юнита

PT153:
Как? Если говорите про вариант создавать триггерно и отдавать ИИ герою, то не катит, есть другой варинат?
Я же сказал в самом начале, Действия - Нейтральное строение.
Если нужно что-то купить в лавке для ИИ, для этого есть действия в категории Нейтральное здание.
Будет и кулдаун у покупки, и не надо никаких даммиков создавать.

Действия - Нейтральное строение
Ошибка, это делается во вкладке Боевая Единица, да и то только в UMSWE и только для покупки юнита. Тем не менее, это можно сделать через CustomCode.
Не знаю почему, триггеры Нейтральное здание(не триггеры юнит) не работают на продажу юнитов. Пришлось удалять этого юнита из магазина и добавлять нового такого же
0
10
4 года назад
0

» WarCraft 3 / Из-за рефорджа не работает пиратский варик и JNGP

Bergi_Bear:
МрачныйВорон, Только не говори, что ты тогда не разобрался как запустить файл реестра
Больше другой вопрос схожий интересует, конвертер карт из текущих версий в 1.26 только до 1.31 версии, а уже 1.32
0
10
4 года назад
0

» WarCraft 3 / Конвертер карты в 1.26

Hodor:
borissuworov, карты не расчитаны на открытие в игре
Их надо пересохранить в редакторе
10-20 КБ это нормально, если не ошибаюсь, конвертер не сжимает карту после конвертирования

Проверил карту, нормально конвертируется и открывается в игре
Надеюсь исходник не перепутан со сконвертированной картой?)
Т.к варкрафт не будет видеть исходник если он создавался в версии 1.31
Уже версия 1.32.5, на нее не работает конвертер, как быть?
0
10
4 года назад
0

» WarCraft 3 / Не хостит карту на 1.32.5 (лицуха, не рефорджед)

quq_CCCP:
Lotus101, ну хз что именно, это нужно сидеть и разбиратся, т.к рефорджа нет, то я этим и не занимался. Делал я лишь перенос старых патчей на актуальные, там были проблемы, Даже кодировка war3map.j бывала другой. Но что конкретно в твоей карте нетак с рефорджем я тебе помочь не смогу.
Смотреть какой кусок кода или наличие, отсуствие скрипта как влияют на работоспособность. Хекс защиты естественно снимать. Ну и так далее.
Подскажите какие программы или каким способом можно отменить дело оптимизатора, депротектор?