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.
|