21

» WarCraft 3 / Способность: повышение атаки при каждом ударе

потому что кто-то более разбирающийся говорил, что как только юнит удаляется, а все ссылки на его хендл обнулены, то и все зарегистрированные события для него удаляются
Здесь тест говорит о том, что зарегистрированные события удаляется только после того, как будет удалён сам триггер. Пока триггер существует, существуют и все зарегистрированные события на уже несуществующих юнитов.
В тестовой карте создаются события на юнитов, которые сразу же удаляются. При нажатии на ESC данный триггер удаляется.
Загруженные файлы
21

» WarCraft 3 / Проблема со скиллом на JASS

Lillikon, точно, корень обязателен. Теорема Пифагора.
	a^2 + b^2 = c^2
21

» WarCraft 3 / Проблема со скиллом на JASS

Покажите лучше карту, пока руками не потрогаешь, сложно сказать где проблема.
И да, так как углы известны уже заранее, то можно сразу же посчитать их:
local real point_1_x = target_x + 300.00 * Cos(0.00*bj_DEGTORAD)
local real point_1_y = target_y + 300.00 * Sin(0.00*bj_DEGTORAD)
>>>>
local real point_1_x = target_x + 300.00 * 1.0
local real point_1_y = target_y + 300.00 * 0.0
>>>>
local real point_1_x = target_x + 300.00
local real point_1_y = target_y + 0.00
>>>>
local real point_1_x = target_x + 300.00
local real point_1_y = target_y
21

» WarCraft 3 / Новый детект физического урона на мемхаке

quq_CCCP, да, было бы не плохо.
0x20 == $20. Я так понимаю, "$" - это замена "0x"? Могу ли я заменить везде "$" на "0x", а то у меня TESH начинает глючить из-за знака "$".
А также, не скажется ли это сильно на производительности, если вместо создания этих локалок, написать следующие функции:
    local integer ESP = GetDamageEventESPData()
    local integer Data = RMem(ESP + $08) // second argument

    local integer WeaponType = RMem(Data + $04)
    local integer DamageType = RMem(Data + $14)
    local integer AttackType = RMem(Data + $20)

function GetEventWeaponType takes nothing returns weapontype
    return ConvertWeaponType( RMem( RMem( GetDamageEventESPData( ) + $08 ) + $04 ) )
endfunction
    
function GetEventDamageType takes nothing returns damagetype
    return ConvertDamageType( DT2DT( RMem( RMem( GetDamageEventESPData( ) + $08 ) + $14 ) ) )
endfunction

function GetEventAttackType takes nothing returns attacktype
    return ConvertAttackType( RMem( RMem( GetDamageEventESPData( ) + $08 ) + $20) )
endfunction
21

» WarCraft 3 / Новый детект физического урона на мемхаке

quq_CCCP, ( Flags == 0x100 or Flags == 0x101 ) такой проверки будет ли достаточно, чтобы определить, что это атака с руки?
21

» WarCraft 3 / Новый детект физического урона на мемхаке

многие способности ставят свои флаги на атаку, к примеру Стремительность ('AOwk' - windwalk ) - ставит флаг 0x500
Можно ли где-нибудь взять список всех флагов для каждой способности? Или всё вручную надо искать?
21

» WarCraft 3 / Таймер

TimerStart( whichTimer, TimerGetRemaining( whichTimer ) + 60.0, boolean, code )
21

» WarCraft 3 / Как узнать кол-во единиц атаки у юнита?

то есть это у него нет чего надо
Я имел ввиду, что у него нет базы данных, хоть я и понял, что имелось ввиду другое..
21

» WarCraft 3 / Иконки на заказ

EHP_Sequence, потому что нужно устанавливать две версии: включенную и отключенную.
21

» WarCraft 3 / Триггерный бафф

Не особо смотрел раньше в сторону структур, хотя может и зря, но проблема то в основном с ссылкой на функцию, так как тип code с массивом не работает.
Можно использовать function interface вместо code array, в нём можно сохранять даже функции, которые требуют что-то.
21

» WarCraft 3 / WARCRAFT III Помогите!!! JASS: Syntax error!!!

Мне кажется, что не хватает ключевого слова call перед "s__recepts_try(receptlist,it , u)"
21

» WarCraft 3 / Помощь в избавлении от BJ


//===========================================================================
function Trig_Suriken_Conditions takes nothing returns boolean
    return GetSpellAbilityId() == 'A01G'
endfunction

//===========================================================================
function Move takes nothing returns nothing
    local timer    t        = GetExpiredTimer()
    local integer  id       = GetHandleId( t )
    
    local unit     caster   = LoadUnitHandle( udg_Hash, id, 1 )
    local unit     suriken  = LoadUnitHandle( udg_Hash, id, 2 )
    local real     surikenX = LoadReal( udg_Hash, id, 7 )
    local real     surikenY = LoadReal( udg_Hash, id, 8 )
    
    local real     targetX  = LoadReal( udg_Hash, id, 3 )
    local real     targetY  = LoadReal( udg_Hash, id, 4 )

    local real     time     = LoadReal   ( udg_Hash, id, 6 )

    local real     dx       = targetX - surikenX
    local real     dy       = targetY - surikenY
    local real     dist     = SquareRoot( dx * dx + dy * dy )
    
    local group    pool     = CreateGroup( )
    local unit     g        = null

    call SaveReal( udg_Hash, id, 6, time + 0.02 )
    
    call GroupEnumUnitsInRange( pool, surikenX, surikenY, 150.00, null )
    loop
        set g = FirstOfGroup( pool )
        exitwhen ( g == null )
        if IsUnitEnemy( g, GetOwningPlayer( caster ) ) then
            call UnitDamageTarget( caster, g, 40.00, false, false, null, null, null )
        endif
        call GroupRemoveUnit( pool, g )
    endloop


    if ( time <= 1.7 ) and ( dist > 16.0 ) then
        set surikenX = ( surikenX + 20.0 * ( dx / dist ) )
        set surikenY = ( surikenY + 20.0 * ( dy / dist ) )

        call SetUnitPosition( suriken, surikenX, surikenY )
        call SaveReal      ( udg_Hash, id, 7, surikenX )
        call SaveReal      ( udg_Hash, id, 8, surikenY )

    elseif ( dist < 16.0 ) and ( time <= 3.4 ) then
        call DestroyTimer( t )
        call KillUnit( suriken )
        call RemoveUnit(suriken)
        call FlushChildHashtable( udg_Hash, id )

    elseif ( time <= 3.4 ) or ( dist > 16.0 ) then
        set surikenX = ( surikenX + 20.0 * ( dx / dist ) )
        set surikenY = ( surikenY + 20.0 * ( dy / dist ) )

        call SetUnitPosition( suriken, surikenX, surikenY )
        call SaveReal      ( udg_Hash, id, 3, GetUnitX( caster ) )
        call SaveReal      ( udg_Hash, id, 4, GetUnitY( caster ) )
        call SaveReal      ( udg_Hash, id, 7, surikenX           )
        call SaveReal      ( udg_Hash, id, 8, surikenY           )

    else
        call DestroyTimer( t )
        call KillUnit( suriken )
        call RemoveUnit(suriken)
        call FlushChildHashtable( udg_Hash, id )
    endif

    call DestroyGroup( pool )
    
    set t       = null
    set caster  = null
    set suriken = null
    set pool    = null
endfunction

//===========================================================================
function Trig_Suriken_Actions takes nothing returns nothing
    local timer   t        = CreateTimer( )
    local integer id       = GetHandleId( t )
    
    local unit    caster   = GetSpellAbilityUnit( )
    local real    casterX  = GetUnitX( caster )
    local real    casterY  = GetUnitY( caster )
    
    local real    targetX  = GetSpellTargetX( )
    local real    targetY  = GetSpellTargetY( )

    local unit    suriken  = CreateUnit( GetOwningPlayer( caster ), 'u001', casterX, casterY, 0.0 )
    
    local real    angle    = Atan2( targetY - casterY, targetX - casterX )

    set targetX = GetUnitX( caster ) + 2000.0 * Cos( angle )
    set targetY = GetUnitY( caster ) + 2000.0 * Sin( angle )

    call SaveUnitHandle( udg_Hash, id, 1, caster  )
    call SaveUnitHandle( udg_Hash, id, 2, suriken )
    call SaveReal      ( udg_Hash, id, 3, targetX )
    call SaveReal      ( udg_Hash, id, 4, targetY )
    call SaveReal      ( udg_Hash, id, 6, 0.0     )
    call SaveReal      ( udg_Hash, id, 7, casterX )
    call SaveReal      ( udg_Hash, id, 8, casterY )

    call TimerStart( t, 0.02, true, function Move )

    set t       = null
    set caster  = null
    set suriken = null
endfunction

//===========================================================================
function InitTrig_Suriken_2 takes nothing returns nothing
    set gg_trg_Suriken_2 = CreateTrigger( )
    set udg_Hash = InitHashtable( )
        
    call TriggerRegisterAnyUnitEventBJ( gg_trg_Suriken_2, EVENT_PLAYER_UNIT_SPELL_EFFECT )
    call TriggerAddCondition( gg_trg_Suriken_2, Condition( function Trig_Suriken_Conditions ) )
    call TriggerAddAction( gg_trg_Suriken_2, function Trig_Suriken_Actions )
endfunction
21

» WarCraft 3 / Сustomize Editor Categories

PT153, система установлена на диске С.
В принципе проблема не такая уж и важная, если не удаётся решить, то и бог с ней. Сортировка в РО всё равно ничего не даёт.
21

» WarCraft 3 / Сustomize Editor Categories

PT153, не помогло. (
P.S: заметил, что ошибка "Cannot start plugin" перестаёт появляться, если запустить редактор с правами администратора. Но изменений в РО всё равно нету.
21

» WarCraft 3 / Сustomize Editor Categories

nvc123, нет, ошибка "Cannot start plugin" появляется и при отключении, и при включении этих кнопок. От перезапуска ничего не меняется.
21

» WarCraft 3 / Сustomize Editor Categories

nvc123, так изменения не приняты же, перезапуск ничего не даст. У меня проблемы с самим редактором походу, переустановка не помогает.
Ошибка "Can not start plugin" у меня уже давно и я не придавал ей значения.
+ в игровом интерфейсе у меня настройки шрифтов отсутствуют.
это окно открывается 5+ сек, хотя раньше открывалось мгновенно:
Загруженные файлы