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