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

📄 battlemgr.cpp

📁 网络游戏龙族 完整的登陆器 C++ 源代码
💻 CPP
📖 第 1 页 / 共 5 页
字号:
	if (!IsMagic(nMagic))
	{
		OUTPUT(MK_INFORMATION, lan->OutputMessage(1, 29));
		return;
	}	
	// 付过 矫傈 Packet 傈价
	t_packet packet;
	packet.h.header.type = CMD_MAGIC_CASTING;
	packet.h.header.size = sizeof(t_client_magic_casting);
	packet.u.magic.client_magic_casting.nMagic = nMagic;
	::QueuePacket(&packet, 1);
}	//> CSD-TW-030606

void CBattleMgr::SendMagicExecute(BYTE nMagic, LPCHARACTER pTarget, int nX, int nY)
{	//< CSD-TW-030606
	if (pTarget == NULL)  pTarget = Hero;
	// 付过 荤侩饶 5檬 捞郴俊绰 促矫 某胶泼 且荐 绝档废 汲沥
	Hero->castStartingTime = g_ClientTime + 4000;
	// 捞悼 厘家 付过牢 版快 捞悼啊瓷 咯何 八荤
	switch (nMagic)
	{ 
    case PHASING:
    case MEMORIZING_LOCATION:
    case TELEPORT:
    case MULTI_PORT:
    case TOWN_PORTAL:
    case VAMPIRE_DODGE:
		{
			if (pTarget->sprno != 50 && !::IsMovable(nX>>5, nY>>5))
			{
				OUTPUT(MK_INFORMATION, lan->OutputMessage(1, 26));
				return;
			}
			
			break;
		}
	} 
	// 付过 楷加 荤侩捞 力茄
	int nOffset = 0;
	
	switch (nMagic)
	{
	case AUTHORITY_CHARISNUMEN:
		{
			nOffset = 2000;
			break;
		}
	default:
		{
			nOffset = 800;
			break;
		}
	}
	
	if (Hero->condition&CON_FROZEN)  
	{
		nOffset *= 2;
	}
	
	if (IsDelay(nOffset))
	{	// 付过 矫累 Packet 傈价
		t_packet packet;
		packet.h.header.type = CMD_MAGIC_EXECUTE;
		packet.h.header.size = sizeof(t_client_magic_execute);
		packet.u.magic.client_magic_execute.nMagic = nMagic;
		packet.u.magic.client_magic_execute.idTarget = WORD(pTarget->id);
		packet.u.magic.client_magic_execute.nX = nX;
		packet.u.magic.client_magic_execute.nY = nY;
		::QueuePacket(&packet, 1); 
	}
}	//> CSD-TW-030606

void CBattleMgr::SendMagicResult(WORD wdEffect, LPCHARACTER pCaster, WORD idTarget, int nX, int nY)
{	//< CSD-031007
	if (!IsIgnoreBattle())
	{	// 霸烙芒捞 劝己拳 登瘤 臼栏搁 付过 搬苞甫 焊郴瘤 臼澜
		return;
	}

	LPCHARACTER pTarget = ::ReturnCharacterPoint(idTarget);
	if (pCaster == NULL || pTarget == NULL)  return;
	
	t_packet packet;
	
	if (pCaster == Hero)
	{
		switch (wdEffect)
		{	//< CSD-031014
		case THROW_ARROW:
		case THROW_KNIFE:
		case THROW_FIRE_ARROW:
		case THROW_ICE_KNIFE:
		case THROW_SNOW_BALL:
		case THROW_WATER_BALL: 
		case THROW_BIG_GULP:
		case MULTIPLE_FIRE:
		case FLEET_MISSILE:
		case CONVERTING_ARMOR:
		case FIRE_EXTREME:
		case ICING_BLAST: 
		case SHARK_MISSILE:
		case ICE_EXTREME:
			{
				packet.h.header.type = CMD_THROW_RESULT;
				packet.h.header.size = sizeof(t_client_throw_result);
				packet.u.strike.client_throw_result.idTarget = idTarget;
				packet.u.strike.client_throw_result.nX = nX;
				packet.u.strike.client_throw_result.nY = nY;
				packet.u.strike.client_throw_result.bWanted = pTarget->hunter_target;
				break;
			}
		case ITEM_EFFECT_FIRE:
		case ITEM_EFFECT_ICE:
		case ITEM_EFFECT_LIGHTNING:
			{
				packet.h.header.type = CMD_EFFECT_RESULT;
				packet.h.header.size = sizeof(t_client_effect_result);
				packet.u.strike.client_effect_result.wdEffect = wdEffect;
				packet.u.strike.client_effect_result.idTarget = idTarget;
				packet.u.strike.client_effect_result.nX = nX;
				packet.u.strike.client_effect_result.nY = nY;
				packet.u.strike.client_effect_result.bWanted = pTarget->hunter_target;
				break;
			}
		default:
			{
				switch (GetIndex(wdEffect))
				{
				case 1:
					{
						switch (wdEffect)
						{
						case SCORCHER:
						case FLAME_PILLAR:
						case FLAME_POUR:
						case ICE_BREATH2: 	// 030415 kyo
							{
								if (!pTarget->bCrash)
								{
									pTarget->bCrash = true;
									break;
								}
								
								return;
							}
						}
						
						packet.h.header.type = CMD_MAGIC_RESULT;
						packet.h.header.size = sizeof(t_client_magic_result);
						packet.u.magic.client_magic_result.nMagic = static_cast<BYTE>(wdEffect);
						packet.u.magic.client_magic_result.idTarget = idTarget;
						packet.u.magic.client_magic_result.nX = nX;
						packet.u.magic.client_magic_result.nY = nY;
						packet.u.magic.client_magic_result.bWanted = pTarget->hunter_target;
						break;          
					}
				case 2:
					{
						switch (wdEffect)
						{	
						case FIRE_WALL:
						case ICE_WALL:
						case BLOOD_EARTH:
							{
								if (!pTarget->bCrash)
								{
									pTarget->bCrash = true;
									break;
								}
								
								return;
							}
						}
						
						packet.h.header.type = CMD_COMBAT_RESULT;
						packet.h.header.size = sizeof(t_client_combat_result);
						packet.u.combat.client_combat_result.nSkill = static_cast<BYTE>(wdEffect);
						packet.u.combat.client_combat_result.idTarget = idTarget;
						packet.u.combat.client_combat_result.nX = nX;
						packet.u.combat.client_combat_result.nY = nY;
						packet.u.combat.client_combat_result.bWanted = pTarget->hunter_target;
						break;
					}
				}
				
				break;
			} 
		}	//> CSD-031014
		
		if (::IsApplyPK(wdEffect))
		{
			::CheckNPCPk(Hero->id, idTarget);
		}

		::QueuePacket(&packet, 1);
	}
	else
	{	
		switch (wdEffect)
		{
		case SCORCHER:
		case FLAME_PILLAR:
		case FLAME_POUR:
		case ICE_BREATH2: 	// 030415 kyo
			{
				if (!pTarget->bCrash)
				{
					pTarget->bCrash = true;  
				}
				
				break;
			}
		}
	}
	
	switch (pCaster->sprno)
	{
    case 0:
    case 1:
		{
			break;
		}
    default:
		{
			if (pTarget == Hero)
			{
				packet.h.header.type = CMD_MAGIC_RESULT_D;
				packet.h.header.size = sizeof(t_magic_result_d);
				packet.u.magic.magic_result_d.nMagic  = static_cast<BYTE>(wdEffect);
				packet.u.magic.magic_result_d.idCaster = WORD(pCaster->id);
				packet.u.magic.magic_result_d.idTarget = idTarget;
				packet.u.magic.magic_result_d.nX = nX;
				packet.u.magic.magic_result_d.nY = nY;
				::QueuePacket(&packet, 1);
			}
			
			break;
		}
	}
}	//> CSD-031007

void CBattleMgr::SendCombatClear()
{	//< CSD-TW-030606
	t_packet packet;
	packet.h.header.type = CMD_COMBAT_CLEAR;
	packet.h.header.size = sizeof(t_client_combat_clear);
	packet.u.combat.client_combat_clear.nType = 0;
	::QueuePacket(&packet, 1);
}	//> CSD-TW-030606

void CBattleMgr::SendCombatObtain(LPCHARACTER pMaster, BYTE nPara, BYTE nX, BYTE nY, BYTE nPoint)
{
	POS pos;
	// 傈捧胶懦 器牢磐 裙垫 酒捞袍 困摹 备窍扁
	::SetItemPos(INV, nPara, nY, nX, &pos);
	// 傈捧胶懦 器牢磐 裙垫 酒捞袍 犬牢
	ItemAttr& rItemAttr = InvItemAttr[nPara][nY][nX];
	
	if (rItemAttr.item_no == 3105)
	{ // Packet 傈价
		t_packet packet;
		packet.h.header.type = CMD_COMBAT_OBTAIN;
		packet.h.header.size = sizeof(t_client_combat_obtain);
		packet.u.combat.client_combat_obtain.idMaster = WORD(pMaster->id);
		packet.u.combat.client_combat_obtain.nPara = nPara;
		packet.u.combat.client_combat_obtain.nPosX = nX;
		packet.u.combat.client_combat_obtain.nPosY = nY;
		packet.u.combat.client_combat_obtain.nPoint = nPoint;
		::QueuePacket(&packet, 1);  
	} 
}

void CBattleMgr::SendCombatRequest(LPCHARACTER pMaster)
{
	if (pMaster == NULL)  return;
	// Packet 傈价
	t_packet packet;
	packet.h.header.type = CMD_COMBAT_REQUEST;
	packet.h.header.size = sizeof(t_client_combat_request);
	packet.u.combat.client_combat_request.idMaster = WORD(pMaster->id);
	::QueuePacket(&packet, 1);
}

void CBattleMgr::SendCombatLearn(BYTE nCombat, LPCHARACTER pMaster)
{
	if (pMaster == NULL)  return;  
	// Packet 傈价
	t_packet packet;
	packet.h.header.type = CMD_COMBAT_LEARN;
	packet.h.header.size = sizeof(t_client_combat_learn);
	packet.u.combat.client_combat_learn.idMaster = WORD(pMaster->id);
	packet.u.combat.client_combat_learn.nSkill = nCombat;
	packet.u.combat.client_combat_learn.nPoint = 1;
	::QueuePacket(&packet, 1);
}

void CBattleMgr::SendCombatSelect(BYTE nCombat)
{	//< CSD-TW-030623 : 傈捧 胶懦 荤侩 啊瓷荐  檬扁拳
	if (!::TimeCheck(m_dwSwitchDelay))
	{
		OUTPUT(MK_INFORMATION, lan->OutputMessage(1, 69));
		return;
	}
	else
	{
		m_dwSwitchDelay = g_ClientTime + 1000;
	}
	// 某胶泼悼救俊绰 急琶且荐 绝澜 
	if (!::TimeCheck(Hero->end_Casting))
	{
		OUTPUT(MK_INFORMATION, lan->OutputMessage(1, 69));
		return;
	}
	// 焊炼拌凯苞 焊龋拌凯狼 付过荤侩 饶 老沥矫埃 饶 傈捧胶懦 荤侩 阂啊肺 汲沥
	if (!::TimeCheck(Hero->continue_RunMagic))
	{
		OUTPUT(MK_INFORMATION, lan->OutputMessage(1, 69));
		return;
	}
	// 捞傈 付过 荤侩饶 5檬 版苞 饶 促矫 傈捧胶懦 啊瓷
	if (!::TimeCheck(Hero->castStartingTime))
	{
		OUTPUT(MK_INFORMATION, lan->OutputMessage(1, 69));
		return;
	}

	LPCHARACTER pCaster = ::ReturnCharacterPoint(Hero->id);
	if (pCaster == NULL)  return;
	// 瘤楷矫埃 檬扁拳
	ClearDelay();
	// 傈捧 胶懦 荤侩 啊瓷荐  檬扁拳
	if (!IsCombat(nCombat))
	{
		OUTPUT(MK_INFORMATION, lan->OutputMessage(1, 61));
		return;
	}	
	// Packet 傈价
	t_packet packet;
	packet.h.header.type = CMD_COMBAT_SELECT;
	packet.h.header.size = sizeof(t_client_combat_select);
	packet.u.combat.client_combat_select.nCombat = nCombat;
	::QueuePacket(&packet, 1);
}	//> CSD-TW-030623

void CBattleMgr::SendCombatAttack(BYTE nCombat, LPCHARACTER pTarget, int nX, int nY)
{	//< CSD-TW-030623
	if (!::TimeCheck(m_dwSwitchDelay))
	{
		OUTPUT(MK_INFORMATION, lan->OutputMessage(1, 69));
		return;
	}
	else
	{
		m_dwSwitchDelay = g_ClientTime + 1000;
	}

	CCombatSys* pCombat = (CCombatSys*)GetBattle(2);
	// 傈捧胶懦 楷加 荤侩 八荤
	int nOffset = pCombat->GetCastContinue(nCombat)*1000;
	
	if (Hero->condition&CON_FROZEN)  
	{
		nOffset *= 2;
	}
    
	if (Hero->continue_RunMagic > g_ClientTime)
	{
		OUTPUT(MK_INFORMATION, lan->OutputMessage(1, 69));
		return;
	}
	// 捞傈 付过 荤侩饶 5檬 版苞 饶 促矫 傈捧胶懦 啊瓷
	if(g_ClientTime < Hero->castStartingTime)		
	{
		OUTPUT(MK_INFORMATION, lan->OutputMessage(1, 69));
		return;
	}
	
	if (Hero->continue_Time > g_ClientTime)
	{
		OUTPUT(MK_INFORMATION, lan->OutputMessage(1, 69));
		return;
	}
	
	if (!IsDelay(nOffset))
	{
		OUTPUT(MK_INFORMATION, lan->OutputMessage(1, 69));
		return;
	}
	
	if (pCombat->IsEnable(nCombat))
	{ 
		if (pTarget == NULL)  
		{
			pTarget = Hero;
		}
		
		if (nCombat == CHARGING)
		{
			::SendModifyPosition(Hero);
		}
		// 付过 矫累 Packet 傈价
		t_packet packet;
		packet.h.header.type = CMD_COMBAT_ATTACK;
		packet.h.header.size = sizeof(t_client_combat_attack);
		packet.u.combat.client_combat_attack.nSkill = nCombat;
		packet.u.combat.client_combat_attack.idTarget = WORD(pTarget->id);
		packet.u.combat.client_combat_attack.nX = nX;
		packet.u.combat.client_combat_attack.nY = nY;
		::QueuePacket(&packet, 1);
	}
}	//> CSD-TW-030623

void CBattleMgr::SendCombatResult(BYTE nCombat, LPCHARACTER pCaster, LPCHARACTER pTarget, int nX, int nY)
{
	if (pCaster == Hero)
	{
		t_packet packet;
		packet.h.header.type = CMD_COMBAT_RESULT;
		packet.h.header.size = sizeof(t_client_combat_result);
		packet.u.combat.client_combat_result.nSkill = nCombat;
		packet.u.combat.client_combat_result.idTarget = WORD(pTarget->id);
		packet.u.combat.client_combat_result.nX = nX;
		packet.u.combat.client_combat_result.nY = nY;
		packet.u.combat.client_combat_result.bWanted = pTarget->hunter_target;
		if (::IsApplyPK(nCombat))  ::CheckNPCPk(Hero->id, pTarget->id);
		::QueuePacket(&packet, 1);
	}
}

void CBattleMgr::SendModifyPosition(LPCHARACTER pTarget)
{ //< CSD-021107
	if (pTarget->pathcount > 2 || pTarget->moveFlag == TRUE)	
	{	// 捞悼吝捞菌栏搁	 
		pTarget->pathcount = 0;	// 老窜 肛苗辑霸 茄促.
		pTarget->moveFlag = 0;		
		
		switch (pTarget->sprno)
		{
		case 0:
		case 1:
			{
				::SendModifyPosition(pTarget);
				break;
			}
		default:
			{
				::SendModifyPositionNPC(pTarget->id);
				break;
			}
		}
	}
	
} //> CSD-021107

void CBattleMgr::SendTameCommand(LPCHARACTER pCaster, LPCHARACTER pTarget)
{
	if (pCaster == NULL || pTarget == NULL)  return;
	
	LPCHARACTER pMaster = pCaster;       // 林牢
	LPCHARACTER pTame = pCaster->lpNext; // 鸥捞怪等 NPC
	
	while (pTame)
	{
		if (strcmp(pMaster->name, pTame->HostName) == 0)
		{ //< CSD-021024
			t_packet packet;
			packet.h.header.type = CMD_TAME_COMMAND;
			packet.h.header.size = sizeof(t_tame_command);
			packet.u.tame_command.cmd = LC_TAME_ATTACK;
			strcpy(packet.u.tame_command.mybaby, pTame->name);
			strcpy(packet.u.tame_command.toname, pTarget->name);
			::QueuePacket(&packet, 1);
		}	//> CSD-021024
		
		pTame = pTame->lpNext;
	}
}

void CBattleMgr::RecvCharInfoTactic(t_char_info_tactic* pPacket)
{	//< CSD-TW-030624
	const WORD wKind = pPacket->wKind;
	const DWORD dwExperience = pPacket->dwExperience;
	const BYTE nStep = pPacket->nStep;
	const int nLevel = ::GetLeveByExp(nStep, dwExperience);
		
	if (wKind >= 0 && wKind < 13)
	{	
		Hero->aStepInfo[wKind + TAC_INDEX] = nStep;
		SCharacterData.TacticsExp[wKind] = dwExperience;
		SCharacterData.SkillId[wKind + 88] = nLevel;
		SCharacterData.TacticsExpNext[wKind] = NPC_Lev_Ref[nLevel].nMaxExp;
	}
}	//> CSD-TW-030624

void CBattleMgr::RecvBattleMessage(t_battle_message* pPacket)
{
	const string strMsg = ::lan->OutputMessage(pPacket->nKind, pPacket->nNumber);
	Message(pPacket->nType, strMsg.c_str());
}

void CBattleMgr::RecvBattleDamage(t_battle_damage* pPacket)
{	//< CSD-021019 : hp悼扁拳啊 嘎瘤 臼澜
	LPCHARACTER pTarget = ::ReturnCharacterPoint(pPacket->idTarget);
	if (pTarget == NULL)  return;
	
	const int nDamage = pPacket->nDamage;
	
	if (nDamage < 0)  
	{
		switch (pPacket->nKind)
		{
		case 0: ::InsertMagic(pTarget, pTarget, 603, 0, 0, 0, pTarget->x, pTarget->y); break;
		}
		

⌨️ 快捷键说明

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