?? npc_fmletter.c
字號:
#include "version.h"#include <string.h>#include "char.h"#include "object.h"#include "char_base.h"#include "npcutil.h"#include "configfile.h"#include "lssproto_serv.h"#include "saacproto_cli.h"#include "npc_fmletter.h"#include "family.h"#include "log.h"extern struct FM_POINTLIST fmpointlist;char sendbuf[1024];char buf[1024];char subbuf[128];int i, j;/* * 澀爛今木兇它奴件玉它毛請允NPC * 棵啞 平旦玄失玉矛件民乓□仁日中卅日綜木月井手[ * */ struct { int windowno; int windowtype; int buttontype; int takeitem; int giveitem; char message[4096]; int letter;}w;struct { BOOL use; int checkhaveitem; int checkhaveitemgotowin; int checkdonthaveitem; int checkdonthaveitemgotowin; int warp; int battle; int gotowin;}buttonproc[13]; /* ok,cancel, yes,no,prev,next 及凜及質 */enum { CHAR_WORK_MSGCOLOR = CHAR_NPCWORKINT1,};static void NPC_FmLetter_selectWindow( int meindex, int toindex, int num);static BOOL NPC_FmLetter_readData( int meindex, int windowno, BOOL chkflg);static int NPC_FmLetter_restoreButtontype( char *data );/********************************** 賡渝質 *********************************/BOOL NPC_FmLetterInit( int meindex ){ char argstr[NPC_UTIL_GETARGSTR_BUFSIZE]; char buf[1024]; //int i; //char secondToken[1024]; // Robin test // print(" fmleter_Init "); NPC_Util_GetArgStr( meindex, argstr, sizeof( argstr)); if( NPC_Util_GetStrFromStrWithDelim( argstr, "conff", buf, sizeof( buf)) == NULL ) { print( "fmletter:沒有指定設定的檔案 。\n"); return FALSE; } /* 賡渝凜卞澀爛犯□正毛民尼永弁仄化支月 */ if( !NPC_FmLetter_readData( meindex, -1, TRUE) ) { return FALSE; } CHAR_setInt( meindex , CHAR_WHICHTYPE , CHAR_TYPEWINDOWMAN ); return TRUE;}/********************************** 仄井仃日木兇凜及質 *********************************/void NPC_FmLetterTalked( int meindex , int talkerindex , char *szMes ,int color ){ //print(" FmLetter_fmindex:%d ", CHAR_getInt( meindex, CHAR_FMINDEX) ); int fmindex = 0, village, i; char token[256]; char buf[256]; for( i=0 ; i<FMPOINTNUM ; i++ ) { getStringFromIndexWithDelim(fmpointlist.pointlistarray[i], "|", 9, token, sizeof(token)); village = atoi(token); if( village == CHAR_getInt( meindex, CHAR_FMINDEX ) ) { getStringFromIndexWithDelim(fmpointlist.pointlistarray[i], "|", 5, token, sizeof(token)); fmindex = atoi(token); break; } }#ifdef _FMVER21 if( CHAR_getInt( talkerindex, CHAR_FMLEADERFLAG ) == FMMEMBER_LEADER ){}#else#endif if( CHAR_getInt( talkerindex, CHAR_FMLEADERFLAG ) == FMMEMBER_LEADER ) NPC_FmLetter_selectWindow( meindex, talkerindex, 1 ); else //NPC_FmLetter_selectWindow( meindex, talkerindex, 2 ); lssproto_WN_send( getfdFromCharaIndex( talkerindex ), WINDOW_MESSAGETYPE_MESSAGE, WINDOW_BUTTONTYPE_OK, -1, -1, makeEscapeString( "\n只有本莊園的族長才能制作邀請函及同意書!", buf, sizeof(buf)));}/********************************** 葦日木兇凜及質 *********************************/void NPC_FmLetterLooked( int meindex , int lookedindex){ //print(" Look:me:%d,looked:%d ",meindex,lookedindex); NPC_FmLetter_selectWindow( meindex, lookedindex,1 ); }static void NPC_FmLetter_selectWindow( int meindex, int toindex, int num){ int fd; char buf[256]; /* 皿伊奶乩□卞覆仄化分仃 殺允月 */ if( CHAR_getInt( toindex , CHAR_WHICHTYPE ) != CHAR_TYPEPLAYER ) { return; } /* ㄠ弘伉永玉動 及心 */ if( !NPC_Util_charIsInFrontOfChar( toindex, meindex, 1 )) return; if( !NPC_FmLetter_readData( meindex, num, FALSE) ) { print( "fmletter:readdata error\n"); return; } fd = getfdFromCharaIndex( toindex); if( fd != -1 ) { lssproto_WN_send( fd, w.windowtype, w.buttontype, w.windowno+100, CHAR_getWorkInt( meindex, CHAR_WORKOBJINDEX), makeEscapeString( w.message, buf, sizeof(buf))); }}void NPC_FmLetterWindowTalked( int meindex, int talkerindex, int seqno, int select, char *data){ int button = -1; char buf[512]; /* ㄠ弘伉永玉動 及心 */ if( NPC_Util_CharDistance( talkerindex, meindex ) > 1) return; /* 仇及它奴件玉它 寞及犯□正毛 心 戈 */ if( !NPC_FmLetter_readData( meindex, seqno - 100, FALSE) ) { print( "fmletter:readdata error\n"); return; } /* 瓷仄兇示正件毛譬屯月 */ if( w.windowtype == WINDOW_MESSAGETYPE_SELECT ) { button = atoi( data)+5; if( button > 12 ) { print( "fmletter:invalid button[%d]\n", button); return; } } else if( select & WINDOW_BUTTONTYPE_OK) button = 0; else if( select & WINDOW_BUTTONTYPE_CANCEL) button = 1; else if( select & WINDOW_BUTTONTYPE_YES) button = 2; else if( select & WINDOW_BUTTONTYPE_NO) button = 3; else if( select & WINDOW_BUTTONTYPE_PREV) button = 4; else if( select & WINDOW_BUTTONTYPE_NEXT) button = 5; else { print( "fmletter:invalid button[%d]\n", select); return; } if( buttonproc[button].use == TRUE ) { int fd; int newwin = -1; fd = getfdFromCharaIndex( talkerindex); /* 示正件卞方勻化質 毛孔曰歹仃月 */ if( newwin == -1 ) { newwin = buttonproc[button].gotowin; } // Robin if( newwin == 5 ) { int emptyitemindexinchara = CHAR_findEmptyItemBox( talkerindex ); int itemindex = ITEM_makeItemAndRegist( w.letter ); if( emptyitemindexinchara < 0 ) return; if( itemindex != -1 ){ char msgbuf[128]; CHAR_setItemIndex( talkerindex, emptyitemindexinchara, itemindex ); /* Work犯□正毛澀爛 */ ITEM_setWorkInt(itemindex, ITEM_WORKOBJINDEX,-1); ITEM_setWorkInt(itemindex, ITEM_WORKCHARAINDEX, talkerindex); CHAR_sendItemDataOne( talkerindex, emptyitemindexinchara); LogItem( CHAR_getChar( talkerindex, CHAR_NAME ), /* 平乓仿 */ CHAR_getChar( talkerindex, CHAR_CDKEY ),#ifdef _add_item_log_name // WON ADD 在item的log中增加item名稱 itemindex,#else ITEM_getInt( itemindex, ITEM_ID ), /* 失奶 丞 寞 */#endif "AddLetter(制作邀請函)", CHAR_getInt( talkerindex,CHAR_FLOOR), CHAR_getInt( talkerindex,CHAR_X ), CHAR_getInt( talkerindex,CHAR_Y ), ITEM_getChar( itemindex, ITEM_UNIQUECODE), ITEM_getChar( itemindex, ITEM_NAME), ITEM_getInt( itemindex, ITEM_ID) ); snprintf( msgbuf, sizeof( msgbuf), "制作%s成功\。", ITEM_getChar( itemindex, ITEM_NAME)); CHAR_talkToCli( talkerindex, -1,msgbuf, CHAR_COLORWHITE); } } // Robin if( newwin == 6 ) { int emptyitemindexinchara = CHAR_findEmptyItemBox( talkerindex ); int itemindex = ITEM_makeItemAndRegist( w.letter ); if( emptyitemindexinchara < 0 ) return; if( itemindex != -1 ){ char msgbuf[128]; CHAR_setItemIndex( talkerindex, emptyitemindexinchara, itemindex ); /* Work犯□正毛澀爛 */ ITEM_setWorkInt(itemindex, ITEM_WORKOBJINDEX,-1); ITEM_setWorkInt(itemindex, ITEM_WORKCHARAINDEX, talkerindex); CHAR_sendItemDataOne( talkerindex, emptyitemindexinchara); LogItem( CHAR_getChar( talkerindex, CHAR_NAME ), /* 平乓仿 */#ifdef _add_item_log_name // WON ADD 在item的log中增加item名稱 itemindex,#else ITEM_getInt( itemindex, ITEM_ID ), /* 失奶 丞 寞 */#endif "AddLetter(制作邀請函)", CHAR_getInt( talkerindex,CHAR_FLOOR), CHAR_getInt( talkerindex,CHAR_X ), CHAR_getInt( talkerindex,CHAR_Y ), ITEM_getChar( itemindex, ITEM_UNIQUECODE), ITEM_getChar( itemindex, ITEM_NAME), ITEM_getInt( itemindex, ITEM_ID) ); snprintf( msgbuf, sizeof( msgbuf), "制作%s成功\。", ITEM_getChar( itemindex, ITEM_NAME)); CHAR_talkToCli( talkerindex, -1,msgbuf, CHAR_COLORWHITE); } } if( !NPC_FmLetter_readData( meindex, newwin, FALSE) ) { print( "fmletter:readdata error\n"); return; } //fd = getfdFromCharaIndex( talkerindex); if( fd != -1 ) { lssproto_WN_send( fd, w.windowtype, w.buttontype, w.windowno+100, CHAR_getWorkInt( meindex, CHAR_WORKOBJINDEX), makeEscapeString( w.message, buf, sizeof(buf))); } }}/* * 澀爛白央奶伙毛 氏匹隙爛今木兇windowno及犯□正毛本永玄允月 * * 婁醒“ * meindex int 仇及NPC及charaindex * windowno int 它奴件玉它 寞 * */static BOOL NPC_FmLetter_readData( int meindex, int windowno, BOOL chkflg){ int i; int linenum = 0; int endflg = FALSE; int buttonendflg; int winno = -1; int buttonconfmode; int b_mode; int selectnum ; int messagepos; BOOL errflg = FALSE; BOOL readflg = TRUE; FILE *fp; char argstr[NPC_UTIL_GETARGSTR_BUFSIZE]; char filename[64]; char line[1024]; char firstToken[1024]; char secondToken[1024]; /* 它奴件玉它及澀爛毛 曰 戈厭瞻 */ NPC_Util_GetArgStr( meindex, argstr, sizeof( argstr)); /* 澀爛白央奶伙 潸 */
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -