📄 npc_transmigration.c
字号:
#include "version.h"#include <string.h>#include <math.h>#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 "npc_transmigration.h"#ifdef _PET_TRANS#include "npc_pettransman.h"#endifstatic void NPC_Transmigration_selectWindow( int meindex, int toindex, int num);static int NPC_TransmigrationCheck(int meindex, int talker);BOOL NPC_TransmigrationAddPet(int meindex, int talker, int petid);//楮醒及烂聒int NPC_StartpointCheck(int meindex,int talker);BOOL NPC_TransmigrationMain(int meindex, int toindex, char *buf);int NPC_TransmigrationFlg_CLS(int meindex, int toindex);BOOL NPC_TransmigrationDelPet(int meindex, int talker);BOOL NPC_TransmigrationStatus(int meindex, int toindex,int *work);BOOL NPC_TransmigratiomWarp(int meindex, int toindex, char *buf);void s_eventsetend( int charaindex, int shiftbit );#ifdef _PET_TRANSint Pet_Select;#endif/******************************************************************/BOOL NPC_TransmigrationInit( int meindex ){ /*--平乓仿及正奶皿毛涩烂--*/ CHAR_setInt( meindex , CHAR_WHICHTYPE , CHAR_TYPETRANSMIGRATION ); return TRUE;}/******************************************************************/void NPC_TransmigrationTalked( int meindex , int talkerindex , char *szMes ,int color ){#ifdef _PET_TRANS int i,petindex;#endif 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("savepoot=%d",CHAR_getInt( talkerindex, CHAR_SAVEPOINT));// NPC_StartpointCheck( meindex, talkerindex);#ifdef _PET_TRANS int petNum = 0; //检查所需(宠物/精灵) & 检查所需物品 for(i=0 ; i < CHAR_MAXPETHAVE ; i++) { petindex = CHAR_getCharPet( talkerindex, i); if( petindex == -1 ) continue; //检查宠物的 ID 是否为玛雷菲雅 1479 ID 为718 if( CHAR_getInt( petindex, CHAR_PETID) == 718#ifdef _PET_2TRANS || CHAR_getInt( petindex, CHAR_PETID) == 401#endif ){ if( CHAR_getInt( talkerindex, CHAR_LV) < 80 ) { CHAR_talkToCli( talkerindex, -1, "由于你的等级小于80,没能力进行转宠!", CHAR_COLORWHITE); return 0; }else if( CHAR_getInt( petindex, CHAR_LV) > 79 ){ char szPet[512]; CHAR_setCharPet( talkerindex, i, -1); CHAR_endCharOneArray( petindex ); snprintf( szPet, sizeof( szPet ), "K%d", i); CHAR_sendStatusString( talkerindex, szPet ); CHAR_talkToCli( talkerindex, -1, "清除你身上非法玛雷菲雅", CHAR_COLORRED); return 0; }else if( CHAR_getInt( petindex, CHAR_LV) == 79 ) { if( strcmp( CHAR_getChar( petindex, CHAR_OWNERCDKEY), CHAR_getChar( talkerindex, CHAR_CDKEY) ) || strcmp( CHAR_getChar( petindex, CHAR_OWNERCHARANAME), CHAR_getChar( talkerindex, CHAR_NAME) )) { CHAR_talkToCli( talkerindex, -1, "你身上的玛雷菲雅,并不是你的啊!", CHAR_COLORWHITE); return 0; } { int LevelUpPoint = CHAR_getInt( petindex, CHAR_ALLOCPOINT ); int work[4]; work[3] =(( LevelUpPoint >> 24 ) & 0xFF); work[0] = (( LevelUpPoint >> 16 ) & 0xFF); work[1] = (( LevelUpPoint >> 8 ) & 0xFF); work[2] = (( LevelUpPoint >> 0 ) & 0xFF); if(work[0]<15 || work[1]<15 || work[2]<15 || work[3]<15){ CHAR_talkToCli( talkerindex, petindex, "操,你太不爱惜我了,还要我帮你转宠?没门!", CHAR_COLORWHITE); return 0; } } petNum ++; } } } if( petNum > 1 ) { CHAR_talkToCli( talkerindex, -1, "你怎会有那麽多玛雷菲雅呢?", CHAR_COLORWHITE); return 0; }else if( petNum == 1 ) { CHAR_setWorkInt(talkerindex,CHAR_WORKSHOPRELEVANT,1); NPC_PetTransMan_selectWindow( meindex, talkerindex,0,-1); }else {#endif CHAR_setWorkInt( talkerindex, CHAR_WORKSHOPRELEVANT,1); NPC_Transmigration_selectWindow( meindex, talkerindex, 0);#ifdef _PET_TRANS }#endif //原转生 //CHAR_setWorkInt( talkerindex, CHAR_WORKSHOPRELEVANT,1); //NPC_Transmigration_selectWindow( meindex, talkerindex, 0); }static void NPC_Transmigration_selectWindow( int meindex, int toindex, int num){ char token[1024]; char npcarg[NPC_UTIL_GETARGSTR_BUFSIZE]; char buf[2048]; char buf2[512]; char tmp[512]; char s_tensei[64]; int buttontype = 0; int windowtype = 0; int windowno = 0; int tenseiNo = 1; int fd = getfdFromCharaIndex( toindex); int i = 1; BOOL tenflg = FALSE; char *elder[4] = {"samugiru","marinasu","jaja","karutarna"}; int point; int ten_no; if(NPC_Util_GetArgStr( meindex, npcarg, sizeof(npcarg))==NULL){ print("Tensei:GetArgStrErr"); return; } windowtype = WINDOW_MESSAGETYPE_MESSAGE; tenseiNo = CHAR_getInt( toindex, CHAR_TRANSMIGRATION); tenseiNo++; if(CHAR_getWorkInt( toindex, CHAR_WORKSHOPRELEVANT) >= 2){ tenseiNo--; } sprintf(s_tensei,"TENSEI:%d",tenseiNo); while(getStringFromIndexWithDelim( npcarg,"END",i,buf,sizeof( buf)) != FALSE){ i++; if(strstr(buf,s_tensei) != NULL) { tenflg = TRUE; break; } } //ttom// print("\nTrans meindex=%d,toindex=%d,num=%d",meindex,toindex,num); //ttom CONNECT_set_state_trans(fd,6); //ttom end switch( num){ case 0: //ttom //CONNECT_set_state_trans(fd,0); //ttom end ten_no = NPC_TransmigrationCheck(meindex, toindex); if(#ifdef _TRANS_6 ten_no < 6#else ten_no < 5#endif//_TRANS_6 && ten_no >= 0){ //椭瘀弁伉失□ if(NPC_Util_GetStrFromStrWithDelim( buf,"startmsg", token,sizeof( token) ) == NULL) { print("startmsgErr"); return; } buttontype = WINDOW_BUTTONTYPE_NEXT; //ttom CONNECT_set_state_trans(fd,0); //ttom end }else if(#ifdef _TRANS_6 ten_no == 6#else ten_no == 5#endif//_TRANS_6 ){ //鳖戏毛ㄤ荚支匀凶 if(NPC_Util_GetStrFromStrWithDelim( npcarg,"maxmsg", token,sizeof( token) ) == NULL) { print("maxmsgErr"); return; } buttontype = WINDOW_BUTTONTYPE_OK; }else{ //椭瘀弁伉失仄化卅中 if(NPC_Util_GetStrFromStrWithDelim( buf,"nonemsg", token,sizeof( token) ) == NULL) { print("nonemsgErr"); return; } buttontype = WINDOW_BUTTONTYPE_OK; } windowno = CHAR_WINDOWTYPE_TRANSMIGRATION_START; break; case 1: if(NPC_Util_GetStrFromStrWithDelim( buf,"mainmsg", token,sizeof( token) ) == NULL) { print("mainmsgErr"); return; } buttontype = WINDOW_BUTTONTYPE_OKCANCEL; windowno = CHAR_WINDOWTYPE_TRANSMIGRATION_MAIN; break; case 2: // Robin 2001/03/05 Tensei Check //if(!CHAR_getWorkInt(toindex,CHAR_TENSEICHECKED)) return; point = NPC_StartpointCheck( meindex, toindex); if(point == -1) { return; } NPC_Util_GetStrFromStrWithDelim( npcarg,elder[point],buf2,sizeof( buf2)); if(NPC_TransmigrationMain(meindex, toindex, buf2) == FALSE) { return; } sprintf( tmp, "yesmsg%d", CHAR_getWorkInt( toindex, CHAR_WORKSHOPRELEVANT)); if(NPC_Util_GetStrFromStrWithDelim( buf,tmp, token,sizeof( token) ) == NULL) { print("yesmsgErr"); return; } CHAR_setWorkInt( toindex, CHAR_WORKSHOPRELEVANT, CHAR_getWorkInt( toindex, CHAR_WORKSHOPRELEVANT) +1 ); sprintf( tmp, "yesmsg%d", CHAR_getWorkInt( toindex, CHAR_WORKSHOPRELEVANT)); if(strstr(buf, tmp) == NULL) { buttontype = WINDOW_BUTTONTYPE_OK; windowno = CHAR_WINDOWTYPE_TRANSMIGRATION_END; }else { buttontype = WINDOW_BUTTONTYPE_NEXT; windowno = CHAR_WINDOWTYPE_TRANSMIGRATION_END; } break; case 3: /*--平□伐□玉及民尼永弁毛垫丹--*/ if(NPC_Util_GetStrFromStrWithDelim( buf,"nomsg", token,sizeof( token) ) == NULL) { print("nomsgErr"); return; } buttontype = WINDOW_BUTTONTYPE_OK; windowno = CHAR_WINDOWTYPE_TRANSMIGRATION_NONE; break; case 4: sprintf( tmp, "yesmsg%d", CHAR_getWorkInt( toindex, CHAR_WORKSHOPRELEVANT)); if(NPC_Util_GetStrFromStrWithDelim( buf,tmp, token,sizeof( token) ) == NULL) { print("yesmsgErr"); return; } CHAR_setWorkInt( toindex, CHAR_WORKSHOPRELEVANT, CHAR_getWorkInt( toindex, CHAR_WORKSHOPRELEVANT) +1 ); sprintf( tmp, "yesmsg%d", CHAR_getWorkInt( toindex, CHAR_WORKSHOPRELEVANT)); if(strstr(buf, tmp) == NULL) { buttontype = WINDOW_BUTTONTYPE_OK; windowno = CHAR_WINDOWTYPE_TRANSMIGRATION_END; }else{ buttontype = WINDOW_BUTTONTYPE_NEXT; windowno = CHAR_WINDOWTYPE_TRANSMIGRATION_END; } break; case 5: // Robin 2001/03/05 Tensei Check //if(!CHAR_getWorkInt(toindex,CHAR_TENSEICHECKED)) return; point = NPC_StartpointCheck( meindex, toindex); if(point == -1) return; NPC_Util_GetStrFromStrWithDelim( npcarg,elder[point],buf2,sizeof( buf2)); NPC_TransmigratiomWarp(meindex, toindex, buf2);// buttontype = WINDOW_BUTTONTYPE_OK;// windowno = CHAR_WINDOWTYPE_TRANSMIGRATION_END; return; break; }// makeEscapeString( token, escapedname, sizeof(escapedname)); /*-仇仇匹霜耨允月--*/ lssproto_WN_send( fd, windowtype, buttontype, windowno, CHAR_getWorkInt( meindex, CHAR_WORKOBJINDEX), token);}/*------------------------------------------------------------------------------------*/void NPC_TransmigrationWindowTalked( int meindex, int talkerindex, int seqno, int select, char *data){ int datanum = -1; int fd = getfdFromCharaIndex( talkerindex); if( NPC_Util_CharDistance( talkerindex, meindex ) > 2) { return; } //ttom //CONNECT_set_state_trans(fd,6); //ttom end datanum = atoi( data); switch( seqno) { case CHAR_WINDOWTYPE_TRANSMIGRATION_START: if( select == WINDOW_BUTTONTYPE_NEXT) { //ttom if(CONNECT_get_state_trans(fd)==0){ } else return; //ttom end NPC_Transmigration_selectWindow( meindex, talkerindex,1); //ttom CONNECT_set_state_trans(fd,1); //ttom end } break; case CHAR_WINDOWTYPE_TRANSMIGRATION_MAIN: if( select == WINDOW_BUTTONTYPE_OK) { //ttom if(CONNECT_get_state_trans(fd)==1){ } else return; //ttom end NPC_Transmigration_selectWindow( meindex, talkerindex, 2); //ttom CONNECT_set_state_trans(fd,2); //ttom end }else if(select == WINDOW_BUTTONTYPE_CANCEL) { NPC_Transmigration_selectWindow( meindex, talkerindex, 3); } break; case CHAR_WINDOWTYPE_TRANSMIGRATION_END: if( select == WINDOW_BUTTONTYPE_NEXT) { //ttom if(CONNECT_get_state_trans(fd)==2){ } else return; //ttom end NPC_Transmigration_selectWindow( meindex, talkerindex, 4); //ttom CONNECT_set_state_trans(fd,4); //ttom end }else if( select == WINDOW_BUTTONTYPE_OK) { //ttom if(CONNECT_get_state_trans(fd)==4){ } else return; //ttom end NPC_Transmigration_selectWindow( meindex, talkerindex, 5); } break; //ANDY_ADD 10/19#ifdef _PET_TRANS case CHAR_WINDOWTYPE_PETTRANS_START: //开始对话 if( select == WINDOW_BUTTONTYPE_NEXT) { NPC_PetTransMan_selectWindow( meindex, talkerindex, 1, 0); } break;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -