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

📄 op_battle.cpp

📁 国内著名网络游戏dragon的服务端完整源码 内附完整数据库结构
💻 CPP
📖 第 1 页 / 共 5 页
字号:
			::fprintf(fp, " Double Swordmanship  Tactics(%3d:%d)\n", 
				a->Skill[iTacKind], a->tac_skillEXP[9]);
		}break;
	case TACTICS_Double_MaceFighting			:
		{
			::fprintf(fp, " Double Mace Fighting Tactics(%3d:%d)\n", 
				a->Skill[iTacKind], a->tac_skillEXP[10]);
		}break;
	case TACTICS_Magery							:
		{
			::fprintf(fp, " Magery               Tactics(%3d:%d)\n", 
				a->Skill[iTacKind], a->tac_skillEXP[11]);
		}break;
	case TACTICS_Orison							:
		{
			::fprintf(fp, " Orison               Tactics(%3d:%d)\n", 
				a->Skill[iTacKind], a->tac_skillEXP[12]);
		}break;
	default:
		{
			::fprintf(fp, " TACTIC UNKNOWN \n");
		}break;
	}
	::fprintf(fp, "\n");
	fclose(fp);
}

void SaveBallancing( LPCHARLIST a, LPCHARLIST d, int magicno, int damage, int mana, int attack, int attacktype, int tac  )
{   //< CSD-TW-030622
	if (a->IsNpc())
	{
		return;
	}

	a->balancingtest --;
	if( a->balancingtest > 0 )
	{
		::SaveBallancing2( a, d, magicno, damage, mana, attack, attacktype, tac  );
		return;
	}
	a->balancingtest = 100;
	
	string strPath;

	if (!g_pLogManager->GetLogPath(LT_BATTLE, strPath))
	{
		return;
	}
	//< CSD-040224
	FILE* fp = fopen(VA("%s/%s.txt", strPath.c_str(), a->Name), "at+");

	if (fp == NULL)
	{
		fp = fopen(VA("%s/%s.txt", strPath.c_str(), connections[a->GetServerID()].id), "at+");

		if (fp == NULL)
		{
			return;
		}
	}
	//> CSD-040224
	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, " Reserved Point %3d -> Reserved Point %3d\n", a->GetReservedPoint(), d->GetReservedPoint());
		fprintf( fp, " Str   %3d    ->  Str   %3d                Hp %4d/%4d ->  Hp %4d/%4d \n", a->Str, d->Str, a->Hp, a->HpMax, d->Hp, d->HpMax );
		fprintf( fp, " Con   %3d    ->  Con   %3d              Mana %4d/%4d ->Mana %4d/%4d \n", a->Con, d->Con, a->Mana, a->ManaMax, d->Mana, d->ManaMax );  
		fprintf( fp, " Dex   %3d    ->  Dex   %3d            Hungry %4d/%4d ->Hngy %4d/%4d \n", a->Dex, d->Dex, a->Hungry, a->HungryMax, d->Hungry, d->HungryMax );
		fprintf( fp, " Wis   %3d    ->  Wis   %3d                                   \n", 	a->Wis, d->Wis );
		fprintf( fp, " Int   %3d    ->  Int   %3d                 Damage : %4d        \n", 	a->Int, d->Int, damage );
		fprintf( fp, " MoveP %3d    ->  MoveP %3d             Used Mana: %4d        \n",    a->MoveP, d->MoveP, mana );
		fprintf( fp, " Char  %3d    ->  Char  %3d                                   \n",    a->Char , d->Char );
		fprintf( fp, " Endu  %3d    ->  Endu  %3d                                   \n",    a->Endu , d->Endu ); 
		fprintf( fp, " Moral %3d    ->  Moral %3d                                   \n",    a->Moral, d->Moral); 
		fprintf( fp, " Luck  %3d    ->  Luck  %3d                                   \n",    a->Luck , d->Luck ); 
		fprintf( fp, " wsps  %3d    ->  wsps  %3d                                   \n",    a->wsps , d->wsps ); 
		
		fprintf( fp, "规绢磊狼 付过历亲摹 \n" );
		fprintf(fp, "Resist Poison  %3d\n", d->GetBasicResist(RT_POISON));//030227 lsw
		fprintf(fp, "Resist Curse   %3d\n", d->GetBasicResist(RT_CURSE));
		fprintf(fp, "Resist Fire    %3d\n", d->GetBasicResist(RT_FIRE));
		fprintf(fp, "Resist Ice     %3d\n", d->GetBasicResist(RT_ICE));
		fprintf(fp, "Resist Elect   %3d\n", d->GetBasicResist(RT_ELECT));
		fprintf(fp, "Resist Holy    %3d\n", d->GetBasicResist(RT_HOLY));
	}	
	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
		
		int itemkind;
		char *at;
		const int ino = a->equip[ WT_WEAPON].item_no;
		CItem *ii = ItemUnit( ino/1000, ino%1000);
		
		if( ii )	itemkind = ii->GetItemKind();
		else		itemkind = IK_NONE;
		
		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, " Reserved Point %3d -> Reserved Point %3d\n", a->GetReservedPoint(), d->GetReservedPoint());
		fprintf( fp, " Str   %3d	->  Str   %3d                Hp %4d/%4d ->  Hp %4d/%4d \n", a->Str, d->Str, a->Hp, a->HpMax, d->Hp, d->HpMax );
		fprintf( fp, " Con   %3d	->  Con   %3d              Mana %4d/%4d ->Mana %4d/%4d \n", a->Con, d->Con, a->Mana, a->ManaMax, d->Mana, d->ManaMax );
		fprintf( fp, " Dex   %3d	->  Dex   %3d            Hungry %4d/%4d ->Hngy %4d/%4d \n", a->Dex, d->Dex, a->Hungry, a->HungryMax, d->Hungry, d->HungryMax );
		fprintf( fp, " Wis   %3d	->  Wis   %3d                Ac  %3d    ->       %3d   \n", 	a->Wis, d->Wis, a->Ac, d->Ac );
		fprintf( fp, " Int   %3d	->  Int   %3d                                   \n",    a->Int, d->Int);
		fprintf( fp, " MoveP %3d	->  MoveP %3d              Damage  :    %4d     \n",    a->MoveP, d->MoveP, damage );
		fprintf( fp, " Char  %3d	->  Char  %3d             WEAPON :  %s( %d )  \n",    a->Char , d->Char,  temp, a->equip[ WT_WEAPON].item_no );
		fprintf( fp, " Endu  %3d	->  Endu  %3d           AttackType :    %s      \n",    a->Endu , d->Endu,  at );
		fprintf( fp, " Moral %3d	->  Moral %3d                                   \n",    a->Moral, d->Moral );
		fprintf( fp, " Luck  %3d	->  Luck  %3d                                   \n",    a->Luck , d->Luck );
		fprintf( fp, " wsps  %3d	->  wsps  %3d                                   \n",    a->wsps , d->wsps );
	}
	
	fprintf(fp, " [Tactic Info]\n");
	fprintf(fp, " Crapple              Tactics(%3d:%d)\n", a->Skill[TACTICS_Crapple], a->tac_skillEXP[0]);
	fprintf(fp, " Swordmanship         Tactics(%3d:%d)\n", a->Skill[TACTICS_swordmanship], a->tac_skillEXP[1]);
	fprintf(fp, " Archery              Tactics(%3d:%d)\n", a->Skill[TACTICS_Archery], a->tac_skillEXP[2]);
	fprintf(fp, " Fencing              Tactics(%3d:%d)\n", a->Skill[TACTICS_Fencing], a->tac_skillEXP[3]);
	fprintf(fp, " Mace Fighting        Tactics(%3d:%d)\n", a->Skill[TACTICS_Mace_fighting], a->tac_skillEXP[4]);
	fprintf(fp, " Pierce               Tactics(%3d:%d)\n", a->Skill[TACTICS_Pierce], a->tac_skillEXP[5]);
	fprintf(fp, " Whirl                Tactics(%3d:%d)\n", a->Skill[TACTICS_Whirl], a->tac_skillEXP[6]);
	fprintf(fp, " Hurl                 Tactics(%3d:%d)\n", a->Skill[TACTICS_Hurl], a->tac_skillEXP[7]);
	fprintf(fp, " Parrying             Tactics(%3d:%d)\n", a->Skill[TACTICS_Parrying], a->tac_skillEXP[8]);
	fprintf(fp, " Double Swordmanship  Tactics(%3d:%d)\n", a->Skill[TACTICS_Double_Swordmanship], a->tac_skillEXP[9]);
	fprintf(fp, " Double Mace Fighting Tactics(%3d:%d)\n", a->Skill[TACTICS_Double_MaceFighting], a->tac_skillEXP[10]);
	fprintf(fp, " Magery               Tactics(%3d:%d)\n", a->Skill[TACTICS_Magery], a->tac_skillEXP[11]);
	fprintf(fp, " Orison               Tactics(%3d:%d)\n", a->Skill[TACTICS_Orison], a->tac_skillEXP[12]);

	fprintf(fp, " [NK Info]\n");
	fprintf(fp, "N_NEUTRAL  = %d	N_NONSTER	= %d	N_VYSEUS = %d\n", a->nk[N_NEUTRAL], a->nk[N_NONSTER], a->nk[N_VYSEUS]);
	fprintf(fp, "N_ZYPERN	= %d	N_HEGEMONIA	= %d	N_YILSE	 =%d\n", a->nk[N_ZYPERN	], a->nk[N_HEGEMONIA], a->nk[N_YILSE]);
	
	fprintf(fp, " [Party Info]\n");
	
	for (int i = 0; i < MAX_PARTY_MEMBER; ++i)
	{
		if (a->party[i].On && a->party[i].Name)
		{ 
			fprintf(fp, " [%d]%20s%s", i, a->party[i].Name, (i==2)?"\n":"  ");
		}
	}

	fprintf(fp, "\n");
	fclose(fp);
}	//> CSD-TW-030622

void SaveLevelUp(LPCHARLIST pTarget)
{	//< CSD-TW-030622
	string strPath;

	if (!g_pLogManager->GetLogPath(LT_LEVEL_UP, strPath))
	{
		return;
	}
	//< CSD-040224
	FILE* fp = fopen(VA("%s/%s.txt", strPath.c_str(), pTarget->Name), "at+");

	if (fp == NULL)
	{
		fp = fopen(VA("%s/%s.txt", strPath.c_str(), connections[pTarget->GetServerID()].id), "at+");

		if (fp == NULL)
		{
			return;
		}
	}
	//> CSD-040224
	fprintf(fp, " %04d.%02d.%02d %02d:%02d:%02d\n", g_year, g_mon + 1, g_day, g_hour, g_min, g_sec); // CSD-040202

	fprintf(fp, " [Ability Info]\n");
	fprintf(fp, " Level %3d     Exp   %3d     Step  %3d\n", pTarget->GetLevel(), pTarget->Exp, pTarget->GetExperienceStep()); // CSD-030806
	fprintf(fp, " Class %3d     Step  %3d     Dual  %3d\n", pTarget->Class, pTarget->GetClassStep(), pTarget->GetDualClass());
	fprintf(fp, " Str   %3d     Con   %3d     Dex   %3d\n", pTarget->Str, pTarget->Con, pTarget->Dex);
	fprintf(fp, " Wis   %3d     Int   %3d     MoveP %3d\n", pTarget->Wis, pTarget->Int, pTarget->MoveP);
	fprintf(fp, " Char  %3d     Endu  %3d     Moral %3d\n", pTarget->Char, pTarget->Endu, pTarget->Moral);
	fprintf(fp, " Luck  %3d     wsps  %3d     Reserved Point %3d\n", pTarget->Luck, pTarget->wsps, pTarget->GetReservedPoint());
	
	fprintf(fp, " [Tactic Info]\n");
	fprintf(fp, " Crapple              Tactics(%3d:%d)\n", pTarget->Skill[TACTICS_Crapple], pTarget->tac_skillEXP[0]);
	fprintf(fp, " Swordmanship         Tactics(%3d:%d)\n", pTarget->Skill[TACTICS_swordmanship], pTarget->tac_skillEXP[1]);
	fprintf(fp, " Archery              Tactics(%3d:%d)\n", pTarget->Skill[TACTICS_Archery], pTarget->tac_skillEXP[2]);
	fprintf(fp, " Fencing              Tactics(%3d:%d)\n", pTarget->Skill[TACTICS_Fencing], pTarget->tac_skillEXP[3]);
	fprintf(fp, " Mace Fighting        Tactics(%3d:%d)\n", pTarget->Skill[TACTICS_Mace_fighting], pTarget->tac_skillEXP[4]);
	fprintf(fp, " Pierce               Tactics(%3d:%d)\n", pTarget->Skill[TACTICS_Pierce], pTarget->tac_skillEXP[5]);
	fprintf(fp, " Whirl                Tactics(%3d:%d)\n", pTarget->Skill[TACTICS_Whirl], pTarget->tac_skillEXP[6]);
	fprintf(fp, " Hurl                 Tactics(%3d:%d)\n", pTarget->Skill[TACTICS_Hurl], pTarget->tac_skillEXP[7]);
	fprintf(fp, " Parrying             Tactics(%3d:%d)\n", pTarget->Skill[TACTICS_Parrying], pTarget->tac_skillEXP[8]);
	fprintf(fp, " Double Swordmanship  Tactics(%3d:%d)\n", pTarget->Skill[TACTICS_Double_Swordmanship], pTarget->tac_skillEXP[9]);
	fprintf(fp, " Double Mace Fighting Tactics(%3d:%d)\n", pTarget->Skill[TACTICS_Double_MaceFighting], pTarget->tac_skillEXP[10]);
	fprintf(fp, " Magery               Tactics(%3d:%d)\n", pTarget->Skill[TACTICS_Magery], pTarget->tac_skillEXP[11]);
	fprintf(fp, " Orison               Tactics(%3d:%d)\n", pTarget->Skill[TACTICS_Orison], pTarget->tac_skillEXP[12]);
	
	fprintf(fp, " [Resist Info]\n");
	fprintf(fp, " Resist Poison  %3d\n", pTarget->GetBasicResist(RT_POISON));//030227 lsw
	fprintf(fp, " Resist Curse   %3d\n", pTarget->GetBasicResist(RT_CURSE));
	fprintf(fp, " Resist Fire    %3d\n", pTarget->GetBasicResist(RT_FIRE));
	fprintf(fp, " Resist Ice     %3d\n", pTarget->GetBasicResist(RT_ICE));
	fprintf(fp, " Resist Elect   %3d\n", pTarget->GetBasicResist(RT_ELECT));
	fprintf(fp, " Resist Holy    %3d\n", pTarget->GetBasicResist(RT_HOLY));
	
	fprintf(fp, " [Combat Skill Info]\n");
	fprintf(fp, " Lightning Boom    %3d  Thunder Blow      %3d\n", pTarget->GetCombatLevel(LIGHTNING_BOOM), pTarget->GetCombatLevel(THUNDER_BLOW));
	fprintf(fp, " Lightning Shock   %3d  Thunder Strike    %3d\n", pTarget->GetCombatLevel(LIGHTNING_SHOCK), pTarget->GetCombatLevel(THUNDER_STRIKE));
	fprintf(fp, " Lightning Shield  %3d  Lightning Extreme %3d\n", pTarget->GetCombatLevel(LIGHTNING_SHIELD), pTarget->GetCombatLevel(LIGHTNING_EXTREME));
	fprintf(fp, " Blood Earth       %3d  Ground Attack     %3d\n", pTarget->GetCombatLevel(BLOOD_EARTH), pTarget->GetCombatLevel(GROUND_ATTACK));
	fprintf(fp, " Blood Will        %3d  Stone Armor       %3d\n", pTarget->GetCombatLevel(BLOOD_WILL), pTarget->GetCombatLevel(STONE_ARMOR));
	fprintf(fp, " Simunian Bosom    %3d  Earth Extreme     %3d\n", pTarget->GetCombatLevel(SIMUNIAN_BOSOM), pTarget->GetCombatLevel(EARTH_EXTREME));
	fprintf(fp, " Sword N'Roses     %3d  Multiple Fire     %3d\n", pTarget->GetCombatLevel(SWORD_N_ROSES), pTarget->GetCombatLevel(MULTIPLE_FIRE));
	fprintf(fp, " Fleet Missile     %3d  Converting Armor  %3d\n", pTarget->GetCombatLevel(FLEET_MISSILE), pTarget->GetCombatLevel(CONVERTING_ARMOR));
	fprintf(fp, " Burning Bloody	%3d  Fire Extreme      %3d\n", pTarget->GetCombatLevel(BURNING_BLOODY), pTarget->GetCombatLevel(FIRE_EXTREME)); // 030415 kyo 
	fprintf(fp, " Poisoning Nova    %3d  Cherroy Shade     %3d\n", pTarget->GetCombatLevel(POISONING_NOVA), pTarget->GetCombatLevel(CHERROY_SHADE));
	fprintf(fp, " Dark Blade        %3d  Tybern Gift       %3d\n", pTarget->GetCombatLevel(DARK_BLADE), pTarget->GetCombatLevel(TYBERN_GIFT));
	fprintf(fp, " AcuquireDark      %3d  Dark Extreme      %3d\n", pTarget->GetCombatLevel(ACUQUIRE_DARK), pTarget->GetCombatLevel(DARK_EXTREME)); // 030415 kyo 
	fprintf(fp, " Icing Blast       %3d  Critical Hiding   %3d\n", pTarget->GetCombatLevel(ICING_BLAST), pTarget->GetCombatLevel(CRITICAL_HIDING));
	fprintf(fp, " Shark Missile     %3d  Horn Of Iceberg   %3d\n", pTarget->GetCombatLevel(SHARK_MISSILE), pTarget->GetCombatLevel(HORN_OF_ICEBERG));
	fprintf(fp, " Ice Shield        %3d  Ice Extreme       %3d\n", pTarget->GetCombatLevel(ICE_SHIELD), pTarget->GetCombatLevel(ICE_EXTREME));
	fprintf(fp, " Charging          %3d  Double Attack     %3d\n", pTarget->GetCombatLevel(CHARGING), pTarget->GetCombatLevel(DOUBLE_ATTACK));
	fprintf(fp, " Whilwind          %3d  Twister           %3d\n", pTarget->GetCombatLevel(WHILWIND), pTarget->GetCombatLevel(TWISTER));
	fprintf(fp, " Gust              %3d  Wind Extreme      %3d\n", pTarget->GetCombatLevel(GUST), pTarget->GetCombatLevel(WIND_EXTREME));
	fprintf(fp, " Combat Skill Point %3d \n", pTarget->GetCombatPoint());
	
	fprintf(fp, " [NK Info]\n");
	fprintf(fp, " N_NEUTRAL %d	N_NONSTER   %d	N_VYSEUS %d\n", pTarget->nk[N_NEUTRAL], pTarget->nk[N_NONSTER], pTarget->nk[N_VYSEUS]);
	fprintf(fp, " N_ZYPERN	%d	N_HEGEMONIA	%d	N_YILSE  %d\n", pTarget->nk[N_ZYPERN], pTarget->nk[N_HEGEMONIA], pTarget->nk[N_YILSE]);
	
	fprintf(fp, " [Party Info]\n");
	for (int i = 0; i < MAX_PARTY_MEMBER; ++i)
	{
		if (pTarget->party[i].On && pTarget->party[i].Name)
		{ 
			fprintf(fp, " [%d]%20s%s", i, pTarget->party[i].Name, (i==2)?"\n":"  ");
		}
	}
	
	fprintf(fp, "\n");
	fclose(fp);
}	//> CSD-TW-030622
//----------------------------------------------------------------------------
// 010502 YGI
// 林巩阑 熃菌阑 版快
// acer5
void Recv_CMD_PLEASE_GIVE_LIFE( int cn, int type, int alive_word_type  )
{	
	LPCHARLIST ch = CheckServerId( cn );
	if( !ch ) return;
	
	bool alive_flag = false;
	
	if( type == 0 )		// 老馆 蜡历
	{
		if( ch->viewtype != VIEWTYPE_GHOST_ ) return; //蜡飞鸥涝档 酒聪搁辑..
		if( g_stop_please_give_life ) return;		// 脚傈狼 扁瓷阑 阜阑荐 乐促. ( 登混酒聪绰 )..
		if( ch->reporter_mode ) return;		// 扁磊葛靛老版快浚 秦寸绝促.		// 011128 YGI
		
		int ret = g_AliveMap.CheckAlive( ch->MoveSx, ch->MoveSy, MapNumber, alive_word_type );
		if( ret < 0 ) return;		// 混酒 朝荐 乐绰 镑捞 酒聪促.
		
		if( ret == 100 )		// 混妨 霖促.
		{
			SkillMgr.CharacterToAlive(ch);// 混妨霖促.//020501 lsw
		}
		else		// 混酒唱绰 镑捞变 窍瘤父 林巩捞 撇啡促.
		{
			char ret_alive_word_type = ret;
			SendPacketDefault( CMD_ALIVE_FAIL_RESULT, (char*)&ret_alive_word_type, sizeof( char), cn );
		}
	}
	else
	{
		//ACER5
		CrackMgr.SendHackingUser( cn, USE_GM_TOOL, "CMD_GIVE_LIFE" );
		SkillMgr.CharacterToAlive(ch, 1);// 混妨霖促.//020501 lsw
	}
	return;
}

///////////////////////// 0726 lkh 眠啊 ///////////////////////////
void	TameNpcAI( LPCHARLIST master )			//林牢俊霸 加秦 乐绰 抛怪NPC狼 青悼阑 力绢
{
	LPCHARLIST	tame_Char=NULL, target	= NULL;
	int			distance, distance_Min	= 1000;
	
	for( int i = NPC_LIST_START ; i < MAX_NPC_LIST ; i ++ )	//怕怪茄 NPC甫 茫绰促.
	{
		if (NPCList[i].bAlive == ALIVE_ && NPCList[i].IsTamedNpc())
			if( NPCList[i].HostName[0] )
				if( !strcmp(NPCList[i].HostName, master->Name ) )
				{
					tame_Char = &NPCList[i];
					break;
				}
	}
	if(!tame_Char)	return;						//林牢捞 抛怪茄 NPC啊 绝绰 版快
	
	for( int j = NPC_LIST_START ; j < MAX_NPC_LIST ; j ++ )	//傍拜且 措惑阑 茫绰促.
	{
		if( NPCList[j].bAlive == ALIVE_ && tame_Char!=&NPCList[j] )
		{
			distance = sqrt( pow( (master->X-NPCList[j].X),2 ) + pow( (master->Y-NPCList[j].Y),2 ) );
			if(distance<distance_Min)
			{
				distance_Min = distance;
				target = &NPCList[j];
			}
		}
	}
	if(!target)		return;						//傍拜且 措惑捞 绝促.
	
	if( target->SprType == SPRITETYPE_NPC ) 
	{
		tame_Char->targetid = target->GetServerID() + 10000;
		SendNPC_Parameter( tame_Char->GetServerID(), NPC_PARAMETER_TARGETID, tame_Char->targetid );
	}
	else 
	{
		tame_Char->targetid = target->GetServerID();
		SendNPC_Parameter( tame_Char->GetServerID(), NPC_PARAMETER_TARGETID, tame_Char->targetid );
	}
	
	tame_Char->tame_cmd = LC_TAME_ATTACK;
	SendNPC_Parameter( tame_Char->GetServerID(), NPC_PARAMETER_TAME_CMD, LC_TAME_ATTACK );
	strcpy( tame_Char->TargetName, target->Name );
	SendTameResult( master->GetServerID(), 5 );	//TAME_ATTACK
	SendNPC_StringParameter( tame_Char->GetServerID(), NPC_PARAMETER_TARGETNAME, tame_Char->TargetName );
}
// PK甫 且荐 乐绰 Flag甫 焊辰促.
//void SendStartGoodBad( int id )
void SendNK( int id, int nk )
{			
	t_packet p;
	
	if( id >= 10000 ) return;
	
	p.h.header.type = CMD_START_GOODBAD;
	p.u.start_goodbad.id		= id;
	p.u.start_goodbad.nk3       = nk;
	p.h.header.size = sizeof( t_start_goodbad );
	
	QueuePacket( connections, id, &p, 1 );
	CastMe2Other( id, &p );
}			

void SendNK( int id, int nk3, int nk4, int nk6 )
{			
	t_packet p;
	
	if( id >= 10000 ) return;
	
	p.h.header.type = CMD_START_GOODBAD;
	p.u.start_goodbad.id		= id;
	p.u.start_goodbad.nk3        = nk3;
	p.u.start_goodbad.nk4        = nk4;
	p.u.start_goodbad.nk6        = nk6;
	p.h.header.size = sizeof( t_start_goodbad );
	
	QueuePacket( connections, id, &p, 1 );
	CastMe2Other( id, &p );
}

void SaveCharacterBin( char *filename, CHARLIST *ch )
{
	FILE *fp;
	char full_name[MAX_PATH];
	sprintf( full_name, "%d_%d_%d_%d_%s.bin", g_mon+1, g_day, g_hour, g_min, filename );
	fp = fopen( full_name, "wb" );
	if( !fp ) return;
	
	fwrite( ch, sizeof(CHARLIST), 1, fp );
	fclose( fp );
}

⌨️ 快捷键说明

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