Example #1
0
void wipe_descriptor(DESCRIPTOR_DATA *d)
{
  close(d->socket);
  d->state = STATE_VOID;
  d->socket = -1;
  destroy_d_events(d, EVENT_ALL);
  unlink_account(d->acc);
  unlink_descriptor(d);
  free_account(d->acc);
  free_descriptor(d);
}
Example #2
0
struct account *
account_by_idnum(int id)
{
    // First check to see if we already have it in memory
    struct account *acct = g_hash_table_lookup(account_cache,
                                               GINT_TO_POINTER(id));
    if (acct)
        return acct;

    // Apparently, we don't, so look it up on the db
    CREATE(acct, struct account, 1);
    if (load_account(acct, id))
        return acct;
    free_account(acct);
    return NULL;
}
Example #3
0
void do_fingeracct(CHAR_DATA *ch, char *arguments)
{
  ACCOUNT_DATA *acc;
  char buf[MAX_STRING_LENGTH];
  char buf2[MAX_STRING_LENGTH];
  char buf3[MAX_STRING_LENGTH];
  char buf4[128];
  int i, j, len = 0;

  if (arguments[0] == 0)
  {
    send_to_char(ch, "Whom would you like to finger?\n");
    return;
  }

  acc = new_account();
  load_account(arguments, acc);
  if (acc->name[0] == 0)
  {
    free_account(acc);
    send_to_char(ch, "Unable to finger that account.\n");
    return;
  }

  send_to_char(ch, "\n#R+#r--------------------------#1[#2Finger Account#1]#r--------------------------#R+\n");
  snprintf(buf2, MAX_STRING_LENGTH, "#1[#2Account: #R%s#1]", acc->name);
  snprintf(buf3, MAX_STRING_LENGTH, "#1[#2Logins: #R%d#1]", acc->logins);
  snprintf(buf, MAX_STRING_LENGTH, "#r| %-40s %-40s  #r|\n", buf2, buf3);
  send_to_char(ch, buf);

  serial_time(acc->time, buf4);
  if (acc->lasttime == 0)
    snprintf(buf2, MAX_STRING_LENGTH, "#1[#2Lastsave: #RNever!#1]");
  else
    snprintf(buf2, MAX_STRING_LENGTH, "#1[#2Lastsave: #R%s#1]", acc->lasttime);
  snprintf(buf3, MAX_STRING_LENGTH, "#1[#2Time: #R%s#1]", buf4);
  snprintf(buf, MAX_STRING_LENGTH, "#r| %-40s %-40s  #r|\n", buf2, buf3);
  send_to_char(ch, buf);

  for (i = 0; i < acc->charcount; ++i)
    if (strlen(acc->character[i]) > len)
      len = strlen(acc->character[i]);

  for (i = 0; i < acc->charcount; ++i)
  {
    for (j = 0; j < len - strlen(acc->character[i]); ++j)
      buf[j] = ' ';
    buf[j] = '\0';

    switch (acc->status[i])
    {
      default:
      case CHSTATUS_NORMAL:
        strlcat(buf, "#1#R#1", MAX_STRING_LENGTH); /* gets around colors not displaying */
        break;
      case CHSTATUS_HARDCORE:
        strlcat(buf, "#1[#RH#1]", MAX_STRING_LENGTH);
        break;
      case CHSTATUS_DELETED:
        strlcat(buf, "#1[#1D#1]", MAX_STRING_LENGTH);
        break;
      case CHSTATUS_IMMORTAL:
        strlcat(buf, "#1[#YI#1]", MAX_STRING_LENGTH);
        break;
    }
    snprintf(buf2, MAX_STRING_LENGTH, "#1[#2Char %d: #R%s#1] %s", i+1, acc->character[i], buf);
    serial_time(acc->chtime[i], buf4);
    snprintf(buf3, MAX_STRING_LENGTH, "#1[#2Time: #R%s#1]", buf4);
    snprintf(buf, MAX_STRING_LENGTH, "#r| %-46s %-40s  #r|\n", buf2, buf3);
    send_to_char(ch, buf);
  }

  snprintf(buf2, MAX_STRING_LENGTH, "#1[#2Email: #R%s#1]", acc->email);
  snprintf(buf, MAX_STRING_LENGTH, "#r| %-74s #r|\n", buf2);
  send_to_char(ch, buf);

  if (acc->lasthost[0] == 0)
    snprintf(buf2, MAX_STRING_LENGTH, "#1[#2Host: #RN/A#1]");
  else
    snprintf(buf2, MAX_STRING_LENGTH, "#1[#2Host: #R%s#1]", acc->lasthost);
  snprintf(buf, MAX_STRING_LENGTH, "#r| %-74s #r|\n", buf2);
  send_to_char(ch, buf);

  send_to_char(ch, "#R+#r--------------------------------------------------------------------#R+#n\n");
  free_account(acc);
}
Example #4
0
void do_finger(CHAR_DATA *ch, char *arguments)
{
  ACCOUNT_DATA *acc;
  CHAR_DATA *xch;
  char buf[MAX_STRING_LENGTH];
  char buf2[MAX_STRING_LENGTH];
  char buf3[MAX_STRING_LENGTH];
  int email = 0;
  if (arguments[0] == 0)
  {
    send_to_char(ch, "Whom would you like to finger?\n");
    return;
  }

  xch = load_character(NULL, arguments);
  if (xch->name[0] == 0)
    send_to_char(ch, "Unable to finger that player.\n");
  else
  {
    acc = new_account();
    load_account(xch->accname, acc);

    send_to_char(ch, "\n#R+#r------------------------------#1[#2Finger#1]#r------------------------------#R+\n");
    snprintf(buf2, MAX_STRING_LENGTH, "#1[#2Character: #R%s#1]", xch->name);
    snprintf(buf3, MAX_STRING_LENGTH, "#1[#2Class: #RNone#1]");
    snprintf(buf, MAX_STRING_LENGTH, "#r| %-40s %-40s  #r|\n", buf2, buf3);
    send_to_char(ch, buf);
    time_words(xch->time, buf3);
    snprintf(buf2, MAX_STRING_LENGTH, "#1[#2Time: #R%s#1]", buf3);
    snprintf(buf, MAX_STRING_LENGTH, "#r| %-74s #r|\n", buf2);
    send_to_char(ch, buf);

    if (IS_SET(acc->aflags, AFLAG_PUBLIC_EMAIL))
    {
      email = 1;
      snprintf(buf2, MAX_STRING_LENGTH, "#1[#2Email: #R%s#1]", acc->email);
      snprintf(buf, MAX_STRING_LENGTH, "#r| %-74s #r|\n", buf2);
      send_to_char(ch, buf);
    }

    if (ch->level == LEVEL_SUPREME)
    {
      send_to_char(ch, "#R+#r-----------------------------#1[#2Imm Info#1]#r-----------------------------#R+\n");

      if (email == 0)
      {
        snprintf(buf2, MAX_STRING_LENGTH, "#1[#2Email: #R%s#1]", acc->email);
        snprintf(buf, MAX_STRING_LENGTH, "#r| %-74s #r|\n", buf2);
        send_to_char(ch, buf);
      }

      snprintf(buf2, MAX_STRING_LENGTH, "#1[#2Account: #R%s#1]", xch->accname);
      snprintf(buf, MAX_STRING_LENGTH, "#r| %-74s #r|\n", buf2);
      send_to_char(ch, buf);

      if (acc->lasttime == 0)
        snprintf(buf2, MAX_STRING_LENGTH, "#1[#2Lastsave: #RNever!#1]");
      else
        snprintf(buf2, MAX_STRING_LENGTH, "#1[#2Lastsave: #R%s#1]", acc->lasttime);
      snprintf(buf, MAX_STRING_LENGTH, "#r| %-74s #r|\n", buf2);
      send_to_char(ch, buf);

      if (acc->lasthost[0] == 0)
        snprintf(buf2, MAX_STRING_LENGTH, "#1[#2Host: #RN/A#1]");
      else
        snprintf(buf2, MAX_STRING_LENGTH, "#1[#2Host: #R%s#1]", acc->lasthost);
      snprintf(buf, MAX_STRING_LENGTH, "#r| %-74s #r|\n", buf2);
      send_to_char(ch, buf);
    }

    send_to_char(ch, "#R+#r--------------------------------------------------------------------#R+#n\n");
    unlink_character(xch);
    free_account(acc);
  }
  free_character(xch);
}
Example #5
0
void check_psionic_talents (CHAR_DATA *ch)
{
    ACCOUNT_DATA	*account;
    int		chance = 0, roll = 0;
    int		cur_talents = 0, i = 0, j = 1;
    int		talents [8] = { SKILL_CLAIRVOYANCE,
                            SKILL_DANGER_SENSE,
                            SKILL_EMPATHIC_HEAL,
                            SKILL_HEX,
                            SKILL_MENTAL_BOLT,
                            SKILL_PRESCIENCE,
                            SKILL_SENSITIVITY,
                            SKILL_TELEPATHY
                       };
    bool		check = TRUE, again = TRUE, awarded = FALSE, block = FALSE;
    char		buf [MAX_STRING_LENGTH] = {'\0'};
    char		*date = NULL;

    if ( is_newbie (ch) || ch->aur <= 15 )
        return;

    if ( ch->pc && ch->pc->account ) {
        if ( !(account = load_account (ch->pc->account)) )
            return;
        if ( IS_SET (account->flags, ACCOUNT_NOPSI) )
            block = TRUE;
        if ( account->roleplay_points < 2 )
            block = TRUE;
        free_account (account);
    }
    else return;

    if ( block )
        return;

    if ( ch->aur < 16 )
        return;
    else if ( ch->aur == 16 )
        chance = 5;
    else if ( ch->aur == 17 )
        chance = 10;
    else if ( ch->aur == 18 )
        chance = 20;
    else if ( ch->aur == 19 )
        chance = 30;
    else if ( ch->aur == 20 )
        chance = 45;
    else if ( ch->aur == 21 )
        chance = 50;
    else if ( ch->aur == 22 )
        chance = 60;
    else if ( ch->aur == 23 )
        chance = 70;
    else if ( ch->aur == 24 )
        chance = 80;
    else
        chance = 95;

    chance += number(1,10);
    chance = MIN(chance, 95);

    for ( i = 0; i <= 7; i++ )
        if ( ch->skills[talents[i]] )
            cur_talents++;

    while ( check && cur_talents <= 4 ) {
        if ( number(1,100) <= chance ) {
            again = TRUE;
            while ( again ) {
                roll = talents[number(0,7)];
                if ( !ch->skills [roll] ) {
                    ch->skills [roll] = 1;
                    cur_talents++;
                    again = FALSE;
                    awarded = TRUE;
                }
                chance /= 2;
            }
            if ( cur_talents >= 4 )
                check = FALSE;
        }
        else check = FALSE;
    }

    if ( !awarded )
        return;

    snprintf (buf, MAX_STRING_LENGTH,  "This character rolled positive for the following talents:\n\n");

    for ( i = 0; i <= 7; i++ )
        if ( ch->skills [talents[i]] )
            snprintf (buf + strlen(buf), MAX_STRING_LENGTH,  "   %d. %s\n", j++, skill_data[talents[i]].skill_name);

    date = timestr(date);

    add_message ("Psi_talents", 2, "Server", date, ch->tname, "", buf, 0);
    add_message (ch->tname, 3, "Server", date, "Psionic Talents.", "", buf, 0);

    mem_free (date);
}