/************************************************ * Ïä·¤«¤±¤é¤ì¤¿»þ¤Î½èÍý ************************************************/ void NPC_PrintpassmanTalked( int meindex , int talkerindex , char *msg , int color ) { int i; int charnum; /* ¥×¥ì¥¤¥ä¡¼¤¬¥É¥¢¥Þ¥ó¤Î2¥°¥ê¥Ã¥É°ÊÆâ¤Ê¤éÈ¿±þ¤¹¤ë¡£ */ if(NPC_Util_CharDistance( talkerindex, meindex ) > 2)return; /* ¼«Ê¬ÍѤδÉÍý¿Í¤Î̾Á°¤ò¸¡º÷¤¹¤ë*/ charnum = CHAR_getCharNum(); for(i= CHAR_getPlayerMaxNum() +CHAR_getPetMaxNum(); i<charnum; i++){ if( CHAR_getCharUse(i) && CHAR_getInt( i ,CHAR_WHICHTYPE) == CHAR_TYPEROOMADMIN ){ if( strcmp( CHAR_getWorkChar(i,CHAR_WORKCHAR_MYNAME), CHAR_getWorkChar( meindex, CHAR_WORKCHAR_ADMNAME)) ==0 ) { break; } } } if( i < charnum ) { NPC_RoomAdminNew_DspRoomPasswd( meindex, i, talkerindex); } else { CHAR_talkToCli( talkerindex, meindex, "¡C¡C¡C", NPC_RANKING_MSGCOLOR); } }
/* * フロアを指定して、そのフロアにいるキャラ全員に同じメッセージ * を送信する関数。船面とかに使うのだ * * * * */ void NPC_Util_AnnounceFloor( int floorid , char *msg ) { int i; int charnum = CHAR_getCharNum(); for(i=0;i<charnum;i++){ if( CHAR_getCharUse(i) && CHAR_getInt( i , CHAR_WHICHTYPE) == CHAR_TYPEPLAYER && CHAR_getInt( i , CHAR_FLOOR ) == floorid ){ CHAR_talkToCli( i , -1 , msg , CHAR_COLORWHITE ); } } }
int NPC_DoorSearchByName( char *name ) { int i; int charnum = CHAR_getCharNum(); for(i= CHAR_getPlayerMaxNum() + CHAR_getPetMaxNum(); i<charnum; i++){ if( CHAR_getCharUse(i) && CHAR_getInt( i ,CHAR_WHICHTYPE) == CHAR_TYPEDOOR ){ if( strcmp( CHAR_getWorkChar(i,CHAR_WORKDOORNAME),name)==0 ){ return i; } } } return -1; }
int NPC_DoorSearchByPosition( int fl , int x, int y ) { int i; int charnum = CHAR_getCharNum(); for(i=CHAR_getPlayerMaxNum() + CHAR_getPetMaxNum(); i<charnum; i++) { if( CHAR_getCharUse(i) && CHAR_getInt( i , CHAR_WHICHTYPE) == CHAR_TYPEDOOR && CHAR_getInt( i , CHAR_FLOOR ) == fl && CHAR_getInt( i , CHAR_X ) == x && CHAR_getInt( i , CHAR_Y ) == y ){ return i; } } return -1; }
void NPC_findRacePetIndex(int meindex, int floor) { int i = 0, j = 0; time_t t1; time(&t1); if (CHAR_getWorkInt(meindex, NPC_WORK_FINDPETFLAG) == 0) { for (i = 0; i < CHAR_getCharNum(); i++) { if (CHAR_getInt(i, CHAR_FLOOR) == floor) { if (CHAR_getInt(i, CHAR_WHICHTYPE) == CHAR_PETRACEPET) { for (j = 0; j < PETRACEPETNUM; j++) { if (CHAR_getWorkInt(meindex, NPC_WORK_PET1 + j) == 0) { CHAR_setWorkInt(meindex, NPC_WORK_PET1 + j, i); CHAR_setWorkInt(i, CHAR_NPCWORKINT2, meindex); break; } } } } } if (CHAR_getWorkInt(meindex, NPC_WORK_PET1) > 0 && CHAR_getWorkInt(meindex, NPC_WORK_PET2) > 0 && CHAR_getWorkInt(meindex, NPC_WORK_PET3) > 0) { CHAR_setWorkInt(meindex, NPC_WORK_FINDPETFLAG, 1); CHAR_setWorkInt(meindex, NPC_WORK_STATE, NPC_State_WaitDropStake); CHAR_setInt(meindex, CHAR_LOOPINTERVAL, PETRACEMASTER_WAITDROPI_LOOPTIME); CHAR_setWorkInt(meindex, NPC_WORK_STATECHANGE, t1 + PETRACEDROPSTAKETIME); } else CHAR_setWorkInt(meindex, NPC_WORK_FINDPETFLAG, 0); } }
/*----------------------------------------------- * ¼¡¤Î¥ª¡¼¥¯¥·¥ç¥ó¤Î»þ´Ö¤ÈÉô²°Ì¾¤ò¥ï¡¼¥¯¤Ë¥»¥Ã¥È¤¹¤ë *----------------------------------------------*/ static BOOL NPC_RoomAdminNew_SetNextAuction( int meindex) { int i, j; int hitindex = -1; int charnum = CHAR_getCharNum(); char argstr[NPC_UTIL_GETARGSTR_BUFSIZE]; struct tm tmwk; /* ÍËÆü¤Ê¤É¤ò¼èÆÀ¤¹¤ë*/ memcpy( &tmwk, localtime( ( time_t *)&NowTime.tv_sec), sizeof( tmwk)); NPC_Util_GetArgStr( meindex, argstr, sizeof( argstr)); /* ¥É¥¢¤ò¸¡º÷¤¹¤ë¡£NPC_DoorSearchByName()¤ò»È¤Ã¤¿¤é³Ú¤À¤±¤É * ̵Â̤¬Â¿¤¯¤Ê¤ê¤½¤¦¤Ê¤Î¤Ç¤³¤³¥ª¥ê¥¸¥Ê¥ë */ for( i = CHAR_getPlayerMaxNum()+ CHAR_getPetMaxNum(); i < charnum; i ++ ) { if( CHAR_getInt( i, CHAR_WHICHTYPE) != CHAR_TYPEDOOR) { continue; } if( CHAR_getWorkInt( i, CHAR_WORKDOORPASSFLG) == 0 ) { continue; } /* ̾Á°¤¬´É³í¤Î¤â¤Î¤«¥Á¥§¥Ã¥¯¤¹¤ë */ for( j = 3; ; j ++ ) { int rc; char *doorname; char buf[256]; int dataexist; NPC_ROOMINFO data; rc = getStringFromIndexWithDelim( argstr, "|" , j, buf,sizeof(buf) ); if( rc != TRUE ) { break; } doorname = CHAR_getWorkChar( i, CHAR_WORKDOORNAME); /* ¥É¥¢Ì¾¤¬°ìÃפ·¤¿ */ if( strcmp( buf, doorname ) != 0 ) { continue; } /* ÍËÆü¤¬°ìÃפ¹¤ë */ if( atoi( CHAR_getWorkChar( i, CHAR_WORKDOORWEEK)) != tmwk.tm_wday) { break; } /* °ì±þ½é´ü²½ */ memset( &data, 0, sizeof( data)); /* ¥Ç¡¼¥¿¥Õ¥¡¥¤¥ë¤«¤é¥Ç¡¼¥¿¤òÆɤà */ if( NPC_RoomAdminNew_ReadFile( doorname, &data) ) { struct tm tmdoor; /* ¤³¤³¤Ç´ü¸ÂÀÚ¤ì¥Á¥§¥Ã¥¯¤ò¤ä¤Ã¤Æ¤ä¤ë¡£ * ´ü¸Â¤¬ÀÚ¤ì¤Æ¤¤¤¿¤é¥Õ¥¡¥¤¥ë¤òºï½ü¤¹¤ë * »ÅÍÍŪ¤Ë¤¢¤Þ¤ê¤³¤Î¥ë¡¼¥Á¥óÄ̤ë»ö¤Ï¤Ê¤¤¤È»×¤¦¡£ */ if( data.expire < NowTime.tv_sec) { NPC_RoomAdminNew_WriteDataFile( meindex, -1,doorname, NULL, 0); /* ¥É¥¢¤â¤¤ì¤¤¤Ë*/ NPC_DoorSetPasswd( i, "8hda8iauia90494jasd9asodfasdf89"); CHAR_setWorkInt( i, CHAR_WORKDOOREXPIRETIME, 0xffffffff); break; } /* º£Æü¤ÇÀÚ¤ì¤ëʪ·ï¤Ê¤é£Ï£Ë */ memcpy( &tmdoor, localtime( ( time_t *)&data.expire), sizeof( tmdoor)); if( tmdoor.tm_mon != tmwk.tm_mon || tmdoor.tm_mday != tmwk.tm_mday) { break; } dataexist = TRUE; } else { dataexist = FALSE; } /* ¸½ºß¤Î»þ´Ö¤è¤ê¸å¤Ç¤¢¤ë»ö¡£ */ if( tmwk.tm_hour > atoi( CHAR_getWorkChar( i, CHAR_WORKDOORHOUR))){ break; } if( tmwk.tm_hour == atoi( CHAR_getWorkChar( i, CHAR_WORKDOORHOUR))) { if( tmwk.tm_min >= atoi( CHAR_getWorkChar( i, CHAR_WORKDOORMINUTE))) { break; } } /* ¤³¤³¤Þ¤Ç¤¤¿¤é¤È¤ê¤¢¤¨¤º¤³¤Î¥É¥¢¤Ï¼¡³«ºÅ¤Ë½Ð¤ë»ñ³Ê¤¬ * ¤¢¤ë¤È¤¤¤¦»ö¡£¤³¤ì¤«¤é¾¤Î¥É¥¢¤È¥Á¥§¥Ã¥¯¤¹¤ë¡£ */ if( hitindex == -1 ) { hitindex = i; } else { /* ³«ºÅ»þ´Ö¤¬Á᤯¡¤¸½ºß¼Ú¤ê¤é¤ì¤Æ¤¤¤ë¤È¤¤¤¦¤Î¤¬Í¥Àè½ç°Ì */ if( atoi( CHAR_getWorkChar( hitindex, CHAR_WORKDOORHOUR)) > atoi( CHAR_getWorkChar( i, CHAR_WORKDOORHOUR))) { hitindex = i; } else if( atoi( CHAR_getWorkChar( hitindex, CHAR_WORKDOORHOUR)) == atoi( CHAR_getWorkChar( i, CHAR_WORKDOORHOUR))) { if( atoi( CHAR_getWorkChar( hitindex, CHAR_WORKDOORMINUTE)) > atoi( CHAR_getWorkChar( i, CHAR_WORKDOORMINUTE))) { hitindex = i; } else if( atoi( CHAR_getWorkChar( hitindex, CHAR_WORKDOORMINUTE)) == atoi( CHAR_getWorkChar( i, CHAR_WORKDOORMINUTE))) { NPC_ROOMINFO datawk; int hitindexdataexist; hitindexdataexist = NPC_RoomAdminNew_ReadFile( CHAR_getWorkChar( hitindex, CHAR_WORKDOORNAME), &datawk); if( hitindexdataexist < dataexist ) { hitindex = i; } /* ¤³¤³¤Þ¤ÇÍè¤ë¤è¤¦¤Ê¤éÀè¤Îindex¤Î¤Þ¤Þ¤È¤¹¤ë¡£*/ } } } } } if( hitindex > 0 ) { /* ³«ºÅ»þ´Ö¤ò¥»¥Ã¥È */ tmwk.tm_sec = 0; tmwk.tm_min = atoi( CHAR_getWorkChar( hitindex, CHAR_WORKDOORMINUTE)); tmwk.tm_hour = atoi( CHAR_getWorkChar( hitindex, CHAR_WORKDOORHOUR)); CHAR_setWorkInt( meindex, CHAR_WORKINT_NEXTTIME, mktime( &tmwk)); /* Éô²°Ì¾¤ò¥»¥Ã¥È */ CHAR_setWorkChar( meindex, CHAR_WORKCHAR_NEXTROOM, CHAR_getWorkChar( hitindex, CHAR_WORKDOORNAME)); } else { CHAR_setWorkInt( meindex, CHAR_WORKINT_NEXTTIME, 0); /* Éô²°Ì¾¤ò¥»¥Ã¥È */ CHAR_setWorkChar( meindex, CHAR_WORKCHAR_NEXTROOM,"" ); } /* ¸¡º÷»þ´Ö¤ò¥»¥Ã¥È */ CHAR_setWorkInt( meindex, CHAR_WORKINT_SEARCHROOMTIME, NowTime.tv_sec); return( TRUE); }