· 5 years ago · Sep 27, 2020, 03:52 PM
1#include <amxmodx>
2#include <amxmisc>
3#include <sqlx>
4
5#define PLUGIN "Roundendsounds menu"
6#define VERSION "1.0"
7#define AUTHOR "Turán*"
8
9#define TABLE_NAME "TBALENAME"
10
11new g_cSPrefix;
12new bool:g_bMusiconoff;
13new g_constMusicSize;
14new g_iMaxPlayers;
15new Array:g_aPlayableMusic[33];
16new Handle:g_Sql;
17new g_sAuthID[64];
18new iLine;
19enum g_eData{
20 g_eFileName[64],
21 g_eMusicName[64],
22}
23new const g_constMusic[g_iMaxMusic][g_eData] = {
24 {"RandomZene/1.mp3", "1"},
25 {"RandomZene/2.mp3", "2"},
26 {"RandomZene/3.mp3", "3"},
27 {"RandomZene/4.mp3", "4"},
28 {"RandomZene/5.mp3", "5"}
29}
30public plugin_init()
31{
32 register_plugin(PLUGIN, VERSION, AUTHOR);
33
34 g_constMusicSize = sizeof(g_constMusic);
35
36 g_Sql = SQL_MakeDbTuple("37.221.214.74","sw_u1072","pka6bqq0OC","sw_server1072");
37 sql_tablecreate();
38
39 g_iMaxPlayers = get_maxplayers();
40
41 for(new i = 1; i <= g_iMaxPlayers; i++)
42 {
43 g_aPlayableMusic[i] = ArrayCreate(1);
44 }
45 g_cSPrefix = register_cvar("server_prefix", "Szerver Prefix");
46 register_clcmd("say /zene", "menu_main");
47 register_logevent("Logevent_Round_End", 2, "1=Round_End");
48}
49get_from_ini(){
50 new sPath[128];
51 format(sPath, charsmax(sPath), "%s/ChoosedRoundEndSounds.ini", sPath);
52 if(file_exists(sPath))
53 {
54 new sLineData[256], sData[64], sData2[64];
55 new iFile = fopen(sPath, "rt")
56
57 if(!iFile)
58 {
59 console_print(0, "Nem sikerult megnyitni a(z) %s init", sPath);
60 return PLUGIN_HANDLED;
61 }
62
63 while(!feof(iFile))
64 {
65 fgets(iFile, sLineData, charsmax(sLineData));
66 replace(sLineData, charsmax(sLineData), "^n","");
67
68 if(sLineData[0] == ';' || !sLineData[0])
69 continue;
70
71 parse(sLineData, sData, charsmax(sData), sData2, charsmax(sData2));
72 remove_quotes(sData);
73
74 static eData[g_eData];
75
76 copy(eData[g_eFileName], sizeof(eData[g_eFileName]) - 1, sData)
77 copy(eData[g_eMusicName], sizeof(eData[g_eMusicName]) - 1, sData2)
78
79 ArrayPushArray(g_aFileIni, eData);
80
81 precache_sound(eData[g_eFileName]);
82
83 iLine++;
84 }
85 fclose(iFile);
86 }
87 return PLUGIN_HANDLED;
88}
89sql_tablecreate(){
90 new sQuery[512], iLen;
91 iLen += formatex(sQuery[iLen], charsmax(sQuery) - iLen, "CREATE TABLE IF NOT EXISTS `%s`", TABLE_NAME);
92 iLen += formatex(sQuery[iLen], charsmax(sQuery) - iLen, "(`AuthID` varchar(32) NOT NULL,");
93 for(new i = 0;i < g_iMaxMusic; i++)
94 iLen += formatex(sQuery[iLen], charsmax(sQuery)-iLen, "`ACTIVE_%d` INT(11) NOT NULL,", i);
95 iLen += formatex(sQuery[iLen], charsmax(sQuery) - iLen, "`id` INT(11) NOT NULL AUTO_INCREMENT PRIMARY KEY)");
96 SQL_ThreadQuery(g_Sql,"sql_tablecreate_thr", sQuery)
97}
98public sql_tablecreate_thr(iFailState, Handle:sQuery, sError[], iErrcode, sData[])
99{
100 if(iFailState == TQUERY_CONNECT_FAILED || iFailState == TQUERY_QUERY_FAILED)
101 {
102 log_amx("[ERROR] csatlakozasi hoba vagy lekerdezesi hiba (%s)", sError);
103 return;
104 }
105}
106public sql_load(iId)
107{
108 new sQuery[512], sData[1]
109 sData[0] = iId;
110 get_user_authid(iId, g_sAuthID, charsmax(g_sAuthID));
111
112 formatex(sQuery, charsmax(sQuery), "SELECT * FROM `%s` WHERE AuthID = ^"%s^";", TABLE_NAME, g_sAuthID)
113 SQL_ThreadQuery(g_Sql, "sql_load_thr", sQuery, sData, 1)
114}
115public sql_load_thr(iFailState, Handle:sQuery, sError[], iErrcode, sData[])
116{
117 if(iFailState == TQUERY_CONNECT_FAILED || iFailState == TQUERY_QUERY_FAILED)
118 {
119 log_amx("[ERROR] csatlakozasi hiba vagy lekerdezesi hiba (%s)", sError);
120 return;
121 }
122 else
123 {
124 new iId = sData[0];
125 ArrayClear(g_aPlayableMusic[iId]);
126 if(SQL_NumRows(sQuery) > 0)
127 {
128 for(new i = 0; i < iLine; i++)
129 {
130 new sString[64];
131 formatex(sString, charsmax(sString), "ACTIVE_%d", i);
132 if(SQL_ReadResult(sQuery, SQL_FieldNameToNum(sQuery, sString)))
133 {
134 ArrayPushCell(g_aPlayableMusic[iId], i);
135 }
136 }
137 }
138 else{
139 for(new i = 0; i < iLine; i++)
140 {
141 ArrayPushCell(g_aPlayableMusic[iId], i);
142 }
143 sql_save(iId);
144 }
145 }
146}
147public sql_save(iId)
148{
149 new sQuery[512];
150
151 get_user_authid(iId, g_sAuthID, charsmax(g_sAuthID));
152 formatex(sQuery, charsmax(sQuery), "INSERT INTO `%s` (`AuthID`) VALUES (^"%s^");",TABLE_NAME, g_sAuthID);
153 SQL_ThreadQuery(g_Sql, "sql_save_thr", sQuery);
154}
155public sql_save_thr(iFailState, Handle:sQuery, sError[], iErrcode, sData[])
156{
157 if(iFailState == TQUERY_CONNECT_FAILED || iFailState == TQUERY_QUERY_FAILED)
158 {
159 log_amx("[ERROR] csatlakozasi hiba vagy lekerdezesi hiba (%s)", sError);
160 return;
161 }
162}
163public sql_update(iId)
164{
165 new sQuery[512], iLen;
166 get_user_authid(iId, g_sAuthID, charsmax(g_sAuthID));
167 iLen += formatex(sQuery[iLen], charsmax(sQuery), "UPDATE `%s` SET ", TABLE_NAME);
168 for(new i = 0; i < iLine; i++)
169 {
170 if(ArrayFindValue(g_aPlayableMusic[iId], i) != -1)
171 {
172 iLen += formatex(sQuery[iLen], charsmax(sQuery) - iLen, "ACTIVE_%d = ^"%s^",", i, 1);
173 }
174 else
175 {
176 iLen += formatex(sQuery[iLen], charsmax(sQuery) - iLen, "ACTIVE_%d = ^"%s^",", i, 0);
177 }
178 }
179 iLen += (formatex(sQuery[iLen - 1], charsmax(sQuery) - iLen, "WHERE AuthID = ^"%s^";") - 1);
180 SQL_ThreadQuery(g_Sql, "sql_load_thr", sQuery)
181}
182public plugin_precache()
183{
184 g_constMusicSize = sizeof(g_constMusic);
185 for(new i = 1; i < g_constMusicSize; i++)
186 {
187 precache_sound(g_constMusic[i][g_eFileName]);
188 }
189}
190public Logevent_Round_End()
191{
192 for(new i = 1; i < g_iMaxPlayers; i++)
193 {
194 public_startmusic(i);
195 }
196}
197public menu_main(iId)
198{
199 new sString[256], iMenu;
200 formatex(sString, charsmax(sString), "\r%s \w| \dZenemenu", server_prefix());
201 iMenu = menu_create(sString, "menu_main_h");
202
203 menu_additem(iMenu, "Valasztok zeneket", "0", 0);
204 menu_additem(iMenu, "Korvegi zene kikapcsolasa", "1", 0);
205
206 menu_setprop(iMenu, MPROP_EXITNAME, "Kilepes");
207 menu_setprop(iMenu, MPROP_EXIT, MEXIT_ALL);
208 menu_display(iId, iMenu, 0);
209}
210public menu_main_h(iId, iMenu, iItem)
211{
212 if(iItem == MENU_EXIT)
213 {
214 menu_destroy(iMenu);
215 return PLUGIN_HANDLED;
216 }
217 switch(iItem)
218 {
219 case 0: menu_choosemusic(iId);
220 case 1: public_onoff(iId);
221 }
222
223 menu_destroy(iMenu);
224 return PLUGIN_HANDLED;
225
226}
227public public_onoff(iId)
228{
229 if(g_bMusiconoff)
230 {
231 g_bMusiconoff = false;
232 client_print_color(iId, print_team_default, "^4[%s]^1 Kikapcsoltad a korvegi zeneket!", server_prefix());
233 }
234 else
235 {
236 g_bMusiconoff = true;
237 client_print_color(iId, print_team_default, "^4[%s]^1 Bekapcsoltad a korvegi zeneket!", server_prefix());
238 }
239}
240public menu_choosemusic(iId)
241{
242 new sString[256], iMenu, iRow[8], sActive[16];
243 formatex(sString, charsmax(sString), "\r%s \w| \dValassz zenet!", server_prefix());
244 iMenu = menu_create(sString, "menu_choosemusic_h");
245 for(new i = 0; i < iLine; i++)
246 {
247 formatex(sActive, charsmax(sActive), ArrayFindValue(g_aPlayableMusic[iId], i) != -1 ? "\wAktiv":"\dNem aktiv");
248 num_to_str(i, iRow, 7);
249 formatex(sString, charsmax(sString), "\w%s \r- %s", g_constMusic[i][g_eMusicName], sActive);
250 menu_additem(iMenu, sString, iRow);
251 }
252
253 menu_setprop(iMenu, MPROP_EXITNAME, "Kilepes");
254 menu_setprop(iMenu, MPROP_EXIT, MEXIT_ALL);
255 menu_display(iId, iMenu, 0);
256}
257public menu_choosemusic_h(iId, iMenu, iItem)
258{
259 if(iItem == MENU_EXIT)
260 {
261 menu_destroy(iMenu);
262 return PLUGIN_HANDLED;
263 }
264 new sData[6], sName[64], iAccess, iKey;
265 menu_item_getinfo(iMenu, iItem, iAccess, sData, charsmax(sData), sName, charsmax(sName));
266 iKey = str_to_num(sData);
267 // != -1 letezik | == -1 nem letezik
268
269 new iRemoveArray;
270 iRemoveArray = ArrayFindValue(g_aPlayableMusic[iId], iKey);
271 if(iRemoveArray != -1)
272 {
273 ArrayDeleteItem(g_aPlayableMusic[iId], iRemoveArray);
274
275 client_print_color(iId, print_team_default, "^4[%s]^1 Kikapcsoltad a(z)^3 %s^1 korvegi zenet.", server_prefix(), g_constMusic[iKey][g_eMusicName]);
276 menu_choosemusic(iId);
277 }
278 else
279 {
280 ArrayPushCell(g_aPlayableMusic[iId], iKey);
281
282 client_print_color(iId, print_team_default, "^4[%s]^1 Bekapcsoltad a(z)^3 %s^1 korvegi zenet.", server_prefix(), g_constMusic[iKey][g_eMusicName]);
283 menu_choosemusic(iId);
284 }
285 menu_destroy(iMenu);
286 return PLUGIN_HANDLED;
287
288}
289public get_Cell(iId)
290{
291 new GetCell[g_iMaxMusic];
292 for(new i; i < g_iMaxMusic; i++)
293 GetCell[i] = ArrayGetCell(g_aPlayableMusic[iId], i);
294}
295public public_startmusic(iId)
296{
297 if(!g_bMusiconoff)
298 return;
299
300 new iArraySize = ArraySize(g_aPlayableMusic[iId]);
301
302 if(!iArraySize)
303 return;
304
305 new iRandomMusic = random(iArraySize);
306 iRandomMusic = ArrayGetCell(g_aPlayableMusic[iId], iRandomMusic);
307
308 client_cmd(iId, "mp3 play sound/%s", g_constMusic[iRandomMusic][g_eFileName]);
309 client_print_color(iId, print_team_default, "^4[%s]^1 A zene cime^3 %s", server_prefix(), g_constMusic[iRandomMusic][g_eMusicName]);
310}
311public client_putinserver(iId)
312{
313 if(is_user_bot(iId))
314 return PLUGIN_HANDLED;
315
316 g_bMusiconoff = true;
317
318 sql_load(iId);
319
320 return PLUGIN_HANDLED;
321}
322public client_disocnnect(iId)
323{
324 if(is_user_bot(iId))
325 return PLUGIN_HANDLED;
326
327 g_bMusiconoff = true;
328
329 sql_save(iId);
330 sql_update(iId);
331
332 return PLUGIN_HANDLED;
333}
334server_prefix(){
335 new sPrefix[64];
336 get_pcvar_string(g_cSPrefix, sPrefix, charsmax(sPrefix));
337 return sPrefix;
338}
339public plugin_end()
340{
341 for(new i = 1; i <= g_iMaxPlayers; i++)
342 {
343 ArrayDestroy(g_aPlayableMusic[i]);
344 }
345}
346