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

Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
0
32
7 лет назад
0
Кастом стун увы кривой, нужно переписывать функцию.
Нужно обязательно следить за смертью юнита, даже если у него есть крест перерождения - стоит затунить мертвого и на него не будет действовать ни 1 стун.
Кет:
Она уже есть!
Для предметов вроде нет. Эх =(
Зато есть:
function ChangeItemId takes item it, integer targetID returns nothing
	local integer cid=ConvertHandle(it)/4
	local integer curID
	if cid == 0 then
		return
	endif
	set curID=Memory[cid+0x30/4]
	set Memory[cid+0x30/4]=targetID
endfunction
Назначает одному предмету описание и иконку другого, кликабельность и все бонусы нет, просто добавляет в бонусы первого бонусы от второго, если они влезут (4 способности лимит так и остался), тоже неплохо для реализации блокировки предметов.
0
33
7 лет назад
Отредактирован Кет
0
quq_CCCP, дык я имел в виду динамическое описание у предметов, а не блокировку.
0
32
7 лет назад
0
Кет:
quq_CCCP, дык я имел в виду динамическое описание у предметов, а не блокировку.
А он не блокиурет а меняет один предмет другим, правда перетаскивая способности от другого. Сделай N одинаковых предметов с разными описаниями и меняй их этой функцией.
Я проверял на талисмане жизни и предмету с активкой добавляющим броню, в результате описание и иконка сменились а нажимать низя, бонус хп остялся и добавилась защита.
2
33
7 лет назад
2
Сделай N одинаковых предметов с разными описаниями и меняй их этой функцией.
С таким же успехом это можно сделать и без мемхака =(
0
32
7 лет назад
0
Кет:
Сделай N одинаковых предметов с разными описаниями и меняй их этой функцией.
С таким же успехом это можно сделать и без мемхака =(
Ну да, просто с этой функцией проще и удобнее, не вызывается никаких событий, не сбивается кулдаун на иконке и так далее.
0
29
7 лет назад
0
function SetAbilityUbertip takes integer id, integer lvl, string s returns boolean
function GetAbilityUbertip takes integer id, integer lvl returns string
В доте лича меняются описания скиилов у инвокера (конкретное кол-во урона, прочие эффекты которые зависят от уровня сфер).
Копируем код с гитхаба (на хайве неудобно) и вставляем в тхт файл, открываем жасскрафтом и Citr+F (название интересующей функции) и копируем себе в карту все что требуется.
а локально это дело менять нельзя? просто если героев будет больше одного начнётся ерунда
0
32
7 лет назад
0
16GB, не проверял но лучше синкать строки ибо может быть десинх если ты будешь брать инфу у абилок.
В теории локальное изменение строк прокатит, ибо это все лишь ссылка на разное содержимое.
Нужно будет протестить.
2
6
7 лет назад
2
Вот сделал функцию, но не уверен в работаспособности.
function GetItemUbertip takes integer id returns string
	local integer pD = GameDLL + 0xBB809C
	local integer i = Memory[pD/4]/4 + 2
	
	loop
		exitwhen Memory[i] == 0
		if Memory[i + 5] == id then
			return ConvertNullTerminatedStringToString(Memory[Memory[i+0x9A]/4])
		endif
		set i = i + 0xC0
	endloop
	
	return ""
endfunction
0
32
7 лет назад
Отредактирован quq_CCCP
0
Думаю все в курсе что GetUnitAbilityForAddresss довольно медленная функция ( по тестам лича в 15 раз медленее чем GetUnitAbilityLevel )
По этому стоит проверять наличие аблики у цели по GetUnitAbilityLevel а так же заносить результаты в хештаблицу или массив для более быстрой работы.
Поэтому вот 1 из вариантов оптимизации:
код
function GetUnitAbilityForAddresss takes integer pConvertedHandle, integer abilid returns integer
        local integer pAddr1 = pConvertedHandle + 476
        local integer pAddr2 = pConvertedHandle + 480
        local integer pOff1 = LoadInteger( gg_htb_HashData, abilid, pConvertedHandle )
        
        if pOff1 > 1 then
            call BJDebugMsg("Значение уже записано!")
            return pOff1
        endif
        

        set pAddr1 = Memory[pAddr1 / 4]
        set pAddr2 = Memory[pAddr2 / 4]
        
        if pAddr1 == 0 or pAddr2 == 0 or BitwiseAnd( pAddr1, pAddr2 ) == -1 then
            return 0
        endif
        
        set pOff1 = GetSomeAddressForAbility( pAddr1, pAddr2 )
        if pOff1 == 0 then
            return 0
        endif
        
        loop
            exitwhen pOff1 == 0
            if Memory[pOff1 / 4 + 52 / 4] == abilid then
                call SaveInteger( gg_htb_HashData, abilid, pConvertedHandle, pOff1 )
                return pOff1
            endif
            
            set pOff1 = GetSomeAddressForAbility( Memory[pOff1 / 4 + 36 / 4], Memory[pOff1 / 4 + 40 / 4] )
        endloop
        
        return pOff1
    endfunction
BaHeK, Щяс проверил твою функцию, фатал...
2
6
7 лет назад
2
У меня 1.27 если что.
0
32
7 лет назад
0
BaHeK:
У меня 1.27 если что.
У меня 1.26, но не вижу переключателя на другие патчи у тебя в функции.
Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
Чтобы оставить комментарий, пожалуйста, войдите на сайт.