📄 battle_magic.c
字号:
UpPoint = RAND( (power*0.9), (power*1.1) );#ifdef _MAGIC_REHPAI#else if( per ){ UpPoint *= CHAR_getWorkInt( toindex, CHAR_WORKMAXHP ) * 0.01; } UpPoint *= GetRecoveryRate( toindex );#endif workhp = CHAR_getInt( toindex, CHAR_HP ); oldhp = workhp; workhp += (int)UpPoint; CHAR_setInt( toindex, CHAR_HP, min( workhp, CHAR_getWorkInt( toindex, CHAR_WORKMAXHP ) ) ); //snprintf( szBuffer, sizeof(szBuffer), "(%s)的耐久力回复(%d)", CHAR_getUseName( toindex ), UpPoint ); }else { int allUpPoint; UpPoint = RAND( (power*0.9), (power*1.1) );#ifdef _MAGIC_REHPAI allUpPoint = UpPoint; UpPoint = (allUpPoint * Magic_RideGetHP( toindex, ridepet, 1 ))/100; petUpPoint = allUpPoint - UpPoint;#else petUpPoint = UpPoint; if( per ){ UpPoint *= CHAR_getWorkInt( toindex, CHAR_WORKMAXHP ) * 0.01; petUpPoint *= CHAR_getWorkInt( ridepet, CHAR_WORKMAXHP ) * 0.01; } UpPoint *= GetRecoveryRate( toindex ); petUpPoint *= GetRecoveryRate( ridepet );#endif allUpPoint = UpPoint + petUpPoint;#ifdef _MAGIC_REHPAI#else UpPoint = (UpPoint * UpPoint) / allUpPoint; petUpPoint = (petUpPoint * petUpPoint) / allUpPoint;#endif workhp = CHAR_getInt( toindex, CHAR_HP ); oldhp = workhp; workhp += (int)UpPoint; CHAR_setInt( toindex, CHAR_HP, min( workhp, CHAR_getWorkInt( toindex, CHAR_WORKMAXHP ) ) ); workhp = CHAR_getInt( ridepet, CHAR_HP ); oldhp = workhp; workhp += (int)petUpPoint; CHAR_setInt( ridepet, CHAR_HP, min( workhp, CHAR_getWorkInt( ridepet, CHAR_WORKMAXHP ) ) ); //snprintf( szBuffer, sizeof(szBuffer), // "(%s)的耐久力回复(%d),(%s的骑宠)的耐久力回复(%d)", // CHAR_getUseName( toindex ), // UpPoint, // CHAR_getUseName( toindex ), // petUpPoint // ); } break; case BD_KIND_MP: UpPoint = RAND( (power*0.9), (power*1.1) ); if( per ){ UpPoint *= CHAR_getWorkInt( toindex, CHAR_WORKMAXMP ) * 0.01; } workhp = CHAR_getInt( toindex, CHAR_MP ); oldhp = workhp; workhp += (int)UpPoint; CHAR_setInt( toindex, CHAR_MP, min( workhp, CHAR_getWorkInt( toindex, CHAR_WORKMAXMP ) ) ); //snprintf( szBuffer, sizeof(szBuffer), // "(%s)的气力回复(%d)", // CHAR_getUseName( toindex ), // UpPoint // ); break; } //BATTLE_BroadCast( battleindex, szBuffer, // (attackNo >= 10)? CHAR_COLORGRAY : CHAR_COLORPURPLE ) ; { int Sign, Damage, petDamage; Sign = (UpPoint >= 0)?(1):(0); Damage = ABS( UpPoint ); petDamage = ABS( petUpPoint );#ifdef _NOTRIDE_ snprintf( szCommand, sizeof(szCommand), "BD|r%X|%X|%X|d%X|", ToList[i], kind, Sign, Damage );#else snprintf( szCommand, sizeof(szCommand), "BD|r%X|%X|%X|d%X|p%X|", ToList[i], kind, Sign, Damage, petDamage );#endif //_NOTRIDE_ BATTLESTR_ADD( szCommand ); } if( BattleArray[battleindex].norisk == 0 && CHAR_getInt( toindex, CHAR_WHICHTYPE ) == CHAR_TYPEPET){ flg = CHAR_getWorkInt( toindex, CHAR_WORKBATTLEFLG ); if( flg & CHAR_BATTLEFLG_RECOVERY ){ }else{ CHAR_PetAddVariableAi( toindex, AI_FIX_PETRECOVERY ); CHAR_setWorkInt( toindex, CHAR_WORKBATTLEFLG, flg | CHAR_BATTLEFLG_RECOVERY ); } } } return;}#ifdef _MAGIC_REHPAIint Magic_RideGetHP( int toindex, int petindex, int flg){ int allDHp=1; int petDHp=1; int CharDHp=1; int ISIZE = 100; CharDHp = CHAR_getWorkInt( toindex, CHAR_WORKMAXHP ) - CHAR_getInt( toindex, CHAR_HP); petDHp = CHAR_getWorkInt( petindex, CHAR_WORKMAXHP ) - CHAR_getInt( petindex, CHAR_HP); allDHp = (CharDHp + petDHp); if( allDHp <= 0 ) allDHp=1; if( flg == 1) return (int)((CharDHp*ISIZE)/allDHp); else return (int)((petDHp*ISIZE)/allDHp);}#endifint MAGIC_Recovery_Battle( int charaindex, int toNo, int marray, int mp ){ char *magicarg; float power; int battleindex, attackNo, HealedEffect = 0, per = 0; int range; if( !CHAR_CHECKINDEX( charaindex) ) return FALSE; battleindex = CHAR_getWorkInt( charaindex, CHAR_WORKBATTLEINDEX ); attackNo = BATTLE_Index2No( battleindex, charaindex );#if 1 // Robin fix 防封包改Magic范围 range = MAGIC_getInt( marray, MAGIC_TARGET ); //print(" MAGIC_TARGET:%d toNo:%d ", range, toNo); if( range == 0 && toNo != attackNo ) { // 只能对自己使用// print("\n 改封包!MAGIC只能对自己使用!!:%s ", CHAR_getChar( charaindex, CHAR_CDKEY) ); return FALSE; } if( range == 1 && toNo >= 20 ) { // 只能对单体使用// print("\n 改封包!MAGIC只能对单体使用!!:%s ", CHAR_getChar( charaindex, CHAR_CDKEY) ); return FALSE; }#endif // shan(对全体使用魔法的bug),修改者jinchao+2001/12/07 if( BATTLE_CHECKINDEX( battleindex ) == FALSE ) return FALSE; magicarg = MAGIC_getChar( marray, MAGIC_OPTION ); // shan(对全体使用魔法的bug),修改者jinchao+2001/12/07 if (magicarg == "\0") return FALSE; power = atoi( magicarg ); if( strstr( magicarg, "%" ) ){ per = 1; } if( power <= 100 ){ HealedEffect = SPR_heal; }else if( power <= 300 ){ HealedEffect = SPR_heal2; }else{ HealedEffect = SPR_heal3; } BATTLE_MultiRecovery( battleindex, attackNo, toNo,BD_KIND_HP, (int)power, per, MAGIC_EFFECT_USER, HealedEffect ); return TRUE;}void BATTLE_MultiResAndDef( int battleindex, // 田玄伙奶件犯永弁旦 int attackNo, // 井仃月谛 寞 int toNo, // 井仃日木月谛 寞 int power, // 湘 荚汊袄 int per, // ⊙井" int kind, // 芊 豢及潘 int count, // 窒荚 什井 int UseEffect, // 银丹谛及巨白尼弁玄 int RecevEffect // 井仃日木月谛及巨白尼弁玄){ int i, toindex, charaindex, UpPoint = 0, workhp; int ToList[SIDE_OFFSET*2+1]; //char szBuffer[256]=""; char szCommand[256]; BATTLE_MultiListDead( battleindex, toNo, ToList ); BATTLE_MagicEffect( battleindex, // 田玄伙奶件犯永弁旦 attackNo, // 井仃月谛 寞(ㄟ ㄠㄨ) ToList, // 井仃日木月谛 寞伉旦玄(ㄟ ㄠㄨ) UseEffect, // 井仃月谛巨白尼弁玄 RecevEffect // 井仃日木月谛巨白尼弁玄 ); charaindex = BATTLE_No2Index( battleindex, attackNo ); for( i = 0; ToList[i] != -1; i ++ ){ toindex = BATTLE_No2Index( battleindex, ToList[i] ); if( BattleArray[battleindex].type == BATTLE_TYPE_P_vs_P && CHAR_getInt( toindex, CHAR_WHICHTYPE ) == CHAR_TYPEPLAYER){ continue; } if( CHAR_getFlg( toindex, CHAR_ISDIE ) == FALSE ){ continue; } UpPoint = power;#ifdef _MAGIC_REHPAI#else if( per ){ UpPoint *= CHAR_getWorkInt( toindex, CHAR_WORKMAXHP ) * 0.01; }#endif if( power == 0 ){ UpPoint = CHAR_getWorkInt( toindex, CHAR_WORKMAXHP ); }else{ UpPoint = RAND( (power*0.9), (power*1.1) ); } UpPoint = max( 1, UpPoint ); workhp = CHAR_getInt( toindex, CHAR_HP ) + UpPoint; CHAR_setInt( toindex, CHAR_HP, min( workhp, CHAR_getWorkInt( toindex, CHAR_WORKMAXHP ) ) ); CHAR_setFlg( toindex, CHAR_ISDIE, 0 ); CHAR_setWorkInt( toindex, MagicDefTbl[kind], count ); //snprintf( szBuffer, sizeof(szBuffer), // "(%s)恢复意识", // CHAR_getUseName( toindex ) ); //snprintf( szBuffer, sizeof(szBuffer), // "(%s)将(%s)遭受(损伤%s)", // CHAR_getUseName( charaindex ), // CHAR_getUseName( toindex ), // aszMagicDefFull[kind] //); //BATTLE_BroadCast( battleindex, szBuffer, // (attackNo >= 10)? CHAR_COLORGRAY : CHAR_COLORPURPLE ) ; snprintf( szCommand, sizeof(szCommand), "BL|r%X|h%X|", ToList[i], CHAR_getInt( toindex, CHAR_HP ) ); BATTLESTR_ADD( szCommand ); if( BattleArray[battleindex].norisk == 0 && BattleArray[battleindex].type == BATTLE_TYPE_P_vs_E ){ if( CHAR_getInt( toindex, CHAR_WHICHTYPE ) == CHAR_TYPEPET ){ CHAR_PetAddVariableAi( toindex, AI_FIX_PETRESSURECT ); } } }}#ifdef _ATTACK_MAGICstatic int CharTable[4][5] ={ { 13 , 11 , 10 , 12 , 14 } , { 18 , 16 , 15 , 17 , 19 } , { 8 , 6 , 5 , 7 , 9 } , { 3 , 1 , 0 , 2 , 4 }};static int CharTableIdx[20][2] ={ { 3 , 2 } , { 3 , 1 } , { 3 , 3 } , { 3 , 0 } , { 3 , 4 } , { 2 , 2 } , { 2 , 1 } , { 2 , 3 } , { 2 , 0 } , { 2 , 4 } , { 0 , 2 } , { 0 , 1 } , { 0 , 3 } , { 0 , 0 } , { 0 , 4 } , { 1 , 2 } , { 1 , 1 } , { 1 , 3 } , { 1 , 0 } , { 1 , 4 }};typedef int ( *FUNC )( const void* , const void* );static int SortLoc( const int *pEle1 , const int *pEle2 ){ int ele1basex , ele1basey; int ele2basex , ele2basey; ele1basex = CharTableIdx[*pEle1][1]; ele1basey = CharTableIdx[*pEle1][0]; ele2basex = CharTableIdx[*pEle2][1]; ele2basey = CharTableIdx[*pEle2][0]; // 左上方 if( *pEle1 >= 10 ) { if( ele1basey != ele2basey ) return ( ele1basey - ele2basey ); return ( ele1basex - ele2basex ); } // 右下方 else { if( ele1basey != ele2basey ) return ( ele2basey - ele1basey ); return ( ele2basex - ele1basey ); } return 0;}static void BATTLE_GetAttr( int charaindex , int *pAt_Fire , int *pAt_Water , int *pAt_Earth , int *pAt_Wind , int *pAt_None ){ int petindex = BATTLE_getRidePet( charaindex ); if( petindex == -1 ) { *pAt_Fire = CHAR_getWorkInt( charaindex , CHAR_WORKFIXFIREAT ); *pAt_Water = CHAR_getWorkInt( charaindex , CHAR_WORKFIXWATERAT ); *pAt_Earth = CHAR_getWorkInt( charaindex , CHAR_WORKFIXEARTHAT ); *pAt_Wind = CHAR_getWorkInt( charaindex , CHAR_WORKFIXWINDAT ); } else { *pAt_Fire = ( CHAR_getWorkInt( charaindex , CHAR_WORKFIXFIREAT ) + CHAR_getWorkInt( petindex , CHAR_WORKFIXFIREAT ) ) / 2; *pAt_Water = ( CHAR_getWorkInt( charaindex , CHAR_WORKFIXWATERAT ) + CHAR_getWorkInt( petindex , CHAR_WORKFIXWATERAT ) ) / 2; *pAt_Earth = ( CHAR_getWorkInt( charaindex , CHAR_WORKFIXEARTHAT ) + CHAR_getWorkInt( petindex , CHAR_WORKFIXEARTHAT ) ) / 2; *pAt_Wind = ( CHAR_getWorkInt( charaindex , CHAR_WORKFIXWINDAT ) + CHAR_getWorkInt( petindex , CHAR_WORKFIXWINDAT ) ) / 2; } if( *pAt_Fire < 0 ) *pAt_Fire = 0; if( *pAt_Water < 0 ) *pAt_Water = 0; if( *pAt_Earth < 0 ) *pAt_Earth = 0; if( *pAt_Wind < 0 ) *pAt_Wind = 0; *pAt_None = 100 - *pAt_Fire - *pAt_Water - *pAt_Earth - *pAt_Wind; if( *pAt_None < 0 ) *pAt_None = 0;}static void BATTLE_GetPureAttr( int charaindex , int *pAt_Fire , int *pAt_Water, int *pAt_Earth , int *pAt_Wind ){ *pAt_Fire = CHAR_getWorkInt( charaindex , CHAR_WORKFIXFIREAT ); *pAt_Water = CHAR_getWorkInt( charaindex , CHAR_WORKFIXWATERAT ); *pAt_Earth = CHAR_getWorkInt( charaindex , CHAR_WORKFIXEARTHAT ); *pAt_Wind = CHAR_getWorkInt( charaindex , CHAR_WORKFIXWINDAT ); if( *pAt_Fire < 0 ) *pAt_Fire = 0; if( *pAt_Water < 0 ) *pAt_Water = 0; if( *pAt_Earth < 0 ) *pAt_Earth = 0; if( *pAt_Wind < 0 ) *pAt_Wind = 0;}int BATTLE_CalAttMagicEffect( int AttEle , int DefPosEleValue , int DefNegEleValue ){ int value; value = ( 100 * DefPosEleValue - 100 * DefNegEleValue ) / 1000; if( value > 10 ) return 10; else if( value < -10 ) return -10; return value;}int BATTLE_CalcCharaRatio( int AttEle , int charaidx ){ int petidx , charahurt , pethurt; int charaattr[4] , petattr[4]; // 没有宠物 if( -1 == ( petidx = BATTLE_getRidePet( charaidx ) ) ) return 10; // Nuke 20040330: Fix bug if ( -1 == AttEle ) return 5; BATTLE_GetPureAttr( charaidx , &charaattr[2] , &charaattr[1] , &charaattr[0], &charaattr[3] ); BATTLE_GetPureAttr( petidx , &petattr[2] , &petattr[1] , &petattr[0] , &petattr[3] ); //print("\nAttEle: %d %d %d %d %d ",AttEle, charaattr[( AttEle + 1 ) % 4], charaattr[AttEle],petattr[( AttEle + 1 ) %4] , petattr[AttEle]); charahurt = 20 + BATTLE_CalAttMagicEffect( AttEle , charaattr[( AttEle + 1 ) % 4] , charaattr[AttEle] );
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -