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

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

Ответ
 
Anufis

offline
Опыт: 6,290
Активность:
Наложение текста в мультиборде
Что может быть причиной того, что в мультиборде в одной ячейке текст накладывается сам на себя и становится нечитабельным?
То есть вносится значение 35, потом например 45 в ту же ячейку, и они получаются наложены друг на друга.

Код, если надо
Код:
library SpellDataTable initializer Init uses Misc

private hashtable HH=InitHashtable()
multiboard array SDT
//номер игрока*100000+0 - количество записей
//номер игрока*100000+x - id записи

nothing SpellDataTableUpdate(player p) {
  integer pid=GetPlayerId(p)
  integer i=0
  integer n=LoadInteger(HH,pid*100000,0)
  integer id
  if n==0 then
    MultiboardSetRowCount(SDT[pid],1)
  else
    MultiboardSetRowCount(SDT[pid],n)
  endif
  loop
    exitwhen i>n
    MultiboardSetItemWidth(MultiboardGetItem(SDT[pid],i,0),0.15)
    MultiboardSetItemWidth(MultiboardGetItem(SDT[pid],i,1),0.03)
    MultiboardSetItemValue(MultiboardGetItem(SDT[pid],i,0),LoadStr(HH,pid*100000+i+1,1))
    MultiboardSetItemValue(MultiboardGetItem(SDT[pid],i,1),LoadStr(HH,pid*100000+i+1,2))
    i++
  endloop
}

nothing RemoveTrack(player p,integer id) {
  integer id0=GetPlayerId(p)*100000
  integer n=LoadInteger(HH,id0,0)
  integer i=1
  integer q=0
  loop
    exitwhen i>n || q!=0
    if LoadInteger(HH,id0+i,0)==id then
      FlushChildHashtable(HH,id0+i)
      q=i
    endif
    i++
  endloop
  if q==0 then
    return
  endif
  i=q+1
  loop
    exitwhen i>n
    SaveInteger(HH,id0+i-1,0,LoadInteger(HH,id0+i,0))
    SaveStr(HH,id0+i-1,1,LoadStr(HH,id0+i,1))
    SaveStr(HH,id0+i-1,2,LoadStr(HH,id0+i,2))
    SaveTimerHandle(HH,id0+i-1,3,LoadTimerHandle(HH,id0+i,3))
    i++
  endloop
  FlushChildHashtable(HH,id0+n)
  SaveInteger(HH,id0,0,n-1)
  SpellDataTableUpdate(p)
}

integer AddTrackBasic(player p,integer id) {
  integer id0=GetPlayerId(p)*100000
  integer n=LoadInteger(HH,id0,0)
  integer i=1
  loop
    exitwhen i>n
    if LoadInteger(HH,id0+i,0)==id then
      return i
    endif
    i++
  endloop
  n++
  SaveInteger(HH,id0,0,n)
  SaveInteger(HH,id0+n,0,id)
  return n
}

nothing AddValueTrack(player p,integer id,string name,string value) {
  integer id0=AddTrackBasic(p,id)+GetPlayerId(p)*100000
  SaveStr(HH,id0,1,name)
  SaveStr(HH,id0,2,value)
  SpellDataTableUpdate(p)
}

nothing AddCooldownTrack_f() {
    timer t=GetExpiredTimer()
    integer tid=GetHandleId(t)
    string name=LoadStr(udg_h,tid,1)
    integer time=LoadInteger(udg_h,tid,2)
    player p=LoadPlayerHandle(udg_h,tid,3)
    integer id=LoadInteger(udg_h,tid,4)
    if time>0 then
      AddValueTrack(p,id,name,Time2Str(time))
      SaveInteger(udg_h,tid,2,time-1)
    else
      RemoveTrack(p,id)
      FlushChildHashtable(udg_h,tid)
      DestroyTimer(t)
    endif
    t=null
}

nothing AddCooldownTrack(player p,integer id,string name,real time) {
    integer id0=AddTrackBasic(p,id)+GetPlayerId(p)*100000
    timer t
    integer tid
    t=LoadTimerHandle(HH,id0,3)
    if t!=null then
      tid=GetHandleId(t)
      PauseTimer(t)
    else
      t=CreateTimer()
      tid=GetHandleId(t)
      SaveTimerHandle(HH,id0,3,t)
    endif
    SaveStr(udg_h,tid,1,name)
    SaveInteger(udg_h,tid,2,R2I(time)-1)
    SavePlayerHandle(udg_h,tid,3,p)
    SaveInteger(udg_h,tid,4,id)
    AddValueTrack(p,id,name,Time2Str(time))
    TimerStart(t,1.,true,function AddCooldownTrack_f)
    t=null
}

nothing InitSpellDataTable(player p) {
    integer pid=GetPlayerId(p)
    SDT[pid]=CreateMultiboard()
    MultiboardSetTitleText(SDT[pid],"0:00:00")
    MultiboardSetRowCount(SDT[pid],0)
    MultiboardSetColumnCount(SDT[pid],2)
    MultiboardSetItemsStyle(SDT[pid],true,false)
    MultiboardDisplay(SDT[pid],false)
    MultiboardMinimize(SDT[pid],false)
}

private nothing Init2() {
    integer i=0
    loop
      exitwhen i>11
      InitSpellDataTable(Player(i))
      i++
    endloop
}

private nothing Init() {
    trigger tr=CreateTrigger()
    TriggerRegisterTimerEventSingle(tr,0.01)
    TriggerAddAction(tr,function Init2)
}

endlibrary

Отредактировано Anufis, 04.04.2014 в 19:18.
Старый 04.04.2014, 19:12
Borodach

offline
Опыт: 5,774
Активность:
Anufis, значит не в > ту же ячейку
Старый 04.04.2014, 19:17
Anufis

offline
Опыт: 6,290
Активность:
Цитата:
Сообщение от Borodach
~Anufis, значит не в > ту же ячейку

У меня всего 2 столбца.
Старый 04.04.2014, 19:22
Ответ

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

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

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

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



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