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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? wsckcomm.c

?? MUD服務(wù)器程序
?? C
?? 第 1 頁(yè) / 共 5 頁(yè)
字號(hào):
         case 'x' :
            sprintf( buf2, "%d", ch->exp );
            i = buf2; break;
         case 'g' :
            sprintf( buf2, "%d", ch->gold);
            i = buf2; break;
         case 'a' :
            if( ch->level < 5 )
               sprintf( buf2, "%d", ch->alignment );
            else
               sprintf( buf2, "%s", IS_GOOD(ch) ? "good" : IS_EVIL(ch) ?
                "evil" : "neutral" );
            i = buf2; break;
         case 'r' :
            if( ch->in_room != NULL )
               sprintf( buf2, "%s", ch->in_room->name );
            else
               sprintf( buf2, " " );
            i = buf2; break;
         case 'R' :
            if( IS_IMMORTAL( ch ) && ch->in_room != NULL )
               sprintf( buf2, "%d", ch->in_room->vnum );
            else
               sprintf( buf2, " " );
            i = buf2; break;
         case 'z' :
            if( IS_IMMORTAL( ch ) && ch->in_room != NULL )
               sprintf( buf2, "%s", ch->in_room->area->name );
            else
               sprintf( buf2, " " );
            i = buf2; break;
         case '%' :
            sprintf( buf2, "%%" );
            i = buf2; break;
      }
      ++str;
      while( (*point = *i) != '\0' )
         ++point, ++i;
   }
   
        /* battle prompt */
        if ((victim = ch->fighting) != NULL)

          {
            int percent;
            char wound[100];
            char buf[MAX_STRING_LENGTH];
 
            write_to_buffer( d, "\n\r", 0);
                if (victim->max_hit > 0)
                percent = victim->hit * 100 / victim->max_hit;
            else
                percent = -1;
 
            if (percent >= 100)
                sprintf(wound,"is in excellent condition.");
            else if (percent >= 90)
                sprintf(wound,"has a few scratches.");
            else if (percent >= 75)
                sprintf(wound,"has some small wounds and bruises.");
            else if (percent >= 50)
                sprintf(wound,"has quite a few wounds.");
            else if (percent >= 30)
                sprintf(wound,"has some big nasty wounds and scratches.");
            else if (percent >= 15)
                sprintf(wound,"looks pretty hurt.");
            else if (percent >= 0)
                sprintf(wound,"is in awful condition.");
            else
                sprintf(wound,"is bleeding to death.");
 
            sprintf(buf,"%s %s \n\r",
                    IS_NPC(victim) ? victim->short_descr : victim->name,wound);
            buf[0] = UPPER(buf[0]);
            write_to_buffer( d, buf, 0);
          }

   write_to_buffer( ch->desc, buf, point - buf );
   return;
}

/* The heart of the pager.  Thanks to N'Atas-Ha, ThePrincedom
   for porting this SillyMud code for MERC 2.0 and laying down the groundwork.
   Thanks to Blackstar, hopper.cs.uiowa.edu 4000 for which
   the improvements to the pager was modeled from.  - Kahn */

void show_string(struct descriptor_data *d, char *input)
{
  char buffer[ MAX_STRING_LENGTH ];
  char buf[ MAX_INPUT_LENGTH ];
  register char *scan, *chk;
  int lines /*= 0*/, toggle=1;

  one_argument(input, buf);

  switch( UPPER( buf[0] ) )
  {
  case '\0':
  case 'C': /* show next page of text */
    lines = 0;
    break;

  case 'R': /* refresh current page of text */
    lines = - 1 - (d->character->pcdata->pagelen);
    break;

  case 'B': /* scroll back a page of text */
    lines = -(2*d->character->pcdata->pagelen);
    break;

  case 'H': /* Show some help */
    write_to_buffer( d,
        "C, or Return = continue, R = redraw this page,\n\r", 0 );
    write_to_buffer( d,
        "B = back one page, H = this help, Q or other keys = exit.\n\r\n\r",
		    0 );
    lines = - 1 - (d->character->pcdata->pagelen);
    break;

  default: /*otherwise, stop the text viewing */
    // @@@ Sands had some changes here that lead to double freeing
    if ( d->showstr_head )
    {
      free_string( d->showstr_head );
//      d->showstr_head = str_dup( "" );
      d->showstr_head = 0;
    }
//    free_string( d->showstr_point );
//    d->showstr_point = str_dup( "" );
    d->showstr_point = 0;
    return;

  }

  /* do any backing up necessary */
  if (lines < 0)
  {
    for ( scan = d->showstr_point; scan > d->showstr_head; scan-- )
         if ( ( *scan == '\n' ) || ( *scan == '\r' ) )
	 {
	     toggle = -toggle;
	     if ( toggle < 0 )
	         if ( !( ++lines ) )
		     break;
	 }
    d->showstr_point = scan;
  }

  /* show a chunk */
  lines  = 0;
  toggle = 1;
  for ( scan = buffer; ; scan++, d->showstr_point++ )
       if ( ( ( *scan = *d->showstr_point ) == '\n' || *scan == '\r' )
	   && ( toggle = -toggle ) < 0 )
	   lines++;
       else
	   if ( !*scan || ( d->character && !IS_NPC( d->character )
			  && lines >= d->character->pcdata->pagelen) )
	   {

	       *scan = '\0';
	       write_to_buffer( d, buffer, strlen( buffer ) );

	     /* See if this is the end (or near the end) of the string */
	       for ( chk = d->showstr_point; isspace( *chk ); chk++ );
	       if ( !*chk )
	       {
		   if ( d->showstr_head )
		   {
		      free_string( d->showstr_head );
		      d->showstr_head  = 0;
		   }
		   d->showstr_point = 0;
	       }
	       return;
	   }

//@@@  return;
}

SOCKET init_socket( int port )
{
   // Assume there aren't any sockets
//@@@   fSockets = FALSE;
    static struct sockaddr_in sa_zero;
    struct sockaddr_in sa;
    SOCKET newsock;
    int x = 1;

#if 0
   WORD wVersionRequested = MAKEWORD( 1, 1 );

   WSADATA wsaData;
   int err = WSAStartup( wVersionRequested, &wsaData );
   if ( err != 0 ) {
      MessageBox(0, "No useable WINSOCK.DLL, not loading sockets", "Serv",
         MB_ICONHAND|MB_OK);

      return INVALID_SOCKET;
      }

   /* Confirm that the Windows Sockets DLL supports 1.1.*/
   /* Note that if the DLL supports versions greater    */
   /* than 1.1 in addition to 1.1, it will still return */
   /* 1.1 in wVersion since that is the version we      */
   /* requested.                                        */

   if ( LOBYTE( wsaData.wVersion ) != 1 ||
         HIBYTE( wsaData.wVersion ) != 1 ) {
      /* Tell the user that we couldn't find a useable */
      /* winsock.dll.                                  */
      WSACleanup( );
      MessageBox(0, "Windows sockets version not 1.1, not loading sockets", "Serv",
         MB_ICONHAND|MB_OK);

      return INVALID_SOCKET;
      }

   /* Make sure that the version requested is >= 1.1.   */
   /* The low byte is the major version and the high    */
   /* byte is the minor version.                        */

   if ( LOBYTE( wVersionRequested ) < 1 ||
        ( LOBYTE( wVersionRequested ) == 1 &&
          HIBYTE( wVersionRequested ) < 1 )) {
      MessageBox(0, "Windows sockets version not 1.1, not loading sockets", "Serv",
         MB_ICONHAND|MB_OK);

       return INVALID_SOCKET;
   }

   /* Since we only support 1.1, set both wVersion and  */
   /* wHighVersion to 1.1.                              */

   wsaData.wVersion = MAKEWORD( 1, 1 );
   wsaData.wHighVersion = MAKEWORD( 1, 1 );
#endif
//   fSockets = TRUE;


    if ( ( newsock = socket( PF_INET, SOCK_STREAM, 0 ) ) == INVALID_SOCKET )
       {
	    MessageBox(0, "Init_socket: socket", __FILE__, MB_OK);
	    return INVALID_SOCKET;
       }

    if ( setsockopt( newsock, SOL_SOCKET, SO_REUSEADDR, (char *) &x, sizeof(x) )
             == SOCKET_ERROR )
       {
	    MessageBox(0, "Init_socket: SO_REUSEADDR", __FILE__, MB_OK);
       closesocket(newsock);
       return INVALID_SOCKET;
       }

#if 0
    {
   struct	linger	ld;

	ld.l_onoff  = 1;
	ld.l_linger = 1000;

	if ( setsockopt( fd, SOL_SOCKET, SO_DONTLINGER, (char *) &ld, sizeof(ld) ) < 0 )
	{
	    MessageBox(0, 0, "Init_socket: SO_DONTLINGER", __FILE__, MB_OK );
	    closesocket( fd );
	    return INVALID_SOCKET;
	}
    }
#endif

    sa		    = sa_zero;
    sa.sin_family   = AF_INET;
    sa.sin_port	    = htons( port );

    if ( bind( newsock, (struct sockaddr *) &sa, sizeof(sa) ) == SOCKET_ERROR )
    {
	MessageBox(0, "Init_socket: bind", __FILE__, MB_OK );
	closesocket( newsock );
	return INVALID_SOCKET;
    }

    if ( listen( newsock, 3 ) == SOCKET_ERROR )
    {
	MessageBox(0, "Init_socket: listen", __FILE__, MB_OK );
	closesocket( newsock );
	return INVALID_SOCKET;
    }

    return newsock;
}

LRESULT SocketAccept (WPARAM wParam, LPARAM lParam)
{
    static DESCRIPTOR_DATA d_zero;
      SOCKET	sSocket;
	   SOCKADDR_IN	saPeer;
	   int		iAddrSize;
//	   int		iError;
		char     buf[512];
         DESCRIPTOR_DATA *dnew;

	switch(WSAGETSELECTEVENT(lParam))
		{
      default:
         MessageBeep(-1);
         break;

		case FD_ACCEPT:
		   {
//			LPSOCKADDR_IN	lpsaHostAddr;
//         LPHOSTENT	   lpheHostEnt;

//      	struct sockaddr_in isa;
//      	int i = sizeof(isa);
//       	getsockname(s, &isa, &i);
         struct sockaddr_in sock;
         int size = sizeof(sock);

//         MessageBeep(-1);

			/* Get a pending accept */
			iAddrSize = sizeof(SOCKADDR_IN);
			sSocket = accept( control, (LPSOCKADDR) &saPeer, (LPINT) &iAddrSize );
			if ( sSocket == INVALID_SOCKET )
			   {
//            MessageBox(0, "Couldn't accept() connection.", "Serv",
//               MB_ICONHAND|MB_OK);
            log_string("Couldn't accept() connection");
				return FALSE;
			   }

         // Cons a new descriptor.
         if ( descriptor_free )
            {
            dnew = descriptor_free;
            descriptor_free = descriptor_free->next;
            dnew->descriptor = sSocket;
            }
         else
         	dnew = alloc_perm( sizeof(*dnew) );

         *dnew		= d_zero;
         dnew->descriptor	= sSocket;
         dnew->connected	= CON_GET_NAME;
         dnew->showstr_head  = NULL;
         dnew->showstr_point = NULL;
         dnew->outsize	= 2000;
         dnew->outbuf	= alloc_mem( dnew->outsize );
         dnew->host_and_name = alloc_mem( sizeof *dnew->host_and_name );
         strcpy(dnew->host_and_name->username, "<waiting>");

         if ( getpeername( sSocket, (struct sockaddr *) &sock, &size ) == SOCKET_ERROR )
            {
#if 1
            wsprintf(buf, "new_descriptor(): getpeername() == %d",
               WSAGetLastError());
            log_string( buf );
#else
            log_string("New_descriptor: getpeername");
#endif
         	dnew->host = str_dup( "(unknown)" );
            }
         else
            {
            int ulen = sizeof dnew->host_and_name->us;

            // Get the caller's machine in quad format
            u_long addr = ntohl( sock.sin_addr.s_addr );
            struct hostent *from;
            wsprintf( buf, "%d.%d.%d.%d",
               ( addr >> 24 ) & 0xFF, ( addr >> 16 ) & 0xFF,
               ( addr >>  8 ) & 0xFF, ( addr       ) & 0xFF);
            wsprintf( log_buf, "Sock.sinaddr:  %s", buf );
            log_string( log_buf );

            // Request the name of the caller's machine from DNS
            dnew->host = str_dup( buf );
            dnew->host_and_name->sin_addr = sock.sin_addr;
            dnew->host_and_name->hRequestHandle = WSAAsyncGetHostByAddr( hQryDlgBox,
               WM_NET_GETHOST, (LPSTR) &dnew->host_and_name->sin_addr, sizeof dnew->host_and_name->sin_addr,
               PF_INET, dnew->host_and_name->hostdata, sizeof dnew->host_and_name->hostdata);

            // Look up the local name for this socket
            if (getsockname(sSocket, (struct sockaddr *)&dnew->host_and_name->us, &ulen) ==
                                                                 SOCKET_ERROR)
               {
               wsprintf(dnew->host_and_name->username, "(getsockname)#%d", WSAGetLastError());
               goto failure;
               }

            // Create a socket to connect to the user's ident port
            if ((dnew->host_and_name->sAuth = socket(PF_INET, SOCK_STREAM, AF_UNSPEC)) ==
                                                               INVALID_SOCKET)
               {
               wsprintf(dnew->host_and_name->username, "(socket)#%d", WSAGetLastError());
               goto failure;
               }

            // Save the address of their side of the socket
            dnew->host_and_name->them = sock;

            // htons convers a u_short from host to network byte order. 113 is
            //  the auth socket
            dnew->host_and_name->authsock.sin_port = htons(113);
            // Use Internet protocol
            dnew->host_and_name->authsock.sin_family = AF_INET;
            // Look up the other end of our socket
            dnew->host_and_name->authsock.sin_addr = sock.sin_addr;

            WSAAsyncSelect(dnew->host_and_name->sAuth, hQryDlgBox, WM_NET_AUTHCONNECT,
               FD_CONNECT|FD_READ|FD_WRITE);
            if (connect(dnew->host_and_name->sAuth, (struct sockaddr *)&dnew->host_and_name->authsock,
                                       sizeof(dnew->host_and_name->authsock)) == SOCKET_ERROR)
               {
               int nError = WSAGetLastError();
               if (nError != WSAEWOULDBLOCK)
                  {
                  wsprintf(dnew->host_and_name->username, "(connect)#%d", nError);
                  goto failure;
                  }
               }

            }
failure:

         // Init descriptor data.
         dnew->next	= descriptor_list;
         descriptor_list = dnew;
         nPlayers++;

			// OK now get messages from this socket
         BlastedTrumpet(sSocket);

         // Send the greeting.
         {
      	extern char * help_greeting;
      	if ( help_greeting[0] == '.' )
     	    write_to_buffer( dnew, help_greeting+1, 0 );
      	else
   	    write_to_buffer( dnew, help_greeting  , 0 );
         }
		   } // FD_ACCEPT
		}

   return FALSE;
}

LRESULT SocketReadWrite (WPARAM wParam, LPARAM lParam)
{
	SOCKET	sSocket = (SOCKET) wParam;
//	SOCKADDR_IN	saPeer;
//	int		iAddrSize;
//	int		iError;
//   char     szBuffer[64];
//   int      len;

	switch(WSAGETSELECTEVENT(lParam))
    	{
      default:
         MessageBeep(-1);
         break;

		case FD_READ:	// WinSock has something for us
		   {
	      // Find the descriptor for this FD_READ
         DESCRIPTOR_DATA *d;
         for (d = descriptor_list; d; d = d_next )
            {
            d_next = d->next;

            if (d->descriptor == sSocket)
               {
               d->fcommand	= FALSE;

               if ( d->character != NULL )
                  d->character->timer = 0;

               if ( !read_from_descriptor( d ) )
            		{
//@@@Dunno what this does?                  FD_CLR( d->descriptor, 

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
成人av在线播放网址| 精品一区二区三区蜜桃| 久久色在线视频| 在线成人午夜影院| 欧美午夜片在线看| 欧美日韩国产乱码电影| 欧美精品日韩一本| 欧美一激情一区二区三区| 欧美一卡2卡三卡4卡5免费| 91精品国产综合久久福利软件| 欧美日韩在线精品一区二区三区激情| 欧美吞精做爰啪啪高潮| 欧美日韩国产小视频在线观看| 欧美午夜片在线看| 日韩亚洲欧美在线| www国产精品av| 欧美国产丝袜视频| 亚洲日本免费电影| 午夜伦理一区二区| 美洲天堂一区二卡三卡四卡视频| 美女国产一区二区三区| 国产精品18久久久久久久久 | 亚洲欧美色综合| 亚洲免费成人av| 日韩高清欧美激情| 国产一区二区在线免费观看| 成人av网站在线观看免费| 欧洲亚洲国产日韩| 亚洲精品一区二区三区香蕉| 国产欧美一区在线| 亚洲电影视频在线| 韩国成人精品a∨在线观看| 成人av网在线| 日韩一二在线观看| 国产精品久久久久一区| 天天综合网天天综合色| 粉嫩av亚洲一区二区图片| 欧美最猛黑人xxxxx猛交| 日韩精品中文字幕在线一区| 亚洲欧美影音先锋| 九九视频精品免费| 色就色 综合激情| 久久日韩粉嫩一区二区三区 | 91精品国产91久久综合桃花| 国产欧美日韩精品在线| 婷婷综合另类小说色区| 色哟哟精品一区| 日韩欧美二区三区| 亚洲一区电影777| 成人国产精品免费观看动漫| 欧美高清视频一二三区| 亚洲欧美激情一区二区| 国产在线一区观看| 91精品麻豆日日躁夜夜躁| 亚洲人成伊人成综合网小说| 精品一区二区三区在线播放视频| 色婷婷综合久久久| 中文字幕亚洲电影| 国产精品一区2区| 日韩三级av在线播放| 亚洲一区二区三区激情| 91首页免费视频| 国产亚洲精品资源在线26u| 日本强好片久久久久久aaa| 91国偷自产一区二区三区成为亚洲经典| 久久九九久久九九| 国产综合色产在线精品| 7777精品伊人久久久大香线蕉最新版 | 555www色欧美视频| 亚洲精品日日夜夜| 91丝袜呻吟高潮美腿白嫩在线观看| 久久久三级国产网站| 加勒比av一区二区| 日韩一区二区免费电影| 天天爽夜夜爽夜夜爽精品视频| 欧洲国产伦久久久久久久| 亚洲综合久久久久| 99国产精品一区| 国产精品成人一区二区三区夜夜夜| 国产精品一区二区三区乱码| 日韩欧美资源站| 久久国产精品99精品国产| 精品国产乱码91久久久久久网站| 蜜臀精品久久久久久蜜臀| 欧美一区二区视频观看视频| 美女网站在线免费欧美精品| 欧美tickling网站挠脚心| 精品一区二区av| 亚洲视频一区二区免费在线观看| 国产成人aaa| **欧美大码日韩| 欧美日韩在线三级| 精品在线观看免费| 国产精品色眯眯| 91黄色激情网站| 日韩在线卡一卡二| 精品国产髙清在线看国产毛片| 国产一区二区精品久久91| 中文字幕欧美激情| 日本韩国欧美一区二区三区| 日本在线不卡一区| 国产精品天干天干在线综合| 91久久奴性调教| 日韩电影一二三区| 亚洲国产成人在线| 欧美揉bbbbb揉bbbbb| 加勒比av一区二区| 伊人性伊人情综合网| 日韩你懂的在线观看| 91在线国产福利| 日本欧美在线观看| 中文字幕一区免费在线观看| 欧美熟乱第一页| 成人国产视频在线观看| 日日摸夜夜添夜夜添国产精品| 精品美女一区二区三区| 日本伦理一区二区| 成人影视亚洲图片在线| 日韩福利电影在线| 亚洲三级在线观看| www欧美成人18+| 欧美美女直播网站| 成人18视频日本| 久久99久久99精品免视看婷婷 | 亚洲国产精品一区二区尤物区| 欧美一三区三区四区免费在线看 | 7777精品伊人久久久大香线蕉超级流畅 | 亚洲人被黑人高潮完整版| 日韩欧美一区二区不卡| 欧美婷婷六月丁香综合色| 成人黄动漫网站免费app| 美女被吸乳得到大胸91| 亚洲r级在线视频| 亚洲免费在线视频| 国产拍欧美日韩视频二区| 精品国产凹凸成av人网站| 欧美日本一道本| 在线国产亚洲欧美| 91首页免费视频| 91在线视频免费观看| 不卡电影一区二区三区| 91丝袜美腿高跟国产极品老师 | 91同城在线观看| 成人avav在线| 国产成人av一区二区三区在线| 免费高清视频精品| 视频一区在线播放| www.亚洲色图| 欧美日韩免费一区二区三区视频| 日韩电影免费一区| 国内精品伊人久久久久影院对白| 国内外成人在线| 亚洲精品高清视频在线观看| 久久影院电视剧免费观看| 91精品国产综合久久精品app| 欧美主播一区二区三区| 91网站最新网址| 色哟哟精品一区| 欧美日韩情趣电影| 欧美一级免费观看| 日韩欧美视频在线| 精品久久国产老人久久综合| 日韩欧美资源站| 国产精品视频第一区| √…a在线天堂一区| 亚洲午夜免费电影| 欧美aaaaa成人免费观看视频| 性久久久久久久久| 久久国产乱子精品免费女| 国产精品亚洲午夜一区二区三区| 国产**成人网毛片九色| 97se亚洲国产综合自在线不卡| 91日韩在线专区| 欧美人妖巨大在线| 久久一区二区三区四区| 国产精品久久久久久福利一牛影视| 亚洲另类在线一区| 日本视频一区二区| 国产91精品一区二区| 色琪琪一区二区三区亚洲区| 777a∨成人精品桃花网| 国产亚洲欧美中文| 一区二区免费在线播放| 看片网站欧美日韩| 成人一级片网址| 欧美日韩中字一区| 国产欧美日韩在线| 亚洲成人福利片| 国产成人高清视频| 欧美三区在线观看| 国产女人18毛片水真多成人如厕| 亚洲丝袜制服诱惑| 日韩精品国产精品| 99久久99久久综合| 精品国产一区a| 亚洲成a人v欧美综合天堂下载| 国产在线精品一区二区不卡了| 99精品国产热久久91蜜凸| 欧美r级电影在线观看| 一区二区三区在线视频免费|