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