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

📄 battlemgr.cpp

📁 网络游戏龙族 完整的登陆器 C++ 源代码
💻 CPP
📖 第 1 页 / 共 5 页
字号:
		if (pTarget == Hero)
		{
			SCharacterData.nCharacterHP += nDamage;
			
			if (SCharacterData.nCharacterHP < 0)	
			{
				SCharacterData.nCharacterHP = 0;
			}
			
			if (SCharacterData.nCharacterHP > SCharacterData.nCharacterMAXHP)
			{
				SCharacterData.nCharacterHP = SCharacterData.nCharacterMAXHP;
			}
		}
		
		if (pPacket->idTarget < 10000)
		{
			::CharDoAni(pTarget, pTarget->direction, ACTION_ATTACKED);
		}
		else
		{	
			::CharDoAni(pTarget, pTarget->direction, MON1_ATTACKED);
		}
		
		ShowNumber(-nDamage, pTarget);
	}
}	//> CSD-021019

void CBattleMgr::RecvAttackResult(WORD idCaster, t_attack_result* pPacket)
{	//< CSD-TW-030624
	const int nDamage = pPacket->nDamage;
	const BYTE nResult = pPacket->nResult;
	LPCHARACTER pCaster = ::ReturnCharacterPoint(idCaster);
	LPCHARACTER pTarget = ::ReturnCharacterPoint(pPacket->idTarget);
	if (pCaster == NULL || pTarget == NULL)  return;
	
	const int nReturn = AttackRangeTable[pCaster->sprno][pCaster->accessory[2]][4];
	
	if (nReturn != ACTION_ATTACK_BOW && nReturn != ACTION_THROW)
	{		
		if(pTarget->sprno != 97)// 绵备傍篮 措拜摹甫 焊咯林瘤 臼绰促. 
		{	
			::InputHpUpDown(pPacket->idTarget, nDamage, nResult);
		}	
		
		pCaster->lpAttacked = (nResult) ? (void*)pTarget:NULL;	// 001215 KHS 父距 固胶唱搁 嘎篮巴篮 绝促. 
	}		
	else
	{
		pCaster->lpAttacked		= (void*)pTarget;	// 001215 KHS 父距 固胶唱搁 嘎篮巴篮 绝促. 
	}
	
	pCaster->nAttackedType	= pTarget->type;
	pCaster->attacksuccess = (nResult)  ? true:false;
	pCaster->nActiveCombat = pPacket->nCombat;

	::ChangeDirection(&pCaster->direction, pCaster->x, pCaster->y, pTarget->x, pTarget->y);
	pCaster->todir = pCaster->direction;
	pCaster->nCurrentAction = AttackAction(pCaster);
	pCaster->nCurrentFrame	= 0;
	pCaster->attackanimationON = 10;		// 捞荐摹啊 0捞登搁 促矫 傍拜且荐 乐促.
	// 捞悼吝牢版快 肛冕促.
	if (pCaster->id >= 10000) 
	{
		pCaster->gox = pCaster->x;
		pCaster->goy = pCaster->y;
		pCaster->position.x = pCaster->x / TILE_SIZE;
		pCaster->position.y = pCaster->y / TILE_SIZE;
		pCaster->pathcount = pCaster->oldpathcount = 0;
	}
	
	pTarget->attacker_ID = idCaster;	// SoundUp lkh 眠啊
	pTarget->NumberAnimationValue = nDamage;
	pTarget->attackedresult = nResult;
	pTarget->toflag = (pPacket->nX || pPacket->nY);

	if (pTarget->sprno == 96)
	{
		if (rand()%200 == 0)
		{
			AddCurrentStatusMessage(255,255,255, lan->OutputMessage(5,100));
		}
	}
	
	if (pTarget == Hero)
	{			
		if (pCaster && pCaster->name[0])	
		{
			AddCurrentStatusMessage(255,0,0, lan->OutputMessage(5,98), pCaster->name);
		}
		else 
		{
			AddCurrentStatusMessage(255,0,0, lan->OutputMessage(5,99));
		}
		// 抛捞怪等 NPC啊 郴啊 傍拜 寸窍搁 傍拜窍档废 窃
		SendTameCommand(pTarget, pCaster);
	}
	else if (nReturn != ACTION_ATTACK_BOW && nReturn != ACTION_THROW)
	{
		::CheckNPCPk(pCaster->id, pTarget->id);
	}
	
	switch (nResult)
	{	
	case HIT_AND_DEAD:
		{
			::SkillSettingClear();

			if (pTarget->willdie <= 0)
			{
				pTarget->willdie = 7;
			}

			if (pTarget == Hero)
			{
				if (pCaster->id > 10000)
				{	
					pTarget->feeltype = FT_BAD_;
					pTarget->feeldelay = 50;
				}	
			}		
					
			break;
		}		
	case HIT_AND_NOTDEAD:
		{
			if (pTarget->toflag == true)
			{	
				pTarget->tox = pPacket->nX;
				pTarget->toy = pPacket->nY;
				SendModifyPosition(pTarget); // CSD-021107
				// 剐府搁 促矫 付快胶 困摹蔼阑 罐阑荐 乐霸 茄促.
				Moveoldx = 0;										
				Moveoldy = 0;
				Movetime = 0;
			}
			
			pTarget->attacked++;
			
			if (nDamage < 0)
			{
				ShowAnimation(ANI_STROKE, pTarget);
			}

			ShowEffectItem(pPacket->wdEffect, pCaster, pTarget); // CSD-031001
			break;	
		}
    case HIT_FAILED: 
		{
			ShowAnimation(ANI_STONE, pTarget);
			break;
		}
	}				
}	//> CSD-TW-030624

void CBattleMgr::RecvAttackResult(t_attack_result_d* pPacket)
{	//< CSD-TW-030606
	const int nDamage = pPacket->nDamage;
	const BYTE nResult = pPacket->nResult;
	LPCHARACTER pCaster = ::ReturnCharacterPoint(pPacket->idCaster);
	LPCHARACTER pTarget = ::ReturnCharacterPoint(pPacket->idTarget);
	if (pCaster == NULL || pTarget == NULL)  return; // CSD-031127

	const int nReturn = AttackRangeTable[pCaster->sprno][pCaster->accessory[2]][4];
	
	if (nReturn != ACTION_ATTACK_BOW && nReturn != ACTION_THROW)
	{		
		if(pTarget->sprno != 97)// 绵备傍篮 措拜摹甫 焊咯林瘤 臼绰促. 
		{	
			::InputHpUpDown(pPacket->idTarget, nDamage, nResult);
		}	
		
		pCaster->lpAttacked = (nResult) ? (void*)pTarget:NULL;
	}	
	else
	{
		pCaster->lpAttacked	= (void*)pTarget;	// 001215 KHS 父距 固胶唱搁 嘎篮巴篮 绝促. 
	}
	
	pCaster->nAttackedType	= pTarget->type;
	pCaster->attacksuccess = (nResult) ? true:false;
	pCaster->nActiveCombat = pPacket->nCombat; // CSD-TW-030606
	
	::ChangeDirection(&pCaster->direction, pCaster->x, pCaster->y, pTarget->x, pTarget->y);
	pCaster->todir = pCaster->direction;
	pCaster->nCurrentAction = ::AttackAction(pCaster);
	pCaster->nCurrentFrame	= 0;
	pCaster->attackanimationON = 10;		// 捞荐摹啊 0捞登搁 促矫 傍拜且荐 乐促.
	
	CStrikeSys* pStrike = (CStrikeSys*)GetBattle(0);
	pStrike->EffectHit(pCaster, pTarget);
	
	if (pCaster->id >= 10000) 
	{
		pCaster->gox = pCaster->x;
		pCaster->goy = pCaster->y;
		pCaster->position.x = pCaster->x / TILE_SIZE;
		pCaster->position.y = pCaster->y / TILE_SIZE;
		pCaster->pathcount = pCaster->oldpathcount = 0;
	}
	
	pTarget->attacker_ID = pPacket->idCaster;
	pTarget->NumberAnimationValue = nDamage;
	pTarget->attackedresult = nResult;
	pTarget->toflag = (pPacket->nX || pPacket->nY);
	
	if (pTarget == Hero)
	{			
		if (pCaster->name[0])	
		{
			::AddCurrentStatusMessage(255,0,0, lan->OutputMessage(5,98), pCaster->name);
		}
		else 
		{
			::AddCurrentStatusMessage(255,0,0, lan->OutputMessage(5,99));
		}
		// 抛捞怪等 NPC啊 郴啊 傍拜 寸窍搁 傍拜窍档废 窃
		SendTameCommand(pTarget, pCaster);
	}
	else if (nReturn != ACTION_ATTACK_BOW && nReturn != ACTION_THROW)
	{
		::CheckNPCPk(pCaster->id, pTarget->id);
	}
	
	if (pTarget->sprno == 96)
	{
		if (rand()%200 == 0)
		{
			::AddCurrentStatusMessage(255,255,255, lan->OutputMessage(5,100));
		}
	}
	
	switch (nResult)
	{				
	case HIT_AND_DEAD:
		{
			::SkillSettingClear();

			if (pTarget->willdie <= 0)
			{
				pTarget->willdie = 7; 
			}

			if (pTarget == Hero)
			{
				if (pCaster->id > 10000)
				{	
					pTarget->feeltype = FT_BAD_;
					pTarget->feeldelay = 50;
				}
			}

			break;
		}		
	case HIT_AND_NOTDEAD:
		{
			if (pTarget->toflag == true) // 某腐捞 傍拜寸秦 剐府绰 楷免 困茄 可悸 谅钎 悸泼
			{	
				pTarget->tox = pPacket->nX;
				pTarget->toy = pPacket->nY;
				SendModifyPosition(pTarget); // CSD-021107
				// 剐府搁 促矫 付快胶 困摹蔼阑 罐阑荐 乐霸 茄促.
				Moveoldx = 0;										
				Moveoldy = 0;
				Movetime = 0;
			}
			
			pTarget->attacked++;
			
			if (nDamage < 0)  
			{
				ShowAnimation(ANI_STROKE, pTarget);
			}
			
			ShowEffectItem(pPacket->wdEffect, pCaster, pTarget); // CSD-031001
			break;	
		}
    case HIT_FAILED: 
		{
			ShowAnimation(ANI_STONE, pTarget);
			break;
		}
	}	
}	//> CSD-TW-030606

void CBattleMgr::RecvThrowAttack(t_server_throw_attack* pPacket)
{	//< CSD-TW-030606
	LPCHARACTER pCaster = ::ReturnCharacterPoint(pPacket->idCaster);
	LPCHARACTER pTarget = ::ReturnCharacterPoint(pPacket->idTarget);
	if (pCaster == NULL || pTarget == NULL)  return;  
	
	const int nNo = ::GetCharAccessory(pCaster); // CSD-030723

	const int nReturn = AttackRangeTable[pCaster->sprno][nNo][4];
	const int nX = pPacket->nX;
	const int nY = pPacket->nY;
	const int nCombat = pPacket->nCombat;
	
	switch (nReturn)
	{
    case ACTION_THROW:
    case ACTION_ATTACK_BOW:
		{	
			::ChangeDirection(&pCaster->direction, pCaster->x, pCaster->y, pTarget->x, pTarget->y);
			pCaster->todir = pCaster->direction;
			pCaster->lpAttacked = pTarget;
			pCaster->nAttackedType	= pTarget->type;
			pCaster->nCurrentAction = ::AttackAction(pCaster);
			pCaster->nCurrentFrame = 0;
			pCaster->nActiveCombat = nCombat;
			break;
		}
    default: 
		{
			return;
		}
	}
	
	switch (nCombat)
	{
    case FLEET_MISSILE:
    case MULTIPLE_FIRE:
    case FIRE_EXTREME:
    case ICING_BLAST:
    case ICE_EXTREME:
		{
			pCaster->bShoot = false;
			pCaster->attackanimationON = 15;
			break;
		}
    case CONVERTING_ARMOR:
		{
			pCaster->bShoot = false;
			pCaster->attackanimationON = 10;
			break;
		}
    case SHARK_MISSILE:
		{
			pCaster->bShoot = false;
			
			switch (pCaster->nActiveLevel)
			{
			case 1:  pCaster->attackanimationON = 10;  break;
			case 2:  pCaster->attackanimationON = 8;   break;
			case 3:  pCaster->attackanimationON = 6;   break;
			default: pCaster->attackanimationON = 12;  break;
			}
			
			break;
		}
    default:
		{
			pCaster->bShoot = true;
			pCaster->attackanimationON = 10;
			break;
		}
	}
	// 捞悼吝牢版快 肛冕促.
	if (pCaster->id >= 10000) 
	{
		pCaster->gox = pCaster->x;
		pCaster->goy = pCaster->y;
		pCaster->position.x = (pCaster->x>>CELL);
		pCaster->position.y = (pCaster->y>>CELL);
		pCaster->pathcount = pCaster->oldpathcount = 0;
	}
	
	pTarget->attacker_ID = pPacket->idCaster;
	pTarget->toflag = (nX || nY); // 漂沥 剐府绰 谅钎啊 逞绢柯 版快父 剐府霸 贸府
}	//> CSD-TW-030606

void CBattleMgr::RecvThrowResult(WORD idCaster, t_server_throw_result* pPacket)
{	//< CSD-TW-030624
	const int nDamage = pPacket->nDamage;
	const BYTE nResult = pPacket->nResult;
	LPCHARACTER pCaster = ::ReturnCharacterPoint(idCaster);
	LPCHARACTER pTarget = ::ReturnCharacterPoint(pPacket->idTarget);
	if (pCaster == NULL || pTarget == NULL)  return;
		
	pCaster->attacksuccess = (nResult)  ? true:false;
	pCaster->nActiveCombat = pPacket->nCombat;
	
	pTarget->attacker_ID = idCaster;	// SoundUp lkh 眠啊
	pTarget->NumberAnimationValue = nDamage;
	pTarget->attackedresult = nResult;
	pTarget->toflag = (pPacket->nX || pPacket->nY);

	if(pTarget->sprno != 97)// 绵备傍篮 措拜摹甫 焊咯林瘤 臼绰促. 
	{	
		::InputHpUpDown(pPacket->idTarget, nDamage, nResult);
	}

	if (pTarget->sprno == 96)
	{
		if (rand()%200 == 0)
		{
			::AddCurrentStatusMessage(255,255,255, lan->OutputMessage(5,100));
		}
	}
	
	if (pTarget == Hero)
	{			
		if (pCaster->name[0])	
		{ 
			switch (pCaster->accessory[2])
			{	//< CSD-030723
			case 120:
				{
					::AddCurrentStatusMessage(255, 255, 255, lan->OutputMessage(0, 11), pCaster->name);
					break;
				}
			case 127:
				{
					::AddCurrentStatusMessage(255, 255, 255, lan->OutputMessage(0, 12), pCaster->name);
					break;
				}
			case 128:
				{
					::AddCurrentStatusMessage(255, 255, 255, lan->OutputMessage(0, 13), pCaster->name);
					break;
				}
			default:
				{
					::AddCurrentStatusMessage(255, 0, 0, lan->OutputMessage(5, 98), pCaster->name);
					break;
				}
			}	//> CSD-030723
		} 
		// 抛捞怪等 NPC啊 郴啊 傍拜 寸窍搁 傍拜窍档废 窃
		SendTameCommand(pTarget, pCaster);
	}
	else
	{
		::CheckNPCPk(pCaster->id, pTarget->id);
	}
	
	switch (nResult)
	{	
	case HIT_AND_DEAD:
		{
			::SkillSettingClear();

			if (pTarget->willdie <= 0)
			{
				pTarget->willdie = 7;
			}

			if (pTarget == Hero)
			{
				if (pCaster->id > 10000)
				{	
					pTarget->feeltype = FT_BAD_;
					pTarget->feeldelay = 50;
				}
			}

			break;		
		}		
	case HIT_AND_NOTDEAD:
		{
			if (pTarget->toflag)
			{	
				pTarget->tox = pPacket->nX;
				pTarget->toy = pPacket->nY;
				SendModifyPosition(pTarget); // CSD-021107
				// 剐府搁 促矫 付快胶 困摹蔼阑 罐阑荐 乐霸 茄促.
				Moveoldx = Moveoldy = Movetime = 0;
			}
			
			pTarget->attacked++;
			
			if (nDamage < 0)  
			{
				ShowAnimation(ANI_STROKE, pTarget);
			}
			
			ShowEffectItem(pPacket->wdEffect, pCaster, pTarget); // CSD-031001
			break;	
		}
    case HIT_FAILED: 
		{
			ShowAnimation(ANI_STONE, pTarget);
			break;
		}
	}
}	//> CSD-TW-030624

void CBattleMgr::RecvThrowResult(t_throw_result_d* pPacket)
{	//< CSD-TW-030606
	const int nDamage = pPacket->nDamage;
	const BYTE nResult = pPacket->nResult;
	LPCHARACTER pCaster = ::ReturnCharacterPoint(pPacket->idCaster);
	LPCHARACTER pTarget = ::ReturnCharacterPoint(pPacket->idTarget);
	if (pCaster == NULL || pTarget == NULL)  return;

	pCaster->attacksuccess = (nResult) ? true:false;
	pCaster->nActiveCombat = pPacket->nCombat; 
	
	if (pTarget->sprno != 97) // 绵备傍篮 鸥拜摹甫 焊咯林瘤 臼绰促.
	{	
		::InputHpUpDown(pPacket->idTarget, nDamage, nResult);
	}	

	if (pTarget->sprno == 96)
	{
		if (rand()%200 == 0)
		{
			::AddCurrentStatusMessage(255,255,255, lan->OutputMessage(5,100));
		}
	}
	
	pTarget->attacker_ID = pPacket->idCaster;
	pTarget->NumberAnimationValue = nDamage;
	pTarget->attackedresult = nResult;

⌨️ 快捷键说明

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