📄 battle_magic.c
字号:
}else { temp = ((float)pet_att_lv - (float)pet_def_lv) / (float)pet_def_lv / 100; attvalue = Power + Power * temp + attvalue; } } // 上下取10 attvalue += rand()%2 ? (rand()%10)+1 : -(rand()%10)-1; if( attvalue <= 0 ) attvalue = 1;#endif } charahp = CHAR_getInt( charaidx , CHAR_HP ); // 没有宠物 if( -1 == petidx || CHAR_getInt( petidx , CHAR_HP ) <= 0 ) { if( ( charahp -= attvalue ) < 0 ) { charahp = 0; //ANDY_ADD //CHAR_setFlg( charaidx, CHAR_ISDIE, TRUE); } CHAR_setInt( charaidx , CHAR_HP , charahp ); pethp = 0; // 单人攻击 if( 0 == ATTMAGIC_magic[magicattidx].uiAttackType ) sprintf( szcommand , "%X|%X|%X|%X|" , toNo , list[i] , attvalue , pethp ); // 多人攻击 else sprintf( szcommand , "%X|%X|%X|%X|" , list[i] , list[i] , attvalue, pethp ); } else { pethp = CHAR_getInt( petidx , CHAR_HP ); charahurt = attvalue * BATTLE_CalcCharaRatio( FieldAttr , charaidx ) / 10; charahurt_temp = charahurt; if( ( charahp -= charahurt ) < 0 ) { charahurt = charahp; charahp = 0; //ANDY_ADD //CHAR_setFlg( charaidx, CHAR_ISDIE, TRUE); } attvalue = attvalue - charahurt; if( ( pethp -= attvalue ) < 0 ) { pethp = 0; // 宠物没血了退出战场 CHAR_setInt(charaidx,CHAR_RIDEPET,-1); BATTLE_changeRideImage(charaidx); CHAR_setWorkInt(charaidx,CHAR_WORKPETFALL,1); } CHAR_setInt( charaidx , CHAR_HP , charahp ); CHAR_setInt( petidx , CHAR_HP , pethp ); charahurt = charahurt_temp; // 单人攻击 if( 0 == ATTMAGIC_magic[magicattidx].uiAttackType ) sprintf( szcommand , "%X|%X|%X|%X|" , toNo , list[i] , charahurt , attvalue ); // 多人攻击 else sprintf( szcommand , "%X|%X|%X|%X|" , list[i] , list[i] , charahurt, attvalue ); } { //Change fix 加上这个先拿到DP值 int aAttackList[BATTLE_ENTRY_MAX*2+1]; aAttackList[0] = attackNo; aAttackList[1] = -1; BATTLE_AddProfit( battleindex, aAttackList); } //change fix 让替身娃娃可正常运作 if( CHAR_getInt( charaidx , CHAR_HP ) <= 0 && CHAR_getInt( charaidx, CHAR_WHICHTYPE ) == CHAR_TYPEPLAYER /*&& !BattleArray[battleindex].dpbattle*/ ) CHAR_setFlg( charaidx, CHAR_ISDIE, 1 ); BATTLESTR_ADD( szcommand ); } sprintf( szcommand , "%X|" , 0x12345678 ); BATTLESTR_ADD( szcommand );#ifdef _FIX_MAGICDAMAGE if( (TrueMagic == FALSE) && AttIsPlayer) { //计算攻击方经验值 Magic_ComputeAttExp( BATTLE_No2Index(battleindex,attackNo), FieldAttr, MagicLv, getexp); } for(i=0; i<listidx; i++) { // 如果被攻击者中了睡眠 if(CHAR_getWorkInt(def_be_hit[i],CHAR_WORKSLEEP) > 0) { CHAR_setWorkInt(def_be_hit[i],CHAR_WORKSLEEP,0); z = BATTLE_Index2No(battleindex,def_be_hit[i]); sprintf(szcommand,"BM|%X|%X|",z,0); BATTLESTR_ADD(szcommand); } }#else //TrueMagic == FALSE // 攻击方的经验值----------------------------------------------------------------------------- if(AttIsPlayer){ // 被克的魔法 DefFieldAttr = (FieldAttr+1)%4; // 取得玩家所用的魔法的经验值 att_magic_exp_add = CHAR_getInt(BATTLE_No2Index(battleindex,attackNo),CHAR_EARTH_ATTMAGIC_EXP+FieldAttr); // 取得玩家所用的魔法的被克魔法经验值 att_magic_exp_sub = CHAR_getInt(BATTLE_No2Index(battleindex,attackNo),CHAR_EARTH_ATTMAGIC_EXP+DefFieldAttr); // 依所使用的魔法加该属性的exp,打几只算几点exp att_magic_exp_add += getexp; // 依所使用的魔法扣被克属性的exp,打几只扣几点exp att_magic_exp_sub -= getexp; lv_up_exp = Magic_Level_Table[att_magic_lv[FieldAttr]]; while(att_magic_exp_add >= lv_up_exp || att_magic_exp_sub < 0){ // 如果玩家所用的魔法的经验值现在可以升级了 if(att_magic_exp_add >= lv_up_exp){ // 如果超过了100级 if(att_magic_lv[FieldAttr] + 1 > 100){ att_magic_lv[FieldAttr] = 100; // 经验值清为0 att_magic_exp_add = 0; }else{ att_magic_lv[FieldAttr]++; // 把现在的经验值扣掉升了级所用的经验值 att_magic_exp_add -= lv_up_exp; snprintf(msgbuf,sizeof(msgbuf),"你的 %s 魔法熟练度升级为 %d。",kind[FieldAttr],att_magic_lv[FieldAttr]); CHAR_talkToCli(BATTLE_No2Index(battleindex,attackNo),-1,msgbuf,CHAR_COLORRED); } } // 如果玩家所用的魔法的相克魔法的经验值现在可以降级了 if(att_magic_exp_sub < 0 ){ // 如果等级已经是1级 if(att_magic_lv[DefFieldAttr] <= 1){ att_magic_lv[DefFieldAttr] = 1; // 经验值清为0 att_magic_exp_sub = 0; }else{ att_magic_lv[DefFieldAttr]--; // 把下一个等级的经验值扣掉现在的经验值 att_magic_exp_sub = Magic_Level_Table[att_magic_lv[DefFieldAttr]] + att_magic_exp_sub; snprintf(msgbuf,sizeof(msgbuf),"你的 %s 魔法熟练度降级为 %d。",kind[DefFieldAttr],att_magic_lv[DefFieldAttr]); CHAR_talkToCli(BATTLE_No2Index(battleindex,attackNo),-1,msgbuf,CHAR_COLORRED); } } lv_up_exp = Magic_Level_Table[att_magic_lv[FieldAttr]]; } CHAR_setInt(BATTLE_No2Index(battleindex,attackNo),CHAR_EARTH_EXP+FieldAttr,att_magic_lv[FieldAttr]); CHAR_setInt(BATTLE_No2Index(battleindex,attackNo),CHAR_EARTH_ATTMAGIC_EXP+FieldAttr,att_magic_exp_add); CHAR_setInt(BATTLE_No2Index(battleindex,attackNo),CHAR_EARTH_EXP+DefFieldAttr,att_magic_lv[DefFieldAttr]); CHAR_setInt(BATTLE_No2Index(battleindex,attackNo),CHAR_EARTH_ATTMAGIC_EXP+DefFieldAttr,att_magic_exp_sub); } // 防守方的经验值----------------------------------------------------------------------------- for(i=0;i<listidx;i++){ if(def_is_player[i] != -1){ charaidx = BATTLE_No2Index(battleindex,def_is_player[i]); // 取得防守方玩家对此魔法的抗性等级 def_magic_resist[FieldAttr] = CHAR_getInt(charaidx,CHAR_EARTH_RESIST+FieldAttr); // 取得防守方玩家对此魔法的抗性经验值 def_magic_exp_add = CHAR_getInt(charaidx,CHAR_EARTH_DEFMAGIC_EXP+FieldAttr); // 取得防守方玩家对此魔法被克的抗性等级 def_magic_resist[DefFieldAttr] = CHAR_getInt(charaidx,CHAR_EARTH_RESIST+DefFieldAttr); // 取得防守方玩家对此魔法被克的抗性经验值 def_magic_exp_sub = CHAR_getInt(charaidx,CHAR_EARTH_DEFMAGIC_EXP+DefFieldAttr); def_magic_exp_add++; def_magic_exp_sub--; lv_up_exp = Magic_Level_Table[def_magic_resist[FieldAttr]]; while(def_magic_exp_add >= lv_up_exp || def_magic_exp_sub < 0){ // 如果防守方玩家对此魔法的抗性的经验值现在可以升级了 if(def_magic_exp_add >= lv_up_exp){ // 如果超过了100级 if(def_magic_resist[FieldAttr] + 1 > 100) def_magic_resist[FieldAttr] = 100; else { def_magic_resist[FieldAttr]++; snprintf(msgbuf,sizeof(msgbuf),"你的 %s 魔法抗性升级为 %d。",kind[FieldAttr],def_magic_resist[FieldAttr]); CHAR_talkToCli(charaidx,-1,msgbuf,CHAR_COLORRED); } // 经验值清为0 def_magic_exp_add = 0; } // 如果防守方玩家对此魔法的抗性的相克魔法的经验值现在可以降级了 if(def_magic_exp_sub < 0 ) { // 如果等级已经是1级 if(def_magic_resist[DefFieldAttr] <= 1) def_magic_exp_sub = 0; // 经验值清为0 else { def_magic_resist[DefFieldAttr]--; // 经验值变成下一个等级的经验值 def_magic_exp_sub = Magic_Level_Table[def_magic_resist[DefFieldAttr]]; snprintf(msgbuf,sizeof(msgbuf),"你的 %s 魔法抗性降级为 %d。",kind[DefFieldAttr],def_magic_resist[DefFieldAttr]); CHAR_talkToCli(charaidx,-1,msgbuf,CHAR_COLORRED); } } lv_up_exp = Magic_Level_Table[def_magic_resist[FieldAttr]]; } CHAR_setInt(charaidx,CHAR_EARTH_RESIST+FieldAttr,def_magic_resist[FieldAttr]); CHAR_setInt(charaidx,CHAR_EARTH_DEFMAGIC_EXP+FieldAttr,def_magic_exp_add); CHAR_setInt(charaidx,CHAR_EARTH_RESIST+DefFieldAttr,def_magic_resist[DefFieldAttr]); CHAR_setInt(charaidx,CHAR_EARTH_DEFMAGIC_EXP+DefFieldAttr,def_magic_exp_sub); } // 如果被攻击者中了睡眠 if(CHAR_getWorkInt(def_be_hit[i],CHAR_WORKSLEEP) > 0) { CHAR_setWorkInt(def_be_hit[i],CHAR_WORKSLEEP,0); z = BATTLE_Index2No(battleindex,def_be_hit[i]); sprintf(szcommand,"BM|%X|%X|",z,0); BATTLESTR_ADD(szcommand); } }#endif}#endif#ifdef _MAGIC_TOCALLvoid BATTLE_MultiToCallDragonMagic( int battleindex, int attackNo, int toNo, int attIdx ,int FieldAttr ,int Power, int ImageNo){ int list[SIDE_OFFSET * 2 + 1]; int listidx,i,j,k,z; int /*basex , */basey , magicattidx,def_is_player[10],def_be_hit[10]; int attvalue , charahp , pethp , charaidx , petidx , charahurt,charahurt_temp; char szcommand[256]; int /*AttIsPlayer = 0,*/DefIsPlayer = 0;#ifndef _FIX_MAGICDAMAGE int att_magic_exp_add,att_magic_exp_sub,def_magic_exp_add,def_magic_exp_sub; int lv_up_exp,DefFieldAttr = 0; float temp = 0.0f; char msgbuf[64];#else#endif int icindex, ioindex; // terry if((z = BATTLE_MultiList(battleindex,toNo,list)) == -1) return; else{ if(z != toNo) toNo = z; } TOCALL_magic[attIdx].uiSpriteNum = ImageNo; BATTLE_ToCallDragonEffect( battleindex , attackNo , list , attIdx); // 计算攻击的人物清单 if( attackNo < 10 ) magicattidx = attIdx * 2 + 1; else magicattidx = attIdx * 2; listidx = 0; memset(def_is_player,-1,sizeof(def_is_player)); memset(def_be_hit,-1,sizeof(def_be_hit)); // 单人攻击 if( toNo < 20 ){ toNo = list[0]; listidx++; } else if( 20 == toNo ){ // 右下全体 for( i = 0 ; i < 2 ; i++ ){ for( j = 0 ; j < 5 ; j++ ){ if(TRUE == BATTLE_TargetCheck( battleindex , CharTable[i + 2][j] ) ){ list[listidx] = CharTable[i + 2][j]; listidx++; } } } } else if( 21 == toNo ){ // 左上全体 for( i = 0 ; i < 2 ; i++ ){ for( j = 0 ; j < 5 ; j++ ){ if(TRUE == BATTLE_TargetCheck( battleindex , CharTable[i][j] ) ){ list[listidx] = CharTable[i][j]; listidx++; } } } } // 左上第一列 , 左上第二列 , 右下第一列 , 右下第二列 else if( 23 == toNo || 24 == toNo || 25 == toNo || 26 == toNo ){ basey = toNo - 23; for( i = 0 , j = basey - 1 ; j <= basey + 1 ; i++ , j++ ){ if( ( 25 == toNo || 26 == toNo ) && ( j < 2 || j > 3 ) ) continue; else if( ( 23 == toNo || 24 == toNo ) && ( j < 0 || j > 1 ) ) continue; // 计算那些人需要加入清单 for( k = 0 ; k < 5 ; k++ ){ if(TRUE == BATTLE_TargetCheck( battleindex , CharTable[j][k] ) ) { list[listidx] = CharTable[j][k]; listidx++; } } } } qsort( list , listidx , sizeof( list[0] ) , ( FUNC )SortLoc );// 排序位置 for( i = 0 ; i < listidx ; i++ ) { int defType; charaidx = BATTLE_No2Index( battleindex , list[i] ); petidx = BATTLE_getRidePet( charaidx ); defType = CHAR_getInt(charaidx, CHAR_WHICHTYPE); DefIsPlayer = 0; if (defType == CHAR_TYPEPLAYER) { DefIsPlayer = 1; } if (CHAR_createCharacter( 100354 /*image no*/, 100, 600, 370, 0, &icindex, &ioindex, 0) == TRUE) {// CHAR_setInt( icindex, CHAR_STR, 100); CHAR_setInt( icindex, CHAR_LUCK, 1); CHAR_setWorkInt( icindex, CHAR_WORKATTACKPOWER, Power ); CHAR_setWorkInt( icindex, CHAR_WORKOTHERDMAGE, 0); if (BATTLE_MagicDodge(charaidx, DefIsPlayer, FieldAttr)) {// 没击中 attvalue = 0; } else { if( 0 == TOCALL_magic[attIdx].uiAttackType ) {// 单人攻击 attvalue = BATTLE_DamageCalc(icindex, charaidx); } else { attvalue = BATTLE_DamageCalc(icindex, charaidx); } } CHAR_CharaDelete(icindex); charahp = CHAR_getInt( charaidx , CHAR_HP ); if (-1 == petidx || CHAR_getInt(petidx, CHAR_HP) <= 0) {// 没骑宠物 if( ( charahp -= attvalue ) < 0 ) { charahp = 0; } CHAR_setInt( charaidx , CHAR_HP , charahp ); pethp = 0; if( 0 == TOCALL_magic[attIdx].uiAttackType ) {// 单人攻击 sprintf( szcommand , "%X|%X|%X|%X|" , toNo , list[i] , attvalue , pethp); } else sprintf( szcommand , "%X|%X|%X|%X|" , list[i] , list[i] , attvalue , pethp); }else{ pethp = CHAR_getInt( petidx , CHAR_HP ); charahurt = attvalue * BATTLE_CalcCharaRatio( FieldAttr , charaidx ) / 10; charahurt_temp = charahurt; if( ( charahp -= charahurt ) < 0 ) { charahurt = charahp; charahp = 0; } attvalue = attvalue - charahurt; if( ( pethp -= attvalue ) < 0) { pethp = 0; // 宠物没血了退出战场 CHAR_setInt(charaidx,CHAR_RIDEPET,-1); BATTLE_changeRideImage(charaidx); CHAR_setWorkInt(charaidx,CHAR_WORKPETFALL,1); } CHAR_setInt( charaidx , CHAR_HP , charahp ); CHAR_setInt( petidx , CHAR_HP , pethp ); charahurt = charahurt_temp; if( 0 == TOCALL_magic[attIdx].uiAttackType ) {// 单人攻击 sprintf( szcommand , "%X|%X|%X|%X|" , toNo , list[i] , charahurt , attvalue); } else sprintf( szcommand , "%X|%X|%X|%X|" , list[i] , list[i] , charahurt , attvalue); } BATTLESTR_ADD( szcommand ); } } sprintf( szcommand , "%X|" , 0x5711438 ); BATTLESTR_ADD( szcommand );}#endif//***********************************************************//// 芊羁匹 醒及平乓仿弁正□毛汊唾今六月//void BATTLE_MultiRessurect( int battleindex, // 田玄伙奶件犯永弁旦
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -