Date: 2014/10/23 16:24:22 UTC-07:00
Type: Denizen Script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
# 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