,

Хак на память Warcraft3

» опубликован
» Способ реализации: vJass
» Тип: Наработка
» Версия Warcraft: 1.26 и ниже
Собственно тот знаменитый хак на память который нам радостно предоставил DracoL1ch, который позволяет нам больше не морочится с системами отлова урона, или вовсе узнать координаты курсора без стороннего по.
Для сохранения требуется: экспериментальная версия pjass.exe
Причём не все подходят, меньше всего проблем было с этой версией
В хаке присутствует только 1 пример на изменение белой атаки у героя, остальные готовые функции можно найти на:
Хайве
Гитхабе
Просто копируем саму функцию, все остальное для её работы есть в наработке и сохраняем.
Так же на хайве есть инструкция по созданию собственных функций для чтения\изменения данных в памяти игры.


Просмотров: 41 698



» Лучшие комментарии


ClotPh #201 - 2 года назад (отредактировано ) -5
Понятно, ну т. е. кулдаун считается в момент запуска и потом со сменой времени перезарядки абилы уже пропорционально не меняется
Лучше и логичнее было бы, имхо, чтобы он пропорционально менялся, ну сойдет и так, спасибо, один хрен тут поле непаханое - можно, например, значение перезарядки абилы добавлять/убавлять к атаке и т. п., столько комб и идей, ну а основная идея - ппц повышать врагам перезарядки на время и понемногу постепенно, чтобы они вроде и не под салом были, а сделать НИЧО ПОЧТИ НЕ МОГЛИ ))) Ну и своим снижать, чтобы все раскастовывались как бристлбеки - кто когда говорил, что маги не лейт?
Офк баланс, да, ну тут уже бкб и антимагии всякие должны помогать
PS dota2.ru/forum/threads/psixopompa.1025855
Так, а если так:
Событие - unit приводит способность в действие.
Действия:
  • Запомнить как реалку перезарядку этой способности.
  • Через SetAbilityCD немедленно изменить ей перезарядку на 2 секунды (тогда, ятп, она успеет начать считаться как новое).
  • Через 0.2 секунды вернуть ей то значение перезарядки, которое было, из запомненной реалки.
Тогда перезарядка в этот раз уже пойдет как 2 секунды, но GetAbilityCD будет возвращать 10 (ну уже через те самые 0.2 секунды, когда перезарядка "фактически нормализуется на будущее").
Всё верно? Как понимаю, да.
Просто это можно ультовый бафф на союзника "все ваши способности перезаряжаются 2 секунды вместо действительной перезарядки". Ну или дебафф на врага, только там будет не 2 секунды, а 30 каких-нибудь.
P. S. Какого панциря даже через много дней последовательные сообщения от одного юзера склеиваются? Нелогично, да и правильность их плюсо-минусовой оценки тогда может быть сомнительной, оценивалось-то самое первое.
DracoL1ch #202 - 2 года назад 0
если тебе нужно конкретному юниту конкретную перезарядку поменять, так поменяй её после spell_effect, персонально, по известному навыку, конкретному юниту, зачем огоород с глобальным изменением кд и восстановлением?
типа кастанул - через 0 секунд берется адрес способности и в её кулдаун вписывается нужное значение. всё
DracoL1ch #203 - 2 года назад 0
ребят, я не оказываю поддержку по внедрению хака и тонкостям взаимодействий с другими длл. вся информация для раздумий уже выложена, и от либы нашей есть исходники, если хочется посмотреть
В крайнем случае просто спрашивайте у местных. Моя личка непробиваема один хер
Napoleon #204 - 2 года назад 2
DracoL1ch:
ребят, я не оказываю поддержку по внедрению хака и тонкостям взаимодействий с другими длл. вся информация для раздумий уже выложена, и от либы нашей есть исходники, если хочется посмотреть
В крайнем случае просто спрашивайте у местных. Моя личка непробиваема один хер
А где найти необходимую информацию тогда. Ибо мне посоветовали применить данную вещь, чтобы интегрировать авто-закачку и динамическое обновление.
quq_CCCP #205 - 2 года назад 0
Napoleon, тут и спрашивать.
Что непонятно?
Rhazarian #206 - 2 года назад 0
Работает ли данный хак на недавно вышедшей версии - 1.27b, или только на предыдущих?
ClotPh #207 - 2 года назад 0
Работает на всех, писали уже.
Верно понимаю, что GetMouseX, GetMouseY, GetMouseZ у разных игроков отлавливается по-разному и может вызвать десинк в сетевой при неправильном применении? То есть если я, например, по этим числам выведу координаты точки и использую ее для перемещения или создания объекта или определения направления - десинк, гг?
Скажу спасибо за образец кода, дающий возможность определить координаты мыши только для овнера определенного юнита без десинка в сетевой (ну чтоб там стрелять в направлении мыши, например).
Diaboliko #208 - 2 года назад 0
ClotPh:
Работает на всех, писали уже.
Верно понимаю, что GetMouseX, GetMouseY, GetMouseZ у разных игроков отлавливается по-разному и может вызвать десинк в сетевой при неправильном применении? То есть если я, например, по этим числам выведу координаты точки и использую ее для перемещения или создания объекта или определения направления - десинк, гг?
Скажу спасибо за образец кода, дающий возможность определить координаты мыши только для овнера определенного юнита без десинка в сетевой (ну чтоб там стрелять в направлении мыши, например).
Кажется, кто-то (на ксгм или на хайве) интересовался нашел ли кто где взять разрешение экрана, вероятно это связано с этим. Касательно стрельбы - вроде скорп (ScorpioT1000) в свое время делал наработку по стрельбе от первого лица по нажатию ESC. Там единственная нерешенная проблема была, если не ошибаюсь, с движением камеры по XY. По Z она перемещалась свободно.
alexprey #209 - 2 года назад 0
ClotPh, есть возможность синхронизировать изменение данных юнита на случай таких вызовов. Но точно не могу вспомнить как
DracoL1ch #210 - 2 года назад 2
нет, на 27b работает только чтение, запись недоступна. в дальнейшем, возможно, закроют и запись.
призывайте игроков оставаться на старых патчах или забудьте об этом треде \_('-' )_/
|> Скажу спасибо за образец кода, дающий возможность определить координаты мыши только для овнера определенного юнита без десинка в сетевой (ну чтоб там стрелять в направлении мыши, например).
устанешь синхронизировать (я не знаю ответа) (и не знаю, зачем люди создают фпс на движке ртс)
quq_CCCP #211 - 2 года назад 0
DracoL1ch,
Для них это самый доступный движок. В их картах может быть мини игра с использованием стрельбы от первого лица, которая не является "шурупом" карты...
ledoed #212 - 2 года назад (отредактировано ) 0
ClotPh:
Попробуй применить векторы то есть привязка идёт не конкретным координатам а по направлению
перевести экран в процентный вид от -1 до 1(1==100%) и тд
ClotPh #213 - 2 года назад 0
Тут было очень многобукаф, но все они удалены за ненадобностью.
Короче, если кто поможет сделать из этого кода (вываренного на основе изученной информации) то, что нам выдает в нижние реалки координаты мыши от контроллера юнита - спс.
Потому что сейчас очень сомневаюсь, что все как надо, но дальше котел уже не варит и до НГ конкретно не хочет, другие дела есть важные.
Но также есть и уверенность, что для знающего человека исправить - макс. несколько минут.
globals
gamecache cache = InitGameCache("cache")
endglobals
function SyncReal takes player p, real val returns real
if (GetLocalPlayer() == p) then
call StoreReal(cache, , , val)
endif
call TriggerSyncStart()
if (GetLocalPlayer() == p) then
call SyncStoredReal(cache, , )
endif
call TriggerSyncReady()
return GetStoredReal(cache, , )
endfunction
function MySpell takes nothing returns nothing
local player p = GetOwningPlayer(GetTriggerUnit())
local real XCoord = SyncReal(p, GetMouseX())
local real YCoord = SyncReal(p, GetMouseY())
DracoL1ch #214 - 2 года назад 0
если бы синхронизация работала как полагается, я бы так и сказал. но ни одна из существующих жасс нативок не обеспечивает синхронизацию с достаточной скоростью. для значений типа 0-1 лучший вариант - это выделение юнита, потому что варкрафт его автоматически отправит в сеть и обеспечит хоть как-то актуальную информацию на всех компах. а в случае отправки значений с точкой - совершенно другой коленкор. Проще уж на trackable сделать
quq_CCCP #215 - 2 года назад 0
ClotPh, в твоем коде нету вейта на пару сек, синхроеизация вещь не мгновенная и порой занимает очень много времени, все зависит от пинга.
ClotPh #216 - 2 года назад 0
Там в примере не вейт, а триггерслип по ссылке, хотя суть похожа, да.
Т. е. так?
globals
gamecache cache = InitGameCache("cache")
endglobals
function SyncReal takes player p, real val returns real
if (GetLocalPlayer() == p) then
call StoreReal(cache, , , val)
endif
call TriggerSyncStart()
if (GetLocalPlayer() == p) then
call SyncStoredReal(cache, , )
endif
call TriggerSleepAction(2.)
call TriggerSyncReady()
return GetStoredReal(cache, , )
endfunction
function MySpell takes nothing returns nothing
local player p = GetOwningPlayer(GetTriggerUnit())
local real XCoord = SyncReal(p, GetMouseX())
local real YCoord = SyncReal(p, GetMouseY())
А как в таком случае вообще работает триггерслип? Ведь реалки в функции MySpell объявляются сверху. Если она, например, срабатывает на приведение способности в действие, то, пока синхронизация не пройдет, триг вообще действовать не будет у всех игроков? Т. е. там может задержаться после каста спелла его эффект на 3-4 сек, НО потом будет синхронизация БЕЗ десинка?
16GB #217 - 2 года назад 0
через мемхак можно сделать например рендж юнита, милишником без морфа?
DracoL1ch #218 - 2 года назад 0
атака - это полностью независимый скил, крути что хочешь как хочешь, за редкими исключениями
тип атаки, ренж и другие "простые" параметры входят в число крутящихся
SomnusUltima #219 - 2 года назад 0
качаю ваши выложенные карты где все работать должно, но при сохранении 11 ошибок вылезает. Ниче не меняю.
снимаю вопрос, я идиот. Все заработало
Есть ли функция на проверку нажата ли определенная кнопка в данный момент, а так же проверка зажата ли кнопка мыши в данный момент? какая функция за это отвечает и что скопировать
прикреплены файлы
Drynwhyl #220 - 2 года назад 0
Daniil18, уже отвечали на этот вопрос, функция IsKeyPressed, ей же определяется зажата ли кнопка мыши.
SomnusUltima #221 - 2 года назад 0
Drynwhyl, все сделал, но как саму проверку на конкретную клавишу сделать. Как узнать интегер этой кнопки?
я опять ретард, только спросил тут же нашел выход. Хочу сделать шутанчик с управлениями кнопками, тут надо будет париться с локал плеерами от десинков?
quq_CCCP #222 - 2 года назад 0
Daniil18:
Drynwhyl, все сделал, но как саму проверку на конкретную клавишу сделать. Как узнать интегер этой кнопки?
я опять ретард, только спросил тут же нашел выход. Хочу сделать шутанчик с управлениями кнопками, тут надо будет париться с локал плеерами от десинков?
Увы да, если ты будешь играть не в сингл плеер.
Alexander12 #223 - 2 года назад 0
На 1.27b на запись не работает. Пока есть 2 варианта, mix на 1.27b который бы включал возможность запись в память. 2) убедить сервера, включить это в своем лаучнере. Либо окончательно забить на вк3.
ClotPh #224 - 2 года назад 4
Да если уж варом все еще заниматься, то тут уже надо думать о нем, имхо, не как о варе в целом, а как о заготовке RTS-конструкторе, MUGEN от RTS и/или MOBA-жанра (благо контент продолжает создаваться и в наши дни, можно хоть, к примеру, RTSшку с 30 самыми извращенными расами сделать, было бы желание), из которой можно для себя что угодно пилить, официально игра уже давно по сути не существует.
Если проект обретет популярность, не вижу проблем хоть гигабайтные сборки скачивать (на основе того патча, какого надо), и играть через этот самый проект именно этой варовской сборки; доту 2 качают, не обсираются, уже, по-моему, и в деревнях качаются гигабайты; а если что безынтересно, оно и в виде маленьких карт не нужно.
А на близзов пофиг давно, они с варом ниче уже не сделают существенного, а если сделают, это очень сильно удивит (ну 128 мб сделали... безлим народный до них вышел, опять же, раньше, так что все, вар уже принадлежит народу).
Alexander12 #225 - 2 года назад 0
Лучше предложить модмейкорам, оставаться на 1.26 и игнорировать 1.27+, пока близарды не дадут достаточную замену в новых патчах
Alexander12 #226 - 2 года назад 0
после использования SetAbilityUbertip может выдавать фатал, при очистке памяти.(в новой игре)
ClotPh #227 - 2 года назад 2
Из небольших любопытных наблюдений, мб кому пригодится.
Было сделано простое заклинание, временно снижающее базовую скорость перемещения цели до 0. Т. е. при касте на цель запоминается в реалку, какая была скорость перемещения, ставится 0 (даже -300 ставится, на всякий пожарный), а по истечении срока действия возвращается значение из реалки. Чтобы все работало, в константах еще стоит минимальная скорость боевой единицы 0.
Так вот интересный побочный эффект: если цель, когда на нее кастануть это "Сковывание", уже будет идти в каком-то направлении, то продолжит идти с прежней скоростью. Но вот если остановится хоть на мгновение, например, для атаки или каста, или попытается сменить направление движения - все, встанет вертеться на месте, как миленькая, пока спелл не кончится.
То есть тут значительное отличие от простой "сетки" ;) Не говоря уже о том, что под таким сковыванием можно все блинки юзать, а не только триггерные, и что снижение скорости цели может повлиять на эффекты некоторых заклинаний.
ClotPh #228 - 2 года назад 0
Поправочка-добавочка: скорость не режется ниже 1. В константах минимальная стоит 0, в триггере вообще приказано давать -300, а фактически получается 1 (измерено командой -ms). В остальном инфа справедливая.
quq_CCCP #229 - 2 года назад 0
ClotPh, Не удивительно, в движке встроены собственные проверки корректности скорости перемещения, так что даже мемхаком низя поднять скорость выше 522.
ClotPh #230 - 2 года назад (отредактировано ) 0
Если ломать дальше, то надо сильнее хакать, до этих проверок докапываться :D :D :D
А вообще -300 ставилось, кстати, потому, что хотелось заодно проверить, возможна ли отрицательная скорость перемещения (не пойдет ли юнит задом :D) Не пошел, а жалко, тоже фантазия ппц разыгрывалась, что бы можно было сделать... Хотя это офк и так можно сделать, но триггерно...
quq_CCCP #231 - 2 года назад (отредактировано ) 0
Увы скорость перемещения связана с частотой обновления кадров, тумана войны, видимости юнитов и поэтому там все не так просто.
Насколько помню лич долго бился с той же видимостью, карты путей у юнитов и видимость при большой скорости будут работать некорректно.
DracoL1ch #232 - 2 года назад 0
туман-то я давно умею мемхаком сам обновлять
недавно нашел и лимиты на мс
отрицательную скорость, кстати, не пробовал. но значения выше 550 могут приводить к небольшим затупкам из-за слишком большого шага юнита, вследствие чего ему приходится разворачиваться, чтобы попасть по чекпоинту (карты путей)
не, всё, что 0 или ниже, равно нулю, юнит встает
Vitalik8 #233 - 2 года назад 0
подскажите что делать, при сохранение вылетает 11 ошыбок
Steal nerves #234 - 2 года назад (отредактировано ) 0
Vitalik8, читай в комментариях, что нужно делать.
И скачай jngp + pjass.exe. Если выскакивают ошибки даже с этим. То нужно, как пишут в комментах, еще выключить cJass. Мне помогло это.
И уметь правильно сохраняться (дважды и путь и название карты не дожно содержать кириллицы).
ClotPh #235 - 2 года назад 0
Если кому не впадлу - че там с ренджем атаки? Вроде что-то было, но при попытке поставить и использовать нихрена не делало (при этом дистанция получения приказа у препарируемого юнита на всякий пожарный в РО высокая ставилась).
Просто ну нет сейчас времени все самостоятельно переиспытывать, не сто рук и мозгов. А идеи классные (типа снайперского поля, медленно по чуть-чуть увеличивающего рендж атаки ренджевикам, пока в нем стоишь) подъезжают.
DracoL1ch #236 - 2 года назад 2
ClotPh:
уверен? у меня прекрасно работают все манипуляции с атакой
ClotPh #237 - 2 года назад 0
Хм... странно, действительно работает, ну, значит, в очередной раз личная наркомания...
karaulov #238 - 2 года назад 4
Daniil18:
Drynwhyl, все сделал, но как саму проверку на конкретную клавишу сделать. Как узнать интегер этой кнопки?
я опять ретард, только спросил тут же нашел выход. Хочу сделать шутанчик с управлениями кнопками, тут надо будет париться с локал плеерами от десинков?
Я добавлял полноценную поддержку собственных пакетов, с примером управления WASD, там используется DLL для регистрации клавиш, а через JASS код прием и отправка любых пакетов включая нажатия клавиш и что угодно вообще. Сейчас появилась возможность отключать ненужные функции из моей DLL через JASS код для использовании в других картах.
Код устаревший на github / hive, там нет обработчика пакетов.
Был реализован в JASS коде прием и отправка пакетов с любыми данными, и обработка входящих пакетов, т.е локально можно вызвать отправку любых данных после чего у всех сработает триггер на прием с этими данными.
В новом коде был пример управления на WASD/CTRL/SPACE.
Но в игре существует ограничение на количество приказов, не знаю как его убрать. Если отправить в секунду где-то 30 пакетов, то игрок отправивший их не сможет ничего делать где-то несколько секунд.
Alexander12 #239 - 2 года назад 0
Но в игре существует ограничение на количество приказов, не знаю как его убрать. Если отправить в секунду где-то 30 пакетов, то игрок отправивший их не сможет ничего делать где-то несколько секунд.
Лимит отрубается у хоста...
в ghost боте это реализуется вроде как
karaulov #240 - 2 года назад (отредактировано ) 0
Нет, даже в локальной игре такой лимит есть.
Это скорее лимит на отправку чем на прием
Dracol1ch не обновлял код на github/hive по этому там нет кода на отправку и прием своих пакетов, может он обновит незнаю)
quq_CCCP #241 - 2 года назад 0
Alexander12:
Но в игре существует ограничение на количество приказов, не знаю как его убрать. Если отправить в секунду где-то 30 пакетов, то игрок отправивший их не сможет ничего делать где-то несколько секунд.
Лимит отрубается у хоста...
в ghost боте это реализуется вроде как
У хост игра почти что своя игра, для эмитации игрока и прочего, ему и game.dll ненужен, правда все зависит от самого бота и того кто его писал.
ClotPh #242 - 2 года назад (отредактировано ) 0
Есть герой Психопомпа.
Из-за его способностей происходит следующее:
  • Каждый раз, когда любой герой кастует любой спелл и его перезарядка больше 1, перезарядка первой абилы Психопомпы приравнивается к перезарядке этой скастованной абилы, а манакост - к перезарядке этой абилы, умноженной x3/x4/x5/x6/x7 по лвлу прокачки.
  • Каждый раз, когда любой герой кастует любой спелл не-предмета и его перезарядка больше 1, Психомомпа ресает ману в 4 * перезарядка скастованной способности * уровень этой своей способности.
  • Каждый раз, когда любой герой кастует любой спелл не-предмета и его перезарядка больше 1, Психомомпа ресает здоровье в перезарядка скастованной способности * уровень этой своей способности.
Иногда (НЕ после каждой игры, но иногда) по выходу из вара происходит фатал.
Есть предположения о причинах? Или это само по себе потому, что постоянно передрачивается перезарядка способности и ее манакост?
КСТАТИ. У абилы не 10 лвлов, а 5, это "предусмотрительный" ифзенэлс из другого триггера. Так что loop каждый раз пытается вписать по 5 манакостов и перезарядок в первом триггере на несуществующие уровни абилы. Мб в этом причина??? Но почему тогда фатал иногда есть, а иногда не? Ну это я в люб. случае исправлю потом, главное, не забыть.
Коды ниже (триги, вызывающие эти функции, реагируют на каст любой абилы любым героем)
function MadBreathParametersChange takes nothing returns nothing
local integer i = 11
local real newcd = GetAbilityCD(GetSpellAbilityId(), GetUnitAbilityLevelSwapped(GetSpellAbilityId(), GetTriggerUnit()))
if (GetAbilityCD(GetSpellAbilityId(), GetUnitAbilityLevelSwapped(GetSpellAbilityId(), GetTriggerUnit())) >= 1) then
ЗАДАЕМ ПЕРЕЗАРЯДКУ И МАНАКОСТ БЕЗУМНОГО ДЫХАНИЯ, УРОН УЖЕ ОТ НИХ ПОТОМ
loop
exitwhen i < 1
set i = i-1
call SetAbilityCD ('A27Q', i, newcd)
call SetAbilityManaCost('A27Q',i,R2I(GetAbilityCD('A27Q',i) * (2 + i)))
endloop
ЗАДАЕМ ПЕРЕЗАРЯДКУ И МАНАКОСТ БЕЗУМНОГО ДЫХАНИЯ, УРОН УЖЕ ОТ НИХ ПОТОМ - ЗАКРЫТО.
else
endif
endfunction
function DelicacyEffect takes nothing returns nothing
ВНИМАНИЕ!!! ОБНУЛЯЕМЫЕ ПЕРЕМЕННЫЕ ЗДЕСЬ СПИСКОМ - НОВЫЙ ШАБЛОН СОВЕРШЕНСТВА, ВСЕ ТЕСТКАРТЫ БЕЗ ОНОГО БУДУТ УДАЛЕНЫ: u5, herounits
local unit u5
local group herounits = GetUnitsInRectAll(GetPlayableMapRect())
ВНИМАНИЕ!!! ОБНУЛЯЕМЫЕ ПЕРЕМЕННЫЕ ЗДЕСЬ СПИСКОМ - НОВЫЙ ШАБЛОН СОВЕРШЕНСТВА, ВСЕ ТЕСТКАРТЫ БЕЗ ОНОГО БУДУТ УДАЛЕНЫ - ЗАКРЫТО
if ( GetUnitAbilityLevelSwapped(GetSpellAbilityId(), GetTriggerUnit()) >= 1 ) and (GetAbilityCD(GetSpellAbilityId(), GetUnitAbilityLevelSwapped(GetSpellAbilityId(), GetTriggerUnit())) >= 1) then
ИЩЕМ СРЕДИ ГЕРОЕВ ТЕХ, У КОГО ЕСТЬ ПАССИВКА И ДОБАВЛЯЕМ МАНУ
loop
set u5=FirstOfGroup(herounits)
exitwhen u5==null
call GroupRemoveUnit(herounits,u5)
if ( GetUnitAbilityLevelSwapped('A27S', u5) >= 1 ) then
call SetUnitState(u5, UNIT_STATE_MANA, GetUnitState(u5, UNIT_STATE_MANA) + 4 * GetUnitAbilityLevelSwapped('A27S',u5))
else
endif
endloop
ИЩЕМ СРЕДИ ГЕРОЕВ ТЕХ, У КОГО ЕСТЬ ПАССИВКА И ДОБАВЛЯЕМ МАНУ - ЗАКРЫТО.
else
endif
call DestroyGroup (herounits)
ВНИМАНИЕ!!! ОБНУЛЯЕМЫЕ ПЕРЕМЕННЫЕ ЗДЕСЬ СПИСКОМ - НОВЫЙ ШАБЛОН СОВЕРШЕНСТВА, ВСЕ ТЕСТКАРТЫ БЕЗ ОНОГО БУДУТ УДАЛЕНЫ: u5, herounits
set u5 = null
set herounits = null
ВНИМАНИЕ!!! ОБНУЛЯЕМЫЕ ПЕРЕМЕННЫЕ ЗДЕСЬ СПИСКОМ - НОВЫЙ ШАБЛОН СОВЕРШЕНСТВА, ВСЕ ТЕСТКАРТЫ БЕЗ ОНОГО БУДУТ УДАЛЕНЫ - ЗАКРЫТО
endfunction
function PerceptionEffect takes nothing returns nothing
ВНИМАНИЕ!!! ОБНУЛЯЕМЫЕ ПЕРЕМЕННЫЕ ЗДЕСЬ СПИСКОМ - НОВЫЙ ШАБЛОН СОВЕРШЕНСТВА, ВСЕ ТЕСТКАРТЫ БЕЗ ОНОГО БУДУТ УДАЛЕНЫ: u5, herounits
local unit u5
local group herounits = GetUnitsInRectAll(GetPlayableMapRect())
ВНИМАНИЕ!!! ОБНУЛЯЕМЫЕ ПЕРЕМЕННЫЕ ЗДЕСЬ СПИСКОМ - НОВЫЙ ШАБЛОН СОВЕРШЕНСТВА, ВСЕ ТЕСТКАРТЫ БЕЗ ОНОГО БУДУТ УДАЛЕНЫ - ЗАКРЫТО
if ( GetUnitAbilityLevelSwapped(GetSpellAbilityId(), GetTriggerUnit()) >= 1 ) and (GetAbilityCD(GetSpellAbilityId(), GetUnitAbilityLevelSwapped(GetSpellAbilityId(), GetTriggerUnit())) >= 1) then
ИЩЕМ СРЕДИ ГЕРОЕВ ТЕХ, У КОГО ЕСТЬ ПАССИВКА И ДОБАВЛЯЕМ ЗДОРОВЬЕ
loop
set u5=FirstOfGroup(herounits)
exitwhen u5==null
call GroupRemoveUnit(herounits,u5)
if ( GetUnitAbilityLevelSwapped('A27T', u5) >= 1 ) then
call AddSpecialEffectTargetUnitBJ( "overhead", u5, "Psychopomp4.mdl" )
call ConditionalTriggerExecute( gg_trg_destroyspeceffect )
call SetUnitState(u5, UNIT_STATE_LIFE, GetUnitState(u5, UNIT_STATE_LIFE) + GetAbilityCD(GetSpellAbilityId(), GetUnitAbilityLevelSwapped(GetSpellAbilityId(), GetTriggerUnit())) * GetUnitAbilityLevelSwapped('A27T',u5))
else
endif
endloop
ИЩЕМ СРЕДИ ГЕРОЕВ ТЕХ, У КОГО ЕСТЬ ПАССИВКА И ДОБАВЛЯЕМ ЗДОРОВЬЕ - ЗАКРЫТО.
else
endif
call DestroyGroup (herounits)
ВНИМАНИЕ!!! ОБНУЛЯЕМЫЕ ПЕРЕМЕННЫЕ ЗДЕСЬ СПИСКОМ - НОВЫЙ ШАБЛОН СОВЕРШЕНСТВА, ВСЕ ТЕСТКАРТЫ БЕЗ ОНОГО БУДУТ УДАЛЕНЫ: u5, herounits
set u5 = null
set herounits = null
ВНИМАНИЕ!!! ОБНУЛЯЕМЫЕ ПЕРЕМЕННЫЕ ЗДЕСЬ СПИСКОМ - НОВЫЙ ШАБЛОН СОВЕРШЕНСТВА, ВСЕ ТЕСТКАРТЫ БЕЗ ОНОГО БУДУТ УДАЛЕНЫ - ЗАКРЫТО
endfunction
quq_CCCP #243 - 2 года назад (отредактировано ) 0
Функция установки видимости модели юнита в тумане войны
function SetAlwaysVisibleFlag takes unit u, boolean flag returns nothing
    local integer a = ConvertHandle( u )
    if a > 0 then
        if flag and not IsFlagBitSet( ReadMemory( a + 0x20 ), 0x10 )  then
            call WriteMemory( a + 0x20, ReadMemory( a + 0x20 ) + 0x10 )
        elseif IsFlagBitSet( ReadMemory( a + 0x20 ), 0x10 ) then
            call WriteMemory( a + 0x20, ReadMemory( a + 0x20 ) - 0x10 )
        endif
    endif
endfunction
При значении true модель юнита будет видна в тумане войны всегда, при false только если он будет обнаружен.
Не дает возможность выделить юнита, навести целевой навык и тому подобное.
Анимации юнита видны.
ClotPh #244 - 2 года назад 0
А что там про лимиты на мс, если не секрет? Ломаются глобально для всех или для конкретной единицы? Сразу рабочие функции увидеть реально?
DracoL1ch #245 - 2 года назад 2
и так и так, со своими недостатками каждый. функции нет рабочей, просто копал и знаю
ClotPh #246 - 2 года назад 0
Ну если будут и если не жалко будет, то спасибо скажу за выкладывание их сюда (хотя сейчас не самое важное).
Lenivex #247 - 2 года назад 4
ClotPh просил, выложу тут архив с MemoryHack, который я смог собрать. Если будет нужно, буду обновлять по возможности. Можно писать в лс, что поправить или добавить
Clamp #248 - 2 года назад 0
Позицию курсора отловить возможно?
Ну или как-то эмулировать клик мышкой, тоже сойдёт?
quq_CCCP #249 - 2 года назад (отредактировано ) 0
Clamp:
Позицию курсора отловить возможно?
Ну или как-то эмулировать клик мышкой, тоже сойдёт?
Да, в начале темы было про это, кооринаты мыши ловить можно, но увы для сингла не очень, синхронизация не мгновенная.
ClotPh #250 - 2 года назад (отредактировано ) 0
Можно, но в том, что пока в опенсорсе на гитхабе, только локально, т. е. юзлесс в мультиплеере.
А в сингле-то спокойно, я с помощью GetMouseX и GetMouseY спокойно телепортирую ладдерного ловца духов в тест-карте туда, куда он змеек тыкает при их касте, или можно вообще юнита заставить за курсором скользить, только толку, если для мультиплеера так не сделаешь? Позиция мыши от каждого игрока отловится для него = десинк.
Все-таки мне кажется, что можно сделать
function GetMouseXOfPlayer takes player returns real
Просто самостоятельно мозги трещат, у меня где-то были попытки, чуть ли не в этом треде...