📄 npc_newnpcman.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 "handletime.h"#include "npc_eventaction.h"#include "npc_newnpcman.h"#include "pet.h"#define NEWNPCMAN_STANDBY 5000#define NEWNPCMAN_WAITTIME 150enum { 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_LOSTPETBOOL 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]={"","","","","","",""};#endifBOOL 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));
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -