Вопрос энтузиастам.
Стоит задача, определить в какой версии Warcraft III запущена карта. И если она запущена в актуальной версии (1.32+), то использовать новую функцию, появившуюся в этой версии. При этом код карты должен компилироваться и на старой (1.26) и на новой (1.32+) версиях.
Для определения версии я пока только придумал использовать следующий код, основанный на том, что раньше Siege Engine требовал 3 пищи, а сейчас 4 пищи:
//===========================================================================
//Узнаём версию игры
//===========================================================================
function IsOld126Version takes nothing returns boolean
return GetFoodUsed('hmtt')==3 //Самоходная мортира (Siege Engine)
endfunction
Но баланс может поменяться в одной из будущих версий, это выглядит не надёжно.
Для вызова новых функций без потери успешной компиляции в старых версиях можно использовать функцию:
if not(IsOld126Version) then
call ExecuteFunc("BlzChangeMinimapTerrainTex")
endif
Но таким образом можно только запустить функции, которые не имеют аргументов.
Вопросы:
- Есть ли более надёжный способ узнать версию игры?
- Можно ли как-то использовать ExecuteFunc с аргументами?
- Можно ли включить в карту каким либо образом описание функции BlzChangeMinimapTerrainTex(string s) без полной подмены файла common.j?
Принятый ответ
Да. Вызвать новые функции можно. Вот здесь подробнее, как это сделать, на примере задачи по установке preview:
`
ОЖИДАНИЕ РЕКЛАМЫ...
Чтобы оставить комментарий, пожалуйста, войдите на сайт.
Это довольно таки круто
Отредактирован Волчачка
Ну а аргументы передаешь тупо через глобалки, но полную совместимость ты не получишь, карта будет не полноценной на одной из версий.
Отредактирован Берги
12 - 126, 24 - рефордж
Отредактирован ScorpioT1000
придется весь common.j из 1.32 тащить к себе
Не вижу минусов у bj_MAX_PLAYER_SLOTS
Отредактирован Берги
Отредактирован ScorpioT1000
Отредактирован PT153
ScorpioT1000:
Отредактирован makkad