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

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

Ответ
 
Oxygen D
Вернулся
offline
Опыт: 5,180
Активность:
Мультибоард..
Вот код моей системы мультиборда. Проблема в том, что для игрока красного всё строится нормально, а для остальных получается билиберда.
» code
library MBQD initializer Init_MBQD requires MBfunc

 private multiboard array Quest_multiboard[PlayerCount]
 private constant string  Quest_null              = "null"
 private constant string  Quest_hold              = "hold"
 private constant integer Quest_mb_rows           = 8
 private constant integer Quest_mb_cols           = 5
 private constant integer Start_Key               = 3
 private constant integer Last_Key                = 7
 private constant real    Quest_mb_text_w         = 25.0
 private constant string  Quest_mb_mode_view      = " Обзор"
 private constant string  Quest_mb_mode_choose    = " Выбор"
 private constant string  Quest_mb_title          = "Доска задач"
 private constant string  Quest_mb_not_aded       = " Нет задания"
 private constant string  Quest_mb_icon_quest     = "ReplaceableTextures\\CommandButtons\\BTNSpy.blp"
 private constant string  Quest_mb_icon_noquest   = "ReplaceableTextures\\CommandButtons\\BTNCancel.blp"
 private constant string  Quest_mb_icon_havequest = "UI\\Widgets\\Console\\Human\\human-minimap-ping-active.blp"
 private constant string  Quest_mb_array_like     = " >>>"
 private string array    Quest_mb_status[PlayerCount][Last_Key]
 private integer array   Quest_mb_quest_num[PlayerCount][Last_Key]
 private integer array   Quest_mb_quest_type[PlayerCount][Last_Key]
 private integer array   Quest_mb_array[PlayerCount]
 private integer array   Quest_mb_array_last[PlayerCount]
 private boolean array   Quest_mb_mode[PlayerCount]
 private constant real TimerPereodic = 0.10
 private timer UpTimer = CreateTimer()
 
 private function Quets_mb_Change_mode takes nothing returns nothing
  local integer id = GetPlayerId(GetTriggerPlayer())
   if Quest_mb_mode[id] == false then
    set Quest_mb_mode[id]=true
    set Quest_mb_array[id] = Start_Key
    call MBvalue(Quest_multiboard[id],1,Quest_mb_array[id],spc+Quest_mb_array_like+et)
    call MBvalue(Quest_multiboard[id],2,8,red+Quest_mb_mode_choose+et)
   else
    Quest_mb_mode[id]=false
    call MBvalue(Quest_multiboard[id],1,Quest_mb_array[id],spc+""+et)
    call MBvalue(Quest_multiboard[id],2,8,red+Quest_mb_mode_viwe+et)
    set Quest_mb_array[id] = Start_Key
   endif
 endfunction
 
 private function Quets_mb_key_down takes nothing returns nothing
  local integer id = GetPlayerId(GetTriggerPlayer())
   if Quest_mb_mode[id] == true then
    Quest_mb_array_last[id] = Quest_mb_array[id]
     if Quest_mb_array[id] >= Last_Key then
      set Quest_mb_array[id] = Start_Key
     else
      set Quest_mb_array[id] = Quest_mb_array[id] + 1
     endif
    call MBvalue(Quest_multiboard[id],1,Quest_mb_array_last[id],spc+""+et)
    call MBvalue(Quest_multiboard[id],1,Quest_mb_array[id],spc+Quest_mb_array_like+et)
   endif
 endfunction
 
 private function Quets_mb_key_up takes nothing returns nothing
  local integer id = GetPlayerId(GetTriggerPlayer())
   if Quest_mb_mode[id] == true then
    Quest_mb_array_last[id] = Quest_mb_array[id]
     if Quest_mb_array[id] <= Start_Key then
      set Quest_mb_array[id] = Last_Key
     else
      set Quest_mb_array[id] = Quest_mb_array[id] - 1
     endif
    call MBvalue(Quest_multiboard[id],1,Quest_mb_array_last[id],spc+""+et)
    call MBvalue(Quest_multiboard[id],1,Quest_mb_array[id],spc+Quest_mb_array_like+et)
   endif
 endfunction
 
 function GetNullMbKeys takes integer id returns integer
  local integer i = Start_Key
   loop
    exitwhen i > Last_Key
     if Quest_mb_status[id][i] == Quest_null then
      return i
     endif
    set i = i + 1
   endloop
  return 0
 endfunction
 
 function GetHoldMbKeys takes integer id returns integer
  local integer i = Start_Key
   loop
    exitwhen i > Last_Key
     if Quest_mb_status[id][i] == Quest_hold then
      return i
     endif
    set i = i + 1
   endloop
  return 0
 endfunction
 
  function CheckNullKey takes integer id,integer Key returns boolean
     if Quest_mb_status[id][Key] == Quest_null then
      return true
     else
      return false
     endif
  endfunction
  
  function CheckHoldKey takes integer id,integer Key returns boolean
     if Quest_mb_status[id][Key] == Quest_hold then
      return true
     else
      return false
     endif
  endfunction
 
 function SaveQuestToMbKey takes integer id,integer Key,integer qn,integer Quest_type_cond returns boolean
  local boolean isave = CheckNullKey(id,Key)
   if isave != false then
    set Quest_mb_status[id][Key] = Quest_hold
    set Quest_mb_quest_num[id][Key] = qn
    set Quest_mb_quest_type[id][Key] = Quest_type_cond
    return true
   else
    return false
   endif
 endfunction
 
 function RemoveQuestFromMbKey takes integer id,integer Key,integer qn returns boolean
  local boolean iremove = CheckHoldKey(id,Key)
   if iremove != false then
    set Quest_mb_status[id][Key] = Quest_null
    set Quest_mb_quest_num[id][Key] = 0
    set Quest_mb_quest_type[id][Key] = 0
    return true
   else
    return false
   endif
 endfunction
 
 function SaveQuestToMb takes integer id,integer qn,integer Quest_type_cond returns boolean
   local integer isave = GetNullMbKeys(id)
   if isave != 0 then
    set Quest_mb_status[id][isave] = Quest_hold
    set Quest_mb_quest_num[id][isave] = qn
    set Quest_mb_quest_type[id][isave] = Quest_type_cond
    return true
   else
    return false
   endif
 endfunction
 
 function RemoveQuestFromMb takes integer id,integer qn returns boolean
   local integer iremove = GetHoldMbKeys(id)
   if iremove != 0 then
    set Quest_mb_status[id][iremove] = Quest_null
    set Quest_mb_quest_num[id][iremove] = 0
    set Quest_mb_quest_type[id][iremove] = 0
    return true
   else
    return false
   endif
 endfunction
 
 private function UpdateMultiboard takes nothing returns nothing
  local integer i = 0
  local integer j = Start_Key
  local player  p = null
   loop
    exitwhen i > PlayerCount
     set p = Player(i)
     loop
      exitwhen j > Last_Key
       if Quest_mb_status[i][j] == Quest_hold then
        call MBvalue(Quest_multiboard[i],3,j,Quest_name[Quest_mb_quest_num[i][j]][Quest_mb_quest_type[i][j]])
        call MBitem(Quest_multiboard[i],2,j,Quest_mb_icon_havequest)
        else
        call MBvalue(Quest_multiboard[i],3,j,Quest_mb_not_aded)
        call MBitem(Quest_multiboard[i],2,j,Quest_mb_icon_noquest)
      endif
    set j = j + 1
    endloop
   set i = i + 1
  endloop
  set p = null
 endfunction
 
 private function Init_MBQD takes nothing returns nothing
  local integer i = 0
  local integer j = 0
  local integer c = 0
  local integer f = 1
  local player  p = null
  local trigger t1 = CreateTrigger()
  local trigger t2 = CreateTrigger()
  local trigger t3 = CreateTrigger()
   call Preload(Quest_mb_icon_quest)
   call Preload(Quest_mb_icon_noquest)
   call Preload(Quest_mb_icon_havequest)
   call TriggerSleepAction(0.1)
   loop
    exitwhen i>PlayerCount
     set p = Player(i)
     set Quest_multiboard[i] = CreateMultiboard()
      call MultiboardSetRowCount(Quest_multiboard[i], Quest_mb_rows)
      call MultiboardSetColumnCount(Quest_multiboard[i], Quest_mb_cols)
      call MultiboardSetTitleText(Quest_multiboard[i], Quest_mb_title)
           loop
            exitwhen c > Quest_mb_cols
             loop
              exitwhen f > Quest_mb_rows
                 call MBstyle(Quest_multiboard[i],c,f,true,false)
                set f=f+1
              endloop
            set c=c+1
           endloop
          set f=Start_Key
           loop 
            exitwhen f > Last_Key
              call MBwidth(Quest_multiboard[i],3,f,Quest_mb_text_w)
              call MBvalue(Quest_multiboard[i],3,f,Quest_mb_not_aded)
            set f=f+1
           endloop
              set f = Start_Key
               loop 
                exitwhen f > Last_Key
                 call MBwidth(Quest_multiboard[i],2,f,1.0)
                 call MBstyle(Quest_multiboard[i],2,f,false,true)
                set f = f + 1
              endloop
               call MBstyle(Quest_multiboard[i],2,1,false,true)
               call MBwidth(Quest_multiboard[i],2,1,1.0)
               call MBitem(Quest_multiboard[i],2,1,Quest_mb_icon_quest)
               call MBwidth(Quest_multiboard[i],3,1,10.0)
               call MBstyle(Quest_multiboard[i],3,1,true,false)
               call MBvalue(Quest_multiboard[i],3,1,spc+" Задания"+et)
            set c = 0
            set f = Start_Key
            loop
             exitwhen f > Last_Key
              set Quest_mb_status[i][f] = Quest_null
              set Quest_mb_quest_num[i][f] = 0
              set Quest_mb_quest_type[i][f] = 0
             set f = f + 1
            endloop
       set j = 1
      loop
       exitwhen j > Quest_mb_rows
         call MBwidth(Quest_multiboard[i],1,j,2.0)  
         call MBstyle(Quest_multiboard[i],1,j,true,false)
       set j = j + 1
      endloop
     call MBwidth(Quest_multiboard[i],2,8,5.0)
     call MBstyle(Quest_multiboard[i],2,8,true,false)
     call MBvalue(Quest_multiboard[i],2,8,red+Quest_mb_mode_viwe+et)
     call MBvalue(Quest_multiboard[i],1,8,spc+"Мод:"+et)
     call TriggerRegisterPlayerEvent(t1,p,EVENT_PLAYER_END_CINEMATIC)
     call TriggerRegisterPlayerEvent(t2,p,EVENT_PLAYER_ARROW_DOWN_DOWN)
     call TriggerRegisterPlayerEvent(t3,p,EVENT_PLAYER_ARROW_UP_UP)
     if GetLocalPlayer() == p then
       call MultiboardDisplay(Quest_multiboard[i],true)
     endif
    set i = i + 1
   endloop
   call TriggerAddAction(t1,function Quets_mb_Change_mode)
   call TriggerAddAction(t2,function Quets_mb_key_down)
   call TriggerAddAction(t3,function Quets_mb_key_up)
   call TimerStart(UpTimer,TimerPereodic,true,function UpdateMultiboard)
  set p  = null
  set t1 = null
  set t2 = null
  set t3 = null
 endfunction
 
endlibrary
Вся постройка МБ в функции Init_MBQD.
Миниатюры
Кликните на картинку для увеличения
Название:  goodboard.jpg
Просмотров: 95
Размер:  45.6 Кбайт  
Изображения
Тип файла: jpg badboard.jpg (1.16 Мбайт, 26 просмотров )

Отредактировано Oxygen D, 20.12.2011 в 15:19.
Старый 19.12.2011, 22:13
FellGuard
Losyash
offline
Опыт: 39,547
Активность:
iLold
по теме: откуда берётся переменная PlayerCount?
Старый 19.12.2011, 22:45
Nerevar
I'll be back!
offline
Опыт: 18,352
Активность:
MyRtZ, уж лучше разбираться в самом вджассе,чем в его начинке
Oxygen_D, Попробовал бы отладочными сообщениями выводить изменяющуюся у всех игроков информацию\ключевые моменты,от которых зависит постройка мб\значения в его ячейках
Старый 19.12.2011, 22:48
alexprey
познающий Unity
offline
Опыт: 68,501
Активность:
Oxygen_D:
Preload(Quest_mb_icon_quest)
Preload(Quest_mb_icon_noquest)
Preload(Quest_mb_icon_havequest)
Разве не должно быть call вначале???
Еще не понятно где зраниться PlayerCount. Сколько оно?
Oxygen_D:
Quest_mb_mode_viwe
view, не?
Ну вроде код нормальный
alexprey добавил:
MyRtZ:
Извините за нахальство, но автор больше похож на ленивого школьника который просит за него исправить ошибки, НЕТ?
нет. Просто он видимо ищет ошибку не в том месте.
Старый 19.12.2011, 22:53
Oxygen D
Вернулся
offline
Опыт: 5,180
Активность:
alexprey, PlayerCount = 11 11 игроков
Это просто константа integer которая находится в другом триггере.
Разве не должно быть call вначале???
У меня сжасс стоит, забыл выключить. Поэтому компилятор и пропустил этот момент.
view, не?
Ой:) Исправлю.
Oxygen D добавил:
Nerevar:
Попробовал бы отладочными сообщениями выводить изменяющуюся у всех игроков информацию\ключевые моменты,от которых зависит постройка мб\значения в его ячейках
Пробовал, вроде всё нормально выводит..
Старый 20.12.2011, 14:56
alexprey
познающий Unity
offline
Опыт: 68,501
Активность:
Oxygen_D, а пробовал запускать без дополнительных триггеров, типа апдейта?
Старый 21.12.2011, 08:54
Ответ

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

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

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

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



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