Добавлен  scopterectus 
                            
                            
                            
                            
                            
                            
                        
                        
                    Обязательно ли нужно удалять способность после добавления?
	function PreloadAbility takes integer abilityId returns nothing
        if ( didInit ) then
            if ( UnitAddAbility( unitPreloader, abilityId ) ) then
                call UnitRemoveAbility( unitPreloader, abilityId )
            debug else
                debug call BJDebugMsg( "PreloadAbility(...) :    Ability '" + RAW2S( abilityId ) + "' does not exist." )
            endif
        else
            debug call BJDebugMsg("PreloadAbility(...)    Attempt to prealod abilty before library initialization.")
            call Initialization( )
            if ( UnitAddAbility( unitPreloader, abilityId ) ) then
                call UnitRemoveAbility( unitPreloader, abilityId )
            debug else
                debug call BJDebugMsg( "PreloadAbility(...) :    Ability '" + RAW2S( abilityId ) + "' does not exist." )
            endif
        endif
    endfunction	call SetUnitInvulnerable( ... )
//	или
	call UnitAddAbility( unit, 'Avul' )
	Принятый ответ
Кривоватая подгрузка,  удалять не обязательно.  Лучше юзать preload без этаких костылей, темболее в JASS есть механизмы автоматического создания pld скриптов.
    
        
            
                `
            
            
                
        
    
    ОЖИДАНИЕ РЕКЛАМЫ...
            
                    
                        Чтобы оставить комментарий, пожалуйста, войдите на сайт.
                    
                
             
                        
                        
                    
 WC3
                                WC3
                            



 
                    
                
Ред. PT153
PlealoadGen() сохраняет абсолютно всё: модельки звуки, текстуры.
local integer l = StringLength(s)
local string sub = SubString(s, l - 3, l - 1)
call Preload(s)
if sub == "md" or sub == "MD" then
call DestroyEffect(AddSpecialEffect(s, 0, 0))
endif
endfunction
Можно схитрить, сделать по pld скрипту для каждого героя, а в таверне продавать пустышки - при выборе героя, вызываем pld скрипт, после подгрузки - секунды 3, создаем героя для игрока.
Ред. PT153
Но важно чтобы юнита видели игроки - иначе модели и звуки с иконками и текстом не подгрузятся...
При пике подгружайте все данные этого героя.
Тем более сделать через preloader скрипт ничего не стоит автоматически, все сделает для вас движок.
Имея файла задаете исходя из id героя (или даммика который продается в таверне), так не понадобится делать базу данных...