Paste #10718: Untitled Paste

Date: 2014/10/23 16:24:22 UTC-07:00
Type: Denizen Script

View Raw Paste Download This Paste
Copy Link


# Fuer den Schalter der Slotmachine.
slotmachine_detect:
    type: world
    events:
        on player right clicks block in cuboid_slotmachine:
            - ^run slotmachine


# Wuerfle ein zufaelliges Item fuer einen Slot einer Rolle.
# Return: Ein zufaelliges i@item aus einer Liste.
slotmachine_rollitem:
    type: procedure
    script:
        - ^random {
            - ^determine i@apple
            - ^determine i@melon
            - ^determine i@diamond
            - ^determine i@skull_item:4
            - ^determine i@gold_ingot
        }


# Lasse eine Rolle der Slotmachine "rotieren".
# Argumente: Der Cuboid der Rolle|Anzahl der Drehungen der Rolle vor Stopp
slotmachine_roll:
    type: task
    definitions: cuboid_roll|rolltimes
    script:
    # WICHTIG: Uebergebene Argumente mit def[name] entgegenehmen ...
    # WICHTIG: Wenn man unescaped benutzt, wird das Objekt wieder ein String, also:
    # .unescaped.as_cuboid benutzen!
    # Weniger als 0.05s als delay geht nicht.

    - ^define rolldelay 0.25
    - repeat <def[rolltimes]> {
        - foreach <def[cuboid_roll].unescaped.as_cuboid.list_entities> {
            - adjust %value% framed:<proc[slotmachine_rollitem]>
        }

        - playsound <l@1813,64,508,world> sound:CLICK
        - wait <def[rolldelay].as_duration.in_ticks>t
        #- narrate "delay <def[rolldelay].as_duration.in_ticks> ticks"
        - define rolldelay <def[rolldelay].add[0.05]>
    }
    - ^playsound <l@1813,64,508,world> sound:ITEM_BREAK


# Ueberpruefe, ob die uebergebenen Slot-Entities dasselbe Item enthalten.
# Argumente: Die drei Slots, die ueberprueft werden sollen.
# Return: true falls ja, false falls sein.
slotmachine_checkequality:
    type: determine
    definitions: slot1|slot2|slot3
    script:
        - if <def[slot1].framed_item> == <def[slot2].framed_item> && <def[slot2].framed_item> == <def[slot3].framed_item> {
            - determine true
        } else {
            - determine false
        }

# Ueberpruefe, ob die uebergebene horizontale oder vertikale Rolle ein Match zeigt.
# Argumente: Der Cuboid der Rolle.
# Return: 1 falls ein Match besteht, ansonsten 0.
slotmachine_check:
    type: determine
    definitions: cuboid_roll
    script:
        - define slots <def[cuboid_roll].unescaped.as_cuboid.list_entities>
        - if <%slots%.get[1]> == <%slots%.get[2]> && <%slots%.get[2]> == <%slots%.get[3]> {
            - determine 1
        } else {
            - determine 0
        }

# Ueberpruefe, ob die Diagonale von links unten nach rechts oben ein Match enthaelt.
# Return: 1 falls Match, ansonsten 0.
slotmachine_check_diagonal:
    type: task
    script:
        - narrate blub

# Ueberpruefe, ob die Diagonale von links oben nach rechts unten ein Match enthaelt.
# Return: 1 falls Match, ansonsten 0.

# Das Hauptscript der Slotmachine.
slotmachine:
    type: task
    script:
        # WICHTIG: Wenn man Cuboids oder andere Listen uebergibt, die | beinhalten,
        # muss der String escaped werden, weil das Zeichen fuer Argumentrennung
        # benutzt wird! Zwischen mehreren Argumenten duerfen keine Leerzeichen sein.

        # reset
        - adjust <cu@1812,63,508,world|1814,65,508,world.list_entities> framed:i@air

        # WICHTIG: ~ vor einem Script erzwingt ein umgekehrtes Shell-&-Verhalten:
        # Queues sind FIFO, und das jedes Script wartet auf alle vor ihm, bevor es
        # ausgefuehrt wird. Nicht mehr fuer dieses Script relevant, aber trotzdem gut zu wissen.

        # erste Rolle drehen
        - run instantly slotmachine_roll def:<cu@1812,63,508,world|1812,65,508,world.escaped>|5

        # zweite Rolle drehen
        - run instantly slotmachine_roll def:<cu@1813,63,508,world|1813,65,508,world.escaped>|7

        # dritte Rolle drehen
        - run instantly slotmachine_roll def:<cu@1814,63,508,world|1814,65,508,world.escaped>|9

        - ^switch 1815,64,508,world