int NPC_WarpInit(int charaindex) { char arg[NPC_UTIL_GETARGSTR_BUFSIZE]; int ret; int floor = -1, x = -1, y = -1; char token[128]; CHAR_setInt(charaindex, CHAR_WHICHTYPE, CHAR_TYPEWARP); if(NPC_Util_GetArgStr(charaindex, arg, sizeof(arg)) == NULL) { print("\n GetArgStr ERR!!"); return FALSE; } #ifdef _NEW_WARPPOINT if(strstr(arg, "FREEMORE") != NULL) { CHAR_setWorkInt(charaindex, CHAR_WORKEVENTTYPE, CHAR_EVENT_WARP); } else { #endif return FALSE; ret = getStringFromIndexWithDelim(arg, "|", 1, token, sizeof(token)); if(ret) floor = atoi(token); ret = getStringFromIndexWithDelim(arg, "|", 2, token, sizeof(token)); if(ret) x = atoi(token); ret = getStringFromIndexWithDelim(arg, "|", 3, token, sizeof(token)); if(ret) y = atoi(token); if(MAP_IsValidCoordinate(floor, x, y) == FALSE) { NPC_WarpsetNeverMake(charaindex); //print( "Warp NPC:Invalid arg:%s\n", arg ); print("Warp Npc Err:%d:%d:%d->(%s)\n", CHAR_getInt(charaindex, CHAR_FLOOR), CHAR_getInt(charaindex, CHAR_X), CHAR_getInt(charaindex, CHAR_Y), arg); return FALSE; } ret = getStringFromIndexWithDelim(arg, "|", 4, token, sizeof(token)); if(ret == TRUE) { int day; day = NPC_TimeWarpCheck(charaindex, token, 0); if(day == 0) { CHAR_setWorkInt(charaindex, CHAR_WORKEVENTTYPE, CHAR_EVENT_WARP_NIGHT); } else if(day == 1) { CHAR_setWorkInt(charaindex, CHAR_WORKEVENTTYPE, CHAR_EVENT_WARP_MORNING); } else if(day == 2) { CHAR_setWorkInt(charaindex, CHAR_WORKEVENTTYPE, CHAR_EVENT_WARP_NOON); } else { CHAR_setWorkInt(charaindex, CHAR_WORKEVENTTYPE, CHAR_EVENT_WARP); } } else { CHAR_setWorkInt(charaindex, CHAR_WORKEVENTTYPE, CHAR_EVENT_WARP); } #ifdef _NEW_WARPPOINT } #endif CHAR_setFlg(charaindex, CHAR_ISVISIBLE, 0); CHAR_setFlg(charaindex, CHAR_ISOVERED, 1); CHAR_setFlg(charaindex, CHAR_ISATTACKED, 0); CHAR_setFlg(charaindex, CHAR_ISATTACK, 0); return TRUE; }
BOOL NPC_WarpInit( int charaindex ) { char arg1[NPC_UTIL_GETARGSTR_BUFSIZE]; char *arg; int ret; int floor=-1,x=-1,y=-1; char token[128]; #ifdef _RECORD_NPCMAN_ //紀錄 char evtype[256]; char evtime[256]; char argfile[256]; if( NPC_Util_CheckAssignArgFile( charaindex, argfile) == NULL ) sprintf( argfile, "NULL"); #endif CHAR_setInt( charaindex, CHAR_WHICHTYPE , CHAR_TYPEWARP ); if((arg = NPC_Util_GetArgStr( charaindex, arg1, sizeof( arg1))) == NULL ) { print("\n GetArgStr ERR!!"); return FALSE; } #ifdef _NEW_WARPPOINT if( strstr( arg, "FREEMORE") != NULL ) { #ifdef _RECORD_NPCMAN_ //紀錄 sprintf( evtype, "FREE"); sprintf( evtime, "NULL"); #endif CHAR_setWorkInt( charaindex, CHAR_WORKEVENTTYPE, CHAR_EVENT_WARP); }else { #endif #ifdef _MAP_WARPPOINT return FALSE; #endif #ifdef _RECORD_NPCMAN_ //紀錄 sprintf( evtype, "NONE"); #endif ret=getStringFromIndexWithDelim(arg,"|", 1,token,sizeof(token)); if( ret ) floor = atoi( token ); ret=getStringFromIndexWithDelim(arg,"|", 2,token,sizeof(token)); if( ret ) x = atoi( token ); ret=getStringFromIndexWithDelim(arg,"|", 3,token,sizeof(token)); if( ret ) y = atoi( token ); if( MAP_IsValidCoordinate( floor,x,y )== FALSE ){ NPC_WarpsetNeverMake( charaindex ); //print( "Warp NPC:Invalid arg:%s\n", arg ); print( "Warp Npc Err:%d:%d:%d->(%s)\n", CHAR_getInt( charaindex, CHAR_FLOOR ), CHAR_getInt( charaindex, CHAR_X ), CHAR_getInt( charaindex, CHAR_Y ), arg ); return FALSE; } ret=getStringFromIndexWithDelim(arg,"|",4,token,sizeof(token)); if(ret==TRUE){ int day; day=NPC_TimeWarpCheck(charaindex,token,0); if(day==0){ #ifdef _RECORD_NPCMAN_ //紀錄 sprintf( evtime, "N"); #endif CHAR_setWorkInt( charaindex, CHAR_WORKEVENTTYPE, CHAR_EVENT_WARP_NIGHT); }else if(day==1){ #ifdef _RECORD_NPCMAN_ //紀錄 sprintf( evtime, "M"); #endif CHAR_setWorkInt( charaindex, CHAR_WORKEVENTTYPE, CHAR_EVENT_WARP_MORNING); }else if(day==2){ #ifdef _RECORD_NPCMAN_ //紀錄 sprintf( evtime, "A"); #endif CHAR_setWorkInt( charaindex, CHAR_WORKEVENTTYPE, CHAR_EVENT_WARP_NOON); }else{ #ifdef _RECORD_NPCMAN_ //紀錄 sprintf( evtime, "NULL"); #endif CHAR_setWorkInt( charaindex, CHAR_WORKEVENTTYPE, CHAR_EVENT_WARP); } }else{ #ifdef _RECORD_NPCMAN_ //紀錄 sprintf( evtime, "NULL"); #endif CHAR_setWorkInt( charaindex, CHAR_WORKEVENTTYPE, CHAR_EVENT_WARP); } #ifdef _NEW_WARPPOINT } #endif CHAR_setFlg( charaindex,CHAR_ISVISIBLE, 0 ); CHAR_setFlg( charaindex,CHAR_ISOVERED,1 ); CHAR_setFlg( charaindex,CHAR_ISATTACKED,0 ); CHAR_setFlg( charaindex,CHAR_ISATTACK,0 ); #ifdef _RECORD_NPCMAN_ //紀錄 { FILE *fp=NULL; char filename[256]; sprintf( filename,"./data/npc/%s", "mapwarp.txt"); if( (fp = fopen( filename, "a+")) != NULL ) { fprintf( fp, "%s:%s:%d,%d,%d:%d,%d,%d:%s\n", evtype, evtime, CHAR_getInt( charaindex, CHAR_FLOOR), CHAR_getInt( charaindex, CHAR_X), CHAR_getInt( charaindex, CHAR_Y), floor, x, y, argfile ); fclose( fp); }else { } } #endif return TRUE; }