?? enemy.c
字號:
#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 //將媚惑術(shù)中招時間清除為-1
CHAR_setWorkInt( newindex, CHAR_WORKFOXROUND, -1 );
#endif
return newindex;
}
#define RANDOMENEMY_TOP 945
#define RANDOMENEMY_END 956
static 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;
// 仇及 區(qū)反仿件母丞
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;
}
}
// 區(qū)毛譯尹化中兇日巨仿□匹 仃月
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;
{
int aaa = 0;
int r;
r = RAND( 0, r_max);
for( i = 0; i < found-1; i ++ ) {
aaa += wr[i];
if( wr[i] != 0 && r < aaa ) break;
}
r = i;
groupid = ENCOUNT_getGroupIdFromArray( array, work[r]);
g_array = GROUP_getGroupArray( groupid);
}
for( i = 0 ; i < ENEMY_INDEXTABLEMAXSIZE; i ++ ) {
work[i] = -1;
wr[i] = -1;
}
createenemynum = 0;
found = 0;
r_max = 0;
for( i = ENEMY_ID1; i < CREATEPROB1; i ++ ) {
int newarray, enemywork;
e_array = ENEMY_getEnemyArrayFromIndex( g_array, i - ENEMY_ID1 );
#ifdef _ADD_ENCOUNT // WON ADD 增加敵遭遇觸發(fā)修件
{
int char_event_now = -1, char_event_end = -1;
if(ENCOUNT_table[array].event_now != -1){
char_event_now = ENCOUNT_table[array].event_now;
}
else if(ENCOUNT_table[array].event_end != -1){
char_event_end = ENCOUNT_table[array].event_end;
}
if( (char_event_now > 0) || ( char_event_end > 0 ) ) {
if( (NPC_NowEventCheckFlg( charaindex, char_event_now) == TRUE ) ||
(NPC_EventCheckFlg( charaindex, char_event_end) == TRUE ) ){
e_array = ENEMY_getEnemyArrayFromIndex(
GROUP_getGroupArray( ENCOUNT_table[array].enemy_group ),i - ENEMY_ID1 );
}
}
}
#endif
enemywork = ENEMY_getInt( e_array, ENEMY_ID );
if( ENEMY_RandomEnemyArray( enemywork, &newarray ) ){
e_array = newarray;
}
if( e_array != -1 ) {
work[found] = e_array;
wr[found] = GROUP_getInt( g_array, i + (CREATEPROB1 - ENEMY_ID1));
r_max += wr[found];
found ++;
createenemynum += ENEMY_getInt( e_array, ENEMY_CREATEMAXNUM);
}
}
r_max --;
if( found <= 0 ) return NULL;
enemyentrymax= min( enemyentrymax, createenemynum );
entrymax = RAND( 1, enemyentrymax);
bigcnt = 0;
for( i = 0,loopcounter = 0; i < entrymax && loopcounter < 100; loopcounter ++) {
int cnt;
int j,r;
int aaa = 0;
int et_array;
int k,samecount;
r = RAND( 0, r_max);
for( j = 0; j < found-1; j ++ ) {
aaa += wr[j];
if( wr[j] != 0 && r < aaa ) break;
}
r = j;
cnt = 0;
for( j = 0; j < ENEMY_INDEXTABLEMAXSIZE && ENEMY_indextable[j] != -1; j ++ ) {
if( ENEMY_indextable[j] == work[r] ) cnt ++;
}
samecount = 0;
for( k = 0; k < found; k ++ ) {
if( work[r] == work[k] ) samecount ++;
}
if( cnt >= ENEMY_getInt( work[r], ENEMY_CREATEMAXNUM) * samecount ) {
continue;
}
et_array = ENEMYTEMP_getEnemyTempArray( work[r]);
if( ENEMYTEMP_CHECKINDEX( et_array)) {
if( ENEMYTEMP_getInt( et_array, E_T_SIZE) == E_T_SIZE_BIG ) {
if( bigcnt >= 5 ) {
entrymax --;
continue;
}
if( i > 4 ) {
int target_et_array;
int flg = FALSE;
for( j = 0; j < 5; j ++ ) {
if( !ENEMY_CHECKINDEX( ENEMY_indextable[j])) break;
target_et_array = ENEMYTEMP_getEnemyTempArray(
ENEMY_indextable[j]);
if( !ENEMYTEMP_CHECKINDEX( target_et_array)) break;
if( ENEMYTEMP_getInt( target_et_array, E_T_SIZE) == E_T_SIZE_NORMAL ){
flg = TRUE;
break;
}
}
if( !flg) continue;
ENEMY_indextable[i] = ENEMY_indextable[j];
ENEMY_indextable[j] = work[r];
}
else {
ENEMY_indextable[i] = work[r];
}
bigcnt ++;
}else {
ENEMY_indextable[i] = work[r];
}
i++;
}
}
return found > 0 ? ENEMY_indextable : NULL;
}
int ENEMY_createPetFromEnemyIndex( int charaindex, int array)
{
Char CharNew;
int newindex;
int *p;
int tp[E_T_DATAINTNUM];
int tarray, i;
int havepetelement;
int level;
int enemyrank;
if( !ENEMY_CHECKINDEX( array)) return -1;
havepetelement = CHAR_getCharPetElement( charaindex);
if( havepetelement < 0 ) 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_TYPEPET;
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_SLOT] = *(tp+ E_T_SLOT);
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -