battle_magic.c
来自「石器时代8.0服务端完整源代码。可以直接编译」· C语言 代码 · 共 1,963 行 · 第 1/5 页
C
1,963 行
CHAR_setInt( toindex, CHAR_WATERAT, CHAR_getInt( toindex, CHAR_WATERAT )+10 ); else if( CHAR_getInt( toindex, CHAR_WINDAT ) == 100 ) CHAR_setInt( toindex, CHAR_WINDAT, CHAR_getInt( toindex, CHAR_WINDAT )-10 ), CHAR_setInt( toindex, CHAR_FIREAT, CHAR_getInt( toindex, CHAR_FIREAT )+10 ); else if( CHAR_getInt( toindex, CHAR_EARTHAT ) > 0 && CHAR_getInt( toindex, CHAR_WATERAT ) > 0 ) CHAR_setInt( toindex, CHAR_EARTHAT, CHAR_getInt( toindex, CHAR_EARTHAT )+10 ), CHAR_setInt( toindex, CHAR_WATERAT, CHAR_getInt( toindex, CHAR_WATERAT )-10 ); else if( CHAR_getInt( toindex, CHAR_WATERAT ) > 0 && CHAR_getInt( toindex, CHAR_FIREAT ) > 0 ) CHAR_setInt( toindex, CHAR_WATERAT, CHAR_getInt( toindex, CHAR_WATERAT )+10 ), CHAR_setInt( toindex, CHAR_FIREAT, CHAR_getInt( toindex, CHAR_FIREAT )-10 ); else if( CHAR_getInt( toindex, CHAR_FIREAT ) > 0 && CHAR_getInt( toindex, CHAR_WINDAT ) > 0 ) CHAR_setInt( toindex, CHAR_FIREAT, CHAR_getInt( toindex, CHAR_FIREAT )+10 ), CHAR_setInt( toindex, CHAR_WINDAT, CHAR_getInt( toindex, CHAR_WINDAT )-10 ); else if( CHAR_getInt( toindex, CHAR_WINDAT ) > 0 && CHAR_getInt( toindex, CHAR_EARTHAT ) > 0 ) CHAR_setInt( toindex, CHAR_WINDAT, CHAR_getInt( toindex, CHAR_WINDAT )+10 ), CHAR_setInt( toindex, CHAR_EARTHAT, CHAR_getInt( toindex, CHAR_EARTHAT )-10 ); } }#endif case BD_KIND_HP:#ifdef _TYPE_TOXICATION if( CHAR_CanCureFlg( toindex, "HP") == FALSE ) continue;#endif // Robin 0728 ride Pet if( ridepet == -1 ) { 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;#ifdef _CHANGEITEMUSE // Syu ADD 调整战斗中使用料理设定 case BD_KIND_HP_MP:#ifdef _TYPE_TOXICATION if( CHAR_CanCureFlg( toindex, "HP") == FALSE ) continue;#endif if( ridepet == -1 ) { 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 // ); } UpPoint1 = RAND( (power1*0.9), (power1*1.1) ); if( per ) { UpPoint1 *= CHAR_getWorkInt( toindex, CHAR_WORKMAXMP ) * 0.01; } workhp = CHAR_getInt( toindex, CHAR_MP ); oldhp = workhp; workhp += (int)UpPoint1; CHAR_setInt( toindex, CHAR_MP, min( workhp, CHAR_getWorkInt( toindex, CHAR_WORKMAXMP ) ) ); //snprintf( szBuffer, sizeof(szBuffer), // "(%s)的气力回复(%d)", // CHAR_getUseName( toindex ), // UpPoint1); break;#endif }#ifdef _CHANGEITEMUSE // Syu ADD 调整战斗中使用料理设定 if ( kind == BD_KIND_HP_MP) { //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], BD_KIND_HP, Sign, Damage );#else snprintf( szCommand, sizeof(szCommand), "BD|r%X|%X|%X|d%X|p%X|", ToList[i], BD_KIND_HP, Sign, Damage, petDamage );#endif //_NOTRIDE_ BATTLESTR_ADD( szCommand ); } { //补气的部分 int Sign, Damage, petDamage; Sign = (UpPoint1 >= 0)?(1):(0); Damage = ABS( UpPoint1 ); petDamage = ABS( petUpPoint );#ifdef _NOTRIDE_ snprintf( szCommand, sizeof(szCommand), "BD|r%X|%X|%X|d%X|", ToList[i], BD_KIND_MP, Sign, Damage );#else snprintf( szCommand, sizeof(szCommand), "BD|r%X|%X|%X|d%X|p%X|", ToList[i], BD_KIND_MP, Sign, Damage, petDamage );#endif //_NOTRIDE_ BATTLESTR_ADD( szCommand ); } } else { //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 ); } }#else //_CHANGEITEMUSE //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 ); } }#endif //_CHANGEITEMUSE } 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) 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; }#ifdef _CHANGEITEMUSE // Syu ADD 调整战斗中使用料理设定 BATTLE_MultiRecovery( battleindex, attackNo, toNo, BD_KIND_HP, (int)power, per, MAGIC_EFFECT_USER, HealedEffect , 0);#else BATTLE_MultiRecovery( battleindex, attackNo, toNo, BD_KIND_HP, (int)power, per, MAGIC_EFFECT_USER, HealedEffect );#endif 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 );
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?