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

Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
0
32
7 лет назад
Отредактирован quq_CCCP
0
Некоторым нужен хендл, некотороым ид - смотри внимательно что берут функции AbilId или Ability. Особо подробно api никто не рассписывал, если не работает или фаталит пробуй хендл.
Кстати кд при изучении работает, но почему то фаталит на целительной волне и буране, хз почему так, мб у этих способностей несколько иной алгоритм работы, но их всегда можно заменить триггерными аналогами на основе канала, с которым не бывает такого.
0
20
7 лет назад
0
Адрес абилок для конкретного юнита статичен в рамках игровой сессии? Т.е. до выхода
4
16
7 лет назад
4
реально стальные нервы, все функции перебрать
либа дополняется, но в рамках моей доты, когда будет желание дополнить API - пока неизвестно
НИГДЕ в памяти хендлы не используются, либо адрес, либо айдишник, но никак не хендл. хендл вообще чисто для жасса понятие, в памяти его нет.
адреса абилок конкретного юнита не меняются, если только он не теряет абилку. тогда её место займет другая. в пределах одной игры, разумеется, и адрес юнита никуда не смоется, и т.п.
SetAbilityCD принимает id, как и GetAbilityCD. что там может сломаться - мне не особо ясно, в доте эта функция мне осталась бесполезной
попробую на досуге добавить комментарии, за что функции отвечают
0
21
7 лет назад
0
Ну вот так нагляднее будет, пастану результаты моих экспериментов сюда
Все действует, кроме увеличения перезарядки абилы, хотя сделано все точно так же, как и с другими функциями/
ВЫВОДИТСЯ оно исправно.
Т. е. там перезарядка змеек в РО на 2 поставлена, та функция, которая считает, возвращает 2; у ульты ловца духов вроде 180 - возвращается 180. Увеличение же - фиг Вам.
Пробовалось и с !nocjass, и без него
Еще предположения, что:
  • что-то таки побилось в либах (но они были просто перекопипастнуты в кастом код, кроме одной, которая осталась в отдельном триге);
  • влияет патч 1.26 и/или дллка для безлим. размера сетевой игры.
Однако все остальное-то работает.
Там в карте стоит несколько героев для теста, любой применяет любую способность и после этого с ним происходят все вышеописанные шаманства. Последняя версия лично моей карты - последний файл лично от меня, выложенный здесь. Для теста еще валяются когти на ув. зеленой атаки и др., буду и др. героев и шмотки добавлять, когда буду тестировать следующие функции. Пока хочется именно с перезарядками разобраться
***
function Trig_AfterAbilityCast_Actions takes nothing returns nothing
local ability a = GetSpellAbility()
local integer a2 = GetSpellAbilityId()
local integer pAblil = GetUnitAbilityForAddresss( ConvertHandle(GetTriggerUnit( )), a2 )
Увеличить кастеру атаку на 10
call AddUnitBaseDamage (GetTriggerUnit(),10)
Увеличить кастеру атаку на 10 - закрыто.
Вывести значение атаки кастера
call DisplayTextToForce( GetPlayersAll(), "Текущее значение атаки применившего способность с учётом бонусов: " + I2S(GetUnitBaseDamage(GetTriggerUnit()) + GetUnitGreenBonusDamage(GetTriggerUnit())) )
Вывести значение атаки кастера - закрыто.
Увеличить манакост абилы на указанное в конце число
call SetAbilityManaCost (GetSpellAbilityId(),GetUnitAbilityLevelSwapped(GetSpellAbilityId(), GetTriggerUnit()), GetAbilityManaCost(GetSpellAbilityId(), GetUnitAbilityLevelSwapped(GetSpellAbilityId(), GetTriggerUnit())) + 5 )
Увеличить манакост абилы на указанное в конце число - закрыто.
Вывести значение манакоста абилы
call DisplayTextToForce( GetPlayersAll(), "Манакост этой абилы на этом уровне теперь такой: " + I2S(GetAbilityManaCost(GetSpellAbilityId(), GetUnitAbilityLevelSwapped(GetSpellAbilityId(), GetTriggerUnit())) ))
Вывести значение манакоста абилы - закрыто.
! nocjass
Увеличить перезарядку абилы на указанное в конце число - НЕ ДЕЙСТВУЕТ, с хэндлом фаталит!!!
call SetAbilityCD (a2,GetUnitAbilityLevelSwapped(GetSpellAbilityId(), GetTriggerUnit()), GetAbilityCD(GetSpellAbilityId(), GetUnitAbilityLevelSwapped(GetSpellAbilityId(), GetTriggerUnit())) + 1 )
Увеличить перезарядку абилы на указанное в конце число - закрыто.
! endnocjass
Вывести значение перезарядки абилы
call DisplayTextToForce( GetPlayersAll(), "Перезарядка у этой абилы на этом уровне теперь такая: " + R2S(GetAbilityCD(GetSpellAbilityId(), GetUnitAbilityLevelSwapped(GetSpellAbilityId(), GetTriggerUnit())) ))
Вывести значение манакоста абилы - закрыто.
set a = null
endfunction
===========================================================================
function InitTrig_AfterAbilityCast takes nothing returns nothing
set gg_trg_AfterAbilityCast = CreateTrigger( )
call TriggerRegisterAnyUnitEventBJ( gg_trg_AfterAbilityCast, EVENT_PLAYER_UNIT_SPELL_EFFECT )
call TriggerAddAction( gg_trg_AfterAbilityCast, function Trig_AfterAbilityCast_Actions )
endfunction
0
16
7 лет назад
0
на хайве выложил пересказ того. что я знаю/помню о нашем API
0
24
7 лет назад
0
DracoL1ch, что-то ты не особо стремишься тут что-то публиковать) Не любишь нас? XD
0
16
7 лет назад
0
с местным "интерфейсом"-то? не говоря уже о том, что английский есть международный язык
2
24
7 лет назад
Отредактирован darkowlom
2
DracoL1ch, английский на просторах СНГ знает небольшой процент людей, я например, ничего не в состоянии опубликовать на хайве из-за полного отсутствия грамматики - ее сложность для меня зашкаливает. Чисто как пассивный читатель выступаю, даже уже и данные от акка забыл
А интерфейс дело привычки, новый хайв тоже неудобный)
0
21
7 лет назад
0
Семь медных сапогов в мозгах истоптано, ничерта не выяснено.
DracoL1ch, должна в коде выше перезарядка заклинания увеличиваться и если нет, то почему?
Считается она другой функцией исправно.
0
16
7 лет назад
0
У меня работает корректно. В худшем случае изменение кд будет заметно на следующем касте, т.к. кд от текущего мог уже быть в обороте.
0
21
7 лет назад
0
Ну т. е. код выше должен работать, проблема на моей стороне. Понятно.
Дело не в заметности, я ведь глазу не верю, специально еще и высчитывание стоит и текстовое сообщение.
Как было К/Д 2 секунды, так и остается. Если уж 2 от 3 глаз бы не отличил мб, то 2 от 4 и тем более дальше - однозначно бы определил.
Но GetAbilityCD как возвращало двойку (что изначально в РО и стояло), так и возвращает каждый раз.
Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
Чтобы оставить комментарий, пожалуйста, войдите на сайт.