· 4 years ago · Mar 02, 2021, 01:30 AM
1#include <amxmodx>
2#include <amxmisc>
3#include <sqlx>
4#include <Hamsandwich>
5
6#pragma semicolon 1
7
8new g_iMax;
9
10new const TableName[] = "Big_table";
11
12enum _:Music_prop{
13 eMusicName[64],
14 eMusicFile[64],
15};
16
17new g_iLoadedMusic;
18new iKey;
19new Array:g_aReadFile;
20new Array:g_aPlayMusic[33];
21new g_iMaxPlayers;
22new g_sSteamId[64];
23new Handle:SQLtuple;
24new g_cPrefix;
25
26public plugin_init()
27{
28 register_plugin("MVPZene", "0.1.0", "Turán*");
29
30 /*Kiszolgáló | Felhasználó | Jelszó | Adatbázis neve*/
31 //SQLtuple = SQL_MakeDbTuple("87.229.115.198", "sw_u1670", "jNDDjeXHVH", "sw_server1670");
32 SQLtuple = SQL_MakeDbTuple("87.229.115.198", "sw_u761", "qiSn1TZwOk", "sw_server761");
33
34 register_logevent("PlayMusic", 2, "1=Round_End");
35 register_clcmd("say /zene", "p_musicmenu");
36
37 g_cPrefix = register_cvar("ServerPrefixZene", "[-BiG BrotherZ-] ^3»^1");//Ide ajánlom [], || jeleket használni mert chatnél csak sima %s van!
38
39 g_iMaxPlayers = get_maxplayers();
40
41 p_SQLCreateTable();
42}
43public get_prefix()
44{
45 new sPrefix[64];
46 get_pcvar_string(g_cPrefix, sPrefix, charsmax(sPrefix));
47 return sPrefix;
48}
49public p_musicmenu(id)
50{
51 new iMenu, iRow[7], sActive[64], eData[Music_prop], sText[2048];
52 format(sText, charsmax(sText), "\w[-BiG BrotherZ-]\d AWP^n\dZenekészlet");
53 iMenu = menu_create(sText, "p_musicmenu_handler");
54
55 for(new i = 0; i < g_iLoadedMusic; i++)
56 {
57 new iArraySize = ArraySize(g_aReadFile);
58 ArrayGetArray(g_aReadFile, i, eData);
59 num_to_str(i, iRow, charsmax(iRow));
60 formatex(sActive, charsmax(sActive), ArrayFindValue(g_aPlayMusic[id], i) != -1 ? "\wAktiv":"\dNem aktiv");
61 formatex(sText, charsmax(sText), "\rZene:\d %s\w - %s", eData[eMusicName], sActive);
62 menu_additem(iMenu, sText, iRow);
63 }
64
65 menu_setprop(iMenu, MPROP_EXITNAME, "Kilépés");
66 menu_setprop(iMenu, MPROP_NEXTNAME, "Következő");
67 menu_setprop(iMenu, MPROP_BACKNAME, "Vissza");
68 menu_display(id, iMenu);
69}
70public p_musicmenu_handler(id, iMenu, iMenuItem)
71{
72 if(iMenuItem == MENU_EXIT)
73 {
74 menu_destroy(iMenu);
75 return PLUGIN_HANDLED;
76 }
77
78 new sData[9], sName[MAX_NAME_LENGTH], iAccess, iCallback;
79 menu_item_getinfo(iMenu, iMenuItem, iAccess, sData, charsmax(sData), sName, charsmax(sName), iCallback);
80 iKey = str_to_num(sData);
81
82 new iFindValue = ArrayFindValue(g_aPlayMusic[id], iKey);
83 new eData[Music_prop];
84 ArrayGetArray(g_aReadFile, iKey, eData);
85
86 if(iFindValue != -1)
87 {
88 ArrayDeleteItem(g_aPlayMusic[id], iFindValue);
89 client_print_color(id, print_team_default, "^4%s ^1Sikeresen kikapcsoltad a(z)^3 %s^1 zenét.", get_prefix(), eData[eMusicName]);
90 p_SQLUpdate(id);p_musicmenu(id);
91 }
92 else
93 {
94 ArrayPushCell(g_aPlayMusic[id], iKey);
95 client_print_color(id, print_team_default, "^4%s ^1Sikeresen bekapcsoltad a(z)^3 %s^1 zenét.", get_prefix(), eData[eMusicName]);
96 p_SQLUpdate(id);p_musicmenu(id);
97 }
98
99 menu_destroy(iMenu);
100 return PLUGIN_HANDLED;
101}
102public PlayMusic()
103{
104 for(new i = 0; i < g_iMaxPlayers; i++)
105 p_startmusic(i);
106}
107public p_startmusic(id)
108{
109 new iArraySize = ArraySize(g_aPlayMusic[id]), iPrevious;
110 static eData[Music_prop];
111 if(!iArraySize)
112 return;
113
114 new iRandomMusic = random(iArraySize);
115 if(iPrevious == iRandomMusic)
116 {
117 PlayMusic();
118 return;
119 }
120
121 iRandomMusic = ArrayGetCell(g_aPlayMusic[id], iRandomMusic);
122
123 ArrayGetArray(g_aReadFile, iRandomMusic, eData);
124 client_cmd(id, "mp3 play sound/%s", eData[eMusicFile]);
125 client_print_color(id, print_team_default, "^4%s ^1A zene cime:^3 %s", get_prefix(), eData[eMusicName]);
126 iPrevious = iRandomMusic;
127}
128p_SQLCreateTable()
129{
130 static sQuery[512];
131 new iLen;
132
133 iLen += formatex(sQuery[iLen], charsmax(sQuery), "CREATE TABLE IF NOT EXISTS `%s` ", TableName);
134 iLen += formatex(sQuery[iLen], charsmax(sQuery)-iLen, "( ");
135 iLen += formatex(sQuery[iLen], charsmax(sQuery)-iLen, "`Id` INT(11) NOT NULL AUTO_INCREMENT PRIMARY KEY, ");
136
137 for(new i = 0; i < g_iLoadedMusic; i++)
138 iLen += formatex(sQuery[iLen], charsmax(sQuery)-iLen, "`Zene_%d` INT(11) NOT NULL,", i);
139
140 iLen += formatex(sQuery[iLen], charsmax(sQuery)-iLen, "`MaxNumber` INT(11) NOT NULL,");
141 iLen += formatex(sQuery[iLen], charsmax(sQuery)-iLen, "`SteamID` varchar(64) NOT NULL)");
142 SQL_ThreadQuery(SQLtuple, "p_SQLCreateTableThr", sQuery);
143}
144public p_SQLCreateTableThr(iFailState, Handle:sQuery, sError[], iErrcode, sData[])
145{
146 if(iFailState == TQUERY_CONNECT_FAILED)
147 set_fail_state("*DEBUG* [CreateTable] Nem sikerult csatlakozni az adatbazishoz.");
148 else if(iFailState == TQUERY_QUERY_FAILED)
149 set_fail_state("*DEBUG* [CreateTable] Lekerdezesi hiba");
150 if(iErrcode)
151 log_amx("*DEBUG* [CreateTable] - %s", sError);
152}
153public p_SQLLoadData(id)
154{
155 static sQuery[512];
156 new sData[2];
157
158 sData[0] = id;
159 sData[1] = get_user_userid(id);
160 get_user_authid(id, g_sSteamId, charsmax(g_sSteamId));
161
162 formatex(sQuery, charsmax(sQuery), "SELECT * FROM `%s` WHERE `SteamID`='%s';", TableName, g_sSteamId);
163 SQL_ThreadQuery(SQLtuple, "p_SQLLoadDatathr", sQuery, sData, 2);
164}
165public p_SQLLoadDatathr(iFailState, Handle:sQuery, sError[], iErrcode, sData[], iDataSize)
166{
167 if(iFailState == TQUERY_CONNECT_FAILED)
168 set_fail_state("*DEBUG* [LoadCheck] Nem sikerult csatlakozni az adatbazishoz.");
169 else if(iFailState == TQUERY_QUERY_FAILED)
170 set_fail_state("*DEBUG* [LoadCheck] Lekerdezesi hiba");
171 if(iErrcode)
172 log_amx("*DEBUG* [LoadCheck] - %s", sError);
173
174 new id = sData[0];
175
176 if(sData[1] != get_user_userid(id)) return;
177
178 new iRowsFound = SQL_NumRows(sQuery);
179 new iReadResult;
180
181 if(iRowsFound > 0)
182 {
183 for(new i = 0; i < g_iLoadedMusic; i++)
184 {
185 new sText[64];
186 formatex(sText, charsmax(sText), "Zene_%d", i);
187 iReadResult = SQL_ReadResult(sQuery, SQL_FieldNameToNum(sQuery, sText));
188
189 if(iReadResult)
190 ArrayPushCell(g_aPlayMusic[id], i);
191 }
192 }
193 else
194 {
195 p_SQLinsertTable(id);
196 p_SQLLoadData(id);
197 }
198}
199public p_SQLinsertTable(id)
200{
201 static sQuery[512];
202 new sData[2];
203
204 sData[0] = id;
205 sData[1] = get_user_userid(id);
206 get_user_authid(id, g_sSteamId, charsmax(g_sSteamId));
207
208 formatex(sQuery, charsmax(sQuery), "INSERT INTO `%s` (`SteamID`) VALUES('%s')", TableName, g_sSteamId);
209 SQL_ThreadQuery(SQLtuple, "p_SQLinsertTablethr", sQuery, sData, 2);
210}
211public p_SQLinsertTablethr(iFailState, Handle:sQuery, sError[], iErrcode, sData[], iDataSize)
212{
213 if(iFailState == TQUERY_CONNECT_FAILED || iFailState == TQUERY_QUERY_FAILED)
214 {
215 log_amx("*DEBUG* [Insert] - %s", sError);
216 return;
217 }
218 new id = sData[0];
219
220 if(sData[1] != get_user_userid(id)) return;
221}
222public p_SQLUpdate(id)
223{
224 static sQuery[512];
225 new sData[2], iLen;
226
227 sData[0] = id;
228 sData[1] = get_user_userid(id);
229 get_user_authid(id, g_sSteamId, charsmax(g_sSteamId));
230
231 iLen += formatex(sQuery[iLen], charsmax(sQuery), "UPDATE `%s` SET ", TableName);
232 new iFindValue = ArrayFindValue(g_aPlayMusic[id], iKey);
233
234 if(iFindValue != -1)
235 iLen += formatex(sQuery[iLen], charsmax(sQuery)-iLen, "Zene_%d = '%i',", iKey, 1);
236 else
237 iLen += formatex(sQuery[iLen], charsmax(sQuery)-iLen, "Zene_%d = '%i',", iKey, 0);
238
239 iLen += formatex(sQuery[iLen], charsmax(sQuery)-iLen, "MaxNumber = '%i' WHERE `SteamID` = ^"%s^";", g_iMax, g_sSteamId);
240
241 SQL_ThreadQuery(SQLtuple, "p_SQLUpdatethr", sQuery, sData, 2);
242}
243public p_SQLUpdatethr(iFailState, Handle:sQuery, sError[], iErrcode, sData[], iDataSize)
244{
245 if(iFailState == TQUERY_CONNECT_FAILED || iFailState == TQUERY_QUERY_FAILED)
246 {
247 log_amx("*DEBUG* [Update] - %s", sError);return;
248 }
249 new id = sData[0];
250 if(sData[1] != get_user_userid(id)) return;
251}
252public client_putinserver(id)
253{
254 for(new i = 0; i < g_iMaxPlayers; i++)
255 ArrayDestroy(g_aPlayMusic[i]);
256
257 for(new i = 0; i < g_iMaxPlayers; i++)
258 g_aPlayMusic[i] = ArrayCreate(1);
259
260 p_SQLLoadData(id);
261}
262public plugin_precache()
263{
264 g_aReadFile = ArrayCreate(Music_prop);
265
266 new sPath[256];
267 get_configsdir(sPath, charsmax(sPath));
268 format(sPath, charsmax(sPath), "%s/Zene.ini", sPath);
269
270 if(file_exists(sPath))
271 {
272 new sLineData[256], iLine, sData[64], sData2[64];
273 new iFile = fopen(sPath, "rt");
274
275 if(!iFile)
276 return;
277
278 while(!feof(iFile))
279 {
280 fgets(iFile, sLineData, charsmax(sLineData));
281 replace(sLineData, charsmax(sLineData), "^n", "");
282
283 if(sLineData[0] == ';' || !sLineData[0])
284 continue;
285
286 parse(sLineData, sData, charsmax(sData), sData2, charsmax(sData2));
287 remove_quotes(sData);
288 remove_quotes(sData2);
289
290 static eData[Music_prop];
291 copy(eData[eMusicName], sizeof(eData[eMusicName]) - 1, sData);
292 copy(eData[eMusicFile], sizeof(eData[eMusicFile]) - 1, sData2);
293
294 ArrayPushArray(g_aReadFile, eData);
295
296 precache_sound(eData[eMusicFile]);
297 iLine++;
298 }
299 fclose(iFile);
300 g_iLoadedMusic = ArraySize(g_aReadFile);
301 }
302}
303public plugin_end()
304{
305 for(new i = 1; i <= g_iMaxPlayers; i++)
306 ArrayDestroy(g_aPlayMusic[i]);
307
308 ArrayDestroy(g_aReadFile);
309}