03.10.2016, 14:50
A couple of years or so back I was playing around with modules in Pawn - I wanted it to be so that I could drag/drop and just add an #include line, so modules would be interchangeable.
Below is the code I used to achieve it - more for educational purposes than actual production value.
If you are writing something large enough to require modularity I would recommend SampSharp or Shoebill - as these provide an interface with enterprise level programming languages built around the idea of large, OOP, modular projects.
metarpg/modules.inc
(defines a unique Module: token, calculating a new one every time you include it.)
modules.pwn
(allows you to register and invoke other modules)
events.pwn
(for dynamic event hooking)
example:
Below is the code I used to achieve it - more for educational purposes than actual production value.
If you are writing something large enough to require modularity I would recommend SampSharp or Shoebill - as these provide an interface with enterprise level programming languages built around the idea of large, OOP, modular projects.
metarpg/modules.inc
(defines a unique Module: token, calculating a new one every time you include it.)
PHP Code:
#if __Pawn != 0x030A
#error Use the improved compiler
#endif
#if !defined @__this
#define @__this 1
#define Module: @1@
#else
#if @__this == 1
#undef Module
#undef @__this
#define @__this 2
#define Module: @2@
#elseif @__this == 2
#undef Module
#undef @__this
#define @__this 3
#define Module: @3@
#elseif @__this == 3
#undef Module
#undef @__this
#define @__this 4
#define Module: @4@
#elseif @__this == 4
#undef Module
#undef @__this
#define @__this 5
#define Module: @5@
#elseif @__this == 5
#undef Module
#undef @__this
#define @__this 6
#define Module: @6@
#elseif @__this == 6
#undef Module
#undef @__this
#define @__this 7
#define Module: @7@
#elseif @__this == 7
#undef Module
#undef @__this
#define @__this 8
#define Module: @8@
#elseif @__this == 8
#undef Module
#undef @__this
#define @__this 9
#define Module: @9@
#elseif @__this == 9
#undef Module
#undef @__this
#define @__this 10
#define Module: @10@
#elseif @__this == 10
#undef Module
#undef @__this
#define @__this 11
#define Module: @11@
#elseif @__this == 11
#undef Module
#undef @__this
#define @__this 12
#define Module: @12@
#elseif @__this == 12
#undef Module
#undef @__this
#define @__this 13
#define Module: @13@
#elseif @__this == 13
#undef Module
#undef @__this
#define @__this 14
#define Module: @14@
#elseif @__this == 14
#undef Module
#undef @__this
#define @__this 15
#define Module: @15@
#elseif @__this == 15
#undef Module
#undef @__this
#define @__this 16
#define Module: @16@
#elseif @__this == 16
#undef Module
#undef @__this
#define @__this 17
#define Module: @17@
#elseif @__this == 17
#undef Module
#undef @__this
#define @__this 18
#define Module: @18@
#elseif @__this == 18
#undef Module
#undef @__this
#define @__this 19
#define Module: @19@
#elseif @__this == 19
#undef Module
#undef @__this
#define @__this 20
#define Module: @20@
#elseif @__this == 20
#undef Module
#undef @__this
#define @__this 21
#define Module: @21@
#elseif @__this == 21
#undef Module
#undef @__this
#define @__this 22
#define Module: @22@
#elseif @__this == 22
#undef Module
#undef @__this
#define @__this 23
#define Module: @23@
#elseif @__this == 23
#undef Module
#undef @__this
#define @__this 24
#define Module: @24@
#elseif @__this == 24
#undef Module
#undef @__this
#define @__this 25
#define Module: @25@
#elseif @__this == 25
#undef Module
#undef @__this
#define @__this 26
#define Module: @26@
#elseif @__this == 26
#undef Module
#undef @__this
#define @__this 27
#define Module: @27@
#elseif @__this == 27
#undef Module
#undef @__this
#define @__this 28
#define Module: @28@
#elseif @__this == 28
#undef Module
#undef @__this
#define @__this 29
#define Module: @29@
#elseif @__this == 29
#undef Module
#undef @__this
#define @__this 30
#define Module: @30@
#elseif @__this == 30
#undef Module
#undef @__this
#define @__this 31
#define Module: @31@
#elseif @__this == 31
#undef Module
#undef @__this
#define @__this 32
#define Module: @32@
#elseif @__this == 32
#undef Module
#undef @__this
#define @__this 33
#define Module: @33@
#elseif @__this == 33
#undef Module
#undef @__this
#define @__this 34
#define Module: @34@
#elseif @__this == 34
#undef Module
#undef @__this
#define @__this 35
#define Module: @35@
#elseif @__this == 35
#undef Module
#undef @__this
#define @__this 36
#define Module: @36@
#elseif @__this == 36
#undef Module
#undef @__this
#define @__this 37
#define Module: @37@
#elseif @__this == 37
#undef Module
#undef @__this
#define @__this 38
#define Module: @38@
#elseif @__this == 38
#undef Module
#undef @__this
#define @__this 39
#define Module: @39@
#elseif @__this == 39
#undef Module
#undef @__this
#define @__this 40
#define Module: @40@
#elseif @__this == 40
#undef Module
#undef @__this
#define @__this 41
#define Module: @41@
#elseif @__this == 41
#undef Module
#undef @__this
#define @__this 42
#define Module: @42@
#elseif @__this == 42
#undef Module
#undef @__this
#define @__this 43
#define Module: @43@
#elseif @__this == 43
#undef Module
#undef @__this
#define @__this 44
#define Module: @44@
#elseif @__this == 44
#undef Module
#undef @__this
#define @__this 45
#define Module: @45@
#elseif @__this == 45
#undef Module
#undef @__this
#define @__this 46
#define Module: @46@
#elseif @__this == 46
#undef Module
#undef @__this
#define @__this 47
#define Module: @47@
#elseif @__this == 47
#undef Module
#undef @__this
#define @__this 48
#define Module: @48@
#elseif @__this == 48
#undef Module
#undef @__this
#define @__this 49
#define Module: @49@
#elseif @__this == 49
#undef Module
#undef @__this
#define @__this 50
#define Module: @50@
#elseif @__this == 50
#undef Module
#undef @__this
#define @__this 51
#define Module: @51@
#elseif @__this == 51
#undef Module
#undef @__this
#define @__this 52
#define Module: @52@
#elseif @__this == 52
#undef Module
#undef @__this
#define @__this 53
#define Module: @53@
#elseif @__this == 53
#undef Module
#undef @__this
#define @__this 54
#define Module: @54@
#elseif @__this == 54
#undef Module
#undef @__this
#define @__this 55
#define Module: @55@
#elseif @__this == 55
#undef Module
#undef @__this
#define @__this 56
#define Module: @56@
#elseif @__this == 56
#undef Module
#undef @__this
#define @__this 57
#define Module: @57@
#elseif @__this == 57
#undef Module
#undef @__this
#define @__this 58
#define Module: @58@
#elseif @__this == 58
#undef Module
#undef @__this
#define @__this 59
#define Module: @59@
#elseif @__this == 59
#undef Module
#undef @__this
#define @__this 60
#define Module: @60@
#elseif @__this == 60
#undef Module
#undef @__this
#define @__this 61
#define Module: @61@
#elseif @__this == 61
#undef Module
#undef @__this
#define @__this 62
#define Module: @62@
#elseif @__this == 62
#undef Module
#undef @__this
#define @__this 63
#define Module: @63@
#elseif @__this == 63
#undef Module
#undef @__this
#define @__this 64
#define Module: @64@
#elseif @__this == 64
#undef Module
#undef @__this
#define @__this 65
#define Module: @65@
#elseif @__this == 65
#undef Module
#undef @__this
#define @__this 66
#define Module: @66@
#elseif @__this == 66
#undef Module
#undef @__this
#define @__this 67
#define Module: @67@
#elseif @__this == 67
#undef Module
#undef @__this
#define @__this 68
#define Module: @68@
#elseif @__this == 68
#undef Module
#undef @__this
#define @__this 69
#define Module: @69@
#elseif @__this == 69
#undef Module
#undef @__this
#define @__this 70
#define Module: @70@
#elseif @__this == 70
#undef Module
#undef @__this
#define @__this 71
#define Module: @71@
#elseif @__this == 71
#undef Module
#undef @__this
#define @__this 72
#define Module: @72@
#elseif @__this == 72
#undef Module
#undef @__this
#define @__this 73
#define Module: @73@
#elseif @__this == 73
#undef Module
#undef @__this
#define @__this 74
#define Module: @74@
#elseif @__this == 74
#undef Module
#undef @__this
#define @__this 75
#define Module: @75@
#elseif @__this == 75
#undef Module
#undef @__this
#define @__this 76
#define Module: @76@
#elseif @__this == 76
#undef Module
#undef @__this
#define @__this 77
#define Module: @77@
#elseif @__this == 77
#undef Module
#undef @__this
#define @__this 78
#define Module: @78@
#elseif @__this == 78
#undef Module
#undef @__this
#define @__this 79
#define Module: @79@
#elseif @__this == 79
#undef Module
#undef @__this
#define @__this 80
#define Module: @80@
#elseif @__this == 80
#undef Module
#undef @__this
#define @__this 81
#define Module: @81@
#elseif @__this == 81
#undef Module
#undef @__this
#define @__this 82
#define Module: @82@
#elseif @__this == 82
#undef Module
#undef @__this
#define @__this 83
#define Module: @83@
#elseif @__this == 83
#undef Module
#undef @__this
#define @__this 84
#define Module: @84@
#elseif @__this == 84
#undef Module
#undef @__this
#define @__this 85
#define Module: @85@
#elseif @__this == 85
#undef Module
#undef @__this
#define @__this 86
#define Module: @86@
#elseif @__this == 86
#undef Module
#undef @__this
#define @__this 87
#define Module: @87@
#elseif @__this == 87
#undef Module
#undef @__this
#define @__this 88
#define Module: @88@
#elseif @__this == 88
#undef Module
#undef @__this
#define @__this 89
#define Module: @89@
#elseif @__this == 89
#undef Module
#undef @__this
#define @__this 90
#define Module: @90@
#elseif @__this == 90
#undef Module
#undef @__this
#define @__this 91
#define Module: @91@
#elseif @__this == 91
#undef Module
#undef @__this
#define @__this 92
#define Module: @92@
#elseif @__this == 92
#undef Module
#undef @__this
#define @__this 93
#define Module: @93@
#elseif @__this == 93
#undef Module
#undef @__this
#define @__this 94
#define Module: @94@
#elseif @__this == 94
#undef Module
#undef @__this
#define @__this 95
#define Module: @95@
#elseif @__this == 95
#undef Module
#undef @__this
#define @__this 96
#define Module: @96@
#elseif @__this == 96
#undef Module
#undef @__this
#define @__this 97
#define Module: @97@
#elseif @__this == 97
#undef Module
#undef @__this
#define @__this 98
#define Module: @98@
#elseif @__this == 98
#undef Module
#undef @__this
#define @__this 99
#define Module: @99@
#elseif @__this == 99
#undef Module
#undef @__this
#define @__this 100
#define Module: @100@
#elseif @__this == 100
#undef Module
#undef @__this
#define @__this 101
#define Module: @101@
#elseif @__this == 101
#undef Module
#undef @__this
#define @__this 102
#define Module: @102@
#elseif @__this == 102
#undef Module
#undef @__this
#define @__this 103
#define Module: @103@
#elseif @__this == 103
#undef Module
#undef @__this
#define @__this 104
#define Module: @104@
#elseif @__this == 104
#undef Module
#undef @__this
#define @__this 105
#define Module: @105@
#elseif @__this == 105
#undef Module
#undef @__this
#define @__this 106
#define Module: @106@
#elseif @__this == 106
#undef Module
#undef @__this
#define @__this 107
#define Module: @107@
#elseif @__this == 107
#undef Module
#undef @__this
#define @__this 108
#define Module: @108@
#elseif @__this == 108
#undef Module
#undef @__this
#define @__this 109
#define Module: @109@
#elseif @__this == 109
#undef Module
#undef @__this
#define @__this 110
#define Module: @110@
#elseif @__this == 110
#undef Module
#undef @__this
#define @__this 111
#define Module: @111@
#elseif @__this == 111
#undef Module
#undef @__this
#define @__this 112
#define Module: @112@
#elseif @__this == 112
#undef Module
#undef @__this
#define @__this 113
#define Module: @113@
#elseif @__this == 113
#undef Module
#undef @__this
#define @__this 114
#define Module: @114@
#elseif @__this == 114
#undef Module
#undef @__this
#define @__this 115
#define Module: @115@
#elseif @__this == 115
#undef Module
#undef @__this
#define @__this 116
#define Module: @116@
#elseif @__this == 116
#undef Module
#undef @__this
#define @__this 117
#define Module: @117@
#elseif @__this == 117
#undef Module
#undef @__this
#define @__this 118
#define Module: @118@
#elseif @__this == 118
#undef Module
#undef @__this
#define @__this 119
#define Module: @119@
#elseif @__this == 119
#undef Module
#undef @__this
#define @__this 120
#define Module: @120@
#elseif @__this == 120
#undef Module
#undef @__this
#define @__this 121
#define Module: @121@
#elseif @__this == 121
#undef Module
#undef @__this
#define @__this 122
#define Module: @122@
#elseif @__this == 122
#undef Module
#undef @__this
#define @__this 123
#define Module: @123@
#elseif @__this == 123
#undef Module
#undef @__this
#define @__this 124
#define Module: @124@
#elseif @__this == 124
#undef Module
#undef @__this
#define @__this 125
#define Module: @125@
#elseif @__this == 125
#undef Module
#undef @__this
#define @__this 126
#define Module: @126@
#elseif @__this == 126
#undef Module
#undef @__this
#define @__this 127
#define Module: @127@
#elseif @__this == 127
#undef Module
#undef @__this
#define @__this 128
#define Module: @128@
#elseif @__this == 128
#undef Module
#undef @__this
#define @__this 129
#define Module: @129@
#elseif @__this == 129
#undef Module
#undef @__this
#define @__this 130
#define Module: @130@
#elseif @__this == 130
#undef Module
#undef @__this
#define @__this 131
#define Module: @131@
#elseif @__this == 131
#undef Module
#undef @__this
#define @__this 132
#define Module: @132@
#elseif @__this == 132
#undef Module
#undef @__this
#define @__this 133
#define Module: @133@
#elseif @__this == 133
#undef Module
#undef @__this
#define @__this 134
#define Module: @134@
#elseif @__this == 134
#undef Module
#undef @__this
#define @__this 135
#define Module: @135@
#elseif @__this == 135
#undef Module
#undef @__this
#define @__this 136
#define Module: @136@
#elseif @__this == 136
#undef Module
#undef @__this
#define @__this 137
#define Module: @137@
#elseif @__this == 137
#undef Module
#undef @__this
#define @__this 138
#define Module: @138@
#elseif @__this == 138
#undef Module
#undef @__this
#define @__this 139
#define Module: @139@
#elseif @__this == 139
#undef Module
#undef @__this
#define @__this 140
#define Module: @140@
#elseif @__this == 140
#undef Module
#undef @__this
#define @__this 141
#define Module: @141@
#elseif @__this == 141
#undef Module
#undef @__this
#define @__this 142
#define Module: @142@
#elseif @__this == 142
#undef Module
#undef @__this
#define @__this 143
#define Module: @143@
#elseif @__this == 143
#undef Module
#undef @__this
#define @__this 144
#define Module: @144@
#elseif @__this == 144
#undef Module
#undef @__this
#define @__this 145
#define Module: @145@
#elseif @__this == 145
#undef Module
#undef @__this
#define @__this 146
#define Module: @146@
#elseif @__this == 146
#undef Module
#undef @__this
#define @__this 147
#define Module: @147@
#elseif @__this == 147
#undef Module
#undef @__this
#define @__this 148
#define Module: @148@
#elseif @__this == 148
#undef Module
#undef @__this
#define @__this 149
#define Module: @149@
#elseif @__this == 149
#undef Module
#undef @__this
#define @__this 150
#define Module: @150@
#elseif @__this == 150
#undef Module
#undef @__this
#define @__this 151
#define Module: @151@
#elseif @__this == 151
#undef Module
#undef @__this
#define @__this 152
#define Module: @152@
#elseif @__this == 152
#undef Module
#undef @__this
#define @__this 153
#define Module: @153@
#elseif @__this == 153
#undef Module
#undef @__this
#define @__this 154
#define Module: @154@
#elseif @__this == 154
#undef Module
#undef @__this
#define @__this 155
#define Module: @155@
#elseif @__this == 155
#undef Module
#undef @__this
#define @__this 156
#define Module: @156@
#elseif @__this == 156
#undef Module
#undef @__this
#define @__this 157
#define Module: @157@
#elseif @__this == 157
#undef Module
#undef @__this
#define @__this 158
#define Module: @158@
#elseif @__this == 158
#undef Module
#undef @__this
#define @__this 159
#define Module: @159@
#elseif @__this == 159
#undef Module
#undef @__this
#define @__this 160
#define Module: @160@
#elseif @__this == 160
#undef Module
#undef @__this
#define @__this 161
#define Module: @161@
#elseif @__this == 161
#undef Module
#undef @__this
#define @__this 162
#define Module: @162@
#elseif @__this == 162
#undef Module
#undef @__this
#define @__this 163
#define Module: @163@
#elseif @__this == 163
#undef Module
#undef @__this
#define @__this 164
#define Module: @164@
#elseif @__this == 164
#undef Module
#undef @__this
#define @__this 165
#define Module: @165@
#elseif @__this == 165
#undef Module
#undef @__this
#define @__this 166
#define Module: @166@
#elseif @__this == 166
#undef Module
#undef @__this
#define @__this 167
#define Module: @167@
#elseif @__this == 167
#undef Module
#undef @__this
#define @__this 168
#define Module: @168@
#elseif @__this == 168
#undef Module
#undef @__this
#define @__this 169
#define Module: @169@
#elseif @__this == 169
#undef Module
#undef @__this
#define @__this 170
#define Module: @170@
#elseif @__this == 170
#undef Module
#undef @__this
#define @__this 171
#define Module: @171@
#elseif @__this == 171
#undef Module
#undef @__this
#define @__this 172
#define Module: @172@
#elseif @__this == 172
#undef Module
#undef @__this
#define @__this 173
#define Module: @173@
#elseif @__this == 173
#undef Module
#undef @__this
#define @__this 174
#define Module: @174@
#elseif @__this == 174
#undef Module
#undef @__this
#define @__this 175
#define Module: @175@
#elseif @__this == 175
#undef Module
#undef @__this
#define @__this 176
#define Module: @176@
#elseif @__this == 176
#undef Module
#undef @__this
#define @__this 177
#define Module: @177@
#elseif @__this == 177
#undef Module
#undef @__this
#define @__this 178
#define Module: @178@
#elseif @__this == 178
#undef Module
#undef @__this
#define @__this 179
#define Module: @179@
#elseif @__this == 179
#undef Module
#undef @__this
#define @__this 180
#define Module: @180@
#elseif @__this == 180
#undef Module
#undef @__this
#define @__this 181
#define Module: @181@
#elseif @__this == 181
#undef Module
#undef @__this
#define @__this 182
#define Module: @182@
#elseif @__this == 182
#undef Module
#undef @__this
#define @__this 183
#define Module: @183@
#elseif @__this == 183
#undef Module
#undef @__this
#define @__this 184
#define Module: @184@
#elseif @__this == 184
#undef Module
#undef @__this
#define @__this 185
#define Module: @185@
#elseif @__this == 185
#undef Module
#undef @__this
#define @__this 186
#define Module: @186@
#elseif @__this == 186
#undef Module
#undef @__this
#define @__this 187
#define Module: @187@
#elseif @__this == 187
#undef Module
#undef @__this
#define @__this 188
#define Module: @188@
#elseif @__this == 188
#undef Module
#undef @__this
#define @__this 189
#define Module: @189@
#elseif @__this == 189
#undef Module
#undef @__this
#define @__this 190
#define Module: @190@
#elseif @__this == 190
#undef Module
#undef @__this
#define @__this 191
#define Module: @191@
#elseif @__this == 191
#undef Module
#undef @__this
#define @__this 192
#define Module: @192@
#elseif @__this == 192
#undef Module
#undef @__this
#define @__this 193
#define Module: @193@
#elseif @__this == 193
#undef Module
#undef @__this
#define @__this 194
#define Module: @194@
#elseif @__this == 194
#undef Module
#undef @__this
#define @__this 195
#define Module: @195@
#elseif @__this == 195
#undef Module
#undef @__this
#define @__this 196
#define Module: @196@
#elseif @__this == 196
#undef Module
#undef @__this
#define @__this 197
#define Module: @197@
#elseif @__this == 197
#undef Module
#undef @__this
#define @__this 198
#define Module: @198@
#elseif @__this == 198
#undef Module
#undef @__this
#define @__this 199
#define Module: @199@
#elseif @__this == 199
#undef Module
#undef @__this
#define @__this 200
#define Module: @200@
#elseif @__this == 200
#undef Module
#undef @__this
#define @__this 201
#define Module: @201@
#elseif @__this == 201
#undef Module
#undef @__this
#define @__this 202
#define Module: @202@
#elseif @__this == 202
#undef Module
#undef @__this
#define @__this 203
#define Module: @203@
#elseif @__this == 203
#undef Module
#undef @__this
#define @__this 204
#define Module: @204@
#elseif @__this == 204
#undef Module
#undef @__this
#define @__this 205
#define Module: @205@
#elseif @__this == 205
#undef Module
#undef @__this
#define @__this 206
#define Module: @206@
#elseif @__this == 206
#undef Module
#undef @__this
#define @__this 207
#define Module: @207@
#elseif @__this == 207
#undef Module
#undef @__this
#define @__this 208
#define Module: @208@
#elseif @__this == 208
#undef Module
#undef @__this
#define @__this 209
#define Module: @209@
#elseif @__this == 209
#undef Module
#undef @__this
#define @__this 210
#define Module: @210@
#elseif @__this == 210
#undef Module
#undef @__this
#define @__this 211
#define Module: @211@
#elseif @__this == 211
#undef Module
#undef @__this
#define @__this 212
#define Module: @212@
#elseif @__this == 212
#undef Module
#undef @__this
#define @__this 213
#define Module: @213@
#elseif @__this == 213
#undef Module
#undef @__this
#define @__this 214
#define Module: @214@
#elseif @__this == 214
#undef Module
#undef @__this
#define @__this 215
#define Module: @215@
#elseif @__this == 215
#undef Module
#undef @__this
#define @__this 216
#define Module: @216@
#elseif @__this == 216
#undef Module
#undef @__this
#define @__this 217
#define Module: @217@
#elseif @__this == 217
#undef Module
#undef @__this
#define @__this 218
#define Module: @218@
#elseif @__this == 218
#undef Module
#undef @__this
#define @__this 219
#define Module: @219@
#elseif @__this == 219
#undef Module
#undef @__this
#define @__this 220
#define Module: @220@
#elseif @__this == 220
#undef Module
#undef @__this
#define @__this 221
#define Module: @221@
#elseif @__this == 221
#undef Module
#undef @__this
#define @__this 222
#define Module: @222@
#elseif @__this == 222
#undef Module
#undef @__this
#define @__this 223
#define Module: @223@
#elseif @__this == 223
#undef Module
#undef @__this
#define @__this 224
#define Module: @224@
#elseif @__this == 224
#undef Module
#undef @__this
#define @__this 225
#define Module: @225@
#elseif @__this == 225
#undef Module
#undef @__this
#define @__this 226
#define Module: @226@
#elseif @__this == 226
#undef Module
#undef @__this
#define @__this 227
#define Module: @227@
#elseif @__this == 227
#undef Module
#undef @__this
#define @__this 228
#define Module: @228@
#elseif @__this == 228
#undef Module
#undef @__this
#define @__this 229
#define Module: @229@
#elseif @__this == 229
#undef Module
#undef @__this
#define @__this 230
#define Module: @230@
#elseif @__this == 230
#undef Module
#undef @__this
#define @__this 231
#define Module: @231@
#elseif @__this == 231
#undef Module
#undef @__this
#define @__this 232
#define Module: @232@
#elseif @__this == 232
#undef Module
#undef @__this
#define @__this 233
#define Module: @233@
#elseif @__this == 233
#undef Module
#undef @__this
#define @__this 234
#define Module: @234@
#elseif @__this == 234
#undef Module
#undef @__this
#define @__this 235
#define Module: @235@
#elseif @__this == 235
#undef Module
#undef @__this
#define @__this 236
#define Module: @236@
#elseif @__this == 236
#undef Module
#undef @__this
#define @__this 237
#define Module: @237@
#elseif @__this == 237
#undef Module
#undef @__this
#define @__this 238
#define Module: @238@
#elseif @__this == 238
#undef Module
#undef @__this
#define @__this 239
#define Module: @239@
#elseif @__this == 239
#undef Module
#undef @__this
#define @__this 240
#define Module: @240@
#elseif @__this == 240
#undef Module
#undef @__this
#define @__this 241
#define Module: @241@
#elseif @__this == 241
#undef Module
#undef @__this
#define @__this 242
#define Module: @242@
#elseif @__this == 242
#undef Module
#undef @__this
#define @__this 243
#define Module: @243@
#elseif @__this == 243
#undef Module
#undef @__this
#define @__this 244
#define Module: @244@
#elseif @__this == 244
#undef Module
#undef @__this
#define @__this 245
#define Module: @245@
#elseif @__this == 245
#undef Module
#undef @__this
#define @__this 246
#define Module: @246@
#elseif @__this == 246
#undef Module
#undef @__this
#define @__this 247
#define Module: @247@
#elseif @__this == 247
#undef Module
#undef @__this
#define @__this 248
#define Module: @248@
#elseif @__this == 248
#undef Module
#undef @__this
#define @__this 249
#define Module: @249@
#elseif @__this == 249
#undef Module
#undef @__this
#define @__this 250
#define Module: @250@
#elseif @__this == 250
#undef Module
#undef @__this
#define @__this 251
#define Module: @251@
#elseif @__this == 251
#undef Module
#undef @__this
#define @__this 252
#define Module: @252@
#elseif @__this == 252
#undef Module
#undef @__this
#define @__this 253
#define Module: @253@
#elseif @__this == 253
#undef Module
#undef @__this
#define @__this 254
#define Module: @254@
#elseif @__this == 254
#undef Module
#undef @__this
#define @__this 255
#define Module: @255@
#elseif @__this == 255
#undef Module
#undef @__this
#define @__this 256
#define Module: @256@
#elseif @__this == 256
#undef Module
#undef @__this
#define @__this 257
#define Module: @257@
#elseif @__this == 257
#undef Module
#undef @__this
#define @__this 258
#define Module: @258@
#elseif @__this == 258
#undef Module
#undef @__this
#define @__this 259
#define Module: @259@
#elseif @__this == 259
#undef Module
#undef @__this
#define @__this 260
#define Module: @260@
#elseif @__this == 260
#undef Module
#undef @__this
#define @__this 261
#define Module: @261@
#elseif @__this == 261
#undef Module
#undef @__this
#define @__this 262
#define Module: @262@
#elseif @__this == 262
#undef Module
#undef @__this
#define @__this 263
#define Module: @263@
#elseif @__this == 263
#undef Module
#undef @__this
#define @__this 264
#define Module: @264@
#elseif @__this == 264
#undef Module
#undef @__this
#define @__this 265
#define Module: @265@
#elseif @__this == 265
#undef Module
#undef @__this
#define @__this 266
#define Module: @266@
#elseif @__this == 266
#undef Module
#undef @__this
#define @__this 267
#define Module: @267@
#elseif @__this == 267
#undef Module
#undef @__this
#define @__this 268
#define Module: @268@
#elseif @__this == 268
#undef Module
#undef @__this
#define @__this 269
#define Module: @269@
#elseif @__this == 269
#undef Module
#undef @__this
#define @__this 270
#define Module: @270@
#elseif @__this == 270
#undef Module
#undef @__this
#define @__this 271
#define Module: @271@
#elseif @__this == 271
#undef Module
#undef @__this
#define @__this 272
#define Module: @272@
#elseif @__this == 272
#undef Module
#undef @__this
#define @__this 273
#define Module: @273@
#elseif @__this == 273
#undef Module
#undef @__this
#define @__this 274
#define Module: @274@
#elseif @__this == 274
#undef Module
#undef @__this
#define @__this 275
#define Module: @275@
#elseif @__this == 275
#undef Module
#undef @__this
#define @__this 276
#define Module: @276@
#elseif @__this == 276
#undef Module
#undef @__this
#define @__this 277
#define Module: @277@
#elseif @__this == 277
#undef Module
#undef @__this
#define @__this 278
#define Module: @278@
#elseif @__this == 278
#undef Module
#undef @__this
#define @__this 279
#define Module: @279@
#elseif @__this == 279
#undef Module
#undef @__this
#define @__this 280
#define Module: @280@
#elseif @__this == 280
#undef Module
#undef @__this
#define @__this 281
#define Module: @281@
#elseif @__this == 281
#undef Module
#undef @__this
#define @__this 282
#define Module: @282@
#elseif @__this == 282
#undef Module
#undef @__this
#define @__this 283
#define Module: @283@
#elseif @__this == 283
#undef Module
#undef @__this
#define @__this 284
#define Module: @284@
#elseif @__this == 284
#undef Module
#undef @__this
#define @__this 285
#define Module: @285@
#elseif @__this == 285
#undef Module
#undef @__this
#define @__this 286
#define Module: @286@
#elseif @__this == 286
#undef Module
#undef @__this
#define @__this 287
#define Module: @287@
#elseif @__this == 287
#undef Module
#undef @__this
#define @__this 288
#define Module: @288@
#elseif @__this == 288
#undef Module
#undef @__this
#define @__this 289
#define Module: @289@
#elseif @__this == 289
#undef Module
#undef @__this
#define @__this 290
#define Module: @290@
#elseif @__this == 290
#undef Module
#undef @__this
#define @__this 291
#define Module: @291@
#elseif @__this == 291
#undef Module
#undef @__this
#define @__this 292
#define Module: @292@
#elseif @__this == 292
#undef Module
#undef @__this
#define @__this 293
#define Module: @293@
#elseif @__this == 293
#undef Module
#undef @__this
#define @__this 294
#define Module: @294@
#elseif @__this == 294
#undef Module
#undef @__this
#define @__this 295
#define Module: @295@
#elseif @__this == 295
#undef Module
#undef @__this
#define @__this 296
#define Module: @296@
#elseif @__this == 296
#undef Module
#undef @__this
#define @__this 297
#define Module: @297@
#elseif @__this == 297
#undef Module
#undef @__this
#define @__this 298
#define Module: @298@
#elseif @__this == 298
#undef Module
#undef @__this
#define @__this 299
#define Module: @299@
#elseif @__this == 299
#undef Module
#undef @__this
#define @__this 300
#define Module: @300@
#elseif @__this == 300
#undef Module
#undef @__this
#define @__this 301
#define Module: @301@
#elseif @__this == 301
#undef Module
#undef @__this
#define @__this 302
#define Module: @302@
#elseif @__this == 302
#undef Module
#undef @__this
#define @__this 303
#define Module: @303@
#elseif @__this == 303
#undef Module
#undef @__this
#define @__this 304
#define Module: @304@
#elseif @__this == 304
#undef Module
#undef @__this
#define @__this 305
#define Module: @305@
#elseif @__this == 305
#undef Module
#undef @__this
#define @__this 306
#define Module: @306@
#elseif @__this == 306
#undef Module
#undef @__this
#define @__this 307
#define Module: @307@
#elseif @__this == 307
#undef Module
#undef @__this
#define @__this 308
#define Module: @308@
#elseif @__this == 308
#undef Module
#undef @__this
#define @__this 309
#define Module: @309@
#elseif @__this == 309
#undef Module
#undef @__this
#define @__this 310
#define Module: @310@
#elseif @__this == 310
#undef Module
#undef @__this
#define @__this 311
#define Module: @311@
#elseif @__this == 311
#undef Module
#undef @__this
#define @__this 312
#define Module: @312@
#elseif @__this == 312
#undef Module
#undef @__this
#define @__this 313
#define Module: @313@
#elseif @__this == 313
#undef Module
#undef @__this
#define @__this 314
#define Module: @314@
#elseif @__this == 314
#undef Module
#undef @__this
#define @__this 315
#define Module: @315@
#elseif @__this == 315
#undef Module
#undef @__this
#define @__this 316
#define Module: @316@
#elseif @__this == 316
#undef Module
#undef @__this
#define @__this 317
#define Module: @317@
#elseif @__this == 317
#undef Module
#undef @__this
#define @__this 318
#define Module: @318@
#elseif @__this == 318
#undef Module
#undef @__this
#define @__this 319
#define Module: @319@
#elseif @__this == 319
#undef Module
#undef @__this
#define @__this 320
#define Module: @320@
#elseif @__this == 320
#undef Module
#undef @__this
#define @__this 321
#define Module: @321@
#elseif @__this == 321
#undef Module
#undef @__this
#define @__this 322
#define Module: @322@
#elseif @__this == 322
#undef Module
#undef @__this
#define @__this 323
#define Module: @323@
#elseif @__this == 323
#undef Module
#undef @__this
#define @__this 324
#define Module: @324@
#elseif @__this == 324
#undef Module
#undef @__this
#define @__this 325
#define Module: @325@
#elseif @__this == 325
#undef Module
#undef @__this
#define @__this 326
#define Module: @326@
#elseif @__this == 326
#undef Module
#undef @__this
#define @__this 327
#define Module: @327@
#elseif @__this == 327
#undef Module
#undef @__this
#define @__this 328
#define Module: @328@
#elseif @__this == 328
#undef Module
#undef @__this
#define @__this 329
#define Module: @329@
#elseif @__this == 329
#undef Module
#undef @__this
#define @__this 330
#define Module: @330@
#elseif @__this == 330
#undef Module
#undef @__this
#define @__this 331
#define Module: @331@
#elseif @__this == 331
#undef Module
#undef @__this
#define @__this 332
#define Module: @332@
#elseif @__this == 332
#undef Module
#undef @__this
#define @__this 333
#define Module: @333@
#elseif @__this == 333
#undef Module
#undef @__this
#define @__this 334
#define Module: @334@
#elseif @__this == 334
#undef Module
#undef @__this
#define @__this 335
#define Module: @335@
#elseif @__this == 335
#undef Module
#undef @__this
#define @__this 336
#define Module: @336@
#elseif @__this == 336
#undef Module
#undef @__this
#define @__this 337
#define Module: @337@
#elseif @__this == 337
#undef Module
#undef @__this
#define @__this 338
#define Module: @338@
#elseif @__this == 338
#undef Module
#undef @__this
#define @__this 339
#define Module: @339@
#elseif @__this == 339
#undef Module
#undef @__this
#define @__this 340
#define Module: @340@
#elseif @__this == 340
#undef Module
#undef @__this
#define @__this 341
#define Module: @341@
#elseif @__this == 341
#undef Module
#undef @__this
#define @__this 342
#define Module: @342@
#elseif @__this == 342
#undef Module
#undef @__this
#define @__this 343
#define Module: @343@
#elseif @__this == 343
#undef Module
#undef @__this
#define @__this 344
#define Module: @344@
#elseif @__this == 344
#undef Module
#undef @__this
#define @__this 345
#define Module: @345@
#elseif @__this == 345
#undef Module
#undef @__this
#define @__this 346
#define Module: @346@
#elseif @__this == 346
#undef Module
#undef @__this
#define @__this 347
#define Module: @347@
#elseif @__this == 347
#undef Module
#undef @__this
#define @__this 348
#define Module: @348@
#elseif @__this == 348
#undef Module
#undef @__this
#define @__this 349
#define Module: @349@
#elseif @__this == 349
#undef Module
#undef @__this
#define @__this 350
#define Module: @350@
#elseif @__this == 350
#undef Module
#undef @__this
#define @__this 351
#define Module: @351@
#elseif @__this == 351
#undef Module
#undef @__this
#define @__this 352
#define Module: @352@
#elseif @__this == 352
#undef Module
#undef @__this
#define @__this 353
#define Module: @353@
#elseif @__this == 353
#undef Module
#undef @__this
#define @__this 354
#define Module: @354@
#elseif @__this == 354
#undef Module
#undef @__this
#define @__this 355
#define Module: @355@
#elseif @__this == 355
#undef Module
#undef @__this
#define @__this 356
#define Module: @356@
#elseif @__this == 356
#undef Module
#undef @__this
#define @__this 357
#define Module: @357@
#elseif @__this == 357
#undef Module
#undef @__this
#define @__this 358
#define Module: @358@
#elseif @__this == 358
#undef Module
#undef @__this
#define @__this 359
#define Module: @359@
#elseif @__this == 359
#undef Module
#undef @__this
#define @__this 360
#define Module: @360@
#elseif @__this == 360
#undef Module
#undef @__this
#define @__this 361
#define Module: @361@
#elseif @__this == 361
#undef Module
#undef @__this
#define @__this 362
#define Module: @362@
#elseif @__this == 362
#undef Module
#undef @__this
#define @__this 363
#define Module: @363@
#elseif @__this == 363
#undef Module
#undef @__this
#define @__this 364
#define Module: @364@
#elseif @__this == 364
#undef Module
#undef @__this
#define @__this 365
#define Module: @365@
#elseif @__this == 365
#undef Module
#undef @__this
#define @__this 366
#define Module: @366@
#elseif @__this == 366
#undef Module
#undef @__this
#define @__this 367
#define Module: @367@
#elseif @__this == 367
#undef Module
#undef @__this
#define @__this 368
#define Module: @368@
#elseif @__this == 368
#undef Module
#undef @__this
#define @__this 369
#define Module: @369@
#elseif @__this == 369
#undef Module
#undef @__this
#define @__this 370
#define Module: @370@
#elseif @__this == 370
#undef Module
#undef @__this
#define @__this 371
#define Module: @371@
#elseif @__this == 371
#undef Module
#undef @__this
#define @__this 372
#define Module: @372@
#elseif @__this == 372
#undef Module
#undef @__this
#define @__this 373
#define Module: @373@
#elseif @__this == 373
#undef Module
#undef @__this
#define @__this 374
#define Module: @374@
#elseif @__this == 374
#undef Module
#undef @__this
#define @__this 375
#define Module: @375@
#elseif @__this == 375
#undef Module
#undef @__this
#define @__this 376
#define Module: @376@
#elseif @__this == 376
#undef Module
#undef @__this
#define @__this 377
#define Module: @377@
#elseif @__this == 377
#undef Module
#undef @__this
#define @__this 378
#define Module: @378@
#elseif @__this == 378
#undef Module
#undef @__this
#define @__this 379
#define Module: @379@
#elseif @__this == 379
#undef Module
#undef @__this
#define @__this 380
#define Module: @380@
#elseif @__this == 380
#undef Module
#undef @__this
#define @__this 381
#define Module: @381@
#elseif @__this == 381
#undef Module
#undef @__this
#define @__this 382
#define Module: @382@
#elseif @__this == 382
#undef Module
#undef @__this
#define @__this 383
#define Module: @383@
#elseif @__this == 383
#undef Module
#undef @__this
#define @__this 384
#define Module: @384@
#elseif @__this == 384
#undef Module
#undef @__this
#define @__this 385
#define Module: @385@
#elseif @__this == 385
#undef Module
#undef @__this
#define @__this 386
#define Module: @386@
#elseif @__this == 386
#undef Module
#undef @__this
#define @__this 387
#define Module: @387@
#elseif @__this == 387
#undef Module
#undef @__this
#define @__this 388
#define Module: @388@
#elseif @__this == 388
#undef Module
#undef @__this
#define @__this 389
#define Module: @389@
#elseif @__this == 389
#undef Module
#undef @__this
#define @__this 390
#define Module: @390@
#elseif @__this == 390
#undef Module
#undef @__this
#define @__this 391
#define Module: @391@
#elseif @__this == 391
#undef Module
#undef @__this
#define @__this 392
#define Module: @392@
#elseif @__this == 392
#undef Module
#undef @__this
#define @__this 393
#define Module: @393@
#elseif @__this == 393
#undef Module
#undef @__this
#define @__this 394
#define Module: @394@
#elseif @__this == 394
#undef Module
#undef @__this
#define @__this 395
#define Module: @395@
#elseif @__this == 395
#undef Module
#undef @__this
#define @__this 396
#define Module: @396@
#elseif @__this == 396
#undef Module
#undef @__this
#define @__this 397
#define Module: @397@
#elseif @__this == 397
#undef Module
#undef @__this
#define @__this 398
#define Module: @398@
#elseif @__this == 398
#undef Module
#undef @__this
#define @__this 399
#define Module: @399@
#elseif @__this == 399
#undef Module
#undef @__this
#define @__this 400
#define Module: @400@
#elseif @__this == 400
#undef Module
#undef @__this
#define @__this 401
#define Module: @401@
#elseif @__this == 401
#undef Module
#undef @__this
#define @__this 402
#define Module: @402@
#elseif @__this == 402
#undef Module
#undef @__this
#define @__this 403
#define Module: @403@
#elseif @__this == 403
#undef Module
#undef @__this
#define @__this 404
#define Module: @404@
#elseif @__this == 404
#undef Module
#undef @__this
#define @__this 405
#define Module: @405@
#elseif @__this == 405
#undef Module
#undef @__this
#define @__this 406
#define Module: @406@
#elseif @__this == 406
#undef Module
#undef @__this
#define @__this 407
#define Module: @407@
#elseif @__this == 407
#undef Module
#undef @__this
#define @__this 408
#define Module: @408@
#elseif @__this == 408
#undef Module
#undef @__this
#define @__this 409
#define Module: @409@
#elseif @__this == 409
#undef Module
#undef @__this
#define @__this 410
#define Module: @410@
#elseif @__this == 410
#undef Module
#undef @__this
#define @__this 411
#define Module: @411@
#elseif @__this == 411
#undef Module
#undef @__this
#define @__this 412
#define Module: @412@
#elseif @__this == 412
#undef Module
#undef @__this
#define @__this 413
#define Module: @413@
#elseif @__this == 413
#undef Module
#undef @__this
#define @__this 414
#define Module: @414@
#elseif @__this == 414
#undef Module
#undef @__this
#define @__this 415
#define Module: @415@
#elseif @__this == 415
#undef Module
#undef @__this
#define @__this 416
#define Module: @416@
#elseif @__this == 416
#undef Module
#undef @__this
#define @__this 417
#define Module: @417@
#elseif @__this == 417
#undef Module
#undef @__this
#define @__this 418
#define Module: @418@
#elseif @__this == 418
#undef Module
#undef @__this
#define @__this 419
#define Module: @419@
#elseif @__this == 419
#undef Module
#undef @__this
#define @__this 420
#define Module: @420@
#elseif @__this == 420
#undef Module
#undef @__this
#define @__this 421
#define Module: @421@
#elseif @__this == 421
#undef Module
#undef @__this
#define @__this 422
#define Module: @422@
#elseif @__this == 422
#undef Module
#undef @__this
#define @__this 423
#define Module: @423@
#elseif @__this == 423
#undef Module
#undef @__this
#define @__this 424
#define Module: @424@
#elseif @__this == 424
#undef Module
#undef @__this
#define @__this 425
#define Module: @425@
#elseif @__this == 425
#undef Module
#undef @__this
#define @__this 426
#define Module: @426@
#elseif @__this == 426
#undef Module
#undef @__this
#define @__this 427
#define Module: @427@
#elseif @__this == 427
#undef Module
#undef @__this
#define @__this 428
#define Module: @428@
#elseif @__this == 428
#undef Module
#undef @__this
#define @__this 429
#define Module: @429@
#elseif @__this == 429
#undef Module
#undef @__this
#define @__this 430
#define Module: @430@
#elseif @__this == 430
#undef Module
#undef @__this
#define @__this 431
#define Module: @431@
#elseif @__this == 431
#undef Module
#undef @__this
#define @__this 432
#define Module: @432@
#elseif @__this == 432
#undef Module
#undef @__this
#define @__this 433
#define Module: @433@
#elseif @__this == 433
#undef Module
#undef @__this
#define @__this 434
#define Module: @434@
#elseif @__this == 434
#undef Module
#undef @__this
#define @__this 435
#define Module: @435@
#elseif @__this == 435
#undef Module
#undef @__this
#define @__this 436
#define Module: @436@
#elseif @__this == 436
#undef Module
#undef @__this
#define @__this 437
#define Module: @437@
#elseif @__this == 437
#undef Module
#undef @__this
#define @__this 438
#define Module: @438@
#elseif @__this == 438
#undef Module
#undef @__this
#define @__this 439
#define Module: @439@
#elseif @__this == 439
#undef Module
#undef @__this
#define @__this 440
#define Module: @440@
#elseif @__this == 440
#undef Module
#undef @__this
#define @__this 441
#define Module: @441@
#elseif @__this == 441
#undef Module
#undef @__this
#define @__this 442
#define Module: @442@
#elseif @__this == 442
#undef Module
#undef @__this
#define @__this 443
#define Module: @443@
#elseif @__this == 443
#undef Module
#undef @__this
#define @__this 444
#define Module: @444@
#elseif @__this == 444
#undef Module
#undef @__this
#define @__this 445
#define Module: @445@
#elseif @__this == 445
#undef Module
#undef @__this
#define @__this 446
#define Module: @446@
#elseif @__this == 446
#undef Module
#undef @__this
#define @__this 447
#define Module: @447@
#elseif @__this == 447
#undef Module
#undef @__this
#define @__this 448
#define Module: @448@
#elseif @__this == 448
#undef Module
#undef @__this
#define @__this 449
#define Module: @449@
#elseif @__this == 449
#undef Module
#undef @__this
#define @__this 450
#define Module: @450@
#elseif @__this == 450
#undef Module
#undef @__this
#define @__this 451
#define Module: @451@
#elseif @__this == 451
#undef Module
#undef @__this
#define @__this 452
#define Module: @452@
#elseif @__this == 452
#undef Module
#undef @__this
#define @__this 453
#define Module: @453@
#elseif @__this == 453
#undef Module
#undef @__this
#define @__this 454
#define Module: @454@
#elseif @__this == 454
#undef Module
#undef @__this
#define @__this 455
#define Module: @455@
#elseif @__this == 455
#undef Module
#undef @__this
#define @__this 456
#define Module: @456@
#elseif @__this == 456
#undef Module
#undef @__this
#define @__this 457
#define Module: @457@
#elseif @__this == 457
#undef Module
#undef @__this
#define @__this 458
#define Module: @458@
#elseif @__this == 458
#undef Module
#undef @__this
#define @__this 459
#define Module: @459@
#elseif @__this == 459
#undef Module
#undef @__this
#define @__this 460
#define Module: @460@
#elseif @__this == 460
#undef Module
#undef @__this
#define @__this 461
#define Module: @461@
#elseif @__this == 461
#undef Module
#undef @__this
#define @__this 462
#define Module: @462@
#elseif @__this == 462
#undef Module
#undef @__this
#define @__this 463
#define Module: @463@
#elseif @__this == 463
#undef Module
#undef @__this
#define @__this 464
#define Module: @464@
#elseif @__this == 464
#undef Module
#undef @__this
#define @__this 465
#define Module: @465@
#elseif @__this == 465
#undef Module
#undef @__this
#define @__this 466
#define Module: @466@
#elseif @__this == 466
#undef Module
#undef @__this
#define @__this 467
#define Module: @467@
#elseif @__this == 467
#undef Module
#undef @__this
#define @__this 468
#define Module: @468@
#elseif @__this == 468
#undef Module
#undef @__this
#define @__this 469
#define Module: @469@
#elseif @__this == 469
#undef Module
#undef @__this
#define @__this 470
#define Module: @470@
#elseif @__this == 470
#undef Module
#undef @__this
#define @__this 471
#define Module: @471@
#elseif @__this == 471
#undef Module
#undef @__this
#define @__this 472
#define Module: @472@
#elseif @__this == 472
#undef Module
#undef @__this
#define @__this 473
#define Module: @473@
#elseif @__this == 473
#undef Module
#undef @__this
#define @__this 474
#define Module: @474@
#elseif @__this == 474
#undef Module
#undef @__this
#define @__this 475
#define Module: @475@
#elseif @__this == 475
#undef Module
#undef @__this
#define @__this 476
#define Module: @476@
#elseif @__this == 476
#undef Module
#undef @__this
#define @__this 477
#define Module: @477@
#elseif @__this == 477
#undef Module
#undef @__this
#define @__this 478
#define Module: @478@
#elseif @__this == 478
#undef Module
#undef @__this
#define @__this 479
#define Module: @479@
#elseif @__this == 479
#undef Module
#undef @__this
#define @__this 480
#define Module: @480@
#elseif @__this == 480
#undef Module
#undef @__this
#define @__this 481
#define Module: @481@
#elseif @__this == 481
#undef Module
#undef @__this
#define @__this 482
#define Module: @482@
#elseif @__this == 482
#undef Module
#undef @__this
#define @__this 483
#define Module: @483@
#elseif @__this == 483
#undef Module
#undef @__this
#define @__this 484
#define Module: @484@
#elseif @__this == 484
#undef Module
#undef @__this
#define @__this 485
#define Module: @485@
#elseif @__this == 485
#undef Module
#undef @__this
#define @__this 486
#define Module: @486@
#elseif @__this == 486
#undef Module
#undef @__this
#define @__this 487
#define Module: @487@
#elseif @__this == 487
#undef Module
#undef @__this
#define @__this 488
#define Module: @488@
#elseif @__this == 488
#undef Module
#undef @__this
#define @__this 489
#define Module: @489@
#elseif @__this == 489
#undef Module
#undef @__this
#define @__this 490
#define Module: @490@
#elseif @__this == 490
#undef Module
#undef @__this
#define @__this 491
#define Module: @491@
#elseif @__this == 491
#undef Module
#undef @__this
#define @__this 492
#define Module: @492@
#else
#error Out of Module: bounds!
#endif
#endif
// Forward our basics!
forward Module:Load();
modules.pwn
(allows you to register and invoke other modules)
PHP Code:
#include <a_samp>
#include <amx_assembly\amx_header>
#include <amx_assembly\dynamic_call>
#include <amx_assembly\stack_trace>
#include <metarpg\module>
#include <metarpg\util>
enum E_MODULE
{
Module_Name[64],
Module_Description[128],
Module_Author[64],
Module_Version[32],
Module_Internal_Token[8]
};
stock g_Modules[64][E_MODULE];
stock g_Modules_Count = 0;
#if !defined META_STANDALONE
public OnFilterScriptInit()
Module_Initialize();
#endif
// This little trick lets us pass the module internal token when we register ourselves.
// Trick intellisense into including the parameters in its definition!
#if false
native Module_Register(ModuleName[], ModuleAuthor[], ModuleVersion[], ModuleDescription[]);
#endif
#define Module_Register(%1) _Module_Register(%1, .ModuleInternalToken = #Module:)
stock _Module_Register(ModuleName[64], ModuleAuthor[64]="", ModuleVersion[32]="", ModuleDescription[128]="", ModuleInternalToken[8])
{
set(g_Modules[g_Modules_Count][Module_Name], ModuleName, 64);
set(g_Modules[g_Modules_Count][Module_Author], ModuleAuthor, 64);
set(g_Modules[g_Modules_Count][Module_Version], ModuleVersion, 32);
set(g_Modules[g_Modules_Count][Module_Description], ModuleDescription, 128);
set(g_Modules[g_Modules_Count][Module_Internal_Token], ModuleInternalToken, 8);
g_Modules_Count++;
return g_Modules_Count-1;
}
// Let's register ourself as a module!
public Module:Load()
Module_Register("Core - Modules", "Alcatrik", "2.0.0", "Provides the infrastructure to allow for modularity throughout the gamemode.");
// Load all functions that end in @Load!
stock Module_Initialize()
{
new amxhdr[AMX_HDR];
GetAmxHeader(amxhdr);
new pubs = GetNumPublics(amxhdr);
new count;
for(new i; i < pubs; i++)
{
static name[128];
GetPublicNameFromIndex(i, name, 128);
new idx = strlen(name)-strlen("@Load");
if(idx < 0)
continue;
if(!strcmp(name[idx], "@Load"))
{
CallFunction(GetPublicAddressFromIndex(i));
new this_module[128], this_module_idx;
strmid(this_module, name, 0, idx+1);
this_module_idx = Module_FindByToken(this_module);
if(!isnull(g_Modules[this_module_idx][Module_Name]))
printf(" -> %s initialised...", g_Modules[this_module_idx][Module_Name]);
count++;
}
}
return count;
}
stock Module_GetName(Module)
{
return g_Modules[Module][Module_Name];
}
stock Module_GetDescription(Module)
return g_Modules[Module][Module_Description];
stock Module_GetAuthor(Module)
return g_Modules[Module][Module_Author];
stock Module_GetVersion(Module)
return g_Modules[Module][Module_Version];
stock Module_GetInternalToken(Module)
return g_Modules[Module][Module_Internal_Token];
stock Module_GetFunction(Module, Func[])
{
new tmp[128];
format(tmp, 128, "%s%s", g_Modules[Module][Module_Internal_Token], Func)
return GetPublicAddressFromName(tmp);
}
stock Module_FindByName(name[])
{
for(new i; i < sizeof(g_Modules); i++)
{
if(equal(g_Modules[i][Module_Name], name))
return i;
}
return -1;
}
stock Module_FindByToken(token[])
{
for(new i; i < sizeof(g_Modules); i++)
{
if(equal(g_Modules[i][Module_Internal_Token], token))
return i;
}
return -1;
}
stock Module_GetCount()
return g_Modules_Count;
(for dynamic event hooking)
PHP Code:
#include <a_samp>
#include <amx_assembly\amx_header>
#include <amx_assembly\dynamic_call>
#include <metarpg\module>
#include <metarpg\util>
enum
{
Event_Hash,
Event_Address,
Event_Module
}
stock g_EventDictionary[4096][3];
stock g_EventCount = 0;
stock g_EventHash;
stock g_EventCancelled = 0;
// Given I can't put comments in the macro, and given there's a couple of counter intuitive things in this macro,
// I'll document the weirder things here:
// 1. The ;; - Pawn strips off the last ; in defines, so what this should actually be read as is Event_Call(%0);. This will
// cause an "Undefined symbol: Event_Call" error where people forget their semicolons but I can live with that given you are
// meant to terminate lines with semicolons with Pawn and anyone who doesn't is a heathen dog botherer.
// 2. YHash_Once - a little smart trick I came up with. It effectively caches the hash - meaing that it is only ran once. This
// does on the other hand mean that I need a separate function for if anyone ever wants to call an event dynamically (ie. with
// a generated event name rather than just a static OnPlayerUpdate or whatever). End result of this is that after the first event
// is ran, thereon event calls are as fast as FastCall was in previous versions of events.pwn.
#define Event_Call(%0);; \
{ \
static hash; \
static cancelled = 0; \
\
hash = YHash_Once(hash, %0); \
\
g_EventHash = hash; \
g_EventCancelled = cancelled; \
\
for(new __e; __e < g_EventCount; __e++) \
{ \
if(g_EventDictionary[__e][Event_Hash] != hash) \
continue; \
\
CallFunction(g_EventDictionary[__e][Event_Address]); \
} \
}
#define Event_CallEx(%0,%1);; \
{ \
static hash; \
static cancelled = 0; \
\
hash = YHash_Once(hash, %0); \
\
g_EventHash = hash; \
g_EventCancelled = cancelled; \
\
for(new __e; __e < g_EventCount; __e++) \
{ \
if(g_EventDictionary[__e][Event_Hash] != hash) \
continue; \
\
CallFunction(g_EventDictionary[__e][Event_Address], %1); \
} \
}
public Module:Load()
{
Module_Register("Core - Events", "Alcatrik", "4.0.0", "Facilitates internally hooking multiple functions from a variety of modules to events within PAWN.");
// Search for shortcuts!
new amxhdr[AMX_HDR];
GetAmxHeader(amxhdr);
new pubs = GetNumPublics(amxhdr);
for(new i; i < pubs; i++)
{
static name[128];
GetPublicNameFromIndex(i, name, 128);
new idx = chrfindrev('@', name);
if(idx == -1 || !beginsWith(name[idx+1], "e_"))
continue;
new module[8];
strmid(module, name, 0, idx+1);
_Event_Hook(name[idx+3], name, _, module);
}
}
#define Event_Hook(%0) _Event_Hook(%0, ._caller =#Module:)
stock _Event_Hook(EventName[], Callback[], afterModule[]="", _caller[])
{
assert(g_EventCount < sizeof(g_EventDictionary));
if(funcidx(Callback) == -1)
return false;
new idx = g_EventCount, hash = YHash(EventName);
if(!isnull(afterModule))
{
new target = Module_FindByName(afterModule);
for(new i = g_EventCount; i >= 0; i--)
{
if(g_EventDictionary[i][Event_Hash] == hash && g_EventDictionary[i][Event_Module] == target)
{
idx = i+1;
break;
}
}
}
new data[3];
data[0] = hash;
data[1] = GetPublicAddressFromName(Callback);
data[2] = Module_FindByToken(_caller);
array_insert_arr(g_EventDictionary, idx, data);
g_EventCount++;
return true;
}
stock YHash_Once(var, str[], {_, Float}:...)
{
if(!var)
return YHash(str);
else
return var;
}
stock Event_Cancel()
{
g_EventCancelled = true;
return 1;
}
stock bool:Event_WasCancelled()
return bool:g_EventCancelled;
// SA-MP callbacks
public OnPlayerConnect(playerid)
{
Event_CallEx("OnPlayerConnect", playerid);
return !Event_WasCancelled();
}
public OnPlayerDisconnect(playerid, reason)
{
Event_CallEx("OnPlayerDisconnect", playerid, reason);
return !Event_WasCancelled();
}
public OnPlayerSpawn(playerid)
{
Event_CallEx("OnPlayerSpawn", playerid);
return !Event_WasCancelled();
}
public OnPlayerDeath(playerid, killerid, reason)
{
Event_CallEx("OnPlayerDeath", playerid, killerid, reason);
return !Event_WasCancelled();
}
public OnVehicleSpawn(vehicleid)
{
Event_CallEx("OnVehicleSpawn", vehicleid);
return !Event_WasCancelled();
}
public OnVehicleDeath(vehicleid, killerid)
{
Event_CallEx("OnVehicleDeath", vehicleid, killerid);
return !Event_WasCancelled();
}
public OnPlayerText(playerid, text[])
{
Event_CallEx("OnPlayerText", playerid, ref(text));
return !Event_WasCancelled();
}
public OnPlayerCommandText(playerid, cmdtext[])
{
Event_CallEx("OnPlayerCommandText", playerid, ref(cmdtext));
return Event_WasCancelled();
}
public OnPlayerRequestClass(playerid, classid)
{
Event_CallEx("OnPlayerRequestClass", playerid, classid);
return !Event_WasCancelled();
}
public OnPlayerEnterVehicle(playerid, vehicleid, ispassenger)
{
Event_CallEx("OnPlayerEnterVehicle", playerid, vehicleid, ispassenger);
return !Event_WasCancelled();
}
public OnPlayerExitVehicle(playerid, vehicleid)
{
Event_CallEx("OnPlayerExitVehicle", playerid, vehicleid);
return !Event_WasCancelled();
}
public OnPlayerStateChange(playerid, newstate, oldstate)
{
Event_CallEx("OnPlayerStateChange", playerid, newstate, oldstate);
return !Event_WasCancelled();
}
public OnPlayerEnterCheckpoint(playerid)
{
Event_CallEx("OnPlayerEnterCheckpoint", playerid);
return !Event_WasCancelled();
}
public OnPlayerLeaveCheckpoint(playerid)
{
Event_CallEx("OnPlayerLeaveCheckpoint", playerid);
return !Event_WasCancelled();
}
public OnPlayerEnterRaceCheckpoint(playerid)
{
Event_CallEx("OnPlayerEnterRaceCheckpoint", playerid);
return !Event_WasCancelled();
}
public OnPlayerLeaveRaceCheckpoint(playerid)
{
Event_CallEx("OnPlayerLeaveRaceCheckpoint", playerid);
return !Event_WasCancelled();
}
public OnRconCommand(cmd[])
{
Event_CallEx("OnRconCommand", ref(cmd));
return Event_WasCancelled();
}
public OnPlayerRequestSpawn(playerid)
{
Event_CallEx("OnPlayerRequestSpawn", playerid);
return !Event_WasCancelled();
}
public OnObjectMoved(objectid)
{
Event_CallEx("OnObjectMoved", objectid);
return !Event_WasCancelled();
}
public OnPlayerObjectMoved(playerid, objectid)
{
Event_CallEx("OnPlayerObjectMoved", playerid, objectid);
return !Event_WasCancelled();
}
public OnPlayerPickUpPickup(playerid, pickupid)
{
Event_CallEx("OnPlayerPickUpPickup", playerid, pickupid);
return !Event_WasCancelled();
}
public OnVehicleMod(playerid, vehicleid, componentid)
{
Event_CallEx("OnVehicleMod", playerid, vehicleid, componentid);
return !Event_WasCancelled();
}
public OnEnterExitModShop(playerid, enterexit, interiorid)
{
Event_CallEx("OnEnterExitModShop", playerid, enterexit, interiorid);
return !Event_WasCancelled();
}
public OnVehiclePaintjob(playerid, vehicleid, paintjobid)
{
Event_CallEx("OnVehiclePaintjob", playerid, vehicleid, paintjobid);
return !Event_WasCancelled();
}
public OnVehicleRespray(playerid, vehicleid, color1, color2)
{
Event_CallEx("OnVehicleRespray", playerid, vehicleid, color1, color2);
return !Event_WasCancelled();
}
public OnVehicleDamageStatusUpdate(vehicleid, playerid)
{
Event_CallEx("OnVehicleDamageStatusUpdate", vehicleid, playerid);
return !Event_WasCancelled();
}
public OnUnoccupiedVehicleUpdate(vehicleid, playerid, passenger_seat, Float:new_x, Float:new_y, Float:new_z)
{
Event_CallEx("OnUnoccupiedVehicleUpdate", vehicleid, playerid, passenger_seat, Float:new_x, Float:new_y, Float:new_z);
return !Event_WasCancelled();
}
public OnPlayerSelectedMenuRow(playerid, row)
{
Event_CallEx("OnPlayerSelectedMenuRow", playerid, row);
return !Event_WasCancelled();
}
public OnPlayerExitedMenu(playerid)
{
Event_CallEx("OnPlayerExitedMenu", playerid);
return !Event_WasCancelled();
}
public OnPlayerInteriorChange(playerid, newinteriorid, oldinteriorid)
{
Event_CallEx("OnPlayerInteriorChange", playerid, newinteriorid, oldinteriorid);
return !Event_WasCancelled();
}
public OnPlayerKeyStateChange(playerid, newkeys, oldkeys)
{
Event_CallEx("OnPlayerKeyStateChange", playerid, newkeys, oldkeys);
return !Event_WasCancelled();
}
public OnRconLoginAttempt(ip[], password[], success)
{
Event_CallEx("OnRconLoginAttempt", ref(ip), ref(password), success);
return !Event_WasCancelled();
}
public OnPlayerUpdate(playerid)
{
Event_CallEx("OnPlayerUpdate", playerid);
return !Event_WasCancelled();
}
public OnPlayerStreamIn(playerid, forplayerid)
{
Event_CallEx("OnPlayerStreamIn", playerid, forplayerid);
return !Event_WasCancelled();
}
public OnPlayerStreamOut(playerid, forplayerid)
{
Event_CallEx("OnPlayerStreamOut", playerid, forplayerid);
return !Event_WasCancelled();
}
public OnVehicleStreamIn(vehicleid, forplayerid)
{
Event_CallEx("OnVehicleStreamIn", vehicleid, forplayerid);
return !Event_WasCancelled();
}
public OnVehicleStreamOut(vehicleid, forplayerid)
{
Event_CallEx("OnVehicleStreamOut", vehicleid, forplayerid);
return !Event_WasCancelled();
}
public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
{
Event_CallEx("OnDialogResponse", playerid, dialogid, response, listitem, ref(inputtext));
return !Event_WasCancelled();
}
public OnPlayerTakeDamage(playerid, issuerid, Float:amount, weaponid, bodypart)
{
Event_CallEx("OnPlayerTakeDamage", playerid, issuerid, amount, weaponid, bodypart);
return !Event_WasCancelled();
}
public OnPlayerGiveDamage(playerid, damagedid, Float:amount, weaponid, bodypart)
{
Event_CallEx("OnPlayerGiveDamage", playerid, damagedid, amount, weaponid, bodypart);
return !Event_WasCancelled();
}
public OnPlayerClickMap(playerid, Float:fX, Float:fY, Float:fZ)
{
Event_CallEx("OnPlayerClickMap", playerid, fX, fY, fZ);
return !Event_WasCancelled();
}
public OnPlayerClickTextDraw(playerid, Text:clickedid)
{
Event_CallEx("OnPlayerClickTextDraw", playerid, _:clickedid);
return !Event_WasCancelled();
}
public OnPlayerClickPlayerTextDraw(playerid, PlayerText:playertextid)
{
new wasCancelled;
Event_CallEx("OnPlayerClickPlayerTextDraw", playerid, _:playertextid);
wasCancelled = Event_WasCancelled()
Event_CallEx("OnPlayerClickPlayerTD", playerid, _:playertextid);
return !wasCancelled && !Event_WasCancelled();
}
public OnPlayerClickPlayer(playerid, clickedplayerid, source)
{
Event_CallEx("OnPlayerClickPlayer", playerid, clickedplayerid, source);
return !Event_WasCancelled();
}
public OnPlayerSelectObject(playerid, type, objectid, modelid, Float:fX, Float:fY, Float:fZ)
{
Event_CallEx("OnPlayerSelectObject", playerid, type, objectid, modelid, fX, fY, fZ);
return !Event_WasCancelled();
}
public OnPlayerWeaponShot(playerid, weaponid, hittype, hitid, Float:fX, Float:fY, Float:fZ)
{
Event_CallEx("OnPlayerWeaponShot", playerid, weaponid, hittype, hitid, fX, fY, fZ);
return !Event_WasCancelled();
}
public OnGameModeExit()
{
Event_Call("OnScriptExit");
return !Event_WasCancelled();
}
public OnFilterScriptExit()
{
Event_Call("OnScriptExit");
return !Event_WasCancelled();
}
PHP Code:
#include <a_samp>
#include <a_mysql>
#include <amx_assembly\amx_header>
#include <amx_assembly\dynamic_call>
#include <metarpg\module>
#include <metarpg\util>
forward Module:e_OnPlayerConnect(playerid);
forward Module:delegate_OnPlayerConnect(playerid);
forward Module:e_OnPlayerRequestClass(playerid, classid);
new g_PlayerAccount[MAX_PLAYERS][E_ACCOUNT];
static vw_Account_Login = -1;
public Module:e_OnPlayerConnect(playerid)
{
SetTimerEx(#Module:"delegate_OnPlayerConnect", 500, 0, "i", playerid);
}
public Module:delegate_OnPlayerConnect(playerid)
{
if(vw_Account_Login == -1)
vw_Account_Login = Module_FindByName("vw_Account_Login");
new f = Module_GetFunction(vw_Account_Login, "Draw");
CallFunction(f, playerid);
}
stock LoadPlayerAccount(playerid)
{
Account_Load(g_PlayerAccount[playerid]);
Event_CallEx("OnPlayerLogin", playerid);
}
stock IsPlayerLoggedIn(playerid)
{
return !isnull(g_PlayerAccount[playerid][Account_Name]);
}
stock ORM:GetPlayerAccountOrm(playerid)
{
return g_PlayerAccount[playerid][Account_Orm];
}
stock GetPlayerAccountId(playerid)
{
return g_PlayerAccount[playerid][Account_Id];
}
stock GetPlayerAccountName(playerid)
{
return g_PlayerAccount[playerid][Account_Name];
}
stock GetPlayerAccountEmail(playerid)
{
return g_PlayerAccount[playerid][Account_Email];
}
stock GetPlayerAccountLastLogin(playerid)
{
return g_PlayerAccount[playerid][Account_Time_LastLogin];
}
stock GetPlayerAccountCreated(playerid)
{
return g_PlayerAccount[playerid][Account_Time_Created];
}
// Remove spawn button
public Module:e_OnPlayerRequestClass(playerid, classid)
return 0;