static void abbrev(char *buff) /* Handle abbreviations. Text in buff was followed by '.' */ { if (strcmp(buff, " DR ") == 0) { dmk_word(" DOCTOR "); new_char(); } else if (strcmp(buff, " MR ") == 0) { dmk_word(" MISTER "); new_char(); } else if (strcmp(buff, " MRS ") == 0) { dmk_word(" MISSUS "); new_char(); } else if (strcmp(buff, " PHD ") == 0) { dmk_spell_word(" PHD "); new_char(); } else dmk_word(buff); }
Character *load_player_by_name(Connection *conn, const char *name) { char buf[400]; sql_stmt *stmt; db_begin_transaction(); int len = sprintf(buf, "select * from character natural join player where name='%s'", escape_sql_str(name)); if (sql_query(buf, len, &stmt) != SQL_OK) { log_data("could not prepare sql statement"); return 0; } Character *ch = new_char(); ch->pc = new_player(conn); if (sql_step(stmt) != SQL_DONE) { load_player_columns(conn->account, ch, stmt); } if (sql_finalize(stmt) != SQL_OK) { log_data("unable to finalize statement"); } load_char_objs(ch); load_char_affects(ch); db_end_transaction(); return ch; }
Character *load_player_by_id(Connection *conn, identifier_t charId) { char buf[400]; sql_stmt *stmt; db_begin_transaction(); int len = sprintf(buf, "select * from character join player on playerId=characterId where characterId=%" PRId64, charId); if (sql_query(buf, len, &stmt) != SQL_OK) { log_data("could not prepare sql statement"); return 0; } Character *ch = new_char(); ch->pc = new_player(conn); if (sql_step(stmt) != SQL_DONE) { load_player_columns(conn->account, ch, stmt); } if (sql_finalize(stmt) != SQL_OK) { log_data("unable to finalize statement"); } load_char_objs(ch); load_char_affects(ch); db_end_transaction(); return ch; }
int load_npcs(Area *area) { char buf[400]; sql_stmt *stmt; int total = 0; int len = sprintf(buf, "select * from character natural join nonplayer where areaId=%" PRId64, area->id); if (sql_query(buf, len, &stmt) != SQL_OK) { log_data("could not prepare statement"); return 0; } while (sql_step(stmt) != SQL_DONE) { Character *ch = new_char(); ch->npc = new_npc(); ch->npc->area = area; load_npc_columns(ch, stmt); LINK(area->npcs, ch, next_in_area); LINK(first_character, ch, next); total++; } if (sql_finalize(stmt) != SQL_OK) { log_data("could not finalize statement"); } return total; }
Character *load_npc(identifier_t id) { char buf[400]; sql_stmt *stmt; Character *ch = 0; int len = sprintf(buf, "select * from character join nonplayer on nonplayerId=characterId where charId=%" PRId64, id); if (sql_query(buf, len, &stmt) != SQL_OK) { log_data("could not prepare statement"); return 0; } if (sql_step(stmt) != SQL_DONE) { ch = new_char(); ch->npc = new_npc(); load_npc_columns(ch, stmt); LINK(ch->npc->area->npcs, ch, next_in_area); LINK(first_character, ch, next); } if (sql_finalize(stmt) != SQL_OK) { log_data("could not finalize statement"); } return ch; }
static void have_letter(void) { char buff[MAX_LENGTH]; int count; count = 0; buff[count++] = ' '; /* Required initial blank */ buff[count++] = makeupper(Char); for (new_char() ; isalpha(Char) || Char == '\'' || Char == '_'; new_char()) { buff[count++] = makeupper(Char); if (count > MAX_LENGTH-2) { buff[count++] = ' '; buff[count++] = '\0'; dmk_word(buff); count = 1; } } buff[count++] = ' '; /* Required terminating blank */ buff[count++] = '\0'; /* Check for AAANNN type abbreviations */ if (isdigit(Char)) { dmk_spell_word(buff); return; } else if (strlen(buff) == 3) /* one character, two spaces */ dmk_say_ascii(buff[1]); else if (Char == '.') /* Possible abbreviation */ abbrev(buff); else dmk_word(buff); if (Char == '-' && isalpha(Char1)) new_char(); /* Skip hyphens */ }
cell_t *sexp_lexeme(secd_t *secd, int line, int pos, int prevchar) { cell_t *result; secd_parser_t p; init_parser(secd, &p); p.line = line; p.pos = pos; p.lc = prevchar; lexnext(&p); switch (p.token) { case TOK_EOF: return new_symbol(secd, EOF_OBJ); case TOK_SYM: result = new_lexeme(secd, "sym", new_symbol(secd, p.symtok)); break; case TOK_NUM: result = new_lexeme(secd, "int", new_number(secd, p.numtok)); break; case TOK_STR: result = new_lexeme(secd, "str", new_string(secd, strmem(p.strtok))); drop_cell(secd, p.strtok); break; case TOK_CHAR: result = new_lexeme(secd, "char", new_char(secd, p.numtok)); break; case TOK_QUOTE: case TOK_QQ: case TOK_UQ: case TOK_UQSPL: result = new_lexeme(secd, special_form_for(p.token), SECD_NIL); break; case TOK_ERR: result = new_lexeme(secd, "syntax error", SECD_NIL); break; default: result = new_lexeme(secd, "token", new_char(secd, p.token)); } cell_t *pcharc = new_cons(secd, new_char(secd, p.lc), result); cell_t *posc = new_cons(secd, new_number(secd, p.pos), pcharc); cell_t *linec = new_cons(secd, new_number(secd, p.line), posc); return linec; }
static void have_special(void) { if (Char == '\n') outchar('\n'); else if (!isspace(Char)) dmk_say_ascii(Char); new_char(); return; }
global Cell * read_stream(Cell *cell) { long c; c = cell->c_file == stdin ? get_one_char() : GetChar(cell->c_file); if (c == EOF) { end_stream(cell->c_file); return new_cnst(nil); } return new_cons(cons, new_pair(new_char((Char)c), new_stream(cell->c_file))); }
int epd_make_string(char *lexeme, char *lx_entry, size_t max_buf) /* Make up the textual lexical entry LX_ENTRY with maximum size MAX_BUF for string LEXEME. */ { char *map_buff; buff_in = lexeme; bin_idx = 0; bout_idx = 0; /* Prime the queue */ Char = '\n'; Char1 = '\n'; Char2 = '\n'; Char3 = '\n'; new_char(); /* Fill Char, Char1, Char2 and Char3 */ while (Char != EOF) { /* All of the words in the file */ if (isdigit(Char)) have_number(); else if (isalpha(Char) || Char == '\'') have_letter(); else if (Char == '$' && isdigit(Char1)) have_dollars(); else have_special(); } map_buff = dmk_map_phones(buff_out); if (map_buff[0]) sprintf(lx_entry, "%s", map_buff); else { fprintf(stderr, "WARNING: bogus dmakeup pronunciation (%s).\n", lexeme); sprintf(lx_entry, "%s", "_FAIL_"); } return 1; }
void do_finger( CHAR_DATA *ch, char *argument ) { char arg[MAX_INPUT_LENGTH]; char buf[MAX_STRING_LENGTH]; CHAR_DATA *victim; FILE *fp; bool fOld; one_argument( argument, arg ); if ( arg[0] == '\0' ) { send_to_char( "Finger whom?\n\r", ch ); return; } if ( ( victim = get_char_world( ch, arg ) ) != NULL) { if (!IS_NPC(victim)) { act( "$N is on right now!", ch, NULL, victim, TO_CHAR ); return; } } victim = new_char(); victim->pcdata = new_pcdata(); fOld = FALSE; sprintf( buf, "%s%s", PLAYER_DIR, capitalize( arg ) ); if ( ( fp = fopen( buf, "r" ) ) != NULL ) { int iNest; for ( iNest = 0; iNest < MAX_NEST; iNest++ ) rgObjNest[iNest] = NULL; fOld = TRUE; for ( ; ; ) { char letter; char *word; letter = fread_letter( fp ); if ( letter == '*' ) { fread_to_eol( fp ); continue; } if ( letter != '#' ) { bug( "Load_char_obj: # not found.", 0 ); break; } word = fread_word( fp ); if ( !str_cmp( word, "PLAYER" ) ) fread_char( victim, fp ); else if ( !str_cmp( word, "OBJECT" ) ) break; else if ( !str_cmp( word, "O" ) ) break; else if ( !str_cmp( word, "PET" ) ) break; else if ( !str_cmp( word, "END" ) ) break; else { bug( "Load_char_obj: bad section.", 0 ); break; } } fclose( fp ); } if ( !fOld ) { send_to_char("No player by that name exists.\n\r",ch); free_pcdata(victim->pcdata); free_char(victim); return; } if ( (victim->level > LEVEL_HERO) && (victim->level > ch->level) ) { send_to_char("The gods wouldn't like that.\n\r",ch); free_pcdata(victim->pcdata); free_char(victim); return; } sprintf(buf,"%s last logged off on %s", victim->name, (char *) ctime(&victim->llogoff)); send_to_char(buf,ch); free_pcdata(victim->pcdata); free_char(victim); return; }
static cell_t *read_token(secd_t *secd, secd_parser_t *p) { int tok; cell_t *inp = NULL; switch (tok = p->token) { case '(': ++p->nested; inp = read_list(secd, p); if (p->token != ')') goto error_exit; return inp; case TOK_NUM: return new_number(secd, p->numtok); case TOK_CHAR: return new_char(secd, p->numtok); case TOK_SYM: return new_symbol(secd, p->symtok); case TOK_STR: inp = new_string(secd, strmem(p->strtok)); drop_cell(secd, p->strtok); return inp; case TOK_EOF: return new_symbol(secd, EOF_OBJ); case TOK_QUOTE: case TOK_QQ: case TOK_UQ: case TOK_UQSPL: { const char *formname = special_form_for(tok); assert(formname, "No special form for token=%d\n", tok); inp = sexp_read(secd, p); assert_cell(inp, "sexp_read: reading subexpression failed"); return new_cons(secd, new_symbol(secd, formname), new_cons(secd, inp, SECD_NIL)); } case '#': switch (tok = lexnext(p)) { case '(': { cell_t *tmplist = read_list(secd, p); if (p->token != ')') { free_cell(secd, tmplist); goto error_exit; } inp = list_to_vector(secd, tmplist); free_cell(secd, tmplist); return inp; } case TOK_SYM: { if (p->symtok[0] == '.') { int op = secdop_by_name(p->symtok + 1); if (op < 0) goto error_exit; return new_op(secd, op); } if (str_eq(p->symtok, "u8")) { lexnext(p); inp = read_bytevector(p); if (p->token != ')') goto error_exit; return inp; } } } errorf("Unknown suffix for #\n"); } error_exit: if (inp) free_cell(secd, inp); errorf("read_token: failed\n"); return new_error(secd, SECD_NIL, "read_token: failed on token %1$d '%1$c'", p->token); }
void create_guest_avatar (DESCRIPTOR_DATA * d, char *argument) { CHAR_DATA *ch = NULL; char buf[MAX_STRING_LENGTH]; char buf2[MAX_STRING_LENGTH]; char account_name[MAX_STRING_LENGTH]; char tname_buf[MAX_STRING_LENGTH]; int roll, i = 1; extern int finished_booting; extern int guest_conns; if (!d) return; *buf = '\0'; *buf2 = '\0'; *account_name = '\0'; *tname_buf = '\0'; if (d->character) extract_char (d->character); sprintf (tname_buf, "%s-Guest", d->acct->name.c_str ()); d->character = new_char (1); //clear_char (d->character); d->character->deleted = 0; d->original = NULL; ch = d->character; ch->color = d->acct->color; d->character->pc->create_state = STATE_APPROVED; d->prompt_mode = 1; d->character->desc = d; d->character->pc->owner = d; d->character->pc->load_count = 1; roll = number (1, 11); if (roll == 1) ch->race = 0; else if (roll == 2) ch->race = 21; else if (roll == 3) ch->race = 16; else if (roll == 4) ch->race = 23; else if (roll == 5) ch->race = 120; else if (roll == 6) ch->race = 119; else if (roll == 7) ch->race = 89; else if (roll == 8) ch->race = 3; else if (roll == 9) ch->race = 28; else if (roll == 10) ch->race = 69; else if (roll == 11) ch->race = 64; else ch->race = 0; d->character->race = ch->race; d->character->flags |= FLAG_GUEST; /* Bestow the random traits to the new guest avatar */ randomize_mobile (ch); ch->pc->account_name = duplicateString (d->acct->name.c_str ()); if (is_guide (d->acct->name.c_str ())) ch->pc->is_guide = true; ch->fight_mode = 2; ch->clans = duplicateString (""); /* Address naming issues with our user's new account handle */ ch->tname = duplicateString (tname_buf); if (ch->pc->is_guide) sprintf (buf2, "%s Guide %s", ch->name, ch->tname); else sprintf (buf2, "%s %s", ch->name, ch->tname); if (ch->name) free_mem (ch->name); ch->name = duplicateString (buf2); ch->hit = 100; ch->max_hit = 100; ch->move = 100; ch->max_move = 100; if (d->character->race >= 0 && d->character->race <= 120) { for (i = 0; i <= MAX_SKILLS; i++) { d->character->skills[i] = 0; d->character->pc->skills[i] = 0; } //Get the native tongue of each race and cap it - Vader int native_tongue = get_native_tongue(ch); if (native_tongue) { ch->skills[native_tongue] = calc_lookup (ch, REG_CAP, native_tongue); ch->pc->skills[native_tongue] = calc_lookup (ch, REG_CAP, native_tongue); } ch->speaks = native_tongue; } guest_conns++; if (ch->description) free_mem (ch->description); if (ch->pc->is_guide) ch->description = duplicateString ("One of our friendly player #BGuides#0 is here, awaiting questions.\n"); else ch->description = duplicateString ("Another Guest is here, passing through. Be sure to welcome them!\n"); ch->plr_flags |= NEWBIE_HINTS; if (is_admin (ch->pc->account_name)) { ch->flags |= FLAG_ISADMIN; ch->flags |= FLAG_WIZNET; } else ch->flags &= ~FLAG_ISADMIN; if (ch->race != 89 && ch->race != 69 && ch->race != 64) equip_newbie (ch); else if (ch->race == 64) equip_char (ch, load_object (5261), WEAR_BODY); ch->hunger = -1; ch->thirst = -1; // If we're recreating, we're either recovering from a reboot or returning a dead // guest to the lounge, in which case we can skip a lot of this. pc_to_game (ch); char_to_room (ch, OOC_LOUNGE); if (str_cmp (argument, "recreate")) { act ("$n is incarnated in a soft glimmer of light.", true, d->character, 0, 0, TO_ROOM | _ACT_FORMAT); sprintf (buf, "%s [%s] has entered the lounge.", ch->tname, ch->desc->strClientHostname); send_to_gods (buf); d->connected = CON_PLYNG; guest_conns++; sprintf (buf, "%s has logged in from %s as %s.", char_short (d->character), d->strClientHostname, d->character->tname); *buf = toupper (*buf); system_log (buf, false); mysql_safe_query ("UPDATE newsletter_stats SET guest_logins=guest_logins+1"); do_look (ch, "", 0); } else { if (finished_booting) // Dead Guest being returned to the lounge. act ("$n appears in a sudden glimmer of light, looking slightly dazed.", true, ch, 0, 0, TO_ROOM | _ACT_FORMAT); act ("You feel your form briefly waver before it solidifies into yet another new guise, returned safely to the pleasant confines of Club Endore.", false, ch, 0, 0, TO_CHAR | _ACT_FORMAT); } }
static void have_number(void) { long int value; int lastdigit; value = Char - '0'; lastdigit = Char; for (new_char() ; isdigit(Char) ; new_char()) { value = 10 * value + (Char-'0'); lastdigit = Char; } /* Recognize ordinals based on last digit of number */ switch (lastdigit) { case '1': /* ST */ if (makeupper(Char) == 'S' && makeupper(Char1) == 'T' && !isalpha(Char2) && !isdigit(Char2)) { dmk_say_ordinal(value); new_char(); /* Used Char */ new_char(); /* Used Char1 */ return; } break; case '2': /* ND */ if (makeupper(Char) == 'N' && makeupper(Char1) == 'D' && !isalpha(Char2) && !isdigit(Char2)) { dmk_say_ordinal(value); new_char(); /* Used Char */ new_char(); /* Used Char1 */ return; } break; case '3': /* RD */ if (makeupper(Char) == 'R' && makeupper(Char1) == 'D' && !isalpha(Char2) && !isdigit(Char2)) { dmk_say_ordinal(value); new_char(); /* Used Char */ new_char(); /* Used Char1 */ return; } break; case '0': /* TH */ case '4': /* TH */ case '5': /* TH */ case '6': /* TH */ case '7': /* TH */ case '8': /* TH */ case '9': /* TH */ if (makeupper(Char) == 'T' && makeupper(Char1) == 'H' && !isalpha(Char2) && !isdigit(Char2)) { dmk_say_ordinal(value); new_char(); /* Used Char */ new_char(); /* Used Char1 */ return; } break; } dmk_say_cardinal(value); /* Recognize decimal points */ if (Char == '.' && isdigit(Char1)) { dmk_outstring("pOYnt "); for (new_char() ; isdigit(Char) ; new_char()) { dmk_say_ascii(Char); } } /* Spell out trailing abbreviations */ if (isalpha(Char)) { while (isalpha(Char)) { dmk_say_ascii(Char); new_char(); } } return; }
static void have_dollars(void) { long int value; value = 0L; for (new_char() ; isdigit(Char) || Char == ',' ; new_char()) { if (Char != ',') value = 10 * value + (Char-'0'); } dmk_say_cardinal(value); /* Say number of whole dollars */ /* Found a character that is a non-digit and non-comma */ /* Check for no decimal or no cents digits */ if (Char != '.' || !isdigit(Char1)) { if (value == 1L) dmk_outstring("dAAlER "); else dmk_outstring("dAAlERz "); return; } /* We have '.' followed by a digit */ new_char(); /* Skip the period */ /* If it is ".dd " say as " DOLLARS AND n CENTS " */ if (isdigit(Char1) && !isdigit(Char2)) { if (value == 1L) dmk_outstring("dAAlER "); else dmk_outstring("dAAlERz "); if (Char == '0' && Char1 == '0') { new_char(); /* Skip tens digit */ new_char(); /* Skip units digit */ return; } dmk_outstring("AEnd "); value = (Char-'0')*10 + Char1-'0'; dmk_say_cardinal(value); if (value == 1L) dmk_outstring("sEHnt "); else dmk_outstring("sEHnts "); new_char(); /* Used Char (tens digit) */ new_char(); /* Used Char1 (units digit) */ return; } /* Otherwise say as "n POINT ddd DOLLARS " */ dmk_outstring("pOYnt "); for ( ; isdigit(Char) ; new_char()) { dmk_say_ascii(Char); } dmk_outstring("dAAlERz "); return; }