Ejemplo n.º 1
0
/*
 * GroupAdd:  Add the names in args to the given group name.  If the group doesn't
 *   exist, create it.
 *   Return number of names added to group (0 on failure).
 */
int GroupAdd(char *group_name, char *args)
{
   UserGroup g;
   int index, i, num_added;
   char *ptr, *name;
   Bool add_name;

   num_added = 0;
   index = FindGroupByName(group_name);
   switch(index)
   {
   case GROUP_NOMATCH:
      GameMessage(GetString(hInst, IDS_BADGROUPNAME));
      return 0;

   case GROUP_AMBIGUOUS:
      GameMessage(GetString(hInst, IDS_DUPLICATEGROUPNAME));
      return 0;

   default:
      group_name = groups[index];
      GroupLoad(group_name, &g);
      break;
   }

   name = GetPlayerName(args, &ptr);
   while (name != NULL)
   {
      if (g.num_users >= MAX_GROUPSIZE)
      {
	 GameMessagePrintf(GetString(hInst, IDS_GROUPFULL), MAX_GROUPNAME, group_name);
	 break;
      }

      // Check for duplicates
      add_name = True;
      for (i=0; i < g.num_users; i++)
	 if (!stricmp(g.names[i], name))
	 {
	    add_name = False;
	    break;
	 }
      
      if (add_name)
      {
	 strncpy(g.names[g.num_users], name, MAX_CHARNAME);
	 g.names[g.num_users][MAX_CHARNAME] = 0;
	 g.num_users++;
	 num_added++;
      }
      name = GetPlayerName(ptr, &ptr);
   }

   GroupSave(group_name, &g);
   return num_added;
}
Ejemplo n.º 2
0
/*
 * GroupDeleteNames:  Remove the given names from the given group.
 *   Return number of names deleted, or -1 if the group itself was deleted.
 */
int GroupDeleteNames(char *group_name, char *args)
{
   int i, j, index, num_deleted;
   UserGroup g;
   char *name, *ptr;
   
   index = FindGroupByName(group_name);
   switch(index)
   {
   case GROUP_NOMATCH:
      GameMessage(GetString(hInst, IDS_BADGROUPNAME));
      return 0;
      
   case GROUP_AMBIGUOUS:
      GameMessage(GetString(hInst, IDS_DUPLICATEGROUPNAME));
      return 0;
      
   default:
      group_name = groups[index];
      break;
   }
   
   GroupLoad(group_name, &g);
   
   // Remove each name
   num_deleted = 0;
   name = GetPlayerName(args, &ptr);
   while (name != NULL)
   {
      for (i=0; i < g.num_users; i++)
	 if (!stricmp(g.names[i], name))
	 {
	    for (j=i; j < g.num_users - 1; j++)
	       strcpy(g.names[j], g.names[j + 1]);
	    g.num_users--;
	    num_deleted++;
	    break;
	 }
      name = GetPlayerName(ptr, &ptr);
   }

   // XXX Don't delete empty groups (???)
#if 0   
   if (g.num_users == 0)
   {
      GroupDelete(group_name);
      return -1;
   }
#endif
   
   GroupSave(group_name, &g);
   return num_deleted;
}
Ejemplo n.º 3
0
/*
 * GroupPrint:  Display the members of the group with the given name.
 */
void GroupPrint(char *group_name)
{
   UserGroup g;
   int i, index;
   COLORREF color;
   BYTE style;
   ID id;
   char buf[MAX_CHARNAME + 10];

   index = FindGroupByName(group_name);
   switch (index)
   {
   case GROUP_NOMATCH:
      GameMessage(GetString(hInst, IDS_BADGROUPNAME));
      break;
      
   case GROUP_AMBIGUOUS:
      GameMessage(GetString(hInst, IDS_DUPLICATEGROUPNAME));
      break;

   default:
      group_name = groups[index];
      GroupLoad(group_name, &g);

      GameMessagePrintf(GetString(hInst, IDS_GROUPMEMBERS), MAX_GROUPNAME, group_name);

      color = RGB(0, 0, 0);
      style = STYLE_NORMAL;
      EditBoxStartAdd();
      for (i=0; i < g.num_users; i++)
      {
	 if (i != 0)
	    DisplayMessage(", ", color, style);
	 id = FindPlayerByNameExact(g.names[i]);
	 
	 // Show player in red if logged on
	 if (id == 0 || id == INVALID_ID)
	    DisplayMessage(g.names[i], color, style);
	 else
	 {
	    sprintf(buf, "~r%s~n", g.names[i]);
	    DisplayMessage(buf, color, style);
	 }
      }
      EditBoxEndAdd();
      break;
   }
}
Ejemplo n.º 4
0
void GroupCommand(HWND hDlg, int ctrl_id, HWND hwndCtl, UINT codeNotify)
{
   int index, i;
   char group_name[MAX_GROUPNAME + 1], player_name[MAX_CHARNAME + 1], quoted_name[MAX_CHARNAME + 3];
   char say_string[MAXSAY + 1];
   UserGroup g;
   HWND hList, hwndFocus, hCombo;
   Bool legal_index;

   switch(ctrl_id)
   {
   case IDC_GROUPS:
     if (codeNotify != CBN_SELCHANGE)
       break;

     legal_index = GetCurrentGroupName(hDlg, group_name);

     EnableWindow(GetDlgItem(hDlg, IDC_DELGROUP), legal_index);
     EnableWindow(GetDlgItem(hDlg, IDC_ADDMEMBER), legal_index);
     EnableWindow(GetDlgItem(hDlg, IDC_DELMEMBER), legal_index);
     EnableWindow(GetDlgItem(hDlg, IDC_ADDNAME), legal_index);
     EnableWindow(GetDlgItem(hDlg, IDC_ADDNAMETEXT), legal_index);

     if (!legal_index)
       break;

     if (GroupLoad(group_name, &g) != GROUP_MATCH)
     {
       debug(("GroupCommand unable to load selected group %s\n", group_name));
       break;
     }

     hList = GetDlgItem(hDlg, IDC_GROUPMEMBERS);
     ListBox_ResetContent(hList);
     for (i=0; i < g.num_users; i++)
       ListBox_AddString(hList, g.names[i]);
     SetDlgItemText(hDlg, IDC_GROUPSTATUS, "");
     break;

   case IDC_DELGROUP:
     hCombo = GetDlgItem(hDlg, IDC_GROUPS);
     index = ComboBox_GetCurSel(hCombo);
     
     if (index == CB_ERR)
       break;
     
     ComboBox_GetText(hCombo, group_name, MAX_GROUPNAME);

     if (GroupDelete(group_name))
     {
       ComboBox_DeleteString(hCombo, index);
       if (ComboBox_GetCount(hCombo) == 0)
       {
	  ComboBox_ResetContent(hCombo);
	  ListBox_ResetContent(GetDlgItem(hDlg, IDC_GROUPMEMBERS));
       }
       else ComboBox_SetCurSel(hCombo, min(index, ComboBox_GetCount(hCombo) - 1));

       FORWARD_WM_COMMAND(hDlg, IDC_GROUPS, hCombo, CBN_SELCHANGE, GroupDialogProc);
 
       if (num_groups < MAX_NUMGROUPS)
	 EnableWindow(GetDlgItem(hDlg, IDC_NEWGROUP), TRUE);
       SetDlgItemText(hDlg, IDC_GROUPSTATUS, "");
     }
     break;

   case IDC_ADDMEMBER:
     if (!GetCurrentGroupName(hDlg, group_name))
       break;

     hList = GetDlgItem(hDlg, IDC_LOGGEDON);
     index = ListBox_GetCurSel(hList);
     if (index == LB_ERR)
       break;

     ListBox_GetText(hList, index, player_name);

     // Check for group too full
     if (ListBox_GetCount(GetDlgItem(hDlg, IDC_GROUPMEMBERS)) >= MAX_GROUPSIZE)
     {
        SetDlgItemText(hDlg, IDC_GROUPSTATUS, GetString(hInst, IDS_GROUPFULLDLG));
        break;
     }

     // Add quotes around player to take care of spaces
     QuotePlayerName(player_name, quoted_name);

     if (GroupAdd(group_name, quoted_name) == 0)
     {
        SetDlgItemText(hDlg, IDC_GROUPSTATUS, GetString(hInst, IDS_CANTADDNAMEDLG));
        break;
     }

     hList = GetDlgItem(hDlg, IDC_GROUPMEMBERS);
     ListBox_AddString(hList, player_name);     
     SetDlgItemText(hDlg, IDC_GROUPSTATUS, "");
     break;

   case IDC_DELMEMBER:
     if (!GetCurrentGroupName(hDlg, group_name))
       break;

     hList = GetDlgItem(hDlg, IDC_GROUPMEMBERS);
     index = ListBox_GetCurSel(hList);
     if (index == LB_ERR)
       break;

     ListBox_GetText(hList, index, player_name);

     QuotePlayerName(player_name, quoted_name);

     if (GroupDeleteNames(group_name, quoted_name) != 1)
     {
       debug(("Deleting name %s from group %s failed\n", player_name, group_name));
       break;
     }
     
     ListBox_DeleteString(hList, index);
     ListBox_SetCurSel(hList, min(index, ListBox_GetCount(hList) - 1));
     SetDlgItemText(hDlg, IDC_GROUPSTATUS, "");
     break;

   case IDOK:
     // Sent when Enter pressed on edit box
     hwndFocus = GetFocus();

     if (hwndFocus == GetDlgItem(hDlg, IDC_ADDNAME))
     {
       if (Edit_GetText(hwndFocus, player_name, MAX_CHARNAME) <= 0)
	 break;

       Edit_SetSel(hwndFocus, 0, -1);

       if (!GetCurrentGroupName(hDlg, group_name))
	 break;

       // Check for group too full
       if (ListBox_GetCount(GetDlgItem(hDlg, IDC_GROUPMEMBERS)) >= MAX_GROUPSIZE)
       {
	 SetDlgItemText(hDlg, IDC_GROUPSTATUS, GetString(hInst, IDS_GROUPFULLDLG));
	 break;
       }

       QuotePlayerName(player_name, quoted_name);

       if (GroupAdd(group_name, quoted_name) == 0)
       {
	 SetDlgItemText(hDlg, IDC_GROUPSTATUS, GetString(hInst, IDS_CANTADDNAMEDLG));
	 break;
       }
       
       hList = GetDlgItem(hDlg, IDC_GROUPMEMBERS);
       ListBox_AddString(hList, player_name);     
       SetDlgItemText(hDlg, IDC_GROUPSTATUS, "");
     }
     else if (hwndFocus == GetDlgItem(hDlg, IDC_NEWGROUP))
     {
       if (Edit_GetText(hwndFocus, group_name, MAX_GROUPNAME) <= 0)
	 break;

       Edit_SetSel(hwndFocus, 0, -1);

       if (!GroupNew(group_name))
       {	 
	 SetDlgItemText(hDlg, IDC_GROUPSTATUS, GetString(hInst, IDS_GROUPFAILEDDLG));
	 break;
       }
       hCombo = GetDlgItem(hDlg, IDC_GROUPS);
       index = ComboBox_AddString(hCombo, group_name);
       ComboBox_SetCurSel(hCombo, index);

       if (num_groups >= MAX_NUMGROUPS)
	 EnableWindow(GetDlgItem(hDlg, IDC_NEWGROUP), FALSE);

       FORWARD_WM_COMMAND(hDlg, IDC_GROUPS, hCombo, CBN_SELCHANGE, GroupDialogProc);
       SetDlgItemText(hDlg, IDC_GROUPSTATUS, "");
     }
     else if (hwndFocus == GetDlgItem(hDlg, IDC_GROUPTELL))
     {
       if (Edit_GetText(hwndFocus, say_string, MAXSAY) <= 0)
	 break;
       
       if (!GetCurrentGroupName(hDlg, group_name))
	 break;
       
       TellGroup(group_name, say_string);
       // Prevent auto-repeat from causing lots of messages to be sent
       Edit_SetText(hwndFocus, "");
     }
     break;

   case IDC_GROUP_DONE:
   case IDCANCEL:
     EndDialog(hDlg, IDOK);
     break;
   }
}