,

Хак на память Warcraft3

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


Просмотров: 48 967



» Лучшие комментарии


Bornikkeny #1 - 2 года назад 0
Надо попробовать. Вещ однако!
Borodach #2 - 2 года назад 0
А реально создать такую функцию изменения данных, которая меняет описание чисел способностей и предметов на переменные в игре?
quq_CCCP #3 - 2 года назад 0
Borodach:
А реально создать такую функцию изменения данных, которая меняет описание чисел способностей и предметов на переменные в игре?
Она уже есть!
function SetAbilityUbertip takes integer id, integer lvl, string s returns boolean
function GetAbilityUbertip takes integer id, integer lvl returns string
В доте лича меняются описания скиилов у инвокера (конкретное кол-во урона, прочие эффекты которые зависят от уровня сфер).
Копируем код с гитхаба (на хайве неудобно) и вставляем в тхт файл, открываем жасскрафтом и Citr+F (название интересующей функции) и копируем себе в карту все что требуется.
l_Avenger_l #4 - 2 года назад 0
Побочные эффекты возможны?)) карта потом не нагнется от такого ?)
quq_CCCP #5 - 2 года назад 0
l_Avenger_l, Не тестировалось в широких массах, ошибки в некоторых функциях приводят к фатальным ошибкам.
А примеру функция которая запускает способность в кулдаун фаталит если:
юнита нет, способности нет, способность является пассивкой (тестировалось только с змеиной ловкостью и демонической силой, у перерождения кулдаун работает исправно)
Так что нужно правильно организовать код чтобы не пускать кулдауны у дохлых или несуществующих юнитов. А так же всегда проверять их на наличие способности.
l_Avenger_l #6 - 2 года назад 0
Там сказано, что можно не морочиться с отловом урона, это типа можно напрямую вычислить от руки ли бы нанесен удар?
А так текущую атаку самого героя буз лишних бд)
есть функция SetUnitArmorType я так понял позволяет меня тип защиты, интересно если юниту в зависимости от предметов менять тип его защиты к чему это приведет ?))
GetLocalPlayer #7 - 2 года назад 0
Не тестировалось в широких массах
А бетовскую версию нового дотана разве еще нигде не хостботят?
quq_CCCP #8 - 2 года назад 0
GetLocalPlayer, Хостботят, и исправляют все ошибки.
Очень понравилась функция которая накладывает сайленс на указанную способность юнита.
Bornikkeny #9 - 2 года назад 0
quq_CCCP:
l_Avenger_l, Не тестировалось в широких массах, ошибки в некоторых функциях приводят к фатальным ошибкам.
А примеру функция которая запускает способность в кулдаун фаталит если:
юнита нет, способности нет, способность является пассивкой (тестировалось только с змеиной ловкостью и демонической силой, у перерождения кулдаун работает исправно)
Так что нужно правильно организовать код чтобы не пускать кулдауны у дохлых или несуществующих юнитов. А так же всегда проверять их на наличие способности.
Мне вот страшно стало. Ведь это глобальные изменения? То есть, если Рубик сворует, скажем, торнадо то получится что описание будет точ-в-точ как у Инвокера? Или все эти изменения будут локальны для каждого юнита. Но в это трудом верится, как-то.
quq_CCCP #10 - 2 года назад 0
Bornikkeny, Описание меняется у всех абилок с таким ро кодом на карте
Bornikkeny #11 - 2 года назад 0
quq_CCCP:
Bornikkeny, Описание меняется у всех абилок с таким ро кодом на карте
Вот вот. Но с другой стороны, от этого становится легче :)
quq_CCCP #12 - 2 года назад 0
Рубик помойму ворует отдельные версии скиллов для кражи у инвокера...
Кет #13 - 2 года назад 0
ссылка на гитхаб ведёт на хайв
Bornikkeny #14 - 2 года назад (отредактировано ) 0
quq_CCCP:
Рубик помойму ворует отдельные версии скиллов для кражи у инвокера...
Я рак, конечно этого не знал :D
Кет:
ссылка на гитхаб ведёт на хайв
О, повелитель пришел поклон
quq_CCCP #15 - 2 года назад 0
Кет:
ссылка на гитхаб ведёт на хайв
Уже исправил.
Кет #16 - 2 года назад 1
Она уже есть!
Для предметов вроде нет. Эх =(
quq_CCCP #17 - 2 года назад 0
Иконки у способностей на основе "Сфера замедления" можно разблокировать, сделав кликабельным, а так же возможность кастовать спелл в ручную, но эффект автокаста при ударе останется.
Пригодится для автокаста способностей у которых его нету а ИИ писать не охото.
Кстати наконец то решен извечный вопрос - кулдаун на пассивке!
Можно ставить кд перерождению, а чтобы оно ни сработало когда это ненужно вешаем на юнита событие TriggerRegisterDeathEvent ( EVENT_WINDGET_DEARH) и запускать способность в кд той же функцией. Увы но только это событие срабатывает при смерти юнита с крестом перерождения.
l_Avenger_l #18 - 2 года назад 0
А как выяснить тип нанесенного урона(с руки или спелл)?
quq_CCCP #19 - 2 года назад 0
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 глобалки, эту функцию в условие триггера и все.
Далее смотрим на тип урона.
BaHeK #20 - 2 года назад 0
Есть функциия GJ_SaveLastDmg127a. С помощью можно узнать урон, тип атаки, тип урона.
quq_CCCP #21 - 2 года назад 0
В условие триггера пихаешь, она пишет в GJ_LastDmg , GJ_LastAttackType тип атаки и урона а потом уже их и смотришь.
l_Avenger_l #22 - 2 года назад 0
Pjass заменил, но при сохранении один фиг высвечивает 11 ошибок)
Кет #23 - 2 года назад 0
l_Avenger_l, так и должно быть. Главное — не больше 11.
l_Avenger_l #24 - 2 года назад 0
и как обойти, в наглую в архив запихать?))
ENAleksey #25 - 2 года назад 0
l_Avenger_l, Кет, ошибок быть не должно, ни одной. Просто выключи cJass.
l_Avenger_l #26 - 2 года назад (отредактировано ) 0
Разговора нет,спасибо))
Многие функции из писка пишет что неизвестные, как быть?)
quq_CCCP #27 - 2 года назад (отредактировано ) 0
l_Avenger_l, копировать - это сам хак и пару функций для теста, остальные копируем с гитхаба и вносим в свою карту, функций очень много я не вносил их все + дебаги лича, копируй самостоятельно или пиши функции сам лич уже выложил гайд про устройство структуры юнитов.
l_Avenger_l #28 - 2 года назад 0
Все спасибо, пошел копипастить))
quq_CCCP #29 - 2 года назад 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 способности лимит так и остался), тоже неплохо для реализации блокировки предметов.
Кет #30 - 2 года назад (отредактировано ) 0
quq_CCCP, дык я имел в виду динамическое описание у предметов, а не блокировку.
quq_CCCP #31 - 2 года назад 0
Кет:
quq_CCCP, дык я имел в виду динамическое описание у предметов, а не блокировку.
А он не блокиурет а меняет один предмет другим, правда перетаскивая способности от другого. Сделай N одинаковых предметов с разными описаниями и меняй их этой функцией.
Я проверял на талисмане жизни и предмету с активкой добавляющим броню, в результате описание и иконка сменились а нажимать низя, бонус хп остялся и добавилась защита.
Кет #32 - 2 года назад 2
Сделай N одинаковых предметов с разными описаниями и меняй их этой функцией.
С таким же успехом это можно сделать и без мемхака =(
quq_CCCP #33 - 2 года назад 0
Кет:
Сделай N одинаковых предметов с разными описаниями и меняй их этой функцией.
С таким же успехом это можно сделать и без мемхака =(
Ну да, просто с этой функцией проще и удобнее, не вызывается никаких событий, не сбивается кулдаун на иконке и так далее.
16GB #34 - 2 года назад 0
function SetAbilityUbertip takes integer id, integer lvl, string s returns boolean
function GetAbilityUbertip takes integer id, integer lvl returns string
В доте лича меняются описания скиилов у инвокера (конкретное кол-во урона, прочие эффекты которые зависят от уровня сфер).
Копируем код с гитхаба (на хайве неудобно) и вставляем в тхт файл, открываем жасскрафтом и Citr+F (название интересующей функции) и копируем себе в карту все что требуется.
а локально это дело менять нельзя? просто если героев будет больше одного начнётся ерунда
quq_CCCP #35 - 2 года назад 0
16GB, не проверял но лучше синкать строки ибо может быть десинх если ты будешь брать инфу у абилок.
В теории локальное изменение строк прокатит, ибо это все лишь ссылка на разное содержимое.
Нужно будет протестить.
BaHeK #36 - 2 года назад 0
Вот сделал функцию, но не уверен в работаспособности.
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
quq_CCCP #37 - 2 года назад (отредактировано ) 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, Щяс проверил твою функцию, фатал...
BaHeK #38 - 2 года назад 0
У меня 1.27 если что.
quq_CCCP #39 - 2 года назад 0
BaHeK:
У меня 1.27 если что.
У меня 1.26, но не вижу переключателя на другие патчи у тебя в функции.
BaHeK #40 - 2 года назад 0
quq_CCCP, в таком случае мне нужно будет установить 2 варика с разными версиями, но такой возможности у меня нет. Так что только 1.27.
darkowlom #41 - 2 года назад 1
quq_CCCP, хеш таблицы сами по себе медленнее хромого коня, или они все таки перегоняют эту функцию в скорости?
quq_CCCP #42 - 2 года назад 2
darkowlom:
quq_CCCP, хеш таблицы сами по себе медленнее хромого коня, или они все таки перегоняют эту функцию в скорости?
Ну вот как раз хештаблицы то не медленные, а быстрее чем каждый раз искать, да и это грубый пример оптимизации, как будто вы забыли про системы хранения данных на массивах?
darkowlom #43 - 2 года назад 0
quq_CCCP, я просто пробовал через хештаблицу передавать данные в внешнюю длл, так как из внешней получить данные массива сложно, скорость передачи была далеко не лучшей - отсюда и вопрос
ENAleksey #44 - 2 года назад (отредактировано ) 0
darkowlom, передачу данных можно реализовать с помощью экспортируемых функций в dll.
__declspec(dllexport) unsigned int __stdcall SendValueToDll(int key, int value)
{
	// Сохраняем полученные значения
	return true;
}
И в карте:
function SendValueToDll takes integer key, integer value returns integer
    local integer hHandle = GetModuleProcAddress("MyDll.dll", "SendValueToDll")
    if hHandle != 0 then 
        return CallStdcallWith2Args(hHandle, key, value)
    endif 
    return 0
endfunction
alexprey #45 - 2 года назад 0
чет полная жесть уже начинает с этой штуковиной :(
страшно становится после этого запускать. А то еще вирусняки начнет качать. Интересно было бы почитать как эта штука работает
в гите и на хайве не удалось увидеть
ENAleksey #46 - 2 года назад 2
Интересно было бы почитать как эта штука работает
Только в новой версии добавили возможность разблокировать память на запись. И на гитхабе есть описания к функциям.
quq_CCCP #47 - 2 года назад 0
alexprey:
чет полная жесть уже начинает с этой штуковиной :(
страшно становится после этого запускать. А то еще вирусняки начнет качать. Интересно было бы почитать как эта штука работает
в гите и на хайве не удалось увидеть
Кстати там есть функции создания файла на машине юзера и открывания ссылки в браузере, а так же сколачивание с указанного сайта указанного файла на пк юзера (юзается для обновление версии карты у лича)
Очень даже можно загнать читерам, ломающим карты вирус позлее вроде Neshta чтобы потом мучились.
Кет #48 - 2 года назад 0
quq_CCCP, хм, значит близзы должны скоро всё это зарубить -_- Интересно, дадут ли что взамен, как с предыдущим ретурнбагом?
darkowlom #49 - 2 года назад (отредактировано ) 1
quq_CCCP, надо писать антихак для варика - для подозрительных действий просящий разрешение у юзера
А вообще всех надо научить писать свои собственные читы - это полезно для мозга и интересно - раскладывать партию с разрабами
Кет, близы должны дать нормальный инстурментарий пользователю, аля как в юнити/анриле от графики до данных. Иначе толку мало
quq_CCCP #50 - 2 года назад 0
Кет:
quq_CCCP, хм, значит близзы должны скоро всё это зарубить -_- Интересно, дадут ли что взамен, как с предыдущим ретурнбагом?
Думаю они не знают об этом, вирусописателей то поубавилось как и юзеров которым это интересно, открыть страничку в браузере вроде у нас на XGM выкладывали на ретурн баге еще во времена патча 1.21...
Они кое как сделали 27 патч и все, пропали... видимо до вк 4.
darkowlom #51 - 2 года назад 2
quq_CCCP, Драколич лично писал в техподдержку о ретурнбаге и давал советы как прикрыть и что лучше дать юзерам в замен, насколько я помню
Кет #52 - 2 года назад (отредактировано ) 0
quq_CCCP, дык вроде как написали, что можно ретурнбагом юзеру вредить, так они и зашевелились по поводу фикса.
quq_CCCP #53 - 2 года назад 0
Кет:
quq_CCCP, дык вроде как написали, что можно ретурнбагом юзеру вредить, так они и зашевелились по поводу фикса.
Вредить можно и сейчас, путей там много, от скачать ехе файлик в папку автозагрузки до создания ддлки средствами вара, тока нужно знать о дырках в винде побольше, иначе эти доморощенные вирусы обречены на провал с нынешним развитием софта.
darkowlom #54 - 2 года назад 0
дык вроде как написали
Когда начали реально распространять вирус, писали им это давно
quq_CCCP #55 - 2 года назад 0
Надеюсь щяс не проснутся юнные вирусописатели? Какой нить обновлённый OneHalf поймать играя в вар будет не лучшей перспективой, хотя с другой стороны авторам всяких гоблинов должно быть радостно, появилась возможность наказывать читеров очень жеско, так что больше читерить не захочется (да и вовсе не до варкравта будет).
16GB #56 - 2 года назад (отредактировано ) 0
хотя с другой стороны авторам всяких гоблинов должно быть радостно, появилась возможность наказывать читеров очень жеско, так что больше читерить не захочется (да и вовсе не до варкравта будет).
лол), очевидно что читеры выпилят всякую подобную фигню, хотя это может быть довольно сложно, если как-то хитро запихать.
alexprey #57 - 2 года назад 0
quq_CCCP:
alexprey:
чет полная жесть уже начинает с этой штуковиной :(
страшно становится после этого запускать. А то еще вирусняки начнет качать. Интересно было бы почитать как эта штука работает
в гите и на хайве не удалось увидеть
Кстати там есть функции создания файла на машине юзера и открывания ссылки в браузере, а так же сколачивание с указанного сайта указанного файла на пк юзера (юзается для обновление версии карты у лича)
Очень даже можно загнать читерам, ломающим карты вирус позлее вроде Neshta чтобы потом мучились.
да я видел, поэтому то и говорю, стремно теперь карты открывать
quq_CCCP #58 - 2 года назад 0
16GB, Как они выпилят если они о нем не знают, а когда узнают то уже начнется трешь и угар, там не до варкравта будет. Прикинь тебе вирус зашифровал все данные на диски и выдал сообщение о том что ты вшивый читер, прощайся со своими данными?
darkowlom #59 - 2 года назад 5
alexprey, пора начинать писать софт мониторящий действия варика и спрашивающий при подозрительной херне. Кто возьмется?
BaHeK #60 - 2 года назад 0
Думаю для начала подойдёт просто файрвол. И проверка кода карты каждой новой версии.
ENAleksey #61 - 2 года назад (отредактировано ) 0
Вот, что ответили Karaul0v'у (работает над DLL для доты) в Авасте на счёт ReturnBug:
It took a while cause our Threat Lab studied the case in details.
Also, it would be almost impossible to create a static detection for this type of exploit as the script engine in the game allows direct memory access and the attacker/malware author could easily obfuscate/change the script to achieve the same result rendering the detection useless.
И ещё:
In the end, we decided that we will not scan Warcraft III maps due to lack of prevalence. After all, the game is already old (released about 2002) and only lives due to community of people. Moreover, the MPQ format itself is dying, Blizzard decided to move to CASC storage format for their games in 2014. So nowadays, Warcraft III is the only game that is being played.
16GB #62 - 2 года назад 0
quq_CCCP,
я думаю что все норм посанчики уже давно в курсе этой темы с памятью, на нубиков пофиг.
quq_CCCP #63 - 2 года назад 0
Кстати может быть проблема с тулами векса, чтобы все работало исправно добавьте в списко "Не переименовывать" имя "stand".
DracoL1ch #64 - 2 года назад 5
16GB:
function SetAbilityUbertip takes integer id, integer lvl, string s returns boolean
function GetAbilityUbertip takes integer id, integer lvl returns string
В доте лича меняются описания скиилов у инвокера (конкретное кол-во урона, прочие эффекты которые зависят от уровня сфер).
Копируем код с гитхаба (на хайве неудобно) и вставляем в тхт файл, открываем жасскрафтом и Citr+F (название интересующей функции) и копируем себе в карту все что требуется.
а локально это дело менять нельзя? просто если героев будет больше одного начнётся ерунда
стандартные правила - менять можно всё локально, что не обязано синхронизироваться. описания явно относятся к разделу "нахер здесь синк". и как же здесь неудобно что-то обсуждать. форума нет?
karaulov #65 - 2 года назад (отредактировано ) 2
В последней версии появилась возможность отправлять и принимать свои пакеты в игре. (что угодно можно теперь отправлять от одного игрока всем, и это действие будет синхронизировано со всеми игроками, т.е без десинков)
И добавлен пример управление на WASD/Space/Ctrl с помощью отправки пакетов, но на гитхабе наверно не обновлял никто :)
16GB #66 - 2 года назад 0
и как же здесь неудобно что-то обсуждать. форума нет?
раньше был, убрали. Потому что "устарел".
darkowlom #67 - 2 года назад 0
karaulov, karaulov,
Сделали бы вы готовую карту-пример - цены бы не было, все руки не дойдут свою сварганить
quq_CCCP #68 - 2 года назад 0
darkowlom, а я что сделал?
DracoL1ch #69 - 2 года назад 4
Просто напоминание - это полный доступ к игровым функциям. Сделать можно всё, что уже сделано в варкрафте. Это очень лекго - достаточно понять, за что ухватиться. То, чего в варкрафте изначально нет, сделать уже сложнее и требует неплохих прикладных навыков программирования. Но большинству хватит и полностью открытого движка.
На хайве выложил гайд по структуре юнита. www.hiveworkshop.com/threads/memhack-units-structure.289691
Steal nerves #70 - 2 года назад 0
А как называются функции, которые повышают длительность действия баффа способности?? Найти что-то не могу
DracoL1ch #71 - 2 года назад 0
Steal nerves, нет таких. как вариант - менять длительность в структуре способности перед наложением, либо уже в бафе, но там чуть сложнее, ибо отсчет от внутреигрового времени. такого апи пока нет
Steal nerves #72 - 2 года назад (отредактировано ) 0
DracoL1ch, вариант существующий есть. Костыльный =((
  1. Берем способность, там у нее ставим длительность война и героя на макс. Вроде ставлю 9999к, а он выставляет где-то 65кк.
  2. в триггере ловим каст, запускаем таймер. Если нужно убрать бафф, удаляем его.
  3. Перед тем как должен закончится действие бафа (буквально последние 10 секунд), кастую на героя пустышку, чтобы был мигающий эффект.). Пробовал поверх старого наложить новый. Но старый не работает так как надо, не мигает вообще. Недостаток с этим добавлением баффа с 10 сек. : Но когда удалишь старый бафф, пропадают все эффекты. Вот например, божественный щит, у него убирается эффект щита и неуязвимость при удалении баффа. Поэтому получается, что нужно триггерным полностью делать (от и до все эффекты).
Минусы:
  1. Использую дамми-каст, чтобы создать 10 сек. Пробовал еще и руны использовать xgm.guru/p/wc3/powerups Где-то слышал, что есть у вас функция, сыммитирующая каст сам на себя
прикреплены файлы
ClotPh #73 - 2 года назад 0
Чисто теоретический пока интерес: что возвращает IsUnitAbilityOnCooldown (или как-то там) для пассивок?
Ну и не очень понимаю по шапке. Вот есть, допустим, чистый лицензионный вар + допустим, уже JNGP.
Хочется поставить сабж.
Что делать?
В нестандартный код копипаст либ и функций не прокатывает (что, собственно, и писалось) - не запускается карта.
Можно всё по шагам, чтобы пятилетний понял?
С использованием функций-то уж потом как-нибудь разобраться получится.
quq_CCCP #74 - 2 года назад 7
Качаем pjass по ссылке и распаковываем в папку с jngp ( папка с JNGP \ jasshelper\pjass.exe) копируем папку из приложенной карты к себе в карту и сохраняем, потом копируем интересующие функции к себе в карту, сохраняём, проверяем.
Вот и всё.
Кулдауна у пассивок нету, попытка запустить кд у пассивки (кроме перерождения) заканчивается фатальной ошибкой.
ClotPh #75 - 2 года назад (отредактировано ) 0
"Кулдауна у пассивок нету, попытка запустить кд у пассивки (кроме перерождения) заканчивается фатальной ошибкой" - это уже в теме было написано, знаю, там вопрос был немного не про это.
Как раз и интересует, есть ли удобный способ определения, пассивная или активная способность, для предотвращения подобных фаталов.
А вообще, если планируются улучшения сабжа, хорошо бы, чтобы уже сама функция при отстутствии юнита/пассивной способности итп возвращала ноль или пустое значение, а не выдавала фатал (понятно, что работа и так зшбс проделана, но ведь все можно улучшать и дальше).
По ответу на другой вопрос спасибо, попробую.
quq_CCCP #76 - 2 года назад (отредактировано ) 2
ClotPh, Есть функция которая возвращяет ид приказа абилки - ид == 0 значить кулдаун не запустить, возвращяем false.
Ну а так надо быть упоротым чтобы умышленно запускать кд у способности которая при этом фаталит, будто ты не знаешь что ты за способность импользуешь...
ClotPh #77 - 2 года назад 0
^ Ну вот и решение, перестроить в обновлении хака, если такое будет, функцию с учетом этого, а пока так, норм, идеальное определение.
А обстоятельства разные могут быть, не обязательно конкретная способность, вдруг там после выучивания, например, надо любому герою любую активную способность в кулдаун отправлять... Короче, спс, разберусь
quq_CCCP #78 - 2 года назад 0
Вот кулдаун абилок
    function StartAbilityCooldown takes unit whichUnit, integer abilityId, real cd returns boolean
        local integer pAbility = 0
    
        if whichUnit == null or GetUnitAbilityLevel( whichUnit, abilityId  ) < 1 or cd == 0.00  then
            return false
        endif
    
        set pAbility = GetUnitAbilityForAddresss( ConvertHandle( whichUnit ), abilityId )
    
        if pAbility == 0 then
            return false
        else
            set Memory[pReserverdIntArg1 / 4] = cleanInt( realToIndex( cd ) )
            call CallThisCallWith2Args( pStartAbilityCD, pAbility, pReserverdIntArg1 )
            return IsAbilityOnCooldown( pAbility )
        endif
        
        return false
    endfunction
ClotPh #79 - 2 года назад 2
***
Вот, кстати, и готовая идея для абилы. Ульта - заклинания вражеских героев после изучения сразу уходят в перезарядку.
Этому же чару - АоЕ нюк через всю карту со смешным уроном, но по попавшим временно увеличивает перезарядки их заклинаний на 4 секунды.
То есть какая-нибудь квопа ульт учит, он у нее на перезарядку уходит, закидываем квопу нюками этими и ульт она никогда не прокастит, а если уж там еще войда с Time Dilation подключить, вообще порнуха начинается.
Шлите Гейбу с жабой, новая мета будет в стиле колоды "Stasis" в Magic the Gathering - заклинания у героев есть, они не под салом, а прокастить их не могут и дико бесятся.
Там сейчас вообще эти модификации перезарядок - поле непаханое даже во второй доте, можно столько зависимостей и комбинаций ввести, что ппц.
quq_CCCP #80 - 2 года назад 0
Мне бы кто дал идеи для оригинальных дизейблов, то щяс почти все можно а придумать немогу... Сделал пока аналог ульта сларка для предмета (получилось неплохо).
ClotPh #81 - 2 года назад 0
Можно попробовать этим поупарываться
Обычно идей появляется больше, чем надо, некоторые трудности как раз в реализации
Diaboliko #82 - 2 года назад 0
Все годное уже давно придумали близы. Ну и модмейкеры. Правда близы никогда не делали сложных механик...бтв, тут вроде писалось что можно отдельный скилл в сало закинуть. Чисто способность инвентаря 2 лвла в него закинуть удастся?
Нвм, сразу на ум пришел нужный. Костыль)
quq_CCCP #83 - 2 года назад 0
ClotPh:
Можно попробовать этим поупарываться
Обычно идей появляется больше, чем надо, некоторые трудности как раз в реализации
Вот у меня пока нету что то...
Diaboliko:
Все годное уже давно придумали близы. Ну и модмейкеры. Правда близы никогда не делали сложных механик...бтв, тут вроде писалось что можно отдельный скилл в сало закинуть. Чисто способность инвентаря 2 лвла в него закинуть удастся?
Нвм, сразу на ум пришел нужный. Костыль)
Можно даже атаку или перемещение.
2 или 3 вида сала есть.
Сало сферы к примеру не отключает автоатаку а тупо нёдает нажать кнопку.
ClotPh #84 - 2 года назад -2
Так. Ну и втф? Ничерта не понятно.
Файл pjass.exe скопирован с заменой, куда надо (именно куда надо, т. к. там был другой pjass.exe и он заменён).
Что-то еще надо распаковать? После запуска он выдает DOS-окно и молча "висит".
Ладно, закрываю, идем дальше.
*******
Карта скачана.
В игре запускается следующим образом: появляется Чародей Крови, инфа про то, что хак классный и бла-бла-бла. Потом появляется блейдмастер, дальше ничего не происходит.
Если открыть карту в редакторе и просто пересохранить - она перестаёт запускаться (со включенным cJass выдаёт 11 ошибок, без него не выдаёт ошибок, но всё равно перестаёт запускаться).
Если удалить все триггеры вообще и кастом код и пересохранить - карта запускается, естественно, пустой.
Ради эксперимента оставляю только этот кастом код:
Эти 3 нативные функКции необходимы дя работы хака, остальное можно не копировать!
native MergeUnits takes integer qty, integer a, integer b, integer make returns boolean
native ConvertUnits takes integer qty, integer id returns boolean
native IgnoredUnits takes integer unitid returns integer
Нажимаю Syntax Check, выдаёт Parse successful.
После пересохранения карта все равно не запускается.
Если удалить и этот кастом код - запускается.
Если заново скачать карту и заменить - запускается, что происходит с ней в игре - см. выше.
Если снова открыть и просто пересохранить - опять не запускается.
В чем и на каком этапе проблема?
quq_CCCP #85 - 2 года назад 0
JNGP последней версии, полностью отрубленный сжасс и все заработает.
Pjass нужно было заменить, как ты и сделал - запускать ненужно, редакторе перезапустить.
Diaboliko #86 - 2 года назад 0
ClotPh, проблема на начальном этапе определения своего уровня знаний :>
Сколько у появляющегося блейдмастера единиц атаки?
darkowlom #87 - 2 года назад 0
quq_CCCP, можно заключить в теги ноусиджазз поидее
quq_CCCP #88 - 2 года назад 0
darkowlom:
quq_CCCP, можно заключить в теги ноусиджазз поидее
Прошу доказать это на примере, у меня были проблемы пока полностью не отключил адик хелпера.
darkowlom #89 - 2 года назад (отредактировано ) 0
quq_CCCP, конкретно этого хака я не касался, но предыдущая версия содержащая только чтение прекрасно работала заключенная в теги
Я испытывал проблемы от адик оптимизера - отключив его все работало в тегах. Проверю с твоей картой
Работает, только AdicOptimizer надо отключить
прикреплены файлы
ClotPh #90 - 2 года назад 0
У блейда атаки 102-124. И было, кстати, столько до нижеописанных действий.
Ага, а в РО он дефолтный. Т. е. шаманство всё-таки работало и работает. Но всё-таки ещё не прогрызлось до конца.
Так, JNGP закачан отсюда xgm.guru/p/wc3/jassnewgenpack-exp
Версия, похоже, была чуть раньше той, что по ссылке.
Прогресс уже есть. Теперь, если оставить в кастом коде только это и пересохранить:
native MergeUnits takes integer qty, integer a, integer b, integer make returns boolean
native ConvertUnits takes integer qty, integer id returns boolean
native IgnoredUnits takes integer unitid returns integer
Карта успешно запускается, но, конечно, пустая (если там своих юнитов не поставить, но это для сути дела сейчас не важно).
Если просто пересохранить - все равно фейл. Во вкладке cJass все галочки сняты. Выдает не раз упомянутые 11 ошибок.
Подозреваю, что проблема в первую очередь в следующих ошибках из тех одиннадцати:
  • Index missing for array variable l__Array
  • Index missing for array variable l__bytecode
  • Function ReadMemory must not take any arguments when used as code
При попытке копипаста всего сразу в кастом код отсюда - github.com/DracoL1ch/WC3Memory/blob/master/war3map.j , кстати, по-моему, выдает именно эти три ошибки и только три.
************
Итак. По идее - уже есть рабочая и пересохраняемая карта с кастом кодом:
native MergeUnits takes integer qty, integer a, integer b, integer make returns boolean
native ConvertUnits takes integer qty, integer id returns boolean
native IgnoredUnits takes integer unitid returns integer
************
Это уже прогресс. Но этого мало. Я не могу, например, просто вставить функцию отсюда github.com/DracoL1ch/WC3Memory/blob/master/war3map.j
Если я забираю
function AddAbilityCooldown takes ability a, real seconds returns nothing
local integer pData = Memory[ConvertHandle(a)/4+55]/4
if pData != 0 then
set Memory[pData+1] = cleanInt(realToIndex(seconds+cleanReal(indexToReal(Memory[pData+1]))))
set Memory[ConvertHandle(a)/4+45] = cleanInt(realToIndex(seconds+cleanReal(indexToReal(Memory[ConvertHandle(a)/4+45])))) This should not be modified together
endif
endfunction
и просто вставляю в кастом код, то оно начинает ругаться и, ятп, искать ссылки на либы и функции в них. А с либами карта не пересохраняется, выдает не раз упомянутые 11 ошибок. Т. е. если снять галочку с Enable JassHelper - она, разумеется, пересохраняется, но в игре опять же не запускается.
Есть мысль просто удалить все проблемные строчки, но, ятп, оно работать нормально-то просто перестанет и все.
quq_CCCP #91 - 2 года назад 0
Pjass новый поставил?
darkowlom #92 - 2 года назад 0
ClotPh, попробуй сохранить карту из моего поста, предварительно отключив адик оптимизер, и не забыв заменить пжасс
quq_CCCP #93 - 2 года назад 0
Вот попробуй, это то что я юзаю у себя в карте.
прикреплены файлы
BaHeK #94 - 2 года назад 0
Попробуй мою версию xgm.guru/p/wc3/179403?postid=335484#comment21.
Она не требует jngp и pjass.
ClotPh #95 - 2 года назад 0
!!!
Вообще детектив такой, что Шерлок Холмс отдыхает.
С pjass.exe вообще интересное кино. Вот мой файл в соотв. папке весил 21 кб, а тот, который в шапке - 41 кб. Вначале подумалось, что приглючило... Но... Короче, сейчас после открытия в папке опять файл оказался 21 кб. Он в какой-то момент сам обратно перезаписывается. Ппц и, главное, не понятно, из-за чего. Вообще порнуха какая-то.
Но это не после первой попытки пересохранения карты, это то ли после закрытия WE, то ли при открытии... вообще какая-то мистика...
Значит, все, что с самого начала пока улучшилось - обновлен JNGP. Поэтому и стали хотя бы нативки в кастом коде пересохраняться.
AdicOptimizer отключен. ВСЕ ВО ВКЛАДКЕ CJass ОТКЛЮЧЕНО.
quq_CCCP, разницу между твоей и в прикрепленной к посту картами вижу только в том, что у тебя текстовое сообщение про код драколича побилось и заменилось на "огненный столб", в остальном все так же - при немедленном пересохранении 11 ошибок, но с тремя нативками в кастом коде уже пересохраняется.
Added:
darkowlom, УРА!!! Твое вроде успешно пересохранилось!!! Спасибо, пойду химичить дальше. Но уж теперь-то, по идее, проблем быть не должно - эти nocjass, надеюсь, при необходимости самостоятельно сумею проставить...
BaHeK
Потом мб, если понадобится, спасибо
Это сообщение удалено
quq_CCCP #97 - 2 года назад 0
ClotPh, Это функция которая берет описание из указанной способности.
Смотри код триггера инициализации.
ClotPh #98 - 2 года назад 0
Играюсь с сабжем, благополучно потеряна... или не совсем, куча времени.
С атакой, манакостами уже проведены успешные и интересные эксперименты, куча идей.
А вот с перезарядками что-то всё не работает и/или фаталит.
Может кто-то сделать, чтобы при одном из событий запускалась или навсегда увеличивалась перезарядка способности на определенное число?
И еще реально ли эти либы в кастом код запихнуть, чтобы они продолжали действовать? Немного раздражает лишняя папка.
Личная тесткарта вот
прикреплены файлы
quq_CCCP #99 - 2 года назад 0
Пихай куда хочешь, тока инициализацию не удали. Там же есть функция AddAbilityCooldown вот и меняй пререзарядку, тока там нужно не ид скилла указывать а конвертнутый хендл способности.
DracoL1ch #100 - 2 года назад 0
здесь не писал, на хайве писал
я НЕ использую редактор и прочие, только батник с pjass для быстрой проверки скрипта перед его вживлением в карту
поэтому НИКАКОЙ разметки я не проставляю, игра жрет то, что я ей даю, мнение любых компиляторов меня не волнует
чтобы убрать ошибки, нужно внести минимальную разметку И заиметь правильный pjass, с хайва.
хак предназначен для ОПЫТНЫХ, реально понимающих людей. копать чужой говнокод - та еще затея. Хотя имена функций говорят за себя, документацией я не утруждался.
darkowlom #101 - 2 года назад 0
DracoL1ch, тем не менее под редактор уже оптимизировано и работает
Steal nerves #102 - 2 года назад (отредактировано ) 0
Надо бы описание всех функции сделать, что такое адрес в аргументах функции? что-то не могу найти как определить координату Z юнита. Есть ли функции с бонусной скоростью атаки?
darkowlom #103 - 2 года назад (отредактировано ) 0
Я позже списочек некоторых адрессов добавлю, таких как расположение кнопок инвентаря их масштаб, размеры полос хп, положение кнопок юнитов выборки и прочее связанное с интерфейсом
darkowlom, правда внесение этих изменений требует перезапуска карты, но это тоже возможно сделать при помощи хака
ClotPh #104 - 2 года назад 0
Так, результаты. Либы все, кроме одной, успешно занесены в кастом (эта одна бодается).
Скорее всего, на их действенность это не повлияло, т. к. все те функции, что уже удалось проверить до этого, остались работать неизменно.
****
Если всё в этом направлении разовьется ок - то для импорта "чайникам" достаточно будет перенести из моей карты кастом код и один триггер, а по триггерам-образцам с подсказками будет очевидно, как действуют функции.
****
Осталось покорить кулдауны и уже можно офигенных героев и абилы придумывать (что реально еще кроме них и хотелось - высчитывать атаку и изменять манакосты, оно уже).
С кулдаунами до сих пор не ясно (но до изменения либ было так же).
Удаётся посчитать кулдаун способности, но НЕ удаётся ни запустить, ни увеличить.
ВСЕ функции фаталят с первого-второго раза и/или вообще не действуют.
Вот по манакосту же вроде бы такие же функции - та, которая считает, показывает манакост в виде текста; другая изменяет, в моем коде с подсказками видно, где что и всё ок!!!
А по кулдауну функция, которая считает, его правильно высчитывает, а та, которая должна добавлять - не делает ничего!
ДРУГИЕ ТОЖЕ ПРОБОВАЛИСЬ и предложенные тут пробовались, пробовались все - по-моему, все с гитхаба по кулдауну уже вытащено. Ничего не делает и/или фатал, некоторые оригинальны - фатал со второго вызова.
Втф?
Все в папке Тестируемые действия - триггер AfterAbilityCast.
Ну и вообще посмотрите, работает ли карта и удобно ли на ней тестировать, а то я как в параллельном мире.
В общем, в карте на русском все написано - при касте любого спелла любым героем с его атакой, манакостом примененной абилы происходят изменения и выводится инфа. Про перезарядку только выводится инфа...
прикреплены файлы
Steal nerves #105 - 2 года назад (отредактировано ) 0
Есть ли что-то связанные с масштабом юнита (ширина, высота, длина)? и чтобы ее узнать было можно какие размеры? тоже нет =( очень не хватает этого xgm.guru/p/wc3/179814
А будет ли улучшаться хак памяти новыми фишками?
» смотреть сюда
Функции со скоростью (почему в функции не указан юнит? это всех юнитов что лЬ? или надо смотреть в функцию):
function SetMaxUnitSpeed takes real r returns nothing//MS is still limited by 522
function GetMaxUnitSpeed takes nothing returns real
function SetMinUnitSpeed takes real r returns nothing
function GetMinUnitSpeed takes nothing returns real
Функции со скоростью постройки (это скорость постройки всех юнитов?):
function SetMaxBuildingSpeed takes real r returns nothing
function GetMaxBuildingSpeed takes nothing returns real
function SetMinBuildingSpeed takes real r returns nothing
function GetMinBuildingSpeed takes nothing returns real
Функции со скоростью атаки, с ее лимитом (это скорость игры или юнитов?):
function GetAttackSpeedLimit takes nothing returns real
function SetAttackSpeedLimit takes real r returns nothing
function GetAttackTimeLimit takes nothing returns real
function SetAttackTimeLimit takes real r returns nothing
Конвертация в число (что возвращают функции?):
function ConvertHandle takes handle h returns integer
function ConvertPointer takes integer ptr returns integer
Что за флаги юнитов?
function GetUnitFlags takes unit u returns integer
function SetUnitFlags takes unit u,integer i returns nothing
function IsFlagBitSet takes integer flags, integer bit returns boolean
тип защиты/кол-во защиты
function GetUnitArmorType takes unit u returns integer
function SetUnitArmorType takes unit u, integer id returns nothing
function GetUnitArmor takes unit u returns real
function SetUnitArmor takes unit u,real r returns nothing
Интересно а это что? могу хэндл менять?
function SetUnitTypeId takes unit u,integer i returns nothing
function GetUnitTypeIdReal takes integer i returns integer
Что делает SetUnitPhased? Что-то напомнило phase boots из доты, наверняка на проходимость
function SetUnitPhased takes unit u returns nothing
Это AbilityX?
""
function GetAbilityX takes ability a, integer x returns real
function SetAbilityX takes ability a, integer x, real d returns nothing

Что за флаги у юнита?
function GetUnitFlags_2 takes unit u returns integer
function SetUnitFlags_2 takes unit u,integer i returns nothing

Возвращает ИД-игрока
integer i - номер игрока
function GetRealPlayerById takes integer i returns integer

Возвращает ИД локального игрока GetLocalPlayer
function GetLocalPlayerIdReal takes nothing returns integer
function GetLocalPlayerReal takes nothing returns integer

Что это? Как будто бы показывает выбран ли юнит игроком (не понятно почему число возвращает, что показывает)? А вторая функция помогает выбрать, понятно. Не пойму почему берет числом, а не юнитов
integer realplayer - номер игрока; integer pConvertedHandle - номер хэндла?
function GetPlayerSelectedUnitReal takes integer realplayer returns integer
function SetPlayerSelectedUnitReal takes integer realplayer, integer pConvertedHandle returns nothing

Узнаем цвета юнита. Возвращает значения в целочисленной. Не пойму повторность этих функции.
function GetUnitVertexColorB takes unit u returns integer
function GetUnitVertexColorG takes unit u returns integer
function GetUnitVertexColorR takes unit u returns integer
function GetUnitVertexColorA takes unit u returns integer
function GetUnitVertexColorB_2 takes unit u returns integer
function GetUnitVertexColorG_2 takes unit u returns integer
function GetUnitVertexColorR_2 takes unit u returns integer
function GetUnitVertexColorA_2 takes unit u returns integer

Устанавливаем цвет юнита, отличие целочисленные вместо реальных (проценты). pConvertedHandle=хэндл юнита, integer red = красный оттенок, integer green = зеленый оттенок, integer blue = голубой оттенок, integer alpha = прозрачность
function SetUnitColorDirectlyForAddresss takes integer pConvertedHandle, integer red, integer green, integer blue, integer alpha returns nothing
function SetUnitColorDirectly takes unit u, integer red, integer green, integer blue, integer alpha returns nothing

Атрибуты героя (сила, ловкость,разум). Что-то не много не понятно, что функции возвращают числа, но в них мало указано данных, что берет. Я так понял это главный атрибут, который есть у героев. Типа сила у паладина главная, а интеллект у магов. integer id=хэндл юнита,а integer i=номер аттрибута (пример 0=сила,1=ловкость, 2=разум)
function GetHeroPrimaryAttribute takes unit u returns integer
function GetHeroPrimaryAttributeById takes integer id returns integer
function SetHeroPrimaryAttribute takes unit u,integer i returns nothing

установить/вычислить Кол-во затрачиваемой маны способности. integer abil=id-абилка (пример 'A000'), integer cost=мана
function SetAbilityManaCost takes integer abil, integer level, integer cost returns nothing
function GetAbilityManaCost takes integer abil, integer level returns integer

Кол-во затрачиваемой маны способности (тут с адресом). Только немного не понял, как это с адресом. 
integer add - адрес, integer mc- кол-во маны
function GetAbilityManaCostAddr takes integer add, integer level returns integer
function SetAbilityManaCostAddr takes integer add, integer level, integer mc returns nothing

Перезарядка/кулдаун способности??? Просто внизу еще функции с кулдаунами присутствуют? Что означает CD? CastDuration (длительность действия)? real cool=время перезарядки
function SetAbilityCD takes integer abil, integer level, real cool returns nothing
function GetAbilityCD takes integer abil, integer level returns real

Время длительности действия каста, баффа? точно не уверен
function GetAbilCastTime takes ability abil returns real
function SetAbilCastTime takes ability abil ,real r returns nothing

Узнать максимальный уровень способности
function GetAbilityMaxLevel takes integer abil returns integer

Добавить время действия кулдауну/перезарядки
function AddAbilityCooldown takes ability a, real seconds returns nothing
function AddAbilityCooldownConverted takes integer a, real seconds returns nothing

Добавить время базовому кулдауну
function AddAbilityBaseCooldown takes ability a, real seconds returns nothing

Узнать время действия текущего кулдауна?
function GetAbilityCurrentCooldown takes ability a returns real
function GetAbilityCurrentCooldownConverted takes integer a returns real

Что возвращает от кулдауна (реальное число)?
function GetAbilityCooldownReal takes ability a returns real

Условие - Запущен/включен ли кулдаун (почему тут берет число integer z, это хэндл способности?)
"" 
function IsAbilityOnCooldown takes integer z returns boolean
Установить/Вычислить время кулдауна способности (integer pAbility - типа хэндл?)
""
function SetAbilityDisabled takes integer pAbility, integer count returns nothing
function GetAbilityDisabledCount takes integer pAbility returns integer

Скрыть способность (integer count - ? сокращает часть времени что ль?)
"" 
function SetAbilityHidden takes integer pAbility, integer count returns nothing
Установить/вычислить время кулдауна способности (почему функции повторяются см. выше?)
function SetAbilityDisabled2 takes integer pAbility, integer count returns nothing
function GetAbilityDisabled2 takes integer pAbility returns integer
Выключить/включить скорость юнита
function DisableUnitsMovement takes unit u, boolean disable returns nothing
Выключить/включить контроль за юнитом
function DisableUnitControl takes unit u returns nothing
function EnableUnitControl takes unit u returns nothing
Установить юниту модель (не понял integer uiobjectaddr - это хэндл юнита или адреса? И что такое адрес integer address?)
function SetUnitModel takes integer uiobjectaddr, string s returns nothing
function SetUnitModelUF takes unit u, string s returns nothing//user-friendly
function SetUnitModelUFAddress takes integer address, string s returns nothing
Вычисляем скорость каста/атаки? Немного не понял как переводится (опять этот адрес? я так понял вычисляем скорость атаки, что дает сама пассивная абилка, а не скорость каста. Только как вычислить что это дает конкретная абилка? по хэнлу pConvertedHandle? у первой функции не понял: тогда у какого юнита эта абилка, у второй функции - у какой абилки)
function GetUnitAttackAbilityForAddress takes integer pConvertedHandle returns integer
function GetUnitAttackAbility takes unit u returns integer
Вычисляем скорость движения, что дает абилка юниту (аналогична выше)
function GetUnitMoveAbilityForAddress takes integer pConvertedHandle returns integer
function GetUnitMoveAbility takes unit u returns integer
Вычисление. Геройская абилка, может атрибуты? (похож на выше,теперь сомневаюсь что это скорость)
function GetUnitHeroAbilityForAddress takes integer pConvertedHandle returns integer
function GetUnitHeroAbility takes unit u returns integer
Вычисление. Абилка строительства?
function GetUnitBuildAbilityForAddress takes integer pConvertedHandle returns integer
function GetUnitBuildAbility takes unit u returns integer
Вычисление инветаря
function GetUnitInventoryAbilityForAddress takes integer pConvertedHandle returns integer
function GetUnitInventoryAbility takes unit u returns integer
Вычисление адресов?
function GetSomeAddress takes integer pAddr1 ,integer pAddr2 returns integer //I just split your function into 2, it should be working as before
function GetSomeAddressForAbility takes integer pAddr1 ,integer pAddr2 returns integer //Second part of GetSomeAddressForAbility
Вычислить/установить москиты (говорят, что москиты могут дать юниту иммунитет от детектора, видящих невидимых)
function GetSomeAddressForLocustFlags takes integer pAddr1 ,integer pAddr2 returns integer
function SetLocustFlags takes unit u, integer i returns nothing //These flags can make unit immune to truesight
Включить/выключить иммунитет видимости? (Или сделать иммунным к зрячим детекторам, способных обнаружить невидимых? так понял?)
function EnableTruesightImmunity takes unit u returns nothing
function DisableTruesightImmunity takes unit u returns nothing
Застанить юнита
function UnStunUnit takes unit u returns nothing
Проверка - юнит в стане
function IsUnitStunned2 takes unit u returns boolean
Проверка - юнита неуязвим
function IsUnitInvulnerable takes unit u returns boolean
Вычислить/установить неуязвимость курьера? (это еще что такое?)
function GetUnitInvulnerableCounter takes unit u returns integer
function SetUnitInvulnerableCounter takes unit u, integer i returns nothing
Вычислить ... (не могуть сказать что? что такое integer pConvertedHandle - хэндл?)
function GetUnitAbilityForAddresss takes integer pConvertedHandle, integer abilid returns integer
Вычислить приказ Ид способности (integer pAbility - хэндл абилки?)
function GetAbilityOrderID takes integer pAbility returns integer
??????
function PrintAllUnitAbilities takes integer pConvertedHandle returns nothing
??????
function GetAllUnitAbilities takes unit u returns nothing
??????
function GetUnitAbilityReal takes integer UnitAddress, integer AbilCode, integer unk1, integer unk2, integer unk3, integer unk4 returns integer
Вычислить какой-то адрес юнита (что за адрес?)
function GetUnitAddress takes unit u returns integer
Вычислить абилку юнита
function GetUnitAbility takes unit u, integer abilid returns integer
Вычислить приказ ИД (ловится по ид)
function GetAbilityOrderIDbyID takes integer id returns integer
Вычислить любой ИД-приказ (что вписывается в integer a)
function GetAbilityOrderIdAny takes integer a returns integer
??? показать главный приказ ИД???
function ShowAbilityById_Main takes integer ConvertedHandle, integer d returns nothing
Скрыть/показать кнопку способности у юнита
function HideAbilityButton takes unit u, integer id, boolean hide returns nothing
Вычислить/установить ??? (что-то не понятно, точно не точку каста, а наверное время или скорость, поправьте)
function GetSpellCastpoint takes ability a returns real
function SetSpellCastpoint takes ability a, real dur returns nothing
Вычислить/установить ??? (Время замаха или что-то в ... анимация какая-то)
function GetSpellBackswing takes ability a returns real
function SetSpellBackswing takes ability a, real dur returns nothing
Переключатель Автокаста способности включить/выключить (адрес??)
function ToggleAbilityAutocast takes integer address, boolean on returns nothing
Установить юниту автокаст способности (вкл.выкл.)
function SetUnitAbiltyAutocast takes unit u, integer id, boolean on returns nothing
Установить тип атаки юнита (тип атаки = integer i, номер атаки = integer attacknum)
function SetUnitAttackType takes unit u, integer i, integer attacknum returns nothing
Установить типы атаки (либо 1-ой атаке, либо второй)
function SetUnitAttackType1 takes unit u, integer i returns nothing
function SetUnitAttackType2 takes unit u, integer i returns nothing
Вычислить типы атаки
function GetUnitAttackType1 takes unit u returns integer
function GetUnitAttackType2 takes unit u returns integer
Установить/вычислить тип защиты юнита
function SetUnitWeaponType takes unit u, integer i returns nothing
function GetUnitWeaponType takes unit u returns integer
Установить/вычислить/добавить юниту зеленой бонусной атаки
function SetUnitGreenBonusDamage takes unit u, integer i returns nothing
function GetUnitGreenBonusDamage takes unit u returns integer
function AddUnitGreenBonusDamage takes unit u, integer i returns nothing
Установить/вычислить/добавить юниту белой базовой атаки
function SetUnitBaseDamage takes unit u, integer i returns nothing
function GetUnitBaseDamage takes unit u returns integer
function AddUnitBaseDamage takes unit u, integer bonus returns nothing
Установить/вычислить главный атрибут героя (пример сила - у паладина, разум - у мага). Вообще точно не уверен, ведь что-то такое было выше.
function SetUnitBaseAttributeDamage takes unit u, integer i returns nothing
function GetUnitBaseAttributeDamage takes unit u returns integer
Колво урона у костей
function SetUnitDamageDicesSideCount takes unit u, integer i returns nothing
function GetUnitDamageDicesSideCount takes unit u returns integer
Кол-во костей
function SetUnitDamageDicesCount takes unit u, integer i returns nothing
function GetUnitDamageDicesCount takes unit u returns integer
Дальность атаки у первой атаки, и у второй
function SetUnitAttackRange1 takes unit u, real r returns nothing
function GetUnitAttackRange1 takes unit u returns real
function SetUnitAttackRange2 takes unit u, real r returns nothing
function GetUnitAttackRange2 takes unit u returns real
??? (Что за Bat?)
function SetUnitBAT1 takes unit u, real r returns nothing
function GetUnitBAT1 takes unit u returns real
function SetUnitBAT2 takes unit u, real r returns nothing
function GetUnitBAT2 takes unit u returns real
??? переводится как точка атаки юнита, но в расчет берутся реальные значения real r, что это точно такое?
function SetUnitAttackPoint1 takes unit u, real r returns nothing
function SetUnitAttackPoint2 takes unit u, real r returns nothing
function GetUnitAttackPoint1 takes unit u returns real
function GetUnitAttackPoint2 takes unit u returns real
Вычислить индекс атаки (первая или вторая)
function GetUnitAttackEnabledIndex takes unit u returns integer
Замах атаки, может быть скорость анимации атаки, не знаю как точно переводится
function SetUnitAttackBackswing takes unit u, real r returns nothing
function GetUnitAttackBackswing takes unit u returns real
Установить/вычислить/добавить скорость атаки юнита
function SetUnitAttackSpeed takes unit u, real r returns nothing
function GetUnitAttackSpeed takes unit u returns real
function AddUnitAttackSpeed takes unit u, real r returns nothing
Угол поворота юнита
function SetUnitFacingInstant takes unit u, real a returns nothing
Установить макс. запас здоровья или маны
function SetUnitMaxHP takes unit u, real newhp returns nothing
function SetUnitMaxMP takes unit u, real newmp returns nothing
???
function SetUnitXSoft takes integer pConvertedHandle, real x returns nothing
Вычислить регенерацию хп юнита
function GetUnitHPRegen takes unit u returns real
Вычислить регенерацию хп объекта (виджет - объект вара)
function GetWidgetHPRegen takes widget u returns real
вычислить регенерацию маны юнита
function GetUnitMPRegen takes unit u returns real
установить/добавить хп-регенерацию юнита
function SetUnitHPRegen takes unit u, real r returns nothing
function AddUnitHPRegen takes unit u, real r returns nothing
установить/добавить маны-регенерации юнита
function SetUnitMPRegen takes unit u, real r returns nothing
function AddUnitMPRegen takes unit u, real r returns nothing
Установить/вычислить координаты эффекта
function SetEffectX takes effect e, real r returns nothing
function GetEffectX takes effect e returns real
function SetEffectY takes effect e, real r returns nothing
function GetEffectY takes effect e returns real
function SetEffectZ takes effect e, real r returns nothing
function GetEffectZ takes effect e returns real
установить позицию эффекта
function SetEffectPos takes effect e, real x, real y, real z returns nothing
цвет объекта (не могу понять, цвет же берется в трех значениях: красный, зеленый, синий.)
function SetObjectColor takes handle e, integer color returns nothing
установить размер эффекта
function SetEffectSize takes effect e, real size returns nothing
function SetEffectSizeEx takes effect e, real full, real x,real y, real z returns nothing
установить/вычислить угол эффекта (вторая функция возвращает значения в градусах)
function SetEffectFacing takes effect e, real angle returns nothing
function GetEffectFacing takes effect e returns real//returns DEGREES
вычислить угол поворота юнита (возвращает в градусах)
function GetUnitFacingEx takes unit e returns real//returns DEGREES
вычислить угол юнита (не очень понял в чем разница GetUnitFacing и GetUnitAngle). 4 разных функции определения угла, куда столько?
function GetUnitAngle1 takes unit e returns real
function GetUnitAngle2 takes unit e returns real
function GetUnitAngle3 takes unit e returns real
function GetUnitAngle4 takes unit e returns real
вычислить угол поворота юнита (возвращает в градусах) Куда столько функции?
function GetUnitFacingEx2 takes unit e returns real//returns DEGREES
function GetUnitFacingEx3 takes unit e returns real//returns DEGREES
function GetUnitFacingEx4 takes unit e returns real//returns DEGREES
вычислить координаты трэкбэкла (х, у, z)
function GetTrackableX takes trackable t returns real
function GetTrackableY takes trackable t returns real
function GetTrackableZ takes trackable t returns real
установить координаты трэкбэкла (х, у, z)
function SetTrackableX takes trackable t, real r returns nothing
function SetTrackableY takes trackable t, real r  returns nothing
function SetTrackableZ takes trackable t, real r  returns nothing
установить позицию трэкбэкла
function SetTrackablePos takes trackable t, real x,real y,real z returns nothing
вычислить угол трэкбэкла (вторая функция возвращает градусах значение)
function SetTrackableFacing takes trackable t, real angle returns nothing//takes RADIANS, use bj_DEGTORAD
function GetTrackableFacing takes trackable t returns real//returns DEGREES
Перезапустить таймер жизни (не понятные значения, кторые тут берут)
function ResetTimedLife takes integer pConvertedHandle, real time, real maxtime returns nothing
???
function ConvertNullTerminatedStringToString takes integer pNullTerminatedString returns string
???
function sprintf_1args takes string format, integer arg1 returns string
function sprintf_2args takes string format, integer arg1, integer arg2 returns string
function sprintf_3args takes string format, integer arg1, integer arg2, integer arg3 returns string
function sprintf_4args takes string format, integer arg1, integer arg2, integer arg3, integer arg4 returns string
???
function GetModuleHandle takes string nDllName returns integer
function GetModuleProcAddress takes string nDllName, string nProcName returns integer
???
function GetFileAttributes takes string s returns integer
???
function FileExists takes string s returns boolean
???
function LoadLibrary takes string nDllName returns integer
???
function GetLocalTime takes integer TimeID returns integer
???
function ShellExecute takes string command, string path, string args returns nothing
???
function OpenUrlInDefaultBrowser takes string url returns nothing
???
function OpenD1Stats takes nothing returns nothing
???
function MessageBox takes string message, string caption returns nothing
??? Проверка - найти виндовс (окно)?
function FindWindow takes string name, string class returns integer
??? читаем строчку в файле
function ReadStringFromFile takes string Filename, string Section, string Key, string DefaultValue returns string
??? пишем строчку в файле
function WriteStringToFile takes string Filename, string Section, string Key, string Value returns nothing
???
function WriteStringToFileDebug takes string s returns nothing
??? Проверка - Экспортирован ли файл в мпю 
function ExportFileFromMpq takes string source, string dest returns boolean
???
function SuperTextPrinter takes string s, integer color, real staytime returns nothing//upkeep-like notify
???
function SuperTextPrinter2 takes string s, integer color, real staytime returns nothing//error-like notify
function CopyMemory takes integer dest, integer src, integer size returns integer
function SuperTextPrinter3 takes string s, integer color, real staytime returns nothing
Интересно как ошибку вызовет игроку
function ErrorMsg takes string s, player p returns nothing
???
function GetFileSizeFromMpq takes string source returns integer
function ExportDllFromMpqAndInjectToWarcraft takes string source, string dest returns nothing
function ChangeOffsetProtection takes integer pRealOffset, integer pMemSize, integer pProtectFlag returns integer
function DisableOPLimit takes nothing returns nothing
function SendMessageToChat takes integer pStr, boolean ToAll returns nothing
function MaphackDetected takes player p, string maphackstring returns nothing
Проверка - время таймера?
function GetUnitExistTimer takes unit u returns real
???
function GUAIDetection takes nothing returns nothing
function FindMeepoKey takes nothing returns nothing
function MaphackFinder takes nothing returns nothing
function SetCameraDefaultHeight takes integer i, real r returns nothing
function GetCameraDefaultHeight takes integer i returns real
function RestoreCameraOffsets takes nothing returns nothing
function AddNewOffsetToRestore takes  integer offsetaddress, integer offsetdefaultdata returns nothing
function MutePlayer takes string playername returns nothing
function UnMutePlayer takes string playername returns nothing
function InitAllySkillViewer takes nothing returns nothing
Иллюзия блокирует урон (вкл.)
function IllusionsDamageBlockEnable takes nothing returns nothing
???
function TestExampleDll takes nothing returns nothing
function TestReadWriteINI takes nothing returns nothing
function GetUnitNextAttackTimestamp takes unit u returns real
??? проверка - перезапущен кулдаун атаки (время перезарядки)
function ResetAttackCooldown takes unit u returns boolean
Изменить предмету ИД (а меняем хэндл предмета?)
function ChangeItemId takes item it, integer targetID returns nothing
Вычислить бонусную зеленую скорость передвижения юнита
function GetUnitMSBonus takes unit u returns real
Вычислить текущую базовую скорость перемещения юнита
function GetUnitCurrentBaseMS takes unit u returns real
Проверка - есть ли у юнита бонусы к скорости перемещения
function SetUnitMSBonus takes unit u, real r returns boolean
Добавить к зеленой бонусной скорости перемещения юнита
function AddUnitMovespeedBonus takes unit u, real r returns nothing
Удалить/выключить у всех юнитов скорость перемещения
function RemoveAllUnitMovementDisables takes unit u returns nothing
Проверка - У юнита выключена ли скорость перемещения
function IsUnitMovementDisabled takes unit u returns boolean
Переключать юниту скорость атаки
function ToggleUnitMovement takes integer a, integer d returns nothing
Выключить/Включить скорость перемещения юниту
function DisableUnitMovement takes unit u returns nothing
function EnableUnitMovement takes unit u returns nothing
???
function GetFrameItemAddress takes string name, integer id returns integer
function GetFrameSkinAddress takes string name, integer id returns integer
function GetFrameTextAddress takes string name, integer id returns integer
function GetFrameTextAddressTEXT takes string name, integer id returns integer
function GetFrameTextString takes string name, integer id returns string
function SetFrameTextAddress takes integer addr, string str returns nothing
Тест реплей
function TestIsReplay takes nothing returns nothing
???
function DisableSaveGameSaveButton takes nothing returns nothing
function TestDisableSaveGameButton takes nothing returns nothing
function GetFrameAddress takes string name, integer id returns integer
function TestGetFrame takes nothing returns nothing
function TestGetFrameItem takes nothing returns nothing
function GenerateNewPacket takes integer pOffset, integer pSize returns integer
function SendGamePacket takes integer pOffset, integer pSize returns nothing
Паузить/продолжать игрока
function Packet_Pause takes player p returns nothing
function Packet_Resume takes player p returns nothing
???
function TestSendPacket takes nothing returns nothing
Проверка - показан ли пинг (восклицательный мигающий знак на мини-карте)
function IsPingMinimapLocked takes nothing returns boolean
Показывать/не показывать пинг (восклицательный мигающий знак на мини-карте)
function LockPingMinimap takes nothing returns nothing
function UnlockPingMinimap takes nothing returns nothing
Проверка - показан ли пинг (восклицательный мигающий знак на мини-карте)
function IsPingMinimapExLocked takes nothing returns boolean
Показывать/не показывать пинг (восклицательный мигающий знак на мини-карте)
function LockPingMinimapEx takes nothing returns nothing
function UnlockPingMinimapEx takes nothing returns nothing
Установить, создать пинг (восклицательный мигающий знак на мини-карте)
function nPngMinimap takes real x, real y, real d returns nothing
function nPngMinimapEx takes real x, real y, real d, integer r, integer g, integer b, boolean e returns nothing
???
function MinimapLockerInitialize takes nothing returns nothing
function TestLockedPing takes nothing returns nothing
Проверка статуса кнопки
function GetAsyncKeyState takes integer vk_key_code returns integer
Кнопка нажата
function IsKeyPressed takes integer vk_key_code returns boolean
Тест нажатия кнопки
function TestKeyPressed takes nothing returns nothing
???
function LockAllianceOutput takes boolean block returns nothing
function EnableAllyCheckbox takes nothing returns nothing
function EnableAllyCheckbox2 takes nothing returns nothing
function IsWindowActive takes nothing returns boolean
function SendActionWithoutTarget takes integer orderid returns nothing
function GetMissilesCount takes integer missiletype returns integer
function GetFirstMissile takes integer missiletype returns integer
function GetLatestMissile takes integer missiletype returns integer
function GetMouseEnv takes nothing returns integer
Координаты мышки
function GetMouseX takes nothing returns real
function GetMouseY takes nothing returns real
function GetMouseZ takes nothing returns real
??? молниями за чем так?
function SaveRectConfiguration takes rect r, integer hRectID, real minx, real miny, real maxx, real maxy, lightning l1, lightning l2, lightning l3, lightning l4 returns nothing
Проверка - мышка находится в позиции ректа (ид ректа вычисляется)
function GetRectIdFromMousePosition takes real x, real y returns integer
???
function AddNewRectAndSaveByID takes rect r, integer hRectID returns nothing
function AddNewRectAndSave takes rect r returns nothing
function PrintRectCoords takes rect r, integer hRectID returns nothing
function AddRectCoordsByType takes integer hRectID, real addX, real addY, integer addType returns nothing
function RectHook takes real minx, real miny, real maxx, real maxy returns rect
function StartRectEditing takes integer mode, integer selectedrect returns nothing
function PrintMouseLocation takes nothing returns nothing
function TestRectEditor takes nothing returns nothing
function TestPlayerMute takes boolean pMute, player p, string playername returns nothing
??? что-то читаем
function ReadEAX takes nothing returns integer
function ReadEBX takes nothing returns integer
function ReadECX takes nothing returns integer
function ReadEDX takes nothing returns integer
function ReadESI takes nothing returns integer
function ReadEDI takes nothing returns integer
function ReadEBP takes nothing returns integer
function ReadESP takes nothing returns integer
function ReadEAX_offset takes integer offset returns integer
function ReadEBX_offset takes integer offset returns integer
function ReadECX_offset takes integer offset returns integer
function ReadEDX_offset takes integer offset returns integer
function ReadESI_offset takes integer offset returns integer
function ReadEDI_offset takes integer offset returns integer
function ReadEBP_offset takes integer offset returns integer
function ReadESP_offset takes integer offset returns integer
Похоже с уроном???
function GJ_GetRealDmg126a takes nothing returns real
function GJ_GetRealDmg127a takes nothing returns real
function GJ_SaveLastDmg126a takes nothing returns boolean
function GJ_SaveLastDmg127a takes nothing returns boolean
???
function GetLatestDownloadedString takes nothing returns string
function GetCurrentMapDir takes nothing returns string
Определяет прогресс загрузки,и ее статус (не понял что-то??)
function GetDownloadProgress takes nothing returns integer
function GetDownloadStatus takes nothing returns integer
???
function SaveNewMapFromUrl takes string url, string mapname returns nothing
function SendGetRequest takes integer WebSiteAddr, integer GetPath returns nothing
function SendHttpGetRequest takes string WebSiteAddr, string GetPath returns nothing
function TestSendHttpGetRequest takes nothing returns nothing
function StartDownloadNewDotaVersion takes nothing returns nothing
function WaitForGetDotaVersion takes nothing returns nothing
function WaitForDownloadServerStatus takes nothing returns nothing
function DownloadNewDotaVersion takes nothing returns nothing
function LockOrder takes integer id, boolean IsNeedLock returns nothing
блокировка приказа ( там много функции???)
function LockOrder1 takes nothing returns nothing
function LockOrder2 takes nothing returns nothing
function LockOrder3 takes nothing returns nothing
function LockOrder4 takes nothing returns nothing
function LockOrder5 takes nothing returns nothing
function LockOrder6 takes nothing returns nothing
function LockOrder7 takes nothing returns nothing
function LockOrder8 takes nothing returns nothing
function UnLockOrder1 takes nothing returns nothing
function UnLockOrder2 takes nothing returns nothing
function UnLockOrder3 takes nothing returns nothing
function UnLockOrder4 takes nothing returns nothing
function UnLockOrder5 takes nothing returns nothing
function UnLockOrder6 takes nothing returns nothing
function UnLockOrder7 takes nothing returns nothing
function UnLockOrder8 takes nothing returns nothing
function TestBlockOrders takes nothing returns nothing
???
function StartAbilityCD takes integer pAbility, real cd returns nothing
ХП бары и мана-бары (цвет, размер)
function SetHPCustomHPBarUnit takes integer PlayerID, integer UnitID, integer Color, real ScaleX, real ScaleY returns nothing
function SetHPBarColorForPlayer takes   integer PlayerID, integer HeroColor, integer UnitColor, integer TowerColor returns nothing
function SetMPBarXScaleForPlayer takes   integer PlayerID, real HeroXscale, real UnitXscale, real TowerXscale returns nothing
function SetMPBarYScaleForPlayer takes  integer PlayerID, real HeroYscale, real UnitYscale, real TowerYscale returns nothing
function SetMPBarYOffsetForPlayer takes  integer PlayerID, real HeroYscale, real UnitYscale, real TowerYscale returns nothing
function SetHPBarXScaleForPlayer takes   integer PlayerID, real HeroXscale, real UnitXscale, real TowerXscale returns nothing
function SetHPBarYScaleForPlayer takes  integer PlayerID, real HeroYscale, real UnitYscale, real TowerYscale returns nothing
Юнит может использовать инвентарь
function UnitCanUseInventoryModify takes unit u, integer mod returns nothing
Вычислить урон юнита
function GetUnitAttackDamage takes unit u returns real
Вычислить/установить текущий MSper32 (что такое MSper32?)
integer convertedHandle=хэндл неизвестно чего???
function SetUnitCurrentMSper32 takes integer convertedHandle, real r returns nothing
function SetUnitCurrentMSper32Address takes integer convertedHandle, integer address, real r returns nothing
function GetUnitCurrentMSper32Address takes integer convertedHandle returns integer
function GetUnitCurrentMSper32 takes integer convertedHandle returns real
Вычисляем координаты способности (х,у). Есть же GetSpellTargetX() или GetSpellTargetY() в чем разница??
function GetSpellTargetYReal takes nothing returns real
function GetSpellTargetXReal takes nothing returns real
Юнит имеет модификатор видимости определенного типа? что это? почему возвращает реальное число? сколько типов существует в варе? и на что влияет число? это типа как прозрачность что ль?
function GetUnitIllusionModifier takes unit u, integer modifiertype returns real
???
function ModifyUnitsPassiveDisabledCounter takes unit u, integer mod returns nothing
???
function NullifyCurrentAttack takes unit u returns string
??? (почему везде возвращает булеан, значит ли что это не условие??)
function AddExtraAttack takes unit u returns boolean
Установить/вычислить параметры горячей кнопки способности. Только что обозначают эти аргументы неизвестно, ведь горячая клавиша - буква, а здесь в аргументах берется число.
function SetAbilityHotkeyParam takes integer id, integer off, integer newVal returns boolean
function GetAbilityHotkeyParam takes integer id, integer off returns integer
Установить/вычислить целочисленные параметры способности
""
function SetAbilityIntegerParam takes integer id, integer off, integer newVal returns boolean
function GetAbilityIntegerParam takes integer id, integer off returns integer
Установить/вычислить реальные параметры способности
function SetAbilityRealParam takes integer id, integer off, real newVal returns boolean
function GetAbilityRealParam takes integer id, integer off returns real
установить/вычислить логические параметры (да-нет, есть галочка-нет галочки)
function SetAbilityBoolParam takes integer id, integer off, boolean newVal returns boolean
function GetAbilityBoolParam takes integer id, integer off returns boolean
Установить горячей кнопке изучения способности
function SetAbilityResearchHotkeyId takes integer id, integer newVal returns boolean
Установить горячей выключенной кнопке способности
function SetAbilityUnHotkeyId takes integer id, integer newVal returns boolean
установить горячей кнопке способности
"" 
function SetAbilityHotkeyId takes integer id, integer newVal returns boolean
установить горячую кнопку common???
function SetAbilityHotkeyCommon takes integer id, integer newVal returns boolean
установить SpellDetails??? SpellDetails - что такое?
function SetAbilitySpellDetails takes integer id, integer det returns boolean
установить скорость движения снаряда у способности
function SetAbilityMissileSpeed takes integer id, real speed returns boolean
установить Координаты кнопки изучения способности
function SetAbilityResearchButtonY takes integer id, integer newY returns boolean
function SetAbilityResearchButtonX takes integer id, integer newX returns boolean
Установить координаты выключенной кнопки способности
function SetAbilityUnButtonY takes integer id, integer newY returns boolean
function SetAbilityUnButtonX takes integer id, integer newX returns boolean
Установить координаты кнопки способности
function SetAbilityButtonY takes integer id, integer newY returns boolean
function SetAbilityButtonX takes integer id, integer newX returns boolean
Включить автоматическое автонаведение анимации способности
function SetAbilityMissileHoming takes integer id, boolean homing returns boolean
Установить траекторию ракеты (снаряда)
function SetAbilityMissileArc takes integer id, real arc returns boolean
Вычислить скорость движение снаряда
function GetAbilityMissileSpeed takes integer id returns real
Вычислить траекторию ракеты (снаряда)
function GetAbilityMissileArc takes integer id returns real
Вычислить горячую кнопку изучения способности
function GetAbilityResearchHotkeyId takes integer id returns integer
вычислить горячую кнопку выключенной способности
function GetAbilityUnHotkeyId takes integer id returns integer
вычислить горячую клавишу способности
function GetAbilityHotkeyId takes integer id returns integer
вычислить SpellDetails - что это такое?
function GetAbilitySpellDetails takes integer id returns integer
Координаты кнопки изучения способности
function GetAbilityResearchButtonY takes integer id returns integer
function GetAbilityResearchButtonX takes integer id returns integer
Координаты неактивной выключенной кнопки
function GetAbilityUnButtonY takes integer id returns integer
function GetAbilityUnButtonX takes integer id returns integer
Координаты кнопки способности
function GetAbilityButtonY takes integer id returns integer
function GetAbilityButtonX takes integer id returns integer
Включено ли автоматическое наведение способности (анимация снаряда)
function IsAbilityMissileHoming takes integer id returns boolean
вычислить/установить строковые текстовые описания способности
function GetAbilityStringParam takes integer id, integer off returns string
function SetAbilityStringParam takes integer id, integer off, string newVal returns boolean
вычислить/установить строковые текстовые описания способности на каждом левел
function GetAbilityStringParam2 takes integer id, integer off, integer lvl returns string
function SetAbilityStringParam2 takes integer id, integer off, string newVal, integer lvl returns boolean
вычислить/установить звуковые эффекты способности
""
function GetAbilityGlobalSound takes integer id returns string
function SetAbilityGlobalSound takes integer id, string s returns boolean
Установить огромный текст в способности
function SetAbilityGlobalMessage takes integer id, string s returns boolean
установить/вычислить описание способности
function SetAbilityUbertip takes integer id, integer lvl, string s returns boolean
function GetAbilityUbertip takes integer id, integer lvl returns string
Вычислить скорость снаряда атаки юнита (анимация)
function GetUnitMissileSpeed takes integer id, integer index returns real
Установить анимацию атаки юнита (эффект атаки - снаряды)
function SetUnitMissileArt takes unit u, string path returns nothing
Вычислить адрес пинг (мигающий восклицательный знак на мини-карте!!)
function GetPingAddress takes nothing returns integer
Вычислить координаты пинг
function GetPingX takes integer id returns real
function GetPingY takes integer id returns real
function GetPingZ takes integer id returns real
Установить координаты пинг
function SetPingX takes integer id, real x returns nothing
function SetPingY takes integer id, real y returns nothing
function SetPingZ takes integer id, real z returns nothing
вычислить кол-во пинг на мини-карте
function GetPingCount takes nothing returns integer
function SetPingCount takes integer i returns nothing
???
function GetNextPingFillID takes nothing returns integer
function SetNextPingFillID takes integer i returns nothing
???
function GetNextPingID takes nothing returns integer
function SetNextPingID takes integer i returns nothing
???
function TestPingsTest takes nothing returns nothing
function GetLightningAddressByID takes integer id returns integer
установить/вычислить размер лимита зоны, области (короче ???)
function GetGameAreaSizeLimit takes nothing returns real
function SetGameAreaSizeLimit takes real r returns nothing
???
function TestRemoveGameAreaLimit takes nothing returns nothing
???
function SetWidescreenFixState takes boolean WidescreenState returns nothing
???
function SetCustomFovFix takes real CustomFOV_X returns nothing
function TestWideScreen takes nothing returns nothing
function GetAgileTimersData takes nothing returns integer
function GetTimerList takes nothing returns integer
function GetTimerCount takes nothing returns integer
function TestPrintAllTimers takes nothing returns nothing
function GetFogStateAddr takes nothing returns integer
function UpdateFogManual takes nothing returns nothing
function BlockRealFogUpdate takes boolean block returns nothing
function GetChatEnv takes nothing returns integer
function GetChatMessagesList takes nothing returns integer
function SetChatEmptyMessage takes nothing returns nothing
function SetChatMessageXbyID takes integer MsgID, real x returns nothing
function SetChatMessageYbyID takes integer MsgID, real x returns nothing
function GetChatMessageAddressByID takes integer MsgID returns integer
function SearchStringValueAddress takes string str returns integer
function SearchStringValue takes string str returns string
function ReplaceStringValue takes string str, integer newstraddress, integer sizeof_realstr returns nothing
function ReplaceStringValueUNSAFE takes string str, integer newstraddress returns nothing
Симуляция атаки
function SimulateAttackInstance takes unit u, unit target returns nothing
Вычислить реальное игровое время
function GetRealGameTime takes nothing returns integer
вычислить приказ игрока, отданный юнитом
function GetOrderPlayerId takes unit u returns integer
???
function FixAllCyclones takes nothing returns nothing
function DeFixAllCyclones takes nothing returns nothing
function ToggleForcedSubSelection takes boolean b returns nothing
function ToggleBlockKeyAndMouseEmulation takes boolean b returns nothing
function ToggleClickHelper takes boolean b returns nothing
Обновить скорость юнита на 
function UpdateUnitMoveSpeedTo takes unit u, real ms returns nothing
???
function Bool2Int takes boolean b returns integer
Установить стан юниту
function SetStunToUnit takes unit u, boolean add returns nothing
Бросаем сало юниту (он не может произносить заклинания,короче играем в молчанку)
function CommonSilenceApply takes unit u, boolean app returns nothing
выключаем всем юнитам абилки
function DisableAllUnitsAbilities takes unit u, boolean disable returns nothing
добавить сало способности
function AddSilenceToAbility takes integer a returns nothing
удалить сало способности
function RemoveSilenceFromAbility takes integer a returns nothing
установить/определить базовую скорость перемещения 
function SetUnitBaseMovespeed takes unit u, real r returns nothing
function GetUnitBaseMovespeed takes unit u returns real
кастует спел через приказ. Бросить спелл противнику или в точку. В чем разница? раньше тоже мог кастануть через приказ?
"" 
function ThrowTargetSpellTargetUnit takes unit who, integer id, widget target returns nothing
function ThrowSpellXY takes unit who, integer id, real x, real y returns nothing
кастовать спел в точку, или объект-виджет (в чем же отличие??)
function CastSpellTargetGround takes unit caster, integer id, integer lvl, real x, real y, boolean remove returns nothing
function ThrowTargetSpellTargetUnitSingle takes unit who, integer id, integer lvl, widget target, boolean remove returns nothing
селфи-каст (кастует сам на себя)
function SelfCastSpell takes unit who, integer id, integer lvl returns nothing
Атакован ли юнит
function IsAttackDisabled takes unit u returns boolean
???
function UnstuckWindwalkAbilities takes unit u, integer id returns nothing
function ApplyTerrainFilterDirectly takes string Path, integer addr_of_mem, integer addr_of_size, boolean IsTarga returns nothing
function LoadFileMemAddr takes string FileName returns integer
function TestTerrainFilter takes nothing returns nothing
function SetMainFuncWork takes boolean b returns nothing
function FixModelCollisionSphere takes string Path, real X, real Y, real Z, real Radius returns nothing
function FixModelTexturePath takes string ModelPath, integer TextureID, string NewTexturePath returns nothing
function PatchModel takes string ModelPath, string patchPath returns nothing
Изменить скорость анимации
function ChangeAnimationSpeed takes string ModelPath, string AnimationName, real SpeedUP returns nothing
???
""
function SetSequenceValue takes string ModelPath, string AnimationName, integer Indx, real Value returns nothing
function RedirectFile takes string OriginalFileName, string RedirectFileName returns nothing
function IsStoreIntegerLocked takes nothing returns boolean
function LockStoreInteger takes nothing returns nothing
function UnLockStoreInteger takes nothing returns nothing
function nStoreInteger takes gamecache cache, string missionKey, string key, integer value returns nothing
function GetUnitVisibilityClass takes unit u returns integer
function GetUnitDetectedClass takes unit u returns integer
function Player2Flag takes player p returns integer
function IsUnitVisibleToPlayer takes unit u, player p returns boolean
function IsUnitDetectedByPlayer takes unit u, player p returns boolean
function SetUnitVisibleByPlayer takes unit u, player p, integer c returns nothing
function GetUnitVisibleByPlayerCount takes unit u, player p returns integer
function RecountAnyDetectionForUnit takes unit u returns nothing
function RemoveAnyDetectionFromUnit takes unit u returns nothing
function MofidyUnitVisibleByPlayer takes unit u, player p, integer c returns nothing
function SetUnitDetectedByPlayer takes unit u, player p, integer c returns nothing
function GetUnitDetectedByPlayerCount takes unit u, player p returns integer
function MofidyUnitDetectedByPlayer takes unit u, player p, integer c returns nothing
function SetUnitVisiblePartiallyByPlayer takes unit u, player p, boolean visible returns nothing
function IsUnitVisiblePartiallyByPlayer takes unit u, player p returns boolean
function SetUnitSharedVisionForPlayer takes unit u, player p, boolean shared returns nothing
function IsUnitSharedVisionToPlayer takes unit u, player p returns boolean
""
darkowlom #106 - 2 года назад 1
Steal nerves,
  1. Найди адреса сам и создай недостающие тебе функции
  2. Большинство функций принимают не объект(юнит, игрок и тд.) а хендл объекта - integer
  3. Есть инструмент для редактирования памяти, есть дизассемблер - никто за тебя писать новые функции не будет
quq_CCCP #107 - 2 года назад 0
Какого черта у меня браузер блокирует страницу, сообщая о нежелательном ПО? Уже в гугл просочилось? Представители администрации могут поправить?
ClotPh #108 - 2 года назад (отредактировано ) 0
"Перезарядка/кулдаун способности??? Просто внизу еще функции с кулдаунами присутствуют? Что означает CD? CastDuration (длительность действия)? real cool=время перезарядки
function SetAbilityCD takes integer abil, integer level, real cool returns nothing
function GetAbilityCD takes integer abil, integer level returns real"
GetAbilityCD точно и без проблем возвращает кулдаун способности!!! Это по моей тест-карте видно. Можно, например, сделать кучу интересных абил, когда юнит юзает способность, отхилить его на 2 * её перезарядка и вообще немало зависимостей запилить.
Но вот SetAbilityCD, которая по логике должна менять кулдаун, не делает НИЧЕГО, во всяком случае, у меня. =/
Такие же функции есть и на манакосты, с ними проблем нет - одна функция исправно возвращает, другая исправно меняет (считаются от конкретного лвла конкретной абилы, изменения вешаются тоже на конкретный лвл конкретной абилы).
А вот перезарядки - считаются спокойно, а меняться не хотят. =/ Что считаются-то, это тоже уже хорошо, но...
****
Немного оффтопик, пока просто оставлю это здесь
Идеи для геройских способностей.
Ульт с высокой перезарядкой. Бафф союзника. Когда он в следующий раз применит геройскую способность, мановая стоимость этой способности устанавливается на 0 до конца игры.
Ваша атака заряжается небольшим АоЕ магическим уроном в зависимости от мановой стоимости последней способности, примененной любым героем.
darkowlom #109 - 2 года назад (отредактировано ) 0
quq_CCCP, сижу с хрома -никаих проблем и предупреждений не видел. Может это у тебя что-то?
ClotPh, приложи карту с проблемой в устанвке кд - посмотрю
quq_CCCP #110 - 2 года назад 0
ClotPh, вот держи - кд работает, но почему то фаталит на буране и целительной волне.
прикреплены файлы
ClotPh #111 - 2 года назад 0
У меня пока фаталит на всем =/
P. S. Не знаю, связано или нет - вар 1.26.
Ну ладно, еще покопаюсь пока самостоятельно, наводки получены.
Попробую в носиджасс занести и/или юзнуть др. функцию.
darkowlom,
карта выше
***
*******
local integer pAblil = GetUnitAbilityForAddresss( ConvertHandle(GetTriggerUnit( )), a2 )
Вот все-таки точно есть уверенность, что надо хэндл брать? Потому что ведь манакост-то у меня исправно изменяется и высчитывается и по AbilityId.
И перезарядка высчитывается по AbilityId. Только не меняется! А в твоей карте у меня она по хэндлу и считаться перестала (возвращает 0), там-то зачем было менять?
Ну, короче, оставлю пока в локалках и то, и другое, все равно обнулять не надо, буду снова все функции проверять и через AbilityId, и через хэндл
*********
Кстати, еще интересная информация. У меня не только вар 1.26, но и .dll, расширяющая размер карты по сети до бесконечного. Может, еще и это влияет ;)
Ну зато что у меня будет действовать - скорее всего у всех будет.
quq_CCCP #112 - 2 года назад (отредактировано ) 0
Некоторым нужен хендл, некотороым ид - смотри внимательно что берут функции AbilId или Ability. Особо подробно api никто не рассписывал, если не работает или фаталит пробуй хендл.
Кстати кд при изучении работает, но почему то фаталит на целительной волне и буране, хз почему так, мб у этих способностей несколько иной алгоритм работы, но их всегда можно заменить триггерными аналогами на основе канала, с которым не бывает такого.
Diaboliko #113 - 2 года назад 0
Адрес абилок для конкретного юнита статичен в рамках игровой сессии? Т.е. до выхода
DracoL1ch #114 - 2 года назад 4
реально стальные нервы, все функции перебрать
либа дополняется, но в рамках моей доты, когда будет желание дополнить API - пока неизвестно
НИГДЕ в памяти хендлы не используются, либо адрес, либо айдишник, но никак не хендл. хендл вообще чисто для жасса понятие, в памяти его нет.
адреса абилок конкретного юнита не меняются, если только он не теряет абилку. тогда её место займет другая. в пределах одной игры, разумеется, и адрес юнита никуда не смоется, и т.п.
SetAbilityCD принимает id, как и GetAbilityCD. что там может сломаться - мне не особо ясно, в доте эта функция мне осталась бесполезной
попробую на досуге добавить комментарии, за что функции отвечают
ClotPh #115 - 2 года назад 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
DracoL1ch #116 - 2 года назад 0
на хайве выложил пересказ того. что я знаю/помню о нашем API
darkowlom #117 - 2 года назад 0
DracoL1ch, что-то ты не особо стремишься тут что-то публиковать) Не любишь нас? XD
DracoL1ch #118 - 2 года назад 0
с местным "интерфейсом"-то? не говоря уже о том, что английский есть международный язык
darkowlom #119 - 2 года назад (отредактировано ) 2
DracoL1ch, английский на просторах СНГ знает небольшой процент людей, я например, ничего не в состоянии опубликовать на хайве из-за полного отсутствия грамматики - ее сложность для меня зашкаливает. Чисто как пассивный читатель выступаю, даже уже и данные от акка забыл
А интерфейс дело привычки, новый хайв тоже неудобный)
ClotPh #120 - 2 года назад 0
Семь медных сапогов в мозгах истоптано, ничерта не выяснено.
DracoL1ch, должна в коде выше перезарядка заклинания увеличиваться и если нет, то почему?
Считается она другой функцией исправно.
DracoL1ch #121 - 2 года назад 0
У меня работает корректно. В худшем случае изменение кд будет заметно на следующем касте, т.к. кд от текущего мог уже быть в обороте.
ClotPh #122 - 2 года назад 0
Ну т. е. код выше должен работать, проблема на моей стороне. Понятно.
Дело не в заметности, я ведь глазу не верю, специально еще и высчитывание стоит и текстовое сообщение.
Как было К/Д 2 секунды, так и остается. Если уж 2 от 3 глаз бы не отличил мб, то 2 от 4 и тем более дальше - однозначно бы определил.
Но GetAbilityCD как возвращало двойку (что изначально в РО и стояло), так и возвращает каждый раз.
darkowlom #123 - 2 года назад 0
ClotPh, я не знаю что ты там наколдовал, но твоя карта даже не сохраняется
Хотя нет- теперь сохранилась, мой косяк
ClotPh #124 - 2 года назад (отредактировано ) 0
Вот эта, точно? А запускается хоть?
Карта
А, ок
прикреплены файлы
darkowlom #125 - 2 года назад (отредактировано ) 0
ClotPh, нагородил ты косячных конструкций - функция работает
В карте устанавливает кд в 5000
суть понятна - с таким значением лагает индикатор и показывает неверно
прикреплены файлы
ClotPh #126 - 2 года назад 0
Как-то не так пересохраняю.
До пересохранения все работает.
После пересохранения (без изменений) - только эта функция и отрубается.
Экспериментирую со включением/выключением галок в JNGP, пока уже нашелся вариант, при котором при пересохранении вообще карта перестает работать =)
Можно, конечно, реально тупо файл вшивать не через WE, как драколич делает. Но это пока жестковато для меня... Хотя в не столь далеком будущем вполне возможно...
quq_CCCP #127 - 2 года назад 0
Из новостей:
Способности: Буран, Целительная волна имеют нестандартную структуру и их нельзя запустить в кулдаун функцией StartAbilityCooldown.
Ибо им нужно занести кд, функцией SetAbilityCD.
Возможно существуют еще такие способности.
ClotPh #128 - 2 года назад 0
Вообще порно с Еленой Берковой.
Короче, попробовалось сделать так: вынуть из карты darkowlom'а файл war3map.j через mpqeditor и переимпортировать его на его же место. Не знаю, что в итоге произошло, но карта и запустилась снова без проблем, и стала пересохраняться нормально. В процессе галочки JNGP включались/выключались разные, так и не знаю, то повлияло, или это.
Всем спасибо.
*****************
В общем, "для чайников" мой обновленный вариант ниже. Строка кода нормальная была. Просто не работала, теперь точно такая же работает.
Для импорта моего варианта по идее хватает следующего:
  • Иметь последний JNGP
  • Просто скопировать в свою карту кастом код и единственный триггер из моей в папке Return Bug.
В сабже уже протестировано (с подсказками):
  • Изменение белой и зеленой атаки и их подсчет
  • Изменения манакоста способностей и их подсчет (изменения на конкретный лвл конкретной абилы)
  • Изменения перезарядок способностей и их подсчет (изменения на конкретный лвл конкретной абилы)
PS Ятп верно, что отрицательная перезарядка = фатал? После этого геморроя чекать уже ппц неохота.
прикреплены файлы
DracoL1ch #129 - 2 года назад (отредактировано ) 0
зачем тебе вообще может понадобиться отрицательная перезарядка? но нет, отрицательный кд просто сбросит текущий кд, как и 0.
>>Способности: Буран, Целительная волна имеют нестандартную структуру и их нельзя запустить в кулдаун функцией StartAbilityCooldown.
>>Ибо им нужно занести кд, функцией SetAbilityCD.
пофиксил
ClotPh #130 - 2 года назад 0
Еще раз спс. Про перезарядку - просто узнать, не стоит ли беспокоиться при ее уменьшении о проверке, не получится ли меньше 0 фатал.
С такими функциями, кстати, -wtf мод пилится значительно проще и правильнее, ведь, строго говоря, на самом деле (хз как сейчас, раньше в оффдоте было так) попросту при применении любого спелла или способности сбрасывались все перезарядки и обновлялась мана через 0.01 сек., а не "все спеллы не имели перезарядки и мановой стоимости".
При таком подходе тот же антимаг сосет и т. п.
А с таким все просто: при применении любой способности задать ей манакост 0, перезарядку 0. И зшбс. (Это уже ПОЧТИ правильно. В идеале сразу через бд обнулить их у всех способностей, но польза будет незначительная, а геморроя много)
А уж героев-то сколько можно придумать на манакостах и перезарядках абил - не перечесть. Так, будем играться дальше...
quq_CCCP #131 - 2 года назад 1
  function StartAbilityCooldown takes unit whichUnit, integer abilityId, real cd returns boolean
        local integer pAbility = 0
        if whichUnit == null or GetUnitAbilityLevel( whichUnit, abilityId  ) < 1 or cd == 0.00  then
            return false
        endif
        set pAbility = GetUnitAbility(whichUnit, abilityId)
        if pAbility < 1 then
            return false
        else
            if ReadRealMemory(pAbility+0x134)==-1 and ReadRealMemory(pAbility+0x138)==-1 then
                call WriteRealMemory(pAbility+0x134,0)
                call WriteRealMemory(pAbility+0x138,0)
            endif
            set Memory[pReserverdIntArg1 / 4] = SetRealIntoMemory(cd)
            call CallThisCallWith2Args( pStartAbilityCD, pAbility, pReserverdIntArg1 )
            return IsAbilityOnCooldown( pAbility )
        endif
        return false
    endfunction
Вот пофикшенная функция кулдауна, теперь она может запускать в кулдаун буран и цепи молний. (по прежнему фаталит если попытаться запустить в кулдаун пассивку)
Отрец. кулдаун кстати сбрасывает перезарядку.
DracoL1ch #132 - 2 года назад 9
На хайве вшили функционал хака в редактор
ClotPh #133 - 2 года назад 1
Круто, но что-то у меня опять все ошибки начинают с начала вылезать, которые были.

Пока сделан бэкап до своего JNGP + своей тест-карты с кастом кодом + 1 триггером, это уже не сложно импортировать, все там у меня уже точно норм работает и норм пересохраняется.
Но все равно +, т. к. склоняюсь к тому, что это на моей стороне наркомания.
awesomesk1ll #134 - 2 года назад (отредактировано ) 1
Подгруз своих .dll из mpq карты уже сделали для чайников?
п.с. Что мертво - умереть не может.
alexprey #135 - 2 года назад 1
awesomesk1ll, ну смотри, функцию распаковки из mpq я видел, функцию загрузки dll я тоже видел, так что вперед)
ENAleksey #136 - 2 года назад (отредактировано ) 1
awesomesk1ll, да, здесь нет ничего сложного, для начала экспортируем dll из карты, а потом загружаем её с помощью LoadLibraryA. Сейчас скину карту с загрузкой моей библиотеки, в которой реализован Widescreen Fix.

Скачать (поддерживаются версии 1.26a и 1.27а).
Правда, я сделал инициализацию библиотеки с помощью вызова экспортируемой функции из dll, чтобы передать в неё версию варкрафта, но это можно делать и внутри библиотеки: вызывать только LoadLibraryA, а всё остальное делать в теле функции DllMain.
прикреплены файлы
abidin #137 - 2 года назад 0
Возможно ли с помощью хака сделать что-то типо Preloader'а?
quq_CCCP #138 - 2 года назад 0
abidin:
Возможно ли с помощью хака сделать что-то типо Preloader'а?
Возможно и уже реализовано, создавай хоть тхт, хоть exe, хоть dll. Правда их сначала нужно написать... Но тем не менее создавать файлы можно, хотя можно было и раньше, правда не так удобно.
abidin #139 - 2 года назад 0
quq_CCCP, можно уточнить твои контакты , чтобы отдельно поговорить на эту тему?
quq_CCCP #140 - 2 года назад 0
abidin, Нет, я своими контактами не торгую!
Пиши лс.
abidin #141 - 2 года назад 2
Мне не нравится организация связи на XGM.
quq_CCCP #142 - 2 года назад (отредактировано ) 1
Функции для смены уровня баффов:
function GetBuffLevel takes integer pBuff returns integer 
    if pBuff < 1 then
        return 0
    endif
    return Memory[(pBuff+0xb0)/4] + 1
endfunction

function SetBuffLevel takes integer pBuff, integer level returns nothing
     if pBuff < 1 or level < 1 then
        return 
    endif
    set Memory[(pBuff+0xb0)/4] = level -1
endfunction
Меняет уровень баффа, влияет только на визуальный эффект баффа (уровень в описании баффа), уровень будет отображаться только у многоуровневых баффов.
Можно узнать уровень баффа, будет несомненно полезно для триггерных баффов, которые дают ауры.
А вот функци которые задают длительность баффа.
    local integer  pBuff = GetUnitAbility( u, 'B00A' ) + 0x90  

    call WriteRealMemory(ReadRealMemory(pBuff)+0x4,SetRealIntoMemory(текущее время + 15.00)) // задаёт длительность
    call WriteRealMemory(ReadRealMemory(pBuff)+0x8,SetRealIntoMemory(текущее время  + 10.408)) // Задает время после которого бафф начнёт мигать
Жаль что нормально выудить игровое время не получается, поэтому юзаем таймер который мы запускаем при старте карты на 99999999999.00 сек., и по нему мы будем узнавать текущее время, который кстати будет отставать относительно игрового примерно на 0.408 сек.
Diaboliko #143 - 2 года назад 0
quq_CCCP, а как по дефолту обстоит дело с миганием, не смотрел? Просто зачем менять, если оно и по дефолту адекватное :>
quq_CCCP #144 - 2 года назад 0
Diaboliko:
quq_CCCP, а как по дефолту обстоит дело с миганием, не смотрел? Просто зачем менять, если оно и по дефолту адекватное :>
У ауры как ты сделаешь мигание? Речь о баффах аур, а не тогоч то и так работает....
По дефолту мигает если длительность больше 10 и осталось до конца меньше 10.
DracoL1ch #145 - 2 года назад 0
ты задаешь не время мигания, а длительность бафа (псевдо). если она больше константы, которая по-умолчанию 10, то если до окончания действия меньше 10 секунд, баф начнет мигать. разные вещи как бы
quq_CCCP #146 - 2 года назад 0
DracoL1ch:
ты задаешь не время мигания, а длительность бафа (псевдо). если она больше константы, которая по-умолчанию 10, то если до окончания действия меньше 10 секунд, баф начнет мигать. разные вещи как бы
Спецом проверил, если не задавать время - мигать бафф ауры не будет, так что время мигания.
Tumart #147 - 2 года назад (отредактировано ) 0
А что насчет тулов векса? После прогона мапы с использованием сжатия имен варик ее больше не воспринимает. Поковырялся в коде скорее все это из-за: 1. Удаляет функции типа
function Test takes nothing returns nothing
local integer l__test
endfunction
  1. Также переносит строку после кавычек " где должно быть "\n" "\r" возможно где-то еще есть ошибки.
Можно ли что-то с этим сделать?
И еще один вопрос: Для наличия таких функций как отлов событий мыши(нажатие/отпускание кнопок), скрытие стандартного интерфейса необходимо запускать отдельный пакет или это можно как то сделать при помощи РБ?
И есть ли где то информация по списку функций из WarcraftMemHackHelper.dll
quq_CCCP #148 - 2 года назад 0
Ау, там низя переименовывать stand
а как не удалять функции и переменные я выкладывал
достаточно их вызвать с помощью таймера который никогда не истечёт.
Tumart #149 - 2 года назад 0
quq_CCCP, спасибо помогло :). По поводу остальных вопросов можешь что-то сказать?
quq_CCCP #150 - 2 года назад 0
Там через ретурн баг все, хз функции мыши есть в списке на гитхабе или хайве. Создавать и подгружать свои библиотеки тоже можно, недавно выкладывали пример, сам это не юзаел ничего сказать не могу...
А что ты делаешь?
Tumart #151 - 2 года назад (отредактировано ) 0
quq_CCCP, мне надо как то отлавливать нажатие мыши чтобы совместить это с данной наработкой xgm.guru/p/wc3/4266 если не получится все это сделать через рб
Функции по отлову координат курсора я нашел вот про кнопки и интерфейс чет не заметил мож и есть буду искать
Drynwhyl #152 - 2 года назад 0
Tumart, есть функция IsKeyPressed. Меня больше интересует расположения адреса текущего разрешения окна, т.к. без этого не получится что либо делать с мышью.
Tumart #153 - 2 года назад 0
Drynwhyl, ага спасибо уже нашел )
darkowlom #154 - 2 года назад 0
Drynwhyl, вызывайте функции из вин апи, пишите свою длл или берите в руки дизассемблер и вызывайте те функции которые использует сам варкрафт
quq_CCCP #155 - 2 года назад 0
darkowlom, Легче сказать чем сделать, работа со сторонними либами и вирусописание это уже куда сложнее копипаста, не говоря что то просто не шарит в c++ и так далее.
darkowlom #156 - 2 года назад 0
quq_CCCP, я конкретно это реализовывал - сложного ничего нет. Да и виросуописание тут ни причем, не путай термины
DracoL1ch #157 - 2 года назад 4
не нужно знать асм или си, чтобы искать данные, достаточно иметь мозг, заточенный под программирвание на хоть каком-то языке, а там по аналогии
Bornikkeny #158 - 2 года назад 0
Можно узнать? Что не так с этой функцией SetUnitModelUF?
DracoL1ch #159 - 2 года назад 0
всё с ней так, менять модель надо до спавна, или найти функцию перерисовки. я второе не осилил
darkowlom #160 - 2 года назад (отредактировано ) 0
DracoL1ch, не натыкался на функцию, которая отвечает за положение портрета на интерфейсе? Край не хватает для широкофрматного фикса
DracoL1ch #161 - 2 года назад 0
не интересуюсь подобным
Bornikkeny #162 - 2 года назад 0
DracoL1ch:
всё с ней так, менять модель надо до спавна, или найти функцию перерисовки. я второе не осилил
Спасибо.
Steal nerves #163 - 2 года назад 0
quq_CCCP, А вот функции которые задают длительность баффа.
    local integer  pBuff = GetUnitAbility( u, 'B00A' ) + 0x90  

    call WriteRealMemory(ReadRealMemory(pBuff)+0x4,SetRealIntoMemory(текущее время + 15.00)) // задаёт длительность
    call WriteRealMemory(ReadRealMemory(pBuff)+0x8,SetRealIntoMemory(текущее время  + 10.408)) // Задает время после которого бафф начнёт мигать
Жаль что нормально выудить игровое время не получается, поэтому юзаем таймер который мы запускаем при старте карты на 99999999999.00 сек., и по нему мы будем узнавать текущее время, который кстати будет отставать относительно игрового примерно на 0.408 сек.
После 20-минутного копипаста, сохранил карту. Запустил карту, но как только произошел тот момент, когда должен код работать, у меня фаталит =((. Пример, божественный щит
прикреплены файлы
DracoL1ch #164 - 2 года назад 1
во всех местах Read* проверяй. что возвращается, в первую очередь. адрес должен быть >0 строго.
и вроде бы common knowledge что spell-effect срабатывает до эффекта, и бафа там еще нет. поэтому у тебя Read возвращает 0, а ты ничего даже не проверяешь, вернуло ли оно корректный адрес, а сразу идешь писать что-то в память
Steal nerves #165 - 2 года назад (отредактировано ) 0
DracoL1ch, я просто не шарю в этом =(( кода много просто. это надо проверять больше 0, а чем так варику не нравятся нули. И еще вопрос что такое вот 0x90, умножают на нули
quq_CCCP #166 - 2 года назад 1
Ну главное чтоб бафф был, я добавлял бафф аурой, затем удалял ауру и работал с бафом, который висел в статусе.
darkowlom #167 - 2 года назад (отредактировано ) 0
Steal nerves, 0 значит что бафа не существует вообще, попытки изменить несуществующее = фатал. Грубо говоря.
ClotPh #168 - 2 года назад 0
Шмоточка, сделанная с помощью мемхака
Скипетр Вдохновения 1150 голды
+250 максимальной маны
Каждое применение не-предметной способности навсегда снижает её перезарядку на 0.1 сек., но не может опустить перезарядку любой абилы ниже 1 секунды.
Не суммируется.
На первый взгляд, что-то непонятное.
На второй и после тестовых игр (допустим, что в доте) мега имба - ну любой спелл с кулдауном хотя бы не более 7-8 сек. довольно быстро становится с кулдауном 1 сек., ну а стан, например, с длительностью 2 сек. и перезарядкой 1 сек. - ноу комментс?
На третий взгляд - имба, но ппц интересная. Во-первых, заставляет сильнее ценить манаберны, бкб и сала врагам и манавосстановления собравшим ее, т. к. на пермостан спеллом мана из заднего места не высирается. Во-вторых, это все-таки шмотка, т. е. доступна всем. В-третьих, все герои могут после определенных усилий и времени стать подобными разожранному тинкеру, а это хотя частично отрубает уникальность тинкера, но открывает безумное количество разнообразных сочетаний. Крч, как-то еще продумать, пережить можно, хотя шмотка топчик на 70% героев, введи в таком виде в доте - планета бы задрожала и много бы слов интересных раздавалось.
Была идея снижать не на 0.1 сек., а на 1% от текущей перезарядки, но тогда в глубоком (хотя ОЧЕНЬ глубоком) лейте у всех и ульты будут 1 сек., а это уже страшно подумать даже с учетом всирания маны на ульты (сейчас такое практически недостижимо).
Все остальное - усложнения формулировок.
Tumart #169 - 2 года назад (отредактировано ) 0
При снятии ограничения на лимит операций гарена ругается на хак и кикает хоста проверялось на 1,26а. Это можно как-то решить?
quq_CCCP #170 - 2 года назад 0
Tumart:
При снятии ограничения на лимит операций гарена ругается на хак и кикает хоста проверялось на 1,26а. Это можно как-то решить?
Не снимать лимит операций.
Tumart #171 - 2 года назад 0
quq_CCCP, очень умно. Я не спрашивал про очевидные вещи.
quq_CCCP #172 - 2 года назад 0
Ну а что ты хотел? Если гарена тупо проверяет целостность памяти.
DracoL1ch #173 - 2 года назад 0
гарена мертва. не знаю, кто куда пойдет, когда она окончательно умрет, но мой выбор за ргц
Tumart #174 - 2 года назад 2
DracoL1ch, спасибо за хак! Классная вещь :)
ClotPh #175 - 2 года назад (отредактировано ) 0
"]При снятии ограничения на лимит операций гарена ругается на хак и кикает хоста"
Для чайников, плз: использование хака в принципе приводит к такому результату или каких-то определенных функций?
Tumart #176 - 2 года назад 0
ClotPh, скорее всего только одна функция DisableOPLimit, но это не страшно можно делать как всегда делали.
DracoL1ch #177 - 2 года назад 0
любая функция, использующая нативки, вынесенные вперед, модифицирует память безвозвратно. ну и естественно любые записи по адресам, которые вынесены в список предустановленных, тк это gamedll-адреса.
abidin #178 - 2 года назад (отредактировано ) 0
После запуска функции из DLL вылетает ошибка
прикреплены файлы
DracoL1ch #179 - 2 года назад 0
хз что ты там накодил, но явно возврат не сделан
abidin #180 - 2 года назад 0
DracoL1ch:
хз что ты там накодил, но явно возврат не сделан
Да,там не было возврата.
Новая проблема:
Моя библиотека на моём компе запускается нормально,а на других фаталит.
Как нужно её собрать,чтобы не фаталило на компах других людей.
Alexander12 #181 - 2 года назад 0
function GetUnitBaseSpeedAttack takes unit u returns real
return cleanReal(indexToReal(Memory[GetUnitAttackAbility(u)/4 + 0x158/4 ]))
endfunction
function SetUnitBaseSpeedAttack takes unit u, real r returns nothing
set Memory[GetUnitAttackAbility(u)/4 + 0x158/4 ] = cleanInt(realToIndex(r))
endfunction
Есть такая функция ? Нашел почти все базовые функции, для модифицирование атаки, если кому надо, могу скинуть в личку.
l_Avenger_l #182 - 2 года назад 0
подскажите какая фунция запускает абилку в кд?
а все нашел:)
ELB359 #183 - 2 года назад 0
Что-то до меня не очень доходит, как этот хак использовать, точнее импортировать в карту.
quq_CCCP #184 - 2 года назад 0
ELB359:
Что-то до меня не очень доходит, как этот хак использовать, точнее импортировать в карту.
Прочитать внимательно инструкцию.
l_Avenger_l #185 - 2 года назад 0
фатал когда пытаюсь запустить спелл в кд,как лечится?
и можно ли запустить спелл в кд для конкретного юнита?
или я пытаюсь заюзать нету функцию?, StartAbilityCD
quq_CCCP #186 - 2 года назад (отредактировано ) 0
А какой спел ты в кд запускаешь? Написано же юзать:
 function StartAbilityCooldown takes unit whichUnit, integer abilityId, real cd returns boolean
        local integer pAbility = 0
        if whichUnit == null or GetUnitAbilityLevel( whichUnit, abilityId  ) < 1 or cd == 0.00  then
            return false
        endif
        set pAbility = GetUnitAbility(whichUnit, abilityId)
        if pAbility < 1 then
            return false
        else
            if ReadRealMemory(pAbility+0x134)==-1 and ReadRealMemory(pAbility+0x138)==-1 then
                call WriteRealMemory(pAbility+0x134,0)
                call WriteRealMemory(pAbility+0x138,0)
            endif
            set Memory[pReserverdIntArg1 / 4] = SetRealIntoMemory(cd)
            call CallThisCallWith2Args( pStartAbilityCD, pAbility, pReserverdIntArg1 )
            return IsAbilityOnCooldown( pAbility )
        endif
        return false
    endfunction
Тут защита от неверных аргументов или баганых абликов, пассивки в кд не пускает...
l_Avenger_l #187 - 2 года назад 0
в данном случае скачок,ну пассивки ясное дело.Просто делаю свою систему блок заклинания,принцип работы как у линкен сфер в доте,только по шансам а не по времени
сразу не заметил эту функцию,спасибо
quq_CCCP #188 - 2 года назад 2
Что мешает вешать дефолт руну спелл нигейшина, отследить срабатывания руны негейшина можно по урону в 0.00 ед и наличию баффа нигейшина, а потом запустить таймер на 0.00 сек, если баффа по истечению таймера не будет - спеллнигейшин сработал (блокнул некий спелл).
l_Avenger_l #189 - 2 года назад (отредактировано ) 0
попробую, но я сперва возился со способностью, со временем когда в юнита одновременно кастуют несколько юнитов включая стан замедление, проклятие и тд. но этот юнит не выполнял приказы, т.е. такой же баг как с морфом
с руной думал не парится, потому что думал такой же портак будет, поэтому решил через мемхак
порядок события ведь такой:
Юнит применяет способность
У цели есть способность или же определенные предметы (в условии просматривается наличие предметов у этого юнита и просчет шансов исходя из наличия предметов в инве)
затем я добавлял цели способность нейтрализации и удалял по событию, когда наша цель применяет эту самую способность нейтрализации
l_Avenger_l #190 - 2 года назад 0
Всем привет еще раз, хотел бы узнать. Есть ли возможность отловить событие получение урона дикорациями. И как спрятать хпбар юнита используя мемхак?
Затея, отловить событие когда декорация получает урон, событие такого не нашел, решил делать через дамика. Т.е. катапульта стреляет по местности и наносит урон декорациям, решил поставить дамиков возле этих декораций и отлавливать полученный урон от катапульты.
quq_CCCP #191 - 2 года назад 1
Этого не было реализовано близзардами и придется пилить свою ддлку.
А хп бар юнита скрывается с помощью 2 флагов записанных в структурую юнита:
адресс:5с, значения : 0x8000000 и 0x10000
Функция call SetUnitFlags_2( targ, 0x8000000 ) дает эффект похожий на москитов, юнита совсем низя выделить, низя кастануть таргет спелл, но его будут бить автоатакой враги.
darkowlom #192 - 2 года назад 2
спрятать хпбар юнита
Отрицательный размер выборки
DracoL1ch #193 - 2 года назад 1
самый элементарный способ прятать хп - круг выделения = -5
все остальные, известные мне, включают в себя неуязвимость
ClotPh #194 - 2 года назад 0
Мб невнимательно изучены функции, но, ятп, отлова стоимости предмета в золоте нет?
Пока только БД и/или прочность в РО ставить равной золотостоимости?
Хак, конечно, и без этого классный и полезный, но, ятп, ведь должна быть возможность найти ячейку памяти, которая отвечает и за это? Офк менее важно, чем изменение перезарядок, манакостов, отлов атаки и т. п., но все-таки.
DracoL1ch #195 - 2 года назад 0
на тот момент не было базы итемов, счас есть
ClotPh #196 - 2 года назад 0
Так функция уже есть/реализуема - задать/определить голдкост предмета?
nvc123 #197 - 2 года назад 0
ClotPh, поищи сам
неужели так сложно найти поле у итема в котором хранится голд
DracoL1ch #198 - 2 года назад 0
ну, вообще-то не так просто, ибо офсета на базу итемов я не давал
для 1.26
pItemDataNode=GameDLL+0xAB4BE8
скопируй GetUnitDataDefAddr и там замени адрес базы юнитов на эту переменнубю, и можно пользоваться по аналогии
ClotPh #199 - 2 года назад 0
Простой вопрос по мемхаку.
Есть абила с перезарядкой 40 сек. Заюзалась у какого-то юнита. Её перезарядка дошла до половины, т. е. осталось бы 20 сек. по-нормальному и 20 сек. прошло, и в этот момент с помощью SetAbilityCD перезарядка этой абилы на этом уровне меняется с 40 секунд до 20 секунд. Через сколько секунд именно в этот раз у этого юнита завершится перезарядка этой абилы?
PS Предполагаемые мной варианты ответов:
  1. двадцать
  2. десять (склоняюсь к этому, и именно так было бы лучше и логичнее всего, хотя вообще допускаю все три варианта и все они приемлемы)
  3. ноль
Важно, бо планирую мутить целого героя на замутах с перезарядками.
quq_CCCP #200 - 2 года назад 2
ClotPh:
Простой вопрос по мемхаку.
Есть абила с перезарядкой 40 сек. Заюзалась у какого-то юнита. Её перезарядка дошла до половины, т. е. осталось бы 20 сек. по-нормальному и 20 сек. прошло, и в этот момент с помощью SetAbilityCD перезарядка этой абилы на этом уровне меняется с 40 секунд до 20 секунд. Через сколько секунд именно в этот раз у этого юнита завершится перезарядка этой абилы?
PS Предполагаемые мной варианты ответов:
  1. двадцать
  2. десять (склоняюсь к этому, и именно так было бы лучше и логичнее всего, хотя вообще допускаю все три варианта и все они приемлемы)
  3. ноль
Важно, бо планирую мутить целого героя на замутах с перезарядками.
Сколько было столько и останется, вроде же эта функция меняет перезарядку всех способностей с таким ИД, но ты смотришь на кулдаун индикатор (да то самое затемнение иконки, которое постепенно снимается с иконки - это кулдаун индикатор) который никуда не денется, для кулдаун индикатора юзается отдельная функция которую размусолили выше (StartAbilityCooldown).
Ты либо меняешь кулдаун абилки, т.е её время перезарядки, которое возьмет кулдаун индикатор при её касте, либо сам кулдаун индикатор, одно от другого не зависит и можно менять по своему хотению каждое из них. Снизить кд абилки которая еще не перезарядилась, да пожалуйста - StartAbilityCooldown на нужное тебе число.
ClotPh #201 - 2 года назад (отредактировано ) -5
Понятно, ну т. е. кулдаун считается в момент запуска и потом со сменой времени перезарядки абилы уже пропорционально не меняется
Лучше и логичнее было бы, имхо, чтобы он пропорционально менялся, ну сойдет и так, спасибо, один хрен тут поле непаханое - можно, например, значение перезарядки абилы добавлять/убавлять к атаке и т. п., столько комб и идей, ну а основная идея - ппц повышать врагам перезарядки на время и понемногу постепенно, чтобы они вроде и не под салом были, а сделать НИЧО ПОЧТИ НЕ МОГЛИ ))) Ну и своим снижать, чтобы все раскастовывались как бристлбеки - кто когда говорил, что маги не лейт?
Офк баланс, да, ну тут уже бкб и антимагии всякие должны помогать
PS dota2.ru/forum/threads/psixopompa.1025855
Так, а если так:
Событие - unit приводит способность в действие.
Действия:
  • Запомнить как реалку перезарядку этой способности.
  • Через SetAbilityCD немедленно изменить ей перезарядку на 2 секунды (тогда, ятп, она успеет начать считаться как новое).
  • Через 0.2 секунды вернуть ей то значение перезарядки, которое было, из запомненной реалки.
Тогда перезарядка в этот раз уже пойдет как 2 секунды, но GetAbilityCD будет возвращать 10 (ну уже через те самые 0.2 секунды, когда перезарядка "фактически нормализуется на будущее").
Всё верно? Как понимаю, да.
Просто это можно ультовый бафф на союзника "все ваши способности перезаряжаются 2 секунды вместо действительной перезарядки". Ну или дебафф на врага, только там будет не 2 секунды, а 30 каких-нибудь.
P. S. Какого панциря даже через много дней последовательные сообщения от одного юзера склеиваются? Нелогично, да и правильность их плюсо-минусовой оценки тогда может быть сомнительной, оценивалось-то самое первое.
DracoL1ch #202 - 2 года назад 0
если тебе нужно конкретному юниту конкретную перезарядку поменять, так поменяй её после spell_effect, персонально, по известному навыку, конкретному юниту, зачем огоород с глобальным изменением кд и восстановлением?
типа кастанул - через 0 секунд берется адрес способности и в её кулдаун вписывается нужное значение. всё
DracoL1ch #203 - 2 года назад 0
ребят, я не оказываю поддержку по внедрению хака и тонкостям взаимодействий с другими длл. вся информация для раздумий уже выложена, и от либы нашей есть исходники, если хочется посмотреть
В крайнем случае просто спрашивайте у местных. Моя личка непробиваема один хер
Napoleon #204 - 2 года назад 2
DracoL1ch:
ребят, я не оказываю поддержку по внедрению хака и тонкостям взаимодействий с другими длл. вся информация для раздумий уже выложена, и от либы нашей есть исходники, если хочется посмотреть
В крайнем случае просто спрашивайте у местных. Моя личка непробиваема один хер
А где найти необходимую информацию тогда. Ибо мне посоветовали применить данную вещь, чтобы интегрировать авто-закачку и динамическое обновление.
quq_CCCP #205 - 2 года назад 0
Napoleon, тут и спрашивать.
Что непонятно?
Rhazarian #206 - 2 года назад 0
Работает ли данный хак на недавно вышедшей версии - 1.27b, или только на предыдущих?
ClotPh #207 - 2 года назад 0
Работает на всех, писали уже.
Верно понимаю, что GetMouseX, GetMouseY, GetMouseZ у разных игроков отлавливается по-разному и может вызвать десинк в сетевой при неправильном применении? То есть если я, например, по этим числам выведу координаты точки и использую ее для перемещения или создания объекта или определения направления - десинк, гг?
Скажу спасибо за образец кода, дающий возможность определить координаты мыши только для овнера определенного юнита без десинка в сетевой (ну чтоб там стрелять в направлении мыши, например).
Diaboliko #208 - 2 года назад 0
ClotPh:
Работает на всех, писали уже.
Верно понимаю, что GetMouseX, GetMouseY, GetMouseZ у разных игроков отлавливается по-разному и может вызвать десинк в сетевой при неправильном применении? То есть если я, например, по этим числам выведу координаты точки и использую ее для перемещения или создания объекта или определения направления - десинк, гг?
Скажу спасибо за образец кода, дающий возможность определить координаты мыши только для овнера определенного юнита без десинка в сетевой (ну чтоб там стрелять в направлении мыши, например).
Кажется, кто-то (на ксгм или на хайве) интересовался нашел ли кто где взять разрешение экрана, вероятно это связано с этим. Касательно стрельбы - вроде скорп (ScorpioT1000) в свое время делал наработку по стрельбе от первого лица по нажатию ESC. Там единственная нерешенная проблема была, если не ошибаюсь, с движением камеры по XY. По Z она перемещалась свободно.
alexprey #209 - 2 года назад 0
ClotPh, есть возможность синхронизировать изменение данных юнита на случай таких вызовов. Но точно не могу вспомнить как
DracoL1ch #210 - 2 года назад 2
нет, на 27b работает только чтение, запись недоступна. в дальнейшем, возможно, закроют и запись.
призывайте игроков оставаться на старых патчах или забудьте об этом треде \_('-' )_/
|> Скажу спасибо за образец кода, дающий возможность определить координаты мыши только для овнера определенного юнита без десинка в сетевой (ну чтоб там стрелять в направлении мыши, например).
устанешь синхронизировать (я не знаю ответа) (и не знаю, зачем люди создают фпс на движке ртс)
quq_CCCP #211 - 2 года назад 0
DracoL1ch,
Для них это самый доступный движок. В их картах может быть мини игра с использованием стрельбы от первого лица, которая не является "шурупом" карты...
ledoed #212 - 2 года назад (отредактировано ) 0
ClotPh:
Попробуй применить векторы то есть привязка идёт не конкретным координатам а по направлению
перевести экран в процентный вид от -1 до 1(1==100%) и тд
ClotPh #213 - 2 года назад 0
Тут было очень многобукаф, но все они удалены за ненадобностью.
Короче, если кто поможет сделать из этого кода (вываренного на основе изученной информации) то, что нам выдает в нижние реалки координаты мыши от контроллера юнита - спс.
Потому что сейчас очень сомневаюсь, что все как надо, но дальше котел уже не варит и до НГ конкретно не хочет, другие дела есть важные.
Но также есть и уверенность, что для знающего человека исправить - макс. несколько минут.
globals
gamecache cache = InitGameCache("cache")
endglobals
function SyncReal takes player p, real val returns real
if (GetLocalPlayer() == p) then
call StoreReal(cache, , , val)
endif
call TriggerSyncStart()
if (GetLocalPlayer() == p) then
call SyncStoredReal(cache, , )
endif
call TriggerSyncReady()
return GetStoredReal(cache, , )
endfunction
function MySpell takes nothing returns nothing
local player p = GetOwningPlayer(GetTriggerUnit())
local real XCoord = SyncReal(p, GetMouseX())
local real YCoord = SyncReal(p, GetMouseY())
DracoL1ch #214 - 2 года назад 0
если бы синхронизация работала как полагается, я бы так и сказал. но ни одна из существующих жасс нативок не обеспечивает синхронизацию с достаточной скоростью. для значений типа 0-1 лучший вариант - это выделение юнита, потому что варкрафт его автоматически отправит в сеть и обеспечит хоть как-то актуальную информацию на всех компах. а в случае отправки значений с точкой - совершенно другой коленкор. Проще уж на trackable сделать
quq_CCCP #215 - 2 года назад 0
ClotPh, в твоем коде нету вейта на пару сек, синхроеизация вещь не мгновенная и порой занимает очень много времени, все зависит от пинга.
ClotPh #216 - 2 года назад 0
Там в примере не вейт, а триггерслип по ссылке, хотя суть похожа, да.
Т. е. так?
globals
gamecache cache = InitGameCache("cache")
endglobals
function SyncReal takes player p, real val returns real
if (GetLocalPlayer() == p) then
call StoreReal(cache, , , val)
endif
call TriggerSyncStart()
if (GetLocalPlayer() == p) then
call SyncStoredReal(cache, , )
endif
call TriggerSleepAction(2.)
call TriggerSyncReady()
return GetStoredReal(cache, , )
endfunction
function MySpell takes nothing returns nothing
local player p = GetOwningPlayer(GetTriggerUnit())
local real XCoord = SyncReal(p, GetMouseX())
local real YCoord = SyncReal(p, GetMouseY())
А как в таком случае вообще работает триггерслип? Ведь реалки в функции MySpell объявляются сверху. Если она, например, срабатывает на приведение способности в действие, то, пока синхронизация не пройдет, триг вообще действовать не будет у всех игроков? Т. е. там может задержаться после каста спелла его эффект на 3-4 сек, НО потом будет синхронизация БЕЗ десинка?
16GB #217 - 2 года назад 0
через мемхак можно сделать например рендж юнита, милишником без морфа?
DracoL1ch #218 - 2 года назад 0
атака - это полностью независимый скил, крути что хочешь как хочешь, за редкими исключениями
тип атаки, ренж и другие "простые" параметры входят в число крутящихся
SomnusUltima #219 - 2 года назад -2
качаю ваши выложенные карты где все работать должно, но при сохранении 11 ошибок вылезает. Ниче не меняю.
снимаю вопрос, я идиот. Все заработало
Есть ли функция на проверку нажата ли определенная кнопка в данный момент, а так же проверка зажата ли кнопка мыши в данный момент? какая функция за это отвечает и что скопировать
прикреплены файлы
Drynwhyl #220 - 2 года назад 0
Daniil18, уже отвечали на этот вопрос, функция IsKeyPressed, ей же определяется зажата ли кнопка мыши.
SomnusUltima #221 - 2 года назад -2
Drynwhyl, все сделал, но как саму проверку на конкретную клавишу сделать. Как узнать интегер этой кнопки?
я опять ретард, только спросил тут же нашел выход. Хочу сделать шутанчик с управлениями кнопками, тут надо будет париться с локал плеерами от десинков?
quq_CCCP #222 - 2 года назад 0
Daniil18:
Drynwhyl, все сделал, но как саму проверку на конкретную клавишу сделать. Как узнать интегер этой кнопки?
я опять ретард, только спросил тут же нашел выход. Хочу сделать шутанчик с управлениями кнопками, тут надо будет париться с локал плеерами от десинков?
Увы да, если ты будешь играть не в сингл плеер.
Alexander12 #223 - 2 года назад 0
На 1.27b на запись не работает. Пока есть 2 варианта, mix на 1.27b который бы включал возможность запись в память. 2) убедить сервера, включить это в своем лаучнере. Либо окончательно забить на вк3.
ClotPh #224 - 2 года назад 4
Да если уж варом все еще заниматься, то тут уже надо думать о нем, имхо, не как о варе в целом, а как о заготовке RTS-конструкторе, MUGEN от RTS и/или MOBA-жанра (благо контент продолжает создаваться и в наши дни, можно хоть, к примеру, RTSшку с 30 самыми извращенными расами сделать, было бы желание), из которой можно для себя что угодно пилить, официально игра уже давно по сути не существует.
Если проект обретет популярность, не вижу проблем хоть гигабайтные сборки скачивать (на основе того патча, какого надо), и играть через этот самый проект именно этой варовской сборки; доту 2 качают, не обсираются, уже, по-моему, и в деревнях качаются гигабайты; а если что безынтересно, оно и в виде маленьких карт не нужно.
А на близзов пофиг давно, они с варом ниче уже не сделают существенного, а если сделают, это очень сильно удивит (ну 128 мб сделали... безлим народный до них вышел, опять же, раньше, так что все, вар уже принадлежит народу).
Alexander12 #225 - 2 года назад 0
Лучше предложить модмейкорам, оставаться на 1.26 и игнорировать 1.27+, пока близарды не дадут достаточную замену в новых патчах
Alexander12 #226 - 2 года назад 0
после использования SetAbilityUbertip может выдавать фатал, при очистке памяти.(в новой игре)
ClotPh #227 - 2 года назад 2
Из небольших любопытных наблюдений, мб кому пригодится.
Было сделано простое заклинание, временно снижающее базовую скорость перемещения цели до 0. Т. е. при касте на цель запоминается в реалку, какая была скорость перемещения, ставится 0 (даже -300 ставится, на всякий пожарный), а по истечении срока действия возвращается значение из реалки. Чтобы все работало, в константах еще стоит минимальная скорость боевой единицы 0.
Так вот интересный побочный эффект: если цель, когда на нее кастануть это "Сковывание", уже будет идти в каком-то направлении, то продолжит идти с прежней скоростью. Но вот если остановится хоть на мгновение, например, для атаки или каста, или попытается сменить направление движения - все, встанет вертеться на месте, как миленькая, пока спелл не кончится.
То есть тут значительное отличие от простой "сетки" ;) Не говоря уже о том, что под таким сковыванием можно все блинки юзать, а не только триггерные, и что снижение скорости цели может повлиять на эффекты некоторых заклинаний.
ClotPh #228 - 2 года назад 0
Поправочка-добавочка: скорость не режется ниже 1. В константах минимальная стоит 0, в триггере вообще приказано давать -300, а фактически получается 1 (измерено командой -ms). В остальном инфа справедливая.
quq_CCCP #229 - 2 года назад 0
ClotPh, Не удивительно, в движке встроены собственные проверки корректности скорости перемещения, так что даже мемхаком низя поднять скорость выше 522.
ClotPh #230 - 2 года назад (отредактировано ) 0
Если ломать дальше, то надо сильнее хакать, до этих проверок докапываться :D :D :D
А вообще -300 ставилось, кстати, потому, что хотелось заодно проверить, возможна ли отрицательная скорость перемещения (не пойдет ли юнит задом :D) Не пошел, а жалко, тоже фантазия ппц разыгрывалась, что бы можно было сделать... Хотя это офк и так можно сделать, но триггерно...
quq_CCCP #231 - 2 года назад (отредактировано ) 0
Увы скорость перемещения связана с частотой обновления кадров, тумана войны, видимости юнитов и поэтому там все не так просто.
Насколько помню лич долго бился с той же видимостью, карты путей у юнитов и видимость при большой скорости будут работать некорректно.
DracoL1ch #232 - 2 года назад 0
туман-то я давно умею мемхаком сам обновлять
недавно нашел и лимиты на мс
отрицательную скорость, кстати, не пробовал. но значения выше 550 могут приводить к небольшим затупкам из-за слишком большого шага юнита, вследствие чего ему приходится разворачиваться, чтобы попасть по чекпоинту (карты путей)
не, всё, что 0 или ниже, равно нулю, юнит встает
Vitalik8 #233 - 2 года назад 0
подскажите что делать, при сохранение вылетает 11 ошыбок
Steal nerves #234 - 2 года назад (отредактировано ) 0
Vitalik8, читай в комментариях, что нужно делать.
И скачай jngp + pjass.exe. Если выскакивают ошибки даже с этим. То нужно, как пишут в комментах, еще выключить cJass. Мне помогло это.
И уметь правильно сохраняться (дважды и путь и название карты не дожно содержать кириллицы).
ClotPh #235 - 2 года назад 0
Если кому не впадлу - че там с ренджем атаки? Вроде что-то было, но при попытке поставить и использовать нихрена не делало (при этом дистанция получения приказа у препарируемого юнита на всякий пожарный в РО высокая ставилась).
Просто ну нет сейчас времени все самостоятельно переиспытывать, не сто рук и мозгов. А идеи классные (типа снайперского поля, медленно по чуть-чуть увеличивающего рендж атаки ренджевикам, пока в нем стоишь) подъезжают.
DracoL1ch #236 - 2 года назад 2
ClotPh:
уверен? у меня прекрасно работают все манипуляции с атакой
ClotPh #237 - 2 года назад 0
Хм... странно, действительно работает, ну, значит, в очередной раз личная наркомания...
karaulov #238 - 2 года назад 4
Daniil18:
Drynwhyl, все сделал, но как саму проверку на конкретную клавишу сделать. Как узнать интегер этой кнопки?
я опять ретард, только спросил тут же нашел выход. Хочу сделать шутанчик с управлениями кнопками, тут надо будет париться с локал плеерами от десинков?
Я добавлял полноценную поддержку собственных пакетов, с примером управления WASD, там используется DLL для регистрации клавиш, а через JASS код прием и отправка любых пакетов включая нажатия клавиш и что угодно вообще. Сейчас появилась возможность отключать ненужные функции из моей DLL через JASS код для использовании в других картах.
Код устаревший на github / hive, там нет обработчика пакетов.
Был реализован в JASS коде прием и отправка пакетов с любыми данными, и обработка входящих пакетов, т.е локально можно вызвать отправку любых данных после чего у всех сработает триггер на прием с этими данными.
В новом коде был пример управления на WASD/CTRL/SPACE.
Но в игре существует ограничение на количество приказов, не знаю как его убрать. Если отправить в секунду где-то 30 пакетов, то игрок отправивший их не сможет ничего делать где-то несколько секунд.
Alexander12 #239 - 2 года назад 0
Но в игре существует ограничение на количество приказов, не знаю как его убрать. Если отправить в секунду где-то 30 пакетов, то игрок отправивший их не сможет ничего делать где-то несколько секунд.
Лимит отрубается у хоста...
в ghost боте это реализуется вроде как
karaulov #240 - 2 года назад (отредактировано ) 0
Нет, даже в локальной игре такой лимит есть.
Это скорее лимит на отправку чем на прием
Dracol1ch не обновлял код на github/hive по этому там нет кода на отправку и прием своих пакетов, может он обновит незнаю)
quq_CCCP #241 - 2 года назад 0
Alexander12:
Но в игре существует ограничение на количество приказов, не знаю как его убрать. Если отправить в секунду где-то 30 пакетов, то игрок отправивший их не сможет ничего делать где-то несколько секунд.
Лимит отрубается у хоста...
в ghost боте это реализуется вроде как
У хост игра почти что своя игра, для эмитации игрока и прочего, ему и game.dll ненужен, правда все зависит от самого бота и того кто его писал.
ClotPh #242 - 2 года назад (отредактировано ) 0
Есть герой Психопомпа.
Из-за его способностей происходит следующее:
  • Каждый раз, когда любой герой кастует любой спелл и его перезарядка больше 1, перезарядка первой абилы Психопомпы приравнивается к перезарядке этой скастованной абилы, а манакост - к перезарядке этой абилы, умноженной x3/x4/x5/x6/x7 по лвлу прокачки.
  • Каждый раз, когда любой герой кастует любой спелл не-предмета и его перезарядка больше 1, Психомомпа ресает ману в 4 * перезарядка скастованной способности * уровень этой своей способности.
  • Каждый раз, когда любой герой кастует любой спелл не-предмета и его перезарядка больше 1, Психомомпа ресает здоровье в перезарядка скастованной способности * уровень этой своей способности.
Иногда (НЕ после каждой игры, но иногда) по выходу из вара происходит фатал.
Есть предположения о причинах? Или это само по себе потому, что постоянно передрачивается перезарядка способности и ее манакост?
КСТАТИ. У абилы не 10 лвлов, а 5, это "предусмотрительный" ифзенэлс из другого триггера. Так что loop каждый раз пытается вписать по 5 манакостов и перезарядок в первом триггере на несуществующие уровни абилы. Мб в этом причина??? Но почему тогда фатал иногда есть, а иногда не? Ну это я в люб. случае исправлю потом, главное, не забыть.
Коды ниже (триги, вызывающие эти функции, реагируют на каст любой абилы любым героем)
function MadBreathParametersChange takes nothing returns nothing
local integer i = 11
local real newcd = GetAbilityCD(GetSpellAbilityId(), GetUnitAbilityLevelSwapped(GetSpellAbilityId(), GetTriggerUnit()))
if (GetAbilityCD(GetSpellAbilityId(), GetUnitAbilityLevelSwapped(GetSpellAbilityId(), GetTriggerUnit())) >= 1) then
ЗАДАЕМ ПЕРЕЗАРЯДКУ И МАНАКОСТ БЕЗУМНОГО ДЫХАНИЯ, УРОН УЖЕ ОТ НИХ ПОТОМ
loop
exitwhen i < 1
set i = i-1
call SetAbilityCD ('A27Q', i, newcd)
call SetAbilityManaCost('A27Q',i,R2I(GetAbilityCD('A27Q',i) * (2 + i)))
endloop
ЗАДАЕМ ПЕРЕЗАРЯДКУ И МАНАКОСТ БЕЗУМНОГО ДЫХАНИЯ, УРОН УЖЕ ОТ НИХ ПОТОМ - ЗАКРЫТО.
else
endif
endfunction
function DelicacyEffect takes nothing returns nothing
ВНИМАНИЕ!!! ОБНУЛЯЕМЫЕ ПЕРЕМЕННЫЕ ЗДЕСЬ СПИСКОМ - НОВЫЙ ШАБЛОН СОВЕРШЕНСТВА, ВСЕ ТЕСТКАРТЫ БЕЗ ОНОГО БУДУТ УДАЛЕНЫ: u5, herounits
local unit u5
local group herounits = GetUnitsInRectAll(GetPlayableMapRect())
ВНИМАНИЕ!!! ОБНУЛЯЕМЫЕ ПЕРЕМЕННЫЕ ЗДЕСЬ СПИСКОМ - НОВЫЙ ШАБЛОН СОВЕРШЕНСТВА, ВСЕ ТЕСТКАРТЫ БЕЗ ОНОГО БУДУТ УДАЛЕНЫ - ЗАКРЫТО
if ( GetUnitAbilityLevelSwapped(GetSpellAbilityId(), GetTriggerUnit()) >= 1 ) and (GetAbilityCD(GetSpellAbilityId(), GetUnitAbilityLevelSwapped(GetSpellAbilityId(), GetTriggerUnit())) >= 1) then
ИЩЕМ СРЕДИ ГЕРОЕВ ТЕХ, У КОГО ЕСТЬ ПАССИВКА И ДОБАВЛЯЕМ МАНУ
loop
set u5=FirstOfGroup(herounits)
exitwhen u5==null
call GroupRemoveUnit(herounits,u5)
if ( GetUnitAbilityLevelSwapped('A27S', u5) >= 1 ) then
call SetUnitState(u5, UNIT_STATE_MANA, GetUnitState(u5, UNIT_STATE_MANA) + 4 * GetUnitAbilityLevelSwapped('A27S',u5))
else
endif
endloop
ИЩЕМ СРЕДИ ГЕРОЕВ ТЕХ, У КОГО ЕСТЬ ПАССИВКА И ДОБАВЛЯЕМ МАНУ - ЗАКРЫТО.
else
endif
call DestroyGroup (herounits)
ВНИМАНИЕ!!! ОБНУЛЯЕМЫЕ ПЕРЕМЕННЫЕ ЗДЕСЬ СПИСКОМ - НОВЫЙ ШАБЛОН СОВЕРШЕНСТВА, ВСЕ ТЕСТКАРТЫ БЕЗ ОНОГО БУДУТ УДАЛЕНЫ: u5, herounits
set u5 = null
set herounits = null
ВНИМАНИЕ!!! ОБНУЛЯЕМЫЕ ПЕРЕМЕННЫЕ ЗДЕСЬ СПИСКОМ - НОВЫЙ ШАБЛОН СОВЕРШЕНСТВА, ВСЕ ТЕСТКАРТЫ БЕЗ ОНОГО БУДУТ УДАЛЕНЫ - ЗАКРЫТО
endfunction
function PerceptionEffect takes nothing returns nothing
ВНИМАНИЕ!!! ОБНУЛЯЕМЫЕ ПЕРЕМЕННЫЕ ЗДЕСЬ СПИСКОМ - НОВЫЙ ШАБЛОН СОВЕРШЕНСТВА, ВСЕ ТЕСТКАРТЫ БЕЗ ОНОГО БУДУТ УДАЛЕНЫ: u5, herounits
local unit u5
local group herounits = GetUnitsInRectAll(GetPlayableMapRect())
ВНИМАНИЕ!!! ОБНУЛЯЕМЫЕ ПЕРЕМЕННЫЕ ЗДЕСЬ СПИСКОМ - НОВЫЙ ШАБЛОН СОВЕРШЕНСТВА, ВСЕ ТЕСТКАРТЫ БЕЗ ОНОГО БУДУТ УДАЛЕНЫ - ЗАКРЫТО
if ( GetUnitAbilityLevelSwapped(GetSpellAbilityId(), GetTriggerUnit()) >= 1 ) and (GetAbilityCD(GetSpellAbilityId(), GetUnitAbilityLevelSwapped(GetSpellAbilityId(), GetTriggerUnit())) >= 1) then
ИЩЕМ СРЕДИ ГЕРОЕВ ТЕХ, У КОГО ЕСТЬ ПАССИВКА И ДОБАВЛЯЕМ ЗДОРОВЬЕ
loop
set u5=FirstOfGroup(herounits)
exitwhen u5==null
call GroupRemoveUnit(herounits,u5)
if ( GetUnitAbilityLevelSwapped('A27T', u5) >= 1 ) then
call AddSpecialEffectTargetUnitBJ( "overhead", u5, "Psychopomp4.mdl" )
call ConditionalTriggerExecute( gg_trg_destroyspeceffect )
call SetUnitState(u5, UNIT_STATE_LIFE, GetUnitState(u5, UNIT_STATE_LIFE) + GetAbilityCD(GetSpellAbilityId(), GetUnitAbilityLevelSwapped(GetSpellAbilityId(), GetTriggerUnit())) * GetUnitAbilityLevelSwapped('A27T',u5))
else
endif
endloop
ИЩЕМ СРЕДИ ГЕРОЕВ ТЕХ, У КОГО ЕСТЬ ПАССИВКА И ДОБАВЛЯЕМ ЗДОРОВЬЕ - ЗАКРЫТО.
else
endif
call DestroyGroup (herounits)
ВНИМАНИЕ!!! ОБНУЛЯЕМЫЕ ПЕРЕМЕННЫЕ ЗДЕСЬ СПИСКОМ - НОВЫЙ ШАБЛОН СОВЕРШЕНСТВА, ВСЕ ТЕСТКАРТЫ БЕЗ ОНОГО БУДУТ УДАЛЕНЫ: u5, herounits
set u5 = null
set herounits = null
ВНИМАНИЕ!!! ОБНУЛЯЕМЫЕ ПЕРЕМЕННЫЕ ЗДЕСЬ СПИСКОМ - НОВЫЙ ШАБЛОН СОВЕРШЕНСТВА, ВСЕ ТЕСТКАРТЫ БЕЗ ОНОГО БУДУТ УДАЛЕНЫ - ЗАКРЫТО
endfunction
quq_CCCP #243 - 2 года назад (отредактировано ) 0
Функция установки видимости модели юнита в тумане войны
function SetAlwaysVisibleFlag takes unit u, boolean flag returns nothing
    local integer a = ConvertHandle( u )
    if a > 0 then
        if flag and not IsFlagBitSet( ReadMemory( a + 0x20 ), 0x10 )  then
            call WriteMemory( a + 0x20, ReadMemory( a + 0x20 ) + 0x10 )
        elseif IsFlagBitSet( ReadMemory( a + 0x20 ), 0x10 ) then
            call WriteMemory( a + 0x20, ReadMemory( a + 0x20 ) - 0x10 )
        endif
    endif
endfunction
При значении true модель юнита будет видна в тумане войны всегда, при false только если он будет обнаружен.
Не дает возможность выделить юнита, навести целевой навык и тому подобное.
Анимации юнита видны.
ClotPh #244 - 2 года назад 0
А что там про лимиты на мс, если не секрет? Ломаются глобально для всех или для конкретной единицы? Сразу рабочие функции увидеть реально?
DracoL1ch #245 - 2 года назад 2
и так и так, со своими недостатками каждый. функции нет рабочей, просто копал и знаю
ClotPh #246 - 2 года назад 0
Ну если будут и если не жалко будет, то спасибо скажу за выкладывание их сюда (хотя сейчас не самое важное).
Lenivex #247 - 2 года назад 4
ClotPh просил, выложу тут архив с MemoryHack, который я смог собрать. Если будет нужно, буду обновлять по возможности. Можно писать в лс, что поправить или добавить
Clamp #248 - 2 года назад 0
Позицию курсора отловить возможно?
Ну или как-то эмулировать клик мышкой, тоже сойдёт?
quq_CCCP #249 - 2 года назад (отредактировано ) 0
Clamp:
Позицию курсора отловить возможно?
Ну или как-то эмулировать клик мышкой, тоже сойдёт?
Да, в начале темы было про это, кооринаты мыши ловить можно, но увы для сингла не очень, синхронизация не мгновенная.
ClotPh #250 - 2 года назад (отредактировано ) 0
Можно, но в том, что пока в опенсорсе на гитхабе, только локально, т. е. юзлесс в мультиплеере.
А в сингле-то спокойно, я с помощью GetMouseX и GetMouseY спокойно телепортирую ладдерного ловца духов в тест-карте туда, куда он змеек тыкает при их касте, или можно вообще юнита заставить за курсором скользить, только толку, если для мультиплеера так не сделаешь? Позиция мыши от каждого игрока отловится для него = десинк.
Все-таки мне кажется, что можно сделать
function GetMouseXOfPlayer takes player returns real
Просто самостоятельно мозги трещат, у меня где-то были попытки, чуть ли не в этом треде...
quq_CCCP #251 - 2 года назад 0
ClotPh, нужно пилить быструю синхронизацию данных, но на jass через GameChache скорость синхронизации непредсказуема...
Clamp #252 - 2 года назад 0
Эмм, если это единственное, что, по-вашему, делает отлов мыши бесполезным в мультиплеере, то намекну, что это не проблема =)
Но, если честно, куда больше хочется что-то типа такого иметь возможность делать:
ForceUIKeyBJ(Player(0), "Mouse_1");
ClotPh #253 - 2 года назад 0
Clamp, ну запили function GetMouseXOfPlayer takes player returns real, если не проблема и не жалко
Clamp #254 - 2 года назад 0
если не проблема и не жалко
Как доберусь до этого у себя - запилю.
Алсо, я так понимаю, что через хак узнаются screen-координаты. Это, конечно, здорово для всяких интерфейсов, но что насчёт world-координат?
quq_CCCP #255 - 2 года назад 0
Clamp, клик курсора или что под курсором уже выложили, есть функции..
Clamp #256 - 2 года назад 0
клик курсора или что под курсором уже выложили, есть функции..
В посте не вижу, листать 6 страниц комментов с кусками кода без форматирования - то ещё удовольствие. Не мог бы ты просто скопипастить сюда функцию с адресами актуальными?
quq_CCCP #257 - 2 года назад 0
Clamp, xgm.guru/p/100/183738 - это че под курсором за виджет, а про перемещение было на хайве...
Clamp #258 - 2 года назад 0
quq_CCCP, если только такое работает, то проще трекейблы использовать =/
Но спасибо энивей.
quq_CCCP #259 - 2 года назад 0
Clamp, кстати вот обновленный мемхак а так же новые и обновленные функции:
Пока что все не разобрал и не заставил работать все в куче, нужно будет довырезать мусор и dota only код.
Тестмап с основными либами работает исправно.
прикреплены файлы