#ifndef __ENEMY_H__
#define __ENEMY_H__

enum
{
    E_T_SIZE_NORMAL,
    E_T_SIZE_BIG,
};

typedef enum
{
    E_T_TEMPNO,
    E_T_INITNUM,
    E_T_LVUPPOINT,
    E_T_BASEVITAL,
    E_T_BASESTR,
    E_T_BASETGH,
    E_T_BASEDEX,
    E_T_MODAI,
    E_T_GET,
    E_T_EARTHAT,
    E_T_WATERAT,
    E_T_FIREAT,
    E_T_WINDAT,
    E_T_POISON,               /*   汹仁凶太卞母丢□斥          */
    E_T_PARALYSIS,            /* 仄太木｝1  及垫  互匹五卅中［ */
    E_T_SLEEP,                /* 戽曰［垫  匹五卅中            */
    E_T_STONE,                /* 檗［垫  匹五卅中              */
    E_T_DRUNK,                /* 办丹［      互票互月     */
    E_T_CONFUSION,            /* 渔刭［  猾    毛赀月     */
    E_T_PETSKILL1,
    E_T_PETSKILL2,
    E_T_PETSKILL3,
    E_T_PETSKILL4,
    E_T_PETSKILL5,
    E_T_PETSKILL6,
    E_T_PETSKILL7,
    E_T_RARE,
    E_T_CRITICAL,
    E_T_COUNTER,
    E_T_SLOT,
    E_T_IMGNUMBER,
    E_T_PETFLG,
    E_T_SIZE,
	E_T_ATOMBASEADD1,
	E_T_ATOMFIXMIN1,
	E_T_ATOMFIXMAX1,
	E_T_ATOMBASEADD2,
	E_T_ATOMFIXMIN2,
	E_T_ATOMFIXMAX2,
	E_T_ATOMBASEADD3,
	E_T_ATOMFIXMIN3,
	E_T_ATOMFIXMAX3,
	E_T_ATOMBASEADD4,
	E_T_ATOMFIXMIN4,
	E_T_ATOMFIXMAX4,
	E_T_ATOMBASEADD5,
	E_T_ATOMFIXMIN5,
	E_T_ATOMFIXMAX5,
    E_T_LIMITLEVEL,	// Arminius 7.30 limit level
#ifdef _PET_FUSION
	E_T_FUSIONCODE,
#endif
#ifdef _PET_AMOI__E
	E_T_ENABLETRADE,
	E_T_PETTYPE,
	E_T_PETTYPESUB,
#endif
    E_T_DATAINTNUM,
}ENEMYTEMP_DATAINT;

typedef enum
{
    E_T_NAME,
    E_T_ATOMFIXNAME1,
    E_T_ATOMFIXNAME2,
    E_T_ATOMFIXNAME3,
    E_T_ATOMFIXNAME4,
    E_T_ATOMFIXNAME5,
    E_T_DATACHARNUM,

}ENEMYTEMP_DATACHAR;

typedef enum
{
    ENEMY_ID,
    ENEMY_TEMPNO,
    ENEMY_LV_MIN,
    ENEMY_LV_MAX,
    ENEMY_CREATEMAXNUM,
    ENEMY_CREATEMINNUM,
    ENEMY_TACTICS,
	ENEMY_EXP,
    ENEMY_DUELPOINT,
	ENEMY_STYLE,
    ENEMY_PETFLG,               /* 矢永玄卞卅月井升丹井 */

    ENEMY_ITEM1,
    ENEMY_ITEM2,
    ENEMY_ITEM3,
    ENEMY_ITEM4,
    ENEMY_ITEM5,
    ENEMY_ITEM6,
    ENEMY_ITEM7,
    ENEMY_ITEM8,
    ENEMY_ITEM9,
    ENEMY_ITEM10,
    ENEMY_ITEMPROB1,
    ENEMY_ITEMPROB2,
    ENEMY_ITEMPROB3,
    ENEMY_ITEMPROB4,
    ENEMY_ITEMPROB5,
    ENEMY_ITEMPROB6,
    ENEMY_ITEMPROB7,
    ENEMY_ITEMPROB8,
    ENEMY_ITEMPROB9,
    ENEMY_ITEMPROB10,

    ENEMY_DATAINTNUM,

}ENEMY_DATAINT;

typedef enum
{
    ENEMY_NAME,
    ENEMY_TACTICSOPTION,
#ifdef _BATTLENPC_WARP_PLAYER
	ENEMY_ACT_CONDITION,
#endif
    ENEMY_DATACHARNUM,
}ENEMY_DATACHAR;

typedef enum
{
    GROUP_ID,
	GROUP_APPEARBYITEMID,		/* 仇及失奶  丞毛  匀化中凶日请蜇允月 -1 反  骰*/
	GROUP_NOTAPPEARBYITEMID,	/* 仇及失奶  丞毛  匀化中凶日请蜇仄卅中 -1 反  骰*/
    ENEMY_ID1,
    ENEMY_ID2,
    ENEMY_ID3,
    ENEMY_ID4,
    ENEMY_ID5,
    ENEMY_ID6,
    ENEMY_ID7,
    ENEMY_ID8,
    ENEMY_ID9,
    ENEMY_ID10,
    CREATEPROB1,
    CREATEPROB2,
    CREATEPROB3,
    CREATEPROB4,
    CREATEPROB5,
    CREATEPROB6,
    CREATEPROB7,
    CREATEPROB8,
    CREATEPROB9,
    CREATEPROB10,
    GROUP_DATAINTNUM,
}GROUP_DATAINT;

typedef enum
{
    GROUP_NAME,
    GROUP_DATACHARNUM,

}GROUP_DATACHAR;


typedef struct tagENEMY_EnemyTable
{
    int         intdata[ENEMY_DATAINTNUM];
    STRING64    chardata[ENEMY_DATACHARNUM];
    int         enemytemparray;
}ENEMY_EnemyTable;

typedef struct tagENEMYTEMP_Table
{
    int         intdata[E_T_DATAINTNUM];
	//ANDY_EDIT
    STRING64    chardata[E_T_DATACHARNUM];

}ENEMYTEMP_Table;

typedef struct tagGROUP_Table
{
    int         intdata[GROUP_DATAINTNUM];
    STRING32    chardata[GROUP_DATACHARNUM];
    int         enemyarray[CREATEPROB1 - ENEMY_ID1];
}GROUP_Table;



INLINE BOOL ENEMY_CHECKINDEX( int index);
INLINE int ENEMY_setInt( int index, ENEMY_DATAINT element, int data);
INLINE int ENEMY_getInt( int index, ENEMY_DATAINT element);

INLINE int *ENEMY_getIntdata( int index);

INLINE BOOL ENEMY_setChar( int index ,ENEMY_DATACHAR element, char* new );
INLINE char *ENEMY_getChar( int index, ENEMY_DATACHAR element);
int ENEMY_getEnemyNum( void);
BOOL ENEMY_initEnemy( char* filename );
BOOL ENEMY_reinitEnemy( void );
int ENEMY_createEnemy( int array, int baselevel );
int *ENEMY_getEnemy( int charaindex, int x, int y);
int ENEMY_createPetFromEnemyIndex( int charaindex, int array);
int ENEMY_createPet( int array, int vital, int str, int tgh, int dex);
int ENEMY_getEnemyArrayFromId( int EnemyId);
int ENEMY_getEnemyArrayFromTempNo( int EnemyTempNo);
int ENEMY_getEnemyIdFromTempNo( int EnemyTempNo);
int ENEMY_getEnemyTempNoFromId( int EnemyId);

#ifdef _TEST_DROPITEMS
int ENEMY_TEST_createPetIndex( int array);
#endif

int ENEMYTEMP_getEnemyNum( void);//krynn 2001/12/13
INLINE BOOL ENEMYTEMP_CHECKINDEX( int index);
INLINE int ENEMYTEMP_setInt( int index, ENEMYTEMP_DATAINT element, int data);
INLINE int ENEMYTEMP_getInt( int index, ENEMYTEMP_DATAINT element);
INLINE char *ENEMYTEMP_getChar( int index, ENEMYTEMP_DATACHAR element);
INLINE BOOL ENEMYTEMP_getInt_setChar( int index ,ENEMYTEMP_DATACHAR element, char* new );
INLINE char *ENEMYTEMP_getInt_getChar( int index, ENEMYTEMP_DATACHAR element);
int ENEMYTEMP_getInt_getEnemyNum( void);
BOOL ENEMYTEMP_getInt_initEnemy( char* filename );
BOOL ENEMYTEMP_getInt_reinitEnemy( void );
int ENEMYTEMP_getEnemyTempArray( int enemyindex);
int ENEMYTEMP_getEnemyTempArrayFromTempNo( int EnemyTempNo);
int ENEMYTEMP_getEnemyTempArrayFromInitnum( int EnemyTempNo);

INLINE int GROUP_setInt( int index, GROUP_DATAINT element, int data);
INLINE int GROUP_getInt( int index, GROUP_DATAINT element);
INLINE BOOL GROUP_setChar( int index ,GROUP_DATACHAR element, char* new );
INLINE char *GROUP_getChar( int index, GROUP_DATACHAR element);
int GROUP_getEnemyNum( void);

BOOL ENEMYTEMP_initEnemy( char* filename );
BOOL ENEMYTEMP_reinitEnemy( void );
BOOL GROUP_initGroup( char* filename );
BOOL GROUP_reinitGroup( void );

#ifdef _PET_EVOLUTION
int EVOLUTION_createPetFromEnemyIndex( int charaindex, int baseindex, int flg);
int PET_CheckIncubate( int charaindex);
BOOL PETFUSION_getIndexForChar( int toindex, int *MainIndex, int *Subindex1,int *Subindex2, char *data);
int NPC_getFusionTableForBase( int charaindex, int petindex1, int petindex2 );
int NPC_getPetArrayForNo( int PetCode);
BOOL PET_getEvolutionAns( int petindex, int *base);
#endif

int PETFUSION_SetNewEgg( int toindex , int petindex, int array, int *work, int *skill1, int *skill2);
BOOL PETFUSION_AddEgg(int toindex, int petID, int PetCode);

#ifdef _PET_TRANS
int GetNewPet( int toindex , int petindex, int array, int *work);
#endif

#endif
