📄 npc_fmletter.c
字号:
NPC_Util_GetStrFromStrWithDelim( argstr, "conff", filename, sizeof( filename)); sprintf( opfile, "%s/", getNpcdir( ) ); strcat( opfile, filename); fp = fopen( opfile, "r"); if( fp == NULL ) { print( "fmletter:file open error [%s]\n", opfile); return FALSE; } while( readflg == TRUE ) { endflg = FALSE; buttonendflg = TRUE; buttonconfmode = FALSE; selectnum = 0; messagepos = 0; winno = -1; b_mode = -1; errflg = FALSE; /* 赓渝祭 */ w.windowno = -1; w.windowtype = -1; w.buttontype = -1; w.takeitem = -1; w.giveitem = -1; w.message[0] = '\0'; for( i = 0; i < arraysizeof( buttonproc); i ++ ) { buttonproc[i].use = FALSE; buttonproc[i].checkhaveitem = -1; buttonproc[i].checkhaveitemgotowin = -1; buttonproc[i].checkdonthaveitem = -1; buttonproc[i].checkdonthaveitemgotowin = -1; buttonproc[i].warp = -1; buttonproc[i].battle = -1; buttonproc[i].gotowin = -1; } while( 1) { char buf[256]; int ret; if( !fgets( line, sizeof( line), fp)){ readflg = FALSE; break; } linenum ++; /* 戊丢件玄反 骰 */ if( line[0] == '#' || line[0] == '\n') continue; /* 荼垫潸月 */ chomp( line ); /* 垫毛帮溥允月 */ /* 引内 tab 毛 " " 卞 五晶尹月 */ replaceString( line, '\t' , ' ' ); /* 燮 及旦矢□旦毛潸月[*/ for( i = 0; i < strlen( line); i ++) { if( line[i] != ' ' ) { break; } strcpy( buf, &line[i]); } if( i != 0 ) strcpy( line, buf); /* delim "=" 匹 赓(1)及玄□弁件毛 月*/ ret = getStringFromIndexWithDelim( line, "=", 1, firstToken, sizeof( firstToken ) ); if( ret == FALSE ){ print( "Find error at %s in line %d. Ignore\n", filename , linenum); continue; } /* delim "=" 匹2 及玄□弁件毛 月*/ ret = getStringFromIndexWithDelim( line, "=", 2, secondToken, sizeof( secondToken ) ); if( ret == FALSE ){ print( "Find error at %s in line %d. Ignore\n", filename , linenum); continue; } if( strcasecmp( firstToken, "winno") == 0 ) { if( winno != -1 ) { print( "fmletter:已有winno却重新定义winno\n"); print( "filename:[%s] line[%d]\n", filename, linenum); errflg = TRUE; readflg = FALSE; break; } /* 它奴件玉它No毛忡绣 */ winno = atoi( secondToken); continue; } /* 它奴件玉它No 互瑁引匀化中卅中凛及垫反 骰允月 */ if( winno == -1 ) { print( "fmletter:winno 尚未定义,资料却已设定。\n"); print( "filename:[%s] line[%d]\n", filename, linenum); readflg = FALSE; errflg = FALSE; break; } /* 它奴件玉它No 互域谯仄凶凛反椭瘀毛 戈[ * 公木动陆反 骰允月 */ if( (chkflg == FALSE && winno == windowno )|| chkflg == TRUE) { if( buttonconfmode == TRUE ) { if( strcasecmp( firstToken, "gotowin") == 0 ) { buttonproc[b_mode].gotowin = atoi( secondToken); } else if( strcasecmp( firstToken, "checkhaveitem") == 0 ) { buttonproc[b_mode].checkhaveitem = atoi( secondToken); } else if( strcasecmp( firstToken, "haveitemgotowin") == 0 ) { buttonproc[b_mode].checkhaveitemgotowin = atoi( secondToken); } else if( strcasecmp( firstToken, "checkdonthaveitem") == 0 ) { buttonproc[b_mode].checkdonthaveitem = atoi( secondToken); } else if( strcasecmp( firstToken, "donthaveitemgotowin") == 0 ) { buttonproc[b_mode].checkdonthaveitemgotowin = atoi( secondToken); } else if( strcasecmp( firstToken, "endbutton") == 0 ) { if( buttonproc[b_mode].gotowin == - 1 ) { if( buttonproc[b_mode].checkhaveitem == -1 && buttonproc[b_mode].checkdonthaveitem == -1) { errflg = TRUE; } else { /* 升匀切井井凶匀吊分仃匹手涩烂今木化中木壬 */ if( !((buttonproc[b_mode].checkhaveitem != -1 && buttonproc[b_mode].checkhaveitemgotowin != -1) || (buttonproc[b_mode].checkdonthaveitem != -1 && buttonproc[b_mode].checkdonthaveitemgotowin != -1))) { errflg = TRUE; } } } if( errflg == TRUE) { print( "fmletter: 找不到gotowin\n"); print( "filename:[%s] line[%d]\n", filename, linenum); readflg = FALSE; errflg = TRUE; break; } buttonproc[b_mode].use = TRUE; buttonconfmode = FALSE; buttonendflg = TRUE; } } else { w.windowno = winno; sprintf( buf, "letter%d", CHAR_getInt( meindex, CHAR_FMINDEX) ); /* 它奴件玉它正奶皿及涩烂 */ if( strcasecmp( firstToken, "wintype") == 0 ) { w.windowtype = atoi( secondToken); } /* 示正件正奶皿及涩烂 */ else if( strcasecmp( firstToken, "buttontype") == 0 ) { w.buttontype = NPC_FmLetter_restoreButtontype( secondToken); } /* getitem及涩烂 */ else if( strcasecmp( firstToken, "takeitem") == 0 ) { w.takeitem = atoi( secondToken); } /* giveitem及涩烂 */ else if( strcasecmp( firstToken, "giveitem") == 0 ) { w.giveitem = atoi( secondToken); } else if( strcasecmp( firstToken, buf) == 0 ) { w.letter = atoi( secondToken); } /* message及涩烂 */ else if( strcasecmp( firstToken, "message") == 0 ) { if( messagepos == 0 ) { strcpy( w.message, secondToken); messagepos = strlen( w.message); } else { w.message[messagepos]='\n'; messagepos++; strcpy( &w.message[messagepos], secondToken); messagepos+=strlen(secondToken); } } /* 示正件毛瓷仄凶凛及涩烂 */ else if( strcasecmp( firstToken, "okpressed") == 0 ) { buttonconfmode = TRUE; b_mode = 0; buttonendflg = FALSE; } else if( strcasecmp( firstToken, "cancelpressed") == 0 ) { buttonconfmode = TRUE; b_mode = 1; buttonendflg = FALSE; } else if( strcasecmp( firstToken, "yespressed") == 0 ) { buttonconfmode = TRUE; b_mode = 2; buttonendflg = FALSE; } else if( strcasecmp( firstToken, "nopressed") == 0 ) { buttonconfmode = TRUE; b_mode = 3; buttonendflg = FALSE; } else if( strcasecmp( firstToken, "prevpressed") == 0 ) { buttonconfmode = TRUE; b_mode = 4; buttonendflg = FALSE; } else if( strcasecmp( firstToken, "nextpressed") == 0 ) { buttonconfmode = TRUE; b_mode = 5; buttonendflg = FALSE; } else if( strcasecmp( firstToken, "selected") == 0 ) { buttonconfmode = TRUE; b_mode = 6 + selectnum; buttonendflg = FALSE; selectnum ++; } /* 涩烂蔽歹曰 */ else if( strcasecmp( firstToken, "endwin") == 0 ) { endflg = TRUE; if( chkflg == FALSE) { readflg = FALSE; } break; } else { //print( "fmletter:设定是不可能的参数\n"); //print( "filename:[%s] line[%d]\n", filename, linenum); } } } else { if( strcasecmp( firstToken, "endwin") == 0 ) { winno = -1; } } } if( buttonendflg == FALSE) { print( "fmletter: 找不到endbutton\n"); print( "filename:[%s] line[%d]\n", filename, linenum); errflg = TRUE; break; } if( winno != -1 ) { if( w.windowtype == -1 ) { print( "fmletter: 找不到wintype\n"); print( "filename:[%s] line[%d]\n", filename, linenum); errflg = TRUE; break; } if( w.buttontype == -1 ) { print( "fmletter: 找不到button\n"); print( "filename:[%s] line[%d]\n", filename, linenum); errflg = TRUE; break; } if( strlen( w.message) == 0 ) { print( "fmletter: 找不到message\n"); print( "filename:[%s] line[%d]\n", filename, linenum); errflg = TRUE; break; } } } fclose( fp); if( chkflg == FALSE && w.windowno == -1 ) { print( "fmletter: 找不到所指定的windowno\n"); print( "filename:[%s] line[%d]\n", filename, linenum); return FALSE; } if( winno != -1 && endflg == FALSE) { print( "fmletter: 找不到endwin\n"); print( "filename:[%s] line[%d]\n", filename, linenum); return FALSE; } if( errflg == TRUE) return FALSE; return TRUE;}/* * buttontype=匹隙烂仄凶 侬 毛醒袄卞 晶允月[ * */static int NPC_FmLetter_restoreButtontype( char *data ){ int ret = 0; int rc; int i; char buff[1024]; for( i = 1; ; i ++ ) { rc = getStringFromIndexWithDelim( data, "|", i, buff, sizeof( buff ) ); if( rc == FALSE) break; if( strcasecmp( buff, "ok") == 0 ) { ret |= WINDOW_BUTTONTYPE_OK; } else if( strcasecmp( buff, "cancel") == 0 ) { ret |= WINDOW_BUTTONTYPE_CANCEL; } else if( strcasecmp( buff, "yes") == 0 ) { ret |= WINDOW_BUTTONTYPE_YES; } else if( strcasecmp( buff, "no") == 0 ) { ret |= WINDOW_BUTTONTYPE_NO; } else if( strcasecmp( buff, "prev") == 0 ) { ret |= WINDOW_BUTTONTYPE_PREV; } else if( strcasecmp( buff, "next") == 0 ) { ret |= WINDOW_BUTTONTYPE_NEXT; } } if( ret == 0 ) { ret = atoi( data); } return ret;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -