3

» WarCraft 3 / Помогите запустить карту

Сейчас скину...

Ну чтож, давайте карту, попробуем разобраться

JIEGEND, значит что-то ты напартачил в своей карте)

Если разберётесь скажу спасибо)

Это ещё бета версия

Прошу простить если будут элементарные ошибки, порой приходится делать её ночью когда уставший) мог где-то что-то накалякать
Загруженные файлы
3

» WarCraft 3 / Помогите запустить карту


Ошибка, повреждены параметры карты? Это почему? Странно... Я сам могу играть, а вот с людьми нет? Ничего не понимаю
Загруженные файлы
3

» WarCraft 3 / Помогите запустить карту

Замирают цифры потому что у подключившихся скорость интернета маленькая. Кикай их и ищи норм игроков. И если у тебя кастомный game.dll то надо чтобы игроки перезапускали варкрафт после скачивания.
"По локальной сети" имеется ввиду- по проводу. И ваша цитата-"И если у тебя кастомный game.dll то надо чтобы игроки перезапускали варкрафт после скачивания", можно по подробнее, пожалуйста?

Bergi, да ты прав. Стоит загрузить карту на бот. А там бот будет все сразу игрокам раздавать карту с приличной скоростью. Карты 8 мб скачиваются за секунды.
Bergi, да ты прав. Стоит загрузить карту на бот. А там бот будет все сразу игрокам раздавать карту с приличной скоростью. Карты 8 мб скачиваются за секунды.
Послушаю ваших советов и попробую, на Ирине можно запускать свои карты?
3

» WarCraft 3 / Нужна модель!

Стандартная модель верфи из кампании.
Хехе... Не, мне нужна другая) ну да ладно..
3

» WarCraft 3 / Без контакта или нет началу игры

Это процент загрузки карты. Пока карта не скачана, на ней нельзя играть.
В мультиплеере карту можно проверять например клоадером.
Это процент загрузки карты. Пока карта не скачана, на ней нельзя играть.
В мультиплеере карту можно проверять например клоадером.
Ага, значит это процент загрузки. Хоть это и не решает проблемы , но хоть какую-то информацию дало. Спасибо

Это процент загрузки карты. Пока карта не скачана, на ней нельзя играть.
В мультиплеере карту можно проверять например клоадером.
Может вы знаете почему карта не грузится до конца?

Что нужно для того чтобы карта грузилась?
3

» WarCraft 3 / Нужна модель!

Честно говоря, вопрос довольно размытый. Какого именно порта? Современного или средневекового/другого? В виде комплекса зданий или одного здания? С анимациями или без? Для какой версии игры? Каков полигонаж? С тимколором или нет? На стандартных текстурах или импортных?
Средневековая модель/ одно здание/ всё остальное неважно
3

» WarCraft 3 / Делать действия для юнитов под курсором.

тебе нужен курсор или точка каста? мировые и декартовые координаты мыши ты можешь отловить либо мемхаком либо последними патчами
Курсор, типа все выбранные юниты в рамке курсора выполняют действия одного из юнитов
3

» WarCraft 3 / Мемхак для нуба

JIEGEND, лол)
во первых я сказал по факту, мемхак только для первого пункта может быть использован, остальное даже на гуи делается
во вторых, мне есть чем заняться, обновляю уже вполне достаточную карту и хочу свою собственную сделать)
в третьих, меня игра не заинтересовала, а сам фильм/сериал игры престолов я не смотрел, и соответственно за тебя карту я делать не буду, да и в конце концов я больше интересуюсь нестандартными способностями нежели какими-то системами для нестандартной стратегии
в четвёртых, у меня есть подозрения что "потребление пищи" в твоём значении имеется именно та пища, которая сверху справа как лимит армии используется, т.е. ты возможно юзаешь для этого стандартный интерфейс с его параметрами

upd что тоже не круто, если эта карта хочет брать наименование "лучшей"
но, я в чужие дела не лезу, хочешь сделать, значит есть зачем

задавай отдельные вопросы по реализации нужных систем и тебе соответственно подскажут
например первый пункт уже отвечен, мемхак / реф / бд
второй пункт - сохранять область откуда пришёл захватчик, при поражении обратно в эту область отправлять, если проиграл защищающийся то даёшь ему на выбор любую среди окружающих областей для отступления, при условии, что в области нет контролёра либо контролёр владелец отступающего, в сами области сохраняешь тех кто контролируют их

да и с областями в общем-то криво в варе, ведь все они квадратные, лучше свою систему придумать, например основываясь на тайлах(?)

впрочем, можно даже и с квадратными областями красиво это реализовать
Что ж, я понял.
Кстати про области... Возможно ли их сделать другой формы?
3

» WarCraft 3 / Мемхак для нуба

((цитата
JIEGEND, из перечисленного мемхак нужен только для первого пункта, и то, даже без него можно обойтись
))Я бы посмотрел как ты это делаешь. Но мне до такого уровня далеко
Если не сложно сделай пару наработок
3

» WarCraft 3 / Мемхак для нуба

"Многие механики постоянно упираются в потолок возможностей". Извини за оффтоп, но реально даже не представляю, что это может быть, тем более постоянно. Один раз сталкивался только с ситуацией, когда нужно считывать полученный урон, до нанесения урона (как то так) и то обошёл это другим способом. Перечисли хотя бы кратенько списочком такие ситуации, чтоб знать на будущее для себя.
  1. Кароче, карту которую я пытаюсь повторить это игра Game of thrones board game- настолка. Честно говоря уже половину сделал, но постоянно появляются косяки которые очень мешают процессу воссоздания... Если хочешь могу скинуть скрины моей работы)
Что касается косяков, они относятся к механической части игры. А именно:
1)Мне нужно создать подсчет урона юнитов Разных игроков в области, и та группа юнитов у которой суммарный урон будет больше тот побеждает, и проигравший юнит отдает занятую область. Тут начинаются новые проблемы...
  1. Допустим, Указанная группа юнитов игрока (Старк) занимает область с замком, когда наступает ход группы юнитов игрока (Грейджоев), он атакуют из другой области на карте в область где находится юниты(Старков). (ПРОИСХОДИТ БОЙ)_ Условно выиграла группа (Старк), значит, нужно сделать так чтобы юниты (Грейджоев) отступила в область откуда напала. И наоборот, если (Старк) защищает область и ПРОИГРЫВАЕТ в Битве, то нужно сделать так чтобы игрок (Старк) выбрал соседству (смежную) область, которая при этом не занята другим игроком, для ОТСТУПЛЕНИЯ.
  2. Если группа юнитов игрока(Любой игрок) в области больше или ровно 2-установить общее потребительство ПИЩИ как 1- "Типо отряд, если юнитов в области 1или больше, то это отряд которому можно задать действо которое будет исполнять для всех юнитов в этом отряде"
И наоборот, если юнит вышел из зоны где сосредоточен отряд- добавить для этого юнита +1 ПИЩИ потребительства.
  1. Возможность атаки через море. В игре есть много морей через которые можно перемещать свои войска из одной точки в другую, даже если она не смежная с областью в которой находится подготовленные юниты. Это довольно сложно для исполнения в редакторе, но это не самая болезненная тема...
  2. Возможно использования некоторых бафов, в виде карточек, во время БИТВЫ.
на самом деле это не весь список проблем которые мне встречаются... Но что поделать(
На самом деле я начинаю думать что мне нужна помощь и поддержка, самому очень трудно делать такой объем работы. Но если у меня получится, то это будет ЛУЧШАЯ КАРТА Game of thrones из всех что сейчас есть.
Если интересно, вот ссылка на игру в карточном виде:https://youtu.be/xP64m3Qsru4
3

» WarCraft 3 / Как создать подсчёт урона юнитов в области?

Как то делал способность, которая похищает % атаки у врагов поблизости на несколько секунд, используя мемхак. Способность так то вроде не сложная в реализации, но вот про новичков наверное не по адресу, ибо написано на vjass. Если интересно прокоментирую код и обьясню что и зачем:
код
globals
    integer HASH_EXTRA_DAMAGE_INDEX = 5
    integer array abilityAddDamageLvl //Массив способностей для увеличения дополнительного урона
endglobals
   
function GetUnitExtraDamage takes unit u returns integer
    local integer iD = GetHandleId( u )
    local integer ammount
        
    set ammount = LoadInteger( gg_htb_HashData, iD, HASH_EXTRA_DAMAGE_INDEX )
    return ammount
endfunction
  
function SetUnitExtraDamage takes unit u, integer ammount returns nothing
    local integer iD = GetHandleId( u )
    local integer power = 12
    local integer index = 0
    local integer rest

    if ammount > 8191 then
        set ammount = 8191
    endif
      
    loop
        call UnitRemoveAbility( u, abilityAddDamageLvl[index] )
        exitwhen index == 12
        set index = index + 1
    endloop
    if ammount > 0 then
        set rest = ammount
        loop
            
            exitwhen rest <= 0
            if R2I( Pow( 2, power ) ) > rest then
                set power = power - 1
            elseif R2I( Pow( 2, power ) ) <= rest then
                call UnitAddAbility( u, abilityAddDamageLvl[power] )
                call UnitMakeAbilityPermanent( u, true, abilityAddDamageLvl[power] )
                set rest = rest - R2I( Pow( 2, power ) )
                set power = power - 1
            endif
        endloop
        call SaveInteger( gg_htb_HashData, iD, HASH_EXTRA_DAMAGE_INDEX, ammount )
    endif
endfunction

function Only_Alive_Player_No_Dummy_No_Ward_Filter takes nothing returns boolean
    set bj_lastFilterUnit = GetFilterUnit( )
    return not ( IsUnitDead( bj_lastFilterUnit ) or IsUnitWard( bj_lastFilterUnit ) or  IsUnitType( bj_lastFilterUnit, UNIT_TYPE_MECHANICAL ) or IsUnitIllusion( bj_lastFilterUnit ) or IsUnitHidden( bj_lastFilterUnit ) )
endfunction

function Group_Remove_Damage_Enum takes nothing returns nothing
    local unit ally = GetEnumUnit( )
    local TriggerData dd = bj_forceRandomConsidered
    local integer bonus = R2I( GetUnitExtraDamage( ally ) - dd.dmg )
    
    call UnitRemoveAbility( ally, 'B00H' )
    call UnitRemoveAbility( ally, 'A0DV' )
    call SetUnitExtraDamage( ally, bonus )
    call SaveInteger( gg_htb_HashData, GetHandleId(ally), HASH_EXTRA_DAMAGE_INDEX, bonus )
    call RemoveSavedHandle( gg_htb_HashData, ExSpeedSteal, GetHandleId(ally) )
    
    set ally = null
endfunction

function Group_Add_Damage_Enum takes nothing returns nothing
    local TriggerData dd = bj_forceRandomConsidered
    local unit ally = GetEnumUnit( )
    local integer bonus = 0
    local integer pBuff
    
    call TriggerRegisterDeathEvent( dd.trg, ally )
    call SaveTriggerHandle( gg_htb_HashData, ExSpeedSteal, GetHandleId(ally), dd.trg )
    call SetUnitExtraDamage( ally, R2I( GetUnitExtraDamage( ally ) + dd.dmg ) )
    call UnitAddAbility( ally, 'A0DV' )
    call UnitMakeAbilityPermanent( ally, true, 'A0DV' )
    call UnitAddAbility( ally, 'A03W' )
    

    set pBuff = GetUnitAbility( ally, 'B00H' )
    
    if pBuff < 1 then
        call BJDebugMsg(DEBUG+" "+ GetAbilityEffectById( 'A0DV', EFFECT_TYPE_SPECIAL, 1 ) )
        call BJDebugMsg(INFO)
        return
    endif
    
    set dd.c = TimerGetElapsed( DispTimer )
    call SetBuffLevel( pBuff, dd.id )
    call WMem( RMem( pBuff + 0x90 ) + 0x4, mR2I( dd.c + 15.10 ) )
    call WMem( RMem( pBuff + 0x90 ) + 0x8, mR2I( dd.c + 10.408 ) )
  
    call UnitRemoveAbilityTimed( ally, 'A03W', 0.00 )

    set ally = null
endfunction

function Speed_Steal_damage_enemy takes nothing returns nothing
    set TempDamage = TempDamage + GetUnitBaseDamage( GetEnumUnit( ) )
endfunction

function Trig_Speed_Steal_Buff_Expires_Conditions takes nothing returns boolean
    local TriggerData dd
    local unit dies

    if ( GetTriggerEventId() == EVENT_WIDGET_DEATH ) then
        set dd = GetDataBX( GetTriggeringTrigger( ) )
        set dies = GetDyingUnit( )
        if IsUnitInGroup( dies, dd.grp ) then
            call GroupRemoveUnit( dd.grp, dies )
            call SetUnitExtraDamage( dies, 0 )
            call RemoveSavedHandle( gg_htb_HashData, ExSpeedSteal, GetHandleId(dies) )
            call RemoveSavedInteger( gg_htb_HashData, GetHandleId(dies), HASH_EXTRA_DAMAGE_INDEX )
            call UnitRemoveAbility( dies, 'A0DV' )
        endif
        set dies = null
        return false
    elseif ( GetTriggerEventId() != EVENT_GAME_TIMER_EXPIRED )  then
        set dd = GetDataBX( GetTriggeringTrigger( ) )
        set dies = bj_lastReplacedUnit
        call GroupRemoveUnit( dd.grp, dies )
        call SetUnitExtraDamage( dies, R2I( GetUnitExtraDamage( dies ) - dd.dmg ) )
        call SaveInteger( gg_htb_HashData, GetHandleId(dies), HASH_EXTRA_DAMAGE_INDEX, R2I( GetUnitExtraDamage( dies ) - dd.dmg ) )
        call RemoveSavedHandle( gg_htb_HashData, ExSpeedSteal, GetHandleId(dies) )
        call UnitRemoveAbility( dies, 'A0DV' )
        set dies = null
        return false
    endif

    return true
endfunction

function Trig_Speed_Steal_Buff_Expires_Actions takes nothing returns nothing
    local TriggerData dd = GetDataBX( GetTriggeringTrigger() )
    
    call DisableTrigger( dd.trg )
    
    set bj_forceRandomConsidered = dd
    call ForGroup( dd.grp, function Group_Remove_Damage_Enum )
    call ReleaseGroup( dd.grp )
    call RemoveDataBX( dd.trg )
    call dd.RemoveTrigger( )
    call dd.destroy( )
endfunction

function Trig_Speed_Steal_Actions takes nothing returns nothing
    local unit Runner = GetSpellAbilityUnit( )
    local integer Level = GetUnitAbilityLevel( Runner, 'A03Q' )
    local real CX = GetUnitX( Runner )
    local real CY = GetUnitY( Runner )
    local player pl = GetOwningPlayer( Runner )
    local TriggerData dd

    call GroupClear( gg_grp_TempGroup )
    set bj_groupEnumOwningPlayer = pl
    call GroupEnumUnitsInRange( gg_grp_TempGroup, CX, CY, 500.00, OnlyEnemy )
    
    if FirstOfGroup( gg_grp_TempGroup ) != null then
        set TempDamage = 0.00
        call ForGroup( gg_grp_TempGroup, function Speed_Steal_damage_enemy )
        
        if TempDamage > 1.00 then
            set dd = TriggerData.create()
            set dd.trg = CreateTrigger( )
            set dd.trc = TriggerAddCondition( dd.trg, Condition( function Trig_Speed_Steal_Buff_Expires_Conditions ) )
            set dd.tra = TriggerAddAction( dd.trg, function Trig_Speed_Steal_Buff_Expires_Actions )
            set dd.grp = NewGroup()
            set dd.dmg = ( 0.15 * Level ) * TempDamage
            set dd.id = Level
            
            call SetDataBX( dd.trg, dd )
            call GroupEnumUnitsOfPlayer( dd.grp, pl, Condition( function Only_Alive_Player_No_Dummy_No_Ward_Filter ) )
            set bj_forceRandomConsidered = dd
            call ForGroup( dd.grp, function Group_Add_Damage_Enum )
            call TriggerRegisterTimerEvent( dd.trg, 15.00, false )
        endif
    endif

    set Runner = null
endfunction

function Init_ExtraDamageSystem takes nothing returns nothing
    if abilityAddDamageLvl[0] > 0 then
        return
    endif
    
    set abilityAddDamageLvl[0] = 'A0DS'
    set abilityAddDamageLvl[1] = 'A0DA'
    set abilityAddDamageLvl[2] = 'A0DK'
    set abilityAddDamageLvl[3] = 'A0DL'
    set abilityAddDamageLvl[4] = 'A0DM'
    set abilityAddDamageLvl[5] = 'A0DN'
    set abilityAddDamageLvl[6] = 'A0DO'
    set abilityAddDamageLvl[7] = 'A0DP'
    set abilityAddDamageLvl[8] = 'A0DQ'
    set abilityAddDamageLvl[9] = 'A0DR'
    set abilityAddDamageLvl[10] = 'A0DJ'
    set abilityAddDamageLvl[11] = 'A0DT'
    set abilityAddDamageLvl[12] = 'A0DU'
    
    set bj_lastCreatedUnit = CreateUnit( Player( 15 ), 'hpea', 4435.41, 4295.44, 270.00 )
    
    call UnitAddAbility( bj_lastCreatedUnit, abilityAddDamageLvl[0] )
    call UnitAddAbility( bj_lastCreatedUnit, abilityAddDamageLvl[1] )
    call UnitAddAbility( bj_lastCreatedUnit, abilityAddDamageLvl[2] )
    call UnitAddAbility( bj_lastCreatedUnit, abilityAddDamageLvl[3] )
    call UnitAddAbility( bj_lastCreatedUnit, abilityAddDamageLvl[4] )
    call UnitAddAbility( bj_lastCreatedUnit, abilityAddDamageLvl[5] )
    call UnitAddAbility( bj_lastCreatedUnit, abilityAddDamageLvl[6] )
    call UnitAddAbility( bj_lastCreatedUnit, abilityAddDamageLvl[7] )
    call UnitAddAbility( bj_lastCreatedUnit, abilityAddDamageLvl[8] )
    call UnitAddAbility( bj_lastCreatedUnit, abilityAddDamageLvl[9] )
    call UnitAddAbility( bj_lastCreatedUnit, abilityAddDamageLvl[10] )
    call UnitAddAbility( bj_lastCreatedUnit, abilityAddDamageLvl[11] )
    call UnitAddAbility( bj_lastCreatedUnit, abilityAddDamageLvl[12] )
    
    call ShowUnit( bj_lastCreatedUnit, false )
    call KillUnit( bj_lastCreatedUnit )
endfunction
Как то делал способность, которая похищает % атаки у врагов поблизости на несколько секунд, используя мемхак. Способность так то вроде не сложная в реализации, но вот про новичков наверное не по адресу, ибо написано на vjass. Если интересно прокоментирую код и обьясню что и зачем:
код
globals
    integer HASH_EXTRA_DAMAGE_INDEX = 5
    integer array abilityAddDamageLvl //Массив способностей для увеличения дополнительного урона
endglobals
   
function GetUnitExtraDamage takes unit u returns integer
    local integer iD = GetHandleId( u )
    local integer ammount
        
    set ammount = LoadInteger( gg_htb_HashData, iD, HASH_EXTRA_DAMAGE_INDEX )
    return ammount
endfunction
  
function SetUnitExtraDamage takes unit u, integer ammount returns nothing
    local integer iD = GetHandleId( u )
    local integer power = 12
    local integer index = 0
    local integer rest

    if ammount > 8191 then
        set ammount = 8191
    endif
      
    loop
        call UnitRemoveAbility( u, abilityAddDamageLvl[index] )
        exitwhen index == 12
        set index = index + 1
    endloop
    if ammount > 0 then
        set rest = ammount
        loop
            
            exitwhen rest <= 0
            if R2I( Pow( 2, power ) ) > rest then
                set power = power - 1
            elseif R2I( Pow( 2, power ) ) <= rest then
                call UnitAddAbility( u, abilityAddDamageLvl[power] )
                call UnitMakeAbilityPermanent( u, true, abilityAddDamageLvl[power] )
                set rest = rest - R2I( Pow( 2, power ) )
                set power = power - 1
            endif
        endloop
        call SaveInteger( gg_htb_HashData, iD, HASH_EXTRA_DAMAGE_INDEX, ammount )
    endif
endfunction

function Only_Alive_Player_No_Dummy_No_Ward_Filter takes nothing returns boolean
    set bj_lastFilterUnit = GetFilterUnit( )
    return not ( IsUnitDead( bj_lastFilterUnit ) or IsUnitWard( bj_lastFilterUnit ) or  IsUnitType( bj_lastFilterUnit, UNIT_TYPE_MECHANICAL ) or IsUnitIllusion( bj_lastFilterUnit ) or IsUnitHidden( bj_lastFilterUnit ) )
endfunction

function Group_Remove_Damage_Enum takes nothing returns nothing
    local unit ally = GetEnumUnit( )
    local TriggerData dd = bj_forceRandomConsidered
    local integer bonus = R2I( GetUnitExtraDamage( ally ) - dd.dmg )
    
    call UnitRemoveAbility( ally, 'B00H' )
    call UnitRemoveAbility( ally, 'A0DV' )
    call SetUnitExtraDamage( ally, bonus )
    call SaveInteger( gg_htb_HashData, GetHandleId(ally), HASH_EXTRA_DAMAGE_INDEX, bonus )
    call RemoveSavedHandle( gg_htb_HashData, ExSpeedSteal, GetHandleId(ally) )
    
    set ally = null
endfunction

function Group_Add_Damage_Enum takes nothing returns nothing
    local TriggerData dd = bj_forceRandomConsidered
    local unit ally = GetEnumUnit( )
    local integer bonus = 0
    local integer pBuff
    
    call TriggerRegisterDeathEvent( dd.trg, ally )
    call SaveTriggerHandle( gg_htb_HashData, ExSpeedSteal, GetHandleId(ally), dd.trg )
    call SetUnitExtraDamage( ally, R2I( GetUnitExtraDamage( ally ) + dd.dmg ) )
    call UnitAddAbility( ally, 'A0DV' )
    call UnitMakeAbilityPermanent( ally, true, 'A0DV' )
    call UnitAddAbility( ally, 'A03W' )
    

    set pBuff = GetUnitAbility( ally, 'B00H' )
    
    if pBuff < 1 then
        call BJDebugMsg(DEBUG+" "+ GetAbilityEffectById( 'A0DV', EFFECT_TYPE_SPECIAL, 1 ) )
        call BJDebugMsg(INFO)
        return
    endif
    
    set dd.c = TimerGetElapsed( DispTimer )
    call SetBuffLevel( pBuff, dd.id )
    call WMem( RMem( pBuff + 0x90 ) + 0x4, mR2I( dd.c + 15.10 ) )
    call WMem( RMem( pBuff + 0x90 ) + 0x8, mR2I( dd.c + 10.408 ) )
  
    call UnitRemoveAbilityTimed( ally, 'A03W', 0.00 )

    set ally = null
endfunction

function Speed_Steal_damage_enemy takes nothing returns nothing
    set TempDamage = TempDamage + GetUnitBaseDamage( GetEnumUnit( ) )
endfunction

function Trig_Speed_Steal_Buff_Expires_Conditions takes nothing returns boolean
    local TriggerData dd
    local unit dies

    if ( GetTriggerEventId() == EVENT_WIDGET_DEATH ) then
        set dd = GetDataBX( GetTriggeringTrigger( ) )
        set dies = GetDyingUnit( )
        if IsUnitInGroup( dies, dd.grp ) then
            call GroupRemoveUnit( dd.grp, dies )
            call SetUnitExtraDamage( dies, 0 )
            call RemoveSavedHandle( gg_htb_HashData, ExSpeedSteal, GetHandleId(dies) )
            call RemoveSavedInteger( gg_htb_HashData, GetHandleId(dies), HASH_EXTRA_DAMAGE_INDEX )
            call UnitRemoveAbility( dies, 'A0DV' )
        endif
        set dies = null
        return false
    elseif ( GetTriggerEventId() != EVENT_GAME_TIMER_EXPIRED )  then
        set dd = GetDataBX( GetTriggeringTrigger( ) )
        set dies = bj_lastReplacedUnit
        call GroupRemoveUnit( dd.grp, dies )
        call SetUnitExtraDamage( dies, R2I( GetUnitExtraDamage( dies ) - dd.dmg ) )
        call SaveInteger( gg_htb_HashData, GetHandleId(dies), HASH_EXTRA_DAMAGE_INDEX, R2I( GetUnitExtraDamage( dies ) - dd.dmg ) )
        call RemoveSavedHandle( gg_htb_HashData, ExSpeedSteal, GetHandleId(dies) )
        call UnitRemoveAbility( dies, 'A0DV' )
        set dies = null
        return false
    endif

    return true
endfunction

function Trig_Speed_Steal_Buff_Expires_Actions takes nothing returns nothing
    local TriggerData dd = GetDataBX( GetTriggeringTrigger() )
    
    call DisableTrigger( dd.trg )
    
    set bj_forceRandomConsidered = dd
    call ForGroup( dd.grp, function Group_Remove_Damage_Enum )
    call ReleaseGroup( dd.grp )
    call RemoveDataBX( dd.trg )
    call dd.RemoveTrigger( )
    call dd.destroy( )
endfunction

function Trig_Speed_Steal_Actions takes nothing returns nothing
    local unit Runner = GetSpellAbilityUnit( )
    local integer Level = GetUnitAbilityLevel( Runner, 'A03Q' )
    local real CX = GetUnitX( Runner )
    local real CY = GetUnitY( Runner )
    local player pl = GetOwningPlayer( Runner )
    local TriggerData dd

    call GroupClear( gg_grp_TempGroup )
    set bj_groupEnumOwningPlayer = pl
    call GroupEnumUnitsInRange( gg_grp_TempGroup, CX, CY, 500.00, OnlyEnemy )
    
    if FirstOfGroup( gg_grp_TempGroup ) != null then
        set TempDamage = 0.00
        call ForGroup( gg_grp_TempGroup, function Speed_Steal_damage_enemy )
        
        if TempDamage > 1.00 then
            set dd = TriggerData.create()
            set dd.trg = CreateTrigger( )
            set dd.trc = TriggerAddCondition( dd.trg, Condition( function Trig_Speed_Steal_Buff_Expires_Conditions ) )
            set dd.tra = TriggerAddAction( dd.trg, function Trig_Speed_Steal_Buff_Expires_Actions )
            set dd.grp = NewGroup()
            set dd.dmg = ( 0.15 * Level ) * TempDamage
            set dd.id = Level
            
            call SetDataBX( dd.trg, dd )
            call GroupEnumUnitsOfPlayer( dd.grp, pl, Condition( function Only_Alive_Player_No_Dummy_No_Ward_Filter ) )
            set bj_forceRandomConsidered = dd
            call ForGroup( dd.grp, function Group_Add_Damage_Enum )
            call TriggerRegisterTimerEvent( dd.trg, 15.00, false )
        endif
    endif

    set Runner = null
endfunction

function Init_ExtraDamageSystem takes nothing returns nothing
    if abilityAddDamageLvl[0] > 0 then
        return
    endif
    
    set abilityAddDamageLvl[0] = 'A0DS'
    set abilityAddDamageLvl[1] = 'A0DA'
    set abilityAddDamageLvl[2] = 'A0DK'
    set abilityAddDamageLvl[3] = 'A0DL'
    set abilityAddDamageLvl[4] = 'A0DM'
    set abilityAddDamageLvl[5] = 'A0DN'
    set abilityAddDamageLvl[6] = 'A0DO'
    set abilityAddDamageLvl[7] = 'A0DP'
    set abilityAddDamageLvl[8] = 'A0DQ'
    set abilityAddDamageLvl[9] = 'A0DR'
    set abilityAddDamageLvl[10] = 'A0DJ'
    set abilityAddDamageLvl[11] = 'A0DT'
    set abilityAddDamageLvl[12] = 'A0DU'
    
    set bj_lastCreatedUnit = CreateUnit( Player( 15 ), 'hpea', 4435.41, 4295.44, 270.00 )
    
    call UnitAddAbility( bj_lastCreatedUnit, abilityAddDamageLvl[0] )
    call UnitAddAbility( bj_lastCreatedUnit, abilityAddDamageLvl[1] )
    call UnitAddAbility( bj_lastCreatedUnit, abilityAddDamageLvl[2] )
    call UnitAddAbility( bj_lastCreatedUnit, abilityAddDamageLvl[3] )
    call UnitAddAbility( bj_lastCreatedUnit, abilityAddDamageLvl[4] )
    call UnitAddAbility( bj_lastCreatedUnit, abilityAddDamageLvl[5] )
    call UnitAddAbility( bj_lastCreatedUnit, abilityAddDamageLvl[6] )
    call UnitAddAbility( bj_lastCreatedUnit, abilityAddDamageLvl[7] )
    call UnitAddAbility( bj_lastCreatedUnit, abilityAddDamageLvl[8] )
    call UnitAddAbility( bj_lastCreatedUnit, abilityAddDamageLvl[9] )
    call UnitAddAbility( bj_lastCreatedUnit, abilityAddDamageLvl[10] )
    call UnitAddAbility( bj_lastCreatedUnit, abilityAddDamageLvl[11] )
    call UnitAddAbility( bj_lastCreatedUnit, abilityAddDamageLvl[12] )
    
    call ShowUnit( bj_lastCreatedUnit, false )
    call KillUnit( bj_lastCreatedUnit )
endfunction
Ого... Блин, спасибо, бро! Попытаюсь разобраться. Эта наработка, возможно, станет очень важной частью моего проекта. Ещё раз Спасибо!
3

» WarCraft 3 / Как создать подсчёт урона юнитов в области?

JIEGEND, base data (bd), reforged (ref), memoryhack (memhack)
мемхак позволяет получить новый функционал, в рефе уже этот функционал из коробки, а база данных хранит в себе кучу инфы, которую ты вручную туда закидываешь, чтобы в дальнейшем работать с ней

все эти термины можно было спокойно загуглить

Что ж, понял. Спасибо тебе за помощь!
3

» WarCraft 3 / Как создать подсчёт урона юнитов в области?

((цитата
JIEGEND, т.е. тебе нужно узнать не урон а белую и бонусную атаку юнита? тут только бд либо мемхак/реф
))
Я в этой теме пока новичёк , потому не могу сказать что именно мне надо... Просто большинство терминов которые вы назвали мне ни о чём не говорят, без понятия что это😅
3

» WarCraft 3 / Как создать подсчёт урона юнитов в области?

регистрируешь событие юнит получает урон на каждого юнита на карте, а в самом триггере проверяешь что атакующий находится в области и принадлежит такому-то игроку, выставляешь массивной переменной под индексом игрока владельца кол-во нанесённого урона, 2 простых гуи триггера
Надо будет посмотреть... Просто я хочу чтобы самой драки не было. Просто считался урон юнитов принадлежащее разными Игрокам, и тот отряд у которого статистики суммарного урона больше- тот выиграл
3

» WarCraft 3 / Как заменить в верхнем правом углу иконки ресурсов?

В той же менюшке, глазами пробегись, найди текст который хочешь заменить.
В той же менюшке, глазами пробегись, найди текст который хочешь заменить.
Точняк, уже нашёл. Спасибо что откликнулись
3

» WarCraft 3 / Как заменить в верхнем правом углу иконки ресурсов?

Кстати, вы часом не знаете как изменить описание заданной пиктограммы. Иконку я поменял но вот описание изменить как-то тоже нужно
3

» WarCraft 3 / Помогите сделать модельку!

других наврятли будет
Спасибо, я уже использовал эти модели. Но там нету тех, которых мне надо.
3

» WarCraft 3 / Помогите сделать модельку!

есть на хайве в разделе ported models
Я смотрел, там нету такого что мне нужно
3

» WarCraft 3 / Флаги стран Европы и Азии Средневековья

Если нужны какие-то конкретные флажки - пишите, сделаю в следующем паке.
Привет, дружище! Можешь мне помочь с моделями флагов, пожалуйста. Нужно сделать флаг для Мартейлов и Тиреллов из игры Престолов, очень нужно для моего следующего проекта. Поможешь?🙂