Merge pull request #98 from MindRapist/mr-10

This commit is contained in:
rtw1x1
2026-02-08 21:33:15 +00:00
committed by GitHub
6 changed files with 146 additions and 17 deletions

View File

@@ -48,34 +48,43 @@ void CActorInstance::INSTANCEBASE_Transform()
void CActorInstance::OnUpdate()
{
#ifdef __PERFORMANCE_CHECKER__
DWORD t1=ELTimer_GetMSec();
DWORD t1 = ELTimer_GetMSec();
#endif
if (!IsParalysis())
CGraphicThingInstance::OnUpdate();
#ifdef __PERFORMANCE_CHECKER__
DWORD t2=ELTimer_GetMSec();
DWORD t2 = ELTimer_GetMSec();
#endif
UpdateAttachingInstances();
#ifdef __PERFORMANCE_CHECKER__
DWORD t3=ELTimer_GetMSec();
DWORD t3 = ELTimer_GetMSec();
#endif
// celine skill fix
if (__IsInSplashTime())
UpdateSplashArea();
#ifdef __PERFORMANCE_CHECKER__
DWORD t4 = ELTimer_GetMSec();
#endif
// END OF celine skill fix
__BlendAlpha_Update();
#ifdef __PERFORMANCE_CHECKER__
DWORD t4=ELTimer_GetMSec();
DWORD t5 = ELTimer_GetMSec();
{
static FILE* fp=fopen("perf_actor_update2.txt", "w");
if (t4-t1>3)
if (t4 - t1 > 3)
{
fprintf(fp, "AIU2.Total %d (Time %f)\n",
t4-t1, ELTimer_GetMSec()/1000.0f);
fprintf(fp, "AIU2.GU %d\n", t2-t1);
fprintf(fp, "AIU2.UAI %d\n", t3-t2);
fprintf(fp, "AIU2.BAU %d\n", t4-t3);
t4-t1, ELTimer_GetMSec() / 1000.0f);
fprintf(fp, "AIU2.GU %d\n", t2 - t1);
fprintf(fp, "AIU2.UAI %d\n", t3 - t2);
fprintf(fp, "AIU2.BAU %d\n", t4 - t3);
fprintf(fp, "-------------------------------- \n");
fflush(fp);
}
@@ -646,6 +655,36 @@ void CActorInstance::AdjustDynamicCollisionMovement(const CActorInstance * c_pAc
}
}
// celine skill fix
void CActorInstance::UpdateSplashArea()
{
const CRaceMotionData::TMotionAttackingEventData* c_pAttackingData = m_kSplashArea.c_pAttackingEvent;
if (!c_pAttackingData)
return;
if (m_kSplashArea.SphereInstanceVector.size() != c_pAttackingData->CollisionData.SphereDataVector.size())
return;
float fRadian = D3DXToRadian(270.0f + 360.0f - GetRotation());
for (DWORD i = 0; i < c_pAttackingData->CollisionData.SphereDataVector.size(); ++i)
{
const TSphereData& c_rSphereData = c_pAttackingData->CollisionData.SphereDataVector[i].GetAttribute();
CDynamicSphereInstance& rSphereInstance = m_kSplashArea.SphereInstanceVector[i];
rSphereInstance.v3Position.x =
m_x + c_rSphereData.v3Position.x * sinf(fRadian) +
c_rSphereData.v3Position.y * cosf(fRadian);
rSphereInstance.v3Position.y =
m_y + c_rSphereData.v3Position.x * cosf(fRadian) -
c_rSphereData.v3Position.y * sinf(fRadian);
rSphereInstance.v3Position.z =
m_z + c_rSphereData.v3Position.z;
}
}
// END OF celine skill fix
void CActorInstance::__AdjustCollisionMovement(const CGraphicObjectInstance * c_pGraphicObjectInstance)
{

View File

@@ -324,6 +324,9 @@ class CActorInstance : public IActorInstance, public IFlyTargetableObject
virtual bool TestCollisionWithDynamicSphere(const CDynamicSphereInstance & dsi);
void UpdateAdvancingPointInstance();
// celine skill fix
void UpdateSplashArea();
// END OF celine skill fix
BOOL IsClickableDistanceDestInstance(CActorInstance & rkInstDst, float fDistance);

View File

@@ -1862,8 +1862,28 @@ void CInstanceBase::Update()
++ms_dwUpdateCounter;
StateProcess();
m_GraphicThingInstance.PhysicsProcess();
m_GraphicThingInstance.RotationProcess();
// celine skill fix
if (IsUsingSkill())
{
if (m_dwSkillTargetVID)
{
CInstanceBase* pTargetInstance =
CPythonCharacterManager::Instance().GetInstancePtr(m_dwSkillTargetVID);
if (pTargetInstance)
NEW_LookAtDestInstance(*pTargetInstance);
}
}
else
{
ClearSkillTarget();
}
// END OF celine skill fix
m_GraphicThingInstance.ComboProcess();
m_GraphicThingInstance.AccumulationMovement();
@@ -1873,6 +1893,7 @@ void CInstanceBase::Update()
NEW_GetPixelPosition(&kPPosCur);
DWORD dwCurTime=ELTimer_GetFrameMSec();
//if (m_dwNextUpdateHeightTime<dwCurTime)
{
m_dwNextUpdateHeightTime=dwCurTime;
@@ -3070,17 +3091,20 @@ void CInstanceBase::__Initialize()
m_dwRace = 0;
m_dwVirtualNumber = 0;
m_dwBaseCmdTime=0;
m_dwBaseChkTime=0;
m_dwSkipTime=0;
m_dwBaseCmdTime = 0;
m_dwBaseChkTime = 0;
m_dwSkipTime = 0;
m_GraphicThingInstance.Initialize();
m_dwAdvActorVID=0;
m_dwLastDmgActorVID=0;
m_dwAdvActorVID = 0;
// celine skill fix
m_dwSkillTargetVID = 0;
// END OF celine skill fix
m_dwLastDmgActorVID = 0;
m_nAverageNetworkGap=0;
m_dwNextUpdateHeightTime=0;
m_nAverageNetworkGap = 0;
m_dwNextUpdateHeightTime = 0;
// Moving by keyboard
m_iRotatingDirection = DEGREE_DIRECTION_SAME;
@@ -3141,3 +3165,15 @@ void CInstanceBase::SetLevel(DWORD dwLvl)
{
m_dwLevel = dwLvl;
}
// celine skill fix
void CInstanceBase::SetSkillTarget(DWORD dwVID)
{
m_dwSkillTargetVID = dwVID;
}
void CInstanceBase::ClearSkillTarget()
{
m_dwSkillTargetVID = 0;
}
// END OF celine skill fix

View File

@@ -508,6 +508,11 @@ class CInstanceBase
void SetMoveSpeed(UINT uMovSpd);
void SetRotationSpeed(float fRotSpd);
// celine skill fix
void SetSkillTarget(DWORD dwVID);
void ClearSkillTarget();
// END OF celine skill fix
const char * GetNameString();
int GetInstanceType();
DWORD GetPart(CRaceData::EParts part);
@@ -963,6 +968,9 @@ class CInstanceBase
int m_iRotatingDirection;
DWORD m_dwAdvActorVID;
// celine skill fix
DWORD m_dwSkillTargetVID;
// END OF celine skill fix
DWORD m_dwLastDmgActorVID;
LONG m_nAverageNetworkGap;

View File

@@ -1598,6 +1598,25 @@ enum EPointTypes
POINT_RESIST_NORMAL_DAMAGE, // 99
// MR-10: Added missing POINT_* values
POINT_HIT_HP_RECOVERY, // 100
POINT_HIT_SP_RECOVERY, // 101
POINT_MANASHIELD, // 102 흑신수호 스킬에 의한 마나쉴드 효과 정도
POINT_PARTY_BUFFER_BONUS, // 103
POINT_PARTY_SKILL_MASTER_BONUS, // 104
POINT_HP_RECOVER_CONTINUE, // 105
POINT_SP_RECOVER_CONTINUE, // 106
POINT_STEAL_GOLD, // 107
POINT_POLYMORPH, // 108 변신한 몬스터 번호
POINT_MOUNT, // 109 타고있는 몬스터 번호
POINT_PARTY_HASTE_BONUS, // 110
POINT_PARTY_DEFENDER_BONUS, // 111
// MR-10: -- END OF -- Added missing POINT_* values
POINT_STAT_RESET_COUNT = 112,
POINT_HORSE_SKILL = 113,
@@ -1616,6 +1635,9 @@ enum EPointTypes
POINT_NORMAL_HIT_DEFEND_BONUS, // 124 평타 방어 데미지
POINT_PC_BANG_EXP_BONUS, // 125
POINT_PC_BANG_DROP_BONUS, // 126 PC방 전용 드롭률 보너스
// MR-10: Added missing POINT_* values
POINT_RAMADAN_CANDY_BONUS_EXP, // 라마단 사탕 경험치 증가용
// MR-10: -- END OF -- Added missing POINT_* values
POINT_ENERGY = 128, // 128 기력
@@ -1626,6 +1648,20 @@ enum EPointTypes
// 임시로 이렇게 둔다.
POINT_ENERGY_END_TIME = 129, // 129 기력 종료 시간
// MR-10: Added missing POINT_* values
POINT_COSTUME_ATTR_BONUS = 130,
POINT_MAGIC_ATT_BONUS_PER = 131,
POINT_MELEE_MAGIC_ATT_BONUS_PER = 132,
// 추가 속성 저항
POINT_RESIST_ICE = 133, // 냉기 저항 : 얼음공격에 대한 대미지 감소
POINT_RESIST_EARTH = 134, // 대지 저항 : 얼음공격에 대한 대미지 감소
POINT_RESIST_DARK = 135, // 어둠 저항 : 얼음공격에 대한 대미지 감소
POINT_RESIST_CRITICAL = 136, // 크리티컬 저항 : 상대의 크리티컬 확률을 감소
POINT_RESIST_PENETRATE = 137, // 관통타격 저항 : 상대의 관통타격 확률을 감소
// MR-10: -- END OF -- Added missing POINT_* values
// 클라이언트 포인트
POINT_MIN_WEP = 200,
POINT_MAX_WEP,

View File

@@ -676,6 +676,13 @@ bool CPythonPlayer::__UseSkill(DWORD dwSlotIndex)
}
}
// celine skill fix
if (pkInstTarget && pkInstTarget != pkInstMain)
{
pkInstMain->SetSkillTarget(pkInstTarget->GetVirtualID());
}
// END OF celine skill fix
// 관격술 처리
DWORD dwTargetMaxCount = pSkillData->GetTargetCount(rkSkillInst.fcurEfficientPercentage);
DWORD dwRange = __GetSkillTargetRange(*pSkillData);