📄 hero.cpp
字号:
sprintf( szValue, "%d / %d", GetNaeRyuk(), newMaxNaeRyuk );
cStatic* ps = (cStatic *)GAMEIN->GetGuageDlg()->GetWindowForID(CG_GUAGENAERYUKTEXT);
if( ps ) ps->SetStaticText( szValue );
}
void CHero::SetNaeRyuk(DWORD val, BYTE type)
{
if(val > GetMaxNaeRyuk())
{
// ASSERT(0);
}
// 牢磐其捞胶 芒 钎矫 荐摹 函版
DWORD dwMaxNaeRyuk = GetMaxNaeRyuk();
// if( dwMaxNaeRyuk == 0 )
// dwMaxNaeRyuk = 1;
if(m_HeroTotalInfo.wMaxNaeRyuk != 0)
((CObjectGuagen*)GAMEIN->GetGuageDlg()->GetWindowForID(CG_GUAGENAERYUK))->SetValue(
(float)val/(float)dwMaxNaeRyuk,
( type == 0 ? 0 : (1000/dwMaxNaeRyuk)*val) );
GAMEIN->GetCharacterDialog()->SetNaeRyuk(val);
// 牢磐其捞胶 : 荐摹 钎矫
char szValue[50];
sprintf( szValue, "%d / %d", val, dwMaxNaeRyuk );
cStatic* ps = (cStatic *)GAMEIN->GetGuageDlg()->GetWindowForID(CG_GUAGENAERYUKTEXT);
if( ps ) ps->SetStaticText( szValue );
// 荐摹函版
m_HeroTotalInfo.wNaeRyuk = val;
}
void CHero::SetGenGol(WORD val)
{
m_HeroTotalInfo.wGenGol = val;
STATSMGR->CalcCharStats(this);
// 牢磐其捞胶 芒 钎矫 荐摹 函版
GAMEIN->GetCharacterDialog()->SetGenGol();
GAMEIN->GetCharacterDialog()->SetAttackRate();
GAMEIN->GetCharacterDialog()->UpdateData();
}
void CHero::SetMinChub(WORD val)
{
m_HeroTotalInfo.wMinChub = val;
STATSMGR->CalcCharStats(this);
// 牢磐其捞胶 芒 钎矫 荐摹 函版
GAMEIN->GetCharacterDialog()->SetMinChub();
GAMEIN->GetCharacterDialog()->SetAttackRate();
GAMEIN->GetCharacterDialog()->UpdateData();
}
void CHero::SetCheRyuk(WORD val)
{
m_HeroTotalInfo.wCheRyuk = val;
STATSMGR->CalcCharStats(this);
// 牢磐其捞胶 芒 钎矫 荐摹 函版
GAMEIN->GetCharacterDialog()->SetCheRyuk();
GAMEIN->GetCharacterDialog()->SetDefenseRate();
GAMEIN->GetCharacterDialog()->UpdateData();
}
void CHero::SetSimMek(WORD val)
{
m_HeroTotalInfo.wSimMek = val;
STATSMGR->CalcCharStats(this);
// 牢磐其捞胶 芒 钎矫 荐摹 函版
GAMEIN->GetCharacterDialog()->SetSimMek();
GAMEIN->GetCharacterDialog()->UpdateData();
GAMEIN->GetCharacterDialog()->SetShield(GetShield());
GAMEIN->GetCharacterDialog()->SetNaeRyuk(GetNaeRyuk());
}
void CHero::SetMunpa()
{
GAMEIN->GetCharacterDialog()->RefreshMunpaInfo();
}
void CHero::SetFame(FAMETYPE val)
{
m_HeroTotalInfo.Fame = val;
GAMEIN->GetCharacterDialog()->SetFame(GetFame());
}
void CHero::SetBadFame( FAMETYPE val )
{
m_CharacterInfo.BadFame = val;
GAMEIN->GetCharacterDialog()->SetBadFame( val );
}
void CHero::StartSocietyAct( int nStartMotion, int nIngMotion, int nEndMotion, BOOL bHideWeapon )
{
if( GetState() != eObjectState_None && GetState() != eObjectState_Immortal )
{
if( GetState() == eObjectState_Society )
{
if( m_ObjectState.State_End_Motion != -1 ) //旧扁 悼累狼 版快
{
if( m_ObjectState.bEndState == TRUE )
return;
if( gCurTime - GetStateStartTime() < GetEngineObject()->GetAnimationTime(m_ObjectState.State_Start_Motion ) )
return;
OBJECTSTATEMGR->EndObjectState( this, GetState(), GetEngineObject()->GetAnimationTime( m_ObjectState.State_End_Motion ) );
return;
}
//呈公 腹篮 匙飘焢 皋矫瘤 焊郴绰巴阑 规瘤
if( gCurTime - GetStateStartTime() < 500 )
return;
}
else
{
return;
}
}
m_ObjectState.State_Start_Motion = (short int)nStartMotion;
m_ObjectState.State_Ing_Motion = (short int)nIngMotion;
m_ObjectState.State_End_Motion = (short int)nEndMotion;
if( nEndMotion != -1 )
m_ObjectState.State_End_MotionTime = GetEngineObject()->GetAnimationTime(nEndMotion);
else
m_ObjectState.State_End_MotionTime = 0;
if(m_ObjectState.State_Start_Motion != -1)
{
ChangeMotion( m_ObjectState.State_Start_Motion, FALSE );
if( m_ObjectState.State_Ing_Motion != -1 )
ChangeBaseMotion( m_ObjectState.State_Ing_Motion );
}
if( bHideWeapon )
APPEARANCEMGR->HideWeapon( this );
m_ObjectState.BeforeState = m_BaseObjectInfo.ObjectState;
m_BaseObjectInfo.ObjectState = eObjectState_Society;
m_ObjectState.State_Start_Time = gCurTime;
m_ObjectState.bEndState = FALSE;
if( m_ObjectState.State_Ing_Motion == -1 )
OBJECTSTATEMGR->EndObjectState( this, eObjectState_Society, GetEngineObject()->GetAnimationTime( m_ObjectState.State_Start_Motion ) );
}
BOOL CHero::EndSocietyAct()
{
if( m_ObjectState.State_Ing_Motion != -1 )
{
return FALSE;
}
return TRUE;
}
void CHero::OnStartObjectState(BYTE State)
{
CPlayer::OnStartObjectState(State);
}
void CHero::OnEndObjectState(BYTE State)
{
switch(State)
{
case eObjectState_Deal:
{
HERO->HeroStateNotify(eObjectState_Deal);
}
break;
case eObjectState_SkillUsing:
case eObjectState_SkillBinding:
SKILLMGR->OnComboTurningPoint(this);
break;
case eObjectState_SkillSyn:
{
#ifndef _TESTCLIENT_
if(SKILLMGR->GetSkillObject(TEMP_SKILLOBJECT_ID) != NULL) // 辑滚俊辑 览翠捞 救柯版快
OBJECTSTATEMGR->StartObjectState(this,eObjectState_SkillUsing);
else
SKILLMGR->OnComboTurningPoint(this);
#else
SKILLMGR->OnComboTurningPoint(this);
#endif
}
break;
case eObjectState_Move:
{
if(PARTYMGR->GetTacticObjectID())
{
TACTICMGR->HeroTacticJoin();
}
}
break;
case eObjectState_SkillStart:
{
if(m_SkillStartAction.GetActionKind() != eActionKind_Skill_RealExecute)
break;
m_SkillStartAction.ExcuteAction(this);
m_SkillStartAction.Clear();
}
break;
}
CPlayer::OnEndObjectState(State);
}
//////////////////////////////////////////////////////////////////////////
// 青悼 窃荐甸..
void CHero::Die(CObject* pAttacker,BOOL bFatalDamage,BOOL bCritical)
{
// ASSERT(GetLife() == 0);
WINDOWMGR->CloseAllMsgBox();
GAMEIN->GetDealDialog()->SetDisable(FALSE);
GAMEIN->GetDealDialog()->SetActive(FALSE); // 惑痢芒 摧扁
GAMEIN->GetNpcScriptDialog()->SetDisable(FALSE); //NPC芒档 摧扁
GAMEIN->GetNpcScriptDialog()->SetActive(FALSE);
//碍拳 盒秦 殿鞭诀芒 摧扁 -- 风泼寸且 荐 档 乐栏聪..
if( GAMEIN->GetUpgradeDialog()->IsActive() &&
!GAMEIN->GetUpgradeDialog()->IsDisable() )
{
GAMEIN->GetUpgradeDialog()->Release();
GAMEIN->GetUpgradeDialog()->SetActiveRecursive( FALSE );
}
if( GAMEIN->GetMixDialog()->IsActive() &&
!GAMEIN->GetMixDialog()->IsDisable() )
{
GAMEIN->GetMixDialog()->Release();
GAMEIN->GetMixDialog()->SetActiveRecursive( FALSE );
}
if( GAMEIN->GetReinforceDialog()->IsActive() &&
!GAMEIN->GetReinforceDialog()->IsDisable() )
{
GAMEIN->GetReinforceDialog()->Release();
GAMEIN->GetReinforceDialog()->SetActiveRecursive( FALSE );
}
if( GAMEIN->GetDissolutionDialog()->IsActive() &&
!GAMEIN->GetDissolutionDialog()->IsDisable() )
{
GAMEIN->GetDissolutionDialog()->SetActive( FALSE );
}
//
SetMovingAction(NULL);
DisableAutoAttack(); // 坷配傍拜 掺扁
SetLife(0);
// LBS 03.10.04 磷菌阑锭 畴痢惑阑 摧绰促. //咯扁辑? 磷栏搁 甘辑滚俊辑 秒家秦林绰 巴捞 亮阑刨单?
STREETSTALLMGR->CloseStreetStall();
if( pAttacker )
if(pAttacker->GetObjectKind() & eObjectKind_Monster )
{
// GAMEEVENTMGR->AddEvent(eGameEvent1_HeroDie);
if( GetLevel() < 5 )
GAMEEVENTMGR->AddEvent(eGameEvent_Die);
else
GAMEEVENTMGR->AddEvent(eGameEvent_DieAfter5);
}
if(GAMEIN->GetCharStateDialog())
GAMEIN->GetCharStateDialog()->SetUngiMode( FALSE );
DWORD time = 0;
if( bFatalDamage )
time = HERO->GetEngineObject()->GetAnimationTime(eMotion_Died_Fly);
else
time = HERO->GetEngineObject()->GetAnimationTime(eMotion_Died_Normal);
CAMERA->SetCharState( eCS_Die, time );
CPlayer::Die(pAttacker,bFatalDamage,bCritical);
GAMEIN->GetCharacterDialog()->SetAttackRate();
GAMEIN->GetCharacterDialog()->SetDefenseRate();
GAMEIN->GetCharacterDialog()->UpdateData();
SKILLMGR->RemoveTarget(this, SKILLRESULTKIND_POSITIVE|SKILLRESULTKIND_NEGATIVE);
}
void CHero::Damage(CObject* pAttacker,BYTE DamageKind,DWORD Damage,DWORD ShieldDamage,BOOL bCritical)
{
//////////////////////////////////////////////////////////////////////////
// 墨皋扼 第肺 剐覆
VECTOR3 push;
MATRIX4 my;
SetVector3(&push,0,0,30);
SetRotationYMatrix(&my,-m_RotateInfo.Angle.ToRad());
TransformVector3_VPTR2(&push,&push,&my,1);
CAMERA->SetPushedVibration(&push,200);
//////////////////////////////////////////////////////////////////////////
CPlayer::Damage(pAttacker,DamageKind,Damage,ShieldDamage,bCritical);
}
void CHero::OnHitTarget(CObject* pMainTarget)
{
//////////////////////////////////////////////////////////////////////////
// 林牢傍苞 单固瘤 涝绰 皋牢鸥百苞 啊鳖快搁 炼陛究 冻绢飘覆
VECTOR3 targetpos = pMainTarget->GetCurPosition();
VECTOR3 Curpos = HERO->GetCurPosition();
float WeaponMinDistance;
switch(GetWeaponEquipType())
{
case WP_GUM: WeaponMinDistance = 150; break;
case WP_GWUN: WeaponMinDistance = 100; break;
case WP_DO: WeaponMinDistance = 150; break;
case WP_CHANG: WeaponMinDistance = 150; break;
case WP_GUNG: WeaponMinDistance = 100; break;
case WP_AMGI: WeaponMinDistance = 100; break;
default: ASSERT(0);
}
if(CalcDistanceXZ(&targetpos,&Curpos) < WeaponMinDistance)
{
VECTOR3 pos; pos.x = 0; pos.y = 0; pos.z = 10.f;
float angle = HERO->GetAngle();
TransToRelatedCoordinate(&pos,&pos,angle);
pos = pos + Curpos;
MOVEMGR->HeroEffectMove(HERO,&pos,0,0);
}
}
void CHero::ClearTarget(CObject* pObject)
{
if(m_AutoAttackTarget.GetTargetID() == pObject->GetID())
DisableAutoAttack();
if(m_NextAction.GetTargetID() == pObject->GetID())
{
m_NextAction.Clear();
}
}
void CHero::Revive(VECTOR3* pRevivePos)
{
DisableAutoAttack();
CAMERA->SetCharState( eCS_Normal, 0 ); //老绢唱绰 悼累捞 绝促.
CPlayer::Revive(pRevivePos);
}
BOOL CHero::GetKyungGongMode()
{
return m_bIsKyungGongMode;
}
void CHero::SetKyungGongMode(BOOL bMode)
{
m_bIsKyungGongMode = bMode;
if( m_bIsKyungGongMode == FALSE )
{
if(MOVEMGR->IsMoving(this) && m_MoveInfo.KyungGongIdx != 0)
MOVEMGR->ToggleHeroKyungGongMode();
}
else
{
if(MOVEMGR->IsMoving(this) && m_MoveInfo.KyungGongIdx != 0)
MOVEMGR->ToggleHeroKyungGongMode();
}
//KES CHARSTATEDLG 031016
if(GAMEIN->GetCharStateDialog())
GAMEIN->GetCharStateDialog()->SetKyungGongMode( m_bIsKyungGongMode );
//
// OPTIONMGR->SetKyungGongMode(m_bIsKyungGongMode);//***
}
int CHero::GetMugongLevel(WORD MugongIdx)
{
if(MugongIdx < 100) // 霓焊
return 1;
CMugongBase* pMugong = MUGONGMGR->GetMugongByMugongIdx(MugongIdx);
if(pMugong == NULL)
return 0;
return pMugong->GetSung();
}
void CHero::AddStatus(CStatus* pStatus)
{
CObject::AddStatus(pStatus);
MOVEMGR->RefreshHeroMove();
SetMaxLife(m_CharacterInfo.MaxLife);
SetMaxShield(m_CharacterInfo.MaxShield);
SetMaxNaeRyuk(m_HeroTotalInfo.wMaxNaeRyuk);
GAMEIN->GetCharacterDialog()->SetAttackRate();
GAMEIN->GetCharacterDialog()->SetDefenseRate();
GAMEIN->GetCharacterDialog()->UpdateData();
}
void CHero::RemoveStatus(CStatus* pStatus)
{
CObject::RemoveStatus(pStatus);
MOVEMGR->RefreshHeroMove();
/*
((cGuage*)GAMEIN->GetGuageDlg()->GetWindowForID(CG_GUAGENAERYUK))->SetMaxValue(GetMaxNaeRyuk());
GAMEIN->GetCharacterDialog()->SetNaeRyuk(m_HeroTotalInfo.wNaeRyuk);
((cGuage*)GAMEIN->GetGuageDlg()->GetWindowForID(CG_GUAGELIFE))->SetMaxValue(GetMaxLife());
GAMEIN->GetCharacterDialog()->SetLife(m_CharacterInfo.Life);
*/
GAMEIN->GetCharacterDialog()->SetAttackRate();
GAMEIN->GetCharacterDialog()->SetDefenseRate();
GAMEIN->GetCharacterDialog()->UpdateData();
}
DWORD CHero::DoGetPhyAttackPowerMin()
{
const player_calc_stats * pChar_stats = GetCharStats();
const player_calc_stats * pItem_stats = GetItemStats();
WORD WeaponKind = GetWeaponEquipType();
if(WeaponKind == WP_GUNG || WeaponKind == WP_AMGI)
{
WORD MinChub = (pChar_stats->MinChub + pItem_stats->MinChub);
return (CalcRangeAttackPower(MinChub,pItem_stats->RangeAttackPowerMin)
+ GetAbilityStats()->GetPhyAttackUp(WeaponKind))
* (1+GetItemStats()->RangeAttackPowerAddRateMin);
}
else
{
WORD GenGol = (pChar_stats->GenGol + pItem_stats->GenGol);
return (CalcMeleeAttackPower(GenGol,pItem_stats->MeleeAttackPowerMin)
+ GetAbilityStats()->GetPhyAttackUp(WeaponKind))
* (1+GetItemStats()->MeleeAttackPowerAddRateMin);
}
}
DWORD CHero::DoGetPhyAttackPowerMax()
{
const player_calc_stats * pChar_stats = GetCharStats();
const player_calc_stats * pItem_stats = GetItemStats();
WORD WeaponKind = GetWeaponEquipType();
if(WeaponKind == WP_GUNG || WeaponKind == WP_AMGI)
{
WORD MinChub = (pChar_stats->MinChub + pItem_stats->MinChub);
return (CalcRangeAttackPower(MinChub,pItem_stats->RangeAttackPowerMax)
+ GetAbilityStats()->GetPhyAttackUp(WeaponKind))
* (1+GetItemStats()->RangeAttackPowerAddRateMax);
}
else
{
WORD GenGol = (pChar_stats->GenGol + pItem_stats->GenGol);
return (CalcMeleeAttackPower(GenGol,pItem_stats->MeleeAttackPowerMax)
+ GetAbilityStats()->GetPhyAttackUp(WeaponKind))
* (1+GetItemStats()->MeleeAttackPowerAddRateMax);
}
}
/* 辆丰秦具且 惑怕蔼阑 辑滚俊档 舅赴促. */
void CHero::HeroStateNotify(BYTE EndState)
{
MSG_BYTE msg;
msg.Category = MP_CHAR;
msg.Protocol = MP_CHAR_STATE_NOTIFY;
msg.dwObjectID = GetID();
msg.bData = EndState;
NETWORK->Send(&msg, sizeof(msg));
}
BYTE CHero::GetNaeRyukPercent()
{
return (BYTE)((GetNaeRyuk()*100) / GetMaxNaeRyuk());
}
DWORD CHero::DoGetMaxNaeRyuk()
{
return m_HeroTotalInfo.wMaxNaeRyuk;
}
void CHero::ClearGuildInfo()
{
SafeStrCpy(m_HeroTotalInfo.MunpaName, "", MAX_GUILD_NAME);
CPlayer::ClearGuildInfo();
}
char* CHero::GetGuildEntryDate()
{
return m_HeroTotalInfo.MunpaCanEntryDate;
}
void CHero::SetGuildEntryDate(char* day)
{
SafeStrCpy(m_HeroTotalInfo.MunpaCanEntryDate, day, 11);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -