Skip to content

Commit 75910be

Browse files
committed
advanced_lists: new natives, rework list load
native mapm_advl_get_active_lists native mapm_advl_get_list_name native mapm_advl_get_list_array
1 parent 6865e0a commit 75910be

File tree

3 files changed

+143
-15
lines changed

3 files changed

+143
-15
lines changed
Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
1-
; <start> <stop> <filename> <clear old list>
1+
; <name> <filename> <clear old list> <start> <stop>
22
; filename - file must be in config dir
3+
; anytime - this list will be always loaded
34
; example
4-
; "6:00" "22:59" "maps.ini" "1"
5-
; "23:00" "5:59" "nightmaps.ini" "1"
5+
; "Day Maps" "maps.ini" "1" "6:00" "22:59"
6+
; "Nigth Maps" "nightmaps.ini" "1" "23:00" "5:59"
7+
; "Another maps" "another.ini" "0" "anytime"
68

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
#if defined _map_manager_adv_lists_included
2+
#endinput
3+
#endif
4+
#define _map_manager_adv_lists_included
5+
6+
#if AMXX_VERSION_NUM >= 175
7+
#pragma reqlib map_manager_adv_lists
8+
#if !defined AMXMODX_NOAUTOLOAD
9+
#pragma loadlib map_manager_adv_lists
10+
#endif
11+
#else
12+
#pragma library map_manager_adv_lists
13+
#endif
14+
15+
/**
16+
* TODO: write this
17+
*
18+
* @return Number of active lists
19+
*/
20+
native mapm_advl_get_active_lists();
21+
22+
/**
23+
* TODO: write this
24+
*
25+
* @param item Number of active list
26+
* @param list_name String for list name
27+
* @param size String size
28+
*
29+
* @return Array pointer
30+
*/
31+
native mapm_advl_get_list_name(item, list_name[], size);
32+
33+
/**
34+
* TODO: write this
35+
*
36+
* @param item Number of active list
37+
*
38+
* @return Array pointer
39+
*/
40+
native Array:mapm_advl_get_list_array(item);

addons/amxmodx/scripting/map_manager_adv_lists.sma

Lines changed: 98 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -2,29 +2,70 @@
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+
812
new const FILE_MAP_LISTS[] = "maplists.ini";
913

1014
enum (+=100) {
1115
TASK_CHECK_LIST = 150
1216
};
1317

1418
enum _:MapListInfo {
19+
AnyTime,
1520
StartTime,
1621
StopTime,
1722
ClearOldList,
23+
ListName[32],
1824
FileList[128]
1925
};
2026

2127
new Array:g_aLists;
22-
new g_iCurList = -1;
28+
new Array:g_aActiveLists;
29+
new Array:g_aMapLists[MAX_MAPLISTS];
2330

2431
public 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+
}
2869
public 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

Comments
 (0)