Хитрости и фичи
1. Если при оформлении MultiBoard’а в одном из его действий в
значении столбца/строчки поставить "0", то в этом случае действие произойдет на
все столбики/строчки
Пример:
the color for !!Last created multiboard!! item in column !!2!!, row !!0!! to
(!!100%!!, !!0%!!, !!0%!!) with !!0%!! transparency.
|
.
В этом случае весь текст, на всех строчках во 2-ом столбике станет красным,
тоже правило действует если указать "0" в номере строчки.
Если же указать "0"
и в столбике, и в строчке, то в этом случае изменение произойдет со всем
multiboard’ом.
2. Вы наверно уже видели Multiboard в
карте Dota? Вы наверно обратили внимание, что Multiboard не показывает
неиграющих игроков... как же это сделать? очень просто, сначала необходимо
создать 2 переменных:
- Одна обычная, типа целочисленная переменная (integer), назовем ее
"player"
- Одна массив, типа игрок (player), назовем ее "MBplayer"
При событии "Map Initialization" делаем следующее:
**Событие**
Map initialization
**Условие****Действие**
Set **player** = 0
For each (Integer A) from **1** to **12**, do (Actions)
Цикл - Действия
If (All Conditions are True) then do (Then Actions) elsedo (Else Actions)
Если - Условие
((Player((**Integer A**))) slot status) равно "**Играет**"‚
То - Действия
Set **player** = (**player** + 1)
Set **MBplayer**[**player**] = (Player((**Integer A**)))
Иначе - Действия
И что же у нас получилось? Объясняю:
у нас получилось что player
стал равным количеству ТОЛЬКО ИГРАЮЩИХ игроков на карте.
А в переменную
MBplayer в значение [1] записан первый по номеру играющий игрок, в [2] - второй
по номеру, и т.д. но не обязательно, что в [1] записан первый игрок (красный),
т.к. его может не быть (он может не играть), а в [1] записан именно первый
ИГРАЮЩИЙ игрок, ну и т.д.
И зачем же это все нужно?
А всё очень просто, например, у нас будет
Multiboard, показывающий характеристику игроков (ну как в картах жанра
AoS). Пусть это будет что-то вроде таблицы (правда Multiboard и есть
таблица) заголовки которой будут занимать... скажем... 2-е строчки, а дальше
идет перечисление игроков, а потом в самом низу таймер, показывающий время
игры...
Общий размер MultiBoard’а у нас получается из:
- 2 - строки заголовков
- количество играющих игроков
- 1 - строчка для таймера
В общей сумме получается так: 3 +
player строк.
это мы узнали с каким количеством строк нужно создавать
Multiboard, количество столбиков уже зависит от самого вашего
Multiboard'a...
Далее, зачем нам понадобилась переменная MBplayer?
Т.к. есть такая функция "Преобразование - Convert Player Index To Player",
она может пригодиться для Multiboard’а, а именно в использовании цикла на
распределение очков убийств. Хотя эта функция определяет игрока по его номеру,
такое в данном случае не выйдет, потому что у нас совершено иной набор игроков и
потому вместо этой функции мы будем использовать переменную MBplayer, которая
содержит тот набор, который нам нужен.
Все циклы используем от 1 до player,
потому что больше не требуется. Ведь у нас все равно игроков не больше
player’а.
[indent]Примечание: Если вы еще будете где-то
использовать какие-либо циклы с действиями над всеми игроками, используйте его
также от 1 до player’а, т.к., опять повторю - "больше не
требуется".[/indent]
Остался таймер... советую посмотреть эту тему
(xgm.ru/forum/showthread.php?t=2926), там вы поймете, как делать таймер. Но т.к.
строка таймера у нас всегда разная, то она будет всегда равна 3+player. Вот
вроде бы и примерное объяснение такого Multiboard’а...
3. Как
сделать для каждого игрока MultiBoard отдельно?
Очень распространённый
вопрос, но сделать это легко... Однако только через jass...
Для начала нам
понадобится переменная-массив типа multiboard, и назовем ее
"MB".
Нужно при инициализации использовать код:
localinteger i = 1call Trigg
erSleepAction( 0.01 )
loopexitwhen i > 12 __set udg_MB__
= CreateMultiboardBJ( ROWS, COLUMNS, "TITLE" )
call MultiboardDisplayBJ( false, udg_MB__ )
set i = i + 1endloop
__se
t i = 1loopexitwhen i > 12if Co
nvertedPlayer(i) == GetLocalPlayer() then __call MultiboardDisplayBJ( true, udg_MB__ )
endifset i = i + 1endloop
__
|
Данный код создаст 12 MultiBoard’ов, каждый из которых будет помещен
в переменную MB, от 1 до 12 ячеек. Мультиборд из первой ячейки будет
показан 1-ому игроку, MultiBoard из 2-ой ячейки будет показан 2-ому и
т.д.
Если же мы хотим изменить multiboard у 4-ого игрока, надо
изменять MB[4], если же хотим изменить multiboard у всех игроков,
то надо будет изменить каждую ячейку переменой MB. Лучше конечно
использовать цикл...
Примечание: Вообще-то было бы лучше, если будет использован пункт
2 из данной части статьи, и при последующем создании multiboard’а он будет
создаваться циклом не для всех игроков (играющих и не играющих), а для только
играющих, через цикл от 1 до player, потому что нет смысла показывать multiboard
игрокам, которые не играют.
Ну вот и все...