Last active 1734816968

yumaikas's Avatar yumaikas revised this gist 1734816968. Go to revision

1 file changed, 112 insertions

patterns.lua(file created)

@@ -0,0 +1,112 @@
1 + --[[
2 + |
3 + lightning struck [x] [y]
4 + , [something] is at [x] [y]?
5 + , [something] has inventory [inventory]?
6 + , [inventory] has item [item]?
7 + , [item] is [class]?
8 + , [class] is conductive?
9 + |
10 + [something] is struck by lightning
11 +
12 + || lightning struck 10 20,
13 + $enemy is at 10 20,
14 + $enemy has inventory $inventory,
15 + $inventory has item $item,
16 + $item is sword,
17 + sword is conductive
18 + ]]
19 +
20 + local match = {
21 + lightning_struck_x_y = false,
22 + something_is_at_x_y = false,
23 + something_has_inventory_inventory = false,
24 + inventory_has_item_item = false,
25 + item_is_class = false,
26 + class_is_conductive = false,
27 + vars = {
28 + x = nil, y = nil, something = nil, inventory = nil,
29 + item = nil, class = nil }
30 + }
31 +
32 + function lightning_struck_x_y(match, patterns)
33 + for x, y in patterns.lightning_struck_x_y:matches(match.x, match.y) do
34 + match.lightning_struck_x_y = true
35 + match.x = x
36 + match.y = y
37 + if match.something_is_at_x_y or something_is_at_x_y(patch, patterss) then
38 + return true
39 + end
40 + end
41 + return false
42 + end
43 +
44 + function something_is_at_x_y(match, patterns)
45 + for something, x, y in patterns.something_is_at_x_y:matches(match.someting, match.x, match.y) do
46 + match.something_is_at_x_y = true
47 + match.something = something
48 + match.x = x
49 + match.y = y
50 + if (match.lightning_struck_x_y or
51 + lightning_struck_x_y(match, patterns))
52 + and (match.something_has_inventory_inventory or something_has_inventory_inventory(match, patterns))
53 + then
54 + return true
55 + end
56 + end
57 + return false
58 + end
59 +
60 + function something_has_inventory_inventory(match, patterns)
61 + for something, inventory in patterns.something_has_inventory_inventory:matches(match.something, match.inventory) do
62 + match.something_has_inventory_inventory = true
63 + match.something = something
64 + match.inventory = inventory
65 +
66 + if (match.something_is_at_x_y or something_is_at_x_y(match, patterns))
67 + and (match.inventory_has_item_item or inventory_has_item_item(match, patterns))
68 + then
69 + return true
70 + end
71 + end
72 + return false
73 + end
74 +
75 + function inventory_has_item_item(match, patterns)
76 + for inventory, item in patterns.inventory_has_item_item:matches(match.inventory, match.item) do
77 + match.inventory = inventory
78 + match.item = item
79 +
80 + if (match.something_has_inventory_inventory or something_has_inventory_inventory(match, patterns))
81 + and (match.item_is_class or item_is_class(match, patterns))
82 + then
83 + return true
84 + end
85 + end
86 + return false
87 + end
88 +
89 + function item_is_class(match, patterns)
90 + if item, class in patterns.item_is_class:matches(match.item, match.class) do
91 + match.item = item
92 + match.class = class
93 +
94 + if (match.inventory_has_item_item or inventory_has_item_item(match, patterns))
95 + and (match.class_is_conductive or class_is_conductive(match, patterns))
96 + then
97 + return true
98 + end
99 + end
100 + return false
101 + end
102 +
103 + function class_is_conductive(match, patterns)
104 + for class in patterns.class_is_conductive:matches(match.class) do
105 + match.class = class
106 + if (match.item_is_class or item_is_class(match, patterns)) then
107 + return true
108 + end
109 + end
110 + return false
111 + end
112 +
Newer Older