Обязательно ли нужно удалять способность после добавления?
	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 скриптов.
`
ОЖИДАНИЕ РЕКЛАМЫ...
0
19
7 лет назад
0
Похожие вопросы:

ответ
Nelloy, будет но для этого данные нужно синхронизировать, для ваших сейв\лоадов есть давно проверенная система, которая не требует мемхака - Data Manager, не надо никакого мемхака. Все понятно и просто, вот неужели нельзя изучить всю мат часть по сейвам прежде чем пороть горячку?
ответ
Karp:
pro100master:
Мда слышал про GetLocalPlayer() вот и будет создавать для 1 игрока в сейв
cлыщал, но если бы знал как юзать, то не спрашивал бы)
ответ
Проблема в функции SaveLoad_EncodeVerify.
ответ
ScopteRectuS, у тебя где то перезаписывается bj_lastCreatedUnit
причём происходит это после первой итерации GroupEnumUnitsInRange
а вообще не стоит юзать стандартные бж переменные
т.к. они могут конфликтовать с другими системами
используй приватные переменные
если после перехода на приватные глобалки проблема останется то скопируй систему на отдельную карту и кинь эту карту сюда
буду тестить разные варианты

0
32
7 лет назад
0
Кривоватая подгрузка, удалять не обязательно. Лучше юзать preload без этаких костылей, темболее в JASS есть механизмы автоматического создания pld скриптов.
Принятый ответ
0
21
7 лет назад
Отредактирован scopterectus
0
quq_CCCP, не совсем понимаю.
	function PreloadAbility takes integer id returns boolean
		return UnitAddAbility( unitPreloader, id )
	endfunction
А что такое pld скрипты, google ничего не выдал..
а что насчёт call SetUnitInvulnerable( ... ), call UnitAddAbility( unit, 'Avul' )
2
16
7 лет назад
2
А что за прелоад способностей? Зачем это нужно?
0
15
7 лет назад
0
avuremybe:
А что за прелоад способностей? Зачем это нужно?
Чтобы при изучение способности героем не было лага
2
16
7 лет назад
2
Ethernet, и в чем же он состоит?
2
27
7 лет назад
Отредактирован MpW
2
avuremybe, предполагаю для того, чтобы не было лагов. Помню, давно были темы с многоуровневыми абилками (более 10 левел и до 100 левел). Можно было делать интересные фишки. Если юниту в первый раз дать эту абилку, то комп подвиснет на несколько секунд, а на более слабых компах и больше времени. А все потому, что абилка загружается в игру, при повторном добавлении лагов не замечается. Поэтому сделали такую фишку, что при инициализации подзагружают способности все многоуровневые способности. Замечали ли вы когда нибудь в некоторых картах подвисания при старте игры? например, в доте. и прочее.
4
32
7 лет назад
4
Я про эток:
call PreloadGenClear()
call PreloadGenStart()
call TriggerSleepActions(2.00)
call PreloadGenEnd("save//mydata.pld")
Вызываем этот код пред созданием героя, чуствуем просадку фпс, побегали, покастовали спеллы (вейт нужно подольше). Идем смотреть что в текстовик сохранилось, там будет полный список того что загружал движок.
Затем Preloader("save//mydata.pld") - это вызов этого скрипта, который загрузит в память все что указанно в этом скрипте.
Это используется в кампаниях.
0
21
7 лет назад
0
quq_CCCP, куда должен сохранится данный файл? Здесь ничего не сохранилось. Или файл не сюда сохраняется?
	...\Program Files (x86)\WarCraft 3\Save\
0
32
7 лет назад
0
В папку save внутри варкравта
Где 2 тебя папка вара? В ней будет папка save ( там данные кампаний хранятся, типо сколько игрок пошел, че есть у героя). Ну туда сохранит, а так путь можно указать любой, который вздумается, т.к прилоду пофиг, хоть в раздел с виндой...
0
28
7 лет назад
0
quq_CCCP:
Кривоватая подгрузка, удалять не обязательно. Лучше юзать preload без этаких костылей, темболее в JASS есть механизмы автоматического создания pld скриптов.
У меня в карте 100500 способностей. Можно ли их всех тупо добавить одному юниту для подгрузки (без удаления)?
0
21
7 лет назад
Отредактирован scopterectus
0
PT153, зависит от их максимального уровня. Возможно Вам понадобится подгружать не 100500, а уже 50250 способностей.
0
28
7 лет назад
Отредактирован PT153
0
Я про эток:
call PreloadGenClear()
call PreloadGenStart()
call TriggerSleepActions(2.00)
call PreloadGenEnd("save//mydata.pld")
Вызываем этот код пред созданием героя, чуствуем просадку фпс, побегали, покастовали спеллы (вейт нужно подольше). Идем смотреть что в текстовик сохранилось, там будет полный список того что загружал движок.
Затем Preloader("save//mydata.pld") - это вызов этого скрипта, который загрузит в память все что указанно в этом скрипте.
Это используется в кампаниях.
Можно сделать триггер на команду в чат. Побегал за всех героев, покастовал все спелы, написал команду, файл сохранился.
PlealoadGen() сохраняет абсолютно всё: модельки звуки, текстуры.
Модели всё же стоит ещё и создавать.
Я просто беру всё то, что записал прелоад в файле, копирую в триггер, и все Preload заменяю на PreloadFile.
function PreloadFile takes string s returns nothing
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
Теперь пролагов при касте спелов и прочего не будет.
PlealoadGen(), насколько я знаю, не подгружает САМИ способности, поэтому их нужно добавлять.
0
32
7 лет назад
0
PT153, ну у меня тоже дофига, правда я разделил добавление таймером - можно уперется в лимит операций.
Можно схитрить, сделать по pld скрипту для каждого героя, а в таверне продавать пустышки - при выборе героя, вызываем pld скрипт, после подгрузки - секунды 3, создаем героя для игрока.
0
28
7 лет назад
Отредактирован PT153
0
ScopteRectuS:
PT153, зависит от их максимального уровня. Возможно Вам понадобится подгружать не 100500, а уже 50250 способностей.
Добавлять-то можно во время инициализации. Я о том, что у юнита возможно есть лимит способностей. А тогда их и надо удалять (Ваш вопрос).
0
32
7 лет назад
0
Про лимит ничего не знаю, не достигал его.
Но важно чтобы юнита видели игроки - иначе модели и звуки с иконками и текстом не подгрузятся...
0
28
7 лет назад
0
quq_CCCP:
Про лимит ничего не знаю, не достигал его.
Но важно чтобы юнита видели игроки - иначе модели и звуки с иконками и текстом не подгрузятся...
То есть надо подгружать после инициализации?
0
32
7 лет назад
0
PT153, увы да, но зачем подгружать все? Если и половины в игре не будет?
При пике подгружайте все данные этого героя.
Тем более сделать через preloader скрипт ничего не стоит автоматически, все сделает для вас движок.
Имея файла задаете исходя из id героя (или даммика который продается в таверне), так не понадобится делать базу данных...
0
21
6 лет назад
0
quq_CCCP:
Я про эток:
call PreloadGenClear()
call PreloadGenStart()
call TriggerSleepActions(2.00)
call PreloadGenEnd("save//mydata.pld")
Вызываем этот код пред созданием героя, чуствуем просадку фпс, побегали, покастовали спеллы (вейт нужно подольше). Идем смотреть что в текстовик сохранилось, там будет полный список того что загружал движок.
Затем Preloader("save//mydata.pld") - это вызов этого скрипта, который загрузит в память все что указанно в этом скрипте.
Это используется в кампаниях.
Понял, почему не работало. Нужно писать "save\\mydata.pld"
Чтобы оставить комментарий, пожалуйста, войдите на сайт.