Merge branch 'main' into mr-2
This commit is contained in:
@@ -380,14 +380,14 @@ typedef struct SPlayerTable
|
|||||||
int16_t st, ht, dx, iq;
|
int16_t st, ht, dx, iq;
|
||||||
|
|
||||||
uint32_t exp;
|
uint32_t exp;
|
||||||
INT gold;
|
int32_t gold;
|
||||||
|
|
||||||
uint8_t dir;
|
uint8_t dir;
|
||||||
INT x, y, z;
|
int32_t x, y, z;
|
||||||
INT lMapIndex;
|
int32_t lMapIndex;
|
||||||
|
|
||||||
int32_t lExitX, lExitY;
|
int32_t lExitX, lExitY;
|
||||||
int32_t lExitMapIndex;
|
int32_t lExitMapIndex;
|
||||||
|
|
||||||
// int16_t hp;
|
// int16_t hp;
|
||||||
// int16_t sp;
|
// int16_t sp;
|
||||||
|
|||||||
@@ -361,11 +361,9 @@ void CHARACTER::Initialize()
|
|||||||
m_bIsLoadedAffect = false;
|
m_bIsLoadedAffect = false;
|
||||||
cannot_dead = false;
|
cannot_dead = false;
|
||||||
|
|
||||||
#ifdef FIX_BATTLE_INACTIVITY_TIMEOUT
|
|
||||||
// tw1x1: POS_FIGHTING timer fix
|
// tw1x1: POS_FIGHTING timer fix
|
||||||
m_dwLastCombatTime = 0;
|
m_dwLastCombatTime = 0;
|
||||||
// tw1x1: end
|
// tw1x1: end
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef __PET_SYSTEM__
|
#ifdef __PET_SYSTEM__
|
||||||
m_petSystem = 0;
|
m_petSystem = 0;
|
||||||
@@ -4110,8 +4108,6 @@ void CHARACTER::UpdateStateMachine(DWORD dwPulse)
|
|||||||
if (IsDead())
|
if (IsDead())
|
||||||
return;
|
return;
|
||||||
|
|
||||||
#ifdef FIX_BATTLE_INACTIVITY_TIMEOUT
|
|
||||||
// tw1x1: POS_FIGHTING timer fix
|
|
||||||
if (IsPC() && IsPosition(POS_FIGHTING))
|
if (IsPC() && IsPosition(POS_FIGHTING))
|
||||||
{
|
{
|
||||||
const DWORD now = get_dword_time();
|
const DWORD now = get_dword_time();
|
||||||
@@ -4123,8 +4119,6 @@ void CHARACTER::UpdateStateMachine(DWORD dwPulse)
|
|||||||
if (now - m_dwLastCombatTime >= 10000)
|
if (now - m_dwLastCombatTime >= 10000)
|
||||||
SetVictim(NULL); // triggers battle_end() -> POS_STANDING
|
SetVictim(NULL); // triggers battle_end() -> POS_STANDING
|
||||||
}
|
}
|
||||||
// tw1x1: end
|
|
||||||
#endif
|
|
||||||
|
|
||||||
Update();
|
Update();
|
||||||
m_dwNextStatePulse = dwPulse + m_dwStateDuration;
|
m_dwNextStatePulse = dwPulse + m_dwStateDuration;
|
||||||
|
|||||||
@@ -2045,8 +2045,6 @@ class CHARACTER : public CEntity, public CFSM, public CHorseRider
|
|||||||
int m_iLastPMPulse;
|
int m_iLastPMPulse;
|
||||||
int m_iPMCounter;
|
int m_iPMCounter;
|
||||||
|
|
||||||
#ifdef FIX_BATTLE_INACTIVITY_TIMEOUT
|
|
||||||
// tw1x1: POS_FIGHTING timer fix
|
|
||||||
public:
|
public:
|
||||||
void EnterCombat();
|
void EnterCombat();
|
||||||
void UpdateLastCombatTime() { m_dwLastCombatTime = get_dword_time(); }
|
void UpdateLastCombatTime() { m_dwLastCombatTime = get_dword_time(); }
|
||||||
@@ -2054,8 +2052,6 @@ class CHARACTER : public CEntity, public CFSM, public CHorseRider
|
|||||||
|
|
||||||
private:
|
private:
|
||||||
DWORD m_dwLastCombatTime;
|
DWORD m_dwLastCombatTime;
|
||||||
// tw1x1: end
|
|
||||||
#endif
|
|
||||||
};
|
};
|
||||||
|
|
||||||
ESex GET_SEX(LPCHARACTER ch);
|
ESex GET_SEX(LPCHARACTER ch);
|
||||||
|
|||||||
@@ -1600,6 +1600,22 @@ void CHARACTER::SendDamagePacket(LPCHARACTER pAttacker, int Damage, BYTE DamageF
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void CHARACTER::EnterCombat()
|
||||||
|
{
|
||||||
|
if (!IsPC())
|
||||||
|
return;
|
||||||
|
|
||||||
|
if (!IsPosition(POS_FIGHTING))
|
||||||
|
{
|
||||||
|
SetPosition(POS_FIGHTING);
|
||||||
|
SetNextStatePulse(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Start the 10s window if it hasn't started yet.
|
||||||
|
if (m_dwLastCombatTime == 0)
|
||||||
|
m_dwLastCombatTime = get_dword_time();
|
||||||
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
// CHARACTER::Damage 메소드는 this가 데미지를 입게 한다.
|
// CHARACTER::Damage 메소드는 this가 데미지를 입게 한다.
|
||||||
//
|
//
|
||||||
@@ -2312,13 +2328,9 @@ bool CHARACTER::Damage(LPCHARACTER pAttacker, int dam, EDamageType type) // retu
|
|||||||
//
|
//
|
||||||
if (!cannot_dead)
|
if (!cannot_dead)
|
||||||
{
|
{
|
||||||
#ifdef FIX_NEG_HP
|
|
||||||
if (GetHP() - dam <= 0)
|
|
||||||
dam = GetHP();
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef FIX_BATTLE_INACTIVITY_TIMEOUT
|
dam = std::min<int32_t>(GetHP(), dam);
|
||||||
// tw1x1: POS_FIGHTING timer fix
|
|
||||||
// REAL combat activity only: final damage > 0
|
// REAL combat activity only: final damage > 0
|
||||||
if (dam > 0)
|
if (dam > 0)
|
||||||
{
|
{
|
||||||
@@ -2333,9 +2345,7 @@ bool CHARACTER::Damage(LPCHARACTER pAttacker, int dam, EDamageType type) // retu
|
|||||||
pAttacker->EnterCombat();
|
pAttacker->EnterCombat();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// tw1x1: end
|
|
||||||
#endif
|
|
||||||
|
|
||||||
PointChange(POINT_HP, -dam, false);
|
PointChange(POINT_HP, -dam, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -2499,6 +2499,11 @@ bool CHARACTER::UseSkill(DWORD dwVnum, LPCHARACTER pkVictim, bool bUseGrandMaste
|
|||||||
if (!pkSk)
|
if (!pkSk)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
|
if (IsPC() && IS_SET(pkSk->dwFlag, SKILL_FLAG_ATTACK))
|
||||||
|
{
|
||||||
|
EnterCombat();
|
||||||
|
}
|
||||||
|
|
||||||
if (bCanUseHorseSkill && pkSk->dwType != SKILL_TYPE_HORSE)
|
if (bCanUseHorseSkill && pkSk->dwType != SKILL_TYPE_HORSE)
|
||||||
return BATTLE_NONE;
|
return BATTLE_NONE;
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user