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

📄 char.c

📁 石器时代8.0服务端完整源代码。可以直接编译
💻 C
📖 第 1 页 / 共 5 页
字号:
		int tough=ch.data[CHAR_TOUGH];

		ch.data[CHAR_INITDATA] = 2*100*100*100*100 /*+ hp*100*100*100*/
			+ mp*100*100 + str* 100 + tough;
	}

	charaindex =  CHAR_initCharOneArray( &ch );
	if( charaindex == -1 ) {
		lssproto_CreateNewChar_send( clifd ,FAILED, "");
        CONNECT_setState( clifd, NOTLOGIN );
		return;
	}
	
/*#ifdef _NEW_TESTSERVER	//伊甸测试伺服
	{
		int petTemp[]={ 2258, 1610, 353, 2474, -1}; //朱雀、
		int petNum=0;
		int k=0;
		int i=0,j=0;

#ifdef _75_TEST
		if( CHAR_getInt( charaindex, CHAR_LASTTALKELDER) == 1 )//玛丽娜丝
			petTemp[4] = 2;//凯比
		else if( CHAR_getInt( charaindex, CHAR_LASTTALKELDER) == 2 )//加加
			petTemp[4]  = 3;//克克尔
		else if( CHAR_getInt( charaindex, CHAR_LASTTALKELDER) == 3 )//卡鲁它那
			petTemp[4]  = 4;//威伯
		else 
			petTemp[4] = 1;//乌力
#else
		j=2;
		for( i=0; i< arraysizeof(ridePetTable) ; i++ ){
			if( CHAR_getInt( charaindex, CHAR_BASEBASEIMAGENUMBER) == ridePetTable[i].charNo ){
				petTemp[j]= ridePetTable[i].petId;
				j++;
				if( j >= arraysizeof( petTemp) )
					break;
			}
		}
#endif

		j=0;
		for( petNum=0; petNum<arraysizeof( petTemp); petNum++)	{
			enemyarray = ENEMY_getEnemyArrayFromId( petTemp[ petNum]); //白虎
			petindex = ENEMY_createPetFromEnemyIndex( charaindex, enemyarray);
			if( petindex == -1 ) {
				continue;
			}
			add_pet[j]=petindex;
			j++;
			for( k = 1; k < 140; k ++ ){	//升级
				CHAR_PetLevelUp( petindex );
				CHAR_PetAddVariableAi( petindex, AI_FIX_PETLEVELUP );
				CHAR_setInt( petindex, CHAR_LV, CHAR_getInt( petindex, CHAR_LV) +1 );
			}
			CHAR_complianceParameter( petindex );
			CHAR_setInt( petindex , CHAR_HP , CHAR_getWorkInt( petindex , CHAR_WORKMAXHP ) );
#ifdef _75_TEST
			CHAR_setInt( petindex , CHAR_TRANSMIGRATION , 1 );
#endif
		}
//		CHAR_setInt( charaindex, CHAR_FLOOR, 130);
//		CHAR_setInt( charaindex, CHAR_X, 20);
//		CHAR_setInt( charaindex, CHAR_Y, 55);
	}
#else
#ifdef _DELBORNPLACE //Syu ADD 6.0 统一出生於新手村
	if( getMuseum() ) {
		if ( BornPet > 3 ) BornPet = 3;
		if ( BornPet < 0 ) BornPet = 0;
		enemyarray = ENEMY_getEnemyArrayFromId( BornPet + 2076);
	}
	else {
		enemyarray = ENEMY_getEnemyArrayFromId( hometown + 1);
	}
#else
	enemyarray = ENEMY_getEnemyArrayFromId( hometown + 1);
#endif
	petindex = ENEMY_createPetFromEnemyIndex( charaindex, enemyarray);
	if( !CHAR_CHECKINDEX( petindex )){
		CHAR_endCharOneArray( charaindex);
		lssproto_CreateNewChar_send( clifd ,FAILED, "");
        CONNECT_setState( clifd, NOTLOGIN );
		return;
	}
	CHAR_setMaxExpFromLevel( petindex, 1);

#endif*/

#ifdef _NEW_PLAYER_CF	//新手出生配置
		int petTemp[]={ 2258, 1610, 353, 2474, -1}; //朱雀、
		int petNum=0;
		int k=0;
		int i=0,j=0;
		int mylevel,level;
		if(getNewplayergivepet(0)==-1){
			if( CHAR_getInt( charaindex, CHAR_LASTTALKELDER) == 1 )//玛丽娜丝
				setNewplayergivepet(0,2);
			else if( CHAR_getInt( charaindex, CHAR_LASTTALKELDER) == 2 )//加加
				setNewplayergivepet(0,3);
			else if( CHAR_getInt( charaindex, CHAR_LASTTALKELDER) == 3 )//卡鲁它那
				setNewplayergivepet(0,4);
			else 
				setNewplayergivepet(0,1);
		}
		
		for( petNum=0; petNum<5; petNum++)	{
			if(getNewplayergivepet(petNum)==-1)continue;
			enemyarray = ENEMY_getEnemyArrayFromId( getNewplayergivepet(petNum)); //白虎
			petindex = ENEMY_createPetFromEnemyIndex( charaindex, enemyarray);
			if( petindex == -1 ) {
				continue;
			}
			add_pet[j]=petindex;
			mylevel = CHAR_getInt( petindex, CHAR_LV);
			level = getNewplayerpetlv()-mylevel;
			if(level<1)level=1;
			for( k = 1; k < level; k ++ ){	//升级
				CHAR_PetLevelUp( petindex );
				CHAR_PetAddVariableAi( petindex, AI_FIX_PETLEVELUP );
				CHAR_setInt( petindex, CHAR_LV, CHAR_getInt( petindex, CHAR_LV) +1 );
			}
			CHAR_complianceParameter( petindex );
			CHAR_setInt( petindex , CHAR_HP , CHAR_getWorkInt( petindex , CHAR_WORKMAXHP ) );
		}
#endif

#ifdef _HELP_NEWHAND
	CHAR_loginAddItemForNew(charaindex); 
#endif

#if 1
	if( CHAR_makeDBKey(  charaindex, szKey, sizeof( szKey ) ) != FALSE ){
		int dp;
		char info[512];
		snprintf( info, sizeof( info),
					"%d,%d,%d,%d,%d,%d",
					CHAR_getInt( charaindex, CHAR_LV),
					CHAR_getInt( charaindex, CHAR_DUELBATTLECOUNT),
					CHAR_getInt( charaindex, CHAR_DUELWINCOUNT),
					CHAR_getInt( charaindex, CHAR_DUELLOSECOUNT),
					CHAR_getInt( charaindex, CHAR_DUELSTWINCOUNT),
					CHAR_getInt( charaindex, CHAR_DUELMAXSTWINCOUNT));
		dp = CHAR_getInt( charaindex, CHAR_DUELPOINT );
		saacproto_DBUpdateEntryInt_send(
			acfd,
			DB_DUELPOINT,
			szKey,
			(max(dp,0)),
			info,
            CONNECT_getFdid(clifd ),0 );
	}
#endif
    chwk = CHAR_getCharPointer( charaindex);
#ifdef _AUTO_ADDADDRESS
	{
		int playernum = CHAR_getPlayerMaxNum();
		int i, k, oldnum=0, newnum=0;
		i = charaindex;
		for( k=0 ; k< playernum ; k++ ){
			char token[256];
			if( ++i >= playernum ) i = 0;
			if( i < 0 ) i =0;
			if( !CHAR_getCharUse(i) ) continue;
			if( charaindex == i ) continue;
 			if( !CHAR_getFlg( i, CHAR_ISTRADECARD) ) continue;
			if( oldnum < 3 && CHAR_getInt( i, CHAR_LV) > 100 ){
				if( ADDRESSBOOK_AutoaddAddressBook( charaindex, i) == TRUE ){
					sprintf( token, "新手-%s 加入石器,并与你交换名片。", CHAR_getUseName( charaindex));
					CHAR_talkToCli( i, -1, token, CHAR_COLORYELLOW);
					oldnum++;
				}
			}else if( newnum < 5 && CHAR_getInt( i, CHAR_LV) < 30 ){
				if( ADDRESSBOOK_AutoaddAddressBook( charaindex, i) == TRUE ){
					sprintf( token, "新手-%s 加入石器,并与你交换名片。", CHAR_getUseName( charaindex));
					CHAR_talkToCli( i, -1, token, CHAR_COLORYELLOW);
					newnum++;
				}
			}
			if( newnum >= 5 && oldnum >= 3 )
				break;
		}
	}
#endif

#ifdef _NEW_PLAYER_CF	//新手出生配置

	CHAR_charSaveFromConnectAndChar( clifd,chwk ,FALSE );
	CHAR_endCharData(&ch);
	CHAR_endCharOneArray( charaindex);
	{
		int k=0;
		for( k=0;k<arraysizeof( add_pet); k++)	{
			CHAR_endCharOneArray( add_pet[k]);
		}
	}
    CONNECT_setState( clifd, WHILECREATE );
#endif

/*#ifdef _NEW_TESTSERVER	//伊甸测试伺服
	{
#ifdef _75_TEST
		int event_end[] = { 4, 81, 48, 49, 50, 51, 52, 63, 69, 70, 71, 72, 81, 88, 89, 109, 110, 111, 112, 113, 114, 115, 116, 118, 122, 127, 131, 136, 158, 159, 174, 102};
		int event_now[] = { 71};
		int i;
		for( i=0; i < arraysizeof( event_end); i++)	{
			NPC_EventSetFlg( charaindex, event_end[i]);
		}
		for( i=0; i < arraysizeof( event_now); i++)	{
			NPC_NowEventSetFlg( charaindex, event_now[i]);
		}
#else
		int event_end[] = { 4, 69, 70, 71, 72, 81, 48, 49, 50, 51, 52};
		int event_now[] = { 71};
		int i;
		for( i=0; i < arraysizeof( event_end); i++)	{
			NPC_EventSetFlg( charaindex, event_end[i]);
		}
		for( i=0; i < arraysizeof( event_now); i++)	{
			NPC_NowEventSetFlg( charaindex, event_now[i]);
		}
#endif


//7.0测试机不设出生点
		if( CHAR_getInt( charaindex, CHAR_LASTTALKELDER) == 35 )	{
			CHAR_setInt( charaindex, CHAR_FLOOR, 7407);
			CHAR_setInt( charaindex, CHAR_X, 27);
			CHAR_setInt( charaindex, CHAR_Y, 6);
		}else	{
			CHAR_setInt( charaindex, CHAR_LASTTALKELDER, 36);
			CHAR_setInt( charaindex, CHAR_FLOOR, 7305);
			CHAR_setInt( charaindex, CHAR_X, 21);
			CHAR_setInt( charaindex, CHAR_Y, 10);
		}

	}
	CHAR_charSaveFromConnectAndChar( clifd,chwk ,FALSE );
	CHAR_endCharData(&ch);
	CHAR_endCharOneArray( charaindex);
	{
		int k=0;
		for( k=0;k<arraysizeof( add_pet); k++)	{
			CHAR_endCharOneArray( add_pet[k]);
		}
	}
    CONNECT_setState( clifd, WHILECREATE );

#else
	CHAR_charSaveFromConnectAndChar( clifd,chwk ,FALSE );
	CHAR_endCharData(&ch);
	CHAR_endCharOneArray( charaindex);
	CHAR_endCharOneArray( petindex);
    CONNECT_setState( clifd, WHILECREATE );
#endif*/

}

static void CHAR_setCharFuncTable( Char *ch)
{
	int i;
	char *tmp[CHAR_FUNCTABLENUM] = {
		"",                 /*  CHAR_INITFUNC */
		"core_PreWalk",     /*  CHAR_WALKPREFUNC    */
		"core_PostWalk",    /*  CHAR_WALKPOSTFUNC   */
		"",                 /*  CHAR_PREOVERFUNC    */
		"",                 /*  CHAR_PREOVERFUNC    */
		"core_PlayerWatch", /*  CHAR_WATCHFUNC  */
		"core_Loop",        /*  CHAR_LOOPFUNC */
		"core_Dying",       /*  CHAR_DYINGFUNC */
		"core_PlayerTalked",/*  CHAR_TALKEDFUNC */
		"",                 /*  CHAR_PREATTACKEDFUNC    */
		"",                 /*  CHAR_POSTATTACKEDFUNC    */
		"",                 /*  CHAR_OFFFUNC    */
		"",                 /*  CHAR_LOOKEDFUNC */
		"",                 /*  CHAR_ITEMPUTFUNC    */
		"",                 /*  CHAR_SPECIALTALKEDFUNC    */
		"",                 /*  CHAR_WINDOWTALKEDFUNC    */
#ifdef _USER_CHARLOOPS
		"",					//	CHAR_LOOPFUNCTEMP1,
		"",					//	CHAR_LOOPFUNCTEMP2,
		"",					//CHAR_BATTLEPROPERTY,
#endif
	};
	for( i = 0; i < CHAR_FUNCTABLENUM; i ++ ) {
		strcpysafe( ch->charfunctable[i].string,
					sizeof( ch->charfunctable[i]),
					tmp[i]);
	}
}

void CHAR_loginAddItem( int charaindex )
{
/*
	int emptyindex, itemindex, id;
	int itemID[10]={	20128, 20130, 20171, 20176, 20296,
					20287, 20288, 20289, 20290, 20291};

	{
		int trn_num=0;
		trn_num=CHAR_getInt(charaindex,CHAR_TRANSMIGRATION);
		CHAR_setInt( charaindex, CHAR_MAXPOOLITEMHAVELIMIT, 10 + (trn_num * 4) )	;	
		CHAR_setInt( charaindex, CHAR_MAXPOOLPETHAVELIMIT , 5 + (trn_num * 2) );
	}
	while( 1){
		emptyindex = CHAR_findEmptyItemBox( charaindex );
		if( emptyindex == -1 ) break;
		id = rand()%10;
		itemindex = ITEM_makeItemAndRegist( itemID[id] );
		if( !ITEM_CHECKINDEX( itemindex) ) break;
		CHAR_setItemIndex( charaindex, emptyindex, itemindex);
		ITEM_setWorkInt( itemindex, ITEM_WORKCHARAINDEX, charaindex);
		ITEM_setWorkInt( itemindex, ITEM_WORKOBJINDEX, -1);
		//andy_log
		print("@:%d.", emptyindex);
	}
	while( 1){
		emptyindex = CHAR_findEmptyPoolItemBox( charaindex );
		if( emptyindex == -1 ) break;
		id = rand()%10;
		itemindex = ITEM_makeItemAndRegist( itemID[id] );
		if( !ITEM_CHECKINDEX( itemindex) ) break;

		CHAR_setPoolItemIndex( charaindex, emptyindex, itemindex);
		ITEM_setWorkInt( itemindex, ITEM_WORKCHARAINDEX, charaindex);
		ITEM_setWorkInt( itemindex, ITEM_WORKOBJINDEX, -1);
		//andy_log
		print("&:%d.", emptyindex);
	}
*/
}

void CHAR_loginCheckUserItem( int charaindex)
{
	typedef void (*ATTACHFUNC)(int,int);
	int i, itemindex;
	for( i=0; i<CHAR_STARTITEMARRAY; i++){ //检查装备中道具
		int ti;
		itemindex = CHAR_getItemIndex( charaindex , i );
		if( !ITEM_CHECKINDEX( itemindex)){
			continue;
		}
		ITEM_reChangeItemName( itemindex);
#ifdef _ITEM_PILENUMS
		ITEM_reChangeItemToPile( itemindex);
#endif
		ITEM_setItemUniCode( itemindex);

#ifdef _ANGEL_SUMMON
		if( ITEM_getInt( itemindex, ITEM_ID) == ANGELITEM 
			|| ITEM_getInt( itemindex, ITEM_ID) == HEROITEM ) {
			int mindex, mission;
			// 检查信物所有人是否任务中
			mindex = checkIfAngelByName( ITEM_getChar( itemindex, ITEM_ANGELINFO));
			mission = atoi( ITEM_getChar( itemindex, ITEM_ANGELMISSION));
			if( mindex < 0 || mission != missiontable[mindex].mission ) {
				CHAR_setItemIndex( charaindex, i, -1 );
				ITEM_endExistItemsOne( itemindex);
				CHAR_sendItemDataOne( charaindex, i);
				continue;
			}

			if( ITEM_getInt( itemindex, ITEM_ID) == ANGELITEM ) {
				char nameinfo[128];
				getMissionNameInfo( charaindex, nameinfo);
				// 检查使者信物装备中
				if( !strcmp( ITEM_getChar( itemindex, ITEM_ANGELINFO), nameinfo) ) {
					//CHAR_setWorkInt( charaindex, CHAR_WORKANGELMODE, TRUE);
					CHAR_sendAngelMark( CHAR_getWorkInt( charaindex, CHAR_WORKOBJINDEX), 1);
				}
			}
		}
#endif

#ifdef _CHECK_ITEM_MODIFY
		ITEM_checkItemModify( charaindex, itemindex);
#endif

		//Change fix 2004/07/05
		//与人物职业不合的道具拿下//////////////////
		if( ITEM_getInt( charaindex, ITEM_NEEDPROFESSION) != 0 ){
			if( CHAR_getInt( charaindex, PROFESSION_CLASS ) != ITEM_getInt( itemindex, ITEM_NEEDPROFESSION) 
				&& ITEM_getInt( itemindex, ITEM_NEEDPROFESSION) > 0 ){
				if( (ti = CHAR_findEmptyItemBox( charaindex )) != -1 ){
					CHAR_setItemIndex( charaindex , i, -1);
					CHAR_setItemIndex( charaindex , ti, itemindex);
				}
				continue;
			}
		}
		////////////////////////////////////////////


		if( (i == ITEM_getEquipPlace( charaindex, itemindex )) ||
			i == CHAR_DECORATION1 || i == CHAR_DECORATION2 ){
			char category[256];
			ATTACHFUNC atf;
			atf=(ATTACHFUNC)ITEM_getFunctionPointer(itemindex,ITEM_ATTACHFUNC);
			if( atf )	atf( charaindex, itemindex );
			if( ITEM_canuseMagic( itemindex)) {
				snprintf( category, sizeof( category), "J%d",i);
				CHAR_sendStatusString( charaindex, category );
			}
		}else{
			if( (ti = CHAR_findEmptyItemBox( charaindex )) == -1 ) continue;
			CHAR_setItemIndex( charaindex , i, -1);
			CHAR_setItemIndex( charaindex , ti, itemindex);
		}

⌨️ 快捷键说明

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