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

📄 char_base.c

📁 石器时代8.0服务端完整源代码。可以直接编译
💻 C
📖 第 1 页 / 共 5 页
字号:
    	ITEM_setItemUniCode(id);#endif#ifdef _ITEM_TIME_LIMIT	if( (id != -1) && ITEM_getWorkInt( id, ITEM_WORKTIMELIMIT) == -1 ){		char    *arg, *p=NULL, tmp[16]="";			long    iTmp;		time_t	iTime;		    	time(&iTime);    	iTmp = iTime;		arg = ITEM_getChar( id, ITEM_ARGUMENT);		if(arg && (p=strstr( arg, "Time")) != NULL ){			//andy_log			print("%s setTime arg:%s \n", ITEM_getChar( id, ITEM_NAME), arg);			strcpy( tmp, (p+4));							iTmp += atoi(tmp)*60;			ITEM_setWorkInt( id, ITEM_WORKTIMELIMIT, iTmp);		}	}#endif    buf = CHAR_chara[index].indexOfExistItems[iindex];    CHAR_chara[index].indexOfExistItems[iindex] = id;    return buf;}INLINE int _CHAR_getPoolItemIndex( char *file, int line, int index ,int iindex){    if( !CHAR_CHECKINDEX(index)) {		print( "err %s:%d from %s:%d\n", __FILE__, __LINE__,file, line);    	return -1;    }    if( CHAR_MAXPOOLITEMHAVE <= iindex || iindex < 0 ) {		print( "err %s:%d from %s:%d \n", __FILE__, __LINE__,file, line);    	return -1;    }    return CHAR_chara[index].indexOfExistPoolItems[iindex];}INLINE int _CHAR_setPoolItemIndex( char *file, int line, int index ,int iindex,int id ){    int buf;    if( !CHAR_CHECKINDEX(index)) {		print( "err %s:%d \n", file, line);    	return -1;    }    if( CHAR_MAXPOOLITEMHAVE <= iindex || iindex < 0 ) {		print( "err %s:%d \n", file, line);    	return -1;    }    buf = CHAR_chara[index].indexOfExistPoolItems[iindex];    CHAR_chara[index].indexOfExistPoolItems[iindex] = id;    return buf;}INLINE BOOL CHAR_setAddressbookEntry( int index , int aindex ,                                 ADDRESSBOOK_entry *a ){    if( !CHAR_CHECKINDEX(index))return FALSE;    if( !CHAR_CHECKADDRESSBOOKINDEX( aindex ))return FALSE;    memcpy( & CHAR_chara[index].addressBook[aindex] , a ,            sizeof(ADDRESSBOOK_entry ));    return TRUE;}INLINE ADDRESSBOOK_entry* CHAR_getAddressbookEntry( int index ,                                                    int aindex){    if( !CHAR_CHECKINDEX(index))return (ADDRESSBOOK_entry*)NULL;    if( !CHAR_CHECKADDRESSBOOKINDEX( aindex ))        return (ADDRESSBOOK_entry*) NULL;    return &CHAR_chara[index].addressBook[aindex];}INLINE Char* CHAR_getCharPointer( int index ){    if( !CHAR_CHECKINDEX(index) )return NULL;    return &CHAR_chara[index];}INLINE int CHAR_getCharNum( void ){    return CHAR_charanum;}INLINE int CHAR_getPlayerMaxNum( void ){    return CHAR_playernum;}INLINE int CHAR_getPetMaxNum( void ){    return CHAR_petnum;}INLINE int CHAR_getOthersMaxNum( void ){    return CHAR_othersnum;}INLINE BOOL CHAR_getCharUse( int index ){    if( !CHAR_CHECKINDEX(index))    	return FALSE;    return CHAR_chara[index].use;}INLINE CHAR_HaveSkill* CHAR_getCharHaveSkill( int index,int sindex ){    if( !CHAR_CHECKINDEX(index))return NULL;    if( !CHAR_CHECKSKILLINDEX(sindex))return NULL;	return &CHAR_chara[index].haveSkill[sindex];}//------------------------------------------------------------------------//人物index  技能位置  索引INLINE int _CHAR_getIntPSkill( char *file, int line, int index, int skillti, SKILL_DATAINT ti){    if( !CHAR_CHECKINDEX( index) ) return -1;    if( !CHAR_CHECKSKILLINDEX( skillti) )  return -1;	if( ti >= SKILL_DATAINTNUM || ti < 0 ){		print(" getIntPSkill()  SKILL_DATAINT (%d) err -%s:%d!!\n", ti , file, line);		return -1;	}	if( CHAR_chara[index].haveSkill[skillti].skill.data[ti] <= 0 ) return -1;	return CHAR_chara[index].haveSkill[skillti].skill.data[ti];}//人物index  技能位置  索引 欲设定值INLINE void _CHAR_setIntPSkill( char *file, int line, int index, int skillti, SKILL_DATAINT ti, int data){    if( !CHAR_CHECKINDEX( index) ) return;    if( !CHAR_CHECKSKILLINDEX( skillti) )  return;	if( ti >= SKILL_DATAINTNUM || ti < 0 ){		print(" getIntPSkill()  SKILL_DATAINT (%d) err -%s:%d!!\n", ti , file, line);		return;	}//	if( CHAR_chara[index].haveSkill[sindex].use > 0 )	CHAR_chara[index].haveSkill[skillti].skill.data[ti] = data;}//------------------------------------------------------------------------#ifdef _PROFESSION_SKILL			// WON ADD 人物职业技能int CHAR_getCharSkill( int index,int sindex ){	CHAR_HaveSkill* hskill;		hskill = CHAR_getCharHaveSkill( index, sindex );	if(hskill != NULL)		return SKILL_getInt( &hskill->skill, SKILL_IDENTITY);	else		return -1;}int CHAR_setCharSkill( int index,int sindex, int new ){	CHAR_HaveSkill* hskill;    if( !CHAR_CHECKINDEX(index))	return -1;    if( !CHAR_CHECKSKILLINDEX(sindex))	return -1;		hskill = CHAR_getCharHaveSkill( index, sindex );	SKILL_setInt( &hskill->skill, SKILL_IDENTITY, new);	return TRUE;}#endifINLINE int CHAR_getCharHaveTitle( int charaindex,int tindex ){    if( !CHAR_CHECKINDEX(charaindex))return 0;    if( !CHAR_CHECKTITLEINDEX(tindex))return 0;    return CHAR_chara[charaindex].indexOfHaveTitle[tindex];}INLINE int CHAR_setCharHaveTitle( int charaindex,int tindex, int new ){    int ret;    if( !CHAR_CHECKINDEX(charaindex))return 0;    if( !CHAR_CHECKTITLEINDEX(tindex))return 0;	if( new != -1 )		if( TITLE_getTitleIndex( new) == -1 ) return 0;    ret = CHAR_getCharHaveTitle( charaindex,tindex);    CHAR_chara[charaindex].indexOfHaveTitle[tindex] = new;    return ret;}INLINE int CHAR_getCharPet( int charaindex,int petindex ){    if( !CHAR_CHECKINDEX(charaindex))return -1;    if( !CHAR_CHECKPETINDEX(petindex))return -1;    return CHAR_chara[charaindex].unionTable.indexOfPet[petindex];}INLINE int CHAR_setCharPet( int charaindex,int petindex, int new ){    int ret;    if( !CHAR_CHECKINDEX(charaindex))return -1;    if( !CHAR_CHECKPETINDEX(petindex))return -1;    ret = CHAR_getCharPet( charaindex,petindex);// CoolFish: 2001/10/12#ifdef _UNIQUE_P_I    if (new != -1)	CHAR_setPetUniCode(new);#endif    CHAR_chara[charaindex].unionTable.indexOfPet[petindex] = new;    return ret;}INLINE int CHAR_getCharPoolPet( int charaindex,int petindex ){    if( !CHAR_CHECKINDEX(charaindex))return -1;    if( !CHAR_CHECKPOOLPETINDEX(petindex))return -1;    return CHAR_chara[charaindex].indexOfPoolPet[petindex];}INLINE int CHAR_setCharPoolPet( int charaindex,int petindex, int new ){    int ret;    if( !CHAR_CHECKINDEX(charaindex))return -1;    if( !CHAR_CHECKPOOLPETINDEX(petindex))return -1;    ret = CHAR_getCharPoolPet( charaindex,petindex);    CHAR_chara[charaindex].indexOfPoolPet[petindex] = new;    return ret;}int CHAR_getCharPetElement( int charaindex ){    int i;    if( !CHAR_CHECKINDEX(charaindex))return -1;	for( i = 0; i < CHAR_MAXPETHAVE; i ++ ) {	    if( CHAR_getCharPet( charaindex,i) == -1 ) break;    }    return ( i == CHAR_MAXPETHAVE ? -1:i );}int CHAR_getCharPoolPetElement( int charaindex ){    int i;	int limit;    if( !CHAR_CHECKINDEX(charaindex))return -1;	//andy_reEdit 2003/09/18	limit = (CHAR_getInt(charaindex,CHAR_TRANSMIGRATION)*2)+5;	limit = min( limit, CHAR_MAXPOOLPETHAVE);	for( i = 0; i < limit; i ++ ) {		if( CHAR_getCharPoolPet( charaindex,i) == -1 ) break;    }    return ( i == limit ? -1:i );}int CHAR_getCharPoolItemIndexElement( int charaindex ){    int i;    int limit;    if( !CHAR_CHECKINDEX(charaindex))return -1;	//andy_reEdit 2003/09/18	limit = (CHAR_getInt(charaindex,CHAR_TRANSMIGRATION)*4)+10;	limit = min( limit, CHAR_MAXPOOLITEMHAVE);	for( i = 0; i < limit; i ++ ) {	    if( CHAR_getPoolItemIndex( charaindex,i) == -1 ) break;    }    // Robin fix	//return ( i == CHAR_MAXPOOLITEMHAVE ? -1:i );	return ( i >= limit ? -1:i );}int CHAR_getEmptyCharPoolItemIndexNum( int charaindex){	int i, cnt = 0;    int limit;    if( !CHAR_CHECKINDEX(charaindex))return 0;	//andy_reEdit 2003/09/18	limit = (CHAR_getInt(charaindex,CHAR_TRANSMIGRATION)*4)+10;	limit = min( limit, CHAR_MAXPOOLITEMHAVE);	for( i = 0; i < limit; i ++ ) {		if( CHAR_getPoolItemIndex( charaindex, i) == -1 ) cnt++;	}	return cnt;}INLINE int _CHAR_getPetSkill( char *file, int line, int petindex, int havepetskillindex ){    if( !CHAR_CHECKINDEX(petindex)) {    	print( "err %s:%d from %s:%d\n", __FILE__, __LINE__, file, line);    	return -1;    }    if( !CHAR_CHECKPETSKILLINDEX(havepetskillindex)) {    	print( "err %s:%d from %s:%d\n", __FILE__, __LINE__, file, line);    	return -1;    }    return CHAR_chara[petindex].unionTable.indexOfPetskill[havepetskillindex];}INLINE int _CHAR_setPetSkill( char *file, int line, int petindex,int havepetskillindex, int new ){    int ret;    if( !CHAR_CHECKINDEX(petindex)) {    	print( "err %s:%d from %s:%d\n", __FILE__, __LINE__, file, line);    	return -1;    }    if( !CHAR_CHECKPETSKILLINDEX(havepetskillindex)) {    	print( "err %s:%d from %s:%d\n", __FILE__, __LINE__, file, line);    	return -1;    }    ret = CHAR_getPetSkill( petindex,havepetskillindex);    CHAR_chara[petindex].unionTable.indexOfPetskill[havepetskillindex] = new;    return ret;}int _CHAR_getPetSkillElement( char *file, int line, int petindex ){    int i;    if( !CHAR_CHECKINDEX(petindex)) {    	print( "err %s:%d from %s:%d\n", __FILE__, __LINE__, file, line);    	return -1;	}	for( i = 0; i < CHAR_MAXPETSKILLHAVE; i ++ ) {	    if( CHAR_getPetSkill( petindex,i) == -1 ) break;    }    return ( i == CHAR_MAXPETSKILLHAVE ? -1:i );}INLINE int CHAR_getCharMakeSequenceNumber( int charaindex ){    if( !CHAR_CHECKINDEX(charaindex))return -1;    return CHAR_chara[charaindex].CharMakeSequenceNumber;}void CHAR_constructFunctable( int charaindex ){    int     i;    if( !CHAR_CHECKINDEX(charaindex))return;    for( i=CHAR_FIRSTFUNCTION; i < CHAR_LASTFUNCTION ; i++ )        CHAR_chara[charaindex].functable[i-CHAR_FIRSTFUNCTION]            = getFunctionPointerFromName( CHAR_getCharfunctable( charaindex,i ) );}void* CHAR_getFunctionPointer( int charaindex, int functype ){    if( !CHAR_CHECKINDEX(charaindex) )return NULL;    if( functype < CHAR_FIRSTFUNCTION  || functype >= CHAR_LASTFUNCTION )        return NULL;    return CHAR_chara[charaindex].functable[functype];}BOOL CHAR_initCharArray( int pnum, int petnum,int onum ){    int     i;    BOOL CHAR_checksetdata( void );    if( CHAR_checksetdata() == FALSE ){		print(" err CHAR_checksetdata() FALSE !!\n");		return FALSE;	}	//andy_log	print("#");    CHAR_initSeekGraphicNumberFromString();    CHAR_initChatMagic();	CHAR_charanum = pnum + petnum +onum;	//andy_log	print("#");    CHAR_chara = allocateMemory( sizeof( Char ) * CHAR_charanum );    if( CHAR_chara == NULL ){		print("无法分配人物内存 !!\n");		return FALSE;	}	//andy_log	print("人物内存: %4.2f...", ((float)sizeof( Char )*CHAR_charanum)/1024);    for( i = 0 ; i < CHAR_charanum ; i ++ ){		memset( &CHAR_chara[i], 0 , sizeof( Char ));	}    for( i = 0 ; i < pnum ; i ++ ){#ifdef _NPC_SEPARATEDATA		CHAR_InitCharTempNum( &CHAR_chara[i] );#endif	}    CHAR_playernum = pnum;    CHAR_petnum = petnum;    CHAR_othersnum = onum;    return TRUE;}BOOL CHAR_endCharArray( void ){#ifdef _NPC_SEPARATEDATA	CHAR_EndCharTempNum();#endif    freeMemory( CHAR_chara );    CHAR_charanum = 0;    return TRUE;}BOOL CHAR_getCharOnArrayPercentage( int mode, int *max, int *min, int *cnt){	int po=0, Dnums=0;	po = initCharCounter[0].endcnt;	*cnt = -1;	while( 1){		if( !CHAR_chara[po].use ){		}else{			Dnums++;		}		po++;		if( po >= initCharCounter[mode].endcnt ){			break;		}	}	*cnt = Dnums;	*max = initCharCounter[mode].endcnt - initCharCounter[mode].startcnt;	*min = 0;

⌨️ 快捷键说明

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