?? char_base.c
字號(hào):
return TRUE;}int CHAR_initCharOneArray( Char* ch ){ int i; int mode; int ret = TRUE; int first; static unsigned int CharMakeSequenceNumber = 0; if( initCharCounter[0].startcnt == -1 ) { initCharCounter[0].startcnt = 0; initCharCounter[0].cnt = initCharCounter[0].startcnt; initCharCounter[0].endcnt = CHAR_playernum; initCharCounter[1].startcnt = initCharCounter[0].endcnt; initCharCounter[1].cnt = initCharCounter[0].endcnt; initCharCounter[1].endcnt = CHAR_playernum + CHAR_petnum; initCharCounter[2].startcnt = initCharCounter[1].endcnt; initCharCounter[2].cnt = initCharCounter[1].endcnt; initCharCounter[2].endcnt = CHAR_charanum; } if( ch->data[CHAR_WHICHTYPE] == CHAR_TYPEPLAYER ){ mode = 0; }else if( CHAR_TYPEPET == ch->data[CHAR_WHICHTYPE] ) { mode = 1; }else{ mode = 2; } i = initCharCounter[mode].cnt; first = TRUE; while( 1 ){ if( !first && i >= initCharCounter[mode].cnt ) { ret = FALSE; break; } if( CHAR_chara[i].use == FALSE ){ ret = TRUE; break; }else{ i++; if( i >= initCharCounter[mode].endcnt ){ i = initCharCounter[mode].startcnt; first = FALSE; } } } if( ret ){ typedef BOOL (*INITFUNC)(int index); INITFUNC initfunc;#ifdef _NPC_SEPARATEDATA ch->tempint = CHAR_chara[i].tempint; CHAR_getDefaultCharTempNum( ch);#endif memset( &CHAR_chara[i] , 0, sizeof( Char ) ); memcpy( &CHAR_chara[i] , ch , sizeof( Char ) ); initfunc = (INITFUNC)getFunctionPointerFromName( ch->charfunctable[CHAR_INITFUNC].string ); if( initfunc ) { if( initfunc( i ) == FALSE ){ CHAR_chara[i].use = FALSE; ret = FALSE; } } if( ret ){ CHAR_chara[i].use = TRUE; CHAR_constructFunctable( i ); if( i + 1 >= initCharCounter[mode].endcnt ) { initCharCounter[mode].cnt = initCharCounter[mode].startcnt; }else { initCharCounter[mode].cnt = i+1; } CHAR_chara[i].CharMakeSequenceNumber = CharMakeSequenceNumber++; if( CharMakeSequenceNumber == 0xffffffff) CharMakeSequenceNumber = 0; } }else{ fprint( "Error: Char full\n" ); } return ret ? i: -1;}void CHAR_removeHaveItem( Char* ch ){ int i; if( ch == NULL )return; for( i=0 ; i<CHAR_MAXITEMHAVE ; i++ ) { int itemindex = ch->indexOfExistItems[i]; ch->indexOfExistItems[i] = -1; ITEM_endExistItemsOne( itemindex ); }}void CHAR_removeHavePoolItem( Char* ch ){ int i; if( ch == NULL )return; for( i=0 ; i<CHAR_MAXPOOLITEMHAVE ; i++ ) { int itemindex = ch->indexOfExistPoolItems[i]; ch->indexOfExistPoolItems[i] = -1; ITEM_endExistItemsOne( itemindex ); }}void CHAR_endCharData( Char* ch ){ if( ch == NULL ){ return; } CHAR_removeHaveItem( ch ); CHAR_removeHavePoolItem( ch);#ifdef _CHAR_POOLITEM// CHAR_removeHaveDepotItem( ch );#endif#ifdef _CHAR_POOLPET// CHAR_removeHaveDepotPet( ch );#endif ch->use = FALSE;}void CHAR_endCharOneArray( int index ){ Char* ch = NULL; if( !CHAR_CHECKINDEX( index) ) return; ch = CHAR_getCharPointer(index); if( ch == NULL ){ print( "CHAR_endCharOneArray err ch == NULL :%d\n", index); return; } CHAR_endCharData( ch );}static char CHAR_dataString[STRINGBUFSIZ*16*2];BOOL CHAR_checksetdata( void ){ int i; char* strings[CHAR_DATAINTNUM + CHAR_DATACHARNUM]; int stringnum=0; for(i = 0; i < CHAR_DATAINTNUM ; i ++ ){ if( CHAR_setintdata[i][0] != '#' ) strings[stringnum++] = CHAR_setintdata[i]; } for( i = 0 ; i < CHAR_DATACHARNUM ; i ++ ){ if( CHAR_setchardata[i][0] != '#' ) strings[stringnum++] = CHAR_setchardata[i]; } if( ! checkStringsUnique( strings, stringnum , 1 ) ){ fprint( "set????data is overlapped.\nIt is not allowed\n"); return FALSE; } return TRUE;}#define FLGRESERVESTRING "flg"#define ITEMRESERVESTRING "item"#define POOLITEMRESERVESTRING "poolitem"#define SKILLRESERVESTRING "skill"#define TITLERESERVESTRING "title"#define ADDRESSBOOKRESERVESTRING "adr"#define PETSERVERSTRING "pet"#define PETITEMRESERVESTRING "pitem"#define PETSKILLSERVERSTRING "psk"#define POOLPETSERVERSTRING "poolpet"#define ITEMPOOLRESERVESTRING "itempool"#define DATAENDCHECKPOINT "DATAEND"#ifdef _CHAR_POOLITEM#define DEPOTITEMRESERVESTRING "Depotitem"#endif#ifdef _CHAR_POOLPET#define DEPOTPETRESERVESTRING "Depotpet"#endifchar* CHAR_makeStringFromCharData( Char* one ){ int i; int petnum; int strlength=0; if (!one) return NULL; memset( CHAR_dataString, 0, sizeof(CHAR_dataString)); for( i = 0 ; i < CHAR_DATAINTNUM ; i ++ ){ char linedata[256]; snprintf( linedata , sizeof(linedata), "%s=%d" CHAR_DELIMITER, CHAR_setintdata[i], one->data[i] ); strcpysafe( &CHAR_dataString[strlength], sizeof( CHAR_dataString ) - strlength, linedata ); strlength += strlen( linedata ); if( strlength > sizeof( CHAR_dataString ) ) { fprint( "err chardata buffer over\n"); goto RETURN; } } for( i = 0 ; i < CHAR_DATACHARNUM ; i ++ ){ char linedata[256]; char escapebuffer[256]; snprintf( linedata , sizeof(linedata), "%s=%s" CHAR_DELIMITER, CHAR_setchardata[i], makeEscapeString( one->string[i].string, escapebuffer, sizeof( escapebuffer) )); strcpysafe( &CHAR_dataString[strlength], sizeof( CHAR_dataString ) - strlength, linedata ); strlength += strlen( linedata ); if( strlength > sizeof( CHAR_dataString ) ) { fprint( "err chardata buffer over\n"); goto RETURN; } } for( i = 0 ; i < arraysizeof( one->flg ) ; i ++ ){ char linedata[128]; snprintf( linedata , sizeof(linedata), FLGRESERVESTRING "%d=%d" CHAR_DELIMITER, i, one->flg[i]); strcpysafe( &CHAR_dataString[strlength], sizeof( CHAR_dataString ) - strlength, linedata ); strlength += strlen( linedata ); if( strlength > sizeof( CHAR_dataString ) ) { fprint( "err chardata buffer over\n"); goto RETURN; } } for( i = 0 ; i < CHAR_SKILLMAXHAVE ; i ++ ){ char linedata[128]; char *skillstring=NULL; if( one->haveSkill[i].use == TRUE) skillstring = SKILL_makeStringFromSkillData( &one->haveSkill[i].skill ); if( skillstring == NULL ) continue; snprintf( linedata , sizeof( linedata ), SKILLRESERVESTRING "%d=%s" CHAR_DELIMITER, i,skillstring ); strcpysafe( &CHAR_dataString[strlength], sizeof( CHAR_dataString ) - strlength, linedata ); strlength += strlen( linedata ); if( strlength > sizeof( CHAR_dataString ) ) { fprint( "err chardata buffer over\n"); goto RETURN; } } for( i = 0 ; i < CHAR_MAXITEMHAVE ; i ++ ){ char linedata[2048]; char *itemstring=NULL; if( one->indexOfExistItems[i] != -1 ) itemstring = ITEM_makeStringFromItemIndex( one->indexOfExistItems[i], 0); if( itemstring == NULL )continue; snprintf( linedata , sizeof( linedata ), ITEMRESERVESTRING "%d=%s" CHAR_DELIMITER, i, itemstring); strcpysafe( &CHAR_dataString[strlength], sizeof( CHAR_dataString ) - strlength, linedata ); strlength += strlen( linedata ); if( strlength > sizeof( CHAR_dataString ) ) { fprint( "err chardata buffer over\n"); goto RETURN; } } for( i = 0 ; i < CHAR_MAXPOOLITEMHAVE ; i ++ ){ char linedata[2048]; char *itemstring=NULL; if( one->indexOfExistPoolItems[i] != -1 ) itemstring = ITEM_makeStringFromItemIndex( one->indexOfExistPoolItems[i], 0); if( itemstring == NULL )continue; snprintf( linedata , sizeof( linedata ), POOLITEMRESERVESTRING "%d=%s" CHAR_DELIMITER, i, itemstring); strcpysafe( &CHAR_dataString[strlength], sizeof( CHAR_dataString ) - strlength, linedata ); strlength += strlen( linedata ); if( strlength > sizeof( CHAR_dataString ) ) { fprint( "err chardata buffer over\n"); goto RETURN; } } for( i = 0 ; i < CHAR_TITLEMAXHAVE ; i ++ ){ char linedata[128]; if( one->indexOfHaveTitle[i]< 0 || one->indexOfHaveTitle[i] >= CHAR_TITLEMAXHAVE ) { continue; } snprintf( linedata , sizeof( linedata ), TITLERESERVESTRING "%d=%d" CHAR_DELIMITER, i, one->indexOfHaveTitle[i] ); strcpysafe( &CHAR_dataString[strlength], sizeof( CHAR_dataString ) - strlength, linedata ); strlength += strlen( linedata ); if( strlength > sizeof( CHAR_dataString ) ) { fprint( "err chardata buffer over\n"); goto RETURN; } } for( i=0 ; i < ADDRESSBOOK_MAX ; i++ ){ char linedata[512]; char *p; p = ADDRESSBOOK_makeAddressbookString(&one->addressBook[i]); if( strlen( p) == 0 ) { continue; } snprintf( linedata ,sizeof(linedata), ADDRESSBOOKRESERVESTRING "%d=%s" CHAR_DELIMITER, i,p ); strcpysafe( &CHAR_dataString[strlength], sizeof( CHAR_dataString ) - strlength, linedata ); strlength += strlen( linedata ); if( strlength > sizeof( CHAR_dataString ) ) { fprint( "err chardata buffer over\n"); goto RETURN; } } for( petnum = 0; petnum < CHAR_MAXPETHAVE; petnum ++ ) { int petindex; char linedata[4096*2]; char *petstring; petindex = one->unionTable.indexOfPet[petnum]; if( !CHAR_CHECKINDEX(petindex))continue; petstring = CHAR_makePetStringFromPetIndex( petindex); if( petstring == NULL ) continue; snprintf( linedata , sizeof(linedata), PETSERVERSTRING "%d=%s" CHAR_DELIMITER,petnum,petstring ); strcpysafe( &CHAR_dataString[strlength], sizeof( CHAR_dataString ) - strlength, linedata ); strlength += strlen( linedata ); if( strlength > sizeof( CHAR_dataString ) ) { fprint( "err chardata buffer over\n"); goto RETURN; } } for( petnum = 0; petnum < CHAR_MAXPOOLPETHAVE; petnum ++ ) { int petindex; char linedata[4096*2]; char *petstring; petindex = one->indexOfPoolPet[petnum]; if( !CHAR_CHECKINDEX(petindex))continue; petstring = CHAR_makePetStringFromPetIndex( petindex); if( petstring == NULL ) continue; //andy_log if( strstr( petstring, "name:") == NULL || strstr( petstring, "ownt:") == NULL ) { LodBadPetString( "petstring", "poolpet string buffer err:", petnum); fprint( "ANDY err poolpet string buffer err:\n%s\n", petstring); goto RETURN; } snprintf( linedata , sizeof(linedata), POOLPETSERVERSTRING "%d=%s" CHAR_DELIMITER,petnum,petstring ); strcpysafe( &CHAR_dataString[strlength], sizeof( CHAR_dataString ) - strlength, linedata ); strlength += strlen( linedata ); if( strlength > sizeof( CHAR_dataString ) ) { fprint( "err chardata buffer over\n"); goto RETURN; } }#ifdef _CHAR_FIXDATADEF { char linedata[1024]; memset( linedata, 0, sizeof(linedata)); snprintf( linedata , sizeof(linedata), DATAENDCHECKPOINT "=%d" CHAR_DELIMITER, (int)time(NULL)/1000); strcpysafe( &CHAR_dataString[strlength], sizeof( CHAR_dataString ) - strlength, linedata ); if( strlength > sizeof( CHAR_dataString ) ) { LodBadPetString( "DATAENDCHECKPOINT", "err chardata buffer over", -1); fprint( "err chardata buffer over:DATAENDCHECKPOINT !\n"); goto MAKESTRINGERR; } }#endifRETURN: if( strstr( CHAR_dataString, DATAENDCHECKPOINT) == NULL ){ LodBadPetString( CHAR_dataString, "err mk dataString no end", -1); } return CHAR_dataString;MAKESTRINGERR: return NULL;}char* CHAR_makeStringFromCharIndex( int index ){ if( 0 <= index && index <= CHAR_charanum /* index OK*/ && CHAR_chara[index].use == TRUE ) /* OK */; else return NULL; return CHAR_makeStringFromCharData(&CHAR_chara[index]);}BOOL CHAR_makeCh
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -