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

📄 npc_newnpcman.c

📁 石器时代8.0服务端完整源代码。可以直接编译
💻 C
📖 第 1 页 / 共 3 页
字号:
NPC_NEWNPCMAN_START=21,
NPC_NEWNPCMAN_MAN,
NPC_NEWNPCMAN_END,
};

enum	{
	NEWNPC_START = 1,
	NEWNPC_MAN,
	NEWNPC_END,
};

enum {
	NPC_WORK_INDEX = CHAR_NPCWORKINT1,
	NPC_WORK_WORKTYPE = CHAR_NPCWORKINT2,
	NPC_WORK_CURRENTTIME = CHAR_NPCWORKINT3,
};

BOOL CHECK_YEARPET( int toindex);
static void NPC_NewNpcMan_selectWindow( int meindex, int toindex, int num, int flg);
int NPC_NewNpcManDelPet(int meindex,int talker, int petsel);
BOOL NPC_NewNpcManAddPet(int meindex, int talker, int petid);

//可换四种宠
static	int Re_Pet[4];
// shan
char uStr[128]="";

BOOL NPC_NewNpcManInit( int meindex )
{
	char npcarg[NPC_UTIL_GETARGSTR_BUFSIZE];
	char buf1[256],buf2[256];
	int k=1;

	if(NPC_Util_GetArgStr( meindex, npcarg, sizeof(npcarg)) == NULL)	{
		print("GambleBank:GetArgStrErr");
		return FALSE;
	}

	if( NPC_Util_GetStrFromStrWithDelim( npcarg, "REPET", buf1, sizeof( buf1)) == NULL )	{
		return FALSE;
	}

	while( getStringFromIndexWithDelim(buf1, ",", k, buf2, sizeof(buf2)) != FALSE )	{
		Re_Pet[k-1] = atoi( buf2);
		if( Re_Pet[k-1] < 0 )
			return FALSE;
		k++;
		if( (k-1) >= arraysizeof( Re_Pet) )
			break;
	}

    CHAR_setInt( meindex , CHAR_WHICHTYPE , CHAR_NEWNPCMAN );
	CHAR_setInt( meindex, CHAR_LOOPINTERVAL, NEWNPCMAN_STANDBY);
	CHAR_setWorkInt( meindex, NPC_WORK_CURRENTTIME, NowTime.tv_sec);
	CHAR_setWorkInt( meindex , NPC_WORK_INDEX, -1);
	return TRUE;
}

void NPC_NewNpcManLoop( int meindex)
{
	//test
	char npcarg[NPC_UTIL_GETARGSTR_BUFSIZE];
	char buf1[256],buf2[256];
	int k=1;

	int fulltime = NEWNPCMAN_WAITTIME;
	if( (CHAR_getWorkInt( meindex, NPC_WORK_CURRENTTIME) + fulltime) > NowTime.tv_sec )
		return;
	CHAR_setWorkInt( meindex , NPC_WORK_INDEX, -1);
	CHAR_setWorkInt( meindex, NPC_WORK_CURRENTTIME, NowTime.tv_sec);

	//test
	if(NPC_Util_GetArgStr( meindex, npcarg, sizeof(npcarg)) == NULL)	{
		print("GambleBank:GetArgStrErr");
		return;
	}

	if( NPC_Util_GetStrFromStrWithDelim( npcarg, "REPET", buf1, sizeof( buf1)) == NULL )	{
		return;
	}

	while( getStringFromIndexWithDelim(buf1, ",", k, buf2, sizeof(buf2)) != FALSE )	{
		Re_Pet[k-1] = atoi( buf2);
		if( Re_Pet[k-1] < 0 )
			return;
		k++;
		if( (k-1) >= arraysizeof( Re_Pet) )
			break;
	}
	//test end
}

void NPC_NewNpcManTalked( int meindex , int talkerindex , char *msg , int color )
{
	char buf1[256];

	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( CHAR_getWorkInt( meindex , NPC_WORK_INDEX) >= 0 )	{
			sprintf( buf1,"%s","我正忙着呢!");
			print("\n NPC_WORK_INDEX = %d ", CHAR_getWorkInt( meindex , NPC_WORK_INDEX));
			CHAR_talkToCli( talkerindex, meindex, buf1,  CHAR_COLORYELLOW);
		return;
	}else	{
		CHAR_setWorkInt( meindex , NPC_WORK_INDEX, talkerindex);
		print("\n start : NPC_WORK_INDEX = talkerindex");
		CHAR_setWorkInt( meindex, NPC_WORK_CURRENTTIME, NowTime.tv_sec);
		NPC_NewNpcMan_selectWindow( meindex, talkerindex, NEWNPC_START, 0);
	}
}

static void NPC_NewNpcMan_selectWindow( int meindex, int toindex, int num, int flg)
{
	char npcarg[NPC_UTIL_GETARGSTR_BUFSIZE];
	char token[256];
	char token_str[][56]={"ERROR_MSG","START_MSG","END_MSG","ERROR_ALL"};
	int buttontype = 0, windowtype = 0, windowno = 0;
	int fd = getfdFromCharaIndex( toindex);
	int petno = 718, petid =1479;
	int type_str = 0;
	windowtype = WINDOW_MESSAGETYPE_MESSAGE;
	
	if(NPC_Util_GetArgStr( meindex, npcarg, sizeof(npcarg)) == NULL)	{
		print("GambleBank:GetArgStrErr");
		CHAR_setWorkInt( meindex , NPC_WORK_INDEX, -1);
		return ;
	}

	if( CHAR_getWorkInt( meindex , NPC_WORK_INDEX) != toindex )	{
		sprintf( token,"%s","我正忙着呢!");
		CHAR_talkToCli( toindex, meindex, token,  CHAR_COLORYELLOW);
		return;
	}
	CHAR_setWorkInt( meindex, NPC_WORK_CURRENTTIME, NowTime.tv_sec);
	print("\n switch( num=%d)", num);
	switch( num)	{
	case NEWNPC_START:
		type_str = 1;
		buttontype = WINDOW_BUTTONTYPE_OKCANCEL;
		windowno = NPC_NEWNPCMAN_START;
		break;

	case NEWNPC_MAN:
		{
			if( CHECK_YEARPET( toindex) == TRUE )	{
				type_str = 1;
				windowtype = WINDOW_MESSAGETYPE_PETSELECT;
				buttontype = WINDOW_BUTTONTYPE_CANCEL;
				windowno = NPC_NEWNPCMAN_MAN;
			}else	{
				type_str = 3;
				buttontype = WINDOW_BUTTONTYPE_OK;
				windowno = NPC_NEWNPCMAN_END;
				CHAR_setWorkInt( meindex , NPC_WORK_INDEX, -1);
			}
		}
	break;

	case NEWNPC_END:
		type_str = 0;
		if( flg <= CHAR_MAXPETHAVE && flg >= 0 )	{
			petno = flg;

			if( ( petid = NPC_NewNpcManDelPet( meindex, toindex, petno)) >= 0 )	{
				if( NPC_NewNpcManAddPet( meindex, toindex, petid) == TRUE )	{
					type_str = 2;
				}
			}
		}
		CHAR_setWorkInt( meindex , NPC_WORK_INDEX, -1);
		buttontype = WINDOW_BUTTONTYPE_OK;
		windowno = NPC_NEWNPCMAN_END;

		break;
	}

	if(NPC_Util_GetStrFromStrWithDelim( npcarg, token_str[ type_str], token,sizeof( token) ) == NULL) {
		print("token_str[%d] err !", type_str);
		CHAR_setWorkInt( meindex , NPC_WORK_INDEX, -1);
		return;
	}

	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( 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("\n seqno=%d, select=%d", seqno, select);
	switch( seqno)	{
	case NPC_NEWNPCMAN_START:
		if( select != WINDOW_BUTTONTYPE_YES && select != WINDOW_BUTTONTYPE_OK )	{
			CHAR_setWorkInt( meindex , NPC_WORK_INDEX, -1);
			return;
		}
		if(select==WINDOW_BUTTONTYPE_CANCEL)	{
			CHAR_setWorkInt( meindex , NPC_WORK_INDEX, -1);
		}else	{
			NPC_NewNpcMan_selectWindow( meindex, talkerindex, NEWNPC_MAN, -1);
		}
	break;

	case NPC_NEWNPCMAN_MAN:
		{
			int petnum;
			petnum = atoi( data)-1;

			print("\n petnum=%d", petnum);
			if(select==WINDOW_BUTTONTYPE_CANCEL)	{
				CHAR_setWorkInt( meindex , NPC_WORK_INDEX, -1);
			}else	{
				NPC_NewNpcMan_selectWindow( meindex, talkerindex, NEWNPC_END, petnum);
			}
		}
		break;

	case NPC_NEWNPCMAN_END:
		break;
	}
}

int NPC_NewNpcManDelPet(int meindex,int talker, int petsel)
{
	int defpet;
	int fd = getfdFromCharaIndex( talker );
	char msgbuf[64], szPet[128];
	int k=0;
	int petindex=-1;

	petindex = CHAR_getCharPet( talker, petsel);
	if( !CHAR_CHECKINDEX(petindex) )
		return -1;

	for( k=0;k<arraysizeof( Re_Pet); k++)	{
		if( CHAR_getInt( petindex, CHAR_PETID) == Re_Pet[k] )
			break;
	}
	if( k == arraysizeof( Re_Pet) )	{
		return -1;
	}else	{
		print("\n FIND [%d,%d] & DEL !!", k, Re_Pet[k]);
	}

	if( CHAR_getWorkInt( CONNECT_getCharaindex( fd), CHAR_WORKBATTLEMODE) != BATTLE_CHARMODE_NONE )
		return -1;
	defpet = CHAR_getInt( talker, CHAR_DEFAULTPET);
	if(defpet == petsel)	{
		CHAR_setInt( talker, CHAR_DEFAULTPET, -1);
		lssproto_KS_send( fd, -1, TRUE);
	}
	snprintf( msgbuf,sizeof( msgbuf), "交出%s。", CHAR_getChar( petindex, CHAR_NAME));
	
	// shan
	if(CHAR_getChar( petindex, CHAR_UNIQUECODE)!=NULL){
		strncpy(uStr, CHAR_getChar( petindex, CHAR_UNIQUECODE), sizeof( STRING32));
	}else{
		strncpy(uStr, "Pet_Unicode_null", sizeof( STRING32));
	}
	
	CHAR_talkToCli( talker, -1, msgbuf,  CHAR_COLORWHITE);
				LogPet(
					CHAR_getChar( talker, CHAR_NAME ),
					CHAR_getChar( talker, CHAR_CDKEY ),
					CHAR_getChar( petindex, CHAR_NAME),
					CHAR_getInt( petindex, CHAR_LV),
					"TenseiDel",
					CHAR_getInt( talker,CHAR_FLOOR),
					CHAR_getInt( talker,CHAR_X ),
					CHAR_getInt( talker,CHAR_Y ),
					CHAR_getChar( petindex, CHAR_UNIQUECODE)
				);

	CHAR_setCharPet( talker, petsel, -1);
	CHAR_endCharOneArray( petindex );
	snprintf( szPet, sizeof( szPet ), "K%d", petsel);
	CHAR_sendStatusString( talker, szPet );

	return Re_Pet[k];
}

BOOL NPC_NewNpcManAddPet(int meindex, int talker, int petid)
{
	int	ret;
	char msgbuf[64];
	int	enemynum;
	int	i,j;
	int petindex, petindex2;

	//检查宠物栏是否有空位
	for( i = 0 ;i < CHAR_MAXPETHAVE ; i++) {
		petindex = CHAR_getCharPet( talker, i);
		if( petindex == -1  )
			break;
	}

    if( i == CHAR_MAXPETHAVE )      {
		snprintf( msgbuf,sizeof( msgbuf), "宠物已满!!");
		CHAR_talkToCli( talker, -1, msgbuf,  CHAR_COLORWHITE);
		return FALSE;
	}

	enemynum = ENEMY_getEnemyNum();
	for( i = 0; i < enemynum; i ++ ) {
		//if( ENEMY_getInt( i, ENEMY_ID ) == petid )
		if( ENEMY_getInt( i, ENEMY_TEMPNO ) == petid )	{
			print("\n ADD FIND [%d,%d]", i, ENEMY_getInt( i, ENEMY_TEMPNO ));
			break;
		}
	}
	if( i == enemynum )
		return FALSE;
	ret = ENEMY_createPetFromEnemyIndex( talker, i);
	for( i = 0; i < CHAR_MAXPETHAVE; i ++ )	{
		if( CHAR_getCharPet( talker, i ) == ret )
			break;
	}

	if( i == CHAR_MAXPETHAVE )
		i = 0;

	if( CHAR_CHECKINDEX( ret ) == TRUE ){
		CHAR_setMaxExpFromLevel( ret, CHAR_getInt( ret, CHAR_LV ));
	}
	
	petindex2 = CHAR_getCharPet(talker, i);
	if( !CHAR_CHECKINDEX( petindex2) )
		return FALSE;
	snprintf( msgbuf,sizeof( msgbuf), "拿到%s。", CHAR_getChar(petindex2,CHAR_NAME));
	CHAR_talkToCli( talker, -1, msgbuf,  CHAR_COLORWHITE);
	for(j = 0; j < CHAR_MAXPETHAVE; j++){
		petindex = CHAR_getCharPet(talker, j);
		if( !CHAR_CHECKINDEX( petindex) )
			continue;
		CHAR_complianceParameter( petindex );
		snprintf( msgbuf, sizeof( msgbuf ), "K%d", j );
		CHAR_sendStatusString( talker, msgbuf );
		snprintf( msgbuf, sizeof( msgbuf ), "W%d", j );
		CHAR_sendStatusString( talker, msgbuf );
	}

	// shan
	CHAR_setChar(petindex2, CHAR_UNIQUECODE, uStr);	

	LogPet(
		CHAR_getChar( talker, CHAR_NAME ),
		CHAR_getChar( talker, CHAR_CDKEY ),
		CHAR_getChar( petindex2, CHAR_NAME),
		CHAR_getInt( petindex2, CHAR_LV),
		"TenseiGet",
		CHAR_getInt( talker,CHAR_FLOOR),
		CHAR_getInt( talker,CHAR_X ),
		CHAR_getInt( talker,CHAR_Y ),
		CHAR_getChar( petindex2, CHAR_UNIQUECODE)
	);
	return TRUE;
}

BOOL CHECK_YEARPET( int toindex)
{
			int i,k,petindex=-1;
			for( i=0;i<CHAR_MAXPETHAVE;i++)	{
				petindex = CHAR_getCharPet( toindex, i);
				if( !CHAR_CHECKINDEX(petindex) )
					continue;
				for( k=0;k<arraysizeof( Re_Pet); k++)	{
					if( CHAR_getInt( petindex, CHAR_PETID) == Re_Pet[k] )	{
						print("\n check yearpet find it");
						return TRUE;
					}
				}
			}
			return FALSE;
}

#endif
*/
#endif

⌨️ 快捷键说明

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