Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <a_samp>
- #include <YSI\y_hooks>
- #include <YSI\y_amx>
- stock Init1d(array[], const values[], size, values_size = sizeof(values)) {
- for (new i = 0; i < size; i += values_size)
- memcpy(array[i], values, 0, min(values_size, size - i) * 4, values_size);
- return 1;
- }
- stock Init2d(array[][], const values[], sizes[], values_size = sizeof(values)) {
- for (new i = 0; i < sizes[0]; i++)
- Init1d(array[i], values, sizes[1], values_size);
- return 1;
- }
- stock Init3d(array[][][], const values[], sizes[], values_size = sizeof(values)) {
- for (new i = 0; i < sizes[0]; i++)
- Init2d(array[i], values, sizes[1], values_size);
- return 1;
- }
- stock _InitArray(sizes[3], const values[], values_size = sizeof(values), ...) {
- if (sizes[2] > 1) {
- #emit PUSH.S values_size
- #emit PUSH.S sizes
- #emit PUSH.S values
- #emit PUSH.S 24
- #emit PUSH.C 16
- #emit LCTRL 6
- #emit ADD.C 28
- #emit PUSH.pri
- #emit CONST.pri Init3d
- #emit SCTRL 6
- } else if (sizes[1] > 1) {
- #emit PUSH.S values_size
- #emit PUSH.S sizes
- #emit PUSH.S values
- #emit PUSH.S 24
- #emit PUSH.C 16
- #emit LCTRL 6
- #emit ADD.C 28
- #emit PUSH.pri
- #emit CONST.pri Init2d
- #emit SCTRL 6
- }
- }
- #define InitArray(%1,%2) \
- _InitArray({_:ARS1:ARS2:(%1)~}, %2, _, _:%1)
- #define ARS1:ARS2:(%1:%2)~ \
- sizeof(%2), sizeof(%2[]), sizeof(%2[][])
- #define ARS2:(%1)~ \
- sizeof(%1), sizeof(%1[]), sizeof(%1[][])
- #define Array:%1[%2]%3={%4} \
- %1[%2]%3; AR1:AR2:%1();InitArray(%1,{%4}); stock ARa:ARb:%1; //
- #define AR1:AR2:%1:%2(%3); \
- @_Ar%2(%3);@_Ar%2(%3)
- #define AR2:%1(%2); \
- @_Ar%1(%2);AR1:@_Ar%1(%2)
- #define ARa:ARb:%1:%2; \
- @_AR%2
- #define ARb:%1; \
- @_AR%1
- hook OnScriptInit() {
- for (new buf[32], idx; (idx = AMX_GetPublicName(idx, buf, !"@_Ar")); )
- CallLocalFunction(buf, !"");
- }
Advertisement
Add Comment
Please, Sign In to add comment