Beispiel #1
0
// 080910 LUJ, 데미지 상태 처리를 RESULTINFO 구조체를 받아 처리하도록 함
void CMapObject::Damage(CObject* pAttacker,BYTE DamageKind,DWORD Damage,const RESULTINFO& result)
{	
	if( pAttacker )
	{
		if( OPTIONMGR->IsShowMemberDamage() )
		{
			if( pAttacker == HERO || pAttacker == HEROPET || PARTYMGR->IsPartyMember( pAttacker->GetID() ) )
				EFFECTMGR->AddDamageNumber(Damage,pAttacker,this,DamageKind,result);
		}
		else
		{
			if( pAttacker == HERO || pAttacker == HEROPET )
				EFFECTMGR->AddDamageNumber(Damage,pAttacker,this,DamageKind,result);
		}

	}
	
	// Life 셋팅
	DWORD life = GetLife();
	if(life < Damage)
		life = 0;
	else
		life = life - Damage;
	SetLife(life);
}
Beispiel #2
0
inline bool MtgCard::operator==(const MtgCard& rhs) {
    return GetLayout() == rhs.GetLayout() &&
            GetManacost() == rhs.GetManacost() &&
            GetCmc() == rhs.GetCmc() &&
            CompareStringList(GetColors(), rhs.GetColors()) &&
            type == rhs.type &&
            CompareStringList(GetSupertypes(), rhs.GetSupertypes()) &&
            CompareStringList(GetTypes(), rhs.GetTypes()) &&
            CompareStringList(GetSubtypes(), rhs.GetSubtypes()) &&
            GetRarity() == rhs.GetRarity() &&
            text == rhs.GetText() &&
            GetFlavor() == rhs.GetFlavor() &&
            GetArtist() == rhs.GetArtist() &&
            GetNumber() == rhs.GetNumber() &&
            GetPower() == rhs.GetPower() &&
            GetToughness() == rhs.GetToughness() &&
            GetLoyalty() == rhs.GetLoyalty() &&
            GetMultiverseid() == rhs.GetMultiverseid() &&
            CompareIntList(GetVariations(), rhs.GetVariations()) &&
            GetImageName() == rhs.GetImageName() &&
            GetWatermark() == rhs.GetWatermark() &&
            GetBorder() == rhs.GetBorder() &&
            IsTimeshifted() == rhs.IsTimeshifted() &&
            GetHand() == rhs.GetHand() &&
            GetLife() == rhs.GetLife() &&
            IsReserved() == rhs.IsReserved() &&
            GetReleasedate() == rhs.GetReleasedate() &&
            IsStarter() == rhs.IsStarter() &&
            CompareStringPairList(GetRulings(), rhs.GetRulings()) &&
            CompareStringPairList(GetForeignNames(), rhs.GetForeignNames()) &&
            GetOriginalText() == rhs.GetOriginalText() &&
            GetOriginalType() == rhs.GetOriginalType() &&
            CompareStringPairList(GetLegalities(), rhs.GetLegalities()) &&
            GetEdition() == rhs.GetEdition();
}
Beispiel #3
0
// 080910 LUJ, 데미지 상태 처리를 RESULTINFO 구조체를 받아 처리하도록 함
void CBossMonster::Damage(CObject* pAttacker,BYTE DamageKind,DWORD Damage,const RESULTINFO& result)
{	
//	CheckTmpFunc();

	SetObjectBattleState( eObjectBattleState_Battle );

	if(Damage != 0)
	{
		const int DamageEffect = GAMERESRCMNGR->GetMonsterListInfo(GetMonsterKind())->Damage1DramaNum;

		if(DamageEffect != -1)
		{
			TARGETSET set;
			set.pTarget = this;
			set.ResultInfo = result;
			
			EFFECTMGR->StartEffectProcess(DamageEffect,pAttacker,&set,1,GetID());
		}
	}

	if( pAttacker )
	{
		if( pAttacker != HEROPETBACKUP )
			pAttacker->SetObjectBattleState( eObjectBattleState_Battle );

		if(pAttacker->GetID() == gHeroID ||
			pAttacker == HEROPET ||
			OPTIONMGR->IsShowMemberDamage() && PARTYMGR->IsPartyMember(pAttacker->GetID()))
		{
			EFFECTMGR->AddDamageNumber(
				Damage,
				pAttacker,
				this,
				DamageKind,result);
		}
		else if(eObjectKind_Monster & pAttacker->GetObjectKind())
		{
			CMonster* const monster = (CMonster*)pAttacker;

			if(monster->GetMonsterTotalInfo().OwnedObjectIndex == gHeroID)
			{
				EFFECTMGR->AddDamageNumber(
					Damage,
					pAttacker,
					this,
					DamageKind,result);
			}
		}
	}
	
	// Life 셋팅
	DWORD life = GetLife();
	if(life < Damage)
		life = 0;
	else
		life = life - Damage;
	SetLife(life);
}
Beispiel #4
0
void CPet::Heal(CObject* pHealer,BYTE HealKind,DWORD HealVal)
{

	// desc_hseos_전투평화상태01
	// S 전투평화상태 주석처리 added by hseos 2007.08.02
	if( GetObjectBattleState() == eObjectBattleState_Battle )
	{
		if( pHealer )	
			pHealer->SetObjectBattleState( eObjectBattleState_Battle );
	}
	// E 전투평화상태 주석처리 added by hseos 2007.08.02

	DWORD life = GetLife() + HealVal;
	SetLife(life);
}
void CFieldSubMonster::SetLife(DWORD Life,BOOL bSendMsg)
{
	CMonster::SetLife(Life, bSendMsg);	
	
	if(bSendMsg)
	{
		MSG_DWORD3 msg;
		msg.Category = MP_BOSSMONSTER;
		msg.Protocol = MP_FIELD_LIFE_NOTIFY;
		msg.dwData1 = GetLife();
		msg.dwData2 = GetMonsterKind();
		msg.dwData3 = GetID();
		PACKEDDATA_OBJ->QuickSend(this,&msg,sizeof(msg));
	}
}
Beispiel #6
0
void CTerrain::Render()
{
	if (GetLife())
	{
		if (GetState() == SPACE)
		{
		}
		else if (GetState() == WALL)
		{
			CScreen::ScreenPrint(pos.GetX() * 2, pos.GetY(), "бр");
		}
		else if (GetState() == BLACKWALL)
		{
			CScreen::ScreenPrint(pos.GetX() * 2, pos.GetY(), "в╚");
		}
	}
}
Beispiel #7
0
void LifeMeterTime::Update( float fDeltaTime )
{
	// update current stage stats so ScoreDisplayLifeTime can show the right thing
	float fSecs = GetLifeSeconds();
	fSecs = max( 0, fSecs );
	m_pPlayerStageStats->m_fLifeRemainingSeconds = fSecs;
	
	LifeMeter::Update( fDeltaTime );

	m_pStream->SetPercent( GetLife() );
	m_pStream->SetPassingAlpha( 0 );
	m_pStream->SetHotAlpha( 0 );

	if( m_pPlayerState->m_HealthState == HealthState_Danger )
		m_quadDangerGlow.SetDiffuseAlpha( 1 );
	else
		m_quadDangerGlow.SetDiffuseAlpha( 0 );
}
void CFieldSubMonster::Recover()	
{
	if(m_Info.m_dwPieceTime + m_Info.m_dwRecoverStartTime < gCurTime)
	{
		DWORD maxlife = GetMaxLife();
		DWORD curlife = GetLife();
		
		if(gCurTime - m_LifeRecoverTime.lastCheckTime > m_Info.m_dwRecoverDelayTime)
		{
			if(curlife < maxlife)
			{
				DWORD pluslife = (DWORD)(maxlife * m_Info.m_fLifeRate);
				SetLife(curlife + pluslife, TRUE);
				m_LifeRecoverTime.lastCheckTime = gCurTime;
			}
		}
	}	
}
Beispiel #9
0
void CMonster::Process()
{
	if(IsDied())
	{
		DWORD time = REMOVEFADE_START_TIME;
		if(GetObjectKind() == eObjectKind_BossMonster)
		{
			time += 5000;
		}

		if( gCurTime - m_DiedTime > time )
		{
			ShowObjectName( FALSE );
			ShowChatBalloon( FALSE, NULL );
			//그림자도 없애주자.
			if(m_ShadowObj.IsInited())
			{
				m_ShadowObj.Release();
			}

			DWORD ToTime = time;
			DWORD ElTime = gCurTime - m_DiedTime - time;
			float alp = 1 - (ElTime / (float)ToTime);
			if(alp <= 0)
				alp = 0;
			GetEngineObject()->SetAlpha(alp);
		}
#ifdef _TESTCLIENT_
		if(gCurTime - m_DiedTime > MONSTERREMOVE_TIME)
		{
			OBJECTMGR->AddGarbageObject(this);
		}
#endif
	}
	else
	{
		const EObjectKind objectKind = EObjectKind( GetSInfo() ? GetSInfo()->ObjectKind : eObjectKind_None );

		switch( objectKind )
		{
			// 080616 LUJ, 함정인 경우 초당 1씩 피를 감소시키고, 최후에는 자살시킨다
		case eObjectKind_Trap:
			{
				if( gCurTime < mLastCheckedTick )
				{
					break;
				}
				else if( ! GetLife() )
				{
					SetDieFlag();
					break;
				}

				SetLife( GetLife() - 1 );
				mLastCheckedTick = gCurTime + 1000;
				break;
			}
		}
	}

	if(GetObjectKind() == eObjectKind_BossMonster)
	{
		CBossMonster* const pMon = (CBossMonster*)this;

		// 080109 KTH -- 보스 몬스터 등장 연출
		if( pMon && pMon->IsOpenning() )
		{
			if( pMon->GetOpenningTime()->Check() == 0 )
			{
				pMon->GetEngineObject()->EnablePick();
				pMon->SetOpenningEnd();
			}
		}
	}
	
	CObject::Process();
}
Beispiel #10
0
void CMonster::Heal(CObject* pHealer,BYTE HealKind,DWORD HealVal)
{
	SetLife(GetLife() + HealVal);
}
Beispiel #11
0
// 080910 LUJ, 데미지 상태 처리를 RESULTINFO 구조체를 받아 처리하도록 함
void CMonster::Damage(CObject* pAttacker,BYTE DamageKind,DWORD Damage,const RESULTINFO& result)
{	
	SetObjectBattleState( eObjectBattleState_Battle );

	// 091218 LUJ, 널포인터 예외가 발생해서 검사를 추가함
	if(pAttacker &&
		pAttacker != HEROPETBACKUP)
	{
		pAttacker->SetObjectBattleState( eObjectBattleState_Battle );
	}

	if(Damage != 0)
	{
		if(GetState() == eObjectState_None)
		{
			if(pAttacker)
				MOVEMGR->SetLookatPos(this,&pAttacker->GetCurPosition(),0,gCurTime);

			ChangeMotion(1,FALSE);
			switch(DamageKind) {
			case eDamageKind_Front:
				ChangeMotion(eMonsterMotion_DamageFront,FALSE);
				break;
			case eDamageKind_Left:
				ChangeMotion(eMonsterMotion_DamageLeft,FALSE);
				break;
			case eDamageKind_Right:
				ChangeMotion(eMonsterMotion_DamageRight,FALSE);
				break;
			}	
		}
		
		int DamageEffect = GAMERESRCMNGR->GetMonsterListInfo(GetMonsterKind())->Damage1DramaNum;

		if(DamageEffect != -1)
		{
			TARGETSET set;
			set.pTarget = this;
			set.ResultInfo = result;
			
			EFFECTMGR->StartEffectProcess(
				DamageEffect,
				pAttacker,
				&set,
				1,
				GetID(),
				EFFECT_FLAG_GENDERBASISTARGET);

			if( result.bCritical )
			{
				TARGETSET set;
				set.pTarget = this;
				EFFECTMGR->StartEffectProcess(19,this,&set,0,GetID());
			}
		}
	}

	if( pAttacker )
	{
		if(pAttacker->GetID() == gHeroID ||
			pAttacker == HEROPET ||
			GetMonsterTotalInfo().OwnedObjectIndex == gHeroID ||
			OPTIONMGR->IsShowMemberDamage() && PARTYMGR->IsPartyMember(pAttacker->GetID()))
		{
			EFFECTMGR->AddDamageNumber(
				Damage,
				pAttacker,
				this,
				DamageKind,result);
		}
		else if(eObjectKind_Monster & pAttacker->GetObjectKind())
		{
			CMonster* const monster = (CMonster*)pAttacker;

			if(monster->GetMonsterTotalInfo().OwnedObjectIndex == gHeroID)
			{
				EFFECTMGR->AddDamageNumber(
					Damage,
					pAttacker,
					this,
					DamageKind,result);
			}
		}
	}
	
	// Life 셋팅
	DWORD life = GetLife();
	if(life < Damage)
		life = 0;
	else
		life = life - Damage;
	SetLife(life);
}
Beispiel #12
0
// 080910 LUJ, 데미지 상태 처리를 RESULTINFO 구조체를 받아 처리하도록 함
void CPet::Damage(CObject* pAttacker,BYTE DamageKind,DWORD Damage,const RESULTINFO& result)
{
	// desc_hseos_전투평화상태01
	// S 전투평화상태 주석처리 added by hseos 2007.08.02
	SetObjectBattleState( eObjectBattleState_Battle );
	if (pAttacker)
		pAttacker->SetObjectBattleState( eObjectBattleState_Battle );
	// E 전투평화상태 주석처리 added by hseos 2007.08.02

	if(Damage != 0)
	{
		if(GetState() == eObjectState_None)
		{
			if(pAttacker)
				MOVEMGR->SetLookatPos(this,&pAttacker->GetCurPosition(),0,gCurTime);
		}
		
		if(GetState() == eObjectState_None)
		{
			// 091110 ONS 펫 애니메이션 추가
			ChangeMotion(GetMotionIDX(eMonsterMotionN_Damage),FALSE);
		}
		
		int DamageEffect = -1;

		if( result.bCritical )
		{
			DamageEffect = eEffect_CriticalDamage;
		}
		else
		{
			DamageEffect = eEffect_NormalDamage;
		}

		if(DamageEffect != -1)
		{
			TARGETSET set;
			set.pTarget = this;
			set.ResultInfo = result;
			
			EFFECTMGR->StartEffectProcess(DamageEffect,pAttacker,&set,1,GetID(),
											EFFECT_FLAG_GENDERBASISTARGET);

			if( result.bCritical )
			{
				TARGETSET set;
				set.pTarget = this;
				EFFECTMGR->StartEffectProcess(19,this,&set,0,GetID());
			}
		}
	}

	if( pAttacker == HERO || pAttacker == HEROPET || this == HEROPET )
	{
		EFFECTMGR->AddDamageNumber(Damage,pAttacker,this,DamageKind,result);
	}

	// Life 셋팅
	DWORD life = GetLife();
	if(life < Damage)
		life = 0;
	else
		life = life - Damage;
	SetLife(life);
}