#include "version.h" #include #include #include "char.h" #include "object.h" #include "char_base.h" #include "npcutil.h" #include "lssproto_serv.h" #include "enemy.h" #include "log.h" #include "battle.h" #include "readmap.h" #include "handletime.h" #include "npc_eventaction.h" #include "npc_newnpcman.h" #include "pet.h" #define NEWNPCMAN_STANDBY 5000 #define NEWNPCMAN_WAITTIME 150 enum { WINDOW_START=1, WINDOW_SELECT1, WINDOW_SELECT2, WINDOW_SELECT3, WINDOW_SELECTLOSTPET, WINDOW_DEFIND, WINDOW_WARP, WINDOW_END, NPC_PROGRAMEGINEER_START=1, NPC_PROGRAMEGINEER_SELECT1, NPC_PROGRAMEGINEER_SELECT2, NPC_PROGRAMEGINEER_SELECT3, NPC_PROGRAMEGINEER_SELECTLOSTPET, NPC_PROGRAMEGINEER_DEFIND, NPC_PROGRAMEGINEER_END, }; enum { NPC_WORK_CURRENTTIME = CHAR_NPCWORKINT1, /* NPC_WORK_ROUTETOY = CHAR_NPCWORKINT2, NPC_WORK_ROUTEPOINT = CHAR_NPCWORKINT3, NPC_WORK_ROUNDTRIP = CHAR_NPCWORKINT4, NPC_WORK_MODE = CHAR_NPCWORKINT5, NPC_WORK_CURRENTROUTE = CHAR_NPCWORKINT6, NPC_WORK_ROUTEMAX = CHAR_NPCWORKINT7, NPC_WORK_WAITTIME = CHAR_NPCWORKINT8, NPC_WORK_CURRENTTIME = CHAR_NPCWORKINT9, NPC_WORK_SEFLG = CHAR_NPCWORKINT10, */ }; /* char UserBBIs[12][256]={ "小矮子", "赛亚人", "辫子男孩", "酷哥", "熊皮男", "大个", "小矮妹", "熊皮妹", "帽子妹", "短法发夹妹", "手套女", "辣妹" }; char PetBBIs[4][256]={//格鲁西斯 贝鲁卡 金格萨贝鲁 贝鲁伊卡 "格鲁西斯-红虎", "贝鲁卡-绿虎", "金格萨贝鲁-金虎", "贝鲁伊卡-黄虎" }; int PlayerBBI[6*2][4]={ { 100000, 100005, 100010, 100015 }, //小矮子 { 100025, 100030, 100035, 100020 }, //赛亚人 { 100055, 100050, 100045, 100040 }, //辫子男孩 { 100060, 100065, 100070, 100075 }, //酷哥 { 100095, 100085, 100090, 100080 }, //熊皮男 { 100100, 100115, 100110, 100115 }, //大个 { 100135, 100120, 100125, 100130 }, //小矮妹 { 100145, 100140, 100150, 100155 }, //熊皮妹 { 100165, 100170, 100160, 100175 }, //帽子妹 { 100190, 100195, 100185, 100180 }, //短发发夹妹 { 100200, 100210, 100215, 100205 }, //手套女 { 100230, 100225, 100220, 100235 } //辣妹 }; */ static int checkPc[48][3]; static void NPC_NewNpcMan_selectWindow( int meindex, int toindex, int num, int flg); void NPC_reCheckMyPetUnusual( int meindex, int toindex);//检查宠物异常 BOOL CHECK_ReplacePET( int toindex); //更换宠物 void NPC_reCheckItemPilenum( int meindex, int toindex);//还原铁枪三堆叠 BOOL CHECK_ITEMEQUIT( int toindex);//更换灵力铠 BOOL CHECK_PETBBI( int toindex);//修正宠物图号 #ifdef _PET_LOSTPET BOOL NPC_reFindMyLostPet( int meindex, int toindex, char *buf); BOOL NPC_getLostPetString( int meindex, int toindex); BOOL NPC_backupLostPetString( int toindex); static char petstring[7][2048]={"","","","","","",""}; #endif BOOL NPC_NewNpcManInit( int meindex ) { char npcarg[NPC_UTIL_GETARGSTR_BUFSIZE]; if(NPC_Util_GetArgStr( meindex, npcarg, sizeof(npcarg))==NULL){ print("TRANSER_MAN: GetArgStrErr!!"); return FALSE; } { int i; for( i=0; i<48; i++){ if( i == 0 ){ checkPc[i][0]=30000; checkPc[i][1]=30024; checkPc[i][2]=100000; }else{ checkPc[i][0] = checkPc[i-1][0] + 25; checkPc[i][1] = checkPc[i-1][1] + 25; checkPc[i][2] = checkPc[i-1][2] + 5; } // print("ANDY checkPc:%d[%d,%d,%d]\n", i, checkPc[i][0], checkPc[i][1], checkPc[i][2]); } } CHAR_setInt( meindex, CHAR_WHICHTYPE, CHAR_NEWNPCMAN); CHAR_setWorkInt( meindex, NPC_WORK_CURRENTTIME, NowTime.tv_sec); return TRUE; } void NPC_NewNpcManLoop( int meindex) { } void NPC_NewNpcManTalked( int meindex , int talkerindex , char *msg , int color ) { char npcarg[NPC_UTIL_GETARGSTR_BUFSIZE]; 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(NPC_Util_GetArgStr( meindex, npcarg, sizeof(npcarg))==NULL){ print("TRANSER_MAN: GetArgStrErr!!"); return; } CHAR_setWorkInt( talkerindex, CHAR_WORKSHOPRELEVANT, 0); if( CHAR_getInt( talkerindex, CHAR_BASEBASEIMAGENUMBER) != 101578 ){ NPC_NewNpcMan_selectWindow( meindex, talkerindex, WINDOW_SELECT1, 0); return; } NPC_NewNpcMan_selectWindow( meindex, talkerindex, WINDOW_START, 0); } static void NPC_NewNpcMan_selectWindow( int meindex, int toindex, int num, int flg) { char npcarg[NPC_UTIL_GETARGSTR_BUFSIZE]; char token[256]; int buttontype = 0, windowtype = 0, windowno = 0; int fd = getfdFromCharaIndex( toindex); windowtype = WINDOW_MESSAGETYPE_MESSAGE; if(NPC_Util_isFaceToFace( meindex ,toindex , 2) == FALSE) { if(NPC_Util_isFaceToChara( toindex, meindex, 1) == FALSE) return; } memset( npcarg, 0, sizeof( npcarg)); if(NPC_Util_GetArgStr( meindex, npcarg, sizeof(npcarg))==NULL){ return; } memset( token, 0, sizeof( token)); switch( num) { case WINDOW_START: if( NPC_Util_GetStrFromStrWithDelim( npcarg, "START_MSG", token, sizeof( token) ) == NULL) { return; } buttontype = WINDOW_BUTTONTYPE_YESNO; windowno = NPC_PROGRAMEGINEER_DEFIND; break; case WINDOW_SELECT1: sprintf(token," 请选择" "\n 《修正宠物异常》" "\n 《修正宠物图号》" "\n 《更换灵力铠》" #ifdef _PET_LOSTPET "\n 《领回遗失宠物》" #endif // "\n 《还原铁枪三堆叠》" ); windowtype = WINDOW_MESSAGETYPE_SELECT; buttontype = WINDOW_BUTTONTYPE_CANCEL; windowno = NPC_PROGRAMEGINEER_SELECT2; break; case WINDOW_SELECT2: switch( flg){ case 1://修正宠物异常 NPC_reCheckMyPetUnusual( meindex, toindex); CHAR_talkToCli( toindex, -1, "身上宠物检查完毕!", CHAR_COLORYELLOW); return; break; case 2://修正宠物图号 CHECK_PETBBI( toindex); return; break; case 3://更换灵力铠 if( CHECK_ITEMEQUIT( toindex) == TRUE ){ CHAR_talkToCli( toindex, -1, "检查完毕!", CHAR_COLORYELLOW); } return; break; case 4: #ifdef _PET_LOSTPET if( NPC_reFindMyLostPet( meindex, toindex, token) == FALSE ){ CHAR_talkToCli( toindex, -1, "查无资料!", CHAR_COLORYELLOW); return; } windowtype = WINDOW_MESSAGETYPE_SELECT; buttontype = WINDOW_BUTTONTYPE_CANCEL; windowno = NPC_PROGRAMEGINEER_SELECTLOSTPET; #endif break; case 5: //还原铁枪三堆叠 // NPC_reCheckItemPilenum( meindex, toindex); return; break; } break; /* case WINDOW_SELECT3: { int petnum, petindex; petnum = atoi( data)-1; if( petnum >= CHAR_MAXPETHAVE || petnum < 0 ) return; petindex = CHAR_getCharPet( talker, petsel); if( !CHAR_CHECKINDEX(petindex) ) return; break; } */ case WINDOW_SELECTLOSTPET: #ifdef _PET_LOSTPET { int ret, i, ti, ltime, cost; Char ch; char msgbuf[256]; char petstring1[2048]; int havepetelement = CHAR_getCharPetElement( toindex); ti = flg; if( havepetelement < 0 ){ CHAR_talkToCli( toindex, -1, "宠物栏位已满!", CHAR_COLORYELLOW); return; } if( NPC_getLostPetString( meindex, toindex) == FALSE ) { CHAR_talkToCli( toindex, -1, "领取宠物失败!", CHAR_COLORYELLOW); return; } if( getStringFromIndexWithDelim( petstring[ti-1], "#", 2, petstring1, sizeof( petstring1)) == FALSE ){ CHAR_talkToCli( toindex, -1, "领取宠物失败!", CHAR_COLORYELLOW); return; }else{ char buf1[256]; if( getStringFromIndexWithDelim( petstring[ti-1], "|", 6, buf1, sizeof( buf1)) == FALSE ) return; ltime = atoi(buf1); ltime = time( NULL) - ltime; ltime = ltime/(60*60*24); if( getStringFromIndexWithDelim( petstring[ti-1], "|", 4, buf1, sizeof( buf1)) == FALSE ) return; cost = atoi( buf1); cost = cost + (ltime*10000); if( CHAR_getInt( toindex, CHAR_GOLD) < cost ) { sprintf( buf1, "宠物已寄放%d天,共需%d石币才可领回。", ltime, cost); CHAR_talkToCli( toindex, meindex, buf1, CHAR_COLORYELLOW); return; } } ret = CHAR_makePetFromStringToArg( petstring1, &ch, -2); strcpy( petstring[ti-1], ""); if( ret ) { char buf1[256]; int petindex = PET_initCharOneArray( &ch ); if( !CHAR_CHECKINDEX( petindex) ){ CHAR_talkToCli( toindex, -1, "领取宠物失败!", CHAR_COLORYELLOW); return; } print("ANDY petindex:%d[%s]\n", petindex, CHAR_getChar( petindex, CHAR_NAME) ); CHAR_complianceParameter( petindex ); CHAR_setInt( petindex, CHAR_HP, CHAR_getWorkInt( petindex, CHAR_WORKMAXHP)); CHAR_setWorkInt( petindex, CHAR_WORKPLAYERINDEX, toindex); CHAR_setCharPet( toindex, havepetelement, petindex); CHAR_setChar( petindex, CHAR_OWNERCDKEY, CHAR_getChar( toindex, CHAR_CDKEY)); CHAR_setChar( petindex, CHAR_OWNERCHARANAME, CHAR_getChar( toindex, CHAR_NAME)); if( NPC_backupLostPetString( toindex) == FALSE ){ print("ANDY err backup petstring !!\n"); return; } sprintf( buf1, "LostPGet:%d", cost); LogPet( CHAR_getChar( toindex, CHAR_NAME ), CHAR_getChar( toindex, CHAR_CDKEY ), CHAR_getChar( petindex, CHAR_NAME), CHAR_getInt( petindex, CHAR_LV), buf1, CHAR_getInt( toindex,CHAR_FLOOR), CHAR_getInt( toindex,CHAR_X ), CHAR_getInt( toindex,CHAR_Y ), CHAR_getChar( petindex, CHAR_UNIQUECODE) // shan 2001/12/14 ); sprintf( buf1, "领取宠物%s。", CHAR_getUseName( petindex)); CHAR_talkToCli( toindex, meindex, buf1, CHAR_COLORYELLOW); for( i = 0; i < CHAR_MAXPETHAVE; i++){ int petindex = CHAR_getCharPet( toindex, i); if( !CHAR_CHECKINDEX( petindex) ) continue; CHAR_complianceParameter( petindex ); snprintf( msgbuf, sizeof( msgbuf ), "K%d", i ); CHAR_sendStatusString( toindex, msgbuf ); snprintf( msgbuf, sizeof( msgbuf ), "W%d", i ); CHAR_sendStatusString( toindex, msgbuf ); } CHAR_DelGold( toindex, cost); }else{ CHAR_talkToCli( toindex, -1, "领取宠物失败!", CHAR_COLORYELLOW); return; } return; } #endif return; break; case WINDOW_DEFIND: { int i; int face = CHAR_getInt( toindex, CHAR_FACEIMAGENUMBER); if( NPC_Util_GetStrFromStrWithDelim( npcarg, "CHECK_MSG", token, sizeof( token) ) == NULL) { return; } for( i=0; i<48; i++){ if( face >= checkPc[i][0] && face < checkPc[i][1] ) break; } if( i >= 48 )return; CHAR_setWorkInt( toindex, CHAR_WORKNPCMETAMO, meindex); CHAR_setInt( toindex, CHAR_BASEIMAGENUMBER, checkPc[i][2]); CHAR_complianceParameter( toindex ); CHAR_sendCToArroundCharacter( CHAR_getWorkInt( toindex , CHAR_WORKOBJINDEX )); CHAR_send_P_StatusString( toindex , CHAR_P_STRING_BASEBASEIMAGENUMBER); buttontype = WINDOW_BUTTONTYPE_YESNO; windowno = NPC_PROGRAMEGINEER_END; } break; case WINDOW_END: { CHAR_setWorkInt( toindex, CHAR_WORKNPCMETAMO, -1); CHAR_setInt( toindex, CHAR_BASEBASEIMAGENUMBER, CHAR_getInt( toindex, CHAR_BASEIMAGENUMBER) ); CHAR_complianceParameter( toindex ); CHAR_sendCToArroundCharacter( CHAR_getWorkInt( toindex , CHAR_WORKOBJINDEX )); CHAR_send_P_StatusString( toindex , CHAR_P_STRING_BASEBASEIMAGENUMBER); return; } break; } 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(NPC_Util_isFaceToFace( meindex ,talkerindex , 2) == FALSE) { if(NPC_Util_isFaceToChara( talkerindex, meindex, 1) == FALSE) return; } if( select == WINDOW_BUTTONTYPE_CANCEL || select == WINDOW_BUTTONTYPE_NO){ CHAR_setWorkInt( talkerindex, CHAR_WORKSHOPRELEVANT, 0); CHAR_setWorkInt( talkerindex, CHAR_WORKNPCMETAMO, -1); return; } switch( seqno) { case NPC_TRANSERMAN_START: break; case NPC_PROGRAMEGINEER_SELECT1: NPC_NewNpcMan_selectWindow( meindex, talkerindex, WINDOW_SELECT1, atoi( data)); break; case NPC_PROGRAMEGINEER_SELECT2: NPC_NewNpcMan_selectWindow( meindex, talkerindex, WINDOW_SELECT2, atoi( data)); break; case NPC_PROGRAMEGINEER_SELECT3: NPC_NewNpcMan_selectWindow( meindex, talkerindex, WINDOW_SELECT3, atoi( data)); break; case NPC_PROGRAMEGINEER_SELECTLOSTPET: NPC_NewNpcMan_selectWindow( meindex, talkerindex, WINDOW_SELECTLOSTPET, atoi( data)); break; case NPC_PROGRAMEGINEER_DEFIND: NPC_NewNpcMan_selectWindow( meindex, talkerindex, WINDOW_DEFIND, atoi( data)); break; case NPC_PROGRAMEGINEER_END: NPC_NewNpcMan_selectWindow( meindex, talkerindex, WINDOW_END, atoi( data)); break; } } BOOL CHECK_ITEMEQUIT( int toindex) { int i, itemindex; char token[256]; for (i = CHAR_STARTITEMARRAY; i < CHAR_MAXITEMHAVE; i ++) { itemindex = CHAR_getItemIndex( toindex, i); if( ITEM_getInt( itemindex, ITEM_ID) == 19646 ){ CHAR_DelItem( toindex, i); itemindex = -1; itemindex = ITEM_makeItemAndRegist( 1292); if( !ITEM_CHECKINDEX( itemindex) ){ }else{ int ret = CHAR_addItemSpecificItemIndex( toindex, itemindex); if( ret < 0 || ret >= CHAR_MAXITEMHAVE ) { ITEM_endExistItemsOne( itemindex); continue; } sprintf( token,"拿到%s", ITEM_getChar( itemindex, ITEM_NAME)); CHAR_talkToCli( toindex, -1, token, CHAR_COLORYELLOW ); CHAR_sendItemDataOne( toindex, ret); continue; } } if( ITEM_getInt( itemindex, ITEM_ID) == 1292 && ITEM_getInt( itemindex, ITEM_MAXDAMAGECRUSHE) > 0 ){ ITEM_setInt( itemindex, ITEM_MAXDAMAGECRUSHE, 0); ITEM_setInt( itemindex, ITEM_DAMAGECRUSHE, 0); sprintf(token,"修正%s损坏度", ITEM_getChar( itemindex, ITEM_NAME)); CHAR_sendItemDataOne( toindex, i); CHAR_talkToCli( toindex, -1, token, CHAR_COLORYELLOW); } } // 寄放店 for (i = 0; i < CHAR_MAXPOOLITEMHAVE; i++) { if( ITEM_getInt( itemindex, ITEM_ID) == 1292 && ITEM_getInt( itemindex, ITEM_MAXDAMAGECRUSHE) > 0 ){ ITEM_setInt( itemindex, ITEM_MAXDAMAGECRUSHE, 0); ITEM_setInt( itemindex, ITEM_DAMAGECRUSHE, 0); sprintf(token,"修正寄放店中%s损坏度", ITEM_getChar( itemindex, ITEM_NAME)); CHAR_talkToCli( toindex, -1, token, CHAR_COLORYELLOW); } } return TRUE; } BOOL CHECK_PETBBI( int toindex) { int i, petindex, PetID; BOOL Finds = FALSE; char token[256]; for( i=0; i < CHAR_MAXPETHAVE; i++) { int parry, array, PetBBI; petindex = CHAR_getCharPet( toindex, i); if( !CHAR_CHECKINDEX( petindex) ) continue; PetID = CHAR_getInt( petindex, CHAR_PETID); array = ENEMY_getEnemyArrayFromTempNo( PetID); if( !ENEMY_CHECKINDEX( array)) continue; parry = ENEMYTEMP_getEnemyTempArray( array); PetBBI = ENEMYTEMP_getInt( parry, E_T_IMGNUMBER); if( CHAR_getInt( petindex, CHAR_BASEBASEIMAGENUMBER) != PetBBI || CHAR_getInt( petindex, CHAR_BASEIMAGENUMBER) != PetBBI ){ CHAR_setInt( petindex, CHAR_BASEBASEIMAGENUMBER, PetBBI); CHAR_setInt( petindex, CHAR_BASEIMAGENUMBER, PetBBI); sprintf( token, "修正%s图号", CHAR_getUseName( petindex)); CHAR_talkToCli( toindex, -1, token, CHAR_COLORYELLOW); Finds = TRUE; } CHAR_setInt( petindex, CHAR_EARTHAT, ENEMYTEMP_getInt( parry, E_T_EARTHAT) ); CHAR_setInt( petindex, CHAR_WATERAT, ENEMYTEMP_getInt( parry, E_T_WATERAT) ); CHAR_setInt( petindex, CHAR_FIREAT, ENEMYTEMP_getInt( parry, E_T_FIREAT) ); CHAR_setInt( petindex, CHAR_WINDAT, ENEMYTEMP_getInt( parry, E_T_WINDAT) ); char tempname[128]; if(strstr(CHAR_getChar(petindex,CHAR_NAME),"*")!=NULL) sprintf(tempname,"*%s",ENEMYTEMP_getChar( parry, E_T_NAME)); else sprintf(tempname,"%s",ENEMYTEMP_getChar( parry, E_T_NAME)); CHAR_setChar( petindex, CHAR_NAME, tempname); CHAR_setChar( petindex, CHAR_USERPETNAME , ""); } for( i=0; i %s (%s:%s)(file:%s %d) !! \n", petID, PetNAME, CHAR_getUseName( toindex), CHAR_getChar( toindex, CHAR_CDKEY), __FILE__, __LINE__ ); } } for( i=0; i 0 )continue; if( i == CHAR_getInt( toindex, CHAR_DEFAULTPET) ) { int fd = getfdFromCharaIndex( toindex); CHAR_setInt( toindex, CHAR_DEFAULTPET, -1); lssproto_KS_send( fd, -1, TRUE); } snprintf( szPet,sizeof( szPet), "交出%s。", CHAR_getUseName( petindex) ); CHAR_talkToCli( toindex, -1, szPet, CHAR_COLORYELLOW); LogPet( CHAR_getChar( toindex, CHAR_NAME ), CHAR_getChar( toindex, CHAR_CDKEY ), CHAR_getChar( petindex, CHAR_NAME), CHAR_getInt( petindex, CHAR_LV), "TenseiDel", CHAR_getInt( toindex,CHAR_FLOOR), CHAR_getInt( toindex,CHAR_X ), CHAR_getInt( toindex,CHAR_Y ), CHAR_getChar( petindex, CHAR_UNIQUECODE) ); Finds = TRUE; CHAR_setCharPet( toindex, i, -1); CHAR_endCharOneArray( petindex ); array = ENEMY_getEnemyArrayFromTempNo( 1133); if( !ENEMY_CHECKINDEX( array)) continue; ret = ENEMY_createPetFromEnemyIndex( toindex, array); if( !CHAR_CHECKINDEX( ret ) ) continue; snprintf( szPet, sizeof( szPet), "拿到%s。", CHAR_getUseName( ret) ); CHAR_talkToCli( toindex, -1, szPet, CHAR_COLORWHITE); LogPet( CHAR_getChar( toindex, CHAR_NAME ), CHAR_getChar( toindex, CHAR_CDKEY ), CHAR_getChar( ret, CHAR_NAME), CHAR_getInt( ret, CHAR_LV), "TenseiGet", CHAR_getInt( toindex,CHAR_FLOOR), CHAR_getInt( toindex,CHAR_X ), CHAR_getInt( toindex,CHAR_Y ), CHAR_getChar( ret, CHAR_UNIQUECODE) ); } for( i=0; i 1 ){ int itemID, pilenum=1, newindex; itemID = ITEM_getInt( itemindex, ITEM_ID); if( !ITEM_CHECKITEMTABLE( itemID) ) continue; pilenum = ITEM_getInt( itemindex, ITEM_USEPILENUMS); while( pilenum > 1 ){ int ti = CHAR_findEmptyItemBox( toindex); if( ti == -1 ){ CHAR_sendItemDataOne( toindex, i); CHAR_talkToCli( toindex, -1, "道具栏位已满。", CHAR_COLORYELLOW); return; } newindex = ITEM_makeItemAndRegist( itemID); if( !ITEM_CHECKINDEX( newindex) ) break; CHAR_setItemIndex( toindex , ti, newindex); CHAR_sendItemDataOne( toindex, ti); pilenum--; ITEM_setInt( itemindex, ITEM_USEPILENUMS, pilenum); } if( ITEM_getInt( itemindex, ITEM_CANBEPILE) != ITEMTBL_getInt( itemID, ITEM_CANBEPILE) ) ITEM_setInt( itemindex, ITEM_CANBEPILE, ITEMTBL_getInt( itemID, ITEM_CANBEPILE) ); CHAR_sendItemDataOne( toindex, i); } } CHAR_talkToCli( toindex, -1, "铁枪三处理完毕。", CHAR_COLORYELLOW); } #ifdef _PET_LOSTPET BOOL NPC_reFindMyLostPet( int meindex, int toindex, char *buf) { //地上0 溜宠 1 宠邮 2 FILE *fp = NULL; char *CdKey=NULL; int lv=0, cost, ltime, count=0, i, type; char filename[256], line[2048], buf1[256]; char petname[256], typebuf[256]; char buf2[10][256]={"\n","\n","\n","\n","\n", "\n","\n","\n","\n","\n" }; CdKey = CHAR_getChar( toindex, CHAR_CDKEY ); if( CdKey == NULL ) return FALSE; sprintf( filename, "lostpet/%s.txt", CdKey); strcpy( buf, "==宠物遗失纪录==\n"); if( (fp=fopen( filename, "r")) == NULL ) return FALSE; while( fgets( line , sizeof( line ) , fp ) && count < 7){ if( line == NULL ) continue; if( getStringFromIndexWithDelim( line, "|", 1, buf1, sizeof( buf1)) == FALSE ) continue; if( strcmp( CHAR_getChar( toindex, CHAR_CDKEY ), buf1 )) continue; if( getStringFromIndexWithDelim( line, "|", 6, buf1, sizeof( buf1)) == FALSE ) continue; ltime = atoi(buf1); ltime = time( NULL) - ltime; ltime = ltime/(60*60*24); if( ltime > 14 ) continue;//续放14天 if( getStringFromIndexWithDelim( line, "|", 2, petname, sizeof( petname)) == FALSE ) continue; if( getStringFromIndexWithDelim( line, "|", 3, buf1, sizeof( buf1)) == FALSE ) continue; lv = atoi( buf1); if( getStringFromIndexWithDelim( line, "|", 4, buf1, sizeof( buf1)) == FALSE ) continue; cost = atoi( buf1); if( getStringFromIndexWithDelim( line, "#", 3, buf1, sizeof( buf1)) == FALSE ) continue; type = atoi( buf1); if( type == 1 ){ strcpy( typebuf, "溜宠"); }else if( type == 2 ){ strcpy( typebuf, "宠邮"); }else{ strcpy( typebuf, "地上"); } sprintf( buf2[count++], "%s LV:%d石币:%d(%d天%s)\n", petname, lv, cost, ltime, typebuf); } fclose( fp); for( i=0; i<7; i++){ strcat( buf, buf2[i]); } if( count == 0 ) return FALSE; return TRUE; } BOOL NPC_getLostPetString( int meindex, int toindex) { FILE *fp = NULL; char *CdKey=NULL; int count=0, i, ltime; char filename[256], line[2048], buf1[256]; for( i=0; i<7; i++) strcpy( petstring[i], ""); CdKey = CHAR_getChar( toindex, CHAR_CDKEY ); if( CdKey == NULL ) return FALSE; sprintf( filename, "lostpet/%s.txt", CdKey); if( (fp=fopen( filename, "r")) == NULL ) return FALSE; while( fgets( line , sizeof( line ) , fp ) && count < 7){ if(strlen( line) <= 0 ) continue; // if( getStringFromIndexWithDelim( line, "#", 2, buf1, sizeof( buf1)) == FALSE ) return FALSE; // Terry fix 读取时没有判断时间 2004/09/22 if(getStringFromIndexWithDelim(line,"|",6,buf1,sizeof(buf1)) == FALSE) continue; ltime = atoi(buf1); ltime = time( NULL) - ltime; ltime = ltime/(60*60*24); if(ltime > 14) continue;//续放14天 // Terry end strcpy( petstring[count++], line); } fclose( fp); return TRUE; } BOOL NPC_backupLostPetString( int toindex) { FILE *fp = NULL; char *CdKey=NULL; int i, count=0; char filename[256]; CdKey = CHAR_getChar( toindex, CHAR_CDKEY ); if( CdKey == NULL ) return FALSE; sprintf( filename, "lostpet/%s.txt", CdKey); if( (fp=fopen( filename, "w")) == NULL ) return FALSE; for( i=0; i<7; i++){ if( strlen( petstring[i]) <= 0 ) continue; fprintf( fp, "%s", petstring[i]); count++; } fclose( fp); if( count == 0 ) remove( filename); return TRUE; } /* #ifdef _NEW_WARPMAN #include "npc_newnpcman.h" #define NEWNPCMAN_STANDBY 5000 #define NEWNPCMAN_WAITTIME 150 enum{ NPC_NEWNPCMAN_START=21, 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]; // shan char 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