Advertisement
Jochemd

Dynamic ChatGroups © 2012

Jul 31st, 2012
800
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Pawn 11.39 KB | None | 0 0
  1. #define FILTERSCRIPT
  2.  
  3. #include <a_samp>
  4. #include <YSI\y_ini>
  5. #include <sscanf2>
  6. #include <zcmd>
  7.  
  8. #define ContinueLoading() if(CallLocalFunction("OnPlayerConnect","d",0) != 9) return SendRconCommand("exit")
  9.  
  10. #define MAX_GROUPS 32
  11.  
  12. #define COLOR_RED           0xFF0F0FFF
  13. #define COLOR_YELLOW        0xFFFF00FF
  14. #define COLOR_ORANGE        0xFF8000FF
  15.  
  16. enum pInfo
  17. {
  18.     pChatGroup,
  19.     pJoiningGroup,
  20. };
  21.  
  22. enum cGroups
  23. {
  24.     GroupUsed,
  25.     GroupName[32],
  26.     GroupOwner[24],
  27.     GroupPassword[32],
  28.     GroupCreated[20],
  29.     GroupUsers
  30. };
  31.  
  32. enum
  33. {
  34.     DIALOG_LEAVEGROUP   = 3387,
  35.     DIALOG_JOINGROUP    = 3388,
  36.     DIALOG_NOTHING      = 23345
  37. };
  38.  
  39. new PlayerInfo[MAX_PLAYERS][pInfo];
  40. new GroupInfo[MAX_PLAYERS][cGroups];
  41.  
  42. stock GetFreeGroupID()
  43. {
  44.     for(new i = 0; i < MAX_GROUPS; i ++)
  45.     {
  46.         if(!GroupInfo[i][GroupUsed]) return i;
  47.     }
  48.     return -1;
  49. }
  50.  
  51. stock SendChatGroupMessage(groupid, color, string[])
  52. {
  53.     for(new i = 0; i < MAX_PLAYERS; i ++)
  54.     {
  55.         if(IsPlayerConnected(i))
  56.         {
  57.             if(PlayerInfo[i][pChatGroup] == groupid) SendClientMessage(i,color,string);
  58.         }
  59.     }
  60.     return 1;
  61. }
  62.  
  63. public OnFilterScriptInit()
  64. {
  65.     INI_ParseFile("chatgroups.ini","LoadSavedGroups",.bPassTag = true);
  66.     print("Loaded ChatGroups.amx by Jochemd ©");
  67.     for(new i = 0; i < MAX_PLAYERS; i ++) PlayerInfo[i][pChatGroup] = -1;
  68.     ContinueLoading();
  69.     return 1;
  70. }
  71.  
  72. public OnPlayerConnect(playerid)
  73. {
  74.     SendClientMessage(playerid,COLOR_YELLOW,"This server is using Dynamic Chatgroups by Jochemd © 2012.");
  75.     return 9;
  76. }
  77.  
  78. public OnPlayerDisconnect(playerid, reason)
  79. {  
  80.     new pGroupID = PlayerInfo[playerid][pChatGroup];
  81.     if(pGroupID != -1)
  82.     {
  83.         new string[64],pName[24];
  84.         GetPlayerName(playerid,pName,24);
  85.         format(string,sizeof(string),"** {22FC03}%s (%d){FFFFFF}has left the {FF8000}chatgroup {FFFFFF}as he left the server.",pName,playerid);
  86.         SendChatGroupMessage(PlayerInfo[playerid][pChatGroup],COLOR_ORANGE,string);
  87.         PlayerInfo[playerid][pChatGroup] = -1;
  88.         GroupInfo[pGroupID][GroupUsers] --;
  89.     }
  90.     return 1;
  91. }
  92.  
  93. public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
  94. {
  95.     switch(dialogid)
  96.     {
  97.         case DIALOG_LEAVEGROUP:
  98.         {
  99.             if(!response) return 1;
  100.             new string[128],pName[24],pGroupID = PlayerInfo[playerid][pChatGroup];
  101.             GetPlayerName(playerid,pName,24);
  102.             format(string,sizeof(string),"** {FFFFFF}You have successfully left your chatgroup {20D1DF}(%s, ID: %d).",GroupInfo[pGroupID][GroupName],pGroupID);
  103.             SendClientMessage(playerid,COLOR_ORANGE,string);
  104.             PlayerInfo[playerid][pChatGroup] = -1;
  105.             GroupInfo[pGroupID][GroupUsers] --;
  106.             format(string,sizeof(string),"** {FFFFFF}%s (ID: %d) has left the chatgroup {20D1DF}%s (ID: %d).",pName,playerid,GroupInfo[pGroupID][GroupName],pGroupID);
  107.             SendChatGroupMessage(pGroupID,COLOR_ORANGE,string);
  108.             return 1;
  109.         }
  110.         case DIALOG_JOINGROUP:
  111.         {
  112.             new newGroupID = PlayerInfo[playerid][pJoiningGroup];
  113.             if(!response) return 1;
  114.             if(!strcmp(inputtext,GroupInfo[newGroupID][GroupPassword],false))
  115.             {
  116.                 new string[128],pName[24];
  117.                 GetPlayerName(playerid,pName,24);
  118.                 format(string,sizeof(string),"** {FFFFFF}You have successfully joined {22FC03}%s (ID: %d)",GroupInfo[newGroupID][GroupName],newGroupID);
  119.                 SendClientMessage(playerid,COLOR_ORANGE,string);
  120.                 format(string,sizeof(string),"** {FFFFFF}%s (ID: %d) has joined chatgroup {22FC03}%s (ID: %d){FFFFFF}.",pName,playerid,GroupInfo[newGroupID][GroupName],newGroupID);
  121.                 SendChatGroupMessage(newGroupID,COLOR_ORANGE,string);
  122.                 PlayerInfo[playerid][pChatGroup] = newGroupID;
  123.                 GroupInfo[newGroupID][GroupUsers] ++;
  124.                 return 1;
  125.             }
  126.             else return SendClientMessage(playerid,COLOR_RED,"Error: Invalid group password.");
  127.         }
  128.     }
  129.     return 1;
  130. }
  131.  
  132. forward LoadSavedGroups(tag[], name[], value[]);
  133. public LoadSavedGroups(tag[], name[], value[])
  134. {
  135.     new groupid = strval(tag);
  136.     GroupInfo[groupid][GroupUsed] = 1;
  137.     INI_String("GroupName",GroupInfo[groupid][GroupName],32);
  138.     INI_String("GroupOwner",GroupInfo[groupid][GroupOwner],24);
  139.     INI_String("GroupPassword",GroupInfo[groupid][GroupPassword],32);
  140.     INI_String("GroupCreated",GroupInfo[groupid][GroupCreated],20);
  141.     return 0;
  142. }
  143.  
  144. CMD:gc(playerid,params[])
  145. {
  146.     new pGroupID = PlayerInfo[playerid][pChatGroup];
  147.     if(pGroupID == -1) return SendClientMessage(playerid,COLOR_RED,"Error: You are currently not in a chatgroup.");
  148.     new string[128],pName[24],len = strlen(params);
  149.     if(len < 1 || len > 120) return SendClientMessage(playerid,COLOR_RED,"Error: Max input is 120 characters.");
  150.     GetPlayerName(playerid,pName,24);
  151.     format(string,sizeof(string),"** %s - %s (ID: %d): {FFFFFF}%s",GroupInfo[pGroupID][GroupName],pName,playerid,params);
  152.     SendChatGroupMessage(pGroupID,COLOR_ORANGE,string);
  153.     return 1;
  154. }
  155.  
  156. CMD:creategroup(playerid,params[])
  157. {
  158.     #if defined RCON_ADMIN_CREATE_ONLY
  159.         if(!IsPlayerAdmin(playerid)) return 0;
  160.     #endif
  161.     if(PlayerInfo[playerid][pChatGroup] != -1) return SendClientMessage(playerid,COLOR_RED,"Error: You are already in a chat group.");
  162.     new groupid = GetFreeGroupID(),string[128],date[6],INI:groupfile;
  163.     if(groupid == -1) return SendClientMessage(playerid,COLOR_RED,"Error: You cannot create more groups as you reached the max. Increase MAX_GROUPS.");
  164.     if(sscanf(params,"s[32]",GroupInfo[groupid][GroupName])) return SendClientMessage(playerid,-1,"Usage: /creategroup [name].");
  165.     format(string,sizeof(string),"** {FFFFFF}You have successfully created a chatgroup {20D1DF}(%s, ID: %d){FFFFFF}.",GroupInfo[groupid][GroupName],groupid);
  166.     SendClientMessage(playerid,COLOR_ORANGE,string);
  167.     SendClientMessage(playerid,COLOR_ORANGE,"** {FFFFFF}To set a password to this chatgroup, type {FF8000}/grouppass{FFFFFF}.");
  168.     GetPlayerName(playerid,GroupInfo[groupid][GroupOwner],24);
  169.     getdate(date[0],date[1],date[2]);
  170.     gettime(date[3],date[4],date[5]);
  171.     PlayerInfo[playerid][pChatGroup] = groupid;
  172.     GroupInfo[groupid][GroupUsed] = 1;
  173.     GroupInfo[groupid][GroupUsers] = 1;
  174.     format(GroupInfo[groupid][GroupCreated],20,"%02d/%02d/%d %02d:%02d",date[2],date[1],date[0],date[3],date[4]);
  175.     valstr(string,groupid);
  176.     groupfile = INI_Open("chatgroups.ini");
  177.     INI_SetTag(groupfile,string);
  178.     INI_WriteString(groupfile,"GroupName",GroupInfo[groupid][GroupName]);
  179.     INI_WriteString(groupfile,"GroupOwner",GroupInfo[groupid][GroupOwner]);
  180.     INI_WriteString(groupfile,"GroupCreated",GroupInfo[groupid][GroupCreated]);
  181.     INI_Close(groupfile);
  182.     return 1;
  183. }
  184.  
  185. CMD:joingroup(playerid,params[])
  186. {
  187.     new pName[24],pGroupID = PlayerInfo[playerid][pChatGroup],string[128],newGroupID = -1;
  188.     GetPlayerName(playerid,pName,24);
  189.     if(pGroupID != -1) return SendClientMessage(playerid,COLOR_RED,"Error: Please leave your current group before joining another one.");
  190.     if(sscanf(params,"d",newGroupID)) return SendClientMessage(playerid,COLOR_RED,"Usage: /joingroup [groupid].");
  191.     if(newGroupID >= MAX_GROUPS || !GroupInfo[newGroupID][GroupUsed]) return SendClientMessage(playerid,COLOR_RED,"Error: Invalid group ID (check /chatgroups).");
  192.     if(!isnull(GroupInfo[newGroupID][GroupPassword]))
  193.     {
  194.         PlayerInfo[playerid][pJoiningGroup] = newGroupID;
  195.         return ShowPlayerDialog(playerid,DIALOG_JOINGROUP,DIALOG_STYLE_PASSWORD,"{FFFFFF}Password Protected","{FFFFFF}This chatgroup is {FF0F0F}password protected{FFFFFF}. To join, please\nprovide the channel password down here.","Submit","Close");
  196.     }
  197.     format(string,sizeof(string),"** {FFFFFF}You have successfully joined {22FC03}%s (ID: %d)",GroupInfo[newGroupID][GroupName],newGroupID);
  198.     SendClientMessage(playerid,COLOR_ORANGE,string);
  199.     format(string,sizeof(string),"** {FFFFFF}%s (ID: %d) has joined chatgroup {22FC03}%s (ID: %d){FFFFFF}.",pName,playerid,GroupInfo[newGroupID][GroupName],newGroupID);
  200.     SendChatGroupMessage(newGroupID,COLOR_ORANGE,string);
  201.     PlayerInfo[playerid][pChatGroup] = newGroupID;
  202.     GroupInfo[newGroupID][GroupUsers] ++;
  203.     return 1;
  204. }
  205.  
  206. CMD:leavegroup(playerid)
  207. {
  208.     if(PlayerInfo[playerid][pChatGroup] == -1) return SendClientMessage(playerid,COLOR_RED,"Error: You are currently not in any group.");
  209.     ShowPlayerDialog(playerid,DIALOG_LEAVEGROUP,DIALOG_STYLE_MSGBOX,"{FFFF00}Leave your group","{FFFFFF}Are you sure you want to leave your current chatgroup?","Yes","No");
  210.     return 1;
  211. }
  212.  
  213. CMD:chatgroups(playerid)
  214. {
  215.     new string[96],total[96 * MAX_GROUPS];
  216.     for(new i = 0; i < MAX_GROUPS; i ++)
  217.     {
  218.         if(!GroupInfo[i][GroupUsed]) continue;
  219.         if(!i) format(string,sizeof(string),"{20D1DF}ID: %d\t\t{FFFF00}Groupname: %s\t\t{00FF00}Owner: %s",i,GroupInfo[i][GroupName],GroupInfo[i][GroupOwner]);
  220.         else format(string,sizeof(string),"\n{20D1DF}ID: %d\t\t{FFFF00}Groupname: %s\t\t{00FF00}Owner: %s",i,GroupInfo[i][GroupName],GroupInfo[i][GroupOwner]);
  221.         strcat(total,string);
  222.     }
  223.     ShowPlayerDialog(playerid,DIALOG_NOTHING,DIALOG_STYLE_MSGBOX,"{FFFFFF}Currently created chatgroups:",total,"Close","");
  224.     return 1;
  225. }
  226.  
  227. CMD:grouppass(playerid,params[])
  228. {
  229.     new pName[24],string[5],pGroupID = PlayerInfo[playerid][pChatGroup],len = strlen(params),INI:groupfile;
  230.     if(pGroupID == -1) return SendClientMessage(playerid,COLOR_RED,"Error: You are currently not in any group.");
  231.     GetPlayerName(playerid,pName,24);
  232.     if(strcmp(pName,GroupInfo[pGroupID][GroupOwner],false)) return SendClientMessage(playerid,COLOR_RED,"Error: You are not the owner of this chatgroup.");
  233.     if(len > 30) return SendClientMessage(playerid,COLOR_RED,"Error: Max password length is 30 characters.");
  234.     format(GroupInfo[pGroupID][GroupPassword],32,"%s",params);
  235.     SendClientMessage(playerid,COLOR_ORANGE,"** {FFFFFF}The group password has been changed.");
  236.     valstr(string,pGroupID);
  237.     groupfile = INI_Open("chatgroups.ini");
  238.     INI_SetTag(groupfile,string);
  239.     INI_WriteString(groupfile,"GroupPassword",params);
  240.     INI_Close(groupfile);
  241.     return 1;
  242. }
  243.  
  244. CMD:kickfromgroup(playerid,params[])
  245. {  
  246.     new pName[24],tName[24],string[128],pGroupID = PlayerInfo[playerid][pChatGroup],target;
  247.     if(pGroupID == -1) return SendClientMessage(playerid,COLOR_RED,"Error: You are currently not in any group.");
  248.     if(strcmp(pName,GroupInfo[pGroupID][GroupOwner],false)) return SendClientMessage(playerid,COLOR_RED,"Error: You are not the owner of this chatgroup.");
  249.     if(sscanf(params,"u",target)) return SendClientMessage(playerid,-1,"Usage: /kickfromgroup [target].");
  250.     if(PlayerInfo[target][pChatGroup] != PlayerInfo[playerid][pChatGroup]) return SendClientMessage(playerid,COLOR_RED,"Error: That player is not in your chat group.");
  251.     GetPlayerName(playerid,pName,sizeof(pName));
  252.     GetPlayerName(target,tName,sizeof(tName));
  253.     PlayerInfo[target][pChatGroup] = -1;
  254.     GroupInfo[pGroupID][GroupUsers] --;
  255.     format(string,sizeof(string),"** %s (ID: %d) has been kicked from the chatgroup by %s (ID: %d).",tName,target,pName,playerid);
  256.     SendChatGroupMessage(pGroupID,COLOR_RED,string);
  257.     format(string,sizeof(string),"** You have been kicked from the chatgroup by %s (ID: %d).",pName,playerid);
  258.     SendClientMessage(target,COLOR_RED,string);
  259.     return 1;
  260. }
  261.  
  262. CMD:groupinfo(playerid,params[])
  263. {
  264.     new groupid = -1,string[256];
  265.     if(sscanf(params,"d",groupid)) return SendClientMessage(playerid,-1,"Usage: /groupinfo [groupid].");
  266.     if(groupid < 0 || groupid >= (MAX_GROUPS - 1) || !GroupInfo[groupid][GroupUsed]) return SendClientMessage(playerid,COLOR_RED,"Error: Invalid group ID.");
  267.     format(string,sizeof(string),"{20D1DF}Group Name: {FFFFFF}%s\n\n{20D1DF}Group Owner: {FFFFFF}%s\n\n{20D1DF}Date Created: {FFFFFF}%s\n\n{20D1DF}Users: {FFFFFF}%d",GroupInfo[groupid][GroupName],GroupInfo[groupid][GroupOwner],GroupInfo[groupid][GroupCreated],GroupInfo[groupid][GroupUsers]);
  268.     ShowPlayerDialog(playerid,DIALOG_NOTHING,DIALOG_STYLE_MSGBOX,"Group Info",string,"Close","");
  269.     return 1;
  270. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement