📄 npc_newnpcman.c
字号:
NPC_NEWNPCMAN_MAN,NPC_NEWNPCMAN_END,};enum { NEWNPC_START = 1, NEWNPC_MAN, NEWNPC_END,};enum { NPC_WORK_INDEX = CHAR_NPCWORKINT1, NPC_WORK_WORKTYPE = CHAR_NPCWORKINT2, NPC_WORK_CURRENTTIME = CHAR_NPCWORKINT3,};BOOL CHECK_YEARPET( int toindex);static void NPC_NewNpcMan_selectWindow( int meindex, int toindex, int num, int flg);int NPC_NewNpcManDelPet(int meindex,int talker, int petsel);BOOL NPC_NewNpcManAddPet(int meindex, int talker, int petid);//可换四种宠static int Re_Pet[4];// shanchar uStr[128]="";BOOL NPC_NewNpcManInit( int meindex ){ char npcarg[NPC_UTIL_GETARGSTR_BUFSIZE]; char buf1[256],buf2[256]; int k=1; if(NPC_Util_GetArgStr( meindex, npcarg, sizeof(npcarg)) == NULL) { print("GambleBank:GetArgStrErr"); return FALSE; } if( NPC_Util_GetStrFromStrWithDelim( npcarg, "REPET", buf1, sizeof( buf1)) == NULL ) { return FALSE; } while( getStringFromIndexWithDelim(buf1, ",", k, buf2, sizeof(buf2)) != FALSE ) { Re_Pet[k-1] = atoi( buf2); if( Re_Pet[k-1] < 0 ) return FALSE; k++; if( (k-1) >= arraysizeof( Re_Pet) ) break; } CHAR_setInt( meindex , CHAR_WHICHTYPE , CHAR_NEWNPCMAN ); CHAR_setInt( meindex, CHAR_LOOPINTERVAL, NEWNPCMAN_STANDBY); CHAR_setWorkInt( meindex, NPC_WORK_CURRENTTIME, NowTime.tv_sec); CHAR_setWorkInt( meindex , NPC_WORK_INDEX, -1); return TRUE;}void NPC_NewNpcManLoop( int meindex){ //test char npcarg[NPC_UTIL_GETARGSTR_BUFSIZE]; char buf1[256],buf2[256]; int k=1; int fulltime = NEWNPCMAN_WAITTIME; if( (CHAR_getWorkInt( meindex, NPC_WORK_CURRENTTIME) + fulltime) > NowTime.tv_sec ) return; CHAR_setWorkInt( meindex , NPC_WORK_INDEX, -1); CHAR_setWorkInt( meindex, NPC_WORK_CURRENTTIME, NowTime.tv_sec); //test if(NPC_Util_GetArgStr( meindex, npcarg, sizeof(npcarg)) == NULL) { print("GambleBank:GetArgStrErr"); return; } if( NPC_Util_GetStrFromStrWithDelim( npcarg, "REPET", buf1, sizeof( buf1)) == NULL ) { return; } while( getStringFromIndexWithDelim(buf1, ",", k, buf2, sizeof(buf2)) != FALSE ) { Re_Pet[k-1] = atoi( buf2); if( Re_Pet[k-1] < 0 ) return; k++; if( (k-1) >= arraysizeof( Re_Pet) ) break; } //test end}void NPC_NewNpcManTalked( int meindex , int talkerindex , char *msg , int color ){ char buf1[256]; if( CHAR_getInt( talkerindex , CHAR_WHICHTYPE ) != CHAR_TYPEPLAYER ) { return; } if(NPC_Util_isFaceToFace( meindex ,talkerindex , 2) == FALSE) { if(NPC_Util_isFaceToChara( talkerindex, meindex, 1) == FALSE) return; } if( CHAR_getWorkInt( meindex , NPC_WORK_INDEX) >= 0 ) { sprintf( buf1,"%s","我正忙着呢!"); print("\n NPC_WORK_INDEX = %d ", CHAR_getWorkInt( meindex , NPC_WORK_INDEX)); CHAR_talkToCli( talkerindex, meindex, buf1, CHAR_COLORYELLOW); return; }else { CHAR_setWorkInt( meindex , NPC_WORK_INDEX, talkerindex); print("\n start : NPC_WORK_INDEX = talkerindex"); CHAR_setWorkInt( meindex, NPC_WORK_CURRENTTIME, NowTime.tv_sec); NPC_NewNpcMan_selectWindow( meindex, talkerindex, NEWNPC_START, 0); }}static void NPC_NewNpcMan_selectWindow( int meindex, int toindex, int num, int flg){ char npcarg[NPC_UTIL_GETARGSTR_BUFSIZE]; char token[256]; char token_str[][56]={"ERROR_MSG","START_MSG","END_MSG","ERROR_ALL"}; int buttontype = 0, windowtype = 0, windowno = 0; int fd = getfdFromCharaIndex( toindex); int petno = 718, petid =1479; int type_str = 0; windowtype = WINDOW_MESSAGETYPE_MESSAGE; if(NPC_Util_GetArgStr( meindex, npcarg, sizeof(npcarg)) == NULL) { print("GambleBank:GetArgStrErr"); CHAR_setWorkInt( meindex , NPC_WORK_INDEX, -1); return ; } if( CHAR_getWorkInt( meindex , NPC_WORK_INDEX) != toindex ) { sprintf( token,"%s","我正忙着呢!"); CHAR_talkToCli( toindex, meindex, token, CHAR_COLORYELLOW); return; } CHAR_setWorkInt( meindex, NPC_WORK_CURRENTTIME, NowTime.tv_sec); print("\n switch( num=%d)", num); switch( num) { case NEWNPC_START: type_str = 1; buttontype = WINDOW_BUTTONTYPE_OKCANCEL; windowno = NPC_NEWNPCMAN_START; break; case NEWNPC_MAN: { if( CHECK_YEARPET( toindex) == TRUE ) { type_str = 1; windowtype = WINDOW_MESSAGETYPE_PETSELECT; buttontype = WINDOW_BUTTONTYPE_CANCEL; windowno = NPC_NEWNPCMAN_MAN; }else { type_str = 3; buttontype = WINDOW_BUTTONTYPE_OK; windowno = NPC_NEWNPCMAN_END; CHAR_setWorkInt( meindex , NPC_WORK_INDEX, -1); } } break; case NEWNPC_END: type_str = 0; if( flg <= CHAR_MAXPETHAVE && flg >= 0 ) { petno = flg; if( ( petid = NPC_NewNpcManDelPet( meindex, toindex, petno)) >= 0 ) { if( NPC_NewNpcManAddPet( meindex, toindex, petid) == TRUE ) { type_str = 2; } } } CHAR_setWorkInt( meindex , NPC_WORK_INDEX, -1); buttontype = WINDOW_BUTTONTYPE_OK; windowno = NPC_NEWNPCMAN_END; break; } if(NPC_Util_GetStrFromStrWithDelim( npcarg, token_str[ type_str], token,sizeof( token) ) == NULL) { print("token_str[%d] err !", type_str); CHAR_setWorkInt( meindex , NPC_WORK_INDEX, -1); return; } lssproto_WN_send( fd, windowtype, buttontype, windowno, CHAR_getWorkInt( meindex, CHAR_WORKOBJINDEX), token);}void NPC_NewNpcManWindowTalked( int meindex, int talkerindex, int seqno, int select, char *data){ if( CHAR_getInt( talkerindex , CHAR_WHICHTYPE ) != CHAR_TYPEPLAYER ) { return; } if(NPC_Util_isFaceToFace( meindex ,talkerindex , 2) == FALSE) { if(NPC_Util_isFaceToChara( talkerindex, meindex, 1) == FALSE) return; } print("\n seqno=%d, select=%d", seqno, select); switch( seqno) { case NPC_NEWNPCMAN_START: if( select != WINDOW_BUTTONTYPE_YES && select != WINDOW_BUTTONTYPE_OK ) { CHAR_setWorkInt( meindex , NPC_WORK_INDEX, -1); return; } if(select==WINDOW_BUTTONTYPE_CANCEL) { CHAR_setWorkInt( meindex , NPC_WORK_INDEX, -1); }else { NPC_NewNpcMan_selectWindow( meindex, talkerindex, NEWNPC_MAN, -1); } break; case NPC_NEWNPCMAN_MAN: { int petnum; petnum = atoi( data)-1; print("\n petnum=%d", petnum); if(select==WINDOW_BUTTONTYPE_CANCEL) { CHAR_setWorkInt( meindex , NPC_WORK_INDEX, -1); }else { NPC_NewNpcMan_selectWindow( meindex, talkerindex, NEWNPC_END, petnum); } } break; case NPC_NEWNPCMAN_END: break; }}int NPC_NewNpcManDelPet(int meindex,int talker, int petsel){ int defpet; int fd = getfdFromCharaIndex( talker ); char msgbuf[64], szPet[128]; int k=0; int petindex=-1; petindex = CHAR_getCharPet( talker, petsel); if( !CHAR_CHECKINDEX(petindex) ) return -1; for( k=0;k<arraysizeof( Re_Pet); k++) { if( CHAR_getInt( petindex, CHAR_PETID) == Re_Pet[k] ) break; } if( k == arraysizeof( Re_Pet) ) { return -1; }else { print("\n FIND [%d,%d] & DEL !!", k, Re_Pet[k]); } if( CHAR_getWorkInt( CONNECT_getCharaindex( fd), CHAR_WORKBATTLEMODE) != BATTLE_CHARMODE_NONE ) return -1; defpet = CHAR_getInt( talker, CHAR_DEFAULTPET); if(defpet == petsel) { CHAR_setInt( talker, CHAR_DEFAULTPET, -1); lssproto_KS_send( fd, -1, TRUE); } snprintf( msgbuf,sizeof( msgbuf), "交出%s。", CHAR_getChar( petindex, CHAR_NAME)); // shan if(CHAR_getChar( petindex, CHAR_UNIQUECODE)!=NULL){ strncpy(uStr, CHAR_getChar( petindex, CHAR_UNIQUECODE), sizeof( STRING32)); }else{ strncpy(uStr, "Pet_Unicode_null", sizeof( STRING32)); } CHAR_talkToCli( talker, -1, msgbuf, CHAR_COLORWHITE); LogPet( CHAR_getChar( talker, CHAR_NAME ), CHAR_getChar( talker, CHAR_CDKEY ), CHAR_getChar( petindex, CHAR_NAME), CHAR_getInt( petindex, CHAR_LV), "TenseiDel", CHAR_getInt( talker,CHAR_FLOOR), CHAR_getInt( talker,CHAR_X ), CHAR_getInt( talker,CHAR_Y ), CHAR_getChar( petindex, CHAR_UNIQUECODE) ); CHAR_setCharPet( talker, petsel, -1); CHAR_endCharOneArray( petindex ); snprintf( szPet, sizeof( szPet ), "K%d", petsel); CHAR_sendStatusString( talker, szPet ); return Re_Pet[k];}BOOL NPC_NewNpcManAddPet(int meindex, int talker, int petid){ int ret; char msgbuf[64]; int enemynum; int i,j; int petindex, petindex2; //检查宠物栏是否有空位 for( i = 0 ;i < CHAR_MAXPETHAVE ; i++) { petindex = CHAR_getCharPet( talker, i); if( petindex == -1 ) break; } if( i == CHAR_MAXPETHAVE ) { snprintf( msgbuf,sizeof( msgbuf), "宠物已满!!"); CHAR_talkToCli( talker, -1, msgbuf, CHAR_COLORWHITE); return FALSE; } enemynum = ENEMY_getEnemyNum(); for( i = 0; i < enemynum; i ++ ) { //if( ENEMY_getInt( i, ENEMY_ID ) == petid ) if( ENEMY_getInt( i, ENEMY_TEMPNO ) == petid ) { print("\n ADD FIND [%d,%d]", i, ENEMY_getInt( i, ENEMY_TEMPNO )); break; } } if( i == enemynum ) return FALSE; ret = ENEMY_createPetFromEnemyIndex( talker, i); for( i = 0; i < CHAR_MAXPETHAVE; i ++ ) { if( CHAR_getCharPet( talker, i ) == ret ) break; } if( i == CHAR_MAXPETHAVE ) i = 0; if( CHAR_CHECKINDEX( ret ) == TRUE ){ CHAR_setMaxExpFromLevel( ret, CHAR_getInt( ret, CHAR_LV )); } petindex2 = CHAR_getCharPet(talker, i); if( !CHAR_CHECKINDEX( petindex2) ) return FALSE; snprintf( msgbuf,sizeof( msgbuf), "拿到%s。", CHAR_getChar(petindex2,CHAR_NAME)); CHAR_talkToCli( talker, -1, msgbuf, CHAR_COLORWHITE); for(j = 0; j < CHAR_MAXPETHAVE; j++){ petindex = CHAR_getCharPet(talker, j); if( !CHAR_CHECKINDEX( petindex) ) continue; CHAR_complianceParameter( petindex ); snprintf( msgbuf, sizeof( msgbuf ), "K%d", j ); CHAR_sendStatusString( talker, msgbuf ); snprintf( msgbuf, sizeof( msgbuf ), "W%d", j ); CHAR_sendStatusString( talker, msgbuf ); } // shan CHAR_setChar(petindex2, CHAR_UNIQUECODE, uStr); LogPet( CHAR_getChar( talker, CHAR_NAME ), CHAR_getChar( talker, CHAR_CDKEY ), CHAR_getChar( petindex2, CHAR_NAME), CHAR_getInt( petindex2, CHAR_LV), "TenseiGet", CHAR_getInt( talker,CHAR_FLOOR), CHAR_getInt( talker,CHAR_X ), CHAR_getInt( talker,CHAR_Y ), CHAR_getChar( petindex2, CHAR_UNIQUECODE) ); return TRUE;}BOOL CHECK_YEARPET( int toindex){ int i,k,petindex=-1; for( i=0;i<CHAR_MAXPETHAVE;i++) { petindex = CHAR_getCharPet( toindex, i); if( !CHAR_CHECKINDEX(petindex) ) continue; for( k=0;k<arraysizeof( Re_Pet); k++) { if( CHAR_getInt( petindex, CHAR_PETID) == Re_Pet[k] ) { print("\n check yearpet find it"); return TRUE; } } } return FALSE;}#endif*/#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -