📄 enemy.c
字号:
SPR_002em,SPR_012em,SPR_022em,SPR_032em,SPR_042em,SPR_052em, SPR_062em,SPR_072em,SPR_082em,SPR_092em,SPR_102em,SPR_112em, SPR_003em,SPR_013em,SPR_023em,SPR_033em,SPR_043em,SPR_053em, SPR_063em,SPR_073em,SPR_083em,SPR_093em,SPR_103em,SPR_113em, SPR_004em,SPR_014em,SPR_024em,SPR_034em,SPR_044em,SPR_054em, SPR_064em,SPR_074em,SPR_084em,SPR_094em,SPR_104em,SPR_114em,};/*------------------------------------------------------------------------ * ENEMY{卞仿件母丞卅 毛芨尹月 *-----------------------------------------------------------------------*/int ENEMY_RandomChange( int enemyindex, int tempno ){ int work, work2, iRet = 0; // 仿件母丞平乓仿井升丹井民尼永弁 if( ( 564 <= tempno && tempno <= 580 ) || ( 739 <= tempno && tempno <= 750 ) || ( 895 <= tempno && tempno <= 906 ) ){ //******************************************** // 皿伊奶乩□及涌 //******************************************** iRet = 1; }else // 仿件母丞平乓仿井升丹井民尼永弁 if( ( 655 <= tempno && tempno <= 720 ) || ( 859 <= tempno && tempno <= 894 ) || ( 907 <= tempno && tempno <= 940 ) ){ //******************************************** // 矢永玄及涌 //******************************************** iRet = 2; }else{ return 0; } if( iRet == 1 ){ //******************************************** // // 皿伊奶乩□及涌仄凶衬卅及匹}箪岭手仿件母丞 // //******************************************** // 铣手仿件母丞 CHAR_setInt( enemyindex, CHAR_BASEBASEIMAGENUMBER, gymbody[RAND( 0, arraysizeof( gymbody ) - 1)] ); CHAR_setInt( enemyindex, CHAR_BASEIMAGENUMBER, CHAR_getInt( enemyindex, CHAR_BASEBASEIMAGENUMBER ) ); // 箪岭反赝癫 work = ( RAND( 0, 20 ) - 10 ) * 10; work2 = 100 - ABS( work ); CHAR_setInt( enemyindex, CHAR_EARTHAT, work ); CHAR_setInt( enemyindex, CHAR_FIREAT, -work ); if( RAND( 0, 1 ) ){ work2 *= -1; } CHAR_setInt( enemyindex, CHAR_WATERAT, work2 ); CHAR_setInt( enemyindex, CHAR_WINDAT, -work2 ); // 仿件母丞卅 湛毛 凶六月 if( DoujyouRandomWeponSet( enemyindex ) ){ // 溃 湛及桦宁反骚橘 猾毛勾仃月 CHAR_setPetSkill( enemyindex, 0, PETSKILL_NORMALATTACK ); CHAR_setPetSkill( enemyindex, 1, PETSKILL_NORMALATTACK ); }else{ // 溃 湛元扎卅中及匹 勾仃月 // 毛尥仃月 CHAR_setPetSkill( enemyindex, 0, EnemyGymSkill[RAND( 0, arraysizeof( EnemyGymSkill ) - 1 )] ); // 毛尥仃月 CHAR_setPetSkill( enemyindex, 1, EnemyGymSkill[RAND( 0, arraysizeof( EnemyGymSkill ) - 1 )] ); } }else if( iRet == 2 ){ // 溃 湛元扎卅中及匹 勾仃月 // 毛尥仃月 CHAR_setPetSkill( enemyindex, 0, EnemyGymSkill[RAND( 0, arraysizeof( EnemyGymSkill ) - 1 )] ); // 毛尥仃月 CHAR_setPetSkill( enemyindex, 1, EnemyGymSkill[RAND( 0, arraysizeof( EnemyGymSkill ) - 1 )] ); } return 1;}/*------------------------------------------------------------------------ * ENEMY_enemy井日平乓仿弁正□毛综岳允月[ *-----------------------------------------------------------------------*/int ENEMY_createEnemy( int array, int baselevel ){ Char CharNew; int newindex; int *p; int tp[E_T_DATAINTNUM]; int tarray, i; int itemindex,iloop; int level; int enemyrank; if( !ENEMY_CHECKINDEX( array)) return -1; p = ENEMY_enemy[array].intdata; tarray = ENEMYTEMP_getEnemyTempArray( array); if( !ENEMYTEMP_CHECKINDEX( tarray)) return -1;// tp = ENEMYTEMP_enemy[tarray].intdata; // 犯□正戊疋□ for( i = 0; i < E_T_DATAINTNUM; i ++ ){ tp[i] = ENEMYTEMP_enemy[tarray].intdata[i]; } // 赓渝祭 memset( &CharNew, 0, sizeof( Char ) ); if( !CHAR_getDefaultChar( &CharNew,31010 ) )return -1; /* 飓 寞 */ CharNew.data[CHAR_BASEBASEIMAGENUMBER] = CharNew.data[CHAR_BASEIMAGENUMBER] = *(tp+E_T_IMGNUMBER); /* 衬匹丐月午涩烂允月 */ CharNew.data[CHAR_WHICHTYPE] = CHAR_TYPEENEMY; /* 毛壅允 */ CharNew.data[CHAR_DUELPOINT] = 0; /* 伊矛伙毛瑁烂允月[ */ if( baselevel > 0 ){ level = baselevel; // 伊矛伙裔烂 }else{ level = RAND( (*(p + ENEMY_LV_MIN)), (*(p+ ENEMY_LV_MAX))); }#define E_PAR( a) (*(p + (a)))#define ET_PAR( a) (*(tp + (a)))/* 由仿丢□正隙醒井日 端及湘 由仿丢□正尺及煌遥挚 */#if 1#define PARAM_CAL( l) ( ( level -1)*ET_PAR( E_T_LVUPPOINT)+ ET_PAR(E_T_INITNUM)) * ET_PAR( (l))#else#define PARAM_CAL( l) ( (E_PAR(ENEMY_LV) -1)*ET_PAR( E_T_LVUPPOINT)+ ET_PAR(E_T_INITNUM)) * ET_PAR( (l))#endif /* 燮内湘 喃曰蕊曰禾奶件玄卞+ㄡ毛仿件母丞匹垫丹 */ tp[E_T_BASEVITAL] += RAND( 0, 4 ) - 2; tp[E_T_BASESTR] += RAND( 0, 4 ) - 2; tp[E_T_BASETGH] += RAND( 0, 4 ) - 2; tp[E_T_BASEDEX] += RAND( 0, 4 ) - 2; /* 仇及凛鳔匹喃曰蕊曰禾奶件玄毛忡绣仄化云仁 */ CharNew.data[CHAR_ALLOCPOINT] = ( tp[E_T_BASEVITAL] << 24 ) + ( tp[E_T_BASESTR] << 16 ) + ( tp[E_T_BASETGH] << 8 ) + ( tp[E_T_BASEDEX] << 0 ); /* 公及 }仿件母丞匹禾奶件玄毛ㄠ勿勾笛遥[仇木毛ㄠㄟ荚楞曰忒允[*/ for( i = 0; i < 10; i ++ ){ int work = RAND( 0, 3 ); if( work == 0 )tp[E_T_BASEVITAL]++; if( work == 1 )tp[E_T_BASESTR]++; if( work == 2 )tp[E_T_BASETGH]++; if( work == 3 )tp[E_T_BASEDEX]++; } /* 由仿丢□正本永玄 */ CharNew.data[CHAR_VITAL] = PARAM_CAL(E_T_BASEVITAL); CharNew.data[CHAR_STR] = PARAM_CAL(E_T_BASESTR); CharNew.data[CHAR_TOUGH] = PARAM_CAL(E_T_BASETGH); CharNew.data[CHAR_DEX] = PARAM_CAL(E_T_BASEDEX); CharNew.data[CHAR_FIREAT] = *(tp+ E_T_FIREAT); CharNew.data[CHAR_WATERAT] = *(tp+ E_T_WATERAT); CharNew.data[CHAR_EARTHAT] = *(tp+ E_T_EARTHAT); CharNew.data[CHAR_WINDAT] = *(tp+ E_T_WINDAT); CharNew.data[CHAR_MODAI] = *(tp+ E_T_MODAI); CharNew.data[CHAR_VARIABLEAI] = 0; CharNew.data[CHAR_LV] = level; //CharNew.data[CHAR_LV] = *(p+ ENEMY_LV); CharNew.data[CHAR_SLOT] = *(tp+ E_T_SLOT); CharNew.data[CHAR_POISON] = *(tp+ E_T_POISON); CharNew.data[CHAR_PARALYSIS]= *(tp+ E_T_PARALYSIS); CharNew.data[CHAR_SLEEP] = *(tp+ E_T_SLEEP); CharNew.data[CHAR_STONE] = *(tp+ E_T_STONE); CharNew.data[CHAR_DRUNK] = *(tp+ E_T_DRUNK); CharNew.data[CHAR_CONFUSION]= *(tp+ E_T_CONFUSION); CharNew.data[CHAR_RARE] = *(tp+ E_T_RARE); CharNew.data[CHAR_PETID] = *(tp + E_T_TEMPNO); CharNew.data[CHAR_CRITIAL] = *(tp + E_T_CRITICAL); CharNew.data[CHAR_COUNTER] = *(tp + E_T_COUNTER); for( i = 0; i < CHAR_MAXPETSKILLHAVE; i ++ ) { CharNew.unionTable.indexOfPetskill[i] = *(tp + E_T_PETSKILL1 + i); } enemyrank = ENEMY_getRank( array, tarray ); CharNew.data[CHAR_PETRANK] = enemyrank;#undef E_PAR#undef ET_PAR#undef PARAM_CAL CharNew.data[CHAR_DUELPOINT] = *( p + ENEMY_DUELPOINT); if( *( p + ENEMY_DUELPOINT) <= 0 ) { if( *(p + ENEMY_EXP) != -1 ) { CharNew.data[CHAR_EXP] = *( p+ENEMY_EXP); }else { CharNew.data[CHAR_EXP] = ENEMY_getExp( array,tarray,level, enemyrank); } } strcpysafe( CharNew.string[CHAR_NAME].string, sizeof(CharNew.string[CHAR_NAME].string), (char *)ENEMYTEMP_enemy[tarray].chardata[E_T_NAME].string ); newindex = CHAR_initCharOneArray( &CharNew ); if( newindex < 0 ){ return -1; } for( iloop=0; iloop< (ENEMY_ITEMPROB10 - ENEMY_ITEM1+1)/2; iloop++){ if( *(p+ENEMY_ITEMPROB1+iloop) != 0) {#ifdef _FIX_ITEMPROB if( RAND( 0,999) < *(p+ENEMY_ITEMPROB1+iloop)){#else if( RAND( 0,99) < *(p+ENEMY_ITEMPROB1+iloop)){#endif itemindex = ITEM_makeItemAndRegist( *(p+ENEMY_ITEM1+iloop) ); CHAR_setItemIndex( newindex, CHAR_STARTITEMARRAY +iloop, itemindex); ITEM_setWorkInt( itemindex, ITEM_WORKCHARAINDEX, newindex ); ITEM_setWorkInt( itemindex, ITEM_WORKOBJINDEX,-1); } } } { int style, wepon = -1; style = (*(p + ENEMY_STYLE)); switch( style ){ case 1: wepon = 0;break; // case 2: wepon = 100;break; // 轺徇 case 3: wepon = 200;break; // 键 case 4: wepon = 400;break; // 菰 case 5: wepon = 500;break; // 皮□丢仿件 case 6: wepon = 700;break; // 髑仆檗 case 7: wepon = 600;break; // 髑仆 default:break; } if( wepon >= 0 ){ itemindex = ITEM_makeItemAndRegist( wepon ) ; CHAR_setItemIndex( newindex, CHAR_ARM, itemindex ); ITEM_setWorkInt( itemindex, ITEM_WORKCHARAINDEX, newindex ); ITEM_setWorkInt( itemindex, ITEM_WORKOBJINDEX,-1); } } ENEMY_RandomChange( newindex, *( p+ENEMY_ID) ); CHAR_complianceParameter( newindex ); CHAR_setInt( newindex, CHAR_HP, CHAR_getWorkInt( newindex, CHAR_WORKMAXHP)); CHAR_setWorkInt( newindex, CHAR_WORKTACTICS, *(p+ENEMY_TACTICS)); CHAR_setWorkChar( newindex, CHAR_WORKBATTLE_TACTICSOPTION, ENEMY_enemy[array].chardata[ENEMY_TACTICSOPTION].string );#ifdef _BATTLENPC_WARP_PLAYER CHAR_setWorkChar( newindex, CHAR_WORKBATTLE_ACT_CONDITION, ENEMY_enemy[array].chardata[ENEMY_ACT_CONDITION].string );#endif CHAR_setWorkInt( newindex, CHAR_WORK_PETFLG, *(p+ENEMY_PETFLG)); CHAR_setWorkInt( newindex, CHAR_WORKMODCAPTUREDEFAULT, *(tp + E_T_GET));#ifdef _ENEMY_FALLGROUND { int i=0; for( i=0;i<arraysizeof( ridePetTable);i++) { if( CHAR_getInt( newindex, CHAR_BASEBASEIMAGENUMBER) == ridePetTable[i].rideNo ) { CHAR_setInt( newindex, CHAR_BASEBASEIMAGENUMBER, ridePetTable[i].charNo ); CHAR_setInt( newindex, CHAR_BASEIMAGENUMBER, ridePetTable[i].rideNo ); break; } } }#endif#ifdef _PETSKILL_BECOMEFOX //将媚惑术中招时间清除为-1 CHAR_setWorkInt( newindex, CHAR_WORKFOXROUND, -1 ); #endif return newindex;}#define RANDOMENEMY_TOP 945#define RANDOMENEMY_END 956static int RandomHuman945[] = {739,742,745,748};static int RandomPet946[] = {859,860,861,868,869,870,881,882,883,884};static int RandomPet964[] = {859,860,861,868,869,870,881,882,883,884};static int RandomHuman947[] = {740,743,746,749};static int RandomPet948[] = {864,871,872,873,885,886,889,890,891,892,893,894};static int RandomPet965[] = {864,871,872,873,885,886,889,890,891,892,893,894};static int RandomHuman949[] = {741,744,747,750};static int RandomPet950[] = {862,863,865,866,867,874,875,876,877,878,879,880};static int RandomPet966[] = {862,863,865,866,867,874,875,876,877,878,879,880};static int RandomHuman951[] = {895,898,901,904};static int RandomPet952[] = {912,913,914,915,916,917,918,919,920,928};static int RandomPet967[] = {912,913,914,915,916,917,918,919,920,928};static int RandomHuman953[] = {896,899,902,905};static int RandomPet954[] = {929,930,931,932,933,934,935,936,937,938,939,940};static int RandomPet968[] = {929,930,931,932,933,934,935,936,937,938,939,940};static int RandomHuman955[] = {897,900,903,906};static int RandomPet956[] = {907,908,909,910,911,921,922,923,924,925,926,927};static int RandomPet969[] = {907,908,909,910,911,921,922,923,924,925,926,927};typedef struct { int num; int *pTbl; int arraysize;}RANDOMENEMY;static RANDOMENEMY RandomEnemyTbl[] = { { 945, RandomHuman945, arraysizeof( RandomHuman945 ) }, { 946, RandomPet946, arraysizeof( RandomPet946 ) }, { 947, RandomHuman947, arraysizeof( RandomHuman947 ) }, { 948, RandomPet948, arraysizeof( RandomPet948 ) }, { 949, RandomHuman949, arraysizeof( RandomHuman949 ) }, { 950, RandomPet950, arraysizeof( RandomPet950 ) }, { 951, RandomHuman951, arraysizeof( RandomHuman951 ) }, { 952, RandomPet952, arraysizeof( RandomPet952 ) }, { 953, RandomHuman953, arraysizeof( RandomHuman953 ) }, { 954, RandomPet954, arraysizeof( RandomPet954 ) }, { 955, RandomHuman955, arraysizeof( RandomHuman955 ) }, { 956, RandomPet956, arraysizeof( RandomPet956 ) }, { 964, RandomPet964, arraysizeof( RandomPet964 ) }, { 965, RandomPet965, arraysizeof( RandomPet965 ) }, { 966, RandomPet966, arraysizeof( RandomPet966 ) }, { 967, RandomPet967, arraysizeof( RandomPet967 ) }, { 968, RandomPet968, arraysizeof( RandomPet968 ) }, { 969, RandomPet969, arraysizeof( RandomPet969 ) },};/*------------------------------------------------------------ * 衬 涩烂及摹 寞互 溃卅袄卅日仿件母丞卞涩烂允月 ------------------------------------------------------------*/int ENEMY_RandomEnemyArray( int e_array, int *pNew ){ int i = 0, randwork, work;// RANDOMENEMY *pRandomEnemy; *pNew = -1; // 仇及 区反仿件母丞 if( ( RANDOMENEMY_TOP <= e_array && e_array <= RANDOMENEMY_END ) || ( 964 <= e_array && e_array <= 969 ) ){ // 升及母立□井譬屯月 for( i = 0; i < arraysizeof( RandomEnemyTbl ); i ++ ){ if( RandomEnemyTbl[i].num == e_array ){ break; } } // 区毛译尹化中凶日巨仿□匹 仃月 if( i >= arraysizeof( RandomEnemyTbl ) ) return 0; // 仿件母丞涩烂 randwork = RAND( 0, RandomEnemyTbl[i].arraysize - 1 ); // 井日蕙仄中 寞毛潸 work = RandomEnemyTbl[i].pTbl[randwork]; *pNew = ENEMY_getEnemyArrayFromId( work ); return 1; }else{ // 窒仪手卅中 return 0; }}int *ENEMY_getEnemy( int charaindex, int x, int y){ int i; int array; int g_array; int e_array; int found = 0; int work[ENEMY_INDEXTABLEMAXSIZE]; int wr[ENEMY_INDEXTABLEMAXSIZE]; int createenemynum; int enemyentrymax; int entrymax; int r_max; int groupid; int bigcnt; int loopcounter; array = ENCOUNT_getEncountAreaArray( CHAR_getInt( charaindex, CHAR_FLOOR),x,y); if( array == -1 ) return NULL; enemyentrymax = ENCOUNT_getCreateEnemyMaxNumFromArray( array); if( enemyentrymax == -1 ) { return NULL; } for( i = 0 ; i < ENEMY_INDEXTABLEMAXSIZE; i ++ ) { work[i] = -1; wr[i] = -1; ENEMY_indextable[i] = -1; } r_max= 0; for( i = 0; i < ENCOUNT_GROUPMAXNUM; i ++ ){ if( ENCOUNT_getGroupIdFromArray( array, i ) != - 1 ) { int itemid; groupid = ENCOUNT_getGroupIdFromArray( array, i); g_array = GROUP_getGroupArray( groupid); itemid = GROUP_getInt( g_array, GROUP_APPEARBYITEMID); if( itemid != -1 ) { int j; for( j = 0; j < CHAR_MAXITEMHAVE; j ++ ) { int itemindex = CHAR_getItemIndex( charaindex, j); if( ITEM_CHECKINDEX( itemindex)) { if( ITEM_getInt( itemindex, ITEM_ID) == itemid){ break; } } } if( j == CHAR_MAXITEMHAVE ) continue; } itemid = GROUP_getInt( g_array, GROUP_NOTAPPEARBYITEMID); if( itemid != -1 ) { int j; for( j = 0; j < CHAR_MAXITEMHAVE; j ++ ) { int itemindex = CHAR_getItemIndex( charaindex, j); if( ITEM_CHECKINDEX( itemindex)) { if( ITEM_getInt( itemindex, ITEM_ID) == itemid){ break; } } } if( j != CHAR_MAXITEMHAVE ) continue; } work[found] = i; wr[found] = ENCOUNT_getGroupProbFromArray( array, i); r_max += wr[found]; found ++; } } r_max --; if( found <= 0 ) return NULL; {
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -