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