[Half-Life AMXX] / statscfg.sma Repository:
ViewVC logotype

Annotation of /statscfg.sma

Parent Directory Parent Directory | Revision Log Revision Log


Revision 17 - (view) (download)

1 : ian 1 /* AMX Mod X
2 :     * Stats Configuration Plugin
3 :     *
4 :     * by the AMX Mod X Development Team
5 :     * originally developed by OLO
6 :     *
7 :     * This file is part of AMX Mod X.
8 :     *
9 :     *
10 :     * This program is free software; you can redistribute it and/or modify it
11 :     * under the terms of the GNU General Public License as published by the
12 :     * Free Software Foundation; either version 2 of the License, or (at
13 :     * your option) any later version.
14 :     *
15 :     * This program is distributed in the hope that it will be useful, but
16 :     * WITHOUT ANY WARRANTY; without even the implied warranty of
17 :     * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
18 :     * General Public License for more details.
19 :     *
20 :     * You should have received a copy of the GNU General Public License
21 :     * along with this program; if not, write to the Free Software Foundation,
22 :     * Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
23 :     *
24 :     * In addition, as a special exception, the author gives permission to
25 :     * link the code of this program with the Half-Life Game Engine ("HL
26 :     * Engine") and Modified Game Libraries ("MODs") developed by Valve,
27 :     * L.L.C ("Valve"). You must obey the GNU General Public License in all
28 :     * respects for all of the code used other than the HL Engine and MODs
29 :     * from Valve. If you modify this file, you may extend this exception
30 :     * to your version of the file, but you are not obligated to do so. If
31 :     * you do not wish to do so, delete this exception statement from your
32 :     * version.
33 :     */
34 :    
35 :     #include <amxmodx>
36 :     #include <amxmisc>
37 :    
38 : ian 17 #define MAX_MENU_DATA 72
39 : ian 1
40 :     new g_menuData[MAX_MENU_DATA][32]
41 :     new g_menuDataVar[MAX_MENU_DATA][32]
42 :     new g_menuDataId[MAX_MENU_DATA]
43 :     new g_menuDataNum
44 :     new g_menuPosition[33]
45 :     new g_fileToSave[64]
46 :     new bool:g_modified
47 :     new g_coloredMenus
48 :    
49 :     public plugin_precache()
50 :     {
51 :     register_clcmd("amx_statscfgmenu", "cmdCfgMenu", ADMIN_CFG, "- displays stats configuration menu")
52 :     register_dictionary("statscfg.txt")
53 :     register_dictionary("common.txt")
54 :     register_concmd("amx_statscfg", "cmdCfg", ADMIN_CFG, "- displays help for stats configuration")
55 :     }
56 :    
57 :     public plugin_init()
58 :     {
59 :     register_plugin("Stats Configuration", AMXX_VERSION_STR, "AMXX Dev Team")
60 :     register_menucmd(register_menuid("Stats Configuration"), 1023, "actionCfgMenu")
61 :    
62 :     get_configsdir(g_fileToSave, 63)
63 :     format(g_fileToSave, 63, "%s/stats.ini", g_fileToSave)
64 :     loadSettings(g_fileToSave)
65 :     g_coloredMenus = colored_menus()
66 :     }
67 :    
68 :     public cmdCfg(id, level, cid)
69 :     {
70 :     if (!cmd_access(id, level, cid, 1))
71 :     return PLUGIN_HANDLED
72 :    
73 :     new cmds[32]
74 :     read_argv(1, cmds, 31)
75 :    
76 :     new option = equali(cmds, "on") ? 1 : 0
77 :    
78 :     if (!option)
79 :     option = equali(cmds, "off") ? 2 : 0
80 :    
81 :     if (read_argc() > 2 && option)
82 :     {
83 :     new var[32], enabled = 0
84 :     read_argv(2, var, 31)
85 :    
86 :     for (new a = 0; a < g_menuDataNum; ++a)
87 :     {
88 :     if (containi(g_menuDataVar[a], var) != -1)
89 :     {
90 :     g_modified = true
91 :     ++enabled
92 :     if (option == 1)
93 :     {
94 :     set_xvar_num(g_menuDataId[a], 1)
95 :     console_print(id, "%L: %s", id, "STATS_ENABLED", g_menuData[a])
96 :     } else {
97 :     set_xvar_num(g_menuDataId[a], 0)
98 :     console_print(id, "%L: %s", id, "STATS_DISABLED", g_menuData[a])
99 :     }
100 :     }
101 :     }
102 :    
103 :     if (enabled)
104 :     console_print(id, "%L", id, "TOTAL_NUM", enabled)
105 :     else
106 :     console_print(id, "%L", id, "NO_OPTION", var)
107 :     }
108 :     else if (equali(cmds, "save"))
109 :     {
110 :     if (saveSettings(g_fileToSave))
111 :     {
112 :     g_modified = false
113 :     console_print(id, "%L", id, "STATS_CONF_SAVED")
114 :     }
115 :     else
116 :     console_print(id, "%L", id, "STATS_CONF_FAILED")
117 :     }
118 :     else if (equali(cmds, "load"))
119 :     {
120 :     if (loadSettings(g_fileToSave))
121 :     {
122 :     g_modified = false
123 :     console_print(id, "%L", id, "STATS_CONF_LOADED")
124 :     }
125 :     else
126 :     console_print(id, "%L", id, "STATS_CONF_FAIL_LOAD")
127 :     }
128 :     else if (equali(cmds, "list"))
129 :     {
130 :     new arg1[8]
131 :     new start = read_argv(2, arg1, 7) ? str_to_num(arg1) : 1
132 :    
133 :     if (--start < 0) start = 0
134 :    
135 :     if (start >= g_menuDataNum)
136 :     start = g_menuDataNum - 1
137 :    
138 :     new end = start + 10
139 :    
140 :     if (end > g_menuDataNum)
141 :     end = g_menuDataNum
142 :    
143 :     new lName[16], lVariable[16], lStatus[16]
144 :    
145 :     format(lName, 15, "%L", id, "NAME")
146 :     format(lVariable, 15, "%L", id, "VARIABLE")
147 :     format(lStatus, 15, "%L", id, "STATUS")
148 :     console_print(id, "^n----- %L: -----", id, "STATS_CONF")
149 :     console_print(id, " %-29.28s %-24.23s %-9.8s", lName, lVariable, lStatus)
150 :    
151 :     if (start != -1)
152 :     {
153 :     new lOnOff[16]
154 :    
155 :     for (new a = start; a < end; ++a)
156 :     {
157 :     format(lOnOff, 15, "%L", id, get_xvar_num(g_menuDataId[a]) ? "ON" : "OFF")
158 :     console_print(id, "%3d: %-29.28s %-24.23s %-9.8s", a + 1, g_menuData[a], g_menuDataVar[a], lOnOff)
159 :     }
160 :     }
161 :    
162 :     console_print(id, "----- %L -----", id, "STATS_ENTRIES_OF", start + 1, end, g_menuDataNum)
163 :    
164 :     if (end < g_menuDataNum)
165 :     console_print(id, "----- %L -----", id, "STATS_USE_MORE", end + 1)
166 :     else
167 :     console_print(id, "----- %L -----", id, "STATS_USE_BEGIN")
168 :     }
169 :     else if (equali(cmds, "add") && read_argc() > 3)
170 :     {
171 :     if (g_menuDataNum < MAX_MENU_DATA)
172 :     {
173 :     read_argv(2, g_menuData[g_menuDataNum], 31)
174 :     read_argv(3, g_menuDataVar[g_menuDataNum], 31)
175 :     g_menuDataId[g_menuDataNum] = get_xvar_id(g_menuDataVar[g_menuDataNum])
176 :     ++g_menuDataNum
177 :     }
178 :     else
179 :     console_print(id, "%L", id, "CANT_ADD_STATS")
180 :     } else {
181 :     console_print(id, "%L", id, "COM_STATS_USAGE")
182 :     console_print(id, "%L", id, "COM_STATS_COM")
183 :     console_print(id, "%L", id, "COM_STATS_ON")
184 :     console_print(id, "%L", id, "COM_STATS_OFF")
185 :     console_print(id, "%L", id, "COM_STATS_SAVE")
186 :     console_print(id, "%L", id, "COM_STATS_LOAD")
187 :     console_print(id, "%L", id, "COM_STATS_LIST")
188 :     console_print(id, "%L", id, "COM_STATS_ADD")
189 :     }
190 :    
191 :     return PLUGIN_HANDLED
192 :     }
193 :    
194 :     public cmdCfgMenu(id, level, cid)
195 :     {
196 :     if (cmd_access(id, level, cid, 1))
197 :     displayCfgMenu(id, g_menuPosition[id] = 0)
198 :    
199 :     return PLUGIN_HANDLED
200 :     }
201 :    
202 :     displayCfgMenu(id, pos)
203 :     {
204 :     if (pos < 0)
205 :     return
206 :    
207 :     new menu_body[512], start = pos * 7
208 :    
209 :     if (start >= g_menuDataNum)
210 :     start = pos = g_menuPosition[id] = 0
211 :    
212 :     new len = format(menu_body, 511, g_coloredMenus ? "\y%L\R%d/%d^n\w^n" : "%L %d/%d^n^n", id, "STATS_CONF", pos + 1, ((g_menuDataNum / 7)+((g_menuDataNum % 7) ? 1 : 0)))
213 :     new end = start + 7, keys = MENU_KEY_0|MENU_KEY_8, k = 0
214 :    
215 :     if (end > g_menuDataNum)
216 :     end = g_menuDataNum
217 :    
218 :     for (new a = start; a < end; ++a)
219 :     {
220 :     keys |= (1<<k)
221 : ian 17 /* Backwards compatibility hack - if the name starts with ST_, assume it is translation safe! */
222 :     if (equal(g_menuData[a], "ST_", 3))
223 :     {
224 :     len += format(menu_body[len], 511-len, g_coloredMenus ? "%d. %L\y\R%L^n\w" : "%d. %L %L^n", ++k, id, g_menuData[a], id, get_xvar_num(g_menuDataId[a]) ? "ON" : "OFF")
225 :     } else {
226 :     len += format(menu_body[len], 511-len, g_coloredMenus ? "%d. %s\y\R%L^n\w" : "%d. %s %L^n", ++k, g_menuData[a], id, get_xvar_num(g_menuDataId[a]) ? "ON" : "OFF")
227 :     }
228 : ian 1 }
229 :    
230 :     if (g_menuDataNum == 0)
231 :     len += format(menu_body[len], 511-len, g_coloredMenus ? "\d%L\w" : "%L", id, "NO_STATS")
232 :    
233 :     len += format(menu_body[len], 511-len, g_coloredMenus ? "^n8. %L\y\R%s^n\w" : "^n8. %L %s^n", id, "SAVE_CONF", g_modified ? "*" : "")
234 :    
235 :     if (end != g_menuDataNum)
236 :     {
237 :     format(menu_body[len], 511-len, "^n9. %L...^n0. %L", id, "MORE", id, pos ? "BACK" : "EXIT")
238 :     keys |= MENU_KEY_9
239 :     }
240 :     else
241 :     format(menu_body[len], 511-len, "^n0. %L", id, pos ? "BACK" : "EXIT")
242 :    
243 :     show_menu(id, keys, menu_body, -1, "Stats Configuration")
244 :     }
245 :    
246 :     public actionCfgMenu(id, key)
247 :     {
248 :     switch (key)
249 :     {
250 :     case 7:
251 :     {
252 :     if (saveSettings(g_fileToSave))
253 :     {
254 :     g_modified = false
255 :     client_print(id, print_chat, "* %L", id, "STATS_CONF_SAVED")
256 :     }
257 :     else
258 :     client_print(id, print_chat, "* %L", id, "STATS_CONF_FAILED")
259 :    
260 :     displayCfgMenu(id, g_menuPosition[id])
261 :     }
262 :     case 8: displayCfgMenu(id, ++g_menuPosition[id])
263 :     case 9: displayCfgMenu(id, --g_menuPosition[id])
264 :     default:
265 :     {
266 :     g_modified = true
267 :     new a = g_menuPosition[id] * 7 + key
268 :     set_xvar_num(g_menuDataId[a], 1 - get_xvar_num(g_menuDataId[a]))
269 :    
270 :     displayCfgMenu(id, g_menuPosition[id])
271 :     }
272 :     }
273 :    
274 :     return PLUGIN_HANDLED
275 :     }
276 :    
277 :     saveSettings(filename[])
278 :     {
279 :     if (file_exists(filename))
280 :     delete_file(filename)
281 :    
282 :     if (!write_file(filename, ";Generated by Stats Configuration Plugin. Do not modify!^n;Variable Description"))
283 :     return 0
284 :    
285 :     new text[256]
286 :    
287 :     for (new a = 0; a < g_menuDataNum; ++a)
288 :     {
289 :     if (get_xvar_num(g_menuDataId[a]))
290 :     {
291 : ian 17 if (equal(g_menuData[a], "ST_", 3))
292 :     {
293 :     format(text, 255, "%-24.23s ;%L", g_menuDataVar[a], LANG_SERVER, g_menuData[a])
294 :     }
295 :     else
296 :     {
297 :     format(text, 255, "%-24.23s ;%s", g_menuDataVar[a], g_menuData[a])
298 :     }
299 : ian 1 write_file(filename, text)
300 :     }
301 :     }
302 :    
303 :     return 1
304 :     }
305 :    
306 :     loadSettings(filename[])
307 :     {
308 :     if (!file_exists(filename))
309 :     return 0
310 :    
311 :     new text[256], name[32]
312 :     new len, pos = 0, xid
313 :    
314 :     while (read_file(filename, pos++, text, 255, len))
315 :     {
316 :     if (text[0] == ';') continue // line is a comment
317 :    
318 :     parse(text, name, 31)
319 :    
320 :     if ((xid = get_xvar_id(name)) != -1)
321 :     set_xvar_num(xid, 1)
322 :     }
323 :    
324 :     return 1
325 :     }

Contact
ViewVC Help
Powered by ViewVC 1.0.4