📄 char_base.c
字号:
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 + -