?? enemy.c
字號:
if( f == NULL ){
print( "文件打開失敗\n");
return FALSE;
}
ENEMY_enemynum=0;
while( fgets( line, sizeof( line ), f ) ){
linenum ++;
if( line[0] == '#' )continue; /* comment */
if( line[0] == '\n' )continue; /* none */
chomp( line );
#ifdef _ENEMY_OPTIMUM // Robin 取出最大ENEMY ID
if( getStringFromIndexWithDelim( line, ",", ENEMY_DATACHARNUM+ENEMY_ID+1,
token, sizeof(token)) == FALSE )
continue;
max_enemyid = max( atoi( token), max_enemyid);
#endif
ENEMY_enemynum++;
}
if( fseek( f, 0, SEEK_SET ) == -1 ){
fprint( "尋找失敗\n" );
fclose(f);
return FALSE;
}
#ifdef _ENEMY_OPTIMUM
print("\n 有效ET:%d 最大ET:%d \n", ENEMY_enemynum, max_enemyid);
ENEMY_enemynum = max_enemyid +1;
#endif
ENEMY_enemy = allocateMemory( sizeof(struct tagENEMY_EnemyTable)
* ENEMY_enemynum );
if( ENEMY_enemy == NULL ){
fprint( "無法分配內存 %d\n" ,
sizeof(struct tagENEMY_EnemyTable)*ENEMY_enemynum);
fclose( f );
return FALSE;
}
for( i = 0; i < ENEMY_enemynum; i ++ ) {
for( j = 0; j < ENEMY_DATAINTNUM; j ++ ) {
ENEMY_setInt( i,j,-1);
}
}
linenum = 0;
while( fgets( line, sizeof( line ), f ) ){
linenum ++;
if( line[0] == '#' )continue; /* comment */
if( line[0] == '\n' )continue; /* none */
chomp( line );
replaceString( line, '\t' , ' ' );
{
char buf[256];
for( i = 0; i < strlen( line); i ++) {
if( line[i] != ' ' ) {
break;
}
strcpy( buf, &line[i]);
}
if( i != 0 ) {
strcpy( line, buf);
}
}
{
char token[256];
int ret;
#ifdef _ENEMY_OPTIMUM
if( getStringFromIndexWithDelim( line, ",", ENEMY_DATACHARNUM+ENEMY_ID+1,
token, sizeof(token)) == FALSE )
continue;
enemy_readlen = atoi(token);
#endif
if( ret==FALSE ){
fprint("文件語法錯誤:%s 第%d行\n",filename,linenum);
continue;
}
ENEMY_setChar( enemy_readlen, ENEMY_NAME, token);
ret = getStringFromIndexWithDelim( line,",",2,token,sizeof(token));
if( ret==FALSE ){
fprint("文件語法錯誤:%s 第%d行\n",filename,linenum);
continue;
}
ENEMY_setChar( enemy_readlen, ENEMY_TACTICSOPTION, token);
#ifdef _BATTLENPC_WARP_PLAYER
ret = getStringFromIndexWithDelim( line, ",", 3, token, sizeof(token));
if(ret==FALSE){
fprint("文件語法錯誤:%s 第%d行\n",filename,linenum);
continue;
}
ENEMY_setChar( enemy_readlen, ENEMY_ACT_CONDITION, token);
#endif
#ifdef _BATTLENPC_WARP_PLAYER
#define ENEMY_STARTINTNUM 4
#else
#define ENEMY_STARTINTNUM 3
#endif
for( i = ENEMY_STARTINTNUM; i < ENEMY_DATAINTNUM+ENEMY_STARTINTNUM; i ++ ) {
ret = getStringFromIndexWithDelim( line,",",i,token,sizeof(token));
if( ret==FALSE ){
fprint("文件語法錯誤:%s 第%d行\n",filename,linenum);
break;
}
ENEMY_setInt( enemy_readlen, i - ENEMY_STARTINTNUM, atoi( token));
}
if( i < ENEMY_DATAINTNUM+ENEMY_STARTINTNUM ) continue;
for( i = 0; i < ENEMYTEMP_enemynum; i ++ ) {
if( ENEMYTEMP_getInt( i, E_T_TEMPNO)== ENEMY_getInt( enemy_readlen, ENEMY_TEMPNO)){
break;
}
}
if( i == ENEMYTEMP_enemynum) {
fprint("文件語法錯誤:%s 第%d行\n",filename,linenum);
continue;
}
ENEMY_enemy[enemy_readlen].enemytemparray = i;
{
int lv_min, lv_max;
lv_min = ENEMY_getInt( enemy_readlen, ENEMY_LV_MIN);
lv_max = ENEMY_getInt( enemy_readlen, ENEMY_LV_MAX);
if( lv_min == 0 ) lv_min = lv_max;
ENEMY_setInt( enemy_readlen, ENEMY_LV_MIN, min( lv_min, lv_max));
ENEMY_setInt( enemy_readlen, ENEMY_LV_MAX, max( lv_min, lv_max));
}
enemy_readlen ++;
}
}
fclose(f);
ENEMY_enemynum = enemy_readlen;
print( "有效寵物數是 %d..", ENEMY_enemynum );
#if 0
{
for( i=0; i <ENEMY_enemynum ; i++ ){
print( "%s ", ENEMY_getChar( i, ENEMY_NAME));
print( "%s ", ENEMY_getChar( i, ENEMY_TACTICSOPTION));
for( j = 0; j < ENEMY_DATAINTNUM; j ++ ) {
print( "%d ", ENEMY_getInt( i, j));
}
print( "[%d]", ENEMY_enemy[i].enemytemparray);
print( "\n");
}
}
#endif
return TRUE;
}
/*------------------------------------------------------------------------
* ENEMY_enemy及澀爛白央奶伙 心 仄
*-----------------------------------------------------------------------*/
BOOL ENEMY_reinitEnemy( void )
{
freeMemory( ENEMY_enemy);
return( ENEMY_initEnemy( getEnemyfile()));
}
/*------------------------------------------------------------------------
ENEMY_Enemy及驕儂毛襞月
*-----------------------------------------------------------------------*/
int ENEMY_getEnemyArrayFromIndex( int groupindex, int index)
{
if( !GROUP_CHECKINDEX( groupindex)) return -1;
if( index < 0 || index >= CREATEPROB1 - ENEMY_ID1) return -1;
return GROUP_group[groupindex].enemyarray[index];
}
/*------------------------------------------------------------------------
* ENEMY_ID 井日ENEMY_Enemy及驕儂毛襞月
*-----------------------------------------------------------------------*/
int ENEMY_getEnemyArrayFromId( int EnemyId)
{
#ifdef _ENEMY_OPTIMUM
if( EnemyId >= 0 && EnemyId < ENEMY_enemynum )
return EnemyId;
#else
int i;
for( i = 0; i < ENEMY_enemynum; i ++ ) {
if( ENEMY_getInt( i, ENEMY_ID) == EnemyId) {
return i;
}
}
#endif
return -1;
}
int ENEMY_getEnemyArrayFromTempNo( int EnemyTempNo)
{
int i;
for( i = 0; i < ENEMY_enemynum; i ++ ) {
if( ENEMY_getInt( i, ENEMY_TEMPNO) == EnemyTempNo) {
return i;
}
}
return -1;
}
int ENEMY_getEnemyIdFromTempNo( int EnemyTempNo)
{
int i;
for( i = 0; i < ENEMY_enemynum; i ++ ) {
if( ENEMY_getInt( i, ENEMY_TEMPNO) == EnemyTempNo) {
return ENEMY_getInt( i, ENEMY_ID);
}
}
return -1;
}
int ENEMY_getEnemyTempNoFromId( int EnemyId)
{
#ifdef _ENEMY_OPTIMUM
if( EnemyId >= 0 && EnemyId < ENEMY_enemynum)
return ENEMY_getInt( EnemyId, ENEMY_TEMPNO);
#else
int i;
for( i = 0; i < ENEMY_enemynum; i ++ ) {
if( ENEMY_getInt( i, ENEMY_ID) == EnemyId) {
return ENEMY_getInt( i, ENEMY_TEMPNO);
}
}
#endif
return -1;
}
/*------------------------------------------------------------------------
* 弘伙□皿澀爛白央奶伙毛 戈
*-----------------------------------------------------------------------*/
BOOL GROUP_initGroup( char* filename )
{
FILE* f;
char line[256];
int linenum=0;
int group_readlen=0;
int i,j;
f = fopen(filename,"r");
if( f == NULL ){
print( "文件打開失敗\n");
return FALSE;
}
GROUP_groupnum=0;
/* 引內 躲卅墊互窒墊丐月井升丹井譬屯月 */
while( fgets( line, sizeof( line ), f ) ){
linenum ++;
if( line[0] == '#' )continue; /* comment */
if( line[0] == '\n' )continue; /* none */
chomp( line );
GROUP_groupnum++;
}
if( fseek( f, 0, SEEK_SET ) == -1 ){
fprint( "尋找失敗\n" );
fclose(f);
return FALSE;
}
GROUP_group = allocateMemory( sizeof(struct tagGROUP_Table)
* GROUP_groupnum );
if( GROUP_group == NULL ){
fprint( "無法分配內存 %d\n" ,
sizeof(struct tagGROUP_Table)*GROUP_groupnum);
fclose( f );
return FALSE;
}
/* 賡渝祭 */
for( i = 0; i < GROUP_groupnum; i ++ ) {
for( j = 0; j < GROUP_DATAINTNUM; j ++ ) {
GROUP_setInt( i,j,-1);
}
for( j = 0; j < CREATEPROB1 - ENEMY_ID1; j ++ ) {
GROUP_group[i].enemyarray[j] = -1;
}
}
/* 引兇 心 允 */
linenum = 0;
while( fgets( line, sizeof( line ), f ) ){
linenum ++;
if( line[0] == '#' )continue; /* comment */
if( line[0] == '\n' )continue; /* none */
chomp( line );
/* 墊毛幫溥允月 */
/* 引內 tab 毛 " " 卞 五晶尹月 */
replaceString( line, '\t' , ' ' );
/* 燮 及旦矢□旦毛潸月[*/
{
char buf[256];
for( i = 0; i < strlen( line); i ++) {
if( line[i] != ' ' ) {
break;
}
strcpy( buf, &line[i]);
}
if( i != 0 ) {
strcpy( line, buf);
}
}
{
char token[256];
int ret;
int loop;
/* 手仄手ㄡ蘸戶及伙□皿卞 勻兇凜及兇戶卞賡渝祭仄化云仁 */
for( j = 0; j < GROUP_DATAINTNUM; j ++ ) {
GROUP_setInt( group_readlen,j,-1);
}
for( j = 0; j < CREATEPROB1 - ENEMY_ID1; j ++ ) {
GROUP_group[group_readlen].enemyarray[j] = -1;
}
/* 夫午勾戶及玄□弁件毛葦月 */
ret = getStringFromIndexWithDelim( line,",",1,token,
sizeof(token));
if( ret==FALSE ){
fprint("文件語法錯誤:%s 第%d行\n",filename,linenum);
continue;
}
GROUP_setChar( group_readlen, GROUP_NAME, token);
/* 2勾 動嫦反醒襖犯□正 */
#define GROUP_STARTINTNUM 2
for( i = GROUP_STARTINTNUM; i < GROUP_DATAINTNUM+GROUP_STARTINTNUM; i ++ ) {
ret = getStringFromIndexWithDelim( line,",",i,token,
sizeof(token));
if( ret==FALSE ){
fprint("文件語法錯誤:%s 第%d行\n",filename,linenum);
break;
}
if( strlen( token) != 0 ) {
GROUP_setInt( group_readlen, i - GROUP_STARTINTNUM, atoi( token));
}
}
if( i < GROUP_DATAINTNUM+GROUP_STARTINTNUM ) continue;
{
int enemycnt = 0;
for( loop = ENEMY_ID1; loop < CREATEPROB1; loop ++ ) {
if( GROUP_getInt( group_readlen, loop) != -1 ) {
for( i = 0; i < ENEMY_enemynum; i ++ ) {
if( ENEMY_getInt( i, ENEMY_ID)
== GROUP_getInt( group_readlen, loop))
{
break;
}
}
if( i == ENEMY_enemynum) {
i = -1;
GROUP_setInt( group_readlen, loop, -1);
}
else {
enemycnt ++;
}
GROUP_group[group_readlen].enemyarray[loop - ENEMY_ID1] = i;
}
}
if( enemycnt == 0 ) {
fprint("團隊設定中敵人尚未設定 文件:%s 第%d行\n",filename,linenum);
continue;;
}
if( checkRedundancy( &GROUP_group[group_readlen].intdata[ENEMY_ID1],
CREATEPROB1 - ENEMY_ID1))
{
fprint("團隊設定中敵人重復設定 文件:%s 第%d行\n",filename,linenum);
continue;;
}
}
group_readlen ++;
}
}
fclose(f);
GROUP_groupnum = group_readlen;
print( "有效遇敵組群數是 %d...", GROUP_groupnum );
#if 0
for( i=0; i <GROUP_groupnum ; i++ ){
int j;
print( "%s ", GROUP_getChar( i, GROUP_NAME));
for( j = 0; j < GROUP_DATAINTNUM; j ++ ) {
print( "%d ", GROUP_getInt( i, j));
}
for( j = 0; j < 10; j ++ ) {
print( "[%d] ",GROUP_group[i].enemyarray[j]);
}
print( "\n");
}
#endif
return TRUE;
}
/*------------------------------------------------------------------------
* 弘伙□皿及澀爛白央奶伙 心 仄
*-----------------------------------------------------------------------*/
BOOL GROUP_reinitGroup( void )
{
freeMemory( GROUP_group);
return( GROUP_initGroup( getGroupfile()));
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -