· 9 years ago · Nov 11, 2016, 05:54 AM
1
2
3/* VIP System by Variable */
4/* Update version 2 - Special Thanks to Konstantinos */
5
6
7#include <a_samp>
8#include <sscanf>
9#include <zcmd>
10
11new DB: VDB;
12new ECMD[MAX_PLAYERS][14];
13
14public OnFilterScriptInit()
15{
16 VDB = db_open("VDB.db");
17 db_query(VDB, "CREATE TABLE IF NOT EXISTS `VIP` (`PNAME`, `VIPRANK`, `X`, `Y`, `Z`)");
18
19 print("\n\n------------------------------------");
20 print("\nVariable VIP System has been loaded!\n");
21 print("------------------------------------\n\n");
22 return 1;
23}
24
25public OnFilterScriptExit()
26{
27 db_close(VDB);
28 return 1;
29}
30
31public OnPlayerConnect(playerid)
32{
33 if(GetVipRank(playerid) >= 1)
34 {
35 SendClientMessage(playerid, 0xFF99FFFF, "[VIP] {FFFFFF}Welcome back.");
36 }
37 return 1;
38}
39
40public OnPlayerText(playerid, text[])
41{
42 new String[128];
43
44 if(GetVipRank(playerid) >= 1)
45 {
46 if(text[0] != '$')
47 {
48 format(String, sizeof(String), "{FF00FF}[VIP] {%06x}[%d] %s:{FFFFFF} %s", GetPlayerColor(playerid) >>> 8, playerid, GetName(playerid), text);
49 SendClientMessageToAll(0xFF00FFFF, String);
50 return 0;
51 }
52 else if(text[0] == '$')
53 {
54 for(new i = 0, j = GetPlayerPoolSize(); i <= j; i++)
55 {
56 if(IsPlayerConnected(i) && !IsPlayerNPC(i))
57 {
58 if(GetVipRank(i) >= 1)
59 {
60 format(String, sizeof(String), "{FF00FF}[V.Chat] {%06x}[%d] %s:{FFFFFF} %s", GetPlayerColor(playerid) >>> 8, playerid, GetName(playerid), text[1]);
61 SendClientMessage(i, 0x0099FFFF, String);
62 return 0;
63 }
64 }
65 }
66 }
67 }
68 return 1;
69}
70
71CMD:setvip(playerid, params[])
72{
73 new ID, Level, Query[300], DBResult: Result;
74 if(!IsPlayerAdmin(playerid)) return SendClientMessage(playerid, 0xFF0000FF, "You are not authorized to use this command.");
75 if(sscanf(params, "ii", ID, Level)) return SendClientMessage(playerid, 0xFF0000FF, "Correct: /setvip [ID] [Level] From 0 to 3.");
76 if(Level > 3 || Level < 0) return SendClientMessage(playerid, 0xFF0000FF, "Levels are from 0-3 only!");
77 if(!IsPlayerConnected(ID) || ID == INVALID_PLAYER_ID) return SendClientMessage(playerid, 0xFF0000FF, "Player isn't connected!");
78
79 format(Query, sizeof(Query), "SELECT `PNAME` FROM `VIP` WHERE PNAME = '%q'", GetName(ID));
80 Result = db_query(VDB, Query);
81
82 if(db_num_rows(Result))
83 {
84 format(Query, sizeof(Query), "UPDATE `VIP` SET VIPRANK = '%d' WHERE PNAME = '%q'", Level, GetName(ID));
85 db_query(VDB, Query);
86
87 GameTextForPlayer(playerid, "~g~VIP Updated.", 5000, 3);
88 }
89 else if(!db_num_rows(Result))
90 {
91 format(Query, sizeof(Query), "INSERT INTO VIP(PNAME, VIPRANK, X, Y, Z) VALUES('%s', '%d', '0.0', '0.0', '0.0')", GetName(ID), Level);
92 db_query(VDB, Query);
93
94 GameTextForPlayer(playerid, "~g~VIP Added.", 5000, 3);
95 }
96 db_free_result(Result);
97 return 1;
98}
99
100CMD:vhelp(playerid)
101{
102 SendClientMessage(playerid, 0x00FF00FF, "Level 1: vheal, vequip, vjp, vrespawn, vtime, '$' for VIP Chat.");
103 SendClientMessage(playerid, 0x00FF00FF, "Level 2: vcar, vboat, vbike, vheli, vcc.");
104 SendClientMessage(playerid, 0x00FF00FF, "Level 3: vgoto, vskin, vsavepos, vloadpos.");
105 return 1;
106}
107
108CMD:vheal(playerid)
109{
110 if(GetPlayerState(playerid) != PLAYER_STATE_ONFOOT) return SendClientMessage(playerid, 0xFF0000FF, "You must be on foot to use this feature.");
111 else if(GetVipRank(playerid) >= 1)
112 {
113 if(gettime() > ECMD[playerid][0])
114 {
115 ECMD[playerid][0] = gettime() + 60;
116 SetPlayerHealth(playerid, 100);
117 SendClientMessage(playerid, 0xFF00FFFF, "Health has been restored!");
118 } else return SendClientMessage(playerid, 0xFF0000FF, "You've to wait 60 seconds between each use.");
119 } else return SendClientMessage(playerid, 0xFF0000FF, "You don't have enough level to use this feature.");
120 return 1;
121}
122
123CMD:vequip(playerid)
124{
125 if(GetPlayerState(playerid) != PLAYER_STATE_ONFOOT) return SendClientMessage(playerid, 0xFF0000FF, "You must be on foot to use this feature.");
126 else if(GetVipRank(playerid) >= 1)
127 {
128 if(gettime() > ECMD[playerid][2])
129 {
130 ECMD[playerid][1] = gettime() + 60;
131 GivePlayerWeapon(playerid, 35, 5);
132 GivePlayerWeapon(playerid, 24, 100);
133 GivePlayerWeapon(playerid, 34, 100);
134 GivePlayerWeapon(playerid, 9, 1);
135 SendClientMessage(playerid, 0xFF00FFFF, "Chainsaw(9), Desert Eagle(24), Sniper Rifle(34) and Rocket launcher(35) has been spawned!");
136 } else return SendClientMessage(playerid, 0xFF0000FF, "You've to wait 60 seconds between each use.");
137 } else return SendClientMessage(playerid, 0xFF0000FF, "You don't have enough level to use this feature.");
138 return 1;
139}
140
141CMD:vjp(playerid)
142{
143 if(GetPlayerState(playerid) != PLAYER_STATE_ONFOOT) return SendClientMessage(playerid, 0xFF0000FF, "You must be on foot to use this feature.");
144 else if(GetVipRank(playerid) >= 1)
145 {
146 if(gettime() > ECMD[playerid][2])
147 {
148 ECMD[playerid][2] = gettime() + 60;
149 SetPlayerSpecialAction(playerid, SPECIAL_ACTION_USEJETPACK);
150 SendClientMessage(playerid, 0xFF00FFFF, "Jetpack has been spawned!");
151 } else return SendClientMessage(playerid, 0xFF0000FF, "You've to wait 60 seconds between each use.");
152 } else return SendClientMessage(playerid, 0xFF0000FF, "You don't have enough level to use this feature.");
153 return 1;
154}
155
156CMD:vrespawn(playerid)
157{
158 if(GetPlayerState(playerid) != PLAYER_STATE_ONFOOT) return SendClientMessage(playerid, 0xFF0000FF, "You must be on foot to use this feature.");
159 else if(GetVipRank(playerid) >= 1)
160 {
161 if(gettime() > ECMD[playerid][3])
162 {
163 ECMD[playerid][3] = gettime() + 60;
164 SpawnPlayer(playerid);
165 SendClientMessage(playerid, 0xFF00FFFF, "You've been respawned!");
166 } else return SendClientMessage(playerid, 0xFF0000FF, "You've to wait 60 seconds between each use.");
167 } else return SendClientMessage(playerid, 0xFF0000FF, "You don't have enough level to use this feature.");
168 return 1;
169}
170
171CMD:vtime(playerid, params[])
172{
173 if(GetPlayerState(playerid) != PLAYER_STATE_ONFOOT && GetPlayerState(playerid) != PLAYER_STATE_DRIVER) return SendClientMessage(playerid, 0xFF0000FF, "You must be on foot/in car to use this feature.");
174 else if(GetVipRank(playerid) >= 1)
175 {
176 if(gettime() > ECMD[playerid][4])
177 {
178 new Hours, Minutes;
179 if(sscanf(params, "ii", Hours, Minutes)) return SendClientMessage(playerid, 0xFF0000FF, "Usage: /vtime [H] [M].");
180 SetPlayerTime(playerid, Hours, Minutes);
181 SendClientMessage(playerid, 0xFF00FFFF, "Time has been updated!");
182 ECMD[playerid][4] = gettime() + 60;
183 } else return SendClientMessage(playerid, 0xFF0000FF, "You've to wait 60 seconds between each use.");
184 } else return SendClientMessage(playerid, 0xFF0000FF, "You don't have enough level to use this feature.");
185 return 1;
186}
187
188CMD:vcar(playerid)
189{
190 if(GetPlayerState(playerid) != PLAYER_STATE_ONFOOT) return SendClientMessage(playerid, 0xFF0000FF, "You must be on foot to use this feature.");
191 else if(GetVipRank(playerid) >= 2)
192 {
193 if(gettime() > ECMD[playerid][5])
194 {
195 new veh, Float:X, Float:Y, Float:Z, Float:A;
196 ECMD[playerid][5] = gettime() + 60;
197 GetPlayerPos(playerid, X, Y, Z);
198 GetPlayerFacingAngle(playerid, A);
199 veh = CreateVehicle(411, X, Y, Z, A, 0, 6, -1);
200 PutPlayerInVehicle(playerid, veh, 0);
201 SendClientMessage(playerid, 0xFF00FFFF, "VIP Vehicle spawned, with NOS!");
202 AddVehicleComponent(veh, 1010);
203 } else return SendClientMessage(playerid, 0xFF0000FF, "You've to wait 60 seconds between each use.");
204 } else return SendClientMessage(playerid, 0xFF0000FF, "You don't have enough level to use this feature.");
205 return 1;
206}
207
208CMD:vboat(playerid)
209{
210 if(GetPlayerState(playerid) != PLAYER_STATE_ONFOOT) return SendClientMessage(playerid, 0xFF0000FF, "You must be on foot to use this feature.");
211 else if(GetVipRank(playerid) >= 2)
212 {
213 if(gettime() > ECMD[playerid][6])
214 {
215 new veh, Float:X, Float:Y, Float:Z, Float:A;
216 ECMD[playerid][6] = gettime() + 60;
217 GetPlayerPos(playerid, X, Y, Z);
218 GetPlayerFacingAngle(playerid, A);
219 veh = CreateVehicle(493, X, Y, Z, A, 0, 6, -1);
220 PutPlayerInVehicle(playerid, veh, 0);
221 SendClientMessage(playerid, 0xFF00FFFF, "VIP Vehicle spawned!");
222 } else return SendClientMessage(playerid, 0xFF0000FF, "You've to wait 60 seconds between each use.");
223 } else return SendClientMessage(playerid, 0xFF0000FF, "You don't have enough level to use this feature.");
224 return 1;
225}
226
227CMD:vbike(playerid)
228{
229 if(GetPlayerState(playerid) != PLAYER_STATE_ONFOOT) return SendClientMessage(playerid, 0xFF0000FF, "You must be on foot to use this feature.");
230 else if(GetVipRank(playerid) >= 2)
231 {
232 if(gettime() > ECMD[playerid][7])
233 {
234 new veh, Float:X, Float:Y, Float:Z, Float:A;
235 ECMD[playerid][7] = gettime() + 60;
236 GetPlayerPos(playerid, X, Y, Z);
237 GetPlayerFacingAngle(playerid, A);
238 veh = CreateVehicle(463, X, Y, Z, A, 0, 6, -1);
239 PutPlayerInVehicle(playerid, veh, 0);
240 SendClientMessage(playerid, 0xFF00FFFF, "VIP Vehicle spawned!");
241 } else return SendClientMessage(playerid, 0xFF0000FF, "You've to wait 60 seconds between each use.");
242 } else return SendClientMessage(playerid, 0xFF0000FF, "You don't have enough level to use this feature.");
243 return 1;
244}
245
246CMD:vheli(playerid)
247{
248 if(GetPlayerState(playerid) != PLAYER_STATE_ONFOOT) return SendClientMessage(playerid, 0xFF0000FF, "You must be on foot to use this feature.");
249 else if(GetVipRank(playerid) >= 2)
250 {
251 if(gettime() > ECMD[playerid][8])
252 {
253 new veh, Float:X, Float:Y, Float:Z, Float:A;
254 ECMD[playerid][8] = gettime() + 60;
255 GetPlayerPos(playerid, X, Y, Z);
256 GetPlayerFacingAngle(playerid, A);
257 veh = CreateVehicle(487, X, Y, Z, A, 0, 6, -1);
258 PutPlayerInVehicle(playerid, veh, 0);
259 SendClientMessage(playerid, 0xFF00FFFF, "VIP Vehicle spawned!");
260 } else return SendClientMessage(playerid, 0xFF0000FF, "You've to wait 60 seconds between each use.");
261 } else return SendClientMessage(playerid, 0xFF0000FF, "You don't have enough level to use this feature.");
262 return 1;
263}
264
265CMD:vcc(playerid, params[])
266{
267 if(!IsPlayerInAnyVehicle(playerid)) return SendClientMessage(playerid, 0xFF0000FF, "You aren't in any vehicle.");
268 else if(GetVipRank(playerid) >= 2)
269 {
270 if(gettime() > ECMD[playerid][9])
271 {
272 new Col1, Col2;
273 if(sscanf(params, "ii", Col1, Col2)) return SendClientMessage(playerid, 0xFF0000FF, "Usage: /vcc [First Color] [Sec Color].");
274 if(Col1 > 255 || Col1 < 0) return SendClientMessage(playerid, 0xFF0000FF, "Vehicle Colours are between 0-255 only.");
275 if(Col2 > 255 || Col2 < 0) return SendClientMessage(playerid, 0xFF0000FF, "Vehicle Colours are between 0-255 only.");
276 ChangeVehicleColor(GetPlayerVehicleID(playerid), Col1, Col2);
277 SendClientMessage(playerid, 0xFF00FFFF, "Vehicle Colour has been updated!");
278 ECMD[playerid][9] = gettime() + 60;
279 } else return SendClientMessage(playerid, 0xFF0000FF, "You've to wait 60 seconds between each use.");
280 } else return SendClientMessage(playerid, 0xFF0000FF, "You don't have enough level to use this feature.");
281 return 1;
282}
283
284
285CMD:vgoto(playerid, params[])
286{
287 if(GetPlayerState(playerid) != PLAYER_STATE_ONFOOT) return SendClientMessage(playerid, 0xFF0000FF, "You must be on foot to use this feature.");
288 else if(GetVipRank(playerid) >= 3)
289 {
290 if(gettime() > ECMD[playerid][10])
291 {
292 new ID, Float:X, Float:Y, Float:Z, Float:A;
293 if(sscanf(params, "i", ID)) return SendClientMessage(playerid, 0xFF0000FF, "Usage: /vgoto [ID].");
294 if(!IsPlayerConnected(ID) || ID == playerid || ID == INVALID_PLAYER_ID) return SendClientMessage(playerid, 0xFF0000FF, "Invalid Player ID.");
295 SendClientMessage(playerid, 0xFF00FFFF, "Teleported to player Sucessfully!");
296 SendClientMessage(ID, 0xFF00FFFF, "A Very Important Person has teleported to you!");
297 GetPlayerPos(ID, X, Y, Z);
298 GetPlayerFacingAngle(ID, A);
299 SetPlayerPos(playerid, X, Y, Z);
300 SetPlayerFacingAngle(playerid, A);
301 ECMD[playerid][10] = gettime() + 60;
302 } else return SendClientMessage(playerid, 0xFF0000FF, "You've to wait 60 seconds between each use.");
303 } else return SendClientMessage(playerid, 0xFF0000FF, "You don't have enough level to use this feature.");
304 return 1;
305}
306
307CMD:vskin(playerid, params[])
308{
309 if(GetPlayerState(playerid) != PLAYER_STATE_ONFOOT) return SendClientMessage(playerid, 0xFF0000FF, "You must be on foot to use this feature.");
310 else if(GetVipRank(playerid) >= 3)
311 {
312 if(gettime() > ECMD[playerid][10])
313 {
314 new SkinID;
315 if(sscanf(params, "i", SkinID)) return SendClientMessage(playerid, 0xFF0000FF, "Usage: /vskin [ID].");
316 if(SkinID > 311 || SkinID < 0) return SendClientMessage(playerid, 0xFF0000FF, "Skins are between 0-311 only.");
317 SetPlayerSkin(playerid, SkinID);
318 SendClientMessage(playerid, 0xFF00FFFF, "Skin has been changed!");
319 ECMD[playerid][11] = gettime() + 60;
320 } else return SendClientMessage(playerid, 0xFF0000FF, "You've to wait 60 seconds between each use.");
321 } else return SendClientMessage(playerid, 0xFF0000FF, "You don't have enough level to use this feature.");
322 return 1;
323}
324
325CMD:vsavepos(playerid, params[])
326{
327 if(GetPlayerState(playerid) != PLAYER_STATE_ONFOOT && GetPlayerState(playerid) != PLAYER_STATE_DRIVER) return SendClientMessage(playerid, 0xFF0000FF, "You must be on foot/in car to use this feature.");
328 else if(GetVipRank(playerid) >= 3)
329 {
330 if(gettime() > ECMD[playerid][10])
331 {
332 SaveVipPos(playerid);
333 ECMD[playerid][12] = gettime() + 60;
334 } else return SendClientMessage(playerid, 0xFF0000FF, "You've to wait 60 seconds between each use.");
335 } else return SendClientMessage(playerid, 0xFF0000FF, "You don't have enough level to use this feature.");
336 return 1;
337}
338
339CMD:vloadpos(playerid, params[])
340{
341 if(GetPlayerState(playerid) != PLAYER_STATE_ONFOOT && GetPlayerState(playerid) != PLAYER_STATE_DRIVER) return SendClientMessage(playerid, 0xFF0000FF, "You must be on foot/in car to use this feature.");
342 else if(GetVipRank(playerid) >= 3)
343 {
344 if(gettime() > ECMD[playerid][10])
345 {
346 LoadVipPos(playerid);
347 ECMD[playerid][13] = gettime() + 60;
348 } else return SendClientMessage(playerid, 0xFF0000FF, "You've to wait 60 seconds between each use.");
349 } else return SendClientMessage(playerid, 0xFF0000FF, "You don't have enough level to use this feature.");
350 return 1;
351}
352
353CMD:vips(playerid)
354{
355 new total = 0, String[128];
356 for(new i = 0, j = GetPlayerPoolSize(); i <= j; i++)
357 {
358 if(IsPlayerConnected(i) && !IsPlayerNPC(i))
359 {
360 if(GetVipRank(i) >= 1)
361 {
362 total++;
363 SendClientMessage(playerid, 0xFF00FFFF, "Online Very Important Persons:");
364 format(String, sizeof(String), "{%06x}%s (Level: %d)", GetPlayerColor(i) >>> 8, GetName(i), GetVipRank(i));
365 SendClientMessage(playerid, GetPlayerColor(i), String);
366 }
367 }
368 }
369 if(total == 0) return SendClientMessage(playerid, 0xFF00FFFF, "There are no online Very Important Persons!");
370 return 1;
371}
372
373stock GetVipRank(playerid)
374{
375 new Query[180], DBResult: Result, Assoc[5], Viprank = 0;
376 format(Query, sizeof(Query), "SELECT `PNAME` FROM `VIP` WHERE PNAME = '%q'", GetName(playerid));
377 Result = db_query(VDB, Query);
378
379 if(db_num_rows(Result))
380 {
381 format(Query, sizeof(Query), "SELECT * FROM `VIP` WHERE PNAME = '%q'", GetName(playerid));
382 Result = db_query(VDB, Query);
383
384 db_get_field_assoc(Result, "VIPRANK", Assoc, 5);
385 Viprank = strval(Assoc);
386 }
387 db_free_result(Result);
388 return Viprank;
389}
390
391stock SaveVipPos(playerid)
392{
393 new Query[250], DBResult: Result;
394 format(Query, sizeof(Query), "SELECT `PNAME` FROM `VIP` WHERE PNAME = '%q'", GetName(playerid));
395 Result = db_query(VDB, Query);
396
397 if(db_num_rows(Result))
398 {
399 new Float:X, Float:Y, Float:Z;
400 GetPlayerPos(playerid, X, Y, Z);
401
402 format(Query, sizeof(Query), "UPDATE `VIP` SET X = '%0.2f', Y = '%0.2f', Z = '%0.2f' WHERE PNAME = '%q'", X, Y, Z, GetName(playerid));
403 db_query(VDB, Query);
404
405 SendClientMessage(playerid, -1, "Saved the position, use /vloadpos to load it any time.");
406 }
407 db_free_result(Result);
408 return 1;
409}
410
411stock LoadVipPos(playerid)
412{
413 new Query[128], DBResult: Result;
414 format(Query, sizeof(Query), "SELECT `PNAME` FROM `VIP` WHERE PNAME = '%q'", GetName(playerid));
415 Result = db_query(VDB, Query);
416
417 if(db_num_rows(Result))
418 {
419 new pX[20], pY[20], pZ[20];
420
421 format(Query, sizeof(Query), "SELECT * FROM `VIP` WHERE PNAME = '%q'", GetName(playerid));
422 Result = db_query(VDB, Query);
423
424 db_get_field_assoc(Result, "X", pX, 20);
425 db_get_field_assoc(Result, "Y", pY, 20);
426 db_get_field_assoc(Result, "Z", pZ, 20);
427
428 SetPlayerPos(playerid, strval(pX), strval(pY), strval(pZ));
429 SendClientMessage(playerid, -1, "Loaded the last saved position from your records.");
430 }
431 db_free_result(Result);
432 return 1;
433}
434
435stock GetName(playerid)
436{
437 new pName[MAX_PLAYER_NAME];
438 GetPlayerName(playerid, pName, sizeof(pName));
439 return pName;
440}