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