• 🏆 Texturing Contest #33 is OPEN! Contestants must re-texture a SD unit model found in-game (Warcraft 3 Classic), recreating the unit into a peaceful NPC version. 🔗Click here to enter!
  • It's time for the first HD Modeling Contest of 2024. Join the theme discussion for Hive's HD Modeling Contest #6! Click here to post your idea!

Recipe System [v1.01]

This bundle is marked as useful / simple. Simplicity is bliss, low effort and/or may contain minor bugs.
I know there are many, no wait infinite recipe systems here.
But I decided to make my own for my AoS mapa nd so I'm releasing it here.

It contains 3 versions:

GUI-Version: Needs user definded globals but can be easiely used and set up.

JASS-Version ability: Has a huge number of arguments but needs no variables and triggers when an ability is cast. (May be used for an alchimist who brews some porions)

JASS-Version item: Has a huge number of arguments but needs no variables and triggers when an item is bought/used/whatever-is-done-with-an-item. (may be used for recipe shops)

please give me credits if you use :D

//UPDATE: Removed BJ's

Keywords:
Recipe, System, Item, Merge
Contents

Recipy System by Scythy Dervish (Map)

Reviews
12:29, 17th Jun 2010 TriggerHappy: We have plenty of these.

Moderator

M

Moderator

12:29, 17th Jun 2010
TriggerHappy:

We have plenty of these.
 
Triggers for Jass Versions:


JASS:
function Recipe takes integer r1, integer r2, integer r3, integer r4, integer r5, integer r6, integer a1, integer a2, integer a3, integer a4, integer a5, integer a6, integer re, unit u, integer ab returns nothing

//*****************
//*   Variables   *
//*****************

    local integer                 slot                       = 0
    local integer array           ressnumber
    local integer array           resstype
    local integer                 index                      = 0
    local boolean                 boo                        = true

//****************
//*   Function   *
//****************

    if GetSpellAbilityId() == ab then

        //*****************
        //* Set Variables *
        //*****************
        set ressnumber [1] = a1
        set ressnumber [2] = a2
        set ressnumber [3] = a3
        set ressnumber [4] = a4
        set ressnumber [5] = a5
        set ressnumber [6] = a6
        set   resstype [1] = r1
        set   resstype [2] = r2
        set   resstype [3] = r3
        set   resstype [4] = r4
        set   resstype [5] = r5
        set   resstype [6] = r6
        set slot = 1
        loop
            exitwhen slot > 6
            set index = 1
            loop
                exitwhen index > 6
                if ressnumber[index] != 0 then
                    if GetItemTypeId(UnitItemInSlotBJ(u, slot)) == resstype[index] then
                        set ressnumber[index] = ( ressnumber[index] - 1 )
                    else
                    endif
                else
                endif
                set index = index + 1
            endloop
            set slot = slot + 1
        endloop
        set slot = 1
        loop
            exitwhen slot > 6
            if ressnumber[slot] != 0 then
                set boo = false
            else
            endif
            set slot = slot + 1
        endloop
        set ressnumber[1] = 2
        set ressnumber[2] = 1
        set ressnumber[3] = 0
        set ressnumber[4] = 0
        set ressnumber[5] = 0
        set ressnumber[6] = 0
        if boo == true then
            set slot = 1
            loop
                exitwhen slot > 6
                set index = 1
                loop
                    exitwhen index > 6
                    if ressnumber[index] != 0 then
                        if GetItemTypeId(UnitItemInSlotBJ(u, slot)) == resstype[index] then
                            set ressnumber[index] = ( ressnumber[index] - 1 )
                            call RemoveItem( UnitItemInSlotBJ(u, slot) )
                        else
                        endif
                    else
                    endif
                    set index = index + 1
                endloop
                set slot = slot + 1
            endloop
            call UnitAddItemByIdSwapped( re, u )
        else
        endif
    else
    endif
endfunction

//================================================================================================



JASS:
function RecipeByItem takes integer r1, integer r2, integer r3, integer r4, integer r5, integer r6, integer a1, integer a2, integer a3, integer a4, integer a5, integer a6, integer re, unit u, integer it returns nothing

//*****************
//*   Variables   *
//*****************

    local integer                 slot                       = 0
    local integer array           ressnumber
    local integer array           resstype
    local integer                 index                      = 0
    local boolean                 boo                        = true

//****************
//*   Function   *
//****************

    if GetItemTypeId(GetManipulatedItem()) == it then

        //*****************
        //* Set Variables *
        //*****************
        set ressnumber [1] = a1
        set ressnumber [2] = a2
        set ressnumber [3] = a3
        set ressnumber [4] = a4
        set ressnumber [5] = a5
        set ressnumber [6] = a6
        set   resstype [1] = r1
        set   resstype [2] = r2
        set   resstype [3] = r3
        set   resstype [4] = r4
        set   resstype [5] = r5
        set   resstype [6] = r6
        set slot = 1
        loop
            exitwhen slot > 6
            set index = 1
            loop
                exitwhen index > 6
                if ressnumber[index] != 0 then
                    if GetItemTypeId(UnitItemInSlotBJ(u, slot)) == resstype[index] then
                        set ressnumber[index] = ( ressnumber[index] - 1 )
                    else
                    endif
                else
                endif
                set index = index + 1
            endloop
            set slot = slot + 1
        endloop
        set slot = 1
        loop
            exitwhen slot > 6
            if ressnumber[slot] != 0 then
                set boo = false
            else
            endif
            set slot = slot + 1
        endloop
        set ressnumber[1] = 2
        set ressnumber[2] = 1
        set ressnumber[3] = 0
        set ressnumber[4] = 0
        set ressnumber[5] = 0
        set ressnumber[6] = 0
        if boo == true then
            set slot = 1
            loop
                exitwhen slot > 6
                set index = 1
                loop
                    exitwhen index > 6
                    if ressnumber[index] != 0 then
                        if GetItemTypeId(UnitItemInSlotBJ(u, slot)) == resstype[index] then
                            set ressnumber[index] = ( ressnumber[index] - 1 )
                            call RemoveItem( UnitItemInSlotBJ(u, slot) )
                        else
                        endif
                    else
                    endif
                    set index = index + 1
                endloop
                set slot = slot + 1
            endloop
            call UnitAddItemByIdSwapped( re, u )
        else
        endif
    else
    endif
endfunction

//================================================================================================
 
Last edited:
Level 1
Joined
Apr 22, 2010
Messages
4
Its really good for RPG... Alchemist...
But you can change instruction how made new receipt - some people can not understand...
 
Top