Advertisement
VeNoM_1

Untitled

Mar 15th, 2025
103
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Pawn 28.57 KB | Source Code | 0 0
  1. #include <a_samp>
  2. #include <samp_bcrypt>
  3. #include <sscanf2>
  4. #include <zcmd>
  5. #define SERVER_DATABASE "server.db"
  6.  
  7. #define REGISTER_DIALOG 0
  8. #define LOGIN_DIALOG 1
  9. #define MAX_HOUSES 100
  10. #define PLAYER 0
  11. #define HELPER 1
  12. #define ADMIN 2
  13. #define OWNER 3
  14.  
  15. #define VIP_BRONZE 0
  16. #define VIP_SILVER 1
  17. #define VIP_GOLD 2
  18. #define VIP_DIAMOND 3
  19. #define REWARD_INTERVAL (3600000)
  20. #define REWARD_MONEY 2000
  21. #define REWARD_SCORE 1
  22.  
  23. #define GAMESTATE_FREEROAM 0
  24. #define GAMESTATE_ROLEPLAY 1
  25. #define VIP_CHAT_COLOR F72585
  26.  
  27. #define COLOR_YELLOW 0xFFFF00AA
  28. #define COLOR_RED 0xAA3333AA
  29. #define COLOR_MAGENTA 0xFF00FFFF
  30. #define COLOR_GOLD 0xFFD700FF
  31. #define COLOR_GREEN 0x008000FF
  32.  
  33. new DB:server_database;
  34. new DBResult:database_result;
  35. new rpName[MAX_PLAYERS][24];
  36. new Text:PublicTD[1];
  37.  
  38. enum player_data
  39. {
  40.     player_kills,
  41.     player_deaths,
  42.     player_admin_level,
  43.     player_vip_level,
  44.  
  45.     bool:player_logged
  46. };
  47.  
  48. new PlayerData[MAX_PLAYERS][player_data];
  49. new gamestate=GAMESTATE_FREEROAM;
  50.  
  51. stock GetName(playerid)
  52. {
  53.     new name[MAX_PLAYER_NAME];
  54.     GetPlayerName(playerid, name, sizeof(name));
  55.     return name;
  56. }
  57.  
  58. stock DB_Escape(text[])//Credits: Y_Less
  59. {
  60.     new ret[80 * 2], ch, i, j;
  61.     while ((ch = text[i++]) && j < sizeof (ret))
  62.     {
  63.         if (ch == '\'')
  64.         {
  65.             if (j < sizeof (ret) - 2)
  66.             {
  67.                 ret[j++] = '\'';
  68.                 ret[j++] = '\'';
  69.             }
  70.         }
  71.         else if (j < sizeof (ret))
  72.         {
  73.             ret[j++] = ch;
  74.         }
  75.         else
  76.         {
  77.             j++;
  78.         }
  79.     }
  80.     ret[sizeof (ret) - 1] = '\0';
  81.     return ret;
  82. }
  83.  
  84. stock SaveAccount(playerid)
  85. {
  86.     new query[256];
  87.     if(PlayerData[playerid][player_logged] == true)
  88.     {
  89.         format(query, sizeof(query),
  90.         "UPDATE USERS SET SCORE = '%d', KILLS = '%d', DEATHS = '%d',ADMIN_LEVEL = '%d', VIP_LEVEL = '%d' WHERE NAME = '%s' COLLATE NOCASE",
  91.         GetPlayerScore(playerid), PlayerData[playerid][player_kills], PlayerData[playerid][player_deaths],
  92.         PlayerData[playerid][player_admin_level], PlayerData[playerid][player_vip_level],GetName(playerid));
  93.         database_result = db_query(server_database, query);
  94.         db_free_result(database_result);
  95.     }
  96.     return 1;
  97. }
  98.  
  99.  
  100. main() { }
  101.  
  102. public OnGameModeInit()
  103. {
  104.     SetGameModeText("Blank Script");
  105.     SetTimer("GiveHourlyReward",REWARD_INTERVAL,true);
  106.     ManualVehicleEngineAndLights();
  107.     AddPlayerClass(0, 1958.3783, 1343.1572, 15.3746, 269.1425, 0, 0, 0, 0, 0, 0);
  108.  
  109.     server_database = db_open(SERVER_DATABASE);
  110.  
  111.     db_query(server_database, "CREATE TABLE IF NOT EXISTS USERS (`NAME`, `PASS`, `SCORE`, `KILLS`, `DEATHS`,`ADMIN_LEVEL`,`VIP_LEVEL`)");
  112.     PublicTD[0] = TextDrawCreate(480.000000, 316.000000, "~y~NAME:_~g~INFERNUS~n~~y~SPEED:_~b~0KM/h~n~~y~HEALTH:_~r~100~n~~y~FUEL:_~w~64L");
  113.     TextDrawFont(PublicTD[0], 1);
  114.     TextDrawLetterSize(PublicTD[0], 0.229166, 1.950000);
  115.     TextDrawTextSize(PublicTD[0], 572.500000, 15.500000);
  116.     TextDrawSetOutline(PublicTD[0], 1);
  117.     TextDrawSetShadow(PublicTD[0], 0);
  118.     TextDrawAlignment(PublicTD[0], 1);
  119.     TextDrawColor(PublicTD[0], -1);
  120.     TextDrawBackgroundColor(PublicTD[0], 255);
  121.     TextDrawBoxColor(PublicTD[0], 100);
  122.     TextDrawUseBox(PublicTD[0], 1);
  123.     TextDrawSetProportional(PublicTD[0], 1);
  124.     TextDrawSetSelectable(PublicTD[0], 0);
  125.     return 1;
  126. }
  127.  
  128. public OnGameModeExit()
  129. {
  130.     db_close(server_database);
  131.     return 1;
  132. }
  133.  
  134. public OnPlayerConnect(playerid)
  135. {
  136.     SetPlayerScore(playerid, 0);
  137.  
  138.     PlayerData[playerid][player_kills] = 0;
  139.     PlayerData[playerid][player_deaths] = 0;
  140.     PlayerData[playerid][player_admin_level] = 0;
  141.     PlayerData[playerid][player_logged] = false;
  142.     GivePlayerMoney(playerid, 500000);
  143.  
  144.     new query[128];
  145.     format(query, sizeof(query), "SELECT NAME FROM USERS WHERE NAME = '%s' COLLATE NOCASE", DB_Escape(GetName(playerid)));
  146.     database_result = db_query(server_database, query);
  147.     if(db_num_rows(database_result))
  148.     {
  149.         ShowPlayerDialog(playerid, LOGIN_DIALOG, DIALOG_STYLE_PASSWORD, "{FFFFFF}Account Login", "{FFFFFF}Please enter your password below to login to your account:", "Enter", "Leave");
  150.     }
  151.     else
  152.     {
  153.         ShowPlayerDialog(playerid, REGISTER_DIALOG, DIALOG_STYLE_PASSWORD, "{FFFFFF}Register Account", "{FFFFFF}Please enter a password below to register an account:", "Enter", "Leave");
  154.     }
  155.     return 1;
  156. }
  157.  
  158. public OnPlayerDisconnect(playerid, reason)
  159. {
  160.     SaveAccount(playerid);
  161.     return 1;
  162. }
  163.  
  164. public OnPlayerStateChange(playerid, newstate, oldstate)
  165. {
  166.     if (newstate == PLAYER_STATE_DRIVER) // Player entered a vehicle as a driver
  167.     {
  168.         TextDrawShowForPlayer(playerid, PublicTD[0]);
  169.     }
  170.     else if (oldstate == PLAYER_STATE_DRIVER) // Player exited the vehicle
  171.     {
  172.         TextDrawHideForPlayer(playerid, PublicTD[0]);
  173.     }
  174.     return 1;
  175. }
  176.  
  177. public OnPlayerDeath(playerid, killerid, reason)
  178. {
  179.     if(killerid != INVALID_PLAYER_ID)
  180.     {
  181.         SetPlayerScore(killerid, GetPlayerScore(killerid) + 1);
  182.         PlayerData[killerid][player_kills]++;
  183.     }
  184.  
  185.     SetPlayerScore(playerid, GetPlayerScore(playerid) - 1);
  186.     PlayerData[playerid][player_deaths]++;
  187.     return 1;
  188. }
  189.  
  190. public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
  191. {
  192.     if(dialogid == REGISTER_DIALOG)
  193.     {
  194.         if(response)
  195.         {
  196.             if(strlen(inputtext) < 3 || strlen(inputtext) > 24)
  197.             {
  198.                 SendClientMessage(playerid, -1, "SERVER: Your password must be from 3-24 characters.");
  199.                 return ShowPlayerDialog(playerid, REGISTER_DIALOG, DIALOG_STYLE_PASSWORD, "{FFFFFF}Register Account", "{FFFFFF}Please enter a password below to register an account:", "Enter", "Leave");
  200.             }
  201.  
  202.             bcrypt_hash(playerid, "OnPlayerRegister", inputtext, 12);
  203.             return 1;
  204.         }
  205.         else
  206.         {
  207.             Kick(playerid);
  208.         }
  209.     }
  210.     else if(dialogid == LOGIN_DIALOG)
  211.     {
  212.         if(response)
  213.         {
  214.             new query[256], field[64];
  215.             format(query, sizeof(query), "SELECT PASS FROM USERS WHERE NAME = '%s' COLLATE NOCASE", DB_Escape(GetName(playerid)));
  216.             database_result = db_query(server_database, query);
  217.             if(db_num_rows(database_result))
  218.             {
  219.                 db_get_field_assoc(database_result, "PASS", field, sizeof(field));
  220.                 bcrypt_verify(playerid, "OnPlayerLogin", inputtext, field);
  221.             }
  222.             return 1;
  223.         }
  224.         else
  225.         {
  226.             Kick(playerid);
  227.         }
  228.     }
  229.     return 1;
  230. }
  231.  
  232. forward OnPlayerLogin(playerid, bool:success);
  233. public OnPlayerLogin(playerid, bool:success)
  234. {
  235.     if(success)
  236.     {
  237.         new query[256], field[24];
  238.         format(query, sizeof(query), "SELECT * FROM USERS WHERE NAME = '%s' COLLATE NOCASE", DB_Escape(GetName(playerid)));
  239.         database_result = db_query(server_database, query);
  240.         if(db_num_rows(database_result))
  241.         {
  242.             db_get_field_assoc(database_result, "SCORE", field, sizeof(field));
  243.             SetPlayerScore(playerid, strval(field));
  244.  
  245.             db_get_field_assoc(database_result, "KILLS", field, sizeof(field));
  246.             PlayerData[playerid][player_kills] = strval(field);
  247.  
  248.             db_get_field_assoc(database_result, "DEATHS", field, sizeof(field));
  249.             PlayerData[playerid][player_deaths] = strval(field);
  250.  
  251.             db_get_field_assoc(database_result, "ADMIN_LEVEL", field, sizeof(field));
  252.             PlayerData[playerid][player_admin_level] = strval(field);
  253.             db_get_field_assoc(database_result, "VIP_LEVEL", field, sizeof(field));
  254.             PlayerData[playerid][player_vip_level] = strval(field);
  255.         }
  256.  
  257.         db_free_result(database_result);
  258.  
  259.         PlayerData[playerid][player_logged] = true;
  260.  
  261.         SendClientMessage(playerid, -1, "SERVER: You have successfully logged into your account.");
  262.         return 1;
  263.     }
  264.     else
  265.     {
  266.         Kick(playerid);
  267.     }
  268.     return 1;
  269. }
  270.  
  271. forward OnPlayerRegister(playerid);
  272. public OnPlayerRegister(playerid)
  273. {
  274.     new password[64];
  275.     bcrypt_get_hash(password);
  276.  
  277.     new query[256];
  278.     format(query, sizeof(query), "INSERT INTO USERS (NAME, PASS, SCORE, KILLS, DEATHS,ADMIN_LEVEL,VIP_LEVEL,last_x,last_y,last_z,last_angle,INT,WORLD) VALUES ('%s', '%s', '%d', '%d', '%d','%d','%d')", DB_Escape(GetName(playerid)), password, GetPlayerScore(playerid), PlayerData[playerid][player_kills], PlayerData[playerid][player_deaths],PlayerData[playerid][player_admin_level],PlayerData[playerid][player_vip_level]);
  279.     database_result = db_query(server_database, query);
  280.     db_free_result(database_result);
  281.  
  282.     PlayerData[playerid][player_logged] = true;
  283.  
  284.     SendClientMessage(playerid, -1, "SERVER: You have successfully registered an account.");
  285.     return 1;
  286. }
  287. forward GiveHourlyReward();
  288. public GiveHourlyReward()
  289. {
  290.     new i;
  291.     for(i=0;i<MAX_PLAYERS;i++)
  292.     {
  293.         GivePlayerMoney(i,REWARD_MONEY);
  294.         SetPlayerScore(i,GetPlayerScore(i)+REWARD_SCORE);
  295.         SendClientMessage(i, 0x00FF00FF, "You have received your hourly reward: $2000 and +1 Score!");
  296.     }
  297.     return 1;
  298. }
  299. public OnPlayerText(playerid,text[])
  300. {
  301.     if(text[0]=='#')
  302.     {
  303.         if (PlayerData[playerid][player_vip_level] < VIP_BRONZE)
  304.         {
  305.             SendClientMessage(playerid, COLOR_RED, "You are not a VIP!");
  306.             return 0; // Block message from being sent to normal chat
  307.         }
  308.         new message[128];
  309.         format(message, sizeof(message), "[VIP Chat] %s: %s", GetPlayerNameEx(playerid), text[1]); // Remove #
  310.  
  311.         for (new i = 0; i < MAX_PLAYERS; i++)
  312.         {
  313.             if (IsPlayerConnected(i) && PlayerData[i][player_vip_level] >= VIP_BRONZE)
  314.             {
  315.                 SendClientMessage(i, COLOR_GOLD, message);
  316.             }
  317.         }
  318.  
  319.         return 0; // Block original message from going to normal chat
  320.     }
  321.    
  322.     return 1;
  323. }
  324.  
  325. public OnPlayerUpdate(playerid)
  326. {
  327.     if (GetPlayerState(playerid) == PLAYER_STATE_DRIVER) // Only update if player is driving
  328.     {
  329.         new vehicleid = GetPlayerVehicleID(playerid);
  330.         new vehicleModel = GetVehicleModel(vehicleid);
  331.         new Float:vehicleHealth;
  332.         GetVehicleHealth(vehicleid, vehicleHealth);
  333.  
  334.         // Get speed
  335.         new str[64], speed = GetPlayerSpeed(playerid);
  336.         format(str, sizeof(str), "~y~NAME:_~g~%s~n~~y~SPEED:_~b~%dKM/h~n~~y~HEALTH:_~r~%d~n~~y~FUEL:_~w~64L",
  337.                GetVehicleName(vehicleModel), speed, vehicleHealth);
  338.  
  339.         TextDrawSetString(PublicTD[0], str);
  340.     }
  341.     return 1;
  342. }
  343. stock GetPlayerSpeed(playerid)
  344. {
  345.     new Float:x, Float:y, Float:z, Float:speed;
  346.     GetPlayerVelocity(playerid, x, y, z);
  347.  
  348.     // Approximate square root without floatsqrt
  349.     new Float:sum = (x * x + y * y + z * z);
  350.     new Float:approx = sum / (1.0 + sum / 2.0); // Simple approximation
  351.  
  352.     speed = floatmul(approx, 180.0); // Convert to km/h
  353.     return floatround(speed);
  354. }
  355. stock GetVehicleName(vehicleid)
  356. {
  357.     new name[32];
  358.     switch (vehicleid)
  359.     {
  360.         case 411: name = "INFERNUS";
  361.         case 451: name = "TURISMO";
  362.         case 400: name = "LANDSTALKER";
  363.         default: name = "UNKNOWN";
  364.     }
  365.     return name;
  366. }
  367. stock GetPlayerNameEx(playerid)
  368. {
  369.     new name[MAX_PLAYER_NAME];
  370.     GetPlayerName(playerid, name, sizeof(name));
  371.     return name;
  372. }
  373. CMD:setlevel(playerid, params[])
  374. {
  375.     new targetid, name[MAX_PLAYER_NAME], level[16], string[128], query[256], admin;
  376.  
  377.     if (!IsPlayerAdmin(playerid))
  378.         return SendClientMessage(playerid, -1, "You are not authorized to use this command.");
  379.  
  380.     // Parse the parameters using sscanf
  381.     if (sscanf(params, "us[16]", targetid, level))
  382.         return SendClientMessage(playerid, -1, "Syntax: /setlevel [playerid] [level]");
  383.  
  384.     // Check if target player is valid
  385.     if (!IsPlayerConnected(targetid))
  386.         return SendClientMessage(playerid, -1, "Invalid player ID.");
  387.  
  388.     // Determine admin level
  389.     if (!strcmp(level, "player", true)) admin = PLAYER;
  390.     else if (!strcmp(level, "helper", true)) admin = HELPER;
  391.     else if (!strcmp(level, "admin", true)) admin = ADMIN;
  392.     else if (!strcmp(level, "owner", true)) admin = OWNER;
  393.     else
  394.         return SendClientMessage(playerid, -1, "Invalid admin level.");
  395.  
  396.     // Get player's name
  397.     GetPlayerName(targetid, name, sizeof(name));
  398.  
  399.     // Check if database is connected
  400.     if (!server_database)
  401.         return SendClientMessage(playerid, -1, "Database connection error.");
  402.  
  403.     // Query to check if player exists in DB
  404.     format(query, sizeof(query), "SELECT ADMIN_LEVEL FROM USERS WHERE NAME = '%s' COLLATE NOCASE", DB_Escape(name));
  405.     new DBResult:result = db_query(server_database, query);
  406.  
  407.     if (db_num_rows(result))
  408.     {
  409.         db_free_result(result);
  410.  
  411.         // Update admin level in database
  412.         format(query, sizeof(query), "UPDATE USERS SET ADMIN_LEVEL = %d WHERE NAME = '%s' COLLATE NOCASE", admin, DB_Escape(name));
  413.         db_query(server_database, query);
  414.  
  415.         // Update player's admin level in memory
  416.         PlayerData[targetid][player_admin_level] = admin;
  417.  
  418.         format(string, sizeof(string), "SERVER: You have successfully set the admin level of %s to %s.", name, level);
  419.         SendClientMessage(playerid, -1, string);
  420.     }
  421.     else
  422.     {
  423.         SendClientMessage(playerid, -1, "Player not found in database.");
  424.         db_free_result(result);
  425.     }
  426.  
  427.     return 1;
  428. }
  429.  
  430. CMD:setvip(playerid, params[])
  431. {
  432.     new targetid, name[24], vip[16], string[128], query[256], vip_level;
  433.  
  434.     if (!IsPlayerAdmin(playerid))
  435.         return SendClientMessage(playerid, -1, "You are not authorized to use this command.");
  436.  
  437.     // Corrected sscanf format
  438.     if (sscanf(params, "us[16]", targetid, name, vip))
  439.         return SendClientMessage(playerid, -1, "Syntax: /setvip [playerid] [vip level]");
  440.  
  441.     if (!IsPlayerConnected(targetid))
  442.         return SendClientMessage(playerid, -1, "Invalid player ID.");
  443.  
  444.     if (!strcmp(vip, "bronze", true)) vip_level = VIP_BRONZE;
  445.     else if (!strcmp(vip, "silver", true)) vip_level = VIP_SILVER;
  446.     else if (!strcmp(vip, "gold", true)) vip_level = VIP_GOLD;
  447.     else if (!strcmp(vip, "diamond", true)) vip_level = VIP_DIAMOND;
  448.     else
  449.         return SendClientMessage(playerid, -1, "Invalid VIP level.");
  450.  
  451.     format(query, sizeof(query), "UPDATE USERS SET VIP_LEVEL = %d WHERE NAME = '%s' COLLATE NOCASE", vip_level, DB_Escape(name));
  452.     db_query(server_database, query);
  453.  
  454.     PlayerData[targetid][player_vip_level] = vip_level;
  455.  
  456.     format(string, sizeof(string), "SERVER: You have successfully set the VIP level of %s to %s.", name, vip);
  457.     SendClientMessage(playerid, -1, string);
  458.  
  459.     return 1;
  460. }
  461.  
  462. CMD:v(playerid,params[])
  463. {
  464.     if(PlayerData[playerid][player_vip_level]<VIP_BRONZE)
  465.     {
  466.         return SendClientMessage(playerid, -1, "You are not a VIP player.");
  467.     }
  468.     if(isnull(params))
  469.     {
  470.         return SendClientMessage(playerid, -1, "Usage: /v [message]");
  471.     }
  472.     new color, msg[128], name[MAX_PLAYER_NAME];
  473.     GetPlayerName(playerid, name, sizeof(name));
  474.     switch(PlayerData[playerid][player_vip_level])
  475.     {
  476.         case VIP_BRONZE: color = 0xCD7F32FF; // Bronze
  477.         case VIP_SILVER: color = 0xC0C0C0FF; // Silver
  478.         case VIP_GOLD: color = 0xFFD700FF; // Gold
  479.         case VIP_DIAMOND: color = 0xFFF72585; // Diamond
  480.         default: color = 0xFFFFFFAA;
  481.     }
  482.     format(msg, sizeof(msg), "[VIP Chat] %s: %s", name, params);
  483.     for(new i = 0; i < MAX_PLAYERS; i++)
  484.     {
  485.         if(PlayerData[i][player_vip_level] >= VIP_BRONZE)
  486.         {
  487.             SendClientMessage(i, color, msg);
  488.         }
  489.     }
  490.     return 1;
  491. }
  492. CMD:checkstatus(playerid, params[])
  493. {
  494.     new targetid, name[MAX_PLAYER_NAME], string[128], adminTitle[32], vipTitle[32];
  495.  
  496.     // If no parameters are provided, check the player's own status
  497.     if (sscanf(params, "u", targetid))
  498.         targetid = playerid;
  499.  
  500.     if (!IsPlayerConnected(targetid))
  501.         return SendClientMessage(playerid, -1, "Invalid player ID.");
  502.  
  503.     GetPlayerName(targetid, name, sizeof(name));
  504.  
  505.     // Assign Admin Titles
  506.     switch (PlayerData[targetid][player_admin_level])
  507.     {
  508.         case 0:  adminTitle = "None";
  509.         case 1:  adminTitle = "Moderator";
  510.         case 2:  adminTitle = "Administrator";
  511.         case 3:  adminTitle = "Senior Admin";
  512.         case 4:  adminTitle = "Head Admin";
  513.         case 5:  adminTitle = "Owner";
  514.         default: adminTitle = "Unknown";
  515.     }
  516.  
  517.     // Assign VIP Titles
  518.     switch (PlayerData[targetid][player_vip_level])
  519.     {
  520.         case 0:  vipTitle = "None";
  521.         case 1:  vipTitle = "Silver VIP";
  522.         case 2:  vipTitle = "Gold VIP";
  523.         case 3:  vipTitle = "Platinum VIP";
  524.         case 4:  vipTitle = "Diamond VIP";
  525.         default: vipTitle = "Unknown";
  526.     }
  527.  
  528.     format(string, sizeof(string), "Player: %s | Admin: %s | VIP: %s", name, adminTitle, vipTitle);
  529.     SendClientMessage(playerid, -1, string);
  530.  
  531.     return 1;
  532. }
  533. /*CMD:ban(playerid,params[])
  534. {
  535.     new targetid,reason;
  536.     if(PlayerData[playerid][player_admin_level]<5) return SendClientMessage(playerid,-1,"You are not authorized to use this command");
  537.     if(sscanf(params,"uz",targetid,reason))return SendClientMessage(playerid,-1,"Usage: /ban [playerid] [reason]");
  538.     if(!IsPlayerConnected(playerid))return SendClientMessage(playerid,-1,"Player is not connected");
  539.    
  540.    
  541. }*/
  542. CMD:cca(playerid, params[])
  543. {
  544.     if (!IsPlayerAdmin(playerid) && PlayerData[playerid][player_admin_level]<0) // Check if the player is an admin
  545.     {
  546.         SendClientMessage(playerid, 0xFF0000FF, "You don't have permission to use this command!");
  547.         return 1;
  548.     }
  549.  
  550.     for (new i = 0; i < 50; i++) // Sends 50 empty messages to clear the chat for all players
  551.     {
  552.         SendClientMessageToAll(-1, " ");
  553.     }
  554.  
  555.     SendClientMessageToAll(0x00FF00FF, "The chat has been cleared by an admin!");
  556.     return 1;
  557. }
  558. CMD:engine(playerid, params[])
  559. {
  560.     if(!IsPlayerInAnyVehicle(playerid)) return SendClientMessage(playerid, COLOR_RED, "You are not in a vehicle!");
  561.  
  562.     new vehicleid = GetPlayerVehicleID(playerid);
  563.     new engine, lights, alarm, doors, bonnet, boot, objective;
  564.     GetVehicleParamsEx(vehicleid, engine, lights, alarm, doors, bonnet, boot, objective);
  565.  
  566.     if(engine == VEHICLE_PARAMS_OFF) {
  567.         SetVehicleParamsEx(vehicleid, VEHICLE_PARAMS_ON, lights, alarm, doors, bonnet, boot, objective);
  568.         SendClientMessage(playerid, COLOR_YELLOW, "Engine started!");
  569.     } else {
  570.         SetVehicleParamsEx(vehicleid, VEHICLE_PARAMS_OFF, lights, alarm, doors, bonnet, boot, objective);
  571.         SendClientMessage(playerid, -1, "Engine turned off!");
  572.     }
  573.     return 1;
  574. }
  575.  
  576. CMD:lights(playerid, params[])
  577. {
  578.     if(!IsPlayerInAnyVehicle(playerid)) return SendClientMessage(playerid, COLOR_RED, "You are not in a vehicle!");
  579.  
  580.     new vehicleid = GetPlayerVehicleID(playerid);
  581.     new engine, lights, alarm, doors, bonnet, boot, objective;
  582.     GetVehicleParamsEx(vehicleid, engine, lights, alarm, doors, bonnet, boot, objective);
  583.  
  584.     if(lights == VEHICLE_PARAMS_OFF) {
  585.         SetVehicleParamsEx(vehicleid, engine, VEHICLE_PARAMS_ON, alarm, doors, bonnet, boot, objective);
  586.         SendClientMessage(playerid, COLOR_YELLOW, "Lights turned on!");
  587.     } else {
  588.         SetVehicleParamsEx(vehicleid, engine, VEHICLE_PARAMS_OFF, alarm, doors, bonnet, boot, objective);
  589.         SendClientMessage(playerid, -1, "Lights turned off!");
  590.     }
  591.     return 1;
  592. }
  593.  
  594. CMD:bonnet(playerid, params[])
  595. {
  596.     if(!IsPlayerInAnyVehicle(playerid)) return SendClientMessage(playerid, COLOR_RED, "You are not in a vehicle!");
  597.  
  598.     new vehicleid = GetPlayerVehicleID(playerid);
  599.     new engine, lights, alarm, doors, bonnet, boot, objective;
  600.     GetVehicleParamsEx(vehicleid, engine, lights, alarm, doors, bonnet, boot, objective);
  601.  
  602.     if(bonnet == VEHICLE_PARAMS_OFF) {
  603.         SetVehicleParamsEx(vehicleid, engine, lights, alarm, doors, VEHICLE_PARAMS_ON, boot, objective);
  604.         SendClientMessage(playerid, COLOR_YELLOW, "Bonnet opened!");
  605.     } else {
  606.         SetVehicleParamsEx(vehicleid, engine, lights, alarm, doors, VEHICLE_PARAMS_OFF, boot, objective);
  607.         SendClientMessage(playerid, -1, "Bonnet closed!");
  608.     }
  609.     return 1;
  610. }
  611.  
  612. CMD:boot(playerid, params[])
  613. {
  614.     if(!IsPlayerInAnyVehicle(playerid)) return SendClientMessage(playerid, COLOR_RED, "You are not in a vehicle!");
  615.  
  616.     new vehicleid = GetPlayerVehicleID(playerid);
  617.     new engine, lights, alarm, doors, bonnet, boot, objective;
  618.     GetVehicleParamsEx(vehicleid, engine, lights, alarm, doors, bonnet, boot, objective);
  619.  
  620.     if(boot == VEHICLE_PARAMS_OFF) {
  621.         SetVehicleParamsEx(vehicleid, engine, lights, alarm, doors, bonnet, VEHICLE_PARAMS_ON, objective);
  622.         SendClientMessage(playerid, COLOR_YELLOW, "Boot opened!");
  623.     } else {
  624.         SetVehicleParamsEx(vehicleid, engine, lights, alarm, doors, bonnet, VEHICLE_PARAMS_OFF, objective);
  625.         SendClientMessage(playerid, -1, "Boot closed!");
  626.     }
  627.     return 1;
  628. }
  629.  
  630. CMD:doors(playerid, params[])
  631. {
  632.     if(!IsPlayerInAnyVehicle(playerid)) return SendClientMessage(playerid, COLOR_RED, "You are not in a vehicle!");
  633.  
  634.     new vehicleid = GetPlayerVehicleID(playerid);
  635.     new engine, lights, alarm, doors, bonnet, boot, objective;
  636.     GetVehicleParamsEx(vehicleid, engine, lights, alarm, doors, bonnet, boot, objective);
  637.  
  638.     if(doors == VEHICLE_PARAMS_OFF) {
  639.         SetVehicleParamsEx(vehicleid, engine, lights, alarm, VEHICLE_PARAMS_ON, bonnet, boot, objective);
  640.         SendClientMessage(playerid, COLOR_YELLOW, "Doors locked!");
  641.     } else {
  642.         SetVehicleParamsEx(vehicleid, engine, lights, alarm, VEHICLE_PARAMS_OFF, bonnet, boot, objective);
  643.         SendClientMessage(playerid, -1, "Doors unlocked!");
  644.     }
  645.     return 1;
  646. }
  647. CMD:viphelp(playerid, params[])
  648. {
  649.     if(PlayerData[playerid][player_vip_level]<VIP_BRONZE) return SendClientMessage(playerid, COLOR_RED, "You are not a VIP!");
  650.  
  651.     SendClientMessage(playerid, COLOR_GOLD, "[VIP COMMANDS]");
  652.     SendClientMessage(playerid, COLOR_YELLOW, "/vipheal - Fully restores your health & armor");
  653.     SendClientMessage(playerid, COLOR_YELLOW, "/vipcar - Spawns a luxury VIP vehicle");
  654.     SendClientMessage(playerid, COLOR_YELLOW, "/vipskin - Change to exclusive VIP skins");
  655.     SendClientMessage(playerid, COLOR_YELLOW, "/vipweapons - Get special weapons");
  656.     SendClientMessage(playerid, COLOR_YELLOW, "/vipjetpack - Get a jetpack");
  657.     SendClientMessage(playerid,COLOR_YELLOW,"/viprepair - Repairs the car");
  658.     return 1;
  659. }
  660. CMD:vipheal(playerid, params[])
  661. {
  662.     if(PlayerData[playerid][player_vip_level] > 0)
  663.     {
  664.         SetPlayerHealth(playerid, 100.0);
  665.         SendClientMessage(playerid, COLOR_YELLOW, "VIP: You have been healed!");
  666.     }
  667.     else
  668.     {
  669.         SendClientMessage(playerid, COLOR_RED, "VIP: This command is only for VIP players!");
  670.     }
  671.     return 1;
  672. }
  673.  
  674. CMD:vipweapons(playerid, params[])
  675. {
  676.     if(PlayerData[playerid][player_vip_level] > 0)
  677.     {
  678.         GivePlayerWeapon(playerid, 24, 100); // Deagle with 100 ammo
  679.         GivePlayerWeapon(playerid, 31, 200); // M4 with 200 ammo
  680.         SendClientMessage(playerid, COLOR_YELLOW, "VIP: You have received your VIP weapons!");
  681.     }
  682.     else
  683.     {
  684.         SendClientMessage(playerid, COLOR_RED, "VIP: This command is only for VIP players!");
  685.     }
  686.     return 1;
  687. }
  688.  
  689. CMD:vipcar(playerid, params[])
  690. {
  691.     if (PlayerData[playerid][player_vip_level] < VIP_BRONZE) // Check if player is VIP
  692.     {
  693.         SendClientMessage(playerid, COLOR_RED, "You are not a VIP!");
  694.         return 1;
  695.     }
  696.  
  697.     new vehicleid;
  698.     if(sscanf(params, "d", vehicleid))
  699.     {
  700.         SendClientMessage(playerid, COLOR_YELLOW, "Usage: /vipcar [vehicle ID]");
  701.         return 1;
  702.     }
  703.  
  704.     SpawnVIPCar(playerid, vehicleid);
  705.     return 1;
  706. }
  707.  
  708. CMD:vipcolor(playerid, params[])
  709. {
  710.     if(PlayerData[playerid][player_vip_level] > 0)
  711.     {
  712.         new color;
  713.         switch (PlayerData[playerid][player_vip_level])
  714.         {
  715.             case VIP_BRONZE: color = 0xCD7F32FF;
  716.             case VIP_SILVER: color = 0xC0C0C0FF;
  717.             case VIP_GOLD: color = 0xFFD700FF;
  718.             case VIP_DIAMOND: color = 0x1E90FFFF;
  719.         }
  720.         SetPlayerColor(playerid, color);
  721.         SendClientMessage(playerid, COLOR_YELLOW, "VIP: Your player color has been updated!");
  722.     }
  723.     else
  724.     {
  725.         SendClientMessage(playerid, COLOR_RED, "VIP: This command is only for VIP players!");
  726.     }
  727.     return 1;
  728. }
  729. CMD:viprepair(playerid, params[])
  730. {
  731.     if (PlayerData[playerid][player_vip_level] < VIP_BRONZE)
  732.     {
  733.         SendClientMessage(playerid, COLOR_RED, "You are not a VIP!");
  734.         return 1;
  735.     }
  736.  
  737.     new vehicleid = GetPlayerVehicleID(playerid);
  738.     if (!vehicleid)
  739.     {
  740.         SendClientMessage(playerid, COLOR_YELLOW, "You are not in a vehicle!");
  741.         return 1;
  742.     }
  743.  
  744.     RepairVehicle(vehicleid);
  745.     SendClientMessage(playerid, COLOR_GREEN, "Your vehicle has been repaired!");
  746.     return 1;
  747. }
  748.  
  749. CMD:vipjetpack(playerid, params[])
  750. {
  751.     if(PlayerData[playerid][player_vip_level] > 0)
  752.     {
  753.         GivePlayerWeapon(playerid, 370, 1); // Jetpack
  754.         SendClientMessage(playerid, COLOR_YELLOW, "VIP: You have received a Jetpack!");
  755.     }
  756.     else
  757.     {
  758.         SendClientMessage(playerid, COLOR_RED, "VIP: This command is only for VIP players!");
  759.     }
  760.     return 1;
  761. }
  762. stock SpawnVIPCar(playerid, vehicleid)
  763. {
  764.     new Float:x, Float:y, Float:z, Float:angle;
  765.  
  766.     // Get player position and facing angle
  767.     GetPlayerPos(playerid, x, y, z);
  768.     GetPlayerFacingAngle(playerid, angle);
  769.  
  770.     // Calculate position in front of the player
  771.     x += 3.0 * floatsin(-angle, degrees);
  772.     y += 3.0 * floatcos(-angle, degrees);
  773.  
  774.     // Spawn the VIP car in front of the player
  775.     new carid = CreateVehicle(vehicleid, x, y, z, angle, -1, -1, 100);
  776.  
  777.     // Put player in the driver's seat
  778.     PutPlayerInVehicle(playerid, carid, 0);
  779.  
  780.     SendClientMessage(playerid, 0x00FF00FF, "VIP car has been spawned in front of you!");
  781.  
  782.     return carid;
  783. }
  784. CMD:vipskin(playerid, params[])
  785. {
  786.     if (PlayerData[playerid][player_vip_level] < VIP_BRONZE)
  787.     {
  788.         SendClientMessage(playerid, COLOR_RED, "You are not a VIP!");
  789.         return 1;
  790.     }
  791.  
  792.     new skinid;
  793.     if(sscanf(params, "d", skinid))
  794.     {
  795.         SendClientMessage(playerid, COLOR_YELLOW, "Usage: /vipskin [skin ID]");
  796.         return 1;
  797.     }
  798.  
  799.     if (skinid < 0 || skinid > 311) // San Andreas has skins from 0 to 311
  800.     {
  801.         SendClientMessage(playerid, COLOR_RED, "Invalid skin ID! Choose between 0-311.");
  802.         return 1;
  803.     }
  804.  
  805.     SetPlayerSkin(playerid, skinid);
  806.     SendClientMessage(playerid, COLOR_GREEN, "Your VIP skin has been changed!");
  807.  
  808.     return 1;
  809. }
  810. CMD:freeroam(playerid, params[])
  811. {
  812.     if (gamestate == GAMESTATE_FREEROAM) return SendClientMessage(playerid, COLOR_RED, "You are already in Freeroam mode.");
  813.     gamestate = GAMESTATE_FREEROAM;
  814.     SendClientMessageToAll(COLOR_YELLOW, "Game state changed to Freeroam.");
  815.     return 1;
  816. }
  817.  
  818. CMD:roleplay(playerid, params[])
  819. {
  820.     if (gamestate == GAMESTATE_ROLEPLAY) return SendClientMessage(playerid, COLOR_RED, "You are already in Roleplay mode.");
  821.     gamestate = GAMESTATE_ROLEPLAY;
  822.     SendClientMessageToAll(COLOR_YELLOW, "Game state changed to Roleplay.");
  823.     return 1;
  824. }
  825. CMD:me(playerid, params[])
  826. {
  827.     if (gamestate != GAMESTATE_ROLEPLAY)
  828.         return SendClientMessage(playerid, COLOR_RED, "Roleplay mode is not enabled!");
  829.     if (isnull(params))
  830.         return SendClientMessage(playerid, COLOR_YELLOW, "USAGE: /me [action]");
  831.     new str[128];
  832.     format(str, sizeof(str), "* %s %s", rpName[playerid], params);
  833.     SendClientMessageToAll(COLOR_YELLOW, str);
  834.     return 1;
  835. }
  836.  
  837. CMD:do(playerid, params[])
  838. {
  839.     if (gamestate != GAMESTATE_ROLEPLAY)
  840.         return SendClientMessage(playerid, COLOR_RED, "Roleplay mode is not enabled!");
  841.     if (isnull(params))
  842.         return SendClientMessage(playerid, COLOR_YELLOW, "USAGE: /do [description]");
  843.     new str[128];
  844.     format(str, sizeof(str), "* %s", params);
  845.     SendClientMessageToAll(COLOR_YELLOW, str);
  846.     return 1;
  847. }
  848.  
  849. CMD:b(playerid, params[])
  850. {
  851.     if (gamestate != GAMESTATE_ROLEPLAY)
  852.         return SendClientMessage(playerid, COLOR_RED, "Roleplay mode is not enabled!");
  853.     if (isnull(params))
  854.         return SendClientMessage(playerid, COLOR_YELLOW, "USAGE: /b [message]");
  855.     new str[128];
  856.     format(str, sizeof(str), "(OOC) %s: %s", rpName[playerid], params);
  857.     SendClientMessageToAll(COLOR_YELLOW, str);
  858.     return 1;
  859. }
  860. CMD:shout(playerid, params[])
  861. {
  862.     if (gamestate != GAMESTATE_ROLEPLAY)
  863.         return SendClientMessage(playerid, COLOR_RED, "Roleplay mode is not enabled!");
  864.     if (isnull(params))
  865.         return SendClientMessage(playerid, COLOR_YELLOW, "USAGE: /shout [message]");
  866.     new str[128];
  867.     format(str, sizeof(str), "%s shouts: %s!", rpName[playerid], strupr(params));
  868.     SendClientMessageToAll(COLOR_YELLOW, str);
  869.     return 1;
  870. }
  871. stock strupr(string[])
  872. {
  873.     for (new i = 0; i < strlen(string); i++)
  874.     {
  875.         if (string[i] >= 'a' && string[i] <= 'z')
  876.         {
  877.             string[i] -= 32; // Convert to uppercase
  878.         }
  879.     }
  880.     return string;
  881. }
  882.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement