Advertisement
Guest User

Untitled

a guest
May 5th, 2011
3,770
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Pawn 14.64 KB | None | 0 0
  1. //********************* [ Credits ] ******************************************//
  2. /*
  3.  
  4.                 Gang Script by Cameltoe
  5.                         Version 1.1
  6.                        
  7.         I do not demand to keep the credits but it is appreciated.
  8.  
  9. */
  10. //******************** [ Includes ] ******************************************//
  11. #include <a_samp>
  12. #include <mysql>
  13. #include <sscanf2>
  14. #include <zcmd>
  15.  
  16. //******************** [ Forwards ] ******************************************//
  17.  
  18.  
  19. //******************** [ Defines ] ******************************************//
  20.  
  21. // Script
  22. #define GANG_VERSION "1.1"
  23.  
  24. // Colors
  25. #define COLOR_RED           0xFF000000
  26. #define COLOR_GREEN         0x00FF0000
  27. #define COLOR_BLUE          0x0000FF00
  28. #define COLOR_YELLOW        0xFFFF0000
  29.  
  30.  
  31.  
  32. // Mysql
  33. #define DB_HOST   "localhost"
  34. #define DB_USER   "admin"
  35. #define DB_DB   "gang"
  36. #define DB_PASS   "admin"
  37.  
  38. #define CREATE_DB_USERS \
  39.     "CREATE TABLE IF NOT EXISTS users (id INT(5) NOT NULL AUTO_INCREMENT PRIMARY KEY,\
  40.     username VARCHAR(25) NOT NULL, gang INT(5) NOT NULL) ENGINE = MyISAM;"
  41.    
  42. #define CREATE_DB_GANGS \
  43.     "CREATE TABLE IF NOT EXISTS gangs (id INT(5) NOT NULL AUTO_INCREMENT PRIMARY KEY,\
  44.      name VARCHAR(100) NOT NULL, owner VARCHAR(25) NOT NULL) ENGINE = MyISAM;"
  45.      
  46. // Dialogs
  47. #define DIALOG_GANG_INFO 1
  48.  
  49. //******************** [ Enums ] *********************************************//
  50. enum pInfo
  51. {
  52.     Id,
  53.     Username[25],
  54.     Gang,
  55. }
  56.  
  57. //******************** [ Symbols ] *******************************************//
  58. new
  59.     PlayerInfo[MAX_PLAYERS][pInfo];
  60.  
  61. new
  62.     Invite[MAX_PLAYERS];
  63.  
  64. //******************** [ Callbakcs ] *****************************************//
  65.  
  66. #if defined filsterscript
  67.  
  68. public OnFilterScriptInit()
  69. {
  70.     InitMysqlConnection();
  71.    
  72.     printf("_____________________________________");
  73.     printf("|                                   |");
  74.     printf("|           Gang FS v%s            |", GANG_VERSION);
  75.     printf("|               By                  |");
  76.     printf("|            Cameltoe               |");
  77.     printf("_____________________________________");
  78.     return 1;
  79.  
  80.  
  81. #else
  82.  
  83. main()
  84. {
  85.     InitMysqlConnection();
  86.  
  87.     printf("_____________________________________");
  88.     printf("|                                   |");
  89.     printf("|           Gang FS v%s            |", GANG_VERSION);
  90.     printf("|               By                  |");
  91.     printf("|            Cameltoe               |");
  92.     printf("_____________________________________");
  93.     return 1;
  94. }
  95.  
  96. #endif
  97.  
  98. public OnPlayerConnect(playerid)
  99. {
  100.     new Query[128];
  101.     ResetPlayerInfo(playerid);
  102.    
  103.     if(CheckUser(playerid))
  104.     {
  105.         LoadPlayerInfo(playerid);
  106.     }
  107.     else
  108.     {
  109.         format(Query, sizeof(Query), "INSERT INTO users (id, username, gang) VALUES (NULL, '%s', 0);", GetPlayerNameEx(playerid));
  110.         mysql_query(Query);
  111.     }
  112.     return 1;
  113. }
  114.  
  115. public OnPlayerText(playerid, text[])
  116. {
  117.     new string[128];
  118.     if(PlayerInfo[playerid][Gang]) format(string, sizeof(string), "[ %s ] %s ( %d ) : %s", GetGangName(PlayerInfo[playerid][Gang]), GetPlayerNameEx(playerid), playerid, text);
  119.     else format(string, sizeof(string), "%s ( %d ) : %s",  GetPlayerNameEx(playerid), playerid, text);
  120.     return SendClientMessageToAll(GetPlayerColor(playerid), string);
  121. }
  122.  
  123. public OnPlayerCommandText(playerid, cmdtext[])
  124. {
  125.     return 0;
  126. }
  127.  
  128. public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
  129. {
  130.     switch(dialogid)
  131.     {
  132.         case DIALOG_GANG_INFO:
  133.         {
  134.             ShowGangInfoForPlayer(listitem + 1, playerid);
  135.         }
  136.     }
  137.     return 1;
  138. }
  139.  
  140. //******************** [ Functions ] *****************************************//
  141.  
  142. //******************** [ Stocks ] ********************************************//
  143.  
  144. stock CheckUser(playerid)
  145. {
  146.     new Query[100]; format(Query, sizeof(Query), "SELECT * FROM users WHERE username = '%s';", GetPlayerNameEx(playerid));
  147.     mysql_query(Query);
  148.     mysql_store_result();
  149.     if(mysql_num_rows()) return 1;
  150.     return 0;
  151. }
  152.  
  153. stock LoadPlayerInfo(playerid)
  154. {
  155.     new Query[100]; format(Query, sizeof(Query), "SELECT * FROM users WHERE username = '%s';", GetPlayerNameEx(playerid));
  156.     mysql_query(Query);
  157.     mysql_store_result();
  158.     mysql_fetch_row(Query, "|");
  159.     sscanf(Query, "p<|>e<is[25]i>", PlayerInfo[playerid]);
  160. }
  161.  
  162. stock CheckGangByName(Name[])
  163. {
  164.     new Query[100]; format(Query, sizeof(Query), "SELECT * FROM gangs WHERE name = '%s';", Name);
  165.     mysql_query(Query);
  166.     mysql_store_result();
  167.     if(mysql_num_rows()) return 1;
  168.     return 0;
  169. }
  170.  
  171. stock CheckGangById(GangID)
  172. {
  173.     new Query[100]; format(Query, sizeof(Query), "SELECT * FROM gangs WHERE id = %d;", GangID;
  174.     mysql_query(Query);
  175.     mysql_store_result();
  176.     if(mysql_num_rows()) return 1;
  177.     return 0;
  178. }
  179.  
  180. stock ResetPlayerInfo(playerid)
  181. {
  182.     Invite[playerid] = 0;
  183.     PlayerInfo[playerid][Gang] = 0;
  184. }
  185.  
  186. stock InitMysqlConnection()
  187. {
  188.     mysql_init();
  189.     mysql_connect(DB_HOST, DB_USER, DB_PASS, DB_DB);
  190.     mysql_query(CREATE_DB_USERS);
  191.     mysql_query(CREATE_DB_GANGS);
  192. }
  193.  
  194. stock IsPlayerGangLeader(playerid)
  195. {
  196.     new Query[100]; format(Query, sizeof(Query), "SELECT * FROM gangs WHERE id = %d AND owner = '%s';", PlayerInfo[playerid][Gang], GetPlayerNameEx(playerid));
  197.     mysql_query(Query);
  198.     mysql_store_result();
  199.     if(mysql_num_rows()) return 1;
  200.     return 0;
  201. }
  202.  
  203. stock IsMySelf(pID, oID)
  204. {
  205.     if(pID == oID) return 1;
  206.     return 0;
  207. }
  208.  
  209. stock GetGangName(GangID)
  210. {
  211.     new gName[100], Query[150]; format(Query, sizeof(Query), "SELECT name FROM gangs WHERE id = %d;", GangID);
  212.     mysql_query(Query);
  213.     mysql_store_result();
  214.     mysql_fetch_string(gName);
  215.     return gName;
  216. }
  217.  
  218. stock GetGangMemberCount(gID)
  219. {
  220.     new Query[150]; format(Query, sizeof(Query), "SELECT * FROM users WHERE gang = %d;", gID);
  221.     mysql_query(Query);
  222.     mysql_store_result();
  223.     return mysql_num_rows();
  224. }
  225.  
  226. stock GetGangCount()
  227. {
  228.     new Query[150]; format(Query, sizeof(Query), "SELECT * FROM gangs;");
  229.     mysql_query(Query);
  230.     mysql_store_result();
  231.     return mysql_num_rows();
  232. }
  233.  
  234. stock ShowGangInfoForPlayer(GangID, pID)
  235. {
  236.     new tGid, tGname[100], tGOwner[25], Query[150], string[200];
  237.     format(Query, sizeof(Query), "SELECT * FROM gangs WHERE id = %d;", GangID);
  238.     mysql_query(Query);
  239.     mysql_store_result();
  240.     if(!mysql_num_rows()) return 0;
  241.     mysql_fetch_row(Query, "|");
  242.     sscanf(Query, "p<|>is[100]s[25]", tGid, tGname, tGOwner);
  243.     format(string, sizeof(string), "Id: %d - Name: %s - Owner: %s - Members: %d", tGid, tGname, tGOwner, GetGangMemberCount(GangID));
  244.     return ShowPlayerDialog(pID, DIALOG_GANG_INFO, DIALOG_STYLE_MSGBOX, "Cameltoe's Gang FS", string, "Cancel", "");
  245. }
  246.  
  247. stock GetPlayerNameEx(playerid)
  248. {
  249.     new pName[25];
  250.     GetPlayerName(playerid, pName, 25);
  251.     return pName;
  252. }
  253.  
  254. stock strmatch(const String1[], const String2[])
  255. {
  256.     if ((strcmp(String1, String2, true, strlen(String2)) == 0) && (strlen(String2) == strlen(String1))) return true;
  257.     else return false;
  258. }
  259.  
  260. //******************** [ Commands ] ******************************************//
  261.  
  262. command(g, playerid, params[])
  263. {
  264.     new string[128];
  265.     if(!PlayerInfo[playerid][Gang]) return SendClientMessage(playerid, COLOR_YELLOW, "You have to be member of an gang to use this command.");
  266.     format(string, sizeof(string), "Gang : %s ( %d ) : %s", GetPlayerNameEx(playerid), playerid, params);
  267.     for(new pID; pID < MAX_PLAYERS; pID++)
  268.     {
  269.         if(IsPlayerConnected(pID)) {
  270.             SendClientMessage(pID, GetPlayerColor(playerid), string);
  271.         }
  272.     }
  273.     return 1;
  274. }
  275.  
  276. command(gangs, playerid, params[])
  277. {
  278.     new gID, tGid, tGname[100], tGOwner[25], Query[200], string[1000]; // Change this depending on how many gangs you have.
  279.     if(sscanf(params, "u", gID))
  280.     {
  281.         format(Query, sizeof(Query), "SELECT * FROM gangs");
  282.         mysql_query(Query);
  283.         mysql_store_result();
  284.         while(mysql_fetch_row(Query, "|"))
  285.         {
  286.             if(!mysql_num_rows()) continue;
  287.             sscanf(Query, "p<|>is[100]s[25]", tGid, tGname, tGOwner);
  288.             format(string, sizeof(string), "%sId: %d - Name: %s - Owner: %s\r\n", string, tGid, tGname, tGOwner);
  289.         }
  290.         ShowPlayerDialog(playerid, DIALOG_GANG_INFO, DIALOG_STYLE_LIST, "Cameltoe's Gang FS", string, "Info", "Cancel");
  291.     }
  292.     else
  293.     {
  294.         if(!ShowGangInfoForPlayer(gID, playerid)) SendClientMessage(playerid, COLOR_YELLOW, "Invalid gang id.");
  295.     }
  296.     return 1;
  297. }
  298.  
  299. command(ganginfo, playerid, params[])
  300. {
  301.     new gID;
  302.     if(sscanf(params, "i", gID)) return SendClientMessage(playerid, COLOR_YELLOW, "Usage: /ganginfo [ gangID ]");
  303.     if(!ShowGangInfoForPlayer(gID, playerid)) SendClientMessage(playerid, COLOR_YELLOW, "Invalid gang id.");
  304.     return 1;
  305. }
  306.  
  307. command(retreat, playerid, params[])
  308. {
  309.     new Query[100], string[128];
  310.     if(Invite[playerid] == 0 && PlayerInfo[playerid][Gang] == 0) return SendClientMessage(playerid, COLOR_YELLOW, "You are not an member of any gang.");
  311.     format(string, sizeof(string), "You now left %s.", GetGangName(PlayerInfo[playerid][Gang]));
  312.     SendClientMessage(playerid, COLOR_GREEN, string);
  313.     format(string, sizeof(string), "%s [ %d ] left %s.", GetPlayerNameEx(playerid), playerid, GetGangName(PlayerInfo[playerid][Gang]));
  314.     SendClientMessageToAll(COLOR_GREEN, string);
  315.     if(IsPlayerGangLeader(playerid))
  316.     {
  317.         format(Query, sizeof(Query), "DELETE FROM gangs WHERE owner = '%s';", GetPlayerNameEx(playerid));
  318.         mysql_query(Query);
  319.         format(Query, sizeof(Query), "UPDATE users SET gang = 0 WHERE gang = %d;", PlayerInfo[playerid][Gang]);
  320.         mysql_query(Query);
  321.     }
  322.     format(Query, sizeof(Query), "UPDATE users SET gang = 0 WHERE username = '%s';", GetPlayerNameEx(playerid));
  323.     PlayerInfo[playerid][Gang] = 0;
  324.     mysql_query(Query);
  325.     return 1;
  326. }
  327.  
  328.  
  329. command(deny, playerid, params[])
  330. {
  331.     new string[128];
  332.     if(PlayerInfo[playerid][Gang] != 0)  return SendClientMessage(playerid, COLOR_YELLOW, "You are already in an gang.");
  333.     if(Invite[playerid] == 0) return SendClientMessage(playerid, COLOR_YELLOW, "You have not received any gang invite.");
  334.     format(string, sizeof(string), "You denyed the gang invite.");
  335.     SendClientMessage(playerid, COLOR_GREEN, string);
  336.     Invite[playerid] = 0;
  337.     return 1;
  338. }
  339.  
  340. command(accept, playerid, params[])
  341. {
  342.     new Query[100], string[128];
  343.     if(PlayerInfo[playerid][Gang] != 0)  return SendClientMessage(playerid, COLOR_YELLOW, "You are already in an gang.");
  344.     if(Invite[playerid] == 0) return SendClientMessage(playerid, COLOR_YELLOW, "You have not received any gang invite.");
  345.     format(Query, sizeof(Query), "UPDATE users SET gang = %d WHERE username = '%s';", Invite[playerid], GetPlayerNameEx(playerid));
  346.     format(string, sizeof(string), "You are now an member of %s, type /retreat to leave the gang.", GetGangName(Invite[playerid]));
  347.     SendClientMessage(playerid, COLOR_GREEN, string);
  348.     format(string, sizeof(string), "%s [ %d ] is now an member of %s!", GetPlayerNameEx(playerid), playerid, GetGangName(Invite[playerid]));
  349.     SendClientMessageToAll(COLOR_GREEN, string);
  350.     PlayerInfo[playerid][Gang] = Invite[playerid];
  351.     Invite[playerid] = 0;
  352.     mysql_query(Query);
  353.     return 1;
  354. }
  355.  
  356. command(invite, playerid, params[])
  357. {
  358.     new pID, string[128];
  359.     if(!IsPlayerGangLeader(playerid)) return SendClientMessage(playerid, COLOR_YELLOW, "You have to be gang leader to use this comamnd.");
  360.     if(sscanf(params, "u", pID)) return SendClientMessage(playerid, COLOR_YELLOW, "Usage: /invite [ Playerid / Name ]");
  361.     if(!IsPlayerConnected(pID)) return SendClientMessage(playerid, COLOR_YELLOW, "This player isn't connected.");
  362.     if(IsMySelf(playerid, pID))  return SendClientMessage(playerid, COLOR_YELLOW, "You cannot invite yourself.");
  363.     if(PlayerInfo[pID][Gang] != 0)  return SendClientMessage(playerid, COLOR_YELLOW, "This player is already in an gang.");
  364.     if(Invite[pID] != 0 && Invite[pID] != PlayerInfo[playerid][Gang])  return SendClientMessage(playerid, COLOR_YELLOW, "This player is already invited by an other gang, please wait for the player to reject the invitation");
  365.     if(Invite[pID] == PlayerInfo[playerid][Gang])  return SendClientMessage(playerid, COLOR_YELLOW, "You have already invited this player please stand by for input.");
  366.     format(string, sizeof(string), "You were invited to join %s, type /accept or /deny .. W/e you feel like.", GetGangName(PlayerInfo[playerid][Gang]));
  367.     SendClientMessage(pID, COLOR_GREEN, string);
  368.     format(string, sizeof(string), "You invited %s to join your gang, please wait for the player to accept the invite.", GetPlayerNameEx(pID));
  369.     SendClientMessage(playerid, COLOR_GREEN, string);
  370.     Invite[pID] = PlayerInfo[playerid][Gang];
  371.     return 1;
  372. }
  373.  
  374. command(kick, playerid, params[])
  375. {
  376.     new pID, string[128], Query[100];
  377.     if(!IsPlayerGangLeader(playerid)) return SendClientMessage(playerid, COLOR_YELLOW, "You have to be gang leader to use this comamnd.");
  378.     if(sscanf(params, "u", pID)) return SendClientMessage(playerid, COLOR_YELLOW, "Usage: /kick [ Playerid / Name ]");
  379.     if(!IsPlayerConnected(pID)) return SendClientMessage(playerid, COLOR_YELLOW, "This player isn't connected.");
  380.     if(IsMySelf(playerid, pID))  return SendClientMessage(playerid, COLOR_YELLOW, "You cannot kick yourself.");
  381.     if(PlayerInfo[pID][Gang] != PlayerInfo[playerid][Gang])  return SendClientMessage(playerid, COLOR_YELLOW, "This player isn't an member of your gang.");
  382.     format(Query, sizeof(Query), "UPDATE users SET gang = 0 WHERE username = '%s';", GetPlayerNameEx(pID));
  383.     format(string, sizeof(string), "You were kicked out of the gang.");
  384.     SendClientMessage(pID, COLOR_GREEN, string);
  385.     format(string, sizeof(string), "%s [ %d ] were kicked out of %s.", GetPlayerNameEx(pID), pID, GetGangName(PlayerInfo[playerid][Gang]));
  386.     SendClientMessageToAll(COLOR_GREEN, string);
  387.     format(string, sizeof(string), "You kicked %s [ %d ] from your gang, if this was an mistake please reinvite the player with /invite.",  GetPlayerNameEx(pID), pID);
  388.     SendClientMessage(playerid, COLOR_GREEN, string);
  389.     PlayerInfo[pID][Gang] = 0;
  390.     mysql_query(Query);
  391.     return 1;
  392. }
  393.  
  394. command(creategang, playerid, params[])
  395. {
  396.     new string[128], gName[100], Query[200];
  397.     if(PlayerInfo[playerid][Gang] != 0) return SendClientMessage(playerid, COLOR_YELLOW, "You are already an member of an gang, please quit that gang before creating a new one.");
  398.     if(sscanf(params, "s[100]", gName)) return SendClientMessage(playerid, COLOR_YELLOW, "Usage: /creategang [ Gang-name ].");
  399.     if(CheckGangByName(gName)) return SendClientMessage(playerid, COLOR_YELLOW, "An gang with this name already exists.");
  400.     format(Query, sizeof(Query), "INSERT INTO gangs (id, name, owner) VALUES (NULL, '%s', '%s');", gName, GetPlayerNameEx(playerid));
  401.     format(string, sizeof(string), "You created an gang with name : %s, you were sat as owner of the gang.", gName);
  402.     SendClientMessage(playerid, COLOR_GREEN, string);
  403.     mysql_query(Query);
  404.     PlayerInfo[playerid][Gang] = mysql_insert_id();
  405.     format(Query, sizeof(Query), "UPDATE users SET gang = %d WHERE username = '%s';", PlayerInfo[playerid][Gang], GetPlayerNameEx(playerid));
  406.     mysql_query(Query);
  407.     return 1;
  408. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement