?? enemy.c
字號(hào):
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_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);
// Arminius 8.6 limit lv
CharNew.data[CHAR_LIMITLEVEL] = *(tp + E_T_LIMITLEVEL);
#ifdef _PET_FUSION
CharNew.data[CHAR_FUSIONCODE] = *(tp + E_T_FUSIONCODE);
#endif
CharNew.data[CHAR_PETMAILEFFECT] = RAND(0, PETMAIL_EFFECTMAX);
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
strcpysafe( CharNew.string[CHAR_NAME].string,
sizeof(CharNew.string[CHAR_NAME].string),
(char *)ENEMYTEMP_enemy[tarray].chardata[E_T_NAME].string );
newindex = PET_initCharOneArray( &CharNew );
if( newindex < 0 ){
return -1;
}
CHAR_complianceParameter( newindex );
CHAR_setInt( newindex, CHAR_HP, CHAR_getWorkInt( newindex, CHAR_WORKMAXHP));
CHAR_setWorkInt( newindex, CHAR_WORKPLAYERINDEX, charaindex);
CHAR_setCharPet( charaindex, havepetelement, newindex);
CHAR_setChar( newindex, CHAR_OWNERCDKEY,
CHAR_getChar( charaindex, CHAR_CDKEY));
CHAR_setChar( newindex, CHAR_OWNERCHARANAME,
CHAR_getChar( charaindex, CHAR_NAME));
return newindex;
}
#ifdef _TEST_PETCREATE
int ENEMY_TEST_createPetIndex( 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;
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);
CharNew.data[CHAR_MODAI] = *(tp+ E_T_MODAI);
CharNew.data[CHAR_VARIABLEAI] = 0;
CharNew.data[CHAR_LV] = level;
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);
// Arminius 8.6 limit lv
CharNew.data[CHAR_LIMITLEVEL] = *(tp + E_T_LIMITLEVEL);
#ifdef _PET_FUSION
CharNew.data[CHAR_FUSIONCODE] = *(tp + E_T_FUSIONCODE);
#endif
CharNew.data[CHAR_PETMAILEFFECT] = RAND(0, PETMAIL_EFFECTMAX);
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
strcpysafe( CharNew.string[CHAR_NAME].string,
sizeof(CharNew.string[CHAR_NAME].string),
(char *)ENEMYTEMP_enemy[tarray].chardata[E_T_NAME].string );
newindex = PET_initCharOneArray( &CharNew );
if( newindex < 0 ){
return -1;
}
CHAR_complianceParameter( newindex );
CHAR_setInt( newindex, CHAR_HP, CHAR_getWorkInt( newindex, CHAR_WORKMAXHP));
// CHAR_setWorkInt( newindex, CHAR_WORKPLAYERINDEX, charaindex);
// CHAR_setCharPet( charaindex, havepetelement, newindex);
// CHAR_setChar( newindex, CHAR_OWNERCDKEY,
// CHAR_getChar( charaindex, CHAR_CDKEY));
// CHAR_setChar( newindex, CHAR_OWNERCHARANAME,
// CHAR_getChar( charaindex, CHAR_NAME));
return newindex;
}
#endif
#ifdef _PET_EVOLUTION
BOOL PETFUSION_getIndexForChar( int toindex, int *MainIndex, int *Subindex1, int *Subindex2, char *data)
{
char buf1[256];
int pindex[3]={-1,-1,-1};
int i;
if( getStringFromIndexWithDelim( data, "|", 1, buf1, sizeof(buf1)) == FALSE )
return FALSE;
pindex[0] = atoi( buf1)-1;
if( getStringFromIndexWithDelim( data, "|", 2, buf1, sizeof(buf1)) == FALSE )
return FALSE;
pindex[1] = atoi( buf1)-1;
if( getStringFromIndexWithDelim( data, "|", 3, buf1, sizeof(buf1)) == FALSE )
return FALSE;
pindex[2] = atoi( buf1)-1;
for( i=0; i<3; i++) {
int petindex;
if( pindex[i] < 0 ) continue;
petindex = CHAR_getCharPet( toindex, pindex[i]);
if( !CHAR_CHECKINDEX( petindex) ) continue;
#ifdef _PET_2TRANS
if( CHAR_getInt( petindex, CHAR_TRANSMIGRATION ) > 1 ) {
CHAR_talkToCli( toindex, -1, "二轉(zhuǎn)寵物不能融合。", CHAR_COLORYELLOW);
return FALSE;
}
#endif
if( i == 0 ) {
*MainIndex = petindex;
}else if( i == 1) {
*Subindex1 = petindex;
}else if( i == 2) {
*Subindex2 = petindex;
}
}
return TRUE;
}
int NPC_getPetArrayForNo( int PetCode)
{
int i;
int enemynum = ENEMY_getEnemyNum();
for( i = 0; i < enemynum; i ++ ) {//PetCode
if( ENEMY_getInt( i, ENEMY_TEMPNO ) == PetCode )
break;
}
if( i == enemynum ){
print("ANDY 2.err i == enemynum \n");
return -1;
}
return i;
}
int NPC_getFusionTableForBase( int charaindex, int petindex1, int petindex2 )
{
int base1, base2;// 屬性,PETCODE
if( !CHAR_CHECKINDEX( petindex1) ) return -1;
if( !CHAR_CHECKINDEX( petindex2) ) return -1;
#ifdef _PET_EVOLUTION
if( (base2 = EVOLUTION_getPetTable( charaindex, petindex1, petindex2)) < 0 ){
print("ANDY err base2=%d\n", base2);
return -1;
}
if( (base1 = EVOLUTION_getPropertyTable( charaindex, petindex1, petindex2)) < 0 ){
print("ANDY err base1=%d\n", base1);
return -1;
}
return EVOLUTION_getFusionTable( charaindex, base2, base1); // get new pet IDNO
#else
return -1;
#endif
}
BOOL PET_getEvolutionAns( int petindex, int *base)
{
int i, total1, total2, total;
int defwork = 50, defbase = 150;
int work[4]={0,0,0,0};
work[0] = CHAR_getInt( petindex, CHAR_EVOLUTIONBASEVTL);
work[1] = CHAR_getInt( petindex, CHAR_EVOLUTIONBASESTR);
work[2] = CHAR_getInt( petindex, CHAR_EVOLUTIONBASETGH);
work[3] = CHAR_getInt( petindex, CHAR_EVOLUTIONBASEDEX);
for( i=0; i<4; i++) {
work[i] = (work[i]*0.7)/100;
if( work[i]<0 ) work[i] = 0;
if( work[i]>60 ) work[i] = 60;
}
total1 = work[0] + work[1] + work[2] + work[3];
for( i=0; i<4; i++) {
if( base[i] < 0 ) base[i] = 5;
if( base[i] > 60 ) base[i] = 60;
}
total2 = base[0] + base[1] + base[2] + base[3];
if( total1 > defwork ) {
for( i=0; i<4; i++) {
work[i] = ((work[i]*defwork)/total1);
if( work[i]<0 ) work[i] = 0;
if( work[i]>60 ) work[i] = 60;
}
}
total1 = work[0] + work[1] + work[2] + work[3];
total = (total1/2) + total2;
if( total > 0 ){
for( i=0; i<4; i++) {
float fixwork=0.0;
fixwork = (base[i])+(float)(work[i]/2);
base[i] += (int)((fixwork/total) * total1);
if( base[i] < 1 ) base[i] = 1;
if( base[i] > 60 ) base[i] = 60;
}
}
total2 = base[0] + base[1] + base[2] + base[3];
if( total2 > defbase ){
for( i=0; i<4; i++) {
base[i] = (base[i]*defbase)/total2;
if( base[i] < 1 ) base[i] = 1;
if( base[i] > 60 ) base[i] = 60;
}
}
total2 = base[0] + base[1] + base[2] + base[3];
if( base[0]<0 || base[1]<0 || base[2]<0 || base[3]<0 ){
print("ANDY err EVOLUTION base someone < 0 !!\n");
}
return TRUE;
}
int EVOLUTION_createPetFromEnemyIndex( int charaindex, int baseindex, int flg)
{
Char CharNew;
int newindex;
int *p;
int tp[E_T_DATAINTNUM];
int tarray, i, havepetelement, enemynum, petID;
int level, enemyrank, array;
int petskill[7]={-1,-1,-1,-1,-1,-1,-1};
int base[4]={0,0,0,0};
int illegalpetskill[15] = {41,52,600,601,602,603,604,614,617,628,630,631,635,638,641};//不可遺傳的寵技
#define E_PAR( a) (*(p + (a)))
#define ET_PAR( a) (*(tp + (a)))
#define PARAM_CAL( l) (( level -1)*ET_PAR( E_T_LVUPPOINT)+ ET_PAR(E_T_INITNUM)) * ET_PAR( (l))
havepetelement=-1;
petID = CHAR_getInt( baseindex, CHAR_FUSIONINDEX);
enemynum = ENEMY_getEnemyNum();
for( i = 0; i < enemynum; i ++ ) {
if( ENEMY_getInt( i, ENEMY_TEMPNO ) == petID ){
break;
}
}
if( i >= enemynum ) return -1;
array = i;
if( !ENEMY_CHECKINDEX( array)) return -1;
//--------------------------------------------------------------------------
p = ENEMY_enemy[array].intdata;
tarray = ENEMYTEMP_getEnemyTempArray( array);
if( !ENEMYTEMP_CHECKINDEX( tarray)){
print( "ANDY !tarray\n");
return -1;
}
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 ) ){
print( "ANDY !CHAR_getDefaultChar( &CharNew,31010 )\n");
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)));
//------------------------------------------------------
{
if( PET_getBaseAndSkill( charaindex, baseindex, base, petskill, 1) == FALSE ){
print( "ANDY err PET_getBaseAndSkill(%d) == FALSE \n", baseindex);
return -1;
}
if( PET_getEvolutionAns( baseindex, base) == FALSE ) return -1;
for( i=0; i < CHAR_MAXPETSKILLHAVE; i ++ ) {//寵技
int j;
for( j=0; j<15; j++) { //檢查非法技能
if( illegalpetskill[j] == petskill[i] ){
petskill[i] = -1;
break;
}
}
CharNew.unionTable.indexOfPetskill[i] = petskill[i];
}
if( flg == 1 ){
if( CHAR_DelPetForIndex( charaindex, baseindex) == FALSE ) return FALSE;
}
}
if( flg == 1 ){
havepetelement = CHAR_getCharPetElement( charaindex);//找出寵物空位
if( havepetelement < 0 ) return -1;
}
//------------------------------------------------------
tp[E_T_BASEVITAL] = base[0];
tp[E_T_BASESTR] = base[1];
tp[E_T_BASETGH] = base[2];
tp[E_T_BASEDEX] = base[3];
CharNew.data[CHAR_ALLOCPOINT] = (base[0]<<24)+(base[1]<<16)+(base[2]<<8)+(base[3]<<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);
CharNew.data[CHAR_MODAI] = *(tp+ E_T_MODAI);
CharNew.data[CHAR_VARIABLEAI] = 0;
CharNew.data[CHAR_LV] = level;
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);
CharNew.data[CHAR_LIMITLEVEL] = *(tp + E_T_LIMITLEVEL);
CharNew.data[CHAR_FUSIONCODE] = *(tp + E_T_FUSIONCODE);
CharNew.data[CHAR_PETMAILEFFECT] = RAND(0, PETMAIL_EFFECTMAX);
//------------------------------------------------------
enemyrank = ENEMY_getRank( array, tarray );
CharNew.data[CHAR_PETRANK] = enemyrank;
#undef E_PAR
#undef ET_PAR
#undef PARAM_CAL
strcpysafe( CharNew.string[CHAR_NAME].string,
sizeof(CharNew.string[CHAR_NAME].string),
(char *)ENEMYTEMP_enemy[tarray].chardata[E_T_NAME].string );
newindex = PET_initCharOneArray( &CharNew );
if( newindex < 0 ){
print( "ANDY err newindex=%d\n", newindex);
return -1;
}
//------------------------------------------------------
CHAR_complianceParameter( newindex );
CHAR_setInt( newindex, CHAR_HP, CHAR_getWorkInt( newindex, CHAR_WORKMAXHP));
CHAR_setInt ( ne
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -