From 03b995c6efb4b6b559b61dd0f789b16c0d8b474f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?eray=20or=C3=A7unus?= Date: Sun, 2 Feb 2020 16:51:33 +0300 Subject: Some fixes and some cosmetic things --- src/peds/Ped.cpp | 12 ++++-------- 1 file changed, 4 insertions(+), 8 deletions(-) (limited to 'src/peds/Ped.cpp') diff --git a/src/peds/Ped.cpp b/src/peds/Ped.cpp index 797262d4..f7578bac 100644 --- a/src/peds/Ped.cpp +++ b/src/peds/Ped.cpp @@ -273,7 +273,6 @@ static char WaitStateText[][16] = { }; #ifdef TOGGLEABLE_BETA_FEATURES -bool CPed::bUnusedFightThingOnPlayer = false; bool CPed::bPopHeadsOnHeadshot = false; bool CPed::bMakePedsRunToPhonesToReportCrimes = false; #endif @@ -1068,6 +1067,7 @@ CPed::FinishedAttackCB(CAnimBlendAssociation *attackAssoc, void *arg) if (attackAssoc) { switch (attackAssoc->animId) { case ANIM_WEAPON_START_THROW: + // what?! if ((!ped->IsPlayer() || ((CPlayerPed*)ped)->m_bHaveTargetSelected) && ped->IsPlayer()) { attackAssoc->blendDelta = -1000.0f; newAnim = CAnimManager::AddAnimation(ped->GetClump(), ASSOCGRP_STD, ANIM_WEAPON_THROWU); @@ -1929,13 +1929,13 @@ CPed::LineUpPedWithCar(PedLineUpPhase phase) float limitedDest = CGeneral::LimitRadianAngle(m_fRotationDest); float timeUntilStateChange = (m_nPedStateTimer - CTimer::GetTimeInMilliseconds())/600.0f; - m_vecOffsetSeek.z = 0.0f; if (timeUntilStateChange <= 0.0f) { m_vecOffsetSeek.x = 0.0f; m_vecOffsetSeek.y = 0.0f; - } else { - neededPos -= timeUntilStateChange * m_vecOffsetSeek; } + m_vecOffsetSeek.z = 0.0f; + + neededPos -= timeUntilStateChange * m_vecOffsetSeek; if (PI + m_fRotationCur < limitedDest) { limitedDest -= 2 * PI; @@ -4827,10 +4827,6 @@ CPed::StartFightAttack(uint8 buttonPressure) animAssoc->SetFinishCallback(FinishFightMoveCB, this); m_fightState = FIGHTSTATE_NO_MOVE; m_takeAStepAfterAttack = false; -#ifdef TOGGLEABLE_BETA_FEATURES - m_takeAStepAfterAttack = IsPlayer() && bUnusedFightThingOnPlayer; -#endif - bIsAttacking = true; if (IsPlayer()) -- cgit v1.2.3 From ce0687db27ddd244c0f046cb0c8229f335aae571 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?eray=20or=C3=A7unus?= Date: Mon, 3 Feb 2020 21:03:48 +0300 Subject: A bug fix and VC ports for veh. enter/exit --- src/peds/Ped.cpp | 65 +++++++++++++++++++++++++++++++++++++++++++++----------- 1 file changed, 53 insertions(+), 12 deletions(-) (limited to 'src/peds/Ped.cpp') diff --git a/src/peds/Ped.cpp b/src/peds/Ped.cpp index f7578bac..922de3ce 100644 --- a/src/peds/Ped.cpp +++ b/src/peds/Ped.cpp @@ -718,7 +718,7 @@ CheckForPedsOnGroundToAttack(CPed *attacker, CPed **pedOnGround) } if (pedOnGround) - * pedOnGround = currentPed; + *pedOnGround = currentPed; return stateToReturn; } @@ -11060,6 +11060,7 @@ CPed::PedAnimPullPedOutCB(CAnimBlendAssociation* animAssoc, void* arg) int padNo; if (ped->IsPlayer()) { + // BUG? This will cause crash if m_nPedType is bigger then 1, there are only 2 pads switch (ped->m_nPedType) { case PEDTYPE_PLAYER1: padNo = 0; @@ -11073,9 +11074,6 @@ CPed::PedAnimPullPedOutCB(CAnimBlendAssociation* animAssoc, void* arg) case PEDTYPE_PLAYER4: padNo = 3; break; - default: - // FIX: that was "break" - return; } CPad *pad = CPad::GetPad(padNo); @@ -11175,6 +11173,7 @@ CPed::PedAnimStepOutCarCB(CAnimBlendAssociation* animAssoc, void* arg) int padNo; if (ped->IsPlayer()) { + // BUG? This will cause crash if m_nPedType is bigger then 1, there are only 2 pads switch (ped->m_nPedType) { case PEDTYPE_PLAYER1: padNo = 0; @@ -11188,9 +11187,6 @@ CPed::PedAnimStepOutCarCB(CAnimBlendAssociation* animAssoc, void* arg) case PEDTYPE_PLAYER4: padNo = 3; break; - default: - // FIX: that was "break" - return; } CPad* pad = CPad::GetPad(padNo); bool engineIsIntact = false; @@ -11417,6 +11413,34 @@ CPed::PedSetInCarCB(CAnimBlendAssociation *animAssoc, void *arg) if (!veh) return; +#ifdef VC_PED_PORTS + // Situation of entering car as a driver while there is already a driver exiting atm. + CPed *driver = veh->pDriver; + if (driver && driver->m_nPedState == PED_DRIVING && !veh->bIsBus && driver->m_objective == OBJECTIVE_LEAVE_VEHICLE + && (ped->m_objective == OBJECTIVE_ENTER_CAR_AS_DRIVER || ped->m_nPedState == PED_CARJACK)) { + + if (!ped->IsPlayer() && (ped->CharCreatedBy != MISSION_CHAR || driver->IsPlayer())) { + ped->QuitEnteringCar(); + return; + } + if (driver->CharCreatedBy == MISSION_CHAR) { + PedSetOutCarCB(nil, veh->pDriver); + if (driver->m_pMyVehicle) { + driver->PositionPedOutOfCollision(); + } else { + driver->m_pMyVehicle = veh; + driver->PositionPedOutOfCollision(); + driver->m_pMyVehicle = nil; + } + veh->pDriver = nil; + } else { + driver->SetDead(); + driver->FlagToDestroyWhenNextProcessed(); + veh->pDriver = nil; + } + } +#endif + if (!ped->IsNotInWreckedVehicle() || ped->DyingOrDead()) return; @@ -11446,7 +11470,7 @@ CPed::PedSetInCarCB(CAnimBlendAssociation *animAssoc, void *arg) if (veh->IsBoat()) { if (ped->IsPlayer()) { -#ifdef VC_PED_PORTS +#if defined(FIX_BUGS) || defined(VC_PED_PORTS) CCarCtrl::RegisterVehicleOfInterest(veh); #endif if (veh->m_status == STATUS_SIMPLE) { @@ -11499,7 +11523,10 @@ CPed::PedSetInCarCB(CAnimBlendAssociation *animAssoc, void *arg) #endif } } - } else if (ped->m_objective == OBJECTIVE_ENTER_CAR_AS_PASSENGER) { + } + // This shouldn't happen at all. Passengers can't enter with PED_CARJACK. Even though they did, we shouldn't call AddPassenger in here and SetDriver in below. +#ifndef VC_PED_PORTS + else if (ped->m_objective == OBJECTIVE_ENTER_CAR_AS_PASSENGER) { if (ped->m_nPedState == PED_CARJACK) { veh->AddPassenger(ped, 0); ped->m_nPedState = PED_DRIVING; @@ -11509,6 +11536,7 @@ CPed::PedSetInCarCB(CAnimBlendAssociation *animAssoc, void *arg) veh->AutoPilot.m_nCruiseSpeed = 17; } } +#endif if (ped->m_objective == OBJECTIVE_ENTER_CAR_AS_DRIVER || ped->m_nPedState == PED_CARJACK) { veh->SetDriver(ped); @@ -11572,6 +11600,10 @@ CPed::PedSetInCarCB(CAnimBlendAssociation *animAssoc, void *arg) ped->m_prevObjective = OBJECTIVE_NONE; ped->RestorePreviousObjective(); +#ifdef VC_PED_PORTS + if(veh->pDriver && ped->CharCreatedBy == RANDOM_CHAR) + veh->AutoPilot.m_nCruiseSpeed = 17; +#endif } veh->m_nGettingInFlags &= ~GetCarDoorFlag(ped->m_vehEnterType); @@ -13098,13 +13130,22 @@ CPed::ProcessObjective(void) m_objectiveTimer = 0; } } + // fall through } case OBJECTIVE_ENTER_CAR_AS_DRIVER: { if (!m_carInObjective || bInVehicle) { - bObjectiveCompleted = true; - bScriptObjectiveCompleted = true; - RestorePreviousState(); +#ifdef VC_PED_PORTS + if (bInVehicle && m_pMyVehicle != m_carInObjective) + { + SetExitCar(m_pMyVehicle, 0); + } +#endif + { + bObjectiveCompleted = true; + bScriptObjectiveCompleted = true; + RestorePreviousState(); + } } else { if (m_leaveCarTimer > CTimer::GetTimeInMilliseconds()) { SetMoveState(PEDMOVE_STILL); -- cgit v1.2.3 From 9896217608d15453d3e2fe0c7a21c16591d0ab49 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?eray=20or=C3=A7unus?= Date: Tue, 4 Feb 2020 00:27:48 +0300 Subject: few little things --- src/peds/Ped.cpp | 17 +++++++---------- 1 file changed, 7 insertions(+), 10 deletions(-) (limited to 'src/peds/Ped.cpp') diff --git a/src/peds/Ped.cpp b/src/peds/Ped.cpp index 922de3ce..543dae57 100644 --- a/src/peds/Ped.cpp +++ b/src/peds/Ped.cpp @@ -2120,18 +2120,16 @@ CPed::SortPeds(CPed **list, int min, int max) int left = max; int right; for(right = min; right <= left; ){ - // Those 1.0s are my addition to make sure loop always run for first time. - for (float rightDist = middleDist-1.0f; middleDist > rightDist; right++) { + float rightDist, leftDist; + do { rightDiff = GetPosition() - list[right]->GetPosition(); rightDist = rightDiff.Magnitude(); - } - right--; + } while (middleDist > rightDist && ++right); - for (float leftDist = middleDist+1.0f; middleDist < leftDist; left--) { + do { leftDiff = GetPosition() - list[left]->GetPosition(); leftDist = leftDiff.Magnitude(); - } - left++; + } while (middleDist < leftDist && left--); if (right <= left) { CPed *ped = list[right]; @@ -13136,10 +13134,9 @@ CPed::ProcessObjective(void) { if (!m_carInObjective || bInVehicle) { #ifdef VC_PED_PORTS - if (bInVehicle && m_pMyVehicle != m_carInObjective) - { + if (bInVehicle && m_pMyVehicle != m_carInObjective) { SetExitCar(m_pMyVehicle, 0); - } + } else #endif { bObjectiveCompleted = true; -- cgit v1.2.3 From 89be27734b6c51339cdb29b508954d990ac948c2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?eray=20or=C3=A7unus?= Date: Thu, 13 Feb 2020 23:34:36 +0300 Subject: a fix --- src/peds/Ped.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src/peds/Ped.cpp') diff --git a/src/peds/Ped.cpp b/src/peds/Ped.cpp index 543dae57..44aaae5b 100644 --- a/src/peds/Ped.cpp +++ b/src/peds/Ped.cpp @@ -4534,7 +4534,7 @@ CPed::SetEvasiveDive(CPhysical *reason, uint8 onlyRandomJump) } } else { if (IsPlayer()) { - ((CPlayerPed*)this)->m_bShouldEvade = 5; + ((CPlayerPed*)this)->m_nEvadeAmount = 5; ((CPlayerPed*)this)->m_pEvadingFrom = reason; reason->RegisterReference((CEntity**) &((CPlayerPed*)this)->m_pEvadingFrom); return; -- cgit v1.2.3