В общем это благополучно не работает
Ятп по сабжевой причине вопроса
Есть идеи как сделать чтобы работало?
Кто не понимает, что это - вопрос не для вас
if LoadReal(udg_Hash, GetHandleId(udg_Circle[GetConvertedPlayerId(GetOwningPlayer(u5))]), StringHash("waterbecomeother")) == 1 and IsUnitType(u5, UNIT_TYPE_HERO) == true then
set mainstat = 0
if IsUnitType(u6, UNIT_TYPE_HERO) == true then
set bj_forLoopAIndex=1
set bj_forLoopAIndexEnd=5
loop
exitwhen bj_forLoopAIndex > bj_forLoopAIndexEnd
if GetAbilityMaxLevel(GetHeroAbilityFromList(u6 , GetForLoopIndexA())) == 2 then
if GetAbilityCD(GetHeroAbilityFromList(u6 , GetForLoopIndexA())) >= 1 then
if ( GetHeroAbilityFromList(u6 , GetForLoopIndexA()) != 'A0ID' ) and ( GetHeroAbilityFromList(u6 , GetForLoopIndexA()) != 'A1TD' ) and ( GetHeroAbilityFromList(u6 , GetForLoopIndexA()) != 'A1TG' ) and ( GetHeroAbilityFromList(u6 , GetForLoopIndexA()) != 'A1TF' ) and ( GetHeroAbilityFromList(u6 , GetForLoopIndexA()) != 'A01A' ) and ( GetHeroAbilityFromList(u6 , GetForLoopIndexA()) != 'A0SS' ) and ( GetHeroAbilityFromList(u6 , GetForLoopIndexA()) != 'A1VT' ) and ( GetHeroAbilityFromList(u6 , GetForLoopIndexA()) != 'A1VS' ) and ( GetHeroAbilityFromList(u6 , GetForLoopIndexA()) != 'A11С' ) and ( GetHeroAbilityFromList(u6 , GetForLoopIndexA()) != 'A1H5' ) and ( GetHeroAbilityFromList(u6 , GetForLoopIndexA()) != 'A21Y' ) then
set bj_forLoopBIndex=1
set bj_forLoopBIndexEnd=5
loop
exitwhen bj_forLoopBIndex > bj_forLoopBIndexEnd
if GetAbilityMaxLevel(GetHeroAbilityFromList(u5 , GetForLoopIndexB())) == 2 then
if GetAbilityCD(GetHeroAbilityFromList(u5 , GetForLoopIndexB())) >= 1 then
call SetPlayerAbilityAvailableBJ(false, GetHeroAbilityFromList(u5 , GetForLoopIndexB()), GetOwningPlayer(u5))
call SetHeroAbilityFromList(u5 , GetForLoopIndexB() , GetHeroAbilityFromList(u6 , GetForLoopIndexA()))
ВНИМАНИЕ! ЕСЛИ АБИЛА УЖЕ ЕСТЬ, РАЗБЛОК ЕЕ, ЕСЛИ НЕТ - АНЛОК 2 СКИЛЛПОИНТА И КАЧАЕМ
if GetUnitAbilityLevelSwapped(GetHeroAbilityFromList(u6 , GetForLoopIndexA()), u5) != 0 then
call SetPlayerAbilityAvailableBJ( true, GetHeroAbilityFromList(u5 , GetForLoopIndexB()), GetOwningPlayer(u5) )
else
call ModifyHeroSkillPoints(u5, bj_MODIFYMETHOD_ADD, 1)
call ModifyHeroSkillPoints(u5, bj_MODIFYMETHOD_ADD, 1)
call SelectHeroSkill(u5, GetHeroAbilityFromList(u5 , GetForLoopIndexB()) )
call SelectHeroSkill(u5, GetHeroAbilityFromList(u5 , GetForLoopIndexB()) )
endif
endif
endif
set bj_forLoopBIndex = bj_forLoopBIndex + 1
endloop
set mainstat = 1
endif
endif
endif
set bj_forLoopAIndex = bj_forLoopAIndex + 1
endloop
if mainstat == 0 then
call AddUnitAttackSpeed(u5 , GetUnitAttackSpeed(u6) * 0.05)
endif
endif
endif

UPD: пока родилась собственная дико костыльная
А можно просто поискать на сайте, а потом почитать про форматирование.
`
ОЖИДАНИЕ РЕКЛАМЫ...
21
Короче после применения этого заклинания юнит u5 должен посмотреть все абилы юнита u6 в изучаемом поле, проверить их на то, что макс лвл 2 и перезарядка >=1.
Если такая абила нашлась, то запускается другой цикл, где точно так же проверяются все абилы изучаемого поля юнита u5.
Если две такие абилы нашлись, то нужно переписать первую на место второй в изучаемом поле
30
Эту нечитаемую кашу даже читать лень, на вопрос вам выше ответили, могу только посоветовать Типы и приведение типов.
21
NazarPunk, над этой нечитаемой кашей долго трещали мозги и хочется ее действенной сделать
там было самодокументирование но перед публикацией тут было решение выпилить за предположением что с ним будет хуже
Короче, предельно упрощаю вопрос для знатоков мемхака:
GetHeroAbilityFromList(u5, 1) - например - именно так правильно функция принимает в мемхаке, это точно - возвращает ЧТО?
Если, допустим, нечто типа 'A000' - тогда не понятно, какого рожна код не работает, потому что он загонялся в редактор для проверки куском (просто в чистую карту без мх) - и единственное, на что ругался - на несуществующие функции.
//////Вот функции эти кстати
function GetHeroAbilityFromList takes unit uHero, integer list returns integer
set LastConvertedHandle = ConvertHandle( uHero )
if IsUnitType( uHero, UNIT_TYPE_HERO ) and LastConvertedHandle > 1 and list > 0 then
return ReadMemory( ReadMemory( LastConvertedHandle + 496 ) + 240 + 4 * list )
endif
return 0
endfunction
function SetHeroAbilityFromList takes unit uHero, integer list, integer abi returns nothing
set LastConvertedHandle = ConvertHandle( uHero )
if IsUnitType( uHero, UNIT_TYPE_HERO ) and LastConvertedHandle > 1 and list > 0 then
call WriteMemory( ReadMemory( LastConvertedHandle + 496 ) + 240 + 4 * list, abi )
endif
endfunction
/////
Я все-таки так понимаю что он абилу в каком-то цифровом формате выводит
Вот как бы и через что ее перевести в 'A000'
ну понятно в смысле не именно в 'A000' а в формат равкода
2 пункта от Raised: 1.4 (злоупотребление форматированием) Неиспользование форматирования. Как это читать?!
21
/////////////////
UPD: пока родилась собственная дико костыльная, но способная работать идея. Создать героя-даммика с пустым полем, добавить его в особую группу "боты", записать ему искомую абилу в поле через функцию и сразу же повысить ему уровень и отследить триггерно, что он выучит. У меня боты автоматически, просто в определенной последовательности, учат все геройские абилы, а так как абила у него будет единственной, она и будет искомой.
Это дичайший костыль, но это лично мне ща понятно как работать будет
Разумеется, если буду реализовывать, выведу в функцию
PT153, ну хотя бы бы инфа о нем в новой вкладке браузера открывалась, что ли.
А то дико неудобно
30
UPD: пока родилась собственная дико костыльная
А можно просто поискать на сайте, а потом почитать про форматирование.
Принятый ответ
21
NazarPunk, о, благодарю
насчет форматирования см. выше
ну т. е. мне наоборот строку в равкод ок
32
ClotPh, ну равкод - то целое число, только в 256ричной, а дебагом ты выводишь в десятичной.
Чтобы оставить комментарий, пожалуйста, войдите на сайт.