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); }
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; }
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); }
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); }
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); }