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

📄 battlemgr.cpp

📁 网络游戏龙族 完整的登陆器 C++ 源代码
💻 CPP
📖 第 1 页 / 共 5 页
字号:
				
				if (SCharacterData.nCharacterHP <= 0) 
				{
					SCharacterData.nCharacterHP = 1;	//辑滚俊辑绰   
				}
				
				if (SCharacterData.nCharacterHP > SCharacterData.nCharacterMAXHP) 
				{
					SCharacterData.nCharacterHP = SCharacterData.nCharacterMAXHP;
				}
				
				if (SCharacterData.nCharacterMP < 0) 
				{
					SCharacterData.nCharacterMP = 0;
				}
				
				if (SCharacterData.nCharacterMP > SCharacterData.nCharacterMAXMP) 
				{
					SCharacterData.nCharacterMP = SCharacterData.nCharacterMAXMP;
				}
			}
			
			SetViewType(pTarget);
			pTarget->hp += pPacket->nLife;
			if (pTarget->hp <= 0)  pTarget->hp = 1;			
			if (pTarget->hp > pTarget->hpmax)  pTarget->hp = pTarget->hpmax;
			pTarget->mp += pPacket->nMana;
			if (pTarget->mp < 0)  pTarget->mp = 0;
			if (pTarget->mp > pTarget->mpmax)  pTarget->mp = pTarget->mpmax;
			if (pPacket->nLife < 0)  ShowAnimation(ANI_STROKE, pTarget);
			
			break;
		}	
	case HIT_AND_ALIVE:
		{
			if (pTarget == Hero)
			{
				SCharacterData.nCharacterHP += pPacket->nLife;
				SCharacterData.nCharacterMP += pPacket->nMana;
				SCharacterData.condition = CON_NORMAL;
				
				if (SCharacterData.nCharacterHP > SCharacterData.nCharacterMAXHP) 
				{
					SCharacterData.nCharacterHP = SCharacterData.nCharacterMAXHP;
				}
				
				if (SCharacterData.nCharacterMP > SCharacterData.nCharacterMAXMP) 
				{
					SCharacterData.nCharacterMP = SCharacterData.nCharacterMAXMP;	
				}
			}
			
			pTarget->hp	+= pPacket->nLife;
			pTarget->mp	+= pPacket->nMana;
			pTarget->condition = CON_NORMAL;
			pTarget->viewtype = VIEWTYPE_NORMAL_;
			pTarget->dieani = 0;
			pTarget->blood_Set = false;
			if (pTarget==Hero) ::PlayListAutoSounds(2408, 0, 0, 0);		// LTS SOUND
			else
			{
				int distx=pTarget->x-Hero->x;
				int disty=pTarget->y-Hero->y;
				::PlayListAutoSounds(2408, distx, disty, 0);
			}
			
			if (pTarget->hp > pTarget->hpmax)  pTarget->hp = pTarget->hpmax;
			if (pTarget->mp > pTarget->mpmax)  pTarget->mp = pTarget->mpmax;
			if (pTarget->changeActionFlag == 1)  pTarget->changeActionFlag=0;
			ShowAnimation(ANI_NONE, pTarget);
			break;
		}
	}
	
	ShowNumber(pPacket->nLife, pTarget);
}	//> CSD-TW-030606

void CBattleMgr::RecvCombatInit(t_combat_init* pPacket)
{	//< CSD-TW-030606
	LPCHARACTER pMaster = ::ReturnCharacterPoint(pPacket->idMaster);
	
	if (pMaster == NULL)
	{
		return;
	}
	// 傈捧胶懦 檬扁拳
	switch (pPacket->nType)
	{
    case ACTIVE_COMBAT: 
		{
			pMaster->nActiveCombat = 0;
			pMaster->nActiveLevel = 0;
			break;
		}
    case PASSIVE_COMBAT: 
		{
			pMaster->nPassiveCombat = 0;
			pMaster->nPassiveLevel = 0;
			break;
		}
	case RECOVERY_COMBAT: 
		{
			pMaster->nRecoveryCombat = 0;
			pMaster->nRecoveryLevel = 0;
			break;
		}
	}
}	//> CSD-TW-030606

void CBattleMgr::RecvCombatClear(t_server_combat_clear* pPacket)
{	//< CSD-TW-030606
	LPCHARACTER pMaster = ::ReturnCharacterPoint(pPacket->idMaster);
	
	if (pMaster == NULL)
	{
		return;
	}
	// 傈捧胶懦 急琶 秒家
	pMaster->nActiveCombat = 0;
	pMaster->nPassiveCombat = 0;
	pMaster->nRecoveryCombat = 0;
	pMaster->nActiveLevel = 0;
	pMaster->nPassiveLevel = 0;
	pMaster->nRecoveryLevel = 0;
	
	pMaster->ready_Magic = 0;
	pMaster->excute_MagicNum = 0;
	pMaster->end_Casting = 0;
	
	if (pMaster == Hero)
	{ 
		iCSPCMax = iCSPCNow = 0;
		::SetSCDMainAndOtherClear(0);
	}
}	//> CSD-TW-030606

void CBattleMgr::RecvCombatObtain(t_server_combat_obtain* pPacket)
{
	LPCHARACTER pMaster = ::ReturnCharacterPoint(pPacket->idMaster);
	if (pMaster == NULL)  return;
	
	if (pMaster == Hero)
	{
		const int nPara = pPacket->nPara;
		const int nX = pPacket->nPosX; 
		const int nY = pPacket->nPosY; 
		const int nTotal = pPacket->nTotal;
		// 傈捧胶懦 器牢磐 裙垫 酒捞袍 困摹 备窍扁
		POS pos;
		::SetItemPos(INV, nPara, nY, nX, &pos);
		// 傈捧胶懦 器牢磐 裙垫 酒捞袍 力芭
		ItemAttr& rItemAttr = InvItemAttr[nPara][nY][nX];
		
		if (rItemAttr.item_no == 3105)
		{
			::UseItemByRbutton(pos, rItemAttr);
			pMaster->aStepInfo[CSP_STEP] = iCSReservPoint = nTotal + 1;
			OUTPUT(MK_INFORMATION, lan->OutputMessage(1, 51));
		}
	}
	// 傈捧胶懦 器牢磐 裙垫 捞棋飘 免仿
	::InsertMagic(pMaster, pMaster, 500, 0, 0, 0, 0, 0);
}

void CBattleMgr::RecvCombatRequest(t_server_combat_request* pPacket)
{
	LPCHARACTER pMaster = ::ReturnCharacterPoint(pPacket->idMaster);
	if (pMaster == NULL)  return;
	
	pMaster->aStepInfo[CSP_STEP] = pPacket->nRemain;
	
	for (int i = LIGHTNING_BOOM; i <= WIND_EXTREME; ++i)
	{
		SCharacterData.SkillId[i - 100] = pPacket->aLevel[i - LIGHTNING_BOOM];
	}
	
	::CallCombatSkillPointMenu();
}

void CBattleMgr::RecvCombatLearn(t_server_combat_learn* pPacket)
{
	LPCHARACTER pMaster = ::ReturnCharacterPoint(pPacket->idMaster);
	if (pMaster == NULL)  return;
	
	const int nCombat = pPacket->nSkill;
	
	if (IsCombat(nCombat))
	{
		const int nLevel = pPacket->nLevel;
		
		if (nLevel <= 1)
		{
			OUTPUT(MK_INFORMATION, lan->OutputMessage(1, 52));
		}
		else
		{
			OUTPUT(MK_INFORMATION, lan->OutputMessage(1, 53));
		}
		
		SCharacterData.SkillId[nCombat - 100] = nLevel;
		CombatSkill[nCombat - 214].iSkillLv = nLevel;
		pMaster->aStepInfo[CSP_STEP] = iCSReservPoint = pPacket->nRemain;
	}
}

void CBattleMgr::RecvCombatSelect(t_server_combat_select* pPacket)
{	//< CSD-TW-030606
	LPCHARACTER pCaster = ::ReturnCharacterPoint(pPacket->idMaster);
	if (pCaster == NULL)  return;
	
	const int nCombat = pPacket->nCombat;
	// 粮犁窍绰 傈捧胶懦牢瘤 八荤
	if (!IsCombat(nCombat))
	{ 
		OUTPUT(MK_INFORMATION, lan->OutputMessage(1, 61));
		return;
	}
	// 付过 某胶泼吝牢 惑怕俊辑绰 傈捧胶懦阑 荤侩 给窍档废 荐沥
	if (!::TimeCheck(pCaster->end_Casting))
	{
		if (Hero == pCaster)
		{ 
			OUTPUT(MK_INFORMATION, lan->OutputMessage(1, 65));
		}

		return;
	}

	WORD wReady = 1000;
	CCombatSys* pCombat = (CCombatSys*)GetBattle(2);
	
	if (!pCombat->Ready(pCaster, nCombat, wReady))
	{
		connections.receive = 1;
		return;
	}
	
	if (pCaster == Hero)
	{ 
		switch (g_lpMT[nCombat].spell_Type)
		{
		case ACTIVE_COMBAT: 
			{
				pCaster->nActiveCombat = 0;
				iCSPCNow = 0;
				iCSPCMax = g_lpMT[nCombat].nCombatCount;
				break;
			}
		case PASSIVE_COMBAT: 
			{
				pCaster->nPassiveCombat = 0;
				break;
			}
		}

		::SetSCDMainAndOtherClear(nCombat - 214);
	}
}	//> CSD-TW-030606

void CBattleMgr::RecvCombatAttack(t_server_combat_attack* pPacket)
{
	LPCHARACTER pCaster = ::ReturnCharacterPoint(pPacket->idCaster);
	LPCHARACTER pTarget = ::ReturnCharacterPoint(pPacket->idTarget);
	if (pCaster == NULL || pTarget == NULL)  return;
	
	const int nCombat = pPacket->nSkill;
	pCaster->excute_MagicNum = nCombat;
	
	const int nX = pPacket->nX;
	const int nY = pPacket->nY;
	const bool bFail = pPacket->bFailed;
	CCombatSys* pCombat = (CCombatSys*)GetBattle(2);
	
	if (pCombat->Apply(pCaster, pTarget, nCombat, nX, nY, bFail))
	{	// 荤侩 傈捧胶懦 汲沥
		if (bFail == false)
		{
			const int nLevel = pPacket->nLevel;
			
			switch (g_lpMT[nCombat].spell_Type)
			{
			case ACTIVE_COMBAT: 
				{
					pCaster->nActiveCombat = nCombat;
					pCaster->nActiveLevel = nLevel;
					break;
				}
			case PASSIVE_COMBAT: 
				{
					pCaster->nPassiveCombat = nCombat; 
					pCaster->nPassiveLevel = nLevel;
					break;
				}
			case RECOVERY_COMBAT: 	// 030415 kyo
				{	//傈捧胶懦 cp雀汗捞 惯悼瞪订 
					pCaster->nActiveCombat = 0; // 030523 kyo
					pCaster->nActiveLevel = 0; // 030523 kyo
					pCaster->nRecoveryCombat = nCombat; 
					pCaster->nRecoveryLevel = nLevel;
					break;
				}
			}
		}
	}
	
	if (pCaster == Hero)
	{  
		iCSPNow = pPacket->wAmount;
	}
}

void CBattleMgr::RecvCombatResult(t_server_combat_result* pPacket)
{
	LPCHARACTER pTarget = ::ReturnCharacterPoint(pPacket->idTarget);
	if (pTarget == NULL)  return;
	
	const int nCombat = pPacket->nSkill;
	
	switch (pPacket->nResult)
	{		
	case HIT_AND_NOTDEAD:
		{	
			break;
		}	
	}
}

void CBattleMgr::RecvCombatResultH(t_server_combat_result_h* pPacket)
{
	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;
				
				if (SCharacterData.nCharacterHP <= 0) 
				{
					SCharacterData.nCharacterHP = 1;	//辑滚俊辑绰   
				}
				
				if (SCharacterData.nCharacterHP > SCharacterData.nCharacterMAXHP) 
				{
					SCharacterData.nCharacterHP = SCharacterData.nCharacterMAXHP;
				}				
			}
			
			SetViewType(pTarget);
			pTarget->hp += pPacket->nLife;
			if (pTarget->hp <= 0)  pTarget->hp = 1;			
			if (pTarget->hp > pTarget->hpmax)  pTarget->hp = pTarget->hpmax;
			if (pPacket->nLife < 0)  
			{
				if( pPacket->bChangeAni )	// 030415 kyo
					ShowAnimation(ANI_STROKE, pTarget);
			}
			
			break;
		}	
	}
	
	ShowNumber(pPacket->nLife, pTarget);
}

void CBattleMgr::RecvCombatResultT(t_server_combat_result_t* pPacket)
{
	LPCHARACTER pTarget = ::ReturnCharacterPoint(pPacket->idTarget);
	if (pTarget == NULL)  return;
	
	switch (pPacket->nResult)
	{		
	case HIT_AND_DEAD:
		{
			break;
		}	
	case HIT_AND_NOTDEAD:
		{
			::ConditionSet(pTarget, pPacket->nState);	// 惑怕甫 犁汲沥
			
			if (pTarget == Hero) // 付过狼 措惑捞 官肺 唱牢 版快 
			{
				SCharacterData.condition = pTarget->condition;
			}
			
			SetViewType(pTarget);
			break;
		}	
	}
}

extern int GetItemAttr(int item_id, int attr);

bool CBattleMgr::IsThrow() const
{
	const int nKind = ::GetItemAttr(EquipItemAttr[WT_WEAPON].item_no, ITEM_KIND);
	
	switch (nKind)
	{
    case IK_HURL:      // 厘芭府 公扁 
    case IK_SHORT_BOW: 
	case IK_DUAL_BOW://030102 lsw
    case IK_LONG_BOW:  
    case IK_SNOW_BALL: return true;
	}
	
	return false;
}

bool CBattleMgr::IsThrow(int nEffect, bool bCast) const
{	//< CSD-031014
	switch (nEffect)
	{
    case FIRE_ARROW:
    case ICE_ARROW:
    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:
		{
			return true;
		}
	}	

	if (!bCast)
	{
		switch (nEffect)
		{
		case MULTIPLE_FIRE:
		case FLEET_MISSILE:
		case CONVERTING_ARMOR:
		case FIRE_EXTREME:
		case ICING_BLAST:
		case SHARK_MISSILE:
		case ICE_EXTREME:  return true;
		}
	}
	
	return false;
}	//> CSD-031014

extern bool g_bWarBegin;
extern bool CheckNotClickNation();
extern bool isOurSquad(LPCHARACTER hero,LPCHARACTER ch);

bool CBattleMgr::IsAttack(LPCHARACTER pCaster, LPCHARACTER pTarget, int nMagic) const
{ //< CSD-021021
	if (pCaster == NULL || pTarget == NULL)  return false;
	if (pTarget->type != SPRITETYPE_CHARACTER)  return true;
	if (g_GameInfo.lpcharacter == pTarget)  return true;
	if (pCaster->lpAttacked == pTarget)  return true;
	if (!IsThrow(nMagic, false))  return true;
	//> CSD-021021
	bool bResult = false;
	
	if (g_FightMapStart) /* 傈捧 甘俊辑 辑肺 促弗 评老版快 牧飘费 虐 绝捞档 急琶捞 啊瓷窍霸...*/
	{
		if (pCaster->fight_map_team_num  && pTarget->fight_map_team_num && 
			pCaster->fight_map_team_num != pTarget->fight_map_team_num)  
		{
			bResult = true;
		}
	}
	else if (pCaster->name_status.nation == pTarget->name_status.nation && GetBattlePeace() == PK_MODE)
	{	//< CSD-031212
		bResult = true;
	}	//> CSD-031212
#ifdef _NATION_APPLY_
	else if (pTarget->name_status.nation != pCaster->name_status.nation && pTarget->lv >= 1)
	{
		if (::CheckNotClickNation() == false)  bResult = true;
	}
#endif
	else if (::IsNK(pTarget) >= 5)  bResult = true;
	else if (Hero->fight_flag && Hero->fight_id == pTarget->id)  bResult 

⌨️ 快捷键说明

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