⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 battle_magic.c

📁 石器时代2.0完整版源代码.已经加入新功能. 在REDHAT9下GCC3.4编译成功.
💻 C
📖 第 1 页 / 共 5 页
字号:
					}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 + -