Ruti Ragnason, ты не понял наверное даже по видео, но это 2 РАЗНЫХ вопроса с ОДНОЙ ОДИНАКОВОЙ ссылкой, ты хочешь перейти на вопрос, который уже отвечен, а попадаешь на вопрос без ответа
т.е. попробуй зайти сейчас в вопросы по варику, во вкладку "с ответом" и попасть в вопрос "Как изменять значение атаки появляющихся саранчидов?" где всего лишь 2 коммента
МрачныйВорон, с каких пор я стал мастером? а так с ответом согласен, обычно я реализовывал это через мгновенную атаку у юнита и триггерами с регистрацией получения урона делал кастомные снаряды, сам урон с автоатаки блочил этой либой, сохраняя для повторного нанесения при достижении цели
большие минусы (которые лично мне никогда не были минусами), это то, что весь урон нужно делать триггерным, т.е. яды, скиллы из ро и прочая ерунда у юнита с такой атакой будут вызывать кастомные снаряды, тут поможет мемхак либо damage engine
единственная проблема моих предложений, что ты кастера никак не узнаешь, тут либо выбирать ближайшего при входе на карту при условии что это тот же игрок, либо делать триггерный аналог, может ещё есть варианты
можно пример банального преимущества варсмеша по сравнению с вариком? а то даже не ясно зачем его изучать и по ощущениям лучше досконально разобраться в мемхаке / рендередже чем в варсмеше
событие погружен на транспорт, делаешь двумерный массив под кол-во рабов, при отдачи приказа или периодическим таймером проверяешь кол-во юнитов в этом логове
это значение берёт отрывок из нужной строки, к примеру:
я пошёл покупать табуретку, мыло и верёвку
Подстрока( ( строка выше ), 10, 15 ) == окупа
т.е. первая цифра отвечает за начало получения текста, а второе за его конец, учитывая пробелы точки и прочее, все символы
globals
constant group TempG = CreateGroup( )
constant group TempG_1 = CreateGroup( )
player TempPlayer = null
endglobals
native UnitAlive takes unit id returns boolean
function Trig_SystemExperience_Actions takes nothing returns nothing
local unit dead = GetTriggerUnit( )
local real xdead = GetUnitX( dead )
local real ydead = GetUnitY( dead )
local integer i = 0
local integer exp = GetUnitLevel( dead ) * 35 + GetRandomInt( 1, 12 )
local unit u
set TempPlayer = GetOwningPlayer( dead )
if IsUnitType( dead, UNIT_TYPE_SUMMONED ) then
set exp = exp / 2
endif
call GroupEnumUnitsInRange( TempG, xdead, ydead, 1350.00, null )
loop
set u = FirstOfGroup( TempG )
exitwhen u == null
call GroupRemoveUnit( TempG, u )
if UnitAlive( u ) and IsUnitEnemy( u, TempPlayer ) and IsUnitType( u, UNIT_TYPE_HERO ) then
call GroupAddUnit( TempG_1, u )
set i = i + 1
endif
endloop
set exp = exp / i
loop
set u = FirstOfGroup( TempG_1 )
exitwhen u == null
call GroupRemoveUnit( TempG_1, u )
call AddHeroXP( u, exp, true )
call GroupRemoveUnit( TempG_1, u )
endloop
set dead = null
endfunction
function Trig_SystemExperience_Conditions takes nothing returns boolean
return not IsUnitType( GetTriggerUnit( ), UNIT_TYPE_STRUCTURE )
endfunction
function InitTrig_SystemExperience takes nothing returns nothing
set gg_trg_SystemExperience = CreateTrigger()
call TriggerRegisterAnyUnitEventBJ( gg_trg_SystemExperience, EVENT_PLAYER_UNIT_DEATH )
call TriggerAddCondition( gg_trg_SystemExperience, Condition( function Trig_SystemExperience_Conditions ) )
call TriggerAddAction( gg_trg_SystemExperience, function Trig_SystemExperience_Actions )
endfunction
call GroupEnumUnitsInRange(groupAct, xdead, ydead, 1350, null)
loop
set u = FirstOfGroup(groupAct)
exitwhen u == null
if GetWidgetLife(u) > 0.405 and IsUnitEnemy(u, GetOwningPlayer(dead)) and IsUnitType(u, UNIT_TYPE_HERO) then
call AddHeroXP(u, exp, true)
call GroupRemoveUnit(groupAct, u)
endif
set u = null
endloop
call DestroyGroup(groupAct)
бесконечный цикл может произойти если юнит не прошёл условия, да и банальное страдание логики тут наблюдается, к примеру зачем выставлять null после этого цикла переменной u, если условие выхода из цикла: u == null?
ну как бесконечный, этот цикл прервётся от оп лимита
megabebra, урон героя можно высчитать либо мемхаком, либо бд, либо рефом, выбирай сам, для первых двух могу дать направление и подсказать что-то, но делать за тебя не буду
если без мх, рефа и бд, то:
если у героя нет всяких ядов, абилок и прочей ерунды, только автоатака, то достаточно зарегистрировать событие получения урона и проверять источник повреждения, атаку ты всё равно не сможешь узнать, но сможешь задать множитель полученного урона, повторно нанеся его (отключив триггер перед нанесением и включив после, чтобы не зациклить)
чтобы команда сработала нужно ввести например -alliance 1 + 12, плюс с пробелами нигде не учитывается поэтому можно любые 3 фигни тыкнуть между этими цифрами, главное чтобы было расстояние в 3 буквы, можешь добавить для этого проверку если нужно чтобы учитывалось написанное между ними
function GetUpperButtonBarButton takes integer id returns integer
local integer pOff = 0
local integer pUpperButtonBar = GetUIUpperButtonBarFrame( )
if pUpperButtonBar > 0 then
if id == 0 then
set pOff = 0x138
elseif id == 1 then
set pOff = 0x130
elseif id == 2 then
set pOff = 0x134
elseif id == 3 then
set pOff = 0x160
endif
if pOff > 0 then
return ReadRealMemory( pUpperButtonBar + pOff )
endif
endif
return 0
endfunction
Dorg, накину подсказку заранее, яды, другие скиллы у героя и вообще любой источник урона повысит скорость атаки по всем задетым юнитам, не только автоатака
чтобы этого не было придётся все скиллы делать триггерными либо использовать damage engine / memoryhack / reforged
» WarCraft 3 / Проблема с магазином
» Администрация XGM / разные вопросы с одинаковой ссылкой
» WarCraft 3 / Дальнобойные атаки сквозь препятствия
большие минусы (которые лично мне никогда не были минусами), это то, что весь урон нужно делать триггерным, т.е. яды, скиллы из ро и прочая ерунда у юнита с такой атакой будут вызывать кастомные снаряды, тут поможет мемхак либо damage engine
» WarCraft 3 / Как изменять значение атаки появляющихся саранчидов?
» WarCraft 3 / Как изменять значение атаки появляющихся саранчидов?
» WarCraft 3 / Как изменять значение атаки появляющихся саранчидов?
» WarCraft 3 / Warsmash аналог WarCraft III развивается полным ходом!
» Fantasy Pirates / Вадим 2kxaoc играет в Fantasy Pirates #4
» WarCraft 3 / Как на 1.26 отследить вход раба в логово, чтоб сделать действие
» Fantasy Pirates / Вадим 2kxaoc играет в Fantasy Pirates #4
» WarCraft 3 / Триггер Зума
т.е. первая цифра отвечает за начало получения текста, а второе за его конец, учитывая пробелы точки и прочее, все символы
Ред. rsfghd
» WarCraft 3 / Нестабильная система опыта
» WarCraft 3 / Нестабильная система опыта
» WarCraft 3 / Урон в зависимости от дальности
если у героя нет всяких ядов, абилок и прочей ерунды, только автоатака, то достаточно зарегистрировать событие получения урона и проверять источник повреждения, атаку ты всё равно не сможешь узнать, но сможешь задать множитель полученного урона, повторно нанеся его (отключив триггер перед нанесением и включив после, чтобы не зациклить)
» WarCraft 3 / Урон в зависимости от дальности
» Блог им. rsfghd / Спеллпак Повелителя Грома
» WarCraft 3 / Как слить две модели?
Ред. rsfghd
» WarCraft 3 / Триггер для добавления В союз ботов между собой и нет
» WarCraft 3 / Триггер для добавления В союз ботов между собой и нет
» WarCraft 3 / Триггер для добавления В союз ботов между собой и нет
» WarCraft 3 / Кнопки Меню, Общение, Союзники при помощи мемхака
APIMemoryGameUI:
» WarCraft 3 / Как сделать скилл, как у тролля в доте?
» Администрация XGM / Как отредактировать свой ресурс?
» Администрация XGM / Как отредактировать свой ресурс?
» Администрация XGM / Как отредактировать свой ресурс?