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.
Отредактировано Oxygen D, 20.12.2011 в 15:19.
|