📄 npc_transmigration.c
字号:
case CHAR_WINDOWTYPE_PETTRANS_SELECT: //是否让宠物转生 if( select == WINDOW_BUTTONTYPE_YES) { NPC_PetTransMan_selectWindow( meindex, talkerindex, 2, 0); }else { NPC_PetTransMan_selectWindow( meindex, talkerindex, 5, 0); } break; case CHAR_WINDOWTYPE_PETTRANS_SELPET: //选宠 if(select==WINDOW_BUTTONTYPE_CANCEL) { NPC_PetTransMan_selectWindow( meindex, talkerindex, 5,-1 ); }else { Pet_Select = datanum; NPC_PetTransMan_selectWindow( meindex, talkerindex, 3, datanum ); } break; case CHAR_WINDOWTYPE_PETTRANS_MAIN1: //确定宠物 确定/取消 if(select==WINDOW_BUTTONTYPE_YES){ NPC_PetTransMan_selectWindow( meindex, talkerindex, 4, Pet_Select); }else { NPC_PetTransMan_selectWindow( meindex, talkerindex, 5, -1); } break; case CHAR_WINDOWTYPE_PETTRANS_END: //宠物转生结束结束 CHAR_setWorkInt( talkerindex, CHAR_WORKSHOPRELEVANT, 0); break; #endif }}//************************************************************//************************************************************BOOL NPC_TransmigratiomWarp(int meindex, int toindex, char *buf){ char buf2[512]; char buf3[128]; char buf4[64]; int floor=0 , x = 0, y = 0; int i = 1; int ret; while(getStringFromIndexWithDelim( buf,",",i,buf2,sizeof( buf2)) != FALSE) { i++; if(strstr(buf2,"Warp") != NULL) { getStringFromIndexWithDelim( buf2 ,"=" ,2, buf3 ,sizeof(buf3)); //白夫失 ret = getStringFromIndexWithDelim( buf3,".",1 ,buf4 ,sizeof( buf4)); if(ret ==FALSE) return FALSE; floor = atoi(buf4); ret = getStringFromIndexWithDelim( buf3,".",2 ,buf4 ,sizeof( buf4)); if(ret ==FALSE) return FALSE; x = atoi(buf4); ret = getStringFromIndexWithDelim( buf3,".",3 ,buf4 ,sizeof( buf4)); if(ret ==FALSE) return FALSE; y = atoi(buf4); } } //伐□皿燮及民尼永弁 if( MAP_IsValidCoordinate( floor, x, y )== FALSE ){ return FALSE; } //ttom /* { int tenseiNo; tenseiNo=CHAR_getInt( toindex, CHAR_TRANSMIGRATION); CHAR_setInt( toindex,CHAR_SKILLUPPOINT,tenseiNo*10); print("\n the set the skillpoint %d",tenseiNo*10); CHAR_sendStatusString( toindex , "P"); } */ //ttom //伐□皿今六月 CHAR_warpToSpecificPoint(toindex, floor, x, y); return TRUE;}//************************************************************//// ㄟ“扔丞幼伙// ㄠ“穴伉瓜旦// ㄡ“斥乓斥乓// ㄢ“市伙正□瓜// ≡ㄠ“巨仿□//************************************************************int NPC_StartpointCheck(int meindex,int talker){ int point; int shift = 0; point = CHAR_getInt( talker, CHAR_SAVEPOINT); for(shift = 0; shift < 4 ;shift++){ if( (point & ( 1<< shift)) == ( 1<< shift)) { return shift; } } return -1;}//********************************************************////////********************************************************static int NPC_TransmigrationCheck(int meindex, int talker){ // 鳖戏椭瘀 //伊矛伙互ㄧㄟ动晓 //ㄣ勾及箪岭奶矛件玄互蔽歹匀化中月仇午 int i,j,k=0; int ch_no[4] = {39,40,42,46}; int petindex; int num;// int petid[4] = {1, 2, 3, 4}; //矢永玄及 毛隙烂 int petid[4] = {693, 694, 695, 696}; //矢永玄及 毛隙烂// int petidfinal[4] = {11, 12, 13, 14}; //矢永玄及 毛隙烂 int petidfinal[4] = {693, 694, 695, 696}; //矢永玄及 毛隙烂 // Robin 2001/03/05 //CHAR_setWorkInt(talker,CHAR_TENSEICHECKED,FALSE);#ifdef _TRANS_6 if(CHAR_getInt( talker, CHAR_TRANSMIGRATION) >= 6){ return 6; }#else if(CHAR_getInt( talker, CHAR_TRANSMIGRATION) >= 5){ return 5; }#endif //伊矛伙互ㄧㄟ动晓 if(CHAR_getInt( talker, CHAR_LV) < 80) return -1; //奶矛件玄及白仿弘民尼永弁#ifdef _TRANS_6 if(CHAR_getInt( talker, CHAR_TRANSMIGRATION) < 6){#else if(CHAR_getInt( talker, CHAR_TRANSMIGRATION) < 5){#endif for(i = 0; i < 4 ;i++) if(NPC_EventCheckFlg( talker, ch_no[i] ) == FALSE) return -1; } num = CHAR_getInt(talker, CHAR_TRANSMIGRATION); if(num < 4 ){ //隙烂矢永玄毛手匀化中月井矢永玄民尼永弁 for(i=0 ; i < CHAR_MAXPETHAVE ; i++){ petindex = CHAR_getCharPet( talker, i); if( petindex == -1 ) continue; //ttom //print("petid=%d ",CHAR_getInt( petindex, CHAR_PETID)); if(CHAR_getInt( petindex, CHAR_PETID) != petid[num]) continue;// if(CHAR_getInt( petindex, CHAR_LV) < PETLEVEL) continue; break; } if(i == CHAR_MAXPETHAVE) return -1; }else#ifdef _TRANS_6 if( num == 4 )#endif { for(j = 0; j < 4 ;j++){ for(i=0 ; i < CHAR_MAXPETHAVE ; i++){ petindex = CHAR_getCharPet( talker, i); if( petindex == -1 ) continue; // print("petid=%d ",CHAR_getInt( petindex, CHAR_PETID)); if(CHAR_getInt( petindex, CHAR_PETID) != petidfinal[j]) continue; k++; break; } } if(k < 4) return -1; }#ifdef _TRANS_6 else{ /*int lasttalkelder = 2;//乌力 if( CHAR_getInt( talker, CHAR_LASTTALKELDER) == 1 )//玛丽娜丝 lasttalkelder = 112;//凯比 else if( CHAR_getInt( talker, CHAR_LASTTALKELDER) == 2 )//加加 lasttalkelder = 102;//克克尔 else if( CHAR_getInt( talker, CHAR_LASTTALKELDER) == 3 )//卡鲁它那 lasttalkelder = 34;//威伯 print("\npetid:%d",lasttalkelder);*/ //找看看有没有带2转出生宠物 for(i=0 ; i < CHAR_MAXPETHAVE ; i++){ petindex = CHAR_getCharPet( talker, i); if( petindex == -1 ) continue; if( CHAR_getInt( petindex, CHAR_TRANSMIGRATION) == 2 && ( CHAR_getInt( petindex, CHAR_PETID) == 2 || CHAR_getInt( petindex, CHAR_PETID) == 112 || CHAR_getInt( petindex, CHAR_PETID) == 102 || CHAR_getInt( petindex, CHAR_PETID) == 34 ) ) break; //if(CHAR_getInt( petindex, CHAR_TRANSMIGRATION) != 2 || CHAR_getInt( petindex, CHAR_PETID) != lasttalkelder ) continue; } if(i == CHAR_MAXPETHAVE){ CHAR_talkToCli( talker,-1,"你没有带2转的出生宠哦!",CHAR_COLORWHITE); return -1; } if(NPC_EventCheckFlg( talker, 63) == FALSE){ print("\nerr63");return -1;} if(NPC_EventCheckFlg( talker, 136) == FALSE){ print("\nerr136");return -1;} if(NPC_EventCheckFlg( talker, 175) == FALSE){ print("\nerr175");return -1;} if(NPC_EventCheckFlg( talker, 176) == FALSE){ print("\nerr176");return -1;} //检查有无15个魔界之门碎片 j=0; for( i=0 ; i<CHAR_MAXITEMHAVE ; i++ ){ int itemindex; itemindex = CHAR_getItemIndex(talker,i); if( ITEM_CHECKINDEX(itemindex) == FALSE )continue; if( ITEM_getInt( itemindex, ITEM_ID ) == 20613 ) { ++j; } } if( j < 15 ){ CHAR_talkToCli( talker,-1,"你没有带15个魔界之门的碎片哦!",CHAR_COLORWHITE); print("\nitem:%d",j); return -1; } }#endif // Robin 2001/03/05 //CHAR_setWorkInt(talker,CHAR_TENSEICHECKED,TRUE); return CHAR_getInt(talker, CHAR_TRANSMIGRATION);}BOOL NPC_TransmigrationMain(int meindex, int toindex, char *buf){ int i = 1; char buf2[128]; char buf3[64]; char buf4[32]; int item = 10; int pet = 5; int present = 0; int ten_no; int work[10]; int fd = getfdFromCharaIndex( toindex );#ifdef _ADD_POOL_ITEM // WON ADD 增加可寄放的道具 int tran_pool_item[5] = { 4, 4, 4, 4, 4 }; // 增加的道具寄放数 int tran_pool_pet[5] = { 2, 2, 2, 2, 2}; // 增加的宠物寄放数 int j,item_sum=0, pet_sum=0; for(j=0; j<5 ;j++){ item_sum += tran_pool_item[j] ; pet_sum += tran_pool_pet[j]; } item_sum += 10; // 限制最大的寄道具数 pet_sum += 5; // 限制最大的寄宠数#endif while(getStringFromIndexWithDelim( buf,",",i,buf2,sizeof( buf2))!= FALSE){ i++; if(strstr(buf2,"Item") != NULL){ getStringFromIndexWithDelim( buf2 ,"=" ,2, buf3 ,sizeof(buf3)); item = atoi(buf3); }else if(strstr(buf2,"Pet") != NULL){ getStringFromIndexWithDelim( buf2 ,"=" ,2, buf3 ,sizeof(buf3)); pet = atoi(buf3); }else if(strstr(buf2,"Present") != NULL){ ten_no = CHAR_getInt(toindex,CHAR_TRANSMIGRATION); ten_no++; getStringFromIndexWithDelim( buf2 ,"=" ,2, buf3 ,sizeof(buf3)); getStringFromIndexWithDelim( buf3,".",ten_no ,buf4 ,sizeof( buf4)); present = atoi(buf4); } } CHAR_setInt(toindex ,CHAR_TRANSMIGRATION, CHAR_getInt(toindex,CHAR_TRANSMIGRATION) + 1);#ifdef _TRANS_6 if(CHAR_getInt( toindex, CHAR_TRANSMIGRATION) > 6) CHAR_setInt(toindex ,CHAR_TRANSMIGRATION,6); if( CHAR_getInt(toindex,CHAR_TRANSMIGRATION) == 6 )//6转後所送的宠 present = 2546;#else if(CHAR_getInt( toindex, CHAR_TRANSMIGRATION) > 5) CHAR_setInt(toindex ,CHAR_TRANSMIGRATION,5);#endif NPC_TransmigrationStatus(meindex, toindex, work); NPC_TransmigrationFlg_CLS(meindex, toindex); CHAR_setInt(toindex, CHAR_LV ,1); CHAR_setMaxExp( toindex, 0);#ifdef _TRANS_6//删除魔界之门碎片 for( i=0 ; i<CHAR_MAXITEMHAVE ; i++ ){ int itemindex; itemindex = CHAR_getItemIndex(toindex,i); if( ITEM_CHECKINDEX(itemindex) == FALSE )continue; if( ITEM_getInt( itemindex, ITEM_ID ) == 20613 ) { CHAR_DelItem( toindex, i); } }#endif if(NPC_TransmigrationDelPet(meindex, toindex) == FALSE) return FALSE; if( NPC_TransmigrationAddPet( meindex, toindex, present)== FALSE) return FALSE; // Robin 0718 { int tenseiNo; tenseiNo=CHAR_getInt( toindex, CHAR_TRANSMIGRATION); CHAR_setInt( toindex,CHAR_SKILLUPPOINT,tenseiNo*10); CHAR_Skillupsend( toindex ); //CHAR_setInt( toindex,CHAR_LEARNRIDE, 0); CHAR_setInt( toindex,CHAR_RIDEPET, -1 ); CHAR_setInt( toindex , CHAR_BASEIMAGENUMBER , CHAR_getInt( toindex , CHAR_BASEBASEIMAGENUMBER) ); //CHAR_sendStatusString( toindex , "P"); } lssproto_WO_send(fd ,0 ); // 鳖戏夫弘毛潸月 LogTensei( CHAR_getChar( toindex, CHAR_NAME ), /* 平乓仿 */ CHAR_getChar( toindex, CHAR_CDKEY), "Tensei", work[0], CHAR_getInt(toindex,CHAR_TRANSMIGRATION), work[1], NPC_StartpointCheck( meindex, toindex), item, pet, work[2],work[3],work[4],work[5], work[6],work[7],work[8],work[9] ); //凳蕙 CHAR_complianceParameter( toindex ); //HP毛荚汊今六化丐仆月 CHAR_setInt(toindex, CHAR_HP, CHAR_getWorkInt(toindex, CHAR_WORKMAXHP) ); CHAR_setInt(toindex,CHAR_LASTTALKELDER, NPC_StartpointCheck(meindex,toindex)); CHAR_sendStatusString( toindex, "P" ); /* CHAR_send_P_StatusString( toindex, CHAR_P_STRING_LV|CHAR_P_STRING_EXP| CHAR_P_STRING_NEXTEXP| CHAR_P_STRING_HP|CHAR_P_STRING_MAXHP| CHAR_P_STRING_MP|CHAR_P_STRING_MAXMP| CHAR_P_STRING_ATK|CHAR_P_STRING_DEF| CHAR_P_STRING_QUICK|CHAR_P_STRING_CHARM| CHAR_P_STRING_LUCK|CHAR_P_STRING_EARTH| CHAR_P_STRING_WATER|CHAR_P_STRING_FIRE| CHAR_P_STRING_WIND|CHAR_P_STRING_VITAL| CHAR_P_STRING_STR|CHAR_P_STRING_DEX| CHAR_P_STRING_TOUGH| CHAR_P_STRING_DUELPOINT //ttom ); */ return TRUE;}static int questTbl[20] = {1,2,4,5,8,12,14,15,16,17,19,22,27,30,31,34,35,38,45,47};//*******************************************************//弁巨旦玄及醒毛醒尹月//*******************************************************int NPC_TransmigrationQuestCheck(int toindex){ int i; int num = 0; for(i = 0 ; i < 20; i++){ if(NPC_EventCheckFlg(toindex ,questTbl[i]) == TRUE){ num++; } } return num;}//*******************************************************//*******************************************************int NPC_TransCalculation(int toindex, int para){ float quest, level, num, tmp; float ans; int equ; equ = CHAR_getInt(toindex, CHAR_TRANSEQUATION); quest = (float)(( equ >> 16 ) & 0xFFFF); level = (float)(( equ >> 0 ) & 0xFFFF); //tttom //print("\n this test equ=%d,quest=%f,level=%f",equ,quest,level); //鳖戏荚醒
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -