// 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); }
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(); }
// 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); }
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)); } }
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(), "в╚"); } } }
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; } } } }
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(); }
void CMonster::Heal(CObject* pHealer,BYTE HealKind,DWORD HealVal) { SetLife(GetLife() + HealVal); }
// 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); }
// 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); }