yumaikas bu gisti düzenledi . Düzenlemeye git
1 file changed, 112 insertions
patterns.lua(dosya oluşturuldu)
@@ -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 | + |
Daha yeni
Daha eski