Advertisement
TheKiller

Groups FS

Aug 6th, 2011
849
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 12.79 KB | None | 0 0
  1. //Group filterscript by [HiC]TheKiller - Scripted because Weponz wanted it and I was bored :P.
  2. //Friday 5 August 2011 - Saturday 6 August 2011.
  3. #include <a_samp>
  4. #include <zcmd> // http://forum.sa-mp.com/showthread.php?t=91354
  5. //Variables
  6. #define MAX_GROUPS 100 // Change this if you think you are going to ever have over 100 groups.
  7.  
  8. enum ginfo
  9. {
  10. grname[75],
  11. leader,
  12. active
  13. };
  14.  
  15. enum pginfo
  16. {
  17. gid,
  18. order,
  19. invited,
  20. attemptjoin
  21. };
  22.  
  23. new group[MAX_PLAYERS][pginfo];
  24. new groupinfo[MAX_GROUPS][ginfo];
  25.  
  26. public OnFilterScriptInit()
  27. {
  28. for(new x; x<MAX_PLAYERS; x++)
  29. {
  30. group[x][gid] = -1;
  31. group[x][order] = -1;
  32. group[x][invited] = -1;
  33. group[x][attemptjoin] = -1;
  34. }
  35. print(" Group filterscript by [HiC]TheKiller and Weponz has been started! ");
  36. return 1;
  37. }
  38.  
  39. public OnPlayerConnect(playerid)
  40. {
  41. group[playerid][gid] = -1;
  42. group[playerid][invited] = -1;
  43. group[playerid][attemptjoin] = -1;
  44. return 1;
  45. }
  46.  
  47. public OnPlayerDisconnect(playerid, reason)
  48. {
  49. LeaveGroup(playerid, 2);
  50. return 1;
  51. }
  52.  
  53. COMMAND:groupcreate(playerid, params[])
  54. {
  55. if(group[playerid][gid] != -1) return SendClientMessage(playerid, 0xFF0000, "Leave your group with {FFFFFF}/groupleave{FF0000} before creating a new one!");
  56. if(strlen(params) > 49 || strlen(params) < 3) return SendClientMessage(playerid, 0xFF0000, "Usage: {FFFFFF}/groupcreate{FF0000} (Group name 3-50 characters)!");
  57. if(IsGroupTaken(params)) return SendClientMessage(playerid, 0xFF0000, "Group name is already in use!");
  58. CreateGroup(params, playerid);
  59. return 1;
  60. }
  61.  
  62. COMMAND:groupleave(playerid, params[])
  63. {
  64. if(group[playerid][gid] == -1) return SendClientMessage(playerid, 0xFF0000, "You are not in a group to leave one!");
  65. LeaveGroup(playerid, 0);
  66. return 1;
  67. }
  68.  
  69. COMMAND:groupinvite(playerid, params[])
  70. {
  71. if(group[playerid][order] != 1) return SendClientMessage(playerid, 0xFF0000, "You are not the leader of the group, you cannot invite people!");
  72. new cid;
  73. if(isnull(params)) return SendClientMessage(playerid, 0xFF0000, "Usage: {FFFFFF}/Groupinvite{FF0000} (playerid)");
  74. cid = strval(params);
  75. if(!IsPlayerConnected(cid)) return SendClientMessage(playerid, 0xFF0000, "Player Is not connected!");
  76. if(group[cid][gid] == group[playerid][gid]) return SendClientMessage(playerid, 0xFF0000, "Player Is already in your group!");
  77. if(group[cid][invited] == group[playerid][gid]) return SendClientMessage(playerid, 0xFF0000, "Player has already been invited to your group!");
  78. if(group[cid][attemptjoin] == group[playerid][gid]) return GroupJoin(cid, group[playerid][gid]);
  79. group[cid][invited] = group[playerid][gid];
  80. new string[125], pname[24];
  81. GetPlayerName(playerid, pname, 24);
  82. format(string, sizeof(string), "You have been invited to join group {FFFFFF}%s(%d){FFCC66} by {FFFFFF}%s(%d). /groupjoin %d", groupinfo[group[playerid][gid]][grname], group[playerid][gid], pname, playerid, group[playerid][gid]);
  83. SendClientMessage(cid, 0xFFCC66, string);
  84. GetPlayerName(cid, pname, 24);
  85. format(string, sizeof(string), "You have invited {FFFFFF}%s(%d){FFCC66} to join your group!", pname, cid);
  86. SendClientMessage(playerid, 0xFFCC66, string);
  87. return 1;
  88. }
  89.  
  90. COMMAND:groupleader(playerid, params[])
  91. {
  92. if(group[playerid][order] != 1) return SendClientMessage(playerid, 0xFF0000, "You are not the leader of the group, you cannot change the leader!");
  93. new cid;
  94. if(isnull(params)) return SendClientMessage(playerid, 0xFF0000, "Usage: {FFFFFF}/Groupleader{FF0000} (playerid)");
  95. cid = strval(params);
  96. if(!IsPlayerConnected(cid)) return SendClientMessage(playerid, 0xFF0000, "Player Is not connected!");
  97. if(cid == playerid) return SendClientMessage(playerid, 0xFF0000, "You are already group leader, silly.");
  98. if(group[playerid][gid] != group[cid][gid]) return SendClientMessage(playerid, 0xFF0000, "Player Is not in your group!");
  99. ChangeMemberOrder(group[playerid][gid], 1);
  100. group[playerid][order] = GroupMembers(group[playerid][gid]);
  101. return 1;
  102. }
  103.  
  104. COMMAND:groupjoin(playerid, params[])
  105. {
  106. if(group[playerid][gid] != -1) return SendClientMessage(playerid, 0xFF0000, "You are already in a group! Leave your current one before joining another one!");
  107. new grid;
  108. if( (isnull(params) && group[playerid][invited] != -1 ) || ( strval(params) == group[playerid][invited] && group[playerid][invited] != -1) ) return GroupJoin(playerid, group[playerid][invited]);
  109. if(isnull(params)) return SendClientMessage(playerid, 0xFF0000, "Usage: {FFFFFF}/groupjoin{FF0000} (groupid)");
  110. grid = strval(params);
  111. if(!groupinfo[grid][active]) return SendClientMessage(playerid, 0xFF0000, "The group you have tried to join doesn't exist!");
  112. group[playerid][attemptjoin] = grid;
  113. new string[125], pname[24];
  114. GetPlayerName(playerid, pname, 24);
  115. format(string, sizeof(string), "You have requested to join group %s(ID:%d)", groupinfo[grid][grname], grid);
  116. SendClientMessage(playerid, 0xFFCC66, string);
  117. format(string, sizeof(string), "{FFFFFF}%s(%d) {FFCC66}has requested to join your group. Type /groupinvite %d to accept", pname, playerid, playerid);
  118. SendMessageToLeader(grid, string);
  119. return 1;
  120. }
  121.  
  122. COMMAND:groupkick(playerid, params[])
  123. {
  124. if(group[playerid][order] != 1) return SendClientMessage(playerid, 0xFF0000, "You are not the leader of a group, you cannot kick!");
  125. new cid;
  126. if(isnull(params)) return SendClientMessage(playerid, 0xFF0000, "Usage: {FFFFFF}/Groupkick{FF0000} (playerid)");
  127. cid = strval(params);
  128. if(!IsPlayerConnected(cid)) return SendClientMessage(playerid, 0xFF0000, "Player Is not connected!");
  129. if(cid == playerid) return SendClientMessage(playerid, 0xFF0000, "You cannot kick yourself, silly.");
  130. if(group[playerid][gid] != group[cid][gid]) return SendClientMessage(playerid, 0xFF0000, "Player Is not in your group!");
  131. LeaveGroup(cid, 1);
  132. return 1;
  133. }
  134.  
  135. COMMAND:groupmessage(playerid, params[])
  136. {
  137. if(group[playerid][gid] == -1) return SendClientMessage(playerid, 0xFF0000, "You are not in a group, you cannot group message!");
  138. if(isnull(params)) return SendClientMessage(playerid, 0xFF0000, "Usage: {FFFFFF}/gm{FF0000} (message)");
  139. new pname[24], string[140+24];
  140. GetPlayerName(playerid, pname, 24);
  141. format(string, sizeof(string), "%s(%d): %s", pname, playerid, params);
  142. SendMessageToAllGroupMembers(group[playerid][gid], string);
  143. return 1;
  144. }
  145.  
  146.  
  147. COMMAND:grouplist(playerid, params[])
  148. {
  149. if(isnull(params) && group[playerid][gid] == -1) return SendClientMessage(playerid, 0xFF0000, "Usage: {FFFFFF}/grouplist{FF0000} (group)");
  150. if(isnull(params))
  151. {
  152. DisplayGroupMembers(group[playerid][gid], playerid);
  153. return 1;
  154. }
  155. new grid = strval(params);
  156. if(!groupinfo[grid][active]) return SendClientMessage(playerid, 0xFF0000, "The group ID you have entered is not active!");
  157. DisplayGroupMembers(grid, playerid);
  158. return 1;
  159. }
  160.  
  161. COMMAND:groups(playerid, params[])
  162. {
  163. ListGroups(playerid);
  164. return 1;
  165. }
  166.  
  167. COMMAND:grl(playerid, params[])
  168. return cmd_groupleave(playerid, params);
  169.  
  170. COMMAND:grc(playerid, params[])
  171. return cmd_groupcreate(playerid, params);
  172.  
  173. COMMAND:gri(playerid, params[])
  174. return cmd_groupinvite(playerid, params);
  175.  
  176. COMMAND:grlead(playerid, params[])
  177. return cmd_groupleader(playerid, params);
  178.  
  179. COMMAND:grj(playerid, params[])
  180. return cmd_groupjoin(playerid, params);
  181.  
  182. COMMAND:grk(playerid, params[])
  183. return cmd_groupkick(playerid, params);
  184.  
  185. COMMAND:gm(playerid, params[])
  186. return cmd_groupmessage(playerid, params);
  187.  
  188. COMMAND:grlist(playerid, params[])
  189. return cmd_grouplist(playerid, params);
  190.  
  191.  
  192. stock DisplayGroupMembers(groupid, playerid)
  193. {
  194. new amount[2], string[200], shortstr[55], pname[24];
  195. format(string, sizeof(string), "Group Members for %s(ID:%d)", groupinfo[groupid][grname], groupid);
  196. SendClientMessage(playerid, 0xFFFFFF, string);
  197. string = "";
  198. for(new x; x<MAX_PLAYERS; x++)
  199. {
  200. if(group[x][gid] == groupid)
  201. {
  202. amount[0] ++;
  203. amount[1] ++;
  204. GetPlayerName(x, pname, 24);
  205. if(groupinfo[groupid][leader] != x) format(shortstr, sizeof(shortstr), "%s(%d),", pname, x);
  206. if(groupinfo[groupid][leader] == x) format(shortstr, sizeof(shortstr), "[LEADER]%s(%d),", pname, x);
  207. if(amount[1] == 1) format(string, sizeof(string), "%s", shortstr);
  208. if(amount[1] != 1) format(string, sizeof(string), "%s %s", string, shortstr);
  209. if(amount[0] == 6)
  210. {
  211. strdel(string, strlen(string)-1, strlen(string));
  212. SendClientMessage(playerid, 0xFFCC66, string);
  213. string = "";
  214. amount[0] = 0;
  215. }
  216. }
  217. }
  218. strdel(string, strlen(string)-1, strlen(string));
  219. if(amount[0] != 0) SendClientMessage(playerid, 0xFFCC66, string);
  220. return 1;
  221. }
  222.  
  223. stock ListGroups(playerid)
  224. {
  225. new amount[2], string[200], shortstr[55];
  226. SendClientMessage(playerid, 0xFFFFFF, "Current groups:");
  227. for(new x=0; x<MAX_GROUPS; x++)
  228. {
  229. if(groupinfo[x][active])
  230. {
  231. amount[0] ++;
  232. amount[1] ++;
  233. format(shortstr, sizeof(shortstr), "%s(ID:%d)", groupinfo[x][grname], x);
  234. if(amount[1] == 1) format(string, sizeof(string), "%s", shortstr);
  235. if(amount[1] != 1) format(string, sizeof(string), "%s %s", string, shortstr);
  236. if(amount[0] == 4)
  237. {
  238. SendClientMessage(playerid, 0xFFCC66, string);
  239. string = "";
  240. amount[0] = 0;
  241. }
  242. }
  243. }
  244. if(amount[1] == 0) SendClientMessage(playerid, 0xFFFF00, "There are currently no active groups!");
  245. if(amount[1] != 0) SendClientMessage(playerid, 0xFFCC66, string);
  246. return 1;
  247. }
  248.  
  249.  
  250.  
  251. stock SendMessageToLeader(groupi, message[])
  252. return SendClientMessage(groupinfo[groupi][leader], 0xFFCC66, message);
  253.  
  254. stock GroupJoin(playerid, groupi)
  255. {
  256. group[playerid][gid] = groupi;
  257. group[playerid][order] = GroupMembers(groupi);
  258. group[playerid][attemptjoin] = -1;
  259. group[playerid][invited] = -1;
  260. new pname[24], string[130];
  261. GetPlayerName(playerid, pname, 24);
  262. format(string, sizeof(string), "%s has joined your group!", pname);
  263. SendMessageToAllGroupMembers(groupi, string);
  264. format(string, sizeof(string), "You have joined group %s(ID:%d)", groupinfo[groupi][grname] ,groupi);
  265. SendClientMessage(playerid, 0xFFCC66, string);
  266. return 1;
  267. }
  268.  
  269. stock FindNextSlot()
  270. {
  271. new id;
  272. while(groupinfo[id][active]) id ++;
  273. return id;
  274. }
  275.  
  276. stock IsGroupTaken(grpname[])
  277. {
  278. for(new x; x<MAX_GROUPS; x++) if(!strcmp(grpname, groupinfo[x][grname], true) && strlen(groupinfo[x][grname]) != 0) return 1;
  279. return 0;
  280. }
  281.  
  282. stock GroupInvite(playerid, groupid)
  283. return group[playerid][invited] = groupid;
  284.  
  285. stock CreateGroup(grpname[], owner)
  286. {
  287. new slotid = FindNextSlot();
  288. groupinfo[slotid][leader] = owner;
  289. format(groupinfo[slotid][grname], 75, "%s", grpname);
  290. groupinfo[slotid][active] = 1;
  291. group[owner][gid] = slotid;
  292. group[owner][order] = 1;
  293. new string[120];
  294. format(string, sizeof(string), "You have created the group %s(ID:%d)", grpname, slotid);
  295. SendClientMessage(owner, 0xFFCC66, string);
  296. return slotid;
  297. }
  298.  
  299. stock LeaveGroup(playerid, reason)
  300. {
  301. new groupid = group[playerid][gid], orderid = group[playerid][order], string[100], pname[24];
  302. group[playerid][gid] = -1;
  303. group[playerid][order] = -1;
  304. GroupCheck(groupid, orderid);
  305. GetPlayerName(playerid, pname, 24);
  306. if(reason == 0)
  307. {
  308. format(string, sizeof(string), "{FFFFFF}%s(%d){FFCC66} has left your group!", pname, playerid);
  309. SendClientMessage(playerid, 0xFFCC66, "You have left your group");
  310. }
  311. if(reason == 1)
  312. {
  313. format(string, sizeof(string), "{FFFFFF}%s(%d){FFCC66} has left your group (Kicked by the leader)!", pname, playerid);
  314. SendClientMessage(playerid, 0xFFCC66, "You have been kicked from your group!");
  315. }
  316. if(reason == 2) format(string, sizeof(string), "{FFFFFF}%s(%d){FFCC66} has left your group (Disconnected)!", pname, playerid);
  317. SendMessageToAllGroupMembers(groupid, string);
  318. return 1;
  319. }
  320.  
  321. stock GroupCheck(groupid, orderid)
  322. {
  323. new gmems = GroupMembers(groupid);
  324. if(!gmems) groupinfo[groupid][active] = 0;
  325. if(gmems != 0) ChangeMemberOrder(groupid, orderid);
  326. return 1;
  327. }
  328.  
  329. stock GroupMembers(groupid)
  330. {
  331. if(!groupinfo[groupid][active]) return 0;
  332. new groupmembers;
  333. for(new i; i<MAX_PLAYERS; i++) if(group[i][gid] == groupid) groupmembers++;
  334. return groupmembers;
  335. }
  336.  
  337. stock ChangeMemberOrder(groupid, orderid)
  338. {
  339. for(new x; x<MAX_PLAYERS; x++)
  340. {
  341. if(group[x][gid] != groupid || group[x][order] < orderid) continue;
  342. group[x][order] --;
  343. if(group[x][order] == 1)
  344. {
  345. groupinfo[groupid][leader] = x;
  346. new string[128], pname[24];
  347. GetPlayerName(x, pname, 24);
  348. format(string, sizeof(string), "{FFFFFF}%s(%d){FFCC66} has been promoted to the new group leader!", pname, x);
  349. SendMessageToAllGroupMembers(groupid, string);
  350. }
  351. }
  352. return 1;
  353. }
  354.  
  355. stock SendMessageToAllGroupMembers(groupid, message[])
  356. {
  357. if(!groupinfo[groupid][active]) return 0;
  358. for(new x; x<MAX_PLAYERS; x++) if(group[x][gid] == groupid) SendClientMessage(x, 0xFFCC66, message);
  359. return 1;
  360. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement