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

📄 battlemgr.cpp

📁 网络游戏龙族 完整的登陆器 C++ 源代码
💻 CPP
📖 第 1 页 / 共 5 页
字号:
	pTarget->toflag = (pPacket->nX || pPacket->nY);	// 漂沥 剐府绰 谅钎啊 逞绢柯 版快父 剐府霸 贸府
	
	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);
					// 抛捞怪等 NPC啊 郴啊 傍拜 寸窍搁 傍拜窍档废 窃
					SendTameCommand(pTarget, pCaster);
					break;
				}
			}	//> CSD-030723
		} 
		// 带柳 巴捞 传耽捞啊 酒聪扼搁 抛捞怪等 NPC啊 郴啊 傍拜 寸窍搁 傍拜窍档废 窃
		if (pCaster->accessory[2] != 120)  SendTameCommand(pTarget, pCaster);
	}
	else
	{
		::CheckNPCPk(pCaster->id, pTarget->id);
	}
	
	switch (nResult)
	{	
	case HIT_AND_DEAD:
		{
			::SkillSettingClear();

			if (pTarget->willdie <= 0)
			{	// 捞 荐摹啊 促款登促啊 1捞 登搁 磷绰促.
				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-030606
void CBattleMgr::RecvEffectResult(t_server_effect_result* pPacket)
{	//< CSD-031007
	int nLife = pPacket->nDamage;
	LPCHARACTER pTarget = ::ReturnCharacterPoint(pPacket->idTarget);
	if (pTarget == NULL)  return;
	
	switch (pPacket->nResult)
	{
	case HIT_AND_ALIVE:   
		{      
			if (pTarget->hp <= 0 || pTarget->condition == CON_DEATH)
			{ // 磷绢乐绰 版快
				return;
			}
			
			if (nLife <= 0)  
			{ // 磷绢乐绰 版快
				return;
			}
			
			++pTarget->attacked;
			
			if (pTarget == Hero) // 付过狼 措惑捞 官肺 唱牢 版快 
			{
				SCharacterData.nCharacterHP = nLife;
				
				if (SCharacterData.nCharacterHP <= 0) 
				{
					SCharacterData.nCharacterHP = 1;	//辑滚俊辑绰   
				}
				
				if (SCharacterData.nCharacterHP > SCharacterData.nCharacterMAXHP)
				{
					SCharacterData.nCharacterHP = SCharacterData.nCharacterMAXHP;
				}
			}
			
			SetViewType(pTarget);
			pTarget->hp	= nLife;
			break;
		}
    case HIT_AND_NOTDEAD:
		{
			if (pTarget->hp <= 0 || pTarget->condition == CON_DEATH)
			{ // 磷绢乐绰 版快
				return;
			}
			
			++pTarget->attacked;
			
			if (pTarget == Hero) // 付过狼 措惑捞 官肺 唱牢 版快 
			{
				SCharacterData.nCharacterHP += nLife;
				
				if (SCharacterData.nCharacterHP <= 0) 
				{
					SCharacterData.nCharacterHP = 1;	//辑滚俊辑绰   
				}
				
				if (SCharacterData.nCharacterHP > SCharacterData.nCharacterMAXHP) 
				{
					SCharacterData.nCharacterHP = SCharacterData.nCharacterMAXHP;
				}
			}
			
			SetViewType(pTarget);
			pTarget->hp	+= nLife;
			if (pTarget->hp <= 0)  pTarget->hp = 1;
			if (pTarget->hp > pTarget->hpmax)  pTarget->hp = pTarget->hpmax;
			if (nLife < 0)  ShowAnimation(ANI_STROKE, pTarget);
			
			break;
		}
    case HIT_AND_DEAD:
		{
			pTarget->changeActionFlag = 0;
			ShowAnimation(ANI_DEATH, pTarget);
			pTarget->pathcount = 0;	// 框流捞瘤 臼霸
			pTarget->moveFlag = 0;  // 磷绢倒酒促聪瘤 给窍霸
			
			if (pTarget == Hero)		
			{ // 磷绰 某腐磐啊 磊脚牢 版快
				SCharacterData.nCharacterHP = 0;
				SCharacterData.nCharacterMP = 0;
				SCharacterData.condition = CON_DEATH;
			}	
			
			pTarget->hp = 0;
			pTarget->mp	= 0;
			pTarget->condition = CON_DEATH;
			pTarget->viewtype = VIEWTYPE_NORMAL_;
			break;
		}
	}		
	
	ShowNumber(nLife, pTarget);
}	//> CSD-031007

void CBattleMgr::RecvNpcMagic(t_server_npc_magic* pPacket)
{
	LPCHARACTER pCaster = ::ReturnCharacterPoint(pPacket->idCaster);
	LPCHARACTER pTarget = ::ReturnCharacterPoint(pPacket->idTarget);
	
	if (pCaster != NULL && pTarget != NULL)
	{
		//< CSD-021021
		::ChangeDirection(&pCaster->direction, pCaster->x, pCaster->y, pTarget->x, pTarget->y);
		pCaster->todir = pCaster->direction;
		//> CSD-021021
		const int nMagic = pPacket->nMagic;
		pCaster->excute_MagicNum = nMagic;
		pCaster->ready_Magic = 2;
		
		CMagicSys* pMagic = (CMagicSys*)GetBattle(1);
		pMagic->Apply(pCaster, pTarget, nMagic,
			pPacket->nX, pPacket->nY, pPacket->bFailed);
	}
}

void CBattleMgr::RecvMagicSelect(t_server_magic_select* pPacket)
{	//< CSD-TW-030606
	LPCHARACTER pCaster = ::ReturnCharacterPoint(pPacket->idCaster);

	if (pCaster == NULL)
	{
		return;
	}
	// 傈捧胶懦 急琶 秒家
	pCaster->nActiveCombat = 0;
	pCaster->nPassiveCombat = 0;
	pCaster->nActiveLevel = 0;
	pCaster->nPassiveLevel = 0;
	
	pCaster->ready_Magic = 0;
	pCaster->excute_MagicNum = 0;
	pCaster->end_Casting = 0;
	
	if (pCaster == Hero)
	{ 
		iCSPCMax = iCSPCNow = 0;
		::SetSCDMainAndOtherClear(0);
		SendMagicCasting(pPacket->nMagic);
	}
}	//> CSD-TW-030606

void CBattleMgr::RecvMagicCasting(t_server_magic_casting* pPacket)
{	//< CSD-TW-030606
	LPCHARACTER pCaster = ::ReturnCharacterPoint(pPacket->idCaster);
	
	if (pCaster != NULL)  
	{ 
		WORD wReady = pPacket->wReady;
		
		if (pCaster->condition&CON_FROZEN)
		{
			wReady *= 2;
		}

		CMagicSys* pMagic = (CMagicSys*)GetBattle(1);
		pMagic->Ready(pCaster, pPacket->nMagic, wReady);
		connections.receive = 1;
	} 
}	//> CSD-TW-030606

void CBattleMgr::RecvMagicExecute(t_server_magic_execute* pPacket)
{	//< CSD-030930
	LPCHARACTER pCaster = ::ReturnCharacterPoint(pPacket->idCaster);
	LPCHARACTER pTarget = ::ReturnCharacterPoint(pPacket->idTarget);
	if (pCaster == NULL || pTarget == NULL)  return;

	LPCHARACTER pTemp = Hero;
	
	while (pTemp = pTemp->lpNext)
	{
		pTemp->bCrash = false;
	}
	
	const int nMagic = pPacket->nMagic;
	const bool bFail = pPacket->bFailed;
	pCaster->excute_MagicNum = nMagic;
	pCaster->ready_Magic = 2;
	
	CMagicSys* pMagic = (CMagicSys*)GetBattle(1);
	pMagic->Apply(pCaster, pTarget, nMagic, pPacket->nX, pPacket->nY, bFail);
}	//> CSD-CSD-030930

void CBattleMgr::RecvMagicResult(t_server_magic_result* pPacket)
{	//< CSD-TW-030627 : 林肺 老矫利牢 瓤苞父阑 唱鸥郴绰 版快狼 搬苞蔼
	LPCHARACTER pTarget = ::ReturnCharacterPoint(pPacket->idTarget);
	if (pTarget == NULL)  return;
	
	switch (pPacket->nResult)
	{ 
    case HIT_SUMMONING:
    case HIT_AND_NOTDEAD:
		{
			++pTarget->attacked;
			::ConditionSet(pTarget, pPacket->nState); // 惑怕 汲沥
			
			if (pTarget == Hero) // 付过狼 措惑捞 官肺 唱牢 版快
			{	
				SCharacterData.condition = pTarget->condition;
			}
			
			SetViewType(pTarget);
			break;
		}
	case HIT_AND_DEAD:
		{
			pTarget->changeActionFlag = 0;
			ShowAnimation(ANI_DEATH, pTarget);
			pTarget->pathcount = 0;	// 框流捞瘤 臼霸
			pTarget->moveFlag = 0;  // 磷绢倒酒促聪瘤 给窍霸
			
			if (pTarget == Hero)		
			{ // 磷绰 某腐磐啊 磊脚牢 版快
				SCharacterData.nCharacterHP = 0;
				SCharacterData.nCharacterMP = 0;
				SCharacterData.condition = CON_DEATH;
			}	
			
			pTarget->hp = 0;
			pTarget->mp	= 0;
			pTarget->condition = CON_DEATH;
			pTarget->viewtype = VIEWTYPE_NORMAL_;
			break;
		}
	}		
}	//> CSD-TW-030627

void CBattleMgr::RecvMagicResultT(t_server_magic_result_t* pPacket)
{	//< CSD-TW-030606 : Life客 Mana狼 函拳客 包拌绝绰 瘤加利牢 付过牢 版快
	LPCHARACTER pTarget = ::ReturnCharacterPoint(pPacket->idTarget);
	if (pTarget == NULL)  return;
	
	switch (pPacket->nResult)
	{		
	case HIT_AND_NOTDEAD:
		{
			++pTarget->attacked;
			::ConditionSet(pTarget, pPacket->nState);
			
			if (pTarget == Hero) // 付过狼 措惑捞 官肺 唱牢 版快 
			{
				SCharacterData.condition = pTarget->condition;
			}
			
			switch (pPacket->nMagic)
			{
			case GREAT_SHIELD:
				{
					DWORD dwPeriod = g_ClientTime + pPacket->wDuration*1000;
					::InsertMagic(pTarget, pTarget, 354, 0, 0, 0, pTarget->x, pTarget->y, false, 0, false, dwPeriod);
					break;
				}
			case GREAT_PRAY:
				{
					DWORD dwPeriod = g_ClientTime + pPacket->wDuration*1000;
					::InsertMagic(pTarget, pTarget, 353, 0, 0, 0, pTarget->x, pTarget->y, false, 0, false, dwPeriod);
					break;
				}
			default:
				{
					MAGICLIST* pMagic = ::FindList(g_lpML, pPacket->nMagic, pPacket->idTarget);
					
					if (pMagic != NULL)
					{	// 剐府技牧靛肺 函券
						pMagic->magic_Runtime = g_ClientTime + pPacket->wDuration*1000;
					}
					
					break;
				}
			}
			
			SetViewType(pTarget);
			break;
		}
	}		
}	//> CSD-TW-030606

void CBattleMgr::RecvMagicResultH(t_server_magic_result_h* pPacket)
{	//< CSD-TW-030606
	int nLife = pPacket->nLife;
	LPCHARACTER pTarget = ::ReturnCharacterPoint(pPacket->idTarget);
	if (pTarget == NULL)  return;
	
	switch (pPacket->nResult)
	{
	case HIT_AND_ALIVE:   
		{      
			if (pTarget->hp <= 0 || pTarget->condition == CON_DEATH)
			{ // 磷绢乐绰 版快
				return;
			}
			
			if (nLife <= 0)  
			{ // 磷绢乐绰 版快
				return;
			}
			
			++pTarget->attacked;
			::ConditionSet(pTarget, pPacket->nState);	// 惑怕甫 犁汲沥
			
			if (pTarget == Hero) // 付过狼 措惑捞 官肺 唱牢 版快 
			{
				SCharacterData.condition = pTarget->condition;
				SCharacterData.nCharacterHP = nLife;
				
				if (SCharacterData.nCharacterHP <= 0) 
				{
					SCharacterData.nCharacterHP = 1;	//辑滚俊辑绰   
				}
				
				if (SCharacterData.nCharacterHP > SCharacterData.nCharacterMAXHP)
				{
					SCharacterData.nCharacterHP = SCharacterData.nCharacterMAXHP;
				}
			}
			
			SetViewType(pTarget);
			pTarget->hp	= nLife;
			break;
		}
    case HIT_AND_NOTDEAD:
		{
			if (pTarget->hp <= 0 || pTarget->condition == CON_DEATH)
			{ // 磷绢乐绰 版快
				return;
			}
			
			++pTarget->attacked;
			::ConditionSet(pTarget, pPacket->nState);	// 惑怕甫 犁汲沥
			
			if (pTarget == Hero) // 付过狼 措惑捞 官肺 唱牢 版快 
			{
				SCharacterData.condition = pTarget->condition;
				SCharacterData.nCharacterHP += nLife;
				
				if (SCharacterData.nCharacterHP <= 0) 
				{
					SCharacterData.nCharacterHP = 1;	//辑滚俊辑绰   
				}
				
				if (SCharacterData.nCharacterHP > SCharacterData.nCharacterMAXHP) 
				{
					SCharacterData.nCharacterHP = SCharacterData.nCharacterMAXHP;
				}
			}
			
			SetViewType(pTarget);
			pTarget->hp	+= nLife;
			if (pTarget->hp <= 0)  pTarget->hp = 1;
			if (pTarget->hp > pTarget->hpmax)  pTarget->hp = pTarget->hpmax;
			if (nLife < 0)  ShowAnimation(ANI_STROKE, pTarget);
			
			break;
		}
    case HIT_AND_DEAD:
		{
			pTarget->changeActionFlag = 0;
			ShowAnimation(ANI_DEATH, pTarget);
			pTarget->pathcount = 0;	// 框流捞瘤 臼霸
			pTarget->moveFlag = 0;  // 磷绢倒酒促聪瘤 给窍霸
			
			if (pTarget == Hero)		
			{ // 磷绰 某腐磐啊 磊脚牢 版快
				SCharacterData.nCharacterHP = 0;
				SCharacterData.nCharacterMP = 0;
				SCharacterData.condition = CON_DEATH;
			}	
			
			pTarget->hp = 0;
			pTarget->mp	= 0;
			pTarget->condition = CON_DEATH;
			pTarget->viewtype = VIEWTYPE_NORMAL_;
			break;
		}
	}		
	
	ShowNumber(nLife, pTarget);
}	//> CSD-TW-030606

void CBattleMgr::RecvMagicResultM(t_server_magic_result_m* pPacket)
{	//< CSD-TW-030606
	LPCHARACTER pTarget = ::ReturnCharacterPoint(pPacket->idTarget);
	if (pTarget == NULL)  return;
	
	switch (pPacket->nResult)
	{		
	case HIT_AND_DEAD:
		{
			pTarget->changeActionFlag = 0;
			ShowAnimation(ANI_DEATH, pTarget);
			pTarget->pathcount= 0; // 框流捞瘤 臼霸
			pTarget->moveFlag = 0; // 磷绢倒酒促聪瘤 给窍霸
			pTarget->hp = 0;
			pTarget->mp = 0;
			pTarget->condition = CON_DEATH;
			pTarget->viewtype = VIEWTYPE_NORMAL_;
			// 掘绢嘎酒 磷绰 仇捞 官肺 唱牢 版快
			if (pTarget == Hero)
			{
				SCharacterData.nCharacterHP = 0;
				SCharacterData.nCharacterMP = 0;
				SCharacterData.condition = CON_DEATH;
			}	
			
			break;
		}	
	case HIT_AND_NOTDEAD:
		{
			if( pTarget->hp <= 0 || pTarget->condition == CON_DEATH)
			{ // 磷绢乐绰 版快扼搁
				break;
			}
			
			++pTarget->attacked;
			::ConditionSet(pTarget, pPacket->nState);	// 惑怕甫 犁汲沥
			
			if (pTarget == Hero) // 付过狼 措惑捞 官肺 唱牢 版快 
			{
				SCharacterData.condition = pTarget->condition;
				SCharacterData.nCharacterHP += pPacket->nLife;
				SCharacterData.nCharacterMP += pPacket->nMana;

⌨️ 快捷键说明

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