Naposledy aktivní 1734816968

Revize 7d37109596eaee3b1293adbc4e706c4f0f032404

patterns.lua Raw Playground
1--[[
2|
3lightning 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
20local 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
32function 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
42end
43
44function 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
58end
59
60function 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
73end
74
75function 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
87end
88
89function 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
101end
102
103function 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
111end
112
113