1. 程式人生 > >實現彈出對話方塊選擇武將

實現彈出對話方塊選擇武將

//武將名稱列表
string array wujiang_name
//武將名稱對應的id列表
integer array wujiang_id
//技能名稱1,對應udg_omg1
string array jn_name1
//技能名稱2,對應udg_omg2
string array jn_name2
//技能名稱3,對應udg_omg3
string array jn_name3
//技能名稱4,對應udg_omg4
string array jn_name4
//5個元素組成一個武將。第1,2,3,4,5個元素分別對應武將id,技能1,技能2,技能3,技能4
integer array suijiwujiang
//每個玩家待選武將數量

integer selNum=3

//技能id列表

integer array udg_omg1
integer array udg_omg2
integer array udg_omg3
integer array udg_omg4

//初始化待選武將陣列
function init_array_suijiwujiang takes nothing returns nothing
local integer suijiwujiang_maxLength = 10 * selNum
local integer idx = 0
//suijiwujiang ,第1,2,3,4,5個元素分別對應武將id,技能1,技能2,技能3,技能4。最大值分別為:40,39,34,29,32
loop
//隨機武將
set suijiwujiang[5*idx+1] = GetRandomInt(1,40)
//隨機技能1
set suijiwujiang[5*idx+2] = GetRandomInt(1,39)
//隨機技能2
set suijiwujiang[5*idx+3] = GetRandomInt(1,34)
//隨機技能3
set suijiwujiang[5*idx+4] = GetRandomInt(1,29)
//隨機技能4
set suijiwujiang[5*idx+5] = GetRandomInt(1,32)

//bug技能校驗
//動地跺(張飛,典韋)/鬼神之力(呂布)+臥龍光線(諸葛亮)=無限光線
loop
exitwhen suijiwujiang[5*idx+5] != 23  //技能4不是臥龍光線
exitwhen not (suijiwujiang[5*idx+2] == 18 or suijiwujiang[5*idx+3] == 31) //沒有動地跺和鬼神之力
set suijiwujiang[5*idx+5] = GetRandomInt(1,32)
endloop
//小分身(太史慈)+大分身(魏延)=無限分身
loop
exitwhen suijiwujiang[5*idx+5] != 31  //技能4不是9分身
exitwhen suijiwujiang[5*idx+3] != 33 //技能2不是影分身
set suijiwujiang[5*idx+5] = GetRandomInt(1,32)
endloop
//動地跺(張飛,典韋)/鬼神之力(呂布)+天崩地裂(徐庶)=無限天崩地裂
loop
exitwhen suijiwujiang[5*idx+5] != 15  //技能4不是天崩地裂
exitwhen not (suijiwujiang[5*idx+2] == 18 or suijiwujiang[5*idx+3] == 31) //沒有動地跺和鬼神之力
set suijiwujiang[5*idx+5] = GetRandomInt(1,32)
endloop
//白熱(許褚)/狂戰士(張飛)+無雙(趙雲)=30秒白熱
loop
exitwhen suijiwujiang[5*idx+2] != 29  //技能1不是白熱
exitwhen not (suijiwujiang[5*idx+3] == 18 or suijiwujiang[5*idx+5] == 29) //沒有狂戰士(張飛)和無雙(趙雲)
set suijiwujiang[5*idx+2] = GetRandomInt(1,39)
endloop
//9樓不能有五月雨斬,不然掉不下來
loop
exitwhen idx/3 + 1 != 9 //不是9樓
exitwhen suijiwujiang[5*idx+3] != 1  //技能2不是五月雨斬
set suijiwujiang[5*idx+3] = GetRandomInt(1,34)
endloop

set idx = idx + 1
exitwhen idx >= suijiwujiang_maxLength
endloop


endfunction

//點選按鈕觸發的事件
function dialog_click_Action takes nothing returns nothing
local player player_temp = GetTriggerPlayer()
local integer playerId = GetConvertedPlayerId(player_temp)
local integer wujiang_i = 0
local rect rct_JiDi=null
local unit wujiang_temp = null
if playerId < 7 then 
set  rct_JiDi = gg_rct_SguoJiDi
else
set  rct_JiDi = gg_rct_WguoJiDi
endif
    loop
        if GetClickedButton() == dialog_Button[wujiang_i] then
            exitwhen true
        endif
set wujiang_i = wujiang_i + 1
        exitwhen wujiang_i >= 10*selNum
    endloop
call CreateNUnitsAtLoc( 1, wujiang_id[suijiwujiang[5*wujiang_i + 1]], player_temp, GetRectCenter(rct_JiDi), bj_UNIT_FACING)
set wujiang_temp = GetLastCreatedUnit() 
call SetHeroUnit(playerId,wujiang_temp)
call SelectUnitForPlayerSingle(wujiang_temp,player_temp)
call UnitAddAbilityBJ(udg_omg1[suijiwujiang[5*wujiang_i+2]],wujiang_temp)
call UnitAddAbilityBJ(udg_omg2[suijiwujiang[5*wujiang_i+3]],wujiang_temp)
call UnitAddAbilityBJ(udg_omg3[suijiwujiang[5*wujiang_i+4]],wujiang_temp)
call UnitAddAbilityBJ(udg_omg4[suijiwujiang[5*wujiang_i+5]],wujiang_temp)
//除錯捆仙無限水元素
//call UnitAddAbilityBJ(udg_omg1[5],wujiang_temp)
//除錯五月雨斬
//call UnitAddAbilityBJ(udg_omg2[1],wujiang_temp)
//除錯十字連斬
//call UnitAddAbilityBJ(udg_omg1[35],wujiang_temp)
//call SetHeroLevel(wujiang_temp, 25, true )
//call DisplayTextToPlayer(Player(1),0,0,"你選擇英雄")
endfunction

//初始化對話方塊,並顯示給玩家選擇英雄
function show_Dialog_wujiang takes nothing returns nothing
local integer idx = 1
local integer selIdx = 0
//待選武將指標
local integer wujiang_i = 0
local player player_temp = null
local integer playerId = 0
call init_array_suijiwujiang()
loop
if idx > 5 then 
set player_temp = Player(idx + 1)
else
set player_temp = Player(idx)
endif
set playerId = GetConvertedPlayerId(player_temp)
set gg_trg_button[playerId] = CreateTrigger()
set dialog_wujiangxuanze[playerId] = DialogCreate()
call DialogSetMessageBJ(dialog_wujiangxuanze[playerId], I2S(idx)+"樓玩家請選擇武將")
set selIdx = 0
loop
set dialog_Button[wujiang_i] = DialogAddButtonBJ(dialog_wujiangxuanze[playerId], wujiang_name[suijiwujiang[5*wujiang_i+1]]+ " ( "+jn_name1[suijiwujiang[5*wujiang_i+2]]+" ,"+jn_name2[suijiwujiang[5*wujiang_i+3]]+" ,"+jn_name3[suijiwujiang[5*wujiang_i+4]]+" ,"+jn_name4[suijiwujiang[5*wujiang_i+5]]+" )")
set wujiang_i = wujiang_i + 1
set selIdx = selIdx + 1
exitwhen selIdx >= selNum
endloop
call TriggerRegisterDialogEvent( gg_trg_button[playerId] , dialog_wujiangxuanze[playerId])
call TriggerAddAction(gg_trg_button[playerId],function dialog_click_Action)
//set Cai_Dialog_Action[pid] = TriggerAddAction(Cai_Dialog_Trigger[pid],function Cai_Dialog_Event)
call DialogDisplay( player_temp, dialog_wujiangxuanze[playerId], true )
set idx = idx + 1
exitwhen idx >= 11
endloop

endfunction

最後的效果圖: