22#include < map_manager>
33
44# define PLUGIN " Map Manager: Advanced lists"
5- # define VERSION " 0.0.2 "
5+ # define VERSION " 0.0.3 "
66# define AUTHOR " Mistrick"
77
8+ #pragma semicolon 1
9+
10+ # define MAX_MAPLISTS 16
11+
812new const FILE_MAP_LISTS[] = " maplists.ini" ;
913
1014enum (+= 100 ) {
1115 TASK_CHECK_LIST = 150
1216};
1317
1418enum _: MapListInfo {
19+ AnyTime,
1520 StartTime,
1621 StopTime,
1722 ClearOldList,
23+ ListName[32 ],
1824 FileList[128 ]
1925};
2026
2127new Array: g_aLists;
22- new g_iCurList = - 1 ;
28+ new Array: g_aActiveLists;
29+ new Array: g_aMapLists[MAX_MAPLISTS];
2330
2431public plugin_init ()
2532{
2633 register_plugin (PLUGIN, VERSION, AUTHOR);
2734}
35+ public plugin_natives ()
36+ {
37+ register_library (" map_manager_adv_lists" );
38+
39+ register_native (" mapm_advl_get_active_lists" , " native_get_active_lists" );
40+ register_native (" mapm_advl_get_list_name" , " native_get_list_name" );
41+ register_native (" mapm_advl_get_list_array" , " native_get_list_array" );
42+ }
43+ public native_get_active_lists (plugin, params)
44+ {
45+ return ArraySize (g_aActiveLists);
46+ }
47+ public native_get_list_name (plugin, params)
48+ {
49+ enum {
50+ arg_item = 1 ,
51+ arg_list_name,
52+ arg_size
53+ };
54+
55+ new item = ArrayGetCell (g_aActiveLists, get_param (arg_item));
56+ new list_info[MapListInfo];
57+ ArrayGetArray (g_aLists, item, list_info);
58+ set_string (arg_list_name, list_info[ListName], get_param (arg_size));
59+ }
60+ public native_get_list_array (plugin, params)
61+ {
62+ enum {
63+ arg_item = 1
64+ };
65+
66+ new item = ArrayGetCell (g_aActiveLists, get_param (arg_item));
67+ return _: g_aMapLists[item];
68+ }
2869public plugin_cfg ()
2970{
3071 new file_path[256 ]; get_localinfo (" amxx_configsdir" , file_path, charsmax (file_path));
@@ -40,26 +81,42 @@ public plugin_cfg()
4081 set_fail_state (" Can't read maplists file." );
4182 }
4283
43- // <start > <stop> < filename> <clear old list>
84+ // <name > <filename> <clear old list> <start> <stop >
4485
4586 g_aLists = ArrayCreate (MapListInfo, 1 );
87+ g_aActiveLists = ArrayCreate (1 , 1 );
4688
4789 new list_info[MapListInfo];
48- new text[256 ], start[6 ], stop[6 ], file_list[128 ], clr[4 ]
90+ new text[256 ], name[ 32 ], start[8 ], stop[8 ], file_list[128 ], clr[4 ], i = 0 ;
4991 while (! feof (f)) {
5092 fgets (f, text, charsmax (text));
5193 trim (text);
5294
5395 if (! text[0 ] || text[0 ] == ' ;' ) continue ;
5496
55- parse (text, start , charsmax (start ), stop , charsmax (stop ), file_list , charsmax (file_list ), clr , charsmax (clr ));
97+ parse (text, name , charsmax (name ), file_list , charsmax (file_list ), clr , charsmax (clr ), start , charsmax (start), stop, charsmax (stop ));
5698
57- list_info[StartTime] = get_int_time (start);
58- list_info[StopTime] = get_int_time (stop);
59- list_info[ClearOldList] = str_to_num (clr);
99+ copy (list_info[ListName], charsmax (list_info[ListName]), name);
60100 copy (list_info[FileList], charsmax (list_info[FileList]), file_list);
101+ list_info[ClearOldList] = str_to_num (clr);
102+
103+ if (! start[0 ] || equal (start, " anytime" )) {
104+ list_info[AnyTime] = true ;
105+ } else {
106+ list_info[StartTime] = get_int_time (start);
107+ list_info[StopTime] = get_int_time (stop);
108+ }
61109
62110 ArrayPushArray (g_aLists, list_info);
111+
112+ // load maps from file to local list
113+ g_aMapLists[i] = ArrayCreate (MapStruct, 1 );
114+ mapm_load_maplist_to_array (g_aMapLists[i], list_info[FileList]);
115+ i++ ;
116+
117+ list_info[AnyTime] = false ;
118+ list_info[StartTime] = 25 * 60 ;
119+ list_info[StopTime] = - 1 ;
63120 }
64121 fclose (f);
65122
@@ -78,22 +135,51 @@ public task_check_list()
78135
79136 new list_info[MapListInfo];
80137
138+ new Array: temp = ArrayCreate (1 , 1 );
139+
81140 for (new i, found_newlist, size = ArraySize (g_aLists); i < size; i++ ) {
82141 ArrayGetArray (g_aLists, i, list_info);
83142
84- if (list_info[StartTime] <= list_info[StopTime]) {
85- if (g_iCurList != i && list_info[StartTime] <= cur_time <= list_info[StopTime]) {
143+ if (list_info[AnyTime]) {
144+ found_newlist = true ;
145+ } else if (list_info[StartTime] <= list_info[StopTime]) {
146+ if (list_info[StartTime] <= cur_time <= list_info[StopTime]) {
86147 found_newlist = true ;
87148 }
88149 } else {
89- if (g_iCurList != i && ( list_info[StartTime] <= cur_time <= 24 * 60 || cur_time <= list_info[StopTime]) ) {
150+ if (list_info[StartTime] <= cur_time <= 24 * 60 || cur_time <= list_info[StopTime]) {
90151 found_newlist = true ;
91152 }
92153 }
93154
94155 if (found_newlist) {
95156 found_newlist = false ;
96- g_iCurList = i;
157+ if (list_info[ClearOldList]) {
158+ ArrayClear (temp);
159+ }
160+ ArrayPushCell (temp, i);
161+ }
162+ }
163+
164+ new reload = false ;
165+
166+ if (ArraySize (g_aActiveLists) != ArraySize (temp)) {
167+ reload = true ;
168+ } else {
169+ for (new i, size = ArraySize (g_aActiveLists); i < size; i++ ) {
170+ if (ArrayGetCell (g_aActiveLists, i) != ArrayGetCell (temp, i)) {
171+ reload = true ;
172+ break ;
173+ }
174+ }
175+ }
176+
177+ if (reload) {
178+ ArrayDestroy (g_aActiveLists);
179+ g_aActiveLists = temp;
180+ for (new i, item, size = ArraySize (g_aActiveLists); i < size; i++ ) {
181+ item = ArrayGetCell (g_aActiveLists, i);
182+ ArrayGetArray (g_aLists, item, list_info);
97183 mapm_load_maplist (list_info[FileList], list_info[ClearOldList]);
98184 log_amx (" loaded new maplist[%s ]" , list_info[FileList]);
99185 }
0 commit comments