/* * 玉失日仄中涩烂毛允月卞反}仇仇匹 * maxhp , maxmp , level , str , tough 毛0卞允月午方中[ * */ int NPC_DoorInit( int meindex ) { char arg[NPC_UTIL_GETARGSTR_BUFSIZE]; char settingdir[1024]; char buf[256]; NPC_Util_GetArgStr( meindex, arg, sizeof( arg)); CHAR_setWorkInt( meindex, CHAR_WORKEVENTTYPE,CHAR_EVENT_NPC); getStringFromIndexWithDelim(arg, "|" , 1 , buf,sizeof(buf) ); CHAR_setWorkInt( meindex , CHAR_WORKDOOROPENG , atoi( buf )); getStringFromIndexWithDelim(arg, "|" , 2 , buf,sizeof(buf) ); CHAR_setWorkInt( meindex , CHAR_WORKDOORCLOSEG , atoi( buf )); getStringFromIndexWithDelim(arg, "|" , 3 , buf,sizeof(buf) ); CHAR_setWorkChar( meindex , CHAR_WORKDOORNAME , buf ); strcpysafe( settingdir,sizeof( settingdir) , buf ); getStringFromIndexWithDelim(arg, "|" , 4 , buf,sizeof(buf) ); CHAR_setWorkInt( meindex , CHAR_WORKDOORSWITCHCOUNT , atoi( buf )); getStringFromIndexWithDelim(arg, "|" , 5 , buf,sizeof(buf) ); CHAR_setWorkInt( meindex , CHAR_WORKDOORCLOSETIME , atoi( buf )); CHAR_setInt( meindex , CHAR_MERCHANTLEVEL , atoi( buf )); getStringFromIndexWithDelim(arg, "|" , 6 , buf,sizeof(buf) ); CHAR_setWorkInt( meindex , CHAR_WORKDOORSOONFLG , atoi( buf )); getStringFromIndexWithDelim(arg, "|" , 7 , buf,sizeof(buf) ); CHAR_setWorkInt( meindex , CHAR_WORKDOORPASSFLG , atoi( buf )); CHAR_setWorkInt( meindex , CHAR_WORKDOORORIGINALGRAPHIC, CHAR_getInt( meindex,CHAR_BASEIMAGENUMBER )); CHAR_setInt( meindex, CHAR_LV, 0 ); if( getStringFromIndexWithDelim( arg , "|" , 8 , buf ,sizeof( buf ))){ if( strncmp( buf , "title" ,5 ) == 0 ){ print( "This is a title door:'%s'\n" , buf ); CHAR_setWorkInt( meindex , CHAR_WORKDOORPASSFLG ,0 ); CHAR_setWorkChar( meindex , CHAR_WORKDOORTITLE , buf ); CHAR_setInt( meindex, CHAR_LV, 1 ); } else if( isdigit( buf[0] )){ if( getStringFromIndexWithDelim(arg, "|" , 8 , buf,sizeof(buf) )) CHAR_setWorkChar( meindex, CHAR_WORKDOORGOLDLIMIT, buf); if( getStringFromIndexWithDelim(arg, "|" , 10 , buf,sizeof(buf) )) CHAR_setWorkChar( meindex, CHAR_WORKDOORWEEK, buf); if( getStringFromIndexWithDelim(arg, "|" , 11 , buf,sizeof(buf) )) CHAR_setWorkChar( meindex, CHAR_WORKDOORHOUR, buf); if( getStringFromIndexWithDelim(arg, "|" , 12 , buf,sizeof(buf) )) CHAR_setWorkChar( meindex, CHAR_WORKDOORMINUTE, buf); } } CHAR_setInt( meindex , CHAR_HP , 0 ); CHAR_setInt( meindex , CHAR_MP , 0 ); CHAR_setInt( meindex , CHAR_MAXMP , 0 ); CHAR_setInt( meindex , CHAR_STR , 0 ); CHAR_setInt( meindex , CHAR_TOUGH, 0 ); { int g = CHAR_getWorkInt( meindex , CHAR_WORKDOOROPENG ); if( g >= 11900 && g <= 11915 ){ CHAR_setWorkInt( meindex , CHAR_WORKDOORKEYITEMID , 15 ); } else if( g >= 11916 && g <= 11931 ){ CHAR_setWorkInt( meindex , CHAR_WORKDOORKEYITEMID , 16 ); } else { CHAR_setWorkInt( meindex , CHAR_WORKDOORKEYITEMID , -1 ); } if(CHAR_getWorkInt( meindex , CHAR_WORKDOORPASSFLG )==2){ CHAR_setWorkInt( meindex , CHAR_WORKDOORKEYITEMID , -2 ); } if( CHAR_getInt( meindex , CHAR_BASEIMAGENUMBER ) == ROPEGRAPHIC ){ CHAR_setWorkInt( meindex , CHAR_WORKDOORKEYITEMID,-2 ); } } { int closeg = CHAR_getWorkInt( meindex , CHAR_WORKDOORCLOSEG ); int dir = -1; switch( closeg ){ case 11900: dir = 6; break; /* 霁及玉失 夫分曰仄凶 */ case 11902: dir = 0; break; /* 夫分曰丹尹 */ case 11904: dir = 2; break; /* 心亢丹尹 */ case 11906: dir = 4; break; /* 心亢仄凶 */ case 11908: dir = 6; break; /* 赢中霁及玉失 夫分曰仄凶 */ case 11910: dir = 0; break; /* 夫分曰丹尹 */ case 11912: dir = 2; break; /* 心亢丹尹 */ case 11914: dir = 4; break; /* 心亢仄凶 */ case 11916: dir = 6; break; /* 嗡及玉失 夫分曰仄凶 */ case 11918: dir = 0; break; /* 夫分曰丹尹 */ case 11920: dir = 2; break; /* 心亢丹尹 */ case 11922: dir = 4; break; /* 心亢仄凶 */ case 11924: dir = 6; break; /* 赢中嗡及玉失 夫分曰仄凶 */ case 11926: dir = 0; break; /* 夫分曰丹尹 */ case 11928: dir = 2; break; /* 心亢丹尹 */ case 11930: dir = 4; break; /* 心亢仄凶 */ case 11958: dir = 2; break; /* 赢中 及玉失 心亢丹尹 */ case 11960: dir = 4; break; /* 心亢仄凶 */ case 11962: dir = 6; break; /* 夫分曰仄凶 */ case 11964: dir = 0; break; /* 夫分曰丹尹 */ case 11966: dir = 2; break; /* 及玉失 心亢丹尹 */ case 11968: dir = 4; break; /* 心亢仄凶 */ case 11970: dir = 6; break; /* 夫分曰仄凶 */ case 11972: dir = 0; break; /* 夫分曰丹尹 */ case 11978: dir = 2; break; /* 赢中嗯及玉失 心亢丹尹 */ case 11980: dir = 4; break; /* 心亢仄凶 */ case 11982: dir = 6; break; /* 夫分曰仄凶 */ case 11984: dir = 0; break; /* 夫分曰丹尹 */ case 11986: dir = 2; break; /* 嗯及玉失 心亢丹尹 */ case 11988: dir = 4; break; /* 心亢仄凶 */ case 11990: dir = 6; break; /* 夫分曰仄凶 */ case 11992: dir = 0; break; /* 夫分曰丹尹 */ default: break; } if( dir >= 0 )CHAR_setInt(meindex,CHAR_DIR,dir); } CHAR_setInt( meindex , CHAR_WHICHTYPE , CHAR_TYPEDOOR ); CHAR_setFlg( meindex , CHAR_ISATTACKED , 0 ); CHAR_setInt( meindex , CHAR_WORKDOORSWITCHCURRENT , 0 ); CHAR_setWorkInt( meindex, CHAR_WORKDOOREXPIRETIME, 0xffffffff); if( CHAR_getWorkInt( meindex , CHAR_WORKDOORPASSFLG ) == 1){ NPC_ROOMINFO roominfo; if( NPC_RoomAdminNew_ReadFile( CHAR_getWorkChar( meindex, CHAR_WORKDOORNAME), &roominfo) == TRUE ){ NPC_DoorSetPasswd( meindex, roominfo.passwd); CHAR_setWorkInt( meindex, CHAR_WORKDOOREXPIRETIME, roominfo.expire); }else { NPC_DoorSetPasswd( meindex, "8hda8iauia90494jasd9asodfasdf89" ); if( getStringFromIndexWithDelim(arg, "|" , 13 , buf,sizeof(buf) )) if( strlen( buf) != 0 ) NPC_DoorSetPasswd( meindex, buf ); } } CHAR_setInt( meindex, CHAR_BASEIMAGENUMBER , CHAR_getWorkInt(meindex, CHAR_WORKDOORCLOSEG)); NPC_DoorRefreshOverFlg( meindex ); CHAR_setWorkInt( meindex, CHAR_WORKEVENTTYPE, CHAR_EVENT_NPC); 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); } }
void NPC_DoorLooked( int meindex , int lookedindex ) { int needkey; if( CHAR_getInt( meindex , CHAR_LV )){ char token[32]; char *p = CHAR_getWorkChar( meindex , CHAR_WORKDOORTITLE ); int i,j,ok=FALSE; for(i = 0 ; ; i++ ){ int r; r = getStringFromIndexWithDelim( p,":",2+i,token ,sizeof(token)); if(r){ int titleind = atoi( token ); for(j=0;j<CHAR_TITLEMAXHAVE;j++){ if(CHAR_getCharHaveTitle( lookedindex , j ) == titleind ){ ok = TRUE; break; } if( ok )break; } } else { break; } if( ok ) break; } if( ok ){ NPC_DoorFlip( meindex , lookedindex ); } else { char arg[512]; char buf[512]; NPC_Util_GetArgStr( meindex , arg,sizeof(arg)); getStringFromIndexWithDelim( arg,"|" , 9 , buf,sizeof(buf)); CHAR_talkToCli( lookedindex,-1,buf,CHAR_COLORWHITE); } return; } if( CHAR_getWorkInt( meindex, CHAR_WORKDOORORIGINALGRAPHIC)== ROPEGRAPHIC ){ return; } if( CHAR_getInt( meindex , CHAR_DIR ) == -1 ){ NPC_DoorFlip( meindex , lookedindex ); return; } if( CHAR_getWorkInt( meindex , CHAR_WORKDOORSOONFLG ) == 0 && NPC_Util_isBackContact( meindex , lookedindex ) == TRUE ){ NPC_DoorFlip( meindex , lookedindex); return; } if( CHAR_getWorkInt( meindex, CHAR_WORKDOORPASSFLG)>=1 ){ if( NPC_Door_isOpen( meindex ) ){ NPC_DoorFlip( meindex , lookedindex ); return; } #define NPC_DOOR_EXPIRE_MSG "%s 的房间有效期限至 %d/%d %d:%d" else { if( CHAR_getWorkInt( meindex, CHAR_WORKDOOREXPIRETIME) != 0xffffffff ){ struct tm tmwk; time_t expire = CHAR_getWorkInt( meindex, CHAR_WORKDOOREXPIRETIME); char msgbuf[128]; NPC_ROOMINFO roominfo; /* 由旦午 躲渝蜃毛本永玄允月 */ NPC_RoomAdminNew_ReadFile( CHAR_getWorkChar( meindex, CHAR_WORKDOORNAME), &roominfo); memcpy( &tmwk, localtime( &expire), sizeof( tmwk)); snprintf( msgbuf, sizeof( msgbuf), NPC_DOOR_EXPIRE_MSG, roominfo.charaname, tmwk.tm_mon+1, tmwk.tm_mday, tmwk.tm_hour, tmwk.tm_min); CHAR_talkToCli( lookedindex, meindex, msgbuf, CHAR_COLORWHITE); } } #undef NPC_DOOR_EXPIRE_MSG return; } needkey = CHAR_getWorkInt( meindex , CHAR_WORKDOORKEYITEMID ); if( needkey >= 0 ){ if( NPC_Util_countHaveItem( lookedindex , needkey ) > 0 ){ NPC_DoorFlip( meindex , lookedindex); } else { CHAR_talkToCli( lookedindex , -1 , NPC_DOOR_CANTOPENMSG , CHAR_COLORWHITE ); } } else if( needkey == -1 ){ NPC_DoorFlip(meindex , lookedindex ); } else { CHAR_talkToCli( lookedindex , -1 , "这扇门似乎怎麽也打不开!" , CHAR_COLORWHITE); } }
/*----------------------------------------------- * ¼¡¤Î¥ª¡¼¥¯¥·¥ç¥ó¤Î»þ´Ö¤ÈÉô²°Ì¾¤ò¥ï¡¼¥¯¤Ë¥»¥Ã¥È¤¹¤ë *----------------------------------------------*/ 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); }