예제 #1
0
void CMonster::Die(CObject* pAttacker,BOOL bFatalDamage,BOOL bCritical, BOOL bDecisive)
{
	if(pAttacker)
		MOVEMGR->SetLookatPos(this,&pAttacker->GetCurPosition(),0,gCurTime);

	if( OBJECTMGR->GetSelectedObjectID() == GetID() )
	{
		OBJECTMGR->SetSelectedEffect( NULL );
	}

	int DieEffect;
	if(bFatalDamage)
		DieEffect = GAMERESRCMNGR->GetMonsterListInfo(GetMonsterKind())->Die2DramaNum;	// 날라가서 죽기
	else
		DieEffect = GAMERESRCMNGR->GetMonsterListInfo(GetMonsterKind())->Die1DramaNum;	// 그냥 죽기
		
	if(DieEffect != -1)
	{
		TARGETSET set;
		set.pTarget = this;
		set.ResultInfo.bCritical = bCritical;
		set.ResultInfo.bDecisive = bDecisive;
		
		EFFECTMGR->StartEffectProcess(DieEffect,pAttacker,&set,1,GetID(),
							EFFECT_FLAG_DIE|EFFECT_FLAG_GENDERBASISTARGET);
	}

	// Life 셋팅
	SetLife(0);
}
예제 #2
0
파일: particles.cpp 프로젝트: paud/d2x-xl
int CParticleSystem::Update (void)
{
	CParticleEmitter	*emitterP;
	int					i = 0;

if ((m_nObject == 0x7fffffff) && (m_nType == SMOKE_PARTICLES) &&
	 (gameStates.app.nSDLTicks - m_nBirth > (MAX_SHRAPNEL_LIFE / I2X (1)) * 1000))
	SetLife (0);
#if DBG
if ((m_nObject >= 0) && (m_nObject < 0x70000000) && (OBJECTS [m_nObject].info.nType == 255))
	i = i;
#endif
if ((emitterP = m_emitters.Buffer ())) {
	bool bKill = (m_nObject < 0) || ((m_nObject < 0x70000000) && 
					 ((OBJECTS [m_nObject].info.nSignature != m_nSignature) || (OBJECTS [m_nObject].info.nType == OBJ_NONE)));
	for (i = 0; i < m_nEmitters; ) {
		if (!m_emitters)
			return 0;
		if (emitterP->IsDead (gameStates.app.nSDLTicks)) {
			if (!RemoveEmitter (i)) {
				//particleManager.Destroy (m_nId);
				m_bDestroy = true;
				break;
				}
			}
		else {
			if (bKill)
				emitterP->SetLife (0);
			emitterP->Update (gameStates.app.nSDLTicks, -1);
			emitterP++, i++;
			}
		}
	}
return i;
}
예제 #3
0
파일: particles.cpp 프로젝트: paud/d2x-xl
int CParticleSystem::Render (void)
{
if (!m_bValid)
	return 0;

	int	h = 0;

if (m_emitters.Buffer ()) {
	if (!particleImageManager.Load (m_nType))
		return 0;
	if ((m_nObject >= 0) && (m_nObject < 0x70000000) &&
		 ((OBJECTS [m_nObject].info.nType == OBJ_NONE) ||
		  (OBJECTS [m_nObject].info.nSignature != m_nSignature) ||
		  (particleManager.GetObjectSystem (m_nObject) < 0)))
		SetLife (0);
	CParticleEmitter *emitterP = m_emitters.Buffer ();
	for (int i = m_nEmitters; i; i--, emitterP++)
		h += emitterP->Render (-1);
	}
#if DBG
if (!h)
	return 0;
#endif
return h;
}
예제 #4
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);
}
예제 #5
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);
}
예제 #6
0
파일: Stage.cpp 프로젝트: photon70/BTB
void CStage::Continue() {
	if (4 - GetContinue() > 0) {
		gContinue->Draw();
		SetDrawBlendMode(DX_BLENDMODE_INVSRC, 255);
		gNumber->Draw(453, 283, 4 - GetContinue());
		SetDrawBlendMode(DX_BLENDMODE_NOBLEND, 255);
		if (continueState) {
			gPauseP->Draw(320, 481);
			if ((Event.key.GetDown(Event.key.Z) || Event.key.GetDown(Event.key.RETURN))) {
				music->ResetLoopFlag();
				overFlag = true;
			}
		}
		else {
			gPauseP->Draw(320, 384);
			if ((Event.key.GetDown(Event.key.Z) || Event.key.GetDown(Event.key.RETURN))) {
				continueFlag = false;
				music->RestartLoop();

				if (GetPractice()) {
					SetLife(9, 9);
				}
				else {
					SetLife(2, 3);
					AddHaniwaBomb();
				}
				AddContinue();
			}
		}
		if (Event.key.GetDown(Event.key.UP) || Event.key.GetDown(Event.key.DOWN)) {
			if (continueState) {
				continueState = false;
			}
			else {
				continueState = true;
			}
		}
	}
	else {
		music->ResetLoopFlag();
		overFlag = true;
	}
}
예제 #7
0
// ------------------------------------------------------------------------------------------------
void ProjectileBase :: SetState(Uint32 setOwnerPlayerId, Vector2df setPos, Vector2df setHeading, float setSpeed, float setLife, Uint32 setHealth, bool setIsMoving)
{

	SetOwnerPlayerId(setOwnerPlayerId);
    SetPos(setPos);
    SetHeading(setHeading);
    SetSpeed(setSpeed);
    SetLife(setLife);
    SetHealth(setHealth);
    SetIsMoving(setIsMoving);
} // ----------------------------------------------------------------------------------------------
예제 #8
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);
}
예제 #9
0
파일: Enemy.cpp 프로젝트: Xivil/zemigame
void Enemy::SetAll( float x, float y, float z, int life, int timer, int shotpattern, int movepattern , int Itemflag){
	SetX(x);
	SetY(y);
	SetZ(z);
	SetLife(life);
	SetTimer(timer);
	this->Itemflag = Itemflag; 
	this->shotpattern = shotpattern;
	this->movepattern = movepattern;
	for(int i = 0; i < ESNUM; i++){
		es[i].graph = MV1LoadModel("aaaa.mqo");
		es[i].flag = 0;
		MV1SetScale(es[i].graph, VGet(0.01f, 0.01f, 0.01f));

	}
	score = life * 100;
	DeathTimer = 120;
}
예제 #10
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;
			}
		}
	}	
}
예제 #11
0
파일: hw02.c 프로젝트: KeyMaker13/portfolio
//main 
main(){
// 3 starting arrays
int a[row][col], b[row][col], c[row][col];

//telling user what to do
UserInstruct();

//make first array is all zero
InitStartArray(a,row,col); 

//asking user to set cells with life in them
SetLife(a); 

//printing array
printf("The life you have made in the grid\n");
PrintArray(a,row,col);

//ask user for number of generations
int generations = AskGeneration();

//play game
int genFinal;
int samePattern;
int numberOfGenerations = Game(generations, &genFinal,&samePattern,a,b,c);
 
printf("After %d generations this much life remaineds\n", numberOfGenerations);
if (samePattern){
printf("Steady state was reached\n");
}
//print out final array
 if (genFinal == one){
	PrintArray(a,row,col);
 }
 if (genFinal == two){
	PrintArray(b,row,col);
 }
 if (genFinal == three){
	PrintArray(c,row,col);
 } 
 

}
예제 #12
0
void Tank::TrackAnimation()
{
	++_TrackUpdateFrame;

	if (_TrackUpdateFrame == FPS * TRACKPOINT_CREATE_CYCLE)
	{
   		auto trackPoint = TrackPoint::Create();
		trackPoint->SetPosition(_Bullet->GetPosition());
		trackPoint->SetVisible(false);
		this->AddChild(trackPoint);
		
		_Track.push_back(trackPoint);

		_TrackUpdateFrame = 0;
	}

	for (auto iter = _Track.begin(); iter != _Track.end();)
	{
		auto trackPoint = *iter;

		trackPoint->SetStartPos(_Bullet->GetPosition());
		trackPoint->SetLife(TRACKPOINT_LIFE);
		trackPoint->SetPower(_Power);
		trackPoint->SetAngle(D3DXToRadian(_DegreeAngle));
		trackPoint->Update();

		if (!trackPoint->IsActive())
		{
			trackPoint->Release();
			iter = _Track.erase(iter);
		}
		else
		{
			++iter;
		}
	}
}
예제 #13
0
void CMonster::Heal(CObject* pHealer,BYTE HealKind,DWORD HealVal)
{
	SetLife(GetLife() + HealVal);
}
예제 #14
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);
}
예제 #15
0
파일: Api.cpp 프로젝트: RKX1209/Dnscript
void Api::_SetLife(Object* target,double life){
  int lifei = (int)(life);
  SetLife(target, lifei);
}
예제 #16
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);
}
예제 #17
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();
}
예제 #18
0
void CMapObject::Die(CObject* pAttacker,BOOL bFatalDamage,BOOL bCritical, BOOL bDecisive)
{
	SetLife(0);
	
	CObject::Die(pAttacker,bFatalDamage,bCritical,bDecisive);
}