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

📄 op_battle.cpp

📁 国内著名网络游戏dragon的服务端完整源码 内附完整数据库结构
💻 CPP
📖 第 1 页 / 共 5 页
字号:
	case NK_TYPE_KILL_:
	case NK_TYPE_NO_KILL_:
		{
			if( IsManToManFight( attacker, defender ) ) return;
			break;
		}
	case NK_TYPE_STEAL_:
		break;
	}
	
	int down = 0;	
	short int ano = 0, dno = 0;
	int a_nk, d_nk;	
	int cur_nation = MapInfo[ MapNumber].nation;
	int a_nation, d_nation;		
	
	a_nation =	attacker->name_status.nation;
	d_nation =	defender->name_status.nation;
	
	// Monster绰 磨荐 绝促.. 
	if( d_nation == N_NONSTER ) return;
	if( defender->SprType == SPRITETYPE_NPC && type == NK_TYPE_NO_KILL_ ) return;  // 010613 KHS
	
	// 瘤陛 困摹茄 甘俊 措茄 NK荐摹蔼..
	a_nk = OutNK( attacker, cur_nation );
	d_nk = OutNK( defender, cur_nation );
	int tcase = GetCaseOfNK( cur_nation, a_nation, d_nation, a_nk, d_nk );
	int *t = NationNkNum[tcase][ type];
	
	InNK( attacker, a_nation, t[0] );
	InNK( attacker, cur_nation, t[1] );
	
	if( tcase == 3)	
	{
		if( cur_nation != d_nation)	InNK( attacker, d_nation, t[2] ); // 利惫苞 利焙狼唱扼啊 老摹窍搁 滴锅 PK啊 棵扼啊瘤 臼霸 茄促.
	}
	else 
	{
		InNK( attacker, d_nation, t[2] );	
	}
	// 弊甘俊 磷菌栏聪... 弊甘俊 措茄 NK荐摹绰 冻绢咙
	if (d_nk && type == NK_TYPE_KILL_)	
	{
		InNK(defender, cur_nation, -10);
	}	
}	//> CSD-030509

//------------------------------------------------------------------------------

// 硅簐阑 且荐 乐绰 瘤开牢啊 
// 硅簐阑 且荐 惑怕牢啊甫 魄促...
// 0810 KHS
bool CanBattleArea( LPCHARLIST a, LPCHARLIST  d)
{
	// 0810 KHS  CMD_MOVE 菩哦捞 甸绢坷绰镑俊 d->attackedblock = 0;栏肺 Setting茄促. 
	if( d->attackedblock ) return false; // 弥檬俊 霸烙俊 甸绢坷搁 捞悼窍扁傈鳖瘤绰 傍拜阑 罐瘤 臼绰促. 
	
	
	if( a->Hp <= 0 ) return false; //  磷篮磊绰 傍拜且荐 绝促. 
	if( d->Hp <= 0 ) return false; //  磷篮磊甫 肚 傍拜且鉴 绝促. 
	
	// 必厩PK // 1012 KHS
	//	if( d->name_status.ultra_pk == 1 ) return true;
	//	if( a->name_status.ultra_pk == 1 ) return false; //  惫厩 PK绰 傍拜且荐 绝促.  付过俊档 乐唱  Check 秦拎...
	
	if( d->IsCounselor() ) return false;
	if( d->accessory[ WT_WEAPON] == 114 ) return false; // 魂鸥 渴阑 涝菌促. 
	// 030106 kyo 困摹捞悼
	if (a->Race != GUARD) 
	{	//< CSD-030226 : 版厚盔捞 酒聪扼搁 版快
		if (TileMap[a->MoveSx][a->MoveSy].attr_no_battle) 
		{
			return false;  // 甘俊 no battle 加己捞 乐栏搁 傍拜且荐 绝促. 
		}
		
		if (TileMap[d->MoveSx][d->MoveSy].attr_no_battle) 
		{
			return false;  // 甘俊 no battle 加己捞 乐栏搁 傍拜且荐 绝促. 
		}
	}	//> CSD-030226
	
#ifdef _NATION_APPLY_
	if( a->name_status.nation != d->name_status.nation ) return true;	// 0927 YGI
																		/*	else
																		{
																		if( d->SprType == SPRITETYPE_NPC )
																		if( d->Race == HUMAN )
																		{
																		// 鞍篮 惫啊 荤恩npc绰 傍拜阑 罐瘤 臼霸 茄促. 
																		return false;
																		}
																		}
	*/
	
#endif
	
	if (a->Race == GUARD)	return true;
	if (IsHeNK(d, MapInfo[MapNumber].nation) > 5)	return true;
	if (g_block_attack)	return false; // 傍拜且荐 绝促. 腹距 Event锭巩俊 傍拜且荐 绝绰 惑怕肺 汲沥阑 官操菌促搁 ..
	if (a->dwDontAttack > 0)	return false; //父距 傍拜阂啊 惑怕扼搁
	if (a->Hungry <= 0)	return false;
	
	return true;
}



inline int BojungDamage( LPCHARLIST d, int damage )
{
	return damage;
}
//............................
void SendYouDie( int cn )
{
	t_packet p;
	
	p.h.header.type = CMD_YOU_DIE;
	p.u.you_die.id		= cn;
	p.u.you_die.t		= 10;
	p.h.header.size = sizeof( t_you_die );
	
	QueuePacket( connections, cn, &p, 1 );
	CastMe2Other( cn, &p );     
}

void RecvDebugReqCharInfo( int cn, int target )
{
	t_packet p;
	LPCHARLIST n;
	
	p.h.header.type = CMD_DEBUG_REQ_CHAR_INFO;
	p.u.debug_server_req_char_info.id = target;
	
	if( target >= 10000 )
	{
		n = &NPCList[target-10000];
	}
	else 
	{
		n = &connections[ target].chrlst;
	}
	
	p.u.debug_server_req_char_info.id = target;
	
	p.u.debug_server_req_char_info.lv = n->GetLevel(); // CSD-030806
	p.u.debug_server_req_char_info.exp   = n->Exp; 
	p.u.debug_server_req_char_info.ac    = n->Ac;
	p.u.debug_server_req_char_info.Str   = n->Str;					//  塞
	p.u.debug_server_req_char_info.Con   = n->Con;				//  扒碍
	p.u.debug_server_req_char_info.Dex   = n->Dex;				//	刮酶己
	p.u.debug_server_req_char_info.Wis   = n->Wis;				//	瘤驱
	p.u.debug_server_req_char_info.Int   = n->Int;				//	瘤瓷
	p.u.debug_server_req_char_info.MoveP = n->MoveP;				//	捞悼仿
	p.u.debug_server_req_char_info.Char  = n->Char;				//	概仿
	p.u.debug_server_req_char_info.Endu  = n->Endu;				//  历氢仿
	p.u.debug_server_req_char_info.Moral = n->Moral;				//	荤扁
	p.u.debug_server_req_char_info.Luck  = n->Luck;				//	青款
	p.u.debug_server_req_char_info.wsps  = n->wsps;				//  付过仿->付过 皋葛扼捞令
	p.u.debug_server_req_char_info.Hp    = n->Hp;    	
	p.u.debug_server_req_char_info.HpMax = n->HpMax;
	p.u.debug_server_req_char_info.Mp    = n->Mana;     
	p.u.debug_server_req_char_info.MpMax = n->ManaMax;
	p.u.debug_server_req_char_info.Hungry= n->Hungry; 
	p.u.debug_server_req_char_info.HungryMax = n->HungryMax;
	p.u.debug_server_req_char_info.event_no = n->eventno;			// 0131 YGI
	
	p.h.header.size = sizeof( t_debug_server_req_char_info );
	QueuePacket( connections, cn, &p, 1 );
}

//acer7
char skill_name42[][30] = 
{
	"SPRITUALITY",
		"POISONING",
		"ENTRAPMENT",
		"SCROLLING",
		"CUNNING",
		"BOMBPLAY",
		"STEALING",
		"FARMING",
		"MINING",
		"FISHING",
		"CUTDOWN",
		"BUTCHERING",
		"HERBDIGGING",
		"HERDING",
		"CARPENTRY",
		"BLACKSMITHY",
		"COOKING",
		"TAILORING",
		"BOWCRAFTING",
		"ALCHEMING",
		"CANDLEMAKING",
		"REPARING",
		"REUTILIZING",
		"MUSICIANSHIP",
		"DETECT",
		"HIDE",
		"CAMPING",
		"TAIMING",
		"COMMUNICATION",
		"ANIMAL_LORE",
		"ARMS_LORE",
		"EVALUATE_INTELIGENCE",
		"EVALUATE_WISDOM",
		"ANATOMY_JUDGEMENT",
		"ITEM_IDENTIFICATION",
		"TASTE_IDENTIFICATION",
		"APPRAISAL",
		"HEALING",
		"JUMP",
		"RIDING",
};

// acer7
void SaveBallancingSkill( LPCHARLIST a, int skillno )
{							
	FILE *fp;																							
	char temp[ FILENAME_MAX];
	
	a->balancingtest --;
	if( a->balancingtest > 0 )	return;
	a->balancingtest = 50;
	
	sprintf( temp, "./skill_log/%s.txt", a->Name );
	
	fp = fopen( temp, "at+");
	if( fp == NULL )
	{
		sprintf( temp, "./skill_log/ID_%s.txt", connections[a->GetServerID()].id );
		fp = fopen( temp, "at+" );
		if( fp == NULL ) return;
	}
	
	int mother = SkillTbl[skillno].MotherSkillType;
	fprintf( fp, "skill< %s[%d(%d)](lv%d:exp%d) >\n", skill_name42[skillno], skillno, mother, a->skillexp[mother].skillexp/10000, a->skillexp[mother].skillexp%10000 );
	fprintf( fp, "---%s(%3d,%3d) %02d.%02d %02d:%02d:%02d ---\n",  MapName, a->MoveSx, a->MoveSy, g_mon+1, g_day,g_hour, g_min, g_sec );
	fprintf( fp, "WORKER(Lv:%3d/Exp:%9d/ladder:%3d/fame:%3d)\n", a->GetLevel(), a->Exp, a->LadderScore, a->fame ); // CSD-030806
	for(int iCount = 0; iCount<45; iCount++)//胶懦 版氰摹
	{
		if( a->skillexp[iCount].skillexp/10000 )
		{
			fprintf(fp,"SkillExp%d	Exp	%d/%d	RareRate	%d		month	%d	day	%d	makecount	%d\n",
				iCount,a->skillexp[iCount].skillexp/10000, a->skillexp[iCount].skillexp%10000,
				a->skillexp[iCount].rare,
				((LPSKILLEXP2)(&a->skillexp[iCount]))->month,
				((LPSKILLEXP2)(&a->skillexp[iCount]))->day,
				((LPSKILLEXP2)(&a->skillexp[iCount]))->makecount) ;
		}
	}
	fprintf( fp, "\n" );
	fclose(fp);
}	

void SaveBallancing2( LPCHARLIST a, LPCHARLIST d, int magicno, int damage, int mana, int attack, int attacktype, int tac  )
{   //< CSD-030324
	if(a->IsNpc()){return;}
	if( a->balancingtest/20  == (a->balancingtest-1)/20)//20 锅俊 茄锅
	{
		return;
	}
	
	char temp[ FILENAME_MAX] = {0,};
	::sprintf( temp, "./SimpleLog/%s.txt", a->Name );
	FILE *fp = fopen( temp, "at+");
	if( NULL == fp )
	{
		sprintf( temp, "./SimpleLog/%s.txt", connections[a->GetServerID()].id );
		fp = fopen( temp, "at+" );
		if( fp == NULL ) return;
		fprintf( fp, " %s \n", a->Name );
	}
	
	if( magicno )
	{
		if (magicno >= 215)
		{
			fprintf( fp, "Combat Skill< %3d:%30s >  --> %20s   \n", magicno, Magic_Ref[magicno].Han_Name, d->Name );
		}
		else
		{
			fprintf( fp, "Magic< %3d:%30s >  --> %20s   \n", magicno, Magic_Ref[magicno].Han_Name, d->Name );
		}
		
		fprintf( fp, "---%s(%3d,%3d) %02d.%02d %02d:%02d:%02d ---\n",  MapName, a->MoveSx, a->MoveSy, g_mon+1, g_day,g_hour, g_min, g_sec );
		
		fprintf( fp, " Attack(Lv:%3d/Exp:%9d/ladder:%3d/fame:%3d)\n", a->GetLevel(), a->Exp, a->LadderScore, a->fame); // CSD-030806
		fprintf( fp, " Defence(Lv:%3d/Exp:%9d)\n", d->GetLevel(), d->Exp); // CSD-030806

		fprintf( fp, " Hp %4d/%4d ->  Hp %4d/%4d \n", a->Hp, a->HpMax, d->Hp, d->HpMax );
		fprintf( fp, " Mana %4d/%4d -> Mana %4d/%4d \n", a->Mana, a->ManaMax, d->Mana, d->ManaMax );  
		fprintf( fp, " Hungry %4d/%4d -> Hngy %4d/%4d \n", a->Hungry, a->HungryMax, d->Hungry, d->HungryMax );
		fprintf( fp, " Damage : %4d        \n", damage );
		fprintf( fp, " Used Mana: %4d        \n",   mana );

		switch(a->Spell)
		{
		case WIZARD_SPELL:
			{
				::fprintf(fp, " Magery               Tactics(%3d:%d)\n", 
					a->Skill[TACTICS_Magery], a->tac_skillEXP[11]);
			}break;
		case PRIEST_SPELL:
			{
				::fprintf(fp, " Orison               Tactics(%3d:%d)\n", 
					a->Skill[TACTICS_Orison], a->tac_skillEXP[12]);
			}break;
		}
	}	
	else
	{
		fprintf( fp, "Weapon-Attack< %d:%s >  --> %s\n", attacktype, magicno, Magic_Ref[magicno].Han_Name,  d->Name  );
		fprintf( fp, "---%s(%3d,%3d) %02d.%02d %02d:%02d:%02d ---\n",  MapName, a->MoveSx, a->MoveSy, g_mon+1, g_day,g_hour, g_min, g_sec );
		
		fprintf(fp, " Attack(Lv:%3d/Exp:%9d/ladder:%3d/fame:%3d)\n", a->GetLevel(), a->Exp, a->LadderScore, a->fame); // CSD-030806
		fprintf(fp, " Defence(Lv:%3d/Exp:%9d)\n", d->GetLevel(), d->Exp); // CSD-030806
				
		const int ino = a->equip[ WT_WEAPON].item_no;
		CItem *ii = ItemUnit(ino);
		
		int itemkind = IK_NONE;

		if( ii )	{itemkind = ii->GetItemKind();}
		else		{itemkind = IK_NONE;}
		
		char *at = NULL;

		switch( itemkind )
		{			
			//	厘芭府 公扁....
		case IK_DUAL_BOW:		at = "DUAL_BOW";	break;//030102 lsw Dual BOW
		case IK_SHORT_BOW	:	at = "SHORT_BOW";	break;
		case IK_TWO_ARROW	:	at = "TWO_ARROW";	break;
		case IK_DUAL_ARROW	:	at = "DUAL_ARROW";	break;//030102 lsw
		case IK_LONG_BOW	:	at = "LONG_BOW";	break;
		case IK_ARROW_POINT	:	at = "ARROW_POINT";	break;
		case IK_FEATHER		:	at = "FEATHER";	break;
			// 吝厘芭府.. 
		case IK_HURL		:	at = "THROWING WEAPON"; break;
			//	窜芭府公扁..
		default             :   at = "MELEE WEAPON";    break;
		}			
		
		char temp[ FILENAME_MAX];
		
		if( ii ) 
		{
			strcpy( temp, ii->GetHanName() );
		}
		else 
		{
			strcpy( temp, " NO WEAPON " );
		}
		fprintf( fp, " Hp %4d/%4d ->  Hp %4d/%4d \n", a->Hp, a->HpMax, d->Hp, d->HpMax );
		fprintf( fp, " Mana %4d/%4d ->Mana %4d/%4d \n", a->Mana, a->ManaMax, d->Mana, d->ManaMax );
		fprintf( fp, " Hungry %4d/%4d ->Hngy %4d/%4d \n", a->Hungry, a->HungryMax, d->Hungry, d->HungryMax );
		fprintf( fp, " Ac  %3d    ->       %3d   \n", 	a->Ac, d->Ac );
		fprintf( fp, " Damage  :    %4d     \n",   damage );
		fprintf( fp, " WEAPON :  %s( %d )  \n",    temp, a->equip[ WT_WEAPON].item_no );
		fprintf( fp, " AttackType :    %s      \n",    at );
	}
//	
	const int iTacKind = a->GetTacticsKind();// == SKILL_UNKNOWN 捞搁 扁废 窍搁 救登瘤.
	switch(iTacKind)
	{
	case TACTICS_Crapple						:
		{
			::fprintf(fp, " Crapple              Tactics(%3d:%d)\n", 
				a->Skill[iTacKind], a->tac_skillEXP[0]);
		}break;
	case TACTICS_swordmanship					:
		{
			::fprintf(fp, " Swordmanship         Tactics(%3d:%d)\n", 
				a->Skill[iTacKind], a->tac_skillEXP[1]);
		}break;
	case TACTICS_Archery						:
		{
			::fprintf(fp, " Archery              Tactics(%3d:%d)\n", 
				a->Skill[iTacKind], a->tac_skillEXP[2]);
		}break;
	case TACTICS_Fencing						:
		{
			::fprintf(fp, " Fencing              Tactics(%3d:%d)\n", 
				a->Skill[iTacKind], a->tac_skillEXP[3]);
		}break;
	case TACTICS_Mace_fighting					:
		{
			::fprintf(fp, " Mace Fighting        Tactics(%3d:%d)\n", 
				a->Skill[iTacKind], a->tac_skillEXP[4]);
		}break;
	case TACTICS_Pierce							:
		{
			::fprintf(fp, " Pierce               Tactics(%3d:%d)\n", 
				a->Skill[iTacKind], a->tac_skillEXP[5]);
		}break;
	case TACTICS_Whirl							:
		{
			::fprintf(fp, " Whirl                Tactics(%3d:%d)\n", 
				a->Skill[iTacKind], a->tac_skillEXP[6]);
		}break;
	case TACTICS_Hurl							:
		{
			::fprintf(fp, " Hurl                 Tactics(%3d:%d)\n", 
				a->Skill[iTacKind], a->tac_skillEXP[7]);
		}break;
	case TACTICS_Parrying						:
		{
			::fprintf(fp, " Parrying             Tactics(%3d:%d)\n", 
				a->Skill[iTacKind], a->tac_skillEXP[8]);
		}break;
	case TACTICS_Double_Swordmanship			:
		{

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -