Zeige Ergebnis 1 bis 7 von 7

Thema: Recipe System

  1. #1
    Staff Maps
    Projektbetreuung

    Mappinghelfer des Monats
    Benutzerbild von Der sensige Derwisch
    Registriert seit
    Apr 2009
    Ort
    irgendwo im nirgendwo
    BNet Account
    Der_Wisch
    Beiträge
    2.487

    Recipe System

    Soo ich stell dann auch mal mein Recipe-System hier vor ^^
    Hat vermutlich jeder mal gebaut ^^

    Also das System ist in Jass geschrieben und eigentlich ziemlich simpel gehalten

    einfach ressource, menge, trigger ability/item und ergebnis eingeben und fertig ^^

    Ability Version


    function RecipeByAbility 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 = 0
    loop
    exitwhen slot > 5
    set index = 0
    loop
    exitwhen index > 5
    if ressnumber[index] != 0 then
    if GetItemTypeId(UnitItemInSlot(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 = 0
    loop
    exitwhen slot > 5
    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 = 0
    loop
    exitwhen slot > 5
    set index = 0
    loop
    exitwhen index > 5
    if ressnumber[index] != 0 then
    if GetItemTypeId(UnitItemInSlot(u, slot)) == resstype[index] then
    set ressnumber[index] = ( ressnumber[index] - 1 )
    call RemoveItem( UnitItemInSlot(u, slot) )
    else
    endif
    else
    endif
    set index = index + 1
    endloop
    set slot = slot + 1
    endloop
    call UnitAddItemById(u,re)
    else
    endif
    else
    endif
    endfunction

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



    Item Version


    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 = 0
    loop
    exitwhen slot > 5
    set index = 0
    loop
    exitwhen index > 5
    if ressnumber[index] != 0 then
    if GetItemTypeId(UnitItemInSlot(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 = 0
    loop
    exitwhen slot > 5
    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 = 0
    loop
    exitwhen slot > 5
    set index = 0
    loop
    exitwhen index > 5
    if ressnumber[index] != 0 then
    if GetItemTypeId(UnitItemInSlot(u, slot)) == resstype[index] then
    set ressnumber[index] = ( ressnumber[index] - 1 )
    call RemoveItem( UnitItemInSlot(u, slot) )
    else
    endif
    else
    endif
    set index = index + 1
    endloop
    set slot = slot + 1
    endloop
    call UnitAddItemById(u, re)
    else
    endif
    else
    endif
    endfunction

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



    Bei irgendwelchen Ideen oder gefunden buggs ruhig melden ^^

  2. #2
    Benutzerbild von Akkount
    Registriert seit
    Dez 2007
    Ort
    Woltersdorf
    BNet Account
    nEVO.VIPER
    Beiträge
    196
    Guten Tag, kleine Frage:-)
    Ich nutze das mit Items, mein Problem ist, wenn ich meine benötigten Items kaufe, Kaufe ich mir danach noch das rezeptitem, welches mir erklärt was es benötigt und was es mir bringt. Die benötigten Items verschwinden alle aus dem Inventar, es wird auch das fertige Rezeptitem erstellt, bloß das Item was mir alles erklärt hat bleibt noch im Inventar. Dies sollte aber ebenso verschwinden.

    ...hoffe man versteht was ich damit sagen will^^

  3. #3
    Staff Maps
    Projektbetreuung

    Mappinghelfer des Monats
    Benutzerbild von Der sensige Derwisch
    Registriert seit
    Apr 2009
    Ort
    irgendwo im nirgendwo
    BNet Account
    Der_Wisch
    Beiträge
    2.487
    Zitat Zitat von Akkount Beitrag anzeigen
    Guten Tag, kleine Frage:-)
    Ich nutze das mit Items, mein Problem ist, wenn ich meine benötigten Items kaufe, Kaufe ich mir danach noch das rezeptitem, welches mir erklärt was es benötigt und was es mir bringt. Die benötigten Items verschwinden alle aus dem Inventar, es wird auch das fertige Rezeptitem erstellt, bloß das Item was mir alles erklärt hat bleibt noch im Inventar. Dies sollte aber ebenso verschwinden.

    ...hoffe man versteht was ich damit sagen will^^
    welches event hast du genommen? erwirbt einen Gegenstand?

    dann könnte es daran liegen das der trigger feuert bevor das item im inventar ist --> item kann nicht entfernt werden, da sollte ein anschließendes "Gegenstand - Remove (item being manipulated)" helfen

  4. #4
    Benutzerbild von Akkount
    Registriert seit
    Dez 2007
    Ort
    Woltersdorf
    BNet Account
    nEVO.VIPER
    Beiträge
    196
    ja das ist eine einfache Möglichkeit:-P^^
    Ich hab es mir schwerer gemacht und
                            if GetItemTypeId(UnitItemInSlot(u, slot)) == it then
    set ressnumber[index] = ( ressnumber[index] - 1 )
    call RemoveItem( UnitItemInSlot(u, slot) )
    else
    noch dazugeschrieben. Das brachte auch den Effekt den ich wollte.
    Noch ne frage, kann man das System so bauen das es kein spezielles "it Item" benötigt, sondern die Rezepte generell bei jedem Itemkauf/Aufnehmen überprüft werden? Dann müsste man keine Kaufreihnfolge beachtet werden.

  5. #5
    Staff Maps
    Projektbetreuung

    Mappinghelfer des Monats
    Benutzerbild von Der sensige Derwisch
    Registriert seit
    Apr 2009
    Ort
    irgendwo im nirgendwo
    BNet Account
    Der_Wisch
    Beiträge
    2.487
    Klar die If Bedingung vom
    if GetItemTypeId(GetManipulatedItem()) == it then
    löschen (und natürlich das dazugehörige
        else
    endif
    am ende

  6. #6
    Benutzerbild von Akkount
    Registriert seit
    Dez 2007
    Ort
    Woltersdorf
    BNet Account
    nEVO.VIPER
    Beiträge
    196
    Guten Tag, ich hab nochmal ne frage, Ich kann mir nicht erklären wofür der Zwischenschritt ist
            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

    Was regelt das?

  7. #7
    Staff Maps
    Projektbetreuung

    Mappinghelfer des Monats
    Benutzerbild von Der sensige Derwisch
    Registriert seit
    Apr 2009
    Ort
    irgendwo im nirgendwo
    BNet Account
    Der_Wisch
    Beiträge
    2.487
    cO

    ist der in der Map noch so?
    oder hast du die trigger hier raus kopiert?

    das sollte eigentlich nicht so sein, sondern


    set ressnumber[1] = r1
    set ressnumber[2] = r2
    set ressnumber[3] = r3
    set ressnumber[4] = r4
    set ressnumber[5] = r5
    set ressnumber[6] = r6


    das sezt die variablen für die nächste abfrage nochmal neu ^^

    (PS: An mich --> Warum hab ich das falsch gesezt?)

Ähnliche Themen

  1. recipe system
    Von abfl im Forum Triggerforum
    Antworten: 6
    Letzter Beitrag: 26. Juli 2010, 18:56
  2. [Jass] Recipe System (schonwieder)
    Von Der sensige Derwisch im Forum Triggerforum
    Antworten: 4
    Letzter Beitrag: 04. Mai 2010, 22:23
  3. Library: Recipe System
    Von Quillraven im Forum Material
    Antworten: 5
    Letzter Beitrag: 22. September 2009, 15:40
  4. Recipe-System von Mueslirocker
    Von Razor im Forum Triggerforum
    Antworten: 10
    Letzter Beitrag: 05. Dezember 2008, 11:01
  5. wesc0's RECIPE-SYSTEM v1.0!
    Von Caffe_Latte im Forum Material
    Antworten: 6
    Letzter Beitrag: 28. September 2007, 19:11

Forumregeln

  • Es ist dir nicht erlaubt, neue Themen zu verfassen.
  • Es ist dir nicht erlaubt, auf Beiträge zu antworten.
  • Es ist dir nicht erlaubt, Anhänge hochzuladen.
  • Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.
  •