⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 npc_exchangeman.c

📁 石器时代8.0服务端完整源代码。可以直接编译
💻 C
📖 第 1 页 / 共 5 页
字号:
#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"

static 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);
	
#if 0
	char buf2[512];
	char buf3[256];
	int j=1;
	int nameflg=0;
	int itemno;
	char *ret;
	char sendbuf[2][10]={"无法传送。","可以传送。"};
	char droplogbuf[2][10]={"没消失。","消失了。"};
	int flg=0;
#endif			


	/*--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;

#if 0
	/*--奶矛件玄NPC互健丹失奶  丞毛民尼永弁允月--*/
	/*--民尼永弁嫩  }  午仄化壅尹月井"}矢永玄丢□伙匹霜木月井"--*/
	while(getStringFromIndexWithDelim( argstr ,"EventEnd" ,i ,buf ,sizeof(buf))
	!=FALSE)
	{
		i++;
		/*--仇仇匹踏井木化中月及反}伐□瓦件弘毛请允-*/
		if(NPC_Util_GetStrFromStrWithDelim( buf,"GetItem", buf2,sizeof( buf2)) 
		!=NULL)
		{
			j=1;
			flg=0;
			while(getStringFromIndexWithDelim( buf2,",", j, buf3, sizeof(buf3))
			!=FALSE)
			{
				j++;
				if(strstr( buf2, "*")!=NULL){
					getStringFromIndexWithDelim( buf3 ,"*" ,1, buf4 ,sizeof(buf4));
					itemno = atoi(buf4);
				}else{
					/*--失奶  丞瓜件田□必永玄--*/
					itemno = atoi(buf3);
				}
				
				ret=NPC_Util_GetStrFromStrWithDelim( buf,"NoWarning", buf4,sizeof(buf4));
				if(ret != NULL){
					char buff[8];
					int k=1;

					while(getStringFromIndexWithDelim( buf4,"," ,k ,buff, sizeof(buff))
					!=FALSE){
						k++;
						if(itemno == atoi(buff))
						{
							flg=1;
							break;
						}
					}
				}
				
				if(flg == 0){
					if( (itemno >=2400 && itemno < 3000) &&(
					(ITEM_getdropatlogoutFromITEMtabl(itemno) == 1)
					 || (ITEM_getvanishatdropFromITEMtabl(itemno) == 1)
					 || (ITEM_getcanpetmailFromITEMtabl(itemno) == 0))
					 ){
						if(nameflg==0){
							print("\n%s",CHAR_getChar( meindex ,CHAR_NAME));
							nameflg=1;
						}
						print("\nID:%-5d,Logout:%-8s,DropCls:%-8s,SendMail:%-8s,%-16s",
						itemno,
						droplogbuf[ITEM_getdropatlogoutFromITEMtabl(itemno)],
						droplogbuf[ITEM_getvanishatdropFromITEMtabl(itemno)],
						sendbuf[ITEM_getcanpetmailFromITEMtabl(itemno)],
						ITEM_getNameFromNumber(itemno)
						);
					}
				}
				
			}
		}
	
	}
#endif
	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++;
							}
						}
#ifdef _ANGEL_SUMMON
						// 完成召唤任务
						if( NPC_Util_GetStrFromStrWithDelim( buf, "MISSIONOVER",
							buf2, sizeof( buf2)) != NULL)
						{
							int mindex;
							int mission;
							char nameinfo[64];
							
							mission = atoi( buf2);
							mindex = checkIfAngel( talker);
							
							if( mission == missiontable[mindex].mission )
							{
								char msg[1024];
								
								print(" ====完成召唤任务==== ");

								CHAR_setInt( talker, CHAR_HEROCNT, 
									CHAR_getInt( talker, CHAR_HEROCNT)+1 );
								getMissionNameInfo( talker, nameinfo);
								saacproto_ACMissionTable_send( acfd, MISSION_HERO_COMPLETE, 4, nameinfo, "");
								sprintf( msg, " 完成任务 i:%d m:%d %s ", mindex, mission, nameinfo);
								print( msg);
								LogAngel( msg );
							}
							
						}
						
						// 清除召唤任务
						if( NPC_Util_GetStrFromStrWithDelim( buf, "MISSIONCLEAN",
							buf2, sizeof( buf2)) != NULL)
						{
							int mindex;
							int mission;
							char nameinfo[64];
							
							mission = atoi( buf2);
							mindex = checkIfAngel( talker);
							
							if( mission == missiontable[mindex].mission )
							{
								char msg[1024];

								getMissionNameInfo( talker, nameinfo);
								saacproto_ACMissionTable_send( acfd, mindex, 3, nameinfo, "");

								sprintf( msg, " 放弃任务 i:%d m:%d %s ", mindex, mission, nameinfo);
								print( msg);
								LogAngel( msg );

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -