32

» WarCraft 3 / Хак на память Warcraft3

Думаю все в курсе что 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, Щяс проверил твою функцию, фатал...
32

» WarCraft 3 / Аналог способности канал

Ии небудет никогда юзать негативные заклинание ( по его мнению) в союзников, а в противников не может из за установленных целей в настройках способности. Цепь молний с отрец уроном будет лечить здоровье, самый простой вариант без кода.
Канал кстати какой ему ид приказа не укажи Ии тоже не юзает.
32

» WarCraft 3 / Хак на память Warcraft3

16GB, не проверял но лучше синкать строки ибо может быть десинх если ты будешь брать инфу у абилок.
В теории локальное изменение строк прокатит, ибо это все лишь ссылка на разное содержимое.
Нужно будет протестить.
32

» WarCraft 3 / Хак на память Warcraft3

Кет:
Сделай N одинаковых предметов с разными описаниями и меняй их этой функцией.
С таким же успехом это можно сделать и без мемхака =(
Ну да, просто с этой функцией проще и удобнее, не вызывается никаких событий, не сбивается кулдаун на иконке и так далее.
32

» WarCraft 3 / Хак на память Warcraft3

Кет:
quq_CCCP, дык я имел в виду динамическое описание у предметов, а не блокировку.
А он не блокиурет а меняет один предмет другим, правда перетаскивая способности от другого. Сделай N одинаковых предметов с разными описаниями и меняй их этой функцией.
Я проверял на талисмане жизни и предмету с активкой добавляющим броню, в результате описание и иконка сменились а нажимать низя, бонус хп остялся и добавилась защита.
32

» WarCraft 3 / Хак на память Warcraft3

Кастом стун увы кривой, нужно переписывать функцию.
Нужно обязательно следить за смертью юнита, даже если у него есть крест перерождения - стоит затунить мертвого и на него не будет действовать ни 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 способности лимит так и остался), тоже неплохо для реализации блокировки предметов.
32

» WarCraft 3 / Хак на память Warcraft3

l_Avenger_l, копировать - это сам хак и пару функций для теста, остальные копируем с гитхаба и вносим в свою карту, функций очень много я не вносил их все + дебаги лича, копируй самостоятельно или пиши функции сам лич уже выложил гайд про устройство структуры юнитов.
32

» WarCraft 3 / Хак на память Warcraft3

В условие триггера пихаешь, она пишет в GJ_LastDmg , GJ_LastAttackType тип атаки и урона а потом уже их и смотришь.
32

» WarCraft 3 / Хак на память Warcraft3

l_Avenger_l:
А как выяснить тип нанесенного урона(с руки или спелл)?
Нужно триггер на событие получения урона и смотреть тип атаки и урона, и гадать.
вот код
// WARNING!! IT CAN BE USED ONLY IN FIRST CONDITION AT FIRST POSITION
function GJ_GetRealDmg126a takes nothing returns real
	return cleanReal(indexToReal(ReadEBP_offset(0x380)))
endfunction

// WARNING!! IT CAN BE USED ONLY IN FIRST CONDITION AT FIRST POSITION
function GJ_GetRealDmg127a takes nothing returns real
	return cleanReal(indexToReal(ReadEBP_offset(0x400)))
endfunction

function GJ_SaveLastDmg126a takes nothing returns boolean
	if GetTriggerEventId()!=EVENT_UNIT_DAMAGED then
		return true
	endif
	
	set GJ_LastDmg = GJ_GetRealDmg126a( )
	
	set GJ_LastAttackType=ReadEBP_offset(0x37C)
	if ReadEBP_offset(0x368)!=0 or ReadEBP_offset(0x378)==0x3F800000 then
		set GJ_LastDamageType=0
	else
		set GJ_LastDamageType=ReadEBP_offset(0x378)
	endif
//	call BJDebugMsg("rewrote with "+R2S(GJ_LastDmg))
	return true
endfunction

function GJ_SaveLastDmg127a takes nothing returns boolean
	if GetTriggerEventId()!=EVENT_UNIT_DAMAGED then
		return true
	endif
	set GJ_LastDmg = GJ_GetRealDmg127a( )
	set GJ_LastAttackType=ReadEBP_offset(0x3B0)
	if ReadEBP_offset(0x3CC)!=0 then
		set GJ_LastDamageType=0
	else
		set GJ_LastDamageType=ReadEBP_offset(0x3F0)
	endif
	return true
endfunction
нужно еще 3 глобалки, эту функцию в условие триггера и все.
Далее смотрим на тип урона.
32

» WarCraft 3 / нестандартный AI

Если в скриптах ничего не понимаешь то нет, никак низя.
ИИ, особенно крутое ИИ не простая задача.
32

» WarCraft 3 / Какая строка приказа у скилла "Выбрать героя"?

Это у магазина? Никакой, отдай приказ "Smart" на магазин герою и все ты выбран магазином.
32

» WarCraft 3 / Хак на память Warcraft3

Иконки у способностей на основе "Сфера замедления" можно разблокировать, сделав кликабельным, а так же возможность кастовать спелл в ручную, но эффект автокаста при ударе останется.
Пригодится для автокаста способностей у которых его нету а ИИ писать не охото.
Кстати наконец то решен извечный вопрос - кулдаун на пассивке!
Можно ставить кд перерождению, а чтобы оно ни сработало когда это ненужно вешаем на юнита событие TriggerRegisterDeathEvent ( EVENT_WINDGET_DEARH) и запускать способность в кд той же функцией. Увы но только это событие срабатывает при смерти юнита с крестом перерождения.
32

» WarCraft 3 / Хак на память Warcraft3

Рубик помойму ворует отдельные версии скиллов для кражи у инвокера...
32

» WarCraft 3 / Хак на память Warcraft3

GetLocalPlayer, Хостботят, и исправляют все ошибки.
Очень понравилась функция которая накладывает сайленс на указанную способность юнита.
32

» WarCraft 3 / Хак на память Warcraft3

l_Avenger_l, Не тестировалось в широких массах, ошибки в некоторых функциях приводят к фатальным ошибкам.
А примеру функция которая запускает способность в кулдаун фаталит если:
юнита нет, способности нет, способность является пассивкой (тестировалось только с змеиной ловкостью и демонической силой, у перерождения кулдаун работает исправно)
Так что нужно правильно организовать код чтобы не пускать кулдауны у дохлых или несуществующих юнитов. А так же всегда проверять их на наличие способности.
32

» WarCraft 3 / Хак на память Warcraft3

Borodach:
А реально создать такую функцию изменения данных, которая меняет описание чисел способностей и предметов на переменные в игре?
Она уже есть!
function SetAbilityUbertip takes integer id, integer lvl, string s returns boolean
function GetAbilityUbertip takes integer id, integer lvl returns string
В доте лича меняются описания скиилов у инвокера (конкретное кол-во урона, прочие эффекты которые зависят от уровня сфер).
Копируем код с гитхаба (на хайве неудобно) и вставляем в тхт файл, открываем жасскрафтом и Citr+F (название интересующей функции) и копируем себе в карту все что требуется.
32

» WarCraft 3 / Проблемы с новым Retrun Bug

ENAleksey:
quq_CCCP, может создашь ресурс с переводом темы с хайва, чтобы не нужно было искать всю информацию на других сайтах?
Пока нету желания, и так только скопируй что тебе интересно и все.
32

» WarCraft 3 / Проблемы с новым Retrun Bug

оде самой карты, вот
Ага, уже разобрался спс.
Вот готовая версия для копипаста.
Загруженные файлы
32

» WarCraft 3 / Проблемы с новым Retrun Bug

BaHeK:
ENAleksey, да тут всё дело в том что я делал для простого we, а вы все в jngp редактируете. Но думаю это все уже не важно с картой разобрались всё у всех заработало.
Тока в библиотеке на vjass пишешь тоже самое беда...
Теперь новая беда, копирую код к себе в карту и карта вылетает в главное меню...
Походу дело в кривом pjass.
одно охрененное НО!
Чтобы typecast работал в JNGP нужно создать аж 3 переменных!
(народ кто пишет в обычном редакторе или в блокнотике обходятся двумя, хз как?)

library Некая библиотека 


globals
	некий тип array l__A
	некий тип A
endglobals


private function typecastarray takes nothing returns nothing
	local некий тип A
endfunction

//# +nosemanticerror
function GetArrayAddress takes nothing returns integer //not really needed
	loop
		return l__A
	endloop
	return 0
endfunction

endlibrary
Вот только так это работает! Тоже самое с байткодом, нужно три переменные 1 массив, вторую того же типа но не массив и третью локалку и посредством vjass все будут с 1 именем и все будет работать, инача вылет карты в главное меню ибо фатал...
Ещё 1 проблема...
native MergeUnits		   takes integer qty, integer a, integer b, integer make returns boolean
// reserved native for call 2 integer function and return BOOLEAN value (can be converted to int!)
native ConvertUnits         takes integer qty, integer id               returns boolean
// reserved native for call 1 integer function and return integer value
native IgnoredUnits takes integer unitid returns integer
Стоит добавить их в war3map.j и моя карта фаталит, прошу всех кому не лень протестировать это дело!
Загруженные файлы
32

» WarCraft 3 / Карты похожие на Петры баланс

Ну Kodo tag team или Infection attack, там какой ни какой ИИ, остальные без ИИ. Увы ИИ дело не простое, особенно в TAG картах, я тоже долго думал запилить в своей карте ИИ для обучения, но получилось уныло...