ofeerist, решил чето себе выдернуть?
кстати ссылка мб запилите нативки фреймов себе и прочего дерьма, что присутсвует в мемхаке демонстрационно, т.к ресурсоемко, позволит поднять производительность в разы. Ну правда придется еще и редактор модить чтобы новые нативки подсвечивались и сохранялось все без ошибок.
Если кто знает отличия API v1.4 от v1.1 - пишите, дополним ресурс.
Добавлены новые функции, после 1.3 добавлена поддержка китайского хака на память для патчей 1.27а+, добавлены несколько функций.
Ну и само собой новые оффсеты на новые патчи и фикс хука на детект урон, чтобы мог пахать на новых патчах.
Важное НО, если вы нароете еще хуков, к примеру со старых версий мемхака или то что выкладывал лич, они не будут пахать на старших патчах, ибо нет оффсетов, да и код доты разрабатывается уже пару лет как исключительно 1.26 онли и без вариантов.
quq_CCCP, сейчас пытаюсь вызвать локальные приказы, и я так любил этот метод тыка, неделю тыкаю, ничего не добился.
Ну а некоторые вещи никто в серьез не юзал, просто проверили - пашет и добавили, забыли...
Я в основном с абилками, уроном и хуками на завершение атаки, смену прицела работал. Прочее мне было мало интересно, если будут вопросы - можите задавать, мб что вспомню.
Тут очень желательно иметь свою карту и играть в нее чтобы собирать инфу по фаталам и ошибкам.
GetLocalPlayer, ой ну конечно, сложна, взять мемхак и проверить интересующие тебя функции, а так же задать по ним вопросы на форуме?
Потом мемхак от анрайза сделан максимально модульным чтобы не тащить в карту тонны мусора который никак не будет использоваться.
МрачныйВорон, понятно, что разные, какие - разные? Там их несколько Чем отличаются SetUnitAbilityDisabled и SetUnitAbilityDisabledEx, что за SetUnitAbilityHidden, GetAbilityBaseDataById и т.д.
Разные виды сайленса, есть обычное и продвинутое сало, и есть сало на конкретную абилку и на все абилки юнита, SetHidden - прячет иконку, замена запрещенному спеллбуку, Base - это работа с некоторыми фишками абилок, где нужна эта основа. Т.е берут абилку и правят все на её основе или чето там смотрят, зависит от функции. Насколько помню анрайз бегло тестил и убрал не безопасные и кривые функции.
С мемхаком это так не рабортает, что прочитал манул и делашеь, тут все методом тыка, ибо функций сотни, да еще и некоторые нужно юзать с умом. Лучше сразу задавайте вопрос, о тот что вы собрались делать и как для этого юзать мемхак.
Так то в мемхаке есть еще хуки на 100500 событий, типа мана отнялась, или в юнита полетел снаряд, снаряд промазал. Некоторые функции ресурсоемки и юзать их нужно с умом, помните что все Call**** функции довольно тяжолые, а так же конверты адрессов в обьекты, по этой причине стоит уделять оптимизации алгоритма максимум времени, то 6 кадров или фаталы обеспечены.
Есть быстрый конверт - но простым юзерам технология не доступна, как и перенос в дллки часть кода, добавление кастом нативок как в шарпкрафте или наработке Айсфога.
Ну и по хорошему, нужно брать и тестировать интересующую вам функцию, причем тщательно.
По событию юнит умирает, а дальше думать как фильтровать юнитов, к примеру если у вас это некий яд, то урон от яда должен наносится даммиком, если убивший даммик - то юнит умер от яда, это всего лишь 1 пример. Ну офк исходя из задачи и думаем о реализации.
Че ты собрался делать? Снова вопрос на тему вангования че ты там собрался делать? Код правят в жаскравте или блокноте, насчет зачем? Карта не открывается в редакторе потому что это ломаная карта а не исходник, такой ответ устраивает?
Ну блин, как насчет посмотреть как сделано в тех же картах близзардов.
Есть таймер, а есть Окно таймера, один считает время а второй показывает картинку на экране. По истечению времени таймер может вызвать триггер или функцию.
Эмм, чем стандартные скиллы не угодили, вроде создать труп (склеп нежити) , Призвать трупоеда (Повелитель могил), здание будет спавнить вокруг себя юнитов, по кд абилки, при этом не выше установленного лимита.
Потом нагружает карту не триггер, а его неумелое использование.
Я да написал про цикл, все слоты инвентаря поверил и выключил все остальные предметы,что тут непонятно? Включённый на выключенный предмет меняешь и все.
прикреплять спецээфект можно к разным частям юнита, спина, грудь, голова, руки, оружие - но не все модели имеют эти точки, да и выглядит убого.
предметы можно менять в иевентаре на лету, если юнит юзнул и предмет А, то удалить предмет А, и создать в иевентаре предмет Б, и наоборот. Естественно циклом проходим по всему инвентарю.
Зачем такое делать, кроме как вкл-выкл орб эффектов, чтобы не перебивали друг друга?
Anariys3333, какими скринами если там текст, который будет не виден нехрена. Потом если ты думаешь что ты себе скопируешь, я тебя разочарую - нефига, это так не работает, все время за тебя кто то твои хотелки делать не будет.
Я не юзаю GUI триггеры и пишу исключительно на jass, и достаточно подробно обьяснил как делается такая способность, если ты вовсе ни разу редактор триггеров не открывал, увы. Такие способности с нулевыми познаниями не сделать, информации много, берем и пробуем. Пишем что конкретно непонятно или не работает?
Уже было, примечание следует добавить - что они фаталят.
Там не со всеми обьектами пашет, так что имейте это ввиду, у тех же cost нативок насколько помюню был изьян.
код приложен под катом, бери и правь.
Хештаблица - ну банальное прикрепление данных к обьекту, в данном случае к триггеру юнита, call SaveUnitHandle( хештаблица, id триггера, ключ, юнит), SaveUnitHandle( HashData, id, 0, targ ). Насет абилки кольца защиты, есть такой предмет - кольцо защиты, и есть у него способность, которая повышает защиту, копируюем её, бонус защиты на ноль настраиваем, а в полях Граффика маг, спецэффект. Это нужно чтобы прекрепить спецэффект к юниту, который не пропадет при морфе, сокрытии или других действиях. Просто пустышка для визуального эффекта, можно использовать и другие способности, но абилка бонуса защиты не имеет иконки и не багут\мешает другим способностям, работают у всех юнитов (бонус атрибутов фатальнет у не героев).
function Trig_Surge_Expires_Conditions takes nothing returns boolean
local trigger trg = GetTriggeringTrigger()
local integer id = GetHandleId(trg)
local unit targ = LoadUnitHandle( HashData, id, 0 )
call DisableTrigger(trg)
call UnitRemoveAbility( targ, 'A0C9' )
call UnitRemoveAbility( targ, 'B07W' )
call RemoveSavedHandle( HashData, ExSurge, GetHandleId(targ))
call FlushChildHashtable( HashData, id )
call S0I(trg)
set trg = LoadTriggerHandle( HashData, ExPhaseKey, GetHandleId(targ) )
if trg == null then
//call SetUnitPathing( targ, true )
endif
set targ = null
set trg = null
return false
endfunction
function Trig_Surge_Actions takes nothing returns nothing
local unit targ = GetSpellTargetUnit( )
local real dur = RMaxBJ( 1.50 * GetUnitAbilityLevel( GetSpellAbilityUnit(),'A0R7' ) + 1.50, 3.01 )
local trigger trg = LoadTriggerHandle( HashData, ExSurge, GetHandleId(targ) )
local integer id
if trg != null then
call TriggerEvaluate(trg)
endif
set trg = LoadTriggerHandle( HashData, ExPhaseKey, GetHandleId(targ) )
if trg != null then
call TriggerEvaluate(trg)
endif
set trg = CreateTrigger()
set id = GetHandleId(trg)
call SaveTriggerHandle( HashData,ExSurge, GetHandleId(targ), trg )
call SaveUnitHandle( HashData, id, 0, targ )
call TriggerAddCondition( trg, Condition(function Trig_Surge_Expires_Conditions ) )
call TriggerRegisterDeathEvent( trg, targ )
call TriggerRegisterTimerEvent( trg, dur, false )
call UnitAddAbility( targ, 'A0C9' )
call UnitMakeAbilityPermanent( targ, true, 'A0C9' )
call SetUnitAbilityLevel( targ, 'A0C9', GetUnitAbilityLevel( GetSpellAbilityUnit(),'A0R7' ) )
call AuraUpdateEffect( targ, 'A0R7' )
call IO1(UD,GetUnitX(targ),GetUnitY(targ))
call DestroyEffect(AddSpecialEffectTarget("effects\\Surge.mdx",targ,"origin"))
if not IsUnitType( targ,UNIT_TYPE_FLYING)then
//call SetUnitPhased(targ)
endif
set targ = null
set trg = null
endfunction
function Trig_Surge_Conditions takes nothing returns boolean
if GetSpellAbilityId() == 'A0R7' then
call Trig_Surge_Actions()
endif
return false
endfunction
function Register_Surge takes nothing returns nothing
local trigger trg = CreateTrigger( )
local integer nIndex = 1
call TriggerAddCondition( trg, Condition( function Trig_Surge_Conditions ) )
loop
exitwhen nIndex > 11
if IsSlotPlayer( Player( nIndex ) ) then
call TriggerRegisterPlayerUnitEvent( trg, Player( nIndex ), EVENT_PLAYER_UNIT_SPELL_EFFECT, OnlyHero )
endif
set nIndex = nIndex + 1
endloop
set trg = null
endfunction
Это код способности surge, из доты, когда то давно делал. Ну собственно тут довольно примитивный код и как раз пример как нужно следить за юнитом, тут реализован и диспел и перебивание баффа при повторном применении, это не намного сложнее кастомного сна, который я описал выше.
Просто добавляем в кондишене второго триггера услвоие с GetTriggerEventId() == ну и событие, к примеру EVENT_WIDGET_DEATH чтобы снимать эффект при смерти, уроне выше 0 не от кастера или от истечении времени.
А в чем проблема, т.к сон сбивается при уроне, то стандартные способности не подойдут, берешь обычное высасывание жизни, и создаешь триггер событием которого будет - юнит приводит способность в действие, условие - примененная способность == твоё сосание жизни, ну и действие:
Применяем на жертву PauseUnit, вручаем жертве способность на основе кольца защиты с нулевым бонусом и прекрепленным эффектом сна, далее создаем новый триггер, с событиями - юнит получает урон, юнит умирает, время вышло, кастер отдел приказ, цель точка, цель обьект, без указания цели. Ну и добавляем триггеру новое условие, в котором будем делать действия. Сохраняем в хештаблицу юнита цель и нашего кастера. Выгружаем в условии вновь созданного нами триггера, проверяем от чего сработал триггер, если триггер сработал от смерти, или урона, или от приказа не равного - приказу похищения жизни, триггер отключаем, у юнита удаляем паузу и абилку пустышку для визуального эффекта. Если цель получила урон не от кастера, и урон выше 0 - то паузим кастера и тут же сбиваем паузу, попутно так же выключая триггер и снимая с жертвы паузу и спецэффект. Ну и не забываем обнулять все локальные переменные и удалять триггер в конце.
LaBlinov369, это хакнутая версия game.dll, в ней исправили лимит карт для мультиплеера, запомните на айкап дорога закрыта с ним, айкап лаунчер считает что с игрой чето нетак. Снимать лимит, не трогая целостность файлов игры умеют многие проги, тот же WFE, был даже отдельный микс файл для снятия лимита.
Механику каста ты никак не изменишь у дефолтных способностей, Берёшь автокаст пустышку к примеру ярость огра, или ледяной щит,и триггерно из них делаешь эти абилки.
» WarCraft 3 / Memory hack API v1.4
» WarCraft 3 / Memory hack API v1.4
автор иногда бывает онлайн, можешь поспрашивать.
Вот еще пример, конфетные войны, которые вместо скрипта имеют длл.
» WarCraft 3 / Memory hack API v1.4
» WarCraft 3 / Memory hack API v1.4
кстати ссылка мб запилите нативки фреймов себе и прочего дерьма, что присутсвует в мемхаке демонстрационно, т.к ресурсоемко, позволит поднять производительность в разы. Ну правда придется еще и редактор модить чтобы новые нативки подсвечивались и сохранялось все без ошибок.
» WarCraft 3 / Memory hack API v1.4
Ну и само собой новые оффсеты на новые патчи и фикс хука на детект урон, чтобы мог пахать на новых патчах.
Важное НО, если вы нароете еще хуков, к примеру со старых версий мемхака или то что выкладывал лич, они не будут пахать на старших патчах, ибо нет оффсетов, да и код доты разрабатывается уже пару лет как исключительно 1.26 онли и без вариантов.
Я в основном с абилками, уроном и хуками на завершение атаки, смену прицела работал. Прочее мне было мало интересно, если будут вопросы - можите задавать, мб что вспомню.
» WarCraft 3 / Memory hack API v1.4
Потом мемхак от анрайза сделан максимально модульным чтобы не тащить в карту тонны мусора который никак не будет использоваться.
» WarCraft 3 / Memory hack API v1.4
С мемхаком это так не рабортает, что прочитал манул и делашеь, тут все методом тыка, ибо функций сотни, да еще и некоторые нужно юзать с умом. Лучше сразу задавайте вопрос, о тот что вы собрались делать и как для этого юзать мемхак.
Так то в мемхаке есть еще хуки на 100500 событий, типа мана отнялась, или в юнита полетел снаряд, снаряд промазал. Некоторые функции ресурсоемки и юзать их нужно с умом, помните что все Call**** функции довольно тяжолые, а так же конверты адрессов в обьекты, по этой причине стоит уделять оптимизации алгоритма максимум времени, то 6 кадров или фаталы обеспечены.
Есть быстрый конверт - но простым юзерам технология не доступна, как и перенос в дллки часть кода, добавление кастом нативок как в шарпкрафте или наработке Айсфога.
» WarCraft 3 / Найти умирающего юнита
» WarCraft 3 / Как работать с картой в виде папки?
» WarCraft 3 / Таймер и тренировка
Есть таймер, а есть Окно таймера, один считает время а второй показывает картинку на экране. По истечению времени таймер может вызвать триггер или функцию.
» WarCraft 3 / Насколько триггер грузит карту?
» WarCraft 3 / 1 оружие = 2 предмета
» WarCraft 3 / 1 оружие = 2 предмета
» WarCraft 3 / Как создать способность
Я не юзаю GUI триггеры и пишу исключительно на jass, и достаточно подробно обьяснил как делается такая способность, если ты вовсе ни разу редактор триггеров не открывал, увы. Такие способности с нулевыми познаниями не сделать, информации много, берем и пробуем. Пишем что конкретно непонятно или не работает?
» WarCraft 3 / Наличие типа юнита в массиве
» WarCraft 3 / AI natives
Там не со всеми обьектами пашет, так что имейте это ввиду, у тех же cost нативок насколько помюню был изьян.
Ред. quq_CCCP
» WarCraft 3 / Как создать способность
Хештаблица - ну банальное прикрепление данных к обьекту, в данном случае к триггеру юнита, call SaveUnitHandle( хештаблица, id триггера, ключ, юнит), SaveUnitHandle( HashData, id, 0, targ ). Насет абилки кольца защиты, есть такой предмет - кольцо защиты, и есть у него способность, которая повышает защиту, копируюем её, бонус защиты на ноль настраиваем, а в полях Граффика маг, спецэффект. Это нужно чтобы прекрепить спецэффект к юниту, который не пропадет при морфе, сокрытии или других действиях. Просто пустышка для визуального эффекта, можно использовать и другие способности, но абилка бонуса защиты не имеет иконки и не багут\мешает другим способностям, работают у всех юнитов (бонус атрибутов фатальнет у не героев).
» WarCraft 3 / Как создать способность
Ред. quq_CCCP
» WarCraft 3 / Как создать способность
Просто добавляем в кондишене второго триггера услвоие с GetTriggerEventId() == ну и событие, к примеру EVENT_WIDGET_DEATH чтобы снимать эффект при смерти, уроне выше 0 не от кастера или от истечении времени.
» WarCraft 3 / Как создать способность
» WarCraft 3 / Как создать способность
» WarCraft 3 / Как создать способность
» WarCraft 3 / Как создать способность
Применяем на жертву PauseUnit, вручаем жертве способность на основе кольца защиты с нулевым бонусом и прекрепленным эффектом сна, далее создаем новый триггер, с событиями - юнит получает урон, юнит умирает, время вышло, кастер отдел приказ, цель точка, цель обьект, без указания цели. Ну и добавляем триггеру новое условие, в котором будем делать действия. Сохраняем в хештаблицу юнита цель и нашего кастера. Выгружаем в условии вновь созданного нами триггера, проверяем от чего сработал триггер, если триггер сработал от смерти, или урона, или от приказа не равного - приказу похищения жизни, триггер отключаем, у юнита удаляем паузу и абилку пустышку для визуального эффекта. Если цель получила урон не от кастера, и урон выше 0 - то паузим кастера и тут же сбиваем паузу, попутно так же выключая триггер и снимая с жертвы паузу и спецэффект. Ну и не забываем обнулять все локальные переменные и удалять триггер в конце.
» IrInA Host Bot / Game.dll
» WarCraft 3 / Автокаст прожимных навыков