Пример #1
0
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);
}
Пример #2
0
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;

}
Пример #3
0
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;

}
Пример #4
0
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;
}
Пример #5
0
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;
}
Пример #6
0
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 */

}
Пример #7
0
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;
}
Пример #8
0
static void
have_special(void)
	{
	if (Char == '\n')
		outchar('\n');
	else
	if (!isspace(Char))
		dmk_say_ascii(Char);

	new_char();
	return;
	}
Пример #9
0
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)));
}
Пример #10
0
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;
}
Пример #11
0
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;
}
Пример #12
0
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);
}
Пример #13
0
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);
	}
}
Пример #14
0
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;
}
Пример #15
0
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;
}