/*----------------------------------------------- * ¼¡²ó³«ºÅ»þ´Ö¡¤Éô²°¤ò¸À¤¦ *----------------------------------------------*/ static void NPC_RoomAdminNew_DspNextAuction( int meindex, int talkerindex) { char msgbuf[2048]; time_t closetime; closetime = CHAR_getWorkInt( meindex, CHAR_WORKINT_NEXTTIME); /* ¼¡¤Î³«ºÅ»þ´Ö¤¬·è¤Þ¤Ã¤Æ¤¤¤Ê¤±¤ì¤Ð¡Ö·è¤Þ¤Ã¤Æ¤Þ¤»¤ó¡£¡×¥á¥Ã¥»¡¼¥¸*/ if( closetime == 0 ) { snprintf( msgbuf, sizeof( msgbuf), NPC_ROOMADMINNEW_MSG_DSPNEXTAUCTION_NONE ); CHAR_talkToCli( talkerindex, meindex,msgbuf, NPC_ROOMADMINNEW_MSGCOLOR); } else { int doorindex; char argstr[NPC_UTIL_GETARGSTR_BUFSIZE]; char explain[1024]; /*ÀâÌÀ*/ char buff[16]; struct tm tmwk; int difftime; /* Éô²°¾ðÊó¤ò¼èÆÀ */ doorindex = NPC_DoorSearchByName( CHAR_getWorkChar( meindex, CHAR_WORKCHAR_NEXTROOM)); NPC_Util_GetArgStr( doorindex, argstr, sizeof( argstr)); getStringFromIndexWithDelim(argstr, "|" , 9 , explain,sizeof(explain)); /* Éô²°¾ðÊó*/ if( strlen(CHAR_getChar( doorindex, CHAR_NAME) ) != 0 ) { strcpy( buff, "¸¹«Ç"); } else { buff[0] = '\0'; } snprintf( msgbuf, sizeof( msgbuf), NPC_ROOMADMINNEW_MSG_DSPNEXTAUCTION1, explain, CHAR_getChar( doorindex, CHAR_NAME), buff ); CHAR_talkToCli( talkerindex, meindex,msgbuf, NPC_ROOMADMINNEW_MSGCOLOR); /* Äù¤áÀÚ¤ê»þ´Ö */ memcpy( &tmwk, localtime( &closetime), sizeof( tmwk)); difftime = closetime - NowTime.tv_sec; snprintf( msgbuf, sizeof( msgbuf), NPC_ROOMADMINNEW_MSG_DSPNEXTAUCTION2, tmwk.tm_hour, tmwk.tm_min, difftime / 3600, (difftime % 3600) / 60 ); CHAR_talkToCli( talkerindex, meindex,msgbuf, NPC_ROOMADMINNEW_MSGCOLOR); /* ²¼¸Â¶â³Û */ snprintf( msgbuf, sizeof( msgbuf), NPC_ROOMADMINNEW_MSG_DSPNEXTAUCTION3, CHAR_getWorkChar( doorindex, CHAR_WORKDOORGOLDLIMIT) ); CHAR_talkToCli( talkerindex, meindex,msgbuf, NPC_ROOMADMINNEW_MSGCOLOR); } }
/* * Á°¤Ç¸¡º÷¤·¤Æ¥Ò¥Ã¥È¤·¤¿¤Î¤ò¤¹¤Ù¤Æ³«¤¯¡e * */ static void NPC_DoormanOpenDoor( char *nm) { int doori = NPC_DoorSearchByName( nm ); print( "RINGO: Doorman's Door: index: %d\n", doori ); NPC_DoorOpen( doori , -1 ); }
/************************************************ * ½é´ü½èÍý ************************************************/ BOOL NPC_RoomAdminNewInit( int meindex ) { int i; char buf[256]; char argstr[NPC_UTIL_GETARGSTR_BUFSIZE]; /* ¼«Ê¬¤Î´É³í¤ÎÁ´Éô¤Î¥É¥¢¤¬½ÐÍè¾å¤¬¤ë¤Þ¤Ç¤³¤ÎNPC¤ÏºîÀ®¤µ¤ì¤Ê¤¤ */ for( i = 3; ; i ++ ) { if( getStringFromIndexWithDelim(argstr, "|" , i , buf,sizeof(buf) )) { if( NPC_DoorSearchByName( buf) < 0 ) { print( "admin not created.¦b±K½Xªù°µ¦n¤§«e¥ýµ¥«Ý¡C\n"); return FALSE; } } else{ break; } } NPC_Util_GetArgStr( meindex, argstr, sizeof( argstr)); /* ½é´ü²½½èÍý */ /* type¥»¥Ã¥È */ CHAR_setInt( meindex, CHAR_WHICHTYPE, CHAR_TYPEROOMADMIN); /* ͸úÈϰϼèÆÀ */ getStringFromIndexWithDelim(argstr, "|" , 1 , buf,sizeof(buf) ); CHAR_setWorkInt( meindex , CHAR_WORKINT_RANGE , atoi( buf )); /* ¼«Ê¬¤Î̾Á°¼èÆÀ */ if( !getStringFromIndexWithDelim(argstr, "|" , 2 , buf,sizeof(buf) )) { print( "arg err.admin not created.\n"); return( FALSE); } CHAR_setWorkChar( meindex , CHAR_WORKCHAR_MYNAME , buf); /* ɽ¼¨ÍÑ¡ÖÄùÀÚ¡©Ê¬Á°¡×½é´ü²½ */ CHAR_setWorkInt( meindex, CHAR_WORKINT_PRINTCLOSETIME, 0); /* ¼¡¤Îʪ·ï¤È¥ª¡¼¥¯¥·¥ç¥ó³«ºÅ»þ´Ö¤ò¥»¥Ã¥È */ NPC_RoomAdminNew_SetNextAuction( meindex); return TRUE; }
/*----------------------------------------------- * Ïä·¤«¤±¤é¤ì¤¿¿Í¤¬Éô²°¤ò¼Ú¤ê¤Æ¤¤¤¿¤é¥Ñ¥¹¥ï¡¼¥É¤òɽ¼¨¤¹¤ë *----------------------------------------------*/ static void NPC_RoomAdminNew_DspRoomPasswd( int index, int adminindex, int talkerindex) { int i, rc, flg = FALSE; char argstr[NPC_UTIL_GETARGSTR_BUFSIZE]; char argstr2[NPC_UTIL_GETARGSTR_BUFSIZE]; char *cdkey; char buf[128]; char buff[16]; char buf2[1024]; NPC_ROOMINFO info; //getcdkeyFromCharaIndex( talkerindex, cdkey, sizeof(cdkey)); cdkey = CHAR_getChar( talkerindex, CHAR_CDKEY); NPC_Util_GetArgStr( adminindex, argstr, sizeof( argstr)); for( i = 3; ; i ++ ) { if( getStringFromIndexWithDelim(argstr, "|" , i , buf,sizeof(buf) )) { rc = NPC_RoomAdminNew_ReadFile( buf, &info); if( rc == TRUE ) { /* CDKEY ¤È¥¥ã¥é¤Î̾Á°¤¬°ìÃפ·¤¿¤é */ if( strcmp( info.cdkey, cdkey) == 0 && strcmp( info.charaname, CHAR_getChar( talkerindex, CHAR_NAME)) == 0 ) { int doorindex; char msgbuf[256]; /* Éô²°¾ðÊó¼èÆÀ */ doorindex = NPC_DoorSearchByName( buf); NPC_Util_GetArgStr( doorindex, argstr2, sizeof( argstr2)); getStringFromIndexWithDelim( argstr2, "|" , 9 , buf2,sizeof(buf2) ); /* Éô²°¾ðÊó*/ if( strlen(CHAR_getChar( doorindex, CHAR_NAME) ) != 0 ) { strcpy( buff, "¸¹«Ç"); } else { buff[0] = '\0'; } /* ¥á¥Ã¥»¡¼¥¸¥»¥Ã¥È */ snprintf( msgbuf, sizeof( msgbuf), NPC_ROOMADMINNEW_MSG_DSPPASSWD1, buf2, CHAR_getChar( doorindex, CHAR_NAME), buff ); /* ¥á¥Ã¥»¡¼¥¸Á÷¿® */ CHAR_talkToCli( talkerindex, index,msgbuf, NPC_ROOMADMINNEW_MSGCOLOR); /* ¥á¥Ã¥»¡¼¥¸¥»¥Ã¥È */ snprintf( msgbuf, sizeof( msgbuf), NPC_ROOMADMINNEW_MSG_DSPPASSWD2, CHAR_getWorkChar(doorindex, CHAR_WORKDOORPASSWD) ); /* ¥á¥Ã¥»¡¼¥¸Á÷¿® */ CHAR_talkToCli( talkerindex, index,msgbuf, NPC_ROOMADMINNEW_MSGCOLOR); flg = TRUE; } } } else { break; } } if( !flg) { CHAR_talkToCli( talkerindex, index, NPC_ROOMADMINNEW_MSG_PRINTPASSWD_NONE, NPC_ROOMADMINNEW_MSGCOLOR); } }
/*----------------------------------------------- * °ìÈÖ¤ª¶â¤ò¿¤¯»ý¤Ã¤Æ¤¤¤ë¥×¥ì¥¤¥ä¡¼¤òõ¤¹ *----------------------------------------------*/ static int NPC_RoomAdminNew_SearchPlayerHasMostMoney( int meindex) { int i,j, range; int fl,x,y, gold; int doorindex; int topindex; fl = CHAR_getInt( meindex, CHAR_FLOOR); x = CHAR_getInt( meindex, CHAR_X); y = CHAR_getInt( meindex, CHAR_Y); range = CHAR_getWorkInt( meindex , CHAR_WORKINT_RANGE); topindex = -1; /* Éô²°¤Î̾Á°¤«¤éºÇÄãÍ¶â³Û¤òÄ´¤Ù¤ë */ doorindex = NPC_DoorSearchByName( CHAR_getWorkChar( meindex, CHAR_WORKCHAR_NEXTROOM)); gold = atoi( CHAR_getWorkChar( doorindex, CHAR_WORKDOORGOLDLIMIT)); /* ÈÏ°ÏÆâ¤Ë¤¤¤ë¥¥ã¥é¤Î¿ô¤òÄ´¤Ù¤ë */ for( i = x-range ; i <= x+range ; i++ ){ for( j = y-range ; j <= y+range ; j ++ ){ OBJECT object; for( object = MAP_getTopObj( fl, i,j); object; object = NEXT_OBJECT(object) ) { int objindex = GET_OBJINDEX( object); if( OBJECT_getType(objindex) == OBJTYPE_CHARA ){ int index; index = OBJECT_getIndex(objindex); if( CHAR_getInt( index, CHAR_WHICHTYPE ) == CHAR_TYPEPLAYER ) { if( CHAR_getInt( index, CHAR_GOLD) >= gold ) { if( topindex == -1 ) { topindex = index; } else { /* ¥È¥Ã¥×¤Î¿Í¤È¤ª¶âÈæ³Ó */ int nowgold,topgold; nowgold = CHAR_getInt( index, CHAR_GOLD ); topgold = CHAR_getInt( topindex, CHAR_GOLD); if( nowgold > topgold ) { topindex = index; } else if( nowgold == topgold ) { /* °ì½ï¤Ê¤é¥ì¥Ù¥ë¤¬Ä㤤¿Í */ int nowlv, toplv; nowlv = CHAR_getInt( index, CHAR_LV ); toplv = CHAR_getInt( topindex, CHAR_LV); if( nowlv < toplv ) { topindex = index; } /* ¤½¤ì¤Ç¤â²ò·è¤·¤Ê¤¤¤ó¤Ê¤é¥é¥ó¥À¥à¤¸¤ã*/ /* index¤¬Àè¤Î¿Í¤¬¤Á¤ç¤Ã¤ÈÉÔÍø¤À¤±¤É */ else if( nowlv == toplv ) { if( RAND( 0,1)) { topindex = index; } } } } } } } } } } return( topindex); }
/*----------------------------------------------- * Äù¤áÀÚ¤é¤ì¤¿»þ¤Î½èÍý *----------------------------------------------*/ static void NPC_RoomAdminNew_CloseProc( int meindex) { int pindex; char buff[256]; char pname[32]; int failed = TRUE; /* °ìÈÖ¤ª¶â¤ò¿¤¯»ý¤Ã¤Æ¤¤¤ë¥×¥ì¥¤¥ä¡¼¤òõ¤¹ */ pindex = NPC_RoomAdminNew_SearchPlayerHasMostMoney( meindex); /* ³ºÅö¼Ô¥¢¥ê */ if( pindex != -1) { /* £±²ó¤ÇÈ´¤±¤ë¥ë¡¼¥×¤Ç¤¹ */ while( 1) { char passwd[9]; int doorindex; doorindex = NPC_DoorSearchByName( CHAR_getWorkChar( meindex, CHAR_WORKCHAR_NEXTROOM)); /* ¥Ñ¥¹¥ï¡¼¥É¤òÀ¸À®¤¹¤ë */ NPC_RoomAdminNew_CreatePasswd( passwd, sizeof( passwd)); /* ¥Õ¥¡¥¤¥ë¤Ë¤³¤Î¿Í¤Î£Ã£Ä¥¡¼¡¤¥¥ã¥é̾¡¤Éô²°Ì¾¡¤¥Ñ¥¹¤ò½ñ¤¹þ¤à */ if( NPC_RoomAdminNew_WriteDataFile( meindex, pindex, CHAR_getWorkChar( meindex, CHAR_WORKCHAR_NEXTROOM), passwd, 1) == FALSE) { break; } /* ¥É¥¢¤Ë¥Ñ¥¹¤ò¥»¥Ã¥È */ if( NPC_DoorSetPasswd( doorindex, passwd) == -1 ) { break; } /* ͸ú´ü¸Â¤ò¥»¥Ã¥È */ CHAR_setWorkInt( doorindex, CHAR_WORKDOOREXPIRETIME, CHAR_getWorkInt( meindex, CHAR_WORKINT_NEXTTIME) + NPC_ROOMADMINNEW_2WEEK); /* Í¼Ô¥é¥ó¥¥ó¥°¥Á¥§¥Ã¥¯¡õ¥Õ¥¡¥¤¥ë½ñ¤¹þ¤ß */ NPC_RoomAdminNew_WriteScoreFile( meindex, pindex); CHAR_setInt( pindex, CHAR_GOLD, 0); CHAR_send_P_StatusString( pindex , CHAR_P_STRING_GOLD); /* ¤ª¤á¤Ç¤È¤¦¡ª¥á¥Ã¥»¡¼¥¸ */ strcpy( pname, CHAR_getChar( pindex, CHAR_NAME)); snprintf( buff, sizeof(buff), NPC_ROOMADMINNEW_MSG_CONGRATULATION, pname, pname, pname); failed = FALSE; break; } } /* ³ºÅö¼Ô¥Ê¥·¤Þ¤¿¤Ï½èÍý¼ºÇԤλþ */ if( failed) { /* ¥Õ¥¡¥¤¥ë¤«¤é¤³¤ÎÉô²°¤Î¾ðÊó¤ò¾Ã¤¹ */ NPC_RoomAdminNew_WriteDataFile( meindex, -1, CHAR_getWorkChar( meindex, CHAR_WORKCHAR_NEXTROOM), NULL, 0); /* ³ºÅö¼Ô¤Ï¤¤¤Þ¤»¤ó¥á¥Ã¥»¡¼¥¸ */ snprintf( buff, sizeof(buff), NPC_ROOMADMINNEW_MSG_NONE); } /* ¤³¤Î¥Õ¥í¥¢¤Ë¤¤¤ë¿ÍÁ´°÷¤ËÁ÷¿® */ NPC_RoomAdminNew_SendMsgThisFloor( meindex, buff); /* ¼¡¤Îʪ·ï¤È¥ª¡¼¥¯¥·¥ç¥ó³«ºÅ»þ´Ö¤ò¥»¥Ã¥È */ NPC_RoomAdminNew_SetNextAuction( meindex); }
/************************************************ * ¥ë¡¼¥×½èÍý * ¸Æ¤Ó½Ð¤·ÉÑÅ٤Ϥ½¤ó¤Ê¤ËÉÑÈˤǤʤ¯¤Æ¤â¤¤¤¤¡£ * ¤Ç¤âÀäÂФˣ±Ê¬Ì¤Ëþ¤Ë¤¹¤ë»ö ************************************************/ void NPC_RoomAdminNewLoop( int meindex ) { int hun; /* ¤â¤·¤â³«ºÅ»þ´Ö¤¬·è¤Þ¤Ã¤Æ¤¤¤Ê¤«¤Ã¤¿¤é¼èÆÀ¤·¤Ê¤ª¤¹ */ if( CHAR_getWorkInt( meindex, CHAR_WORKINT_NEXTTIME) == 0 ) { /* Á°²ó¸¡º÷¤·¤¿Æü¤¬°ã¤¨¤Ð¸¡º÷¤·¤Ê¤ª¤¹ */ struct tm tm1,tm2; time_t t; memcpy( &tm1, localtime( (time_t *)&NowTime.tv_sec), sizeof( tm1)); t = CHAR_getWorkInt( meindex, CHAR_WORKINT_SEARCHROOMTIME); memcpy( &tm2, localtime( &t), sizeof( tm2)); if( tm1.tm_year != tm2.tm_year || tm1.tm_mday != tm2.tm_mday || tm1.tm_mon != tm2.tm_mon ) { NPC_RoomAdminNew_SetNextAuction( meindex); } return; } hun = ceil((double)(CHAR_getWorkInt( meindex, CHAR_WORKINT_NEXTTIME) - NowTime.tv_sec) / 60.0); /* ¤â¤·¤â¤Î»þ¤Î°Ù¤Ëhun¤¬¥Þ¥¤¥Ê¥¹¤Î»þ¤Ï£°¤ËÌ᤹ */ if( hun < 0 ) hun = 0; if( hun < NPC_ROOMADMINNEW_PRINTCLOSETIME_DEFAULT ) { /* Äù¤áÀÚ¤ê¶á¤¯¤Ë¤Ê¤Ã¤¿¤é¡ÖÄù¤áÀڤꡩʬÁ°¤Ç¤¹¡×¤È¸À¤ï¤¹ */ if( hun != CHAR_getWorkInt( meindex, CHAR_WORKINT_PRINTCLOSETIME)) { char buff[256]; if( hun != 0 ) { char buf2[1024]; char msgbuff[16]; char argstr2[NPC_UTIL_GETARGSTR_BUFSIZE]; int doorindex; /* Éô²°¾ðÊó¼èÆÀ */ doorindex = NPC_DoorSearchByName( CHAR_getWorkChar( meindex, CHAR_WORKCHAR_NEXTROOM)); NPC_Util_GetArgStr( doorindex, argstr2, sizeof( argstr2)); getStringFromIndexWithDelim( argstr2, "|" , 9 , buf2,sizeof(buf2) ); /* Éô²°¾ðÊó*/ if( strlen(CHAR_getChar( doorindex, CHAR_NAME) ) != 0 ) { strcpy( msgbuff, "¸¹«Ç"); } else { msgbuff[0] = '\0'; } /* ¡ÖÄù¤áÀڤꡩʬÁ°¤Ç¤¹¡× */ snprintf( buff, sizeof(buff), NPC_ROOMADMINNEW_MSG_CLOSE_BEFORE, buf2, CHAR_getChar( doorindex, CHAR_NAME), msgbuff, hun); CHAR_setWorkInt( meindex, CHAR_WORKINT_PRINTCLOSETIME, hun); } else { /* ¡ÖÄù¤áÀÚ¤ê¤Þ¤·¤¿¡× */ strcpy( buff, NPC_ROOMADMINNEW_MSG_CLOSE); CHAR_setWorkInt( meindex, CHAR_WORKINT_PRINTCLOSETIME, 0); } /* ¤³¤Î¥Õ¥í¥¢¤Ë¤¤¤ë¿ÍÁ´°÷¤ËÁ÷¿® */ NPC_RoomAdminNew_SendMsgThisFloor( meindex, buff); } } /* Äù¤áÀڤä¿»þ¤Î½èÍý */ if( hun == 0 ) { NPC_RoomAdminNew_CloseProc( meindex); } }