Добавлен quq_CCCP,
опубликован
Алгоритмы, Наработки и Способности
Способ реализации:
vJass
Тип:
Наработка
Версия Warcraft:
1.26 и ниже
Собственно тот знаменитый хак на память который нам радостно предоставил DracoL1ch, который позволяет нам больше не морочится с системами отлова урона, или вовсе узнать координаты курсора без стороннего по.
Для сохранения требуется: экспериментальная версия pjass.exe
Причём не все подходят, меньше всего проблем было с этой версией
В хаке присутствует только 1 пример на изменение белой атаки у героя, остальные готовые функции можно найти на:
Хайве
Гитхабе
Просто копируем саму функцию, все остальное для её работы есть в наработке и сохраняем.
Так же на хайве есть инструкция по созданию собственных функций для чтения\изменения данных в памяти игры.
Для сохранения требуется: экспериментальная версия pjass.exe
Причём не все подходят, меньше всего проблем было с этой версией
В хаке присутствует только 1 пример на изменение белой атаки у героя, остальные готовые функции можно найти на:
Хайве
Гитхабе
Просто копируем саму функцию, все остальное для её работы есть в наработке и сохраняем.
Так же на хайве есть инструкция по созданию собственных функций для чтения\изменения данных в памяти игры.
`
ОЖИДАНИЕ РЕКЛАМЫ...
Чтобы оставить комментарий, пожалуйста, войдите на сайт.
Отредактирован ClotPh
function SetAbilityCD takes integer abil, integer level, real cool returns nothing
function GetAbilityCD takes integer abil, integer level returns real"
Но вот SetAbilityCD, которая по логике должна менять кулдаун, не делает НИЧЕГО, во всяком случае, у меня. =/
А вот перезарядки - считаются спокойно, а меняться не хотят. =/ Что считаются-то, это тоже уже хорошо, но...
Отредактирован darkowlom
ClotPh, приложи карту с проблемой в устанвке кд - посмотрю
P. S. Не знаю, связано или нет - вар 1.26.
Ну ладно, еще покопаюсь пока самостоятельно, наводки получены.
Попробую в носиджасс занести и/или юзнуть др. функцию.
карта выше
***
И перезарядка высчитывается по AbilityId. Только не меняется! А в твоей карте у меня она по хэндлу и считаться перестала (возвращает 0), там-то зачем было менять?
Ну, короче, оставлю пока в локалках и то, и другое, все равно обнулять не надо, буду снова все функции проверять и через AbilityId, и через хэндл
*********
Ну зато что у меня будет действовать - скорее всего у всех будет.
Отредактирован quq_CCCP
Кстати кд при изучении работает, но почему то фаталит на целительной волне и буране, хз почему так, мб у этих способностей несколько иной алгоритм работы, но их всегда можно заменить триггерными аналогами на основе канала, с которым не бывает такого.
либа дополняется, но в рамках моей доты, когда будет желание дополнить API - пока неизвестно
НИГДЕ в памяти хендлы не используются, либо адрес, либо айдишник, но никак не хендл. хендл вообще чисто для жасса понятие, в памяти его нет.
адреса абилок конкретного юнита не меняются, если только он не теряет абилку. тогда её место займет другая. в пределах одной игры, разумеется, и адрес юнита никуда не смоется, и т.п.
Все действует, кроме увеличения перезарядки абилы, хотя сделано все точно так же, как и с другими функциями/
Т. е. там перезарядка змеек в РО на 2 поставлена, та функция, которая считает, возвращает 2; у ульты ловца духов вроде 180 - возвращается 180. Увеличение же - фиг Вам.
Еще предположения, что:
Там в карте стоит несколько героев для теста, любой применяет любую способность и после этого с ним происходят все вышеописанные шаманства. Последняя версия лично моей карты - последний файл лично от меня, выложенный здесь. Для теста еще валяются когти на ув. зеленой атаки и др., буду и др. героев и шмотки добавлять, когда буду тестировать следующие функции. Пока хочется именно с перезарядками разобраться
local ability a = GetSpellAbility()
local integer a2 = GetSpellAbilityId()
local integer pAblil = GetUnitAbilityForAddresss( ConvertHandle(GetTriggerUnit( )), a2 )
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())) ))
Вывести значение манакоста абилы - закрыто.
Увеличить перезарядку абилы на указанное в конце число - НЕ ДЕЙСТВУЕТ, с хэндлом фаталит!!!
call SetAbilityCD (a2,GetUnitAbilityLevelSwapped(GetSpellAbilityId(), GetTriggerUnit()), GetAbilityCD(GetSpellAbilityId(), GetUnitAbilityLevelSwapped(GetSpellAbilityId(), GetTriggerUnit())) + 1 )
Увеличить перезарядку абилы на указанное в конце число - закрыто.
! endnocjass
call DisplayTextToForce( GetPlayersAll(), "Перезарядка у этой абилы на этом уровне теперь такая: " + R2S(GetAbilityCD(GetSpellAbilityId(), GetUnitAbilityLevelSwapped(GetSpellAbilityId(), GetTriggerUnit())) ))
Вывести значение манакоста абилы - закрыто.
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