找回密码
 点一下
查看: 859|回复: 5

需要完美物品合成系统的制作思路

[复制链接]
发表于 2012-10-31 20:24:40 | 显示全部楼层 |阅读模式
本帖最后由 chyj4747 于 2012-11-3 21:22 编辑

要求(能同时检测物品数量和物品使用次数+通用1.20-1.26)例如 散失之刃 需要法师长袍+“欢欣之刃x2”|  医疗宝石 需要 "治疗卷轴(使用次数大于等于2) 生命之石x2" 给我点思路吧 想不出来怎么做  不要杰斯(Jass) 不要帮我讲YDWE 那个系统不但没法检测使用次数而且有问题

仅无法检测使用次数

function NewRecipe takes integer i0,integer i1,integer i2,integer i3,integer i4,integer i5,integer i6 returns nothing
    local integer array a
    local integer b
    local integer n=0
    set udg_RecipeCount = udg_RecipeCount+1
    set udg_RecipeItemId[udg_RecipeCount*10+9] = i0
    set a[0]=i1
    set a[1]=i2
    set a[2]=i3
    set a[3]=i4
    set a[4]=i5
    set a[5]=i6
    loop
        exitwhen a[n] == 0
        set b = GetStoredInteger(udg_GC,I2S(a[n]),"ItemRecipeCount")
        call StoreInteger(udg_GC,I2S(a[n]),"ItemRecipeCount",b+1)
        call StoreInteger(udg_GC,I2S(a[n]),"ItemRecipe"+I2S(b),udg_RecipeCount)
        set udg_RecipeItemId[udg_RecipeCount*10+n] = a[n]
        set n=n+1
    endloop
endfunction

function RecipeCheck takes unit u,integer rec returns boolean
    local integer n
    local integer i = 0
    local integer array A
    local integer array B
    local integer c
    local integer d = 5
    loop
        set B=udg_RecipeItemId[rec*10+i]
        exitwhen B==0
        set A=GetItemTypeId(UnitItemInSlot(u,i))
        set i = i+1
    endloop
    set n = i-1
    set c = n
    loop
        exitwhen i>=6
        set A=GetItemTypeId(UnitItemInSlot(u,i))
        set i = i+1
    endloop
    loop
        set i=0
        loop
            exitwhen A==B[0]
            if i==d then
                return false
            endif
            set i=i+1
        endloop
        exitwhen c==0
        set A=A[d]
        set B[0]=B[c]
        set B[c]=i
        set c=c-1
        set d=d-1
    endloop
    set B[0]=i
    set i=0
    loop
        set udg_CombineItem=UnitItemInSlot(u,i)
        exitwhen i>=5
        set i=i+1
    endloop
    set d = 5-n
    if n>0 then
        call DestroyEffect(AddSpecialEffectTarget("Abilities\\Spells\\Items\\AIsm\\AIsmTarget.mdl",u,"origin"))
    endif
    loop
        call RemoveItem(udg_CombineItem[B[n]])
        exitwhen n==0
        set udg_CombineItem[B[n]] = udg_CombineItem[n+d]
        set n=n-1
    endloop
    call UnitAddItemById(u,udg_RecipeItemId[rec*10+9])
    return true
endfunction

function ItemCombine takes unit u,item it returns nothing
    local integer r
    local integer i=0
    loop
        set r = GetStoredInteger(udg_GC,I2S(GetItemTypeId(it)),"ItemRecipe"+I2S(i))
        exitwhen r==0
        if RecipeCheck(u,r) then
            return
        endif
        set i=i+1
    endloop
endfunction

function Trig_Combination_Conditions takes nothing returns boolean
    call ItemCombine(GetTriggerUnit(),GetManipulatedItem())
    return false
endfunction

function InitTrig_Combination takes nothing returns nothing
    set gg_trg_Combination=CreateTrigger()
    call TriggerRegisterAnyUnitEventBJ(gg_trg_Combination,EVENT_PLAYER_UNIT_PICKUP_ITEM)
    call TriggerAddCondition(gg_trg_Combination,Condition(function Trig_Combination_Conditions))
endfunction
发表于 2012-10-31 20:41:50 | 显示全部楼层
参考一下已有的物品合成系统来修改嘛
加上判断物品使用次数的触发就好了
回复

使用道具 举报

 楼主| 发表于 2012-10-31 21:11:34 | 显示全部楼层
那得把这个翻译成T
回复

使用道具 举报

发表于 2012-10-31 21:51:26 | 显示全部楼层
已有的物品合成系统不是很多嘛,搜索一下可以找到一大堆
相比之下要把这一串翻译成触发就麻烦多啦
回复

使用道具 举报

 楼主| 发表于 2012-10-31 23:00:14 | 显示全部楼层
关键是找不到合适的呀- - 搜到的T版都是最简单的物品合成系统 连数量都不支持的 J版不考虑 看不懂
回复

使用道具 举报

发表于 2012-11-1 18:57:37 | 显示全部楼层
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 点一下

本版积分规则

Archiver|移动端|小黑屋|地精研究院

GMT+8, 2024-5-11 03:06 , Processed in 0.242879 second(s), 19 queries .

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表