📄 npc_exchangeman.c
字号:
#include "version.h"#include <string.h>#include "char.h"#include "object.h"#include "net.h"#include "char_base.h"#include "npcutil.h"#include "lssproto_serv.h"#include "npc_exchangeman.h"#include "npc_eventaction.h"#include "log.h"#include "battle.h"#include "handletime.h"#include "enemy.h"#include "npc_warp.h"#ifdef _TRANS_7_NPCBOOL NPC_EventTRANS(int meindex, int talker, char *buff2,int mode);#endifstatic void NPC_ExChangeMan_selectWindow( int meindex, int talker,int num);BOOL NPC_TypeCheck(int meindex,int talker,char *szMes);int NPC_ExChangeManEventCheck( int meindex, int talker, char *buff1);BOOL NPC_EventItemCheck(int meindex,int talker,int itemNo,int flg);BOOL NPC_EventLevelCheck(int meindex,int talker,int level,int flg);// Arminius 8.14 move to .h (for pet talk)//BOOL NPC_EventBigSmallCheck(int meindex,int talker,char* buf);BOOL NPC_EventFreeIfCheck(int meindex,int talker,char* buf,int kosuu,int flg);BOOL NPC_EventBigSmallLastCheck(int point1,int mypoint,int flg);BOOL NPC_ENDEventNoCheck(int meindex,int talker,int shiftbit,int flg);BOOL NPC_NOWEventNoCheck(int meindex,int talker,int shiftbit,int flg);BOOL NPC_TiemCheck(int meindex,int talker,int time,int flg);BOOL NPC_EventAddPet(int meindex, int talker, char *buff2,int mode);BOOL NPC_RandItemGet(int meindex, int talker,int rand_j,char *buf);BOOL NPC_PetLvCheckType2(int petindex,int meindex,int talker,char *buf,int mode);BOOL NPC_PetLvCheck(int meindex,int talker,char *buf,int mode);void NPC_RequestMain(int meindex,int talker,char *buf);void NPC_AcceptMain(int meindex,int talker ,char*buf);void NPC_MsgDisp(int meindex,int talker,int num);BOOL NPC_EventAdd(int meindex,int talker,int mode);BOOL NPC_AcceptDel(int meindex,int talker,int mode);BOOL NPC_SavePointCheck(int meindex,int talker,int shiftbit,int flg);BOOL NPC_EventReduce(int meindex,int talker,char *buf);BOOL NPC_EventDelItem(int meindex,int talker,char *buf,int breakflg);BOOL NPC_EventDelItemEVDEL(int meindex,int talker,char *buf,char *nbuf,int breakflg);BOOL NPC_EventAddItem(int meindex,int talker,char *buf);int NPC_EventFile(int meindex,int talker,char *buf);BOOL NPC_EventDelPet(int meindex,int talker, int petsel);void NPC_PetSkillMakeStr(int meindex,int toindex,int select);void NPC_CleanMain(int meindex,int talker,char *buf); void NPC_EventPetSkill( int meindex, int talker, char *data);BOOL NPC_ItemFullCheck(int meindex,int talker,char *buf,int mode,int evcnt);void NPC_CharmStatus(int meindex,int talker);BOOL NPC_ImageCheck(int meindex,int talker,int kosuu,int flg);int NPC_EventGetCost(int meindex,int talker,char *arg);BOOL NPC_EventWarpNpc(int meindex,char *buf);enum { CHAR_WORK_EVENTWARP = CHAR_NPCWORKINT4,};/********************************** 赓渝质 *********************************/BOOL NPC_ExChangeManInit( int meindex ){ char argstr[NPC_UTIL_GETARGSTR_BUFSIZE]; char buf[1024*2]; int i = 1; char buf4[256]; CHAR_setWorkInt(meindex,CHAR_WORK_EVENTWARP,1); /*--NPC及正奶皿毛本永玄允月--*/ CHAR_setInt( meindex , CHAR_WHICHTYPE , CHAR_TYPEEVENT ); /*--涩烂白央奶伙毛 心 心--*/ if(NPC_Util_GetArgStr( meindex, argstr, sizeof( argstr)) == NULL) { print("NPC_ExChange.c TypeCheck: GetArgStrErr\n"); print("NPCName=%s\n", CHAR_getChar( meindex ,CHAR_NAME)); return FALSE; } i = 1; /*--奶矛件玄NPC互健丹失奶 丞毛民尼永弁允月--*/ /*--民尼永弁嫩 } 午仄化壅尹月井"}矢永玄丢□伙匹霜木月井"--*/ while(getStringFromIndexWithDelim( argstr ,"EventEnd" ,i ,buf ,sizeof(buf)) != FALSE) { i++; /*--仇仇匹踏井木化中月及反}伐□瓦件弘毛请允-*/ if(strstr( buf,"GetItem") != NULL) { if(strstr( buf,"ItemFullMsg") == NULL) { NPC_Util_GetStrFromStrWithDelim(buf,"EventNo",buf4,sizeof(buf4)); print("\n### EventNo=%d %s:ItemFullMsg 脱离###", atoi( buf4), CHAR_getChar( meindex, CHAR_NAME)); } } if(strstr( buf,"GetPet") != NULL) { if(strstr( buf,"PetFullMsg") == NULL) { NPC_Util_GetStrFromStrWithDelim(buf,"EventNo",buf4,sizeof(buf4)); print("\n### ventNo=%d %s:PetFullMsg 脱离 ###", atoi(buf4), CHAR_getChar(meindex,CHAR_NAME)); } } if(strstr( buf,"GetEgg") != NULL) { if(strstr( buf,"PetFullMsg") == NULL) { NPC_Util_GetStrFromStrWithDelim(buf,"EventNo",buf4,sizeof(buf4)); print("\n### ventNo=%d %s:PetFullMsg 脱离 ###", atoi(buf4), CHAR_getChar(meindex,CHAR_NAME)); } } if(strstr( buf,"GetStone") != NULL){ if(strstr( buf,"StoneFullMsg") == NULL){ NPC_Util_GetStrFromStrWithDelim(buf,"EventNo",buf4,sizeof(buf4)); print("\n### EventNo=%d %s:StonFullMsg 脱离 ###", atoi( buf4), CHAR_getChar( meindex, CHAR_NAME)); } } if(strstr( buf,"DelStone") != NULL) { if(strstr( buf,"StoneLessMsg") == NULL) { NPC_Util_GetStrFromStrWithDelim(buf,"EventNo",buf4,sizeof(buf4)); print("\n### EventNo=%d %s:StoneLessMsg 脱离 ###", atoi(buf4), CHAR_getChar(meindex,CHAR_NAME)); } } } i = 1; return TRUE;}/*-- 及啖 --*/BOOL NPC_EventWarpNpc(int meindex,char *buf){ char token[32]; char buf2[32]; int floor,x,y; int ret; int cnt; int dcnt = 1; /*--蜇箕及伐□皿及赐 --*/ cnt = CHAR_getWorkInt(meindex,CHAR_WORK_EVENTWARP); while(getStringFromIndexWithDelim(buf,",", dcnt,buf2,sizeof(buf2) ) !=FALSE ){ dcnt++; } if(dcnt <= cnt) cnt=1; while(getStringFromIndexWithDelim(buf,",", cnt,buf2,sizeof(buf2)) !=FALSE ) { cnt++; ret=getStringFromIndexWithDelim(buf2,".", 1,token,sizeof(token)); if( ret == FALSE ) { continue; } floor = atoi( token ); ret=getStringFromIndexWithDelim(buf2,".", 2,token,sizeof(token)); if( ret == FALSE ){ continue; } x = atoi( token ); ret=getStringFromIndexWithDelim(buf2,".", 3,token,sizeof(token)); if( ret == FALSE ) { continue; } y = atoi( token ); CHAR_setWorkInt(meindex,CHAR_WORK_EVENTWARP, cnt); CHAR_warpToSpecificPoint(meindex, floor, x, y); return TRUE; } return FALSE;}/********************************** 仄井仃日木凶凛及质 *********************************/void NPC_ExChangeManTalked( int meindex , int talkerindex , char *szMes ,int color ){ /* 皿伊奶乩□卞覆仄化分仃 杀允月 */ 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; } /*--皿伊奶乩□及伐□弁 毛赓渝祭--*/ CHAR_setWorkInt( talkerindex ,CHAR_WORKSHOPRELEVANT, 0); CHAR_setWorkInt( talkerindex ,CHAR_WORKSHOPRELEVANTSEC, 0); CHAR_setWorkInt( talkerindex ,CHAR_WORKSHOPRELEVANTTRD, 0); /*--正奶皿 卞坌仃月--*/ NPC_TypeCheck( meindex, talkerindex, szMes);}/*------------------------------------------------------------ *涩烂白央奶伙毛 心 心}椭瘀互丐匀凶正奶皿及质 毛允月 *-------------------------------------------------------------*/BOOL NPC_TypeCheck(int meindex,int talker,char *szMes){ char argstr[NPC_UTIL_GETARGSTR_BUFSIZE]; char buf[1024*2]; char buf2[512]; int i = 1; int EvNo; int evch; /*--涩烂白央奶伙毛 心 心--*/ if(NPC_Util_GetArgStr( meindex, argstr, sizeof(argstr)) == NULL) { print("NPC_ExChange.c TypeCheck: GetArgStrErr\n"); print("NPCName=%s\n", CHAR_getChar(meindex,CHAR_NAME)); return FALSE; } /*-- 涩烂白央奶伙毛坌喃允月 --*/ while(getStringFromIndexWithDelim( argstr,"EventEnd",i,buf,sizeof( buf)) != FALSE){ i++; CHAR_setWorkInt( talker, CHAR_WORKSHOPRELEVANT, 0); CHAR_setWorkInt( talker, CHAR_WORKSHOPRELEVANTSEC, 0); /*-- 奶矛件玄瓜件田□毛必永玄 --*/ if(NPC_Util_GetStrFromStrWithDelim(buf,"EventNo", buf2, sizeof( buf2) ) == NULL) continue; if(strstr( buf2, "-") != 0) { EvNo = -1; }else{ EvNo = atoi( buf2); } /*-- 白仿弘民尼永弁毛垫丹[允匹卞奶矛件玄互蔽 仄化中月桦宁反戚尺 --*/ if(NPC_EventCheckFlg( talker, EvNo) == TRUE) continue; /*--平□伐□玉及民尼永弁毛垫丹--*/ if(NPC_Util_GetStrFromStrWithDelim( buf,"KeyWord", buf2,sizeof( buf2) ) != NULL){ if(strcmp( szMes, buf2) != 0) continue; CHAR_setWorkInt( talker, CHAR_WORKSHOPRELEVANT, i); } /*--矢永玄及 蟆及民尼永弁互 匀化月井毛民尼永弁--*/ if(NPC_Util_GetStrFromStrWithDelim( buf,"Pet_Name", buf2,sizeof( buf2)) != NULL){ CHAR_setWorkInt( talker, CHAR_WORKSHOPRELEVANTSEC, 1); } evch = NPC_ExChangeManEventCheck( meindex, talker, buf); if(evch != -1) { if(NPC_Util_GetStrFromStrWithDelim( buf,"TYPE", buf2, sizeof( buf2)) != NULL){ if( strstr( buf2, "REQUEST") != NULL) { NPC_RequestMain( meindex, talker, buf); return TRUE; }else if( strstr( buf2, "ACCEPT") != NULL) { /*-匙 毛熬仃午月 --*/ NPC_AcceptMain( meindex, talker, buf); return TRUE; }else if(strstr( buf2, "MESSAGE") != NULL) { char token[14*100]; char token2[14*50]; if(NPC_Util_GetStrFromStrWithDelim( buf,"NomalMsg", token,sizeof( token) ) != NULL ) { if(NPC_AcceptDel( meindex, talker, 0) == FALSE) return FALSE; if(EvNo != -1) NPC_NowEventSetFlg( talker, EvNo); CHAR_talkToCli( talker, meindex, token, CHAR_COLORWHITE); if(NPC_Util_GetStrFromStrWithDelim( buf,"NpcWarp", token2,sizeof( token2) ) != NULL){ NPC_EventWarpNpc(meindex,token2); } if(NPC_Util_GetStrFromStrWithDelim( buf, "EndSetFlg", buf2, sizeof( buf2) ) !=NULL){ char buf3[16]; int k = 1; if(EvNo != -1) NPC_NowEventSetFlgCls( talker, EvNo); while(getStringFromIndexWithDelim(buf2 , "," ,k, buf3, sizeof(buf3)) !=FALSE ){ k++; NPC_EventSetFlg( talker, atoi( buf3)); } } if( NPC_Util_GetStrFromStrWithDelim( buf, "CleanFlg", buf2, sizeof( buf2)) != NULL) { char buf3[16]; int k = 1; k= 1 ; while(getStringFromIndexWithDelim(buf2 , "," , k, buf3, sizeof(buf3)) != FALSE ){ NPC_NowEndEventSetFlgCls( talker, atoi(buf3)); k++; } } }else if(NPC_Util_GetStrFromStrWithDelim(buf, "NomalWindowMsg", token, sizeof( token) ) !=NULL) { /*--它奶件玉它匹丢永本□斥毛忒允--*/ int fd = getfdFromCharaIndex( talker);#ifdef _NEWEVENT if(NPC_Util_GetStrFromStrWithDelim(buf, "NomalWindowMsg1", buf2, sizeof(buf2)) != NULL){ lssproto_WN_send( fd, WINDOW_MESSAGETYPE_MESSAGE, WINDOW_BUTTONTYPE_NEXT, CHAR_WINDOWTYPE_WINDOWEVENT_STARTMSG, CHAR_getWorkInt( meindex, CHAR_WORKOBJINDEX), token); }else {#endif char token2[14*50]; if(NPC_AcceptDel( meindex, talker,0) == FALSE) return FALSE; if( EvNo != -1) NPC_NowEventSetFlg( talker, EvNo); if(NPC_Util_GetStrFromStrWithDelim( buf,"NpcWarp", token2,sizeof( token2) ) != NULL){ NPC_EventWarpNpc(meindex,token2); } if(NPC_Util_GetStrFromStrWithDelim( buf, "EndSetFlg", buf2, sizeof( buf2) ) !=NULL){ char buf3[16]; int k = 1; if(EvNo != -1) NPC_NowEventSetFlgCls( talker, EvNo); while(getStringFromIndexWithDelim(buf2 , "," ,k, buf3, sizeof(buf3)) !=FALSE ){ k++; NPC_EventSetFlg( talker, atoi( buf3)); } } //奶矛件玄白仿弘毛壅允 if( NPC_Util_GetStrFromStrWithDelim( buf, "CleanFlg", buf2, sizeof( buf2)) != NULL) { char buf3[16]; int k = 1; k= 1 ; while(getStringFromIndexWithDelim(buf2 , "," , k, buf3, sizeof(buf3)) != FALSE ){ NPC_NowEndEventSetFlgCls( talker, atoi(buf3)); k++; } } lssproto_WN_send( fd, WINDOW_MESSAGETYPE_MESSAGE, WINDOW_BUTTONTYPE_YES, CHAR_WINDOWTYPE_WINDOWEVENT_STARTMSG, CHAR_getWorkInt( meindex, CHAR_WORKOBJINDEX), token);#ifdef _NEWEVENT }#endif } return TRUE; }else if(strstr( buf2, "CLEAN") != NULL) { NPC_CleanMain( meindex, talker, buf); return TRUE; } } } } strcpy( buf, "\0"); if( NPC_Util_GetStrFromStrWithDelim( argstr, "NomalMainMsg", buf, sizeof( buf)) == NULL ) { print("\n err:NOT FIND NomalMainMsg"); return FALSE; } i = 1; while(getStringFromIndexWithDelim( buf, ",", i, buf2, sizeof( buf2))!= FALSE){ i++; } i--; i = rand()%i + 1; getStringFromIndexWithDelim( buf,",", i, buf2, sizeof( buf2)); CHAR_talkToCli( talker, meindex, buf2, CHAR_COLORWHITE); return TRUE;}/*----------------------------------- *正奶皿 卞质 毛坌仃月 ------------------------------------*/static void NPC_ExChangeMan_selectWindow( int meindex, int talker,int num){ switch( num) { /*--伉弁巨旦玄滇--*/ case 0: /*-奶矛件玄 卅及匹}奶矛件玄毛鞅户月井升丹井毛 丹--*/ NPC_MsgDisp( meindex, talker, 0); break; case 1: /*--蕙筋卞奶矛件玄垫丹--*/ NPC_MsgDisp( meindex, talker, 5); break; /*--失弁本皿玄滇--*/ case 2: /*--熬仃潸曰--*/ NPC_MsgDisp( meindex, talker, 6); break; case 3: /*--熬仃潸曰--*/ NPC_MsgDisp( meindex, talker, 11); break; }}/*------------------------------------- *奶矛件玄毛匙 允月质 及丢奶件 --------------------------------------*/void NPC_RequestMain(int meindex,int talker,char *buf){ int shiftbit; char buf2[128]; /*--奶矛件玄瓜件田□毛必永玄--*/ NPC_Util_GetStrFromStrWithDelim( buf,"EventNo", buf2,sizeof( buf2) ); shiftbit = atoi( buf2); if(NPC_NowEventCheckFlg( talker, shiftbit) == TRUE) { NPC_ExChangeMan_selectWindow( meindex, talker, 0); }else{ NPC_ExChangeMan_selectWindow( meindex, talker, 1); }}/*--------------------------------------- * 奶矛件玄蔽 及丢奶件 ----------------------------------------*/void NPC_AcceptMain(int meindex,int talker ,char *buf){ NPC_ExChangeMan_selectWindow( meindex, talker, 2);}/*---------------------------------------- * 白仿弘毛弁伉失允月啃及丢奶件 ----------------------------------------*/void NPC_CleanMain(int meindex,int talker,char *buf){ NPC_ExChangeMan_selectWindow( meindex, talker, 3);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -