📄 npc_familyman.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_familyman.h"#include "family.h"extern int familyNumTotal;extern char familyListBuf[MAXFAMILYLIST]; 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];}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_Familyman_selectWindow( int meindex, int toindex, int num);static BOOL NPC_Familyman_readData( int meindex, int windowno, BOOL chkflg);static int NPC_Familyman_restoreButtontype( char *data );/********************************** 赓渝质 *********************************/BOOL NPC_FamilymanInit( int meindex ){ char argstr[NPC_UTIL_GETARGSTR_BUFSIZE]; char buf[1024]; //int i; //char secondToken[1024]; // Robin test // print(" familyman_Init "); NPC_Util_GetArgStr( meindex, argstr, sizeof( argstr)); if( NPC_Util_GetStrFromStrWithDelim( argstr, "conff", buf, sizeof( buf)) == NULL ) { print( "familyman:没有指定设定的档案 。\n"); return FALSE; } /* 赓渝凛卞涩烂犯□正毛民尼永弁仄化支月 */ if( !NPC_Familyman_readData( meindex, -1, TRUE) ) { return FALSE; } CHAR_setInt( meindex , CHAR_WHICHTYPE , CHAR_TYPEWINDOWMAN ); return TRUE;}/********************************** 仄井仃日木凶凛及质 *********************************/void NPC_FamilymanTalked( int meindex , int talkerindex , char *szMes ,int color ){ NPC_Familyman_selectWindow( meindex, talkerindex, 1 ); }/********************************** 苇日木凶凛及质 *********************************/void NPC_FamilymanLooked( int meindex , int lookedindex){ print(" Look:me:%d,looked:%d ",meindex,lookedindex); NPC_Familyman_selectWindow( meindex, lookedindex,1 ); }static void NPC_Familyman_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_Familyman_readData( meindex, num, FALSE) ) { print( "familyman: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_FamilymanWindowTalked( int meindex, int talkerindex, int seqno, int select, char *data){ int button = -1; char buf[256]; /* ㄠ弘伉永玉动 及心 */ if( NPC_Util_CharDistance( talkerindex, meindex ) > 1) return; // CoolFish Add For Check Old Leader Del Family if(seqno == CHAR_WINDOWTYPE_FAMILYMAN_OUT) { int fd = getfdFromCharaIndex( talkerindex); if(select == WINDOW_BUTTONTYPE_YES) FAMILY_Leave( fd, talkerindex, "E|1"); return; } // CoolFish End /* 仇及它奴件玉它 寞及犯□正毛 心 戈 */ if( !NPC_Familyman_readData( meindex, seqno - 100, FALSE) ) { print( "familyman:readdata error\n"); return; } /* 瓷仄凶示正件毛譬屯月 */ if( w.windowtype == WINDOW_MESSAGETYPE_SELECT ) { button = atoi( data)+5; if( button > 12 ) { print( "familyman: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( "familyman: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 ) { if( CHAR_getInt( talkerindex, CHAR_FMINDEX ) > 0 ) { //CHAR_talkToCli( talkerindex, -1, "资格不符!已经加入家族。", CHAR_COLORWHITE ); lssproto_WN_send( fd, WINDOW_MESSAGETYPE_MESSAGE, WINDOW_BUTTONTYPE_OK, -1, -1, makeEscapeString( "\n很抱歉喔!你已经加入家族了!", buf, sizeof(buf))); return; } if( (CHAR_getInt( talkerindex, CHAR_TRANSMIGRATION ) == 0) && (CHAR_getInt( talkerindex, CHAR_LV) < 30) ) { //CHAR_talkToCli( talkerindex, -1, "很抱歉!等级不足。", CHAR_COLORWHITE ); lssproto_WN_send( fd, WINDOW_MESSAGETYPE_MESSAGE, WINDOW_BUTTONTYPE_OK, -1, -1, makeEscapeString( "\n很抱歉喔!你的等级不足!", buf, sizeof(buf))); return; } if( !NPC_EventCheckFlg( talkerindex, 4 ) ) { lssproto_WN_send( fd, WINDOW_MESSAGETYPE_MESSAGE, WINDOW_BUTTONTYPE_OK, -1, -1, makeEscapeString( "\n很抱歉喔!你必须先完成成人礼才行!", buf, sizeof(buf))); return; } if( CHAR_getInt( talkerindex, CHAR_GOLD ) < 10000 ) { lssproto_WN_send( fd, WINDOW_MESSAGETYPE_MESSAGE, WINDOW_BUTTONTYPE_OK, -1, -1, makeEscapeString( "\n很抱歉喔!你的申请手续费不足!", buf, sizeof(buf))); return; } lssproto_WN_send( fd, WINDOW_MESSAGETYPE_FAMILYADD, WINDOW_BUTTONTYPE_NONE, CHAR_WINDOWTYPE_FAMILYMAN_ADD, CHAR_getWorkInt( meindex, CHAR_WORKOBJINDEX), "Hello!!" ); return; } // 列表 , 加入 if( newwin == 6 ) { /* strcpy( buf, ""); j = 0; for( i=1 ; i<=8 ; i++ ) { if( i > familyNumTotal ) break; if( getStringFromIndexWithDelim( familyListBuf, "|", i, subbuf, sizeof(subbuf) ) == FALSE) break; strcat( buf, "|" ); strcat( buf, subbuf ); j++; } sprintf( sendbuf, "S|F|%d|%d|%d%s", familyNumTotal, 1, j, buf ); //print(" FL:%s ", sendbuf ); lssproto_FM_send( fd, sendbuf ); */ //saacproto_ACShowFMList_send( acfd ); FAMILY_Detail( fd, talkerindex, "S|F|1|0" ); return; } // 退出 if( newwin == 7 ) { if( CHAR_getInt( talkerindex, CHAR_FMINDEX ) == -1 ) { // CHAR_talkToCli( talkerindex, -1, "你还未加入任何家族呀。", CHAR_COLORWHITE ); lssproto_WN_send( fd, WINDOW_MESSAGETYPE_MESSAGE, WINDOW_BUTTONTYPE_OK, -1, -1, makeEscapeString( "\n很抱歉喔!你还没有加入任何家族呀!", buf, sizeof(buf))); return; } //if (CHAR_getInt(talkerindex, CHAR_FMLEADERFLAG) == FMMEMBER_LEADER) { // CHAR_talkToCli( talkerindex, -1, "族长....", CHAR_COLORWHITE ); // return; //} print(" WN2FM "); // CoolFish Change for old leader del family check if(CHAR_getInt(talkerindex, CHAR_FMLEADERFLAG) == FMMEMBER_LEADER) { lssproto_WN_send(fd, WINDOW_MESSAGETYPE_MESSAGE, WINDOW_BUTTONTYPE_YESNO, CHAR_WINDOWTYPE_FAMILYMAN_OUT, CHAR_getWorkInt(meindex, CHAR_WORKOBJINDEX), makeEscapeString("\n您现在是这个家族的族长喔...\n\n家族解散了就无法再救回唷!~\n\n确定要解散家族吗?",buf, sizeof(buf))); return; } else FAMILY_Leave( fd, talkerindex, "E|1"); // CoolFish Change End return; } if( !NPC_Familyman_readData( meindex, newwin, FALSE) ) { print( "familyman: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_Familyman_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];
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -