Guest User

Untitled

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