From 29767c19645d88827b799908f4595123e6c27ede Mon Sep 17 00:00:00 2001 From: _AG Date: Sun, 7 Jul 2019 09:13:04 +0200 Subject: [PATCH] Lil update. --- src/Stats.h | 1 + src/control/Darkel.cpp | 223 ++++++++++++++++++++++------------------- src/control/Darkel.h | 2 +- 3 files changed, 122 insertions(+), 104 deletions(-) diff --git a/src/Stats.h b/src/Stats.h index eff4af1d..38e8d5be 100644 --- a/src/Stats.h +++ b/src/Stats.h @@ -8,5 +8,6 @@ public: static int32 &NumberKillFrenziesPassed; static int32 &PeopleKilledByOthers; +public: static void AnotherKillFrenzyPassed(); }; \ No newline at end of file diff --git a/src/control/Darkel.cpp b/src/control/Darkel.cpp index 931884fc..ab55c4d4 100644 --- a/src/control/Darkel.cpp +++ b/src/control/Darkel.cpp @@ -30,22 +30,22 @@ int32 &CDarkel::ModelToKill3 = *(int32*)0x885B3C; int32 &CDarkel::ModelToKill4 = *(int32*)0x885B34; wchar *CDarkel::pStartMessage = (wchar*)0x8F2C08; -int32 CDarkel::CalcFade(uint32 time, int32 min, uint32 max) { - if (time >= min && time <= max) { - if (time >= min + 500) { - if (time <= max - 500) - return -1; +int32 CDarkel::CalcFade(uint32 time, int32 start, uint32 end) { + if (time >= start && time <= end) { + if (time >= start + 500) { + if (time <= end - 500) + return 0; else - return 255 * (max - time) / 500; + return 255 * (end - time) / 500; } else - return 255 * (time - min) / 500; + return 255 * (time - start) / 500; } else return 0; } - +// This function has been cleaned up from unused stuff. #if 0 WRAPPER void CDarkel::DrawMessages(void) { EAXJMP(0x420920); } #else @@ -101,7 +101,7 @@ void CDarkel::DrawMessages() void CDarkel::Init() { - Status = KILLFRENZY_INIT; + Status = KILLFRENZY_NONE; } int16 CDarkel::QueryModelsKilledByPlayer(int32 modelId) @@ -121,16 +121,24 @@ eKillFrenzyStatus CDarkel::ReadStatus() return Status; } +#if 1 +WRAPPER int32 CDarkel::RegisterCarBlownUpByPlayer(eKillFrenzyStatus status) { EAXJMP(0x421070); } +#else int32 CDarkel::RegisterCarBlownUpByPlayer(eKillFrenzyStatus status) { return 0; } +#endif +#if 1 +WRAPPER void CDarkel::RegisterKillByPlayer(int32 modelid, eWeaponType weapontype, bool flag) { EAXJMP(0x420F60); } +#else void CDarkel::RegisterKillByPlayer(int32 modelid, eWeaponType weapontype, bool flag) { } +#endif void CDarkel::RegisterKillNotByPlayer() { @@ -139,49 +147,62 @@ void CDarkel::RegisterKillNotByPlayer() void CDarkel::ResetModelsKilledByPlayer() { - for (int i = 0; i < 200; i++) { - for (int j = 0; j < 8; j++) - RegisteredKills[i + j] = 0; - }; + for (int i = 0; i < 200; i++) + RegisteredKills[i] = 0; } +#if 0 +WRAPPER void CDarkel::ResetOnPlayerDeath() { EAXJMP(0x420E70); } +#else void CDarkel::ResetOnPlayerDeath() { - eWeaponType &EWeaponType = CWorld::Players[CWorld::PlayerInFocus].m_pPed->m_weapons[CWorld::Players[CWorld::PlayerInFocus].m_pPed->m_currentWeapon].m_eWeaponType; - int32 &CurrentWeapon = CWeaponInfo::GetWeaponInfo(FindPlayerPed()->GetWeapon()->m_eWeaponType)->m_nModelId; - int32 &CurrentDarkelWeapon = CDarkel::WeaponType; - uint32 &TotalAmmo = CWorld::Players[CWorld::PlayerInFocus].m_pPed->m_weapons[CWorld::Players[CWorld::PlayerInFocus].m_pPed->m_currentWeapon].m_nAmmoTotal; + if (Status != KILLFRENZY_ONGOING) + return; - if (Status == KILLFRENZY_ONGOING) { - CPopulation::m_AllRandomPedsThisType = -1; - Status = KILLFRENZY_FAILED; - TimeOfFrenzyStart = CTimer::GetTimeInMilliseconds(); + CPopulation::m_AllRandomPedsThisType = -1; + Status = KILLFRENZY_FAILED; + TimeOfFrenzyStart = CTimer::GetTimeInMilliseconds(); - if (WeaponType == WEAPONTYPE_UZI_DRIVEBY) - CurrentDarkelWeapon = WEAPONTYPE_UZI; + if (WeaponType == WEAPONTYPE_UZI_DRIVEBY) + WeaponType = WEAPONTYPE_UZI; - if (CurrentDarkelWeapon < WEAPONTYPE_TOTALWEAPONS) { - FindPlayerPed()->m_bWeaponSlot = InterruptedWeapon; - TotalAmmo = AmmoInterruptedWeapon; - } + if (WeaponType < WEAPONTYPE_TOTALWEAPONS) { + FindPlayerPed()->m_bWeaponSlot = InterruptedWeapon; + CWorld::Players[CWorld::PlayerInFocus].m_pPed->m_weapons[CWorld::Players[CWorld::PlayerInFocus].m_pPed->m_currentWeapon].m_nAmmoTotal = AmmoInterruptedWeapon; + } - if (FindPlayerVehicle()) { - FindPlayerPed()->RemoveWeaponModel(CurrentWeapon); - FindPlayerPed()->m_currentWeapon = EWeaponType; - FindPlayerPed()->MakeChangesForNewWeapon(FindPlayerPed()->m_currentWeapon); - } + if (FindPlayerVehicle()) { + FindPlayerPed()->RemoveWeaponModel(CWeaponInfo::GetWeaponInfo(FindPlayerPed()->GetWeapon()->m_eWeaponType)->m_nModelId); + FindPlayerPed()->m_currentWeapon = CWorld::Players[CWorld::PlayerInFocus].m_pPed->m_weapons[CWorld::Players[CWorld::PlayerInFocus].m_pPed->m_currentWeapon].m_eWeaponType; + FindPlayerPed()->MakeChangesForNewWeapon(FindPlayerPed()->m_currentWeapon); + } + + + CPopulation::m_AllRandomPedsThisType = -1; + Status = KILLFRENZY_FAILED; + TimeOfFrenzyStart = CTimer::GetTimeInMilliseconds(); + + if (WeaponType == WEAPONTYPE_UZI_DRIVEBY) + WeaponType = WEAPONTYPE_UZI; + + if (WeaponType < WEAPONTYPE_TOTALWEAPONS) { + FindPlayerPed()->m_bWeaponSlot = InterruptedWeapon; + CWorld::Players[CWorld::PlayerInFocus].m_pPed->m_weapons[CWorld::Players[CWorld::PlayerInFocus].m_pPed->m_currentWeapon].m_nAmmoTotal = AmmoInterruptedWeapon; + } + + if (FindPlayerVehicle()) { + FindPlayerPed()->RemoveWeaponModel(CWeaponInfo::GetWeaponInfo(FindPlayerPed()->GetWeapon()->m_eWeaponType)->m_nModelId); + FindPlayerPed()->m_currentWeapon = CWorld::Players[CWorld::PlayerInFocus].m_pPed->m_weapons[CWorld::Players[CWorld::PlayerInFocus].m_pPed->m_currentWeapon].m_eWeaponType; + FindPlayerPed()->MakeChangesForNewWeapon(FindPlayerPed()->m_currentWeapon); } } +#endif #if 0 WRAPPER void CDarkel::StartFrenzy(eWeaponType weaponType, int32 time, int16 kill, int32 modelId0, wchar *text, int32 modelId2, int32 modelId3, int32 modelId4, bool standardSound, bool needHeadShot) { EAXJMP(0x4210E0); } #else void CDarkel::StartFrenzy(eWeaponType weaponType, int32 time, int16 kill, int32 modelId0, wchar *text, int32 modelId2, int32 modelId3, int32 modelId4, bool standardSound, bool needHeadShot) { - eWeaponType &EWeaponType = CWorld::Players[CWorld::PlayerInFocus].m_pPed->m_weapons[CWorld::Players[CWorld::PlayerInFocus].m_pPed->m_currentWeapon].m_eWeaponType; - uint32 &TotalAmmo = CWorld::Players[CWorld::PlayerInFocus].m_pPed->m_weapons[CWorld::Players[CWorld::PlayerInFocus].m_pPed->m_currentWeapon].m_nAmmoTotal; - uint32 &AmmoInClip = CWorld::Players[CWorld::PlayerInFocus].m_pPed->m_weapons[CWorld::Players[CWorld::PlayerInFocus].m_pPed->m_currentWeapon].m_nAmmoInClip; - if (weaponType == WEAPONTYPE_UZI_DRIVEBY) weaponType = WEAPONTYPE_UZI; @@ -210,15 +231,15 @@ void CDarkel::StartFrenzy(eWeaponType weaponType, int32 time, int16 kill, int32 if (weaponType < WEAPONTYPE_TOTALWEAPONS) { InterruptedWeapon = FindPlayerPed()->m_currentWeapon; FindPlayerPed()->GiveWeapon(weaponType, 0); - AmmoInterruptedWeapon = TotalAmmo; + AmmoInterruptedWeapon = CWorld::Players[CWorld::PlayerInFocus].m_pPed->m_weapons[CWorld::Players[CWorld::PlayerInFocus].m_pPed->m_currentWeapon].m_nAmmoTotal; FindPlayerPed()->GiveWeapon(weaponType, 30000); - FindPlayerPed()->m_bWeaponSlot = EWeaponType; + FindPlayerPed()->m_bWeaponSlot = CWorld::Players[CWorld::PlayerInFocus].m_pPed->m_weapons[CWorld::Players[CWorld::PlayerInFocus].m_pPed->m_currentWeapon].m_eWeaponType; FindPlayerPed()->MakeChangesForNewWeapon(FindPlayerPed()->m_bWeaponSlot); if (FindPlayerVehicle()) { - FindPlayerPed()->m_currentWeapon = EWeaponType; - if (TotalAmmo <= AmmoInClip) - AmmoInClip = TotalAmmo; + FindPlayerPed()->m_currentWeapon = CWorld::Players[CWorld::PlayerInFocus].m_pPed->m_weapons[CWorld::Players[CWorld::PlayerInFocus].m_pPed->m_currentWeapon].m_eWeaponType; + if (CWorld::Players[CWorld::PlayerInFocus].m_pPed->m_weapons[CWorld::Players[CWorld::PlayerInFocus].m_pPed->m_currentWeapon].m_nAmmoTotal <= CWorld::Players[CWorld::PlayerInFocus].m_pPed->m_weapons[CWorld::Players[CWorld::PlayerInFocus].m_pPed->m_currentWeapon].m_nAmmoInClip) + CWorld::Players[CWorld::PlayerInFocus].m_pPed->m_weapons[CWorld::Players[CWorld::PlayerInFocus].m_pPed->m_currentWeapon].m_nAmmoInClip = CWorld::Players[CWorld::PlayerInFocus].m_pPed->m_weapons[CWorld::Players[CWorld::PlayerInFocus].m_pPed->m_currentWeapon].m_nAmmoTotal; FindPlayerPed()->ClearWeaponTarget(); } @@ -230,76 +251,72 @@ void CDarkel::StartFrenzy(eWeaponType weaponType, int32 time, int16 kill, int32 void CDarkel::Update() { - eWeaponType &EWeaponType = CWorld::Players[CWorld::PlayerInFocus].m_pPed->m_weapons[CWorld::Players[CWorld::PlayerInFocus].m_pPed->m_currentWeapon].m_eWeaponType; - int32 &CurrentWeapon = CWeaponInfo::GetWeaponInfo(FindPlayerPed()->GetWeapon()->m_eWeaponType)->m_nModelId; - int32 &CurrentDarkelWeapon = CDarkel::WeaponType; - uint32 &TotalAmmo = CWorld::Players[CWorld::PlayerInFocus].m_pPed->m_weapons[CWorld::Players[CWorld::PlayerInFocus].m_pPed->m_currentWeapon].m_nAmmoTotal; + if (Status != KILLFRENZY_ONGOING) + return; - if (Status == KILLFRENZY_ONGOING) { - int32 FrameTime = TimeLimit - (CTimer::GetTimeInMilliseconds() - TimeOfFrenzyStart); - if ((TimeLimit - (CTimer::GetTimeInMilliseconds() - TimeOfFrenzyStart)) > 0 || TimeLimit < 0) { - DMAudio.PlayFrontEndSound(SOUND_RAMPAGE_ONGOING, FrameTime); + int32 FrameTime = TimeLimit - (CTimer::GetTimeInMilliseconds() - TimeOfFrenzyStart); + if ((TimeLimit - (CTimer::GetTimeInMilliseconds() - TimeOfFrenzyStart)) > 0 || TimeLimit < 0) { + DMAudio.PlayFrontEndSound(SOUND_RAMPAGE_ONGOING, FrameTime); - int32 PrevTime = FrameTime / 1000; + int32 PrevTime = FrameTime / 1000; - if (PrevTime != PreviousTime) { - if (PreviousTime < 12) - DMAudio.PlayFrontEndSound(SOUND_CLOCK_TICK, PrevTime); - PreviousTime = PrevTime; - } - - } - else { - CPopulation::m_AllRandomPedsThisType = -1; - Status = KILLFRENZY_FAILED; - TimeOfFrenzyStart = CTimer::GetTimeInMilliseconds(); - - if (WeaponType == WEAPONTYPE_UZI_DRIVEBY) - CurrentDarkelWeapon = WEAPONTYPE_UZI; - - if (CurrentDarkelWeapon < WEAPONTYPE_TOTALWEAPONS) { - FindPlayerPed()->m_bWeaponSlot = InterruptedWeapon; - TotalAmmo = AmmoInterruptedWeapon; - } - - if (FindPlayerVehicle()) { - FindPlayerPed()->RemoveWeaponModel(CurrentWeapon); - FindPlayerPed()->m_currentWeapon = EWeaponType; - FindPlayerPed()->MakeChangesForNewWeapon(FindPlayerPed()->m_currentWeapon); - } - - if (bStandardSoundAndMessages) - DMAudio.PlayFrontEndSound(SOUND_RAMPAGE_FAILED, 0); + if (PrevTime != PreviousTime) { + if (PreviousTime < 12) + DMAudio.PlayFrontEndSound(SOUND_CLOCK_TICK, PrevTime); + PreviousTime = PrevTime; } - if (KillsNeeded <= 0) { - CPopulation::m_AllRandomPedsThisType = -1; - Status = KILLFRENZY_PASSED; + } + else { + CPopulation::m_AllRandomPedsThisType = -1; + Status = KILLFRENZY_FAILED; + TimeOfFrenzyStart = CTimer::GetTimeInMilliseconds(); - if (bProperKillFrenzy) - CStats::AnotherKillFrenzyPassed(); + if (WeaponType == WEAPONTYPE_UZI_DRIVEBY) + WeaponType = WEAPONTYPE_UZI; - TimeOfFrenzyStart = CTimer::GetTimeInMilliseconds(); - - FindPlayerPed()->m_pWanted->SetWantedLevel(NOTWANTED); - - if (WeaponType == WEAPONTYPE_UZI_DRIVEBY) - CurrentDarkelWeapon = WEAPONTYPE_UZI; - - if (CurrentDarkelWeapon < WEAPONTYPE_TOTALWEAPONS) { - FindPlayerPed()->m_bWeaponSlot = InterruptedWeapon; - TotalAmmo = AmmoInterruptedWeapon; - } - - if (FindPlayerVehicle()) { - FindPlayerPed()->RemoveWeaponModel(CurrentWeapon); - FindPlayerPed()->m_currentWeapon = EWeaponType; - FindPlayerPed()->MakeChangesForNewWeapon(FindPlayerPed()->m_currentWeapon); - } - - if (bStandardSoundAndMessages) - DMAudio.PlayFrontEndSound(SOUND_RAMPAGE_PASSED, 0); + if (WeaponType < WEAPONTYPE_TOTALWEAPONS) { + FindPlayerPed()->m_bWeaponSlot = InterruptedWeapon; + CWorld::Players[CWorld::PlayerInFocus].m_pPed->m_weapons[CWorld::Players[CWorld::PlayerInFocus].m_pPed->m_currentWeapon].m_nAmmoTotal = AmmoInterruptedWeapon; } + + if (FindPlayerVehicle()) { + FindPlayerPed()->RemoveWeaponModel(CWeaponInfo::GetWeaponInfo(FindPlayerPed()->GetWeapon()->m_eWeaponType)->m_nModelId); + FindPlayerPed()->m_currentWeapon = CWorld::Players[CWorld::PlayerInFocus].m_pPed->m_weapons[CWorld::Players[CWorld::PlayerInFocus].m_pPed->m_currentWeapon].m_eWeaponType; + FindPlayerPed()->MakeChangesForNewWeapon(FindPlayerPed()->m_currentWeapon); + } + + if (bStandardSoundAndMessages) + DMAudio.PlayFrontEndSound(SOUND_RAMPAGE_FAILED, 0); + } + + if (KillsNeeded <= 0) { + CPopulation::m_AllRandomPedsThisType = -1; + Status = KILLFRENZY_PASSED; + + if (bProperKillFrenzy) + CStats::AnotherKillFrenzyPassed(); + + TimeOfFrenzyStart = CTimer::GetTimeInMilliseconds(); + + FindPlayerPed()->m_pWanted->SetWantedLevel(NOTWANTED); + + if (WeaponType == WEAPONTYPE_UZI_DRIVEBY) + WeaponType = WEAPONTYPE_UZI; + + if (WeaponType < WEAPONTYPE_TOTALWEAPONS) { + FindPlayerPed()->m_bWeaponSlot = InterruptedWeapon; + CWorld::Players[CWorld::PlayerInFocus].m_pPed->m_weapons[CWorld::Players[CWorld::PlayerInFocus].m_pPed->m_currentWeapon].m_nAmmoTotal = AmmoInterruptedWeapon; + } + + if (FindPlayerVehicle()) { + FindPlayerPed()->RemoveWeaponModel(CWeaponInfo::GetWeaponInfo(FindPlayerPed()->GetWeapon()->m_eWeaponType)->m_nModelId); + FindPlayerPed()->m_currentWeapon = CWorld::Players[CWorld::PlayerInFocus].m_pPed->m_weapons[CWorld::Players[CWorld::PlayerInFocus].m_pPed->m_currentWeapon].m_eWeaponType; + FindPlayerPed()->MakeChangesForNewWeapon(FindPlayerPed()->m_currentWeapon); + } + + if (bStandardSoundAndMessages) + DMAudio.PlayFrontEndSound(SOUND_RAMPAGE_PASSED, 0); } } diff --git a/src/control/Darkel.h b/src/control/Darkel.h index 905f5497..da1df24a 100644 --- a/src/control/Darkel.h +++ b/src/control/Darkel.h @@ -3,7 +3,7 @@ enum eKillFrenzyStatus { - KILLFRENZY_INIT, + KILLFRENZY_NONE, KILLFRENZY_ONGOING, KILLFRENZY_PASSED, KILLFRENZY_FAILED,