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

Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
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 как возвращало двойку (что изначально в РО и стояло), так и возвращает каждый раз.
0
24
7 лет назад
0
ClotPh, я не знаю что ты там наколдовал, но твоя карта даже не сохраняется
Хотя нет- теперь сохранилась, мой косяк
0
21
7 лет назад
Отредактирован ClotPh
0
Вот эта, точно? А запускается хоть?
Карта
А, ок
Загруженные файлы
Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
Чтобы оставить комментарий, пожалуйста, войдите на сайт.