29 12
發新話題
打印

如何(有新問題)

[Close]
要支援多人既話要用布林陣列
假設一開頭可以買a裝而不能買b裝
設真值為false
如果false就買a裝 otherwise買b裝
事件可以用出售單位來模擬

TOP

///////////////////////sell item///////////////////////

function sell_point takes nothing returns nothing
    set sell_point = CreateTrigger()
    call TriggerRegisterAnyUnitEventBJ( sell_point, EVENT_PLAYER_UNIT_SELL_ITEM ) //任意單位出售物品
    call TriggerAddAction(sell_point, function sell_point2)
endfunction

function sell_point2 takes nothing returns nothing
    if ((GetItemTypeId(GetSoldItem()) == 'I000')) then //物品A被出售
        set point = false //全域變量point變成false
    else
    endif
endfunction

///////////////////////buy item///////////////////////

function buy_point takes nothing returns nothing
    set buy_point = CreateTrigger()
    call TriggerRegisterUnitEvent( buy_point, gg_unit_h000_0000, EVENT_UNIT_SELL ) //自定義商店0000出售單位
    call TriggerAddAction(buy_point, function buy_point2)
endfunction

function buy_point2 takes nothing returns nothing
    if ((IsUnitType(GetBuyingUnit(), UNIT_TYPE_HERO) == true)) then //購買者是英雄
        if ((point == false)) then //全域變量是false 即是沒人買過物品
            call UnitAddItemByIdSwapped( 'I000', GetBuyingUnit() ) //建立物品A給購買者
            set point = true //全域變量設為true
        else
            call UnitAddItemByIdSwapped( 'I001', GetBuyingUnit() ) //建立物品B給購買者
        endif
    else
    endif
endfunction

因為再看一次你的意思是物品A只能有一個  其餘買的都是物品B
所以布林值不設為陣列

[ 本帖最後由 Frayja 於 2014-5-19 12:54 編輯 ]

TOP

因為不知道你的商店是怎麼運作
所以條件上沒加上商店出售的是什麼單位

TOP

條件在最外圍加個if loop就行
你的意思是每個人買的時候  第一次就是物品a  然後買的時候都是物品b?

TOP

then 唔明個int有咩用

TOP

你既idea係 當int係0先可以買b
唔係0就只可以買a?

TOP

買左a 可唔可以買b1
另外呢個係針對個人定全部人
例如 a君買左a    b君只可以買b1?

TOP

一定要用布林
比個實例你  我買左a a1 a2 a3 a4  咁樣你既idea int係5
我賣左a3  int變左4
然後再買裝  就會a a1 a2 a4 a4
明唔明?

TOP

function sell_item takes nothing returns nothing
    set sell_item = CreateTrigger()
    call TriggerRegisterAnyUnitEventBJ( sell_item, EVENT_PLAYER_UNIT_SELL_ITEM ) //任意單位出售物品
    call TriggerAddAction(sell_item, function sell_item2)
endfunction

function sell_item2 takes nothing returns nothing
    if (((GetItemTypeId(GetSoldItem()) == 'I000') or (GetItemTypeId(GetSoldItem()) == 'I005'))) then //出售A/B
        set I[GetConvertedPlayerId(GetOwningPlayer(GetSellingUnit()))] = false // I對應A/B的布林值
    else
        if (((GetItemTypeId(GetSoldItem()) == 'I001') or (GetItemTypeId(GetSoldItem()) == 'I006'))) then //出售A1/B1
            set II[GetConvertedPlayerId(GetOwningPlayer(GetSellingUnit()))] = false // II對應A1/B1的布林值 如此類推
        else
            if (((GetItemTypeId(GetSoldItem()) == 'I002') or (GetItemTypeId(GetSoldItem()) == 'I007'))) then
                set III[GetConvertedPlayerId(GetOwningPlayer(GetSellingUnit()))] = false
            else
                if (((GetItemTypeId(GetSoldItem()) == 'I003') or (GetItemTypeId(GetSoldItem()) == 'I008'))) then
                    set IIII[GetConvertedPlayerId(GetOwningPlayer(GetSellingUnit()))] = false
                else
                    if (((GetItemTypeId(GetSoldItem()) == 'I004') or (GetItemTypeId(GetSoldItem()) == 'I009'))) then
                        set IIIII[GetConvertedPlayerId(GetOwningPlayer(GetSellingUnit()))] = false
                    else
                    endif
                endif
            endif
        endif
    endif
endfunction

function buy_item takes nothing returns nothing
    set buy_item = CreateTrigger()
    call TriggerRegisterUnitEvent( buy_item, gg_unit_n000_0000, EVENT_UNIT_SELL ) //自定義商店出售單位
    call TriggerAddAction(buy_item, function buy_item2)
endfunction

function buy_item2 takes nothing returns nothing
    if ((IsUnitType(GetBuyingUnit(), UNIT_TYPE_HERO) == true)) then // 購買者是英雄
        if (((GetUnitTypeId(GetSoldUnit()) == 'e000') and (I[GetConvertedPlayerId(GetTriggerPlayer())] == false))) then // 當販賣單位是 A & I=false
            call UnitAddItemByIdSwapped( 'I000', GetBuyingUnit() ) // 建立物品A給予購買者
            set I[GetConvertedPlayerId(GetOwningPlayer(GetBuyingUnit()))] = true // 改變玩家?的布林變量
        else
            if (((GetUnitTypeId(GetSoldUnit()) == 'e001') and (II[GetConvertedPlayerId(GetTriggerPlayer())] == false))) then // 當販賣單位是 A1 & II=false
                call UnitAddItemByIdSwapped( 'I001', GetBuyingUnit() ) // 建立物品A1給予購買者 如此類推
                set II[GetConvertedPlayerId(GetOwningPlayer(GetBuyingUnit()))] = true
            else
                if (((GetUnitTypeId(GetSoldUnit()) == 'e002') and (III[GetConvertedPlayerId(GetTriggerPlayer())] == false))) then
                    call UnitAddItemByIdSwapped( 'I002', GetBuyingUnit() )
                    set III[GetConvertedPlayerId(GetOwningPlayer(GetBuyingUnit()))] = true
                else
                    if (((GetUnitTypeId(GetSoldUnit()) == 'e003') and (IIII[GetConvertedPlayerId(GetTriggerPlayer())] == false))) then
                        call UnitAddItemByIdSwapped( 'I003', GetBuyingUnit() )      
                        set IIII[GetConvertedPlayerId(GetOwningPlayer(GetBuyingUnit()))] = true
                    else
                        if (((GetUnitTypeId(GetSoldUnit()) == 'e004') and (IIIII[GetConvertedPlayerId(GetTriggerPlayer())] == false))) then
                            call UnitAddItemByIdSwapped( 'I004', GetBuyingUnit() )
                            set IIIII[GetConvertedPlayerId(GetOwningPlayer(GetBuyingUnit()))] = true
                        else
                        endif
                    endif
                endif
            endif
        endif
    else
    endif
endfunction

TOP

其實如果用jass  可以用looper黎做
但考慮到你用T   我用顯淺既方法做比你睇

TOP

用過5個變數
當然你8個物品就用8個變數
由I到IIIII都係布林陣列

用咩方法唔重要   你明同個方法work就得

TOP

其實物品唔使加落變數入面
條件判斷入面  直接揀判斷物品類型
因為購買者會揀買邊個產品  所以可以fix左物品類型

我用既變數只有布林陣列

TOP

簡單黎講  我既做法係
A君係玩家1  B君係玩家2

當A君去shop買野 買a/b既時候
系統會將I[1]呢個值變成true

而B君去shop買野 買a/b既時候
系統會將I[2]呢個值變成true

其他物品就對應番相對既布林陣列

TOP

唔洗
因為購買者呢個係單位

而我地可以從呢個單位中獲得單位所有者(玩家的引索)
I[GetConvertedPlayerId(GetOwningPlayer(GetBuyingUnit()))]

玩家1
玩家2...etc

TOP

其實無所謂
只要你全部都set同一個就得

TOP

 29 12
發新話題