亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? wsckcomm.c

?? MUD服務器程序
?? C
?? 第 1 頁 / 共 5 頁
字號:

#ifdef RACES
	strcpy( buf, "Select a race [" );
	for ( iRace = 0; iRace < MAX_RACE; iRace++ )
	{
	    if ( iRace > 0 )
		strcat( buf, " " );
	    strcat( buf, race_table[iRace].who_name );
	}
	strcat( buf, "]: " );
	write_to_buffer( d, buf, 0 );
	d->connected = CON_GET_NEW_RACE;
	break;

    case CON_GET_NEW_RACE:
	for ( iRace = 0; iRace < MAX_RACE; iRace++ )
	{
	    if ( !str_cmp( argument, race_table[iRace].who_name ) )
	    {
		ch->race = iRace;
		break;
	    }
	}

	if ( iRace == MAX_RACE )
	{
	    write_to_buffer( d,
		"That's not a race.\n\rWhat IS your race? ", 0 );
	    return;
	}
#endif
	strcpy( buf, "Select a class [" );
	for ( iClass = 0; iClass < MAX_CLASS; iClass++ )
	{
	    if ( iClass > 0 )
		strcat( buf, " " );
	    strcat( buf, class_table[iClass].who_name );
	}
	strcat( buf, "]: " );
	write_to_buffer( d, buf, 0 );

	d->connected = CON_GET_NEW_CLASS;
	break;

    case CON_GET_NEW_CLASS:
	for ( iClass = 0; iClass < MAX_CLASS; iClass++ )
	{
	    if ( !str_cmp( argument, class_table[iClass].who_name ) )
	    {
		ch->class = iClass;
		break;
	    }
	}

	if ( iClass == MAX_CLASS )
	{
	    write_to_buffer( d,
		"That's not a class.\n\rWhat IS your class? ", 0 );
	    return;
	}

	sprintf( log_buf, "%s@%s new player.", ch->name, d->host );
	log_string( log_buf );
	write_to_buffer( d, "\n\r", 2 );
	ch->pcdata->pagelen = 20;
	ch->prompt = "<%hhp %mm %vmv> ";
	do_help( ch, "motd" );
	d->connected = CON_READ_MOTD;
	break;

    case CON_READ_MOTD:
	ch->next	= char_list;
	char_list	= ch;
	d->connected	= CON_PLAYING;

	send_to_char(
    "\n\rWelcome to Merc Diku Mud.  May your visit here be ... Mercenary.\n\r",
	    ch );

	if ( ch->level == 0 )
	{
	    OBJ_DATA *obj;

	    switch ( class_table[ch->class].attr_prime )
	    {
	    case APPLY_STR: ch->pcdata->perm_str = 16; break;
	    case APPLY_INT: ch->pcdata->perm_int = 16; break;
	    case APPLY_WIS: ch->pcdata->perm_wis = 16; break;
	    case APPLY_DEX: ch->pcdata->perm_dex = 16; break;
	    case APPLY_CON: ch->pcdata->perm_con = 16; break;
	    }

#ifdef RACES
       ch->pcdata->perm_str += race_table[ch->race].mod_str;
       ch->pcdata->perm_int += race_table[ch->race].mod_int;
       ch->pcdata->perm_wis += race_table[ch->race].mod_wis;
       ch->pcdata->perm_dex += race_table[ch->race].mod_dex;
       ch->pcdata->perm_con += race_table[ch->race].mod_con;
#endif

	    ch->level	= 1;
	    ch->exp	= 1000;
	    ch->hit	= ch->max_hit;
	    ch->mana	= ch->max_mana;
	    ch->move	= ch->max_move;
#ifdef RACES
       ch->affected_by = race_table[ch->race].bitvector;
#else
       ch->affected_by = 0;
#endif
	    sprintf( buf, "the %s",
		title_table [ch->class] [ch->level]
		[ch->sex == SEX_FEMALE ? 1 : 0] );
	    set_title( ch, buf );

	    obj = create_object( get_obj_index(OBJ_VNUM_SCHOOL_BANNER), 0 );
	    obj_to_char( obj, ch );
	    equip_char( ch, obj, WEAR_LIGHT );

	    obj = create_object( get_obj_index(OBJ_VNUM_SCHOOL_VEST), 0 );
	    obj_to_char( obj, ch );
	    equip_char( ch, obj, WEAR_BODY );

	    obj = create_object( get_obj_index(OBJ_VNUM_SCHOOL_SHIELD), 0 );
	    obj_to_char( obj, ch );
	    equip_char( ch, obj, WEAR_SHIELD );

	    obj = create_object( get_obj_index(class_table[ch->class].weapon),
		0 );
	    obj_to_char( obj, ch );
	    equip_char( ch, obj, WEAR_WIELD );

	    char_to_room( ch, get_room_index( ROOM_VNUM_SCHOOL ) );
	}
	else if ( ch->in_room != NULL )
	{
	    char_to_room( ch, ch->in_room );
	}
	else if ( IS_IMMORTAL(ch) )
	{
	    char_to_room( ch, get_room_index( ROOM_VNUM_CHAT ) );
	}
	else
	{
#ifdef RACES
	    char_to_room( ch, get_room_index( race_table[ch->race].city_temple ) );
#else
	    char_to_room( ch, get_room_index( ROOM_VNUM_TEMPLE ) );
#endif
	}

	act( "$n has entered the game.", ch, NULL, NULL, TO_ROOM );
	do_look( ch, "auto" );
	/* check for new notes */
	notes = 0;

	for ( pnote = note_list; pnote != NULL; pnote = pnote->next )
	    if ( is_note_to( ch, pnote ) && str_cmp( ch->name, pnote->sender )
		&& pnote->date_stamp > ch->last_note )
	        notes++;

	if ( notes == 1 )
	    send_to_char( "\n\rYou have one new note waiting.\n\r", ch );
	else
	    if ( notes > 1 )
	    {
		sprintf( buf, "\n\rYou have %d new notes waiting.\n\r",
			notes );
		send_to_char( buf, ch );
	    }

	break;
    }

    return;
}



/*
 * Parse a name for acceptability.
 */
bool check_parse_name( char *name )
{
    /*
     * Reserved words.
     */
    if ( is_name( name, "all auto immortal self someone" ) )
	return FALSE;

    /*
     * Length restrictions.
     */
    if ( strlen(name) <  3 )
	return FALSE;

#if defined(MSDOS)
    if ( strlen(name) >  8 )
	return FALSE;
#endif

#if defined(macintosh) || defined(unix)
    if ( strlen(name) > 12 )
	return FALSE;
#endif

    /*
     * Alphanumerics only.
     * Lock out IllIll twits.
     */
    {
	char *pc;
	bool fIll;

	fIll = TRUE;
	for ( pc = name; *pc != '\0'; pc++ )
	{
	    if ( !isalpha(*pc) )
		return FALSE;
	    if ( LOWER(*pc) != 'i' && LOWER(*pc) != 'l' )
		fIll = FALSE;
	}

	if ( fIll )
	    return FALSE;
    }

    /*
     * Prevent players from naming themselves after mobs.
     */
    {
	extern MOB_INDEX_DATA *mob_index_hash[MAX_KEY_HASH];
	MOB_INDEX_DATA *pMobIndex;
	int iHash;

	for ( iHash = 0; iHash < MAX_KEY_HASH; iHash++ )
	{
	    for ( pMobIndex  = mob_index_hash[iHash];
		  pMobIndex != NULL;
		  pMobIndex  = pMobIndex->next )
	    {
		if ( is_name( name, pMobIndex->player_name ) )
		    return FALSE;
	    }
	}
    }

    return TRUE;
}



/*
 * Look for link-dead player to reconnect.
 */
bool check_reconnect( DESCRIPTOR_DATA *d, char *name, bool fConn )
{
    CHAR_DATA *ch;
    OBJ_DATA *obj;

    for ( ch = char_list; ch != NULL; ch = ch->next )
    {
	if ( !IS_NPC(ch)
	&& ( !fConn || ch->desc == NULL )
	&&   !str_cmp( d->character->name, ch->name ) )
	{
	    if ( fConn == FALSE )
	    {
		free_string( d->character->pcdata->pwd );
		d->character->pcdata->pwd = str_dup( ch->pcdata->pwd );
	    }
	    else
	    {
		free_char( d->character );
		d->character = ch;
		ch->desc	 = d;
		ch->timer	 = 0;
		send_to_char( "Reconnecting.\n\r", ch );
		act( "$n has reconnected.", ch, NULL, NULL, TO_ROOM );
		sprintf( log_buf, "%s@%s reconnected.", ch->name, d->host );
		log_string( log_buf );
		d->connected = CON_PLAYING;

		/*
		 * Contributed by Gene Choi
		 */
		if ( ( obj = get_eq_char( ch, WEAR_LIGHT ) ) != NULL
		    && obj->item_type == ITEM_LIGHT
		    && obj->value[2] != 0
		    && ch->in_room != NULL )
		    ++ch->in_room->light;
	    }
	    return TRUE;
	}
    }

    return FALSE;
}



/*
 * Check if already playing.
 */
bool check_playing( DESCRIPTOR_DATA *d, char *name )
{
    DESCRIPTOR_DATA *dold;

    for ( dold = descriptor_list; dold; dold = dold->next )
    {
	if ( dold != d
	&&   dold->character != NULL
	&&   dold->connected != CON_GET_NAME
	&&   dold->connected != CON_GET_OLD_PASSWORD
	&&   !str_cmp( name, dold->original
	         ? dold->original->name : dold->character->name ) )
	{
	    write_to_buffer( d, "Already playing.\n\rName: ", 0 );
	    d->connected = CON_GET_NAME;
	    if ( d->character != NULL )
	    {
		free_char( d->character );
		d->character = NULL;
	    }
	    return TRUE;
	}
    }

    return FALSE;
}



void stop_idling( CHAR_DATA *ch )
{
    if ( ch == NULL
    ||   ch->desc == NULL
    ||   ch->desc->connected != CON_PLAYING
    ||   ch->was_in_room == NULL
    ||   ch->in_room != get_room_index( ROOM_VNUM_LIMBO ) )
	return;

    ch->timer = 0;
    char_from_room( ch );
    char_to_room( ch, ch->was_in_room );
    ch->was_in_room	= NULL;
    act( "$n has returned from the void.", ch, NULL, NULL, TO_ROOM );
    return;
}

/*
 * Low level output function.
 */
bool process_output( DESCRIPTOR_DATA *d, bool fPrompt )
{
    extern bool merc_down;

    /*
     * Bust a prompt.
     */
    if ( fPrompt && !merc_down && d->connected == CON_PLAYING )
        if ( d->showstr_point )
	    write_to_buffer( d,
  "[Please type (c)ontinue, (r)efresh, (b)ack, (h)elp, (q)uit, or RETURN]:  ",
			    0 );
	else
	{
	    CHAR_DATA *ch;

	    ch = d->original ? d->original : d->character;
	    if ( IS_SET(ch->act, PLR_BLANK) )
	        write_to_buffer( d, "\n\r", 2 );

	    if ( IS_SET(ch->act, PLR_PROMPT) )
//	        bust_a_prompt( ch );
	        bust_a_prompt( d );

	    if ( IS_SET(ch->act, PLR_TELNET_GA) )
	        write_to_buffer( d, go_ahead_str, 0 );
	}

    /*
     * Short-circuit if nothing to write.
     */
    if ( d->outtop == 0 )
	return TRUE;

    /*
     * Snoop-o-rama.
     */
    if ( d->snoop_by != NULL )
    {
	write_to_buffer( d->snoop_by, "% ", 2 );
	write_to_buffer( d->snoop_by, d->outbuf, d->outtop );
    }

#if 0
    /*
     * OS-dependent output.
     */
    if ( !write_to_descriptor( d->descriptor, d->outbuf, d->outtop ) )
    {
	d->outtop = 0;
	return FALSE;
    }
    else
    {
	d->outtop = 0;
	return TRUE;
    }
#endif
   // Wake up Winsock, if necessary
    if (!BlastedTrumpet(d->descriptor))
       {
		 if ( d->character != NULL )
		    save_char_obj( d->character );
		 d->outtop	= 0;
		 close_socket( d );
       return FALSE;
       }
   return TRUE;
}

/*
 * Bust a prompt (player settable prompt)
 * coded by Morgenes for Aldara Mud
 */
//void bust_a_prompt( CHAR_DATA *ch )
void bust_a_prompt( DESCRIPTOR_DATA *d )
{
   char buf[MAX_STRING_LENGTH];
   char buf2[MAX_STRING_LENGTH];
   const char *str;
   const char *i;
   char *point;
   CHAR_DATA *ch;
   CHAR_DATA *victim;

   ch = d->character;

   if( ch->prompt == NULL || ch->prompt[0] == '\0' )
   {
      send_to_char( "\n\r\n\r", ch );
      return;
   }

   point = buf;
 //  str = ch->prompt;
   str = d->original != NULL ? d->original->prompt :  /* VERY VERY NEW */
         d->character->prompt;
   while( *str != '\0' )
   {
      if( *str != '%' )
      {
         *point++ = *str++;
         continue;
      }
      ++str;
      switch( *str )
      {
         default :
            i = " "; break;
         case 'h' :
            sprintf( buf2, "%d", ch->hit );
            i = buf2; break;
         case 'H' :
            sprintf( buf2, "%d", ch->max_hit );
            i = buf2; break;
         case 'm' :
            sprintf( buf2, "%d", ch->mana );
            i = buf2; break;
         case 'M' :
            sprintf( buf2, "%d", ch->max_mana );
            i = buf2; break;
         case 'v' :
            sprintf( buf2, "%d", ch->move );
            i = buf2; break;
         case 'V' :
            sprintf( buf2, "%d", ch->max_move );
            i = buf2; break;

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
视频一区二区欧美| 国产精品家庭影院| 日韩不卡手机在线v区| 91精品婷婷国产综合久久竹菊| 五月激情综合网| 日韩一级片网址| 国产盗摄精品一区二区三区在线| 中文字幕国产一区二区| 色婷婷精品大视频在线蜜桃视频| 亚洲永久精品大片| 精品久久人人做人人爽| 成人黄色软件下载| 亚洲综合视频网| 精品国产乱码久久久久久久| 国产在线视视频有精品| 国产精品国产自产拍在线| 欧美午夜免费电影| 韩国av一区二区三区四区| 国产精品无码永久免费888| 色悠悠亚洲一区二区| 日本色综合中文字幕| 国产欧美一区视频| 欧美日韩成人高清| 国产成+人+日韩+欧美+亚洲| 亚洲国产婷婷综合在线精品| 久久一夜天堂av一区二区三区 | 国产精品久久久久一区二区三区共| 99久久er热在这里只有精品15 | 欧美在线播放高清精品| 精品亚洲国内自在自线福利| 成人免费视频在线观看| 欧美一级欧美三级在线观看| 成人精品国产福利| 奇米影视在线99精品| 国产精品美女久久久久久久| 欧美日韩午夜在线视频| 国产成人av一区二区三区在线 | 极品少妇一区二区| 亚洲精品成人天堂一二三| 精品福利一区二区三区| 欧美三级在线看| 成人免费看黄yyy456| 免费观看在线综合| 亚洲第一精品在线| 亚洲欧美综合另类在线卡通| 精品精品欲导航| 欧美精品久久99久久在免费线 | 日韩欧美的一区| 欧美在线免费观看视频| 成人爱爱电影网址| 九色|91porny| 日韩经典中文字幕一区| 亚洲欧美激情插| 中文字幕不卡三区| 欧美成人高清电影在线| 337p亚洲精品色噜噜狠狠| 在线亚洲高清视频| www.亚洲人| 成人精品国产福利| 国产精品18久久久久久久久| 麻豆成人综合网| 午夜国产精品影院在线观看| 一区二区在线电影| 亚洲码国产岛国毛片在线| 亚洲国产精品v| 亚洲国产电影在线观看| 久久精品视频免费| 久久久久久一二三区| 欧美精品一区二区三区在线 | 精品成a人在线观看| 欧美一区二区视频免费观看| 欧美日本国产一区| 欧美系列一区二区| 欧美系列亚洲系列| 欧美日韩精品欧美日韩精品一综合| 一本一本久久a久久精品综合麻豆 一本一道波多野结衣一区二区 | 精品88久久久久88久久久| 日韩一级高清毛片| 日韩欧美一区中文| www国产精品av| 久久久.com| 中文字幕在线不卡视频| 自拍偷拍亚洲综合| 亚洲电影在线免费观看| 亚洲成国产人片在线观看| 日日夜夜精品免费视频| 日本三级亚洲精品| 国产风韵犹存在线视精品| 国产盗摄精品一区二区三区在线 | 五月天激情综合网| 奇米精品一区二区三区在线观看| 日本一不卡视频| 国产自产高清不卡| 成人a级免费电影| 欧美综合视频在线观看| 欧美一级高清片在线观看| 精品99久久久久久| 综合自拍亚洲综合图不卡区| 一区二区三区欧美亚洲| 日本伊人色综合网| 国产精品66部| 欧美少妇性性性| 欧美mv和日韩mv的网站| 国产精品国产成人国产三级 | 激情伊人五月天久久综合| 国产福利91精品一区二区三区| 色综合久久综合网欧美综合网| 欧美天堂亚洲电影院在线播放| 欧美大度的电影原声| 国产精品天美传媒沈樵| 亚洲国产成人av网| 国产一区二区91| 一本一本久久a久久精品综合麻豆 一本一道波多野结衣一区二区 | 中文字幕一区二区在线播放| 亚洲成人综合网站| 国产一区二区三区免费| 在线一区二区三区四区| 欧美xxxxx裸体时装秀| 1024亚洲合集| 精品亚洲国产成人av制服丝袜 | 精品免费视频.| 一区二区三区精品久久久| 国精品**一区二区三区在线蜜桃| 99精品黄色片免费大全| 精品少妇一区二区三区在线视频| 一区在线观看视频| 国内精品伊人久久久久影院对白| 色网站国产精品| 久久久久久综合| 日韩电影在线观看一区| 一本大道综合伊人精品热热| 日韩精品综合一本久道在线视频| 亚洲人妖av一区二区| 国产美女视频91| 欧美男同性恋视频网站| 综合久久国产九一剧情麻豆| 久久激情五月婷婷| 欧美高清视频一二三区 | 久久久综合网站| 天堂一区二区在线| 色老汉一区二区三区| 欧美极品xxx| 国产一区二区女| 精品美女在线观看| 日韩精品一级二级| 欧美系列日韩一区| 亚洲综合精品自拍| 一本色道a无线码一区v| 国产精品麻豆视频| 成人毛片老司机大片| 久久天天做天天爱综合色| 蜜桃久久久久久久| 91精品国产综合久久久蜜臀图片| 亚洲国产精品久久不卡毛片| 色婷婷av一区二区三区软件| 国产精品蜜臀av| 成人在线一区二区三区| 国产亚洲精品久| 国产精品12区| 国产精品视频麻豆| 成人激情小说乱人伦| 18欧美乱大交hd1984| 99麻豆久久久国产精品免费优播| 亚洲国产精品成人综合| 成人sese在线| 亚洲欧美国产毛片在线| 欧洲国内综合视频| 午夜久久久久久久久久一区二区| 欧美视频完全免费看| 天堂av在线一区| 91精品国产综合久久香蕉麻豆| 蜜臀av一区二区| 久久亚洲综合色| 国产成人在线网站| 国产精品天天摸av网| 一本一本大道香蕉久在线精品| 亚洲免费观看高清完整版在线| 91色乱码一区二区三区| 亚洲精品少妇30p| 欧美日韩国产另类一区| 日本v片在线高清不卡在线观看| 欧美一三区三区四区免费在线看 | 国产美女精品在线| 国产视频一区二区在线| yourporn久久国产精品| 亚洲国产日产av| 欧美成人r级一区二区三区| 国产在线播放一区三区四| 中文字幕一区二区三区蜜月| 欧美亚洲动漫精品| 青青草精品视频| 国产亚洲欧美日韩在线一区| 色综合久久中文综合久久牛| 亚洲mv大片欧洲mv大片精品| 精品久久久网站| 色综合久久中文综合久久牛| 秋霞国产午夜精品免费视频| 欧美高清在线一区二区| 欧美喷水一区二区| 国产99久久久久|