Добавлен , опубликован
Алгоритмы, Наработки и Способности
Способ реализации:
vJass
Тип:
Наработка
Версия Warcraft:
1.26 и ниже
Собственно тот знаменитый хак на память который нам радостно предоставил DracoL1ch, который позволяет нам больше не морочится с системами отлова урона, или вовсе узнать координаты курсора без стороннего по.
Для сохранения требуется: экспериментальная версия pjass.exe
Причём не все подходят, меньше всего проблем было с этой версией
В хаке присутствует только 1 пример на изменение белой атаки у героя, остальные готовые функции можно найти на:
Хайве
Гитхабе
Просто копируем саму функцию, все остальное для её работы есть в наработке и сохраняем.
Так же на хайве есть инструкция по созданию собственных функций для чтения\изменения данных в памяти игры.
2
21
7 лет назад
Отредактирован ClotPh
2
Понятно, ну т. е. кулдаун считается в момент запуска и потом со сменой времени перезарядки абилы уже пропорционально не меняется
Лучше и логичнее было бы, имхо, чтобы он пропорционально менялся, ну сойдет и так, спасибо, один хрен тут поле непаханое - можно, например, значение перезарядки абилы добавлять/убавлять к атаке и т. п., столько комб и идей, ну а основная идея - ппц повышать врагам перезарядки на время и понемногу постепенно, чтобы они вроде и не под салом были, а сделать НИЧО ПОЧТИ НЕ МОГЛИ ))) Ну и своим снижать, чтобы все раскастовывались как бристлбеки - кто когда говорил, что маги не лейт?
Офк баланс, да, ну тут уже бкб и антимагии всякие должны помогать
PS dota2.ru/forum/threads/psixopompa.1025855
Так, а если так:
Событие - unit приводит способность в действие.
Действия:
  • Запомнить как реалку перезарядку этой способности.
  • Через SetAbilityCD немедленно изменить ей перезарядку на 2 секунды (тогда, ятп, она успеет начать считаться как новое).
  • Через 0.2 секунды вернуть ей то значение перезарядки, которое было, из запомненной реалки.
Тогда перезарядка в этот раз уже пойдет как 2 секунды, но GetAbilityCD будет возвращать 10 (ну уже через те самые 0.2 секунды, когда перезарядка "фактически нормализуется на будущее").
Всё верно? Как понимаю, да.
Просто это можно ультовый бафф на союзника "все ваши способности перезаряжаются 2 секунды вместо действительной перезарядки". Ну или дебафф на врага, только там будет не 2 секунды, а 30 каких-нибудь.
P. S. Какого панциря даже через много дней последовательные сообщения от одного юзера склеиваются? Нелогично, да и правильность их плюсо-минусовой оценки тогда может быть сомнительной, оценивалось-то самое первое.
0
16
7 лет назад
0
если тебе нужно конкретному юниту конкретную перезарядку поменять, так поменяй её после spell_effect, персонально, по известному навыку, конкретному юниту, зачем огоород с глобальным изменением кд и восстановлением?
типа кастанул - через 0 секунд берется адрес способности и в её кулдаун вписывается нужное значение. всё
0
16
7 лет назад
0
ребят, я не оказываю поддержку по внедрению хака и тонкостям взаимодействий с другими длл. вся информация для раздумий уже выложена, и от либы нашей есть исходники, если хочется посмотреть
В крайнем случае просто спрашивайте у местных. Моя личка непробиваема один хер
2
3
7 лет назад
2
DracoL1ch:
ребят, я не оказываю поддержку по внедрению хака и тонкостям взаимодействий с другими длл. вся информация для раздумий уже выложена, и от либы нашей есть исходники, если хочется посмотреть
В крайнем случае просто спрашивайте у местных. Моя личка непробиваема один хер
А где найти необходимую информацию тогда. Ибо мне посоветовали применить данную вещь, чтобы интегрировать авто-закачку и динамическое обновление.
0
32
7 лет назад
0
Napoleon, тут и спрашивать.
Что непонятно?
0
1
7 лет назад
0
Работает ли данный хак на недавно вышедшей версии - 1.27b, или только на предыдущих?
0
21
7 лет назад
0
Работает на всех, писали уже.
Верно понимаю, что GetMouseX, GetMouseY, GetMouseZ у разных игроков отлавливается по-разному и может вызвать десинк в сетевой при неправильном применении? То есть если я, например, по этим числам выведу координаты точки и использую ее для перемещения или создания объекта или определения направления - десинк, гг?
Скажу спасибо за образец кода, дающий возможность определить координаты мыши только для овнера определенного юнита без десинка в сетевой (ну чтоб там стрелять в направлении мыши, например).
0
20
7 лет назад
0
ClotPh:
Работает на всех, писали уже.
Верно понимаю, что GetMouseX, GetMouseY, GetMouseZ у разных игроков отлавливается по-разному и может вызвать десинк в сетевой при неправильном применении? То есть если я, например, по этим числам выведу координаты точки и использую ее для перемещения или создания объекта или определения направления - десинк, гг?
Скажу спасибо за образец кода, дающий возможность определить координаты мыши только для овнера определенного юнита без десинка в сетевой (ну чтоб там стрелять в направлении мыши, например).
Кажется, кто-то (на ксгм или на хайве) интересовался нашел ли кто где взять разрешение экрана, вероятно это связано с этим. Касательно стрельбы - вроде скорп ( ScorpioT1000) в свое время делал наработку по стрельбе от первого лица по нажатию ESC. Там единственная нерешенная проблема была, если не ошибаюсь, с движением камеры по XY. По Z она перемещалась свободно.
0
29
7 лет назад
0
ClotPh, есть возможность синхронизировать изменение данных юнита на случай таких вызовов. Но точно не могу вспомнить как
2
16
7 лет назад
2
нет, на 27b работает только чтение, запись недоступна. в дальнейшем, возможно, закроют и запись.
призывайте игроков оставаться на старых патчах или забудьте об этом треде \_('-' )_/
|> Скажу спасибо за образец кода, дающий возможность определить координаты мыши только для овнера определенного юнита без десинка в сетевой (ну чтоб там стрелять в направлении мыши, например).
устанешь синхронизировать (я не знаю ответа) (и не знаю, зачем люди создают фпс на движке ртс)
0
32
7 лет назад
0
DracoL1ch,
Для них это самый доступный движок. В их картах может быть мини игра с использованием стрельбы от первого лица, которая не является "шурупом" карты...
0
17
7 лет назад
Отредактирован ledoed
0
ClotPh:
Попробуй применить векторы то есть привязка идёт не конкретным координатам а по направлению
перевести экран в процентный вид от -1 до 1(1==100%) и тд
0
21
7 лет назад
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())
0
16
7 лет назад
0
если бы синхронизация работала как полагается, я бы так и сказал. но ни одна из существующих жасс нативок не обеспечивает синхронизацию с достаточной скоростью. для значений типа 0-1 лучший вариант - это выделение юнита, потому что варкрафт его автоматически отправит в сеть и обеспечит хоть как-то актуальную информацию на всех компах. а в случае отправки значений с точкой - совершенно другой коленкор. Проще уж на trackable сделать
0
32
7 лет назад
0
ClotPh, в твоем коде нету вейта на пару сек, синхроеизация вещь не мгновенная и порой занимает очень много времени, все зависит от пинга.
0
21
7 лет назад
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 сек, НО потом будет синхронизация БЕЗ десинка?
0
29
7 лет назад
0
через мемхак можно сделать например рендж юнита, милишником без морфа?
0
16
7 лет назад
0
атака - это полностью независимый скил, крути что хочешь как хочешь, за редкими исключениями
тип атаки, ренж и другие "простые" параметры входят в число крутящихся
0
4
7 лет назад
0
качаю ваши выложенные карты где все работать должно, но при сохранении 11 ошибок вылезает. Ниче не меняю.
снимаю вопрос, я идиот. Все заработало
Есть ли функция на проверку нажата ли определенная кнопка в данный момент, а так же проверка зажата ли кнопка мыши в данный момент? какая функция за это отвечает и что скопировать
Загруженные файлы
0
3
7 лет назад
0
Daniil18, уже отвечали на этот вопрос, функция IsKeyPressed, ей же определяется зажата ли кнопка мыши.
0
4
7 лет назад
0
Drynwhyl, все сделал, но как саму проверку на конкретную клавишу сделать. Как узнать интегер этой кнопки?
я опять ретард, только спросил тут же нашел выход. Хочу сделать шутанчик с управлениями кнопками, тут надо будет париться с локал плеерами от десинков?
0
32
7 лет назад
0
Daniil18:
Drynwhyl, все сделал, но как саму проверку на конкретную клавишу сделать. Как узнать интегер этой кнопки?
я опять ретард, только спросил тут же нашел выход. Хочу сделать шутанчик с управлениями кнопками, тут надо будет париться с локал плеерами от десинков?
Увы да, если ты будешь играть не в сингл плеер.
0
6
7 лет назад
0
На 1.27b на запись не работает. Пока есть 2 варианта, mix на 1.27b который бы включал возможность запись в память. 2) убедить сервера, включить это в своем лаучнере. Либо окончательно забить на вк3.
4
21
7 лет назад
4
Да если уж варом все еще заниматься, то тут уже надо думать о нем, имхо, не как о варе в целом, а как о заготовке RTS-конструкторе, MUGEN от RTS и/или MOBA-жанра (благо контент продолжает создаваться и в наши дни, можно хоть, к примеру, RTSшку с 30 самыми извращенными расами сделать, было бы желание), из которой можно для себя что угодно пилить, официально игра уже давно по сути не существует.
Если проект обретет популярность, не вижу проблем хоть гигабайтные сборки скачивать (на основе того патча, какого надо), и играть через этот самый проект именно этой варовской сборки; доту 2 качают, не обсираются, уже, по-моему, и в деревнях качаются гигабайты; а если что безынтересно, оно и в виде маленьких карт не нужно.
А на близзов пофиг давно, они с варом ниче уже не сделают существенного, а если сделают, это очень сильно удивит (ну 128 мб сделали... безлим народный до них вышел, опять же, раньше, так что все, вар уже принадлежит народу).
0
6
7 лет назад
0
Лучше предложить модмейкорам, оставаться на 1.26 и игнорировать 1.27+, пока близарды не дадут достаточную замену в новых патчах
Чтобы оставить комментарий, пожалуйста, войдите на сайт.