XGM Forum
Сайт - Статьи - Проекты - Ресурсы - Блоги

Форуме в режиме ТОЛЬКО ЧТЕНИЕ. Вы можете задать вопросы в Q/A на сайте, либо создать свой проект или ресурс.
Вернуться   XGM Forum > Warcraft> Академия: форум для вопросов> Jass
Ник
Пароль
Войти через VK в один клик
Сайт использует только имя.

Закрытая тема
 
marsh123
Member+
offline
Опыт: 1,219
Активность:
Запутался в MultiBoard :(
Пытаюсь научиться Джассу, начал писать свою МБ на джасс ( читал статью Сергея ).

Есть: Карта на 5 игроков, если все игроки играют, то МБ прекрасно работает( пока что она выводит только ник и его цвет, а если пропущен игрок, то там остается пустое место, а игрок далее, который не пропущен пишется в никуда, я знаю в чем проблема, но не знаю как исправить..)

Написал 2 функции:
1)Эта функция раскрашивает имя игрока в зависимости от ID и запоминает
2)Непосредственно заполняет МБ
Код:
function PCO takes integer id returns string
  local string s
  set s = GetPlayerName(Player(id))
  if id==0 then
    set s = "|cFFFF0000" + s + "|r"
  endif
  if id==1 then
    set s = "|cFF0000FF" + s + "|r"
  endif
  if id==2 then
    set s = "|cFF57ffd9" + s + "|r"
  endif
  if id==3 then
    set s = "|cFF812DAD" + s + "|r"
  endif
  if id==4 then
    set s = "|cFFfff833" + s + "|r"
  endif
  return s
endfunction

function NIMB takes integer o returns nothing
  local integer i = 0
  local string pn
  loop
    exitwhen i==o
    if GetPlayerSlotState(Player(i)) == PLAYER_SLOT_STATE_PLAYING then
      set pn = PCO(i)
      call MultiboardSetItemValueBJ(udg_MyMB, 1, i+1, pn)
    endif
    set i = i + 1
  endloop
endfunction


Проблема здесь:
call MultiboardSetItemValueBJ(udg_MyMB, 1, i+1, pn)

Это будет работать только если все игроки играют..

Посоветуйте пожалуйста что туда можно записать вместо I+1, чтобы все работало .?

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

ПСС Джасс начал учить сегодня утром, поэтому ногами не пинать о_О

Отредактировано ShadoW DaemoN, 29.11.2008 в 16:41.
Старый 29.11.2008, 15:46
Van Damm
wait... what?
offline
Опыт: 22,268
Активность:
вопрос 1: что передается параметром в функцию NIMB? количество игроков? тогда должно все работать
вопрос 2: что именно работает не так, когда игрок выходит?
  1. локалка pn не надо - можно сразу передавать результат функции
  2. вместо функции, возвращающей цветное имя, лучше иметь массив строк с цветными именами, заполняемый при старте карты
  3. вместо MultiboardSetItemValueBJ использовать MultiboardSetItemValue, тогда нумерация игроков идет с нуля
Старый 29.11.2008, 16:04
J
expert
offline
Опыт: 48,447
Активность:
Старый 29.11.2008, 16:09
ScorpioT1000
Работаем
offline
Опыт: отключен
Цитата:
exitwhen i==o

почему о а не ноль?

// видимо это 0 иначе бы у него были синтаксические проблемы...
//возможно они есть? ©Sc

Отредактировано ScorpioT1000, 29.11.2008 в 16:15.
Старый 29.11.2008, 16:09
J
expert
offline
Опыт: 48,447
Активность:
ScorpioT1000 какия разница, они ведь похожы^^
marsh123 т.е. создавай свой массив _играющих_ играков в котором они расположены попорядку, также запоминай наксимальный индекс этого массива (мак количество играющих играков-1), и во всех операциях с мультибордом используй этот массив, через цыкл от 0, до max
Старый 29.11.2008, 16:13
marsh123
Member+
offline
Опыт: 1,219
Активность:
Jon
Да я вообще другое спрашивал.. Какая разница делать через массив или как я, я если буду делать через массив, то все равно заюзаю i+1 тк другого не знаю.. Вот и просил посоветовать что юзать вместо i+1


Пытаюсь сам что-то реализовать, не используя готовые примеры..

Цитата:
1) локалка pn не надо - можно сразу передавать результат функции
2) вместо функции, возвращающей цветное имя, лучше иметь массив строк с цветными именами, заполняемый при старте карты
3) вместо MultiboardSetItemValueBJ использовать MultiboardSetItemValue, тогда нумерация игроков идет с нуля


Советы по оптимизации кода, спасибо конечно, но сперва может сделать код работоспособным?

Цитата:
почему о а не ноль?

А зачем 0? о в данном случае количество слотов на карте, в моем случае 5, не понимаю логики, зачем там 0?
Старый 29.11.2008, 16:27
marsh123
Member+
offline
Опыт: 1,219
Активность:
С какой буквой? i и o оба Integer, ты ф-цию видел?
ПС Все без ошибок компилится, есть пока только 1 проблема, я ее описал в 1 посте
Старый 29.11.2008, 16:37
ShadoW DaemoN

offline
Опыт: 37,078
Активность:
ScoprioT1000, посмотри список передаваемых параметров в функцию NIMB. Там есть integer o =)

marsh123, добавь новую переменную в функции NIMB, которая будет увеличиваться только если игрок i играет. Что-то вроде такого:
Код:
function NIMB takes nothing returns nothing  // takes integer o
  local integer i = 0
  local integer n = 0  // starting number of row
  local multiboarditem mbi = null
  loop
    exitwhen i == 5  // exitwhen i==o
    if GetPlayerSlotState(Player(i)) == PLAYER_SLOT_STATE_PLAYING then
      // call MultiboardSetItemValueBJ(udg_MyMB, 1, n, PCO(i))
      set mbi = MultiboardGetItem(udg_MyMB, n, 0)
      call MultiboardSetItemValue(mbi, PCO(i))
      call MultiboardReleaseItem(mbi)
      set n = n + 1
    endif
    set i = i + 1
  endloop
  set mbi = null
endfunction


//ясно.. вот почему существуют нормы кодинга =) ©Sc
Старый 29.11.2008, 16:38
marsh123
Member+
offline
Опыт: 1,219
Активность:
ShadoW DaemoN
Большое спасибо, как раз то, что и решит мою проблему :)

marsh123 добавил:
Да, добавил пару строчек в ф-цию с еще 1 переменной и все заработало, еще раз спасибо :)
Старый 29.11.2008, 16:43
Закрытая тема

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы можете скачивать файлы

BB-коды Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход



Часовой пояс GMT +3, время: 19:38.