21

» WarCraft 3 / Заклинание: Волна Воды

NazarPunk, получается, что, если переменная может использоваться в замыкающей функции, то она не будет очищена сборщиком мусора?

Также еще заметил, что глобальные переменные можно создавать внутри функции:
function CreateAllForces( )
    DEFENSIVE_FORCE = CreateForce( )
    OFFENSIVE_FORCE = CreateForce( )
    ALL_PLAYERS     = CreateForce( )

    for i = 0, MAX_PLAYERS_COUNT do
        if GetPlayerSlotState( Player( i ) ) == PLAYER_SLOT_STATE_PLAYING then
            ForceAddPlayer( ALL_PLAYERS, Player( i ) )
                
            if GetPlayerTeam( Player( i ) ) == 0 then
                ForceAddPlayer( DEFENSIVE_FORCE, Player( i ) )
            elseif GetPlayerTeam( Player( i ) ) == 1 then
                ForceAddPlayer( OFFENSIVE_FORCE, Player( i ) )
            end
        end
    end
end
Можно ли так делать? Если вызвать эту функцию дважды, то при первом вызове глобальная переменная будет создана, а во втором перезаписана?

Если создавать локальные переменные в цикле:
for i = 0, 10 do
    local var = i 
end
Переменная var будет создана 11 раз или 1 раз, а дальше перезаписываться?
21

» WarCraft 3 / Заклинание: Волна Воды

NazarPunk, правильно ли я понимаю, что локальные переменные в Lua обнулять не нужно? Если да, то когда они сами обнулятся?
Просто писал такой код:
function InitDebugTriggers( )
    local trig = CreateTrigger( )
    local str = "asd"

    BlzTriggerRegisterPlayerKeyEvent( trig, Player( 0 ), OSKEY_ESCAPE, 0, true )

    TriggerAddAction( trig, function( )
        print( str )
    end )
end
Если нажать Esc, то на экран высветится "asd" вместо "nil". Почему так происходит, если функция InitDebugTriggers давно завершила свою работу (во время инициализации карты)? А действие триггера происходит уже намного позже, когда локальная переменная должна уже быть обнулена.
21

» WarCraft 3 / Заклинание: Длань Господня

Я так полагаю , что работает такой код в тот момент, когда у жасс инициализируются глоб. перменные. Если написать так, то юнит не создается.
Globals
unit u = createUnit( )
endglobals
21

» WarCraft 3 / Заклинание: Длань Господня

Этот код как функция main сама запускается. Я правильно понимаю? Сори за глупые вопросы, но я кроме жасс не знаю других языков.
21

» WarCraft 3 / Заклинание: Длань Господня

NazarPunk, функция InitTrig_cast будет вызвана в функции InitCustomTriggers, которая, в свою очередь будет вызвана в main. А здесь не понятно, как происходит инициализация способности.
21

» WarCraft 3 / Заклинание: Длань Господня

Bergi_Bear, ну в жасс это еще нужно где-то вызвать. А тут оно само работает или как?
21

» WarCraft 3 / Заклинание: Длань Господня

NazarPunk, ну в jass есть функция для инициализации способности, где создаются триигеры и навешиваются события, а здесь такого нет, из-за этого я не понимаю как это работает.
21

» WarCraft 3 / Заклинание: Длань Господня

У меня тоже вопрос по Lua. Почему здесь нету функций (кроме условия и действия триггера)? Этот код как-то самоинициализируется или его нужно вызвать где-то?
21

» WarCraft 3 / Постановка иф

:))))
local unit u

if GetEnumUnit(  ) != null then
    set u = GetEnumUnit(  )
elseif GetTriggerUnit(  ) != null then
    set u = GetTriggerUnit(  )
else
    //
endif
21

» WarCraft 3 / За что отвечает поле в РО WESTRING_UEVAL_ISIT?

Если не ошибаюсь, это количество зарядов юнитов или предметов после первого завершения перезарядки.
вот , когда предмет завершит свою первую перезарядку, там будет указанное количество зарядов.
Загруженные файлы
21

» WarCraft 3 / Как сделать 9 слотов в 1.31?

Больше похоже на подделку, потому что окно подсказки должно находится чуть правее, рядом с кнопкой Атаковать.
21

» WarCraft 3 / Отлов урона на 131 PTR

call TriggerRegisterPlayerUnitEvent( triggerName, Player(0x00), EVENT_PLAYER_UNIT_DAMAGED, null )
EVENT_PLAYER_UNIT_DAMAGED - это новый ивент.
21

» WarCraft 3 / Отлов урона на 131 PTR

    constant attacktype         ATTACK_TYPE_NORMAL              = ConvertAttackType(0)
    constant attacktype         ATTACK_TYPE_MELEE               = ConvertAttackType(1)
    constant attacktype         ATTACK_TYPE_PIERCE              = ConvertAttackType(2)
    constant attacktype         ATTACK_TYPE_SIEGE               = ConvertAttackType(3)
    constant attacktype         ATTACK_TYPE_MAGIC               = ConvertAttackType(4)
    constant attacktype         ATTACK_TYPE_CHAOS               = ConvertAttackType(5)
    constant attacktype         ATTACK_TYPE_HERO                = ConvertAttackType(6)

    constant damagetype         DAMAGE_TYPE_UNKNOWN             = ConvertDamageType(0)
    constant damagetype         DAMAGE_TYPE_NORMAL              = ConvertDamageType(4)
    constant damagetype         DAMAGE_TYPE_ENHANCED            = ConvertDamageType(5)
    constant damagetype         DAMAGE_TYPE_FIRE                = ConvertDamageType(8)
    constant damagetype         DAMAGE_TYPE_COLD                = ConvertDamageType(9)
    constant damagetype         DAMAGE_TYPE_LIGHTNING           = ConvertDamageType(10)
    constant damagetype         DAMAGE_TYPE_POISON              = ConvertDamageType(11)
    constant damagetype         DAMAGE_TYPE_DISEASE             = ConvertDamageType(12)
    constant damagetype         DAMAGE_TYPE_DIVINE              = ConvertDamageType(13)
    constant damagetype         DAMAGE_TYPE_MAGIC               = ConvertDamageType(14)
    constant damagetype         DAMAGE_TYPE_SONIC               = ConvertDamageType(15)
    constant damagetype         DAMAGE_TYPE_ACID                = ConvertDamageType(16)
    constant damagetype         DAMAGE_TYPE_FORCE               = ConvertDamageType(17)
    constant damagetype         DAMAGE_TYPE_DEATH               = ConvertDamageType(18)
    constant damagetype         DAMAGE_TYPE_MIND                = ConvertDamageType(19)
    constant damagetype         DAMAGE_TYPE_PLANT               = ConvertDamageType(20)
    constant damagetype         DAMAGE_TYPE_DEFENSIVE           = ConvertDamageType(21)
    constant damagetype         DAMAGE_TYPE_DEMOLITION          = ConvertDamageType(22)
    constant damagetype         DAMAGE_TYPE_SLOW_POISON         = ConvertDamageType(23)
    constant damagetype         DAMAGE_TYPE_SPIRIT_LINK         = ConvertDamageType(24)
    constant damagetype         DAMAGE_TYPE_SHADOW_STRIKE       = ConvertDamageType(25)
    constant damagetype         DAMAGE_TYPE_UNIVERSAL           = ConvertDamageType(26)

    constant weapontype         WEAPON_TYPE_WHOKNOWS            = ConvertWeaponType(0)
    constant weapontype         WEAPON_TYPE_METAL_LIGHT_CHOP    = ConvertWeaponType(1)
    constant weapontype         WEAPON_TYPE_METAL_MEDIUM_CHOP   = ConvertWeaponType(2)
    constant weapontype         WEAPON_TYPE_METAL_HEAVY_CHOP    = ConvertWeaponType(3)
    constant weapontype         WEAPON_TYPE_METAL_LIGHT_SLICE   = ConvertWeaponType(4)
    constant weapontype         WEAPON_TYPE_METAL_MEDIUM_SLICE  = ConvertWeaponType(5)
    constant weapontype         WEAPON_TYPE_METAL_HEAVY_SLICE   = ConvertWeaponType(6)
    constant weapontype         WEAPON_TYPE_METAL_MEDIUM_BASH   = ConvertWeaponType(7)
    constant weapontype         WEAPON_TYPE_METAL_HEAVY_BASH    = ConvertWeaponType(8)
    constant weapontype         WEAPON_TYPE_METAL_MEDIUM_STAB   = ConvertWeaponType(9)
    constant weapontype         WEAPON_TYPE_METAL_HEAVY_STAB    = ConvertWeaponType(10)
    constant weapontype         WEAPON_TYPE_WOOD_LIGHT_SLICE    = ConvertWeaponType(11)
    constant weapontype         WEAPON_TYPE_WOOD_MEDIUM_SLICE   = ConvertWeaponType(12)
    constant weapontype         WEAPON_TYPE_WOOD_HEAVY_SLICE    = ConvertWeaponType(13)
    constant weapontype         WEAPON_TYPE_WOOD_LIGHT_BASH     = ConvertWeaponType(14)
    constant weapontype         WEAPON_TYPE_WOOD_MEDIUM_BASH    = ConvertWeaponType(15)
    constant weapontype         WEAPON_TYPE_WOOD_HEAVY_BASH     = ConvertWeaponType(16)
    constant weapontype         WEAPON_TYPE_WOOD_LIGHT_STAB     = ConvertWeaponType(17)
    constant weapontype         WEAPON_TYPE_WOOD_MEDIUM_STAB    = ConvertWeaponType(18)
    constant weapontype         WEAPON_TYPE_CLAW_LIGHT_SLICE    = ConvertWeaponType(19)
    constant weapontype         WEAPON_TYPE_CLAW_MEDIUM_SLICE   = ConvertWeaponType(20)
    constant weapontype         WEAPON_TYPE_CLAW_HEAVY_SLICE    = ConvertWeaponType(21)
    constant weapontype         WEAPON_TYPE_AXE_MEDIUM_CHOP     = ConvertWeaponType(22)
    constant weapontype         WEAPON_TYPE_ROCK_HEAVY_BASH     = ConvertWeaponType(23)
Это означает, что тип атаки у "Огня преисподней" - ATTACK_TYPE_NORMAL, тип урона - DAMAGE_TYPE_FIRE и тип оружия - WEAPON_TYPE_WHOKNOWS.
Отловить, что урон исходит именно от рук пока что нельзя, насколько я знаю. Но его можно наверняка угадать, используя функции, что я выше написал.
21

» WarCraft 3 / Как сделать эффект от пассивки bloodseeker'a?

A.W.K., если используете мемхак, то там есть замечательная функция AddAlwaysVisibleFlag( ), которая работает как во второй доте, где видно только модельку юнита.