From 07d5850e85c1e8f455f703f1770972e32a8f7970 Mon Sep 17 00:00:00 2001 From: RGreenlees Date: Wed, 28 Feb 2024 23:10:58 +0000 Subject: [PATCH] Improved skulk ladders --- main/source/mod/AIPlayers/AvHAINavigation.cpp | 28 +- main/source/mod/AIPlayers/AvHAIPlayerUtil.cpp | 278 +++++++++--------- main/source/mod/AIPlayers/AvHAIPlayerUtil.h | 2 + main/source/mod/AvHConsoleCommands.cpp | 268 ----------------- 4 files changed, 162 insertions(+), 414 deletions(-) diff --git a/main/source/mod/AIPlayers/AvHAINavigation.cpp b/main/source/mod/AIPlayers/AvHAINavigation.cpp index eb62e16d..7dc60420 100644 --- a/main/source/mod/AIPlayers/AvHAINavigation.cpp +++ b/main/source/mod/AIPlayers/AvHAINavigation.cpp @@ -3247,15 +3247,31 @@ void LadderMove(AvHAIPlayer* pBot, const Vector StartPoint, const Vector EndPoin if (IsPlayerOnLadder(pBot->Edict)) { // We're on the ladder and actively climbing - Vector CurrentLadderNormal = UTIL_GetNearestLadderNormal(pBot->CollisionHullBottomLocation + Vector(0.0f, 0.0f, 5.0f)); + Vector CurrentLadderNormal; + + if (IsPlayerSkulk(pBot->Edict)) + { + CurrentLadderNormal = UTIL_GetNearestSurfaceNormal(pBot->Edict->v.origin); + } + else + { + CurrentLadderNormal = UTIL_GetNearestLadderNormal(pBot->CollisionHullBottomLocation + Vector(0.0f, 0.0f, 5.0f)); + } + //CurrentLadderNormal = UTIL_GetVectorNormal2D(CurrentLadderNormal); if (vIsZero(CurrentLadderNormal)) { - CurrentLadderNormal = UTIL_GetVectorNormal2D(EndPoint - pBot->Edict->v.origin); - } - UTIL_DrawLine(INDEXENT(1), pBot->Edict->v.origin, pBot->Edict->v.origin + (CurrentLadderNormal * 100.0f), 0.5f); + if (EndPoint.z > StartPoint.z) + { + CurrentLadderNormal = UTIL_GetVectorNormal2D(StartPoint - EndPoint); + } + else + { + CurrentLadderNormal = UTIL_GetVectorNormal2D(EndPoint - StartPoint); + } + } const Vector LadderRightNormal = UTIL_GetVectorNormal(UTIL_GetCrossProduct(CurrentLadderNormal, UP_VECTOR)); @@ -5156,12 +5172,12 @@ void UpdateBotStuck(AvHAIPlayer* pBot) } else { - pBot->BotNavInfo.StuckInfo.TotalStuckTime += AIMGR_GetBotDeltaTime(); + pBot->BotNavInfo.StuckInfo.TotalStuckTime += fminf(AIMGR_GetBotDeltaTime(), 0.016f); } } else { - pBot->BotNavInfo.StuckInfo.TotalStuckTime += AIMGR_GetBotDeltaTime(); + pBot->BotNavInfo.StuckInfo.TotalStuckTime += fminf(AIMGR_GetBotDeltaTime(), 0.016f); } if (pBot->BotNavInfo.StuckInfo.TotalStuckTime > 0.25f) diff --git a/main/source/mod/AIPlayers/AvHAIPlayerUtil.cpp b/main/source/mod/AIPlayers/AvHAIPlayerUtil.cpp index 3be1942f..ec4375eb 100644 --- a/main/source/mod/AIPlayers/AvHAIPlayerUtil.cpp +++ b/main/source/mod/AIPlayers/AvHAIPlayerUtil.cpp @@ -820,6 +820,143 @@ Vector UTIL_GetNearestLadderNormal(edict_t* pEdict) return UTIL_GetNearestLadderNormal(pEdict->v.origin); } +Vector UTIL_GetNearestSurfaceNormal(Vector SearchLocation) +{ + + Vector Trace1End, Trace2End, Trace3End, Trace4End, Trace5End, Trace6End, Trace7End, Trace8End; + Trace1End = Trace2End = Trace3End = Trace4End = Trace5End = Trace6End = Trace7End = Trace8End = SearchLocation; + + Trace1End.x += 32.0f; + Trace1End.y += 32.0f; + + Trace2End.x += 32.0f; + Trace2End.y -= 32.0f; + + Trace3End.x -= 32.0f; + Trace3End.y -= 32.0f; + + Trace4End.x -= 32.0f; + Trace4End.y += 32.0f; + + Trace5End.x += 32.0f; + + Trace6End.x -= 32.0f; + + Trace7End.y -= 32.0f; + + Trace8End.y += 32.0f; + + Vector ClosestNormal = ZERO_VECTOR; + float MinDist = 0.0f; + + trace_t TraceResult; + NS_TraceLine(SearchLocation, Trace1End, 1, PM_NORMAL, -1, true, TraceResult); + + if (TraceResult.fraction < 1.0f) + { + int PointContents = UTIL_PointContents(TraceResult.endpos); + + if (vIsZero(ClosestNormal) || TraceResult.fraction < MinDist) + { + ClosestNormal = TraceResult.plane.normal; + MinDist = TraceResult.fraction; + } + } + + NS_TraceLine(SearchLocation, Trace2End, 1, PM_NORMAL, -1, true, TraceResult); + + if (TraceResult.fraction < 1.0f) + { + int PointContents = UTIL_PointContents(TraceResult.endpos); + + if (vIsZero(ClosestNormal) || TraceResult.fraction < MinDist) + { + ClosestNormal = TraceResult.plane.normal; + MinDist = TraceResult.fraction; + } + } + + NS_TraceLine(SearchLocation, Trace3End, 1, PM_NORMAL, -1, true, TraceResult); + + if (TraceResult.fraction < 1.0f) + { + int PointContents = UTIL_PointContents(TraceResult.endpos); + + if (vIsZero(ClosestNormal) || TraceResult.fraction < MinDist) + { + ClosestNormal = TraceResult.plane.normal; + MinDist = TraceResult.fraction; + } + } + + NS_TraceLine(SearchLocation, Trace4End, 1, PM_NORMAL, -1, true, TraceResult); + + if (TraceResult.fraction < 1.0f) + { + int PointContents = UTIL_PointContents(TraceResult.endpos); + + if (vIsZero(ClosestNormal) || TraceResult.fraction < MinDist) + { + ClosestNormal = TraceResult.plane.normal; + MinDist = TraceResult.fraction; + } + } + + NS_TraceLine(SearchLocation, Trace5End, 1, PM_NORMAL, -1, true, TraceResult); + + if (TraceResult.fraction < 1.0f) + { + int PointContents = UTIL_PointContents(TraceResult.endpos); + + if (vIsZero(ClosestNormal) || TraceResult.fraction < MinDist) + { + ClosestNormal = TraceResult.plane.normal; + MinDist = TraceResult.fraction; + } + } + + NS_TraceLine(SearchLocation, Trace6End, 1, PM_NORMAL, -1, true, TraceResult); + + if (TraceResult.fraction < 1.0f) + { + int PointContents = UTIL_PointContents(TraceResult.endpos); + + if (vIsZero(ClosestNormal) || TraceResult.fraction < MinDist) + { + ClosestNormal = TraceResult.plane.normal; + MinDist = TraceResult.fraction; + } + } + + NS_TraceLine(SearchLocation, Trace7End, 1, PM_NORMAL, -1, true, TraceResult); + + if (TraceResult.fraction < 1.0f) + { + int PointContents = UTIL_PointContents(TraceResult.endpos); + + if (vIsZero(ClosestNormal) || TraceResult.fraction < MinDist) + { + ClosestNormal = TraceResult.plane.normal; + MinDist = TraceResult.fraction; + } + } + + NS_TraceLine(SearchLocation, Trace8End, 1, PM_NORMAL, -1, true, TraceResult); + + if (TraceResult.fraction < 1.0f) + { + int PointContents = UTIL_PointContents(TraceResult.endpos); + + if (vIsZero(ClosestNormal) || TraceResult.fraction < MinDist) + { + ClosestNormal = TraceResult.plane.normal; + MinDist = TraceResult.fraction; + } + } + + return ClosestNormal; +} + Vector UTIL_GetNearestLadderNormal(Vector SearchLocation) { TraceResult result; @@ -850,146 +987,7 @@ Vector UTIL_GetNearestLadderNormal(Vector SearchLocation) { if (vPointOverlaps3D(SearchLocation, closestLadderRef->pev->absmin, closestLadderRef->pev->absmax)) { - Vector Trace1End, Trace2End, Trace3End, Trace4End, Trace5End, Trace6End, Trace7End, Trace8End; - Trace1End = Trace2End = Trace3End = Trace4End = Trace5End = Trace6End = Trace7End = Trace8End = SearchLocation; - - Trace1End.x += 32.0f; - Trace1End.y += 32.0f; - - Trace2End.x += 32.0f; - Trace2End.y -= 32.0f; - - Trace3End.x -= 32.0f; - Trace3End.y -= 32.0f; - - Trace4End.x -= 32.0f; - Trace4End.y += 32.0f; - - Trace5End.x += 32.0f; - - Trace6End.x -= 32.0f; - - Trace7End.y -= 32.0f; - - Trace8End.y += 32.0f; - - Vector ClosestNormal = ZERO_VECTOR; - float MinDist = 0.0f; - - trace_t TraceResult; - NS_TraceLine(SearchLocation, Trace1End, 1, PM_NORMAL, -1, true, TraceResult); - - UTIL_DrawLine(INDEXENT(1), SearchLocation, Trace1End, 0.5f, 255, 0, 0); - - if (TraceResult.fraction < 1.0f) - { - int PointContents = UTIL_PointContents(TraceResult.endpos); - - if (vIsZero(ClosestNormal) || TraceResult.fraction < MinDist) - { - ClosestNormal = TraceResult.plane.normal; - MinDist = TraceResult.fraction; - } - } - - UTIL_DrawLine(INDEXENT(1), SearchLocation, Trace2End, 0.5f, 0, 128, 0); - - NS_TraceLine(SearchLocation, Trace2End, 1, PM_NORMAL, -1, true, TraceResult); - - if (TraceResult.fraction < 1.0f) - { - int PointContents = UTIL_PointContents(TraceResult.endpos); - - if (vIsZero(ClosestNormal) || TraceResult.fraction < MinDist) - { - ClosestNormal = TraceResult.plane.normal; - MinDist = TraceResult.fraction; - } - } - - UTIL_DrawLine(INDEXENT(1), SearchLocation, Trace3End, 0.5f, 0, 0, 255); - - NS_TraceLine(SearchLocation, Trace3End, 1, PM_NORMAL, -1, true, TraceResult); - - if (TraceResult.fraction < 1.0f) - { - int PointContents = UTIL_PointContents(TraceResult.endpos); - - if (vIsZero(ClosestNormal) || TraceResult.fraction < MinDist) - { - ClosestNormal = TraceResult.plane.normal; - MinDist = TraceResult.fraction; - } - } - - UTIL_DrawLine(INDEXENT(1), SearchLocation, Trace4End, 0.5f, 255, 255, 0); - - NS_TraceLine(SearchLocation, Trace4End, 1, PM_NORMAL, -1, true, TraceResult); - - if (TraceResult.fraction < 1.0f) - { - int PointContents = UTIL_PointContents(TraceResult.endpos); - - if (vIsZero(ClosestNormal) || TraceResult.fraction < MinDist) - { - ClosestNormal = TraceResult.plane.normal; - MinDist = TraceResult.fraction; - } - } - - NS_TraceLine(SearchLocation, Trace5End, 1, PM_NORMAL, -1, true, TraceResult); - - if (TraceResult.fraction < 1.0f) - { - int PointContents = UTIL_PointContents(TraceResult.endpos); - - if (vIsZero(ClosestNormal) || TraceResult.fraction < MinDist) - { - ClosestNormal = TraceResult.plane.normal; - MinDist = TraceResult.fraction; - } - } - - NS_TraceLine(SearchLocation, Trace6End, 1, PM_NORMAL, -1, true, TraceResult); - - if (TraceResult.fraction < 1.0f) - { - int PointContents = UTIL_PointContents(TraceResult.endpos); - - if (vIsZero(ClosestNormal) || TraceResult.fraction < MinDist) - { - ClosestNormal = TraceResult.plane.normal; - MinDist = TraceResult.fraction; - } - } - - NS_TraceLine(SearchLocation, Trace7End, 1, PM_NORMAL, -1, true, TraceResult); - - if (TraceResult.fraction < 1.0f) - { - int PointContents = UTIL_PointContents(TraceResult.endpos); - - if (vIsZero(ClosestNormal) || TraceResult.fraction < MinDist) - { - ClosestNormal = TraceResult.plane.normal; - MinDist = TraceResult.fraction; - } - } - - NS_TraceLine(SearchLocation, Trace8End, 1, PM_NORMAL, -1, true, TraceResult); - - if (TraceResult.fraction < 1.0f) - { - int PointContents = UTIL_PointContents(TraceResult.endpos); - - if (vIsZero(ClosestNormal) || TraceResult.fraction < MinDist) - { - ClosestNormal = TraceResult.plane.normal; - MinDist = TraceResult.fraction; - } - } - - return ClosestNormal; + return UTIL_GetNearestSurfaceNormal(SearchLocation); } else { diff --git a/main/source/mod/AIPlayers/AvHAIPlayerUtil.h b/main/source/mod/AIPlayers/AvHAIPlayerUtil.h index d0e629b7..443210a4 100644 --- a/main/source/mod/AIPlayers/AvHAIPlayerUtil.h +++ b/main/source/mod/AIPlayers/AvHAIPlayerUtil.h @@ -161,4 +161,6 @@ Vector UTIL_GetNearestLadderTopPoint(edict_t* pEdict); Vector UTIL_GetNearestLadderTopPoint(const Vector SearchLocation); Vector UTIL_GetNearestLadderBottomPoint(edict_t* pEdict); +Vector UTIL_GetNearestSurfaceNormal(Vector SearchLocation); + #endif \ No newline at end of file diff --git a/main/source/mod/AvHConsoleCommands.cpp b/main/source/mod/AvHConsoleCommands.cpp index 69c18185..37b9b575 100644 --- a/main/source/mod/AvHConsoleCommands.cpp +++ b/main/source/mod/AvHConsoleCommands.cpp @@ -1415,88 +1415,6 @@ BOOL AvHGamerules::ClientCommand( CBasePlayer *pPlayer, const char *pcmd ) theSuccess = true; } } - else if (FStrEq(pcmd, "drawoffmesh")) - { - AIDEBUG_DrawOffMeshConnections(10.0f); - - theSuccess = true; - } - else if (FStrEq(pcmd, "refreshoffmesh")) - { - theSuccess = true; - } - else if (FStrEq(pcmd, "evolvelerk")) - { - vector AIPlayers = AIMGR_GetAllAIPlayers(); - - for (auto it = AIPlayers.begin(); it != AIPlayers.end(); it++) - { - AvHAIPlayer* thisBot = (*it); - - AITASK_SetEvolveTask(thisBot, &thisBot->PrimaryBotTask, thisBot->Edict->v.origin, ALIEN_LIFEFORM_THREE, true); - } - - theSuccess = true; - } - else if (FStrEq(pcmd, "evolvegorge")) - { - vector AIPlayers = AIMGR_GetAllAIPlayers(); - - for (auto it = AIPlayers.begin(); it != AIPlayers.end(); it++) - { - AvHAIPlayer* thisBot = (*it); - - AITASK_SetEvolveTask(thisBot, &thisBot->PrimaryBotTask, thisBot->Edict->v.origin, ALIEN_LIFEFORM_TWO, true); - } - - theSuccess = true; - } - else if (FStrEq(pcmd, "tracedoor")) - { - Vector TraceStart = GetPlayerEyePosition(theAvHPlayer->edict()); // origin + pev->view_ofs - Vector LookDir = UTIL_GetForwardVector(theAvHPlayer->edict()->v.v_angle); // Converts view angles to normalized unit vector - - Vector TraceEnd = TraceStart + (LookDir * 1000.0f); - - edict_t* TracedEntity = UTIL_TraceEntity(theAvHPlayer->edict(), TraceStart, TraceEnd); - - if (!FNullEnt(TracedEntity)) - { - nav_door* Door = UTIL_GetNavDoorByEdict(TracedEntity); - - if (Door) - { - for (auto it = Door->TriggerEnts.begin(); it != Door->TriggerEnts.end(); it++) - { - const char* ButtonTarget = STRING(it->Edict->v.target); - const char* DoorTargetName = STRING(Door->DoorEdict->v.targetname); - - bool bThing = true; - } - - DoorTrigger* Trigger = UTIL_GetNearestDoorTrigger(theAvHPlayer->pev->origin, Door, nullptr, true); - - if (Trigger) - { - UTIL_DrawLine(INDEXENT(1), theAvHPlayer->pev->origin, UTIL_GetButtonFloorLocation(theAvHPlayer->pev->origin, Trigger->Edict), 10.0f); - } - } - } - - theSuccess = true; - } - else if (FStrEq(pcmd, "setdebugvector1")) - { - AIDEBUG_SetDebugVector1(UTIL_GetFloorUnderEntity(theAvHPlayer->edict())); - - theSuccess = true; - } - else if (FStrEq(pcmd, "setdebugvector2")) - { - AIDEBUG_SetDebugVector2(UTIL_GetFloorUnderEntity(theAvHPlayer->edict())); - - theSuccess = true; - } else if (FStrEq(pcmd, "setdebugaiplayer")) { CBaseEntity* SpectatedPlayer = theAvHPlayer->GetSpectatingEntity(); @@ -1512,170 +1430,6 @@ BOOL AvHGamerules::ClientCommand( CBasePlayer *pPlayer, const char *pcmd ) theSuccess = true; } - else if (FStrEq(pcmd, "testalienreinforce")) - { - vector AlienPlayers = AIMGR_GetAIPlayersOnTeam(TEAM_TWO); - - if (AlienPlayers.size() > 0) - { - AvHAIPlayer* NewCapper = AlienPlayers[0]; - - if (NewCapper) - { - DeployableSearchFilter ResNodeFilter; - ResNodeFilter.DeployableTeam = TEAM_TWO; - ResNodeFilter.ReachabilityTeam = TEAM_TWO; - ResNodeFilter.ReachabilityFlags = NewCapper->BotNavInfo.NavProfile.ReachabilityFlag; - - AvHAIResourceNode* ResNode = AITAC_FindNearestResourceNodeToLocation(NewCapper->Edict->v.origin, &ResNodeFilter); - - if (ResNode) - { - AITASK_SetReinforceStructureTask(NewCapper, &NewCapper->PrimaryBotTask, ResNode->ActiveTowerEntity, true); - } - } - } - - theSuccess = true; - } - else if (FStrEq(pcmd, "showteamstarts")) - { - UTIL_DrawLine(INDEXENT(1), INDEXENT(1)->v.origin, AITAC_GetTeamStartingLocation(TEAM_ONE), 20.0f, 0, 0, 255); - UTIL_DrawLine(INDEXENT(1), INDEXENT(1)->v.origin, AITAC_GetTeamStartingLocation(TEAM_TWO), 20.0f, 255, 255, 0); - - theSuccess = true; - } - else if (FStrEq(pcmd, "showhivefloors")) - { - vector AllHives = AITAC_GetAllHives(); - - for (auto it = AllHives.begin(); it != AllHives.end(); it++) - { - UTIL_DrawLine(INDEXENT(1), INDEXENT(1)->v.origin, (*it)->FloorLocation, 20.0f, 255, 255, 0); - } - - theSuccess = true; - } - else if (FStrEq(pcmd, "testresearchavailable")) - { - AvHTeam* PlayerTeam = GetGameRules()->GetTeam(theAvHPlayer->GetTeam()); - - if (PlayerTeam) - { - AvHMessageID Message = RESEARCH_ARMOR_ONE; - AvHMessageID Message2 = RESEARCH_ARMOR_TWO; - - if (PlayerTeam->GetResearchManager().GetIsMessageAvailable(Message)) - { - UTIL_SayText("Armour 1: TRUE\n", theAvHPlayer); - } - else - { - UTIL_SayText("Armour 1: FALSE\n", theAvHPlayer); - } - - if (PlayerTeam->GetResearchManager().GetIsMessageAvailable(Message2)) - { - UTIL_SayText("Armour 2: TRUE\n", theAvHPlayer); - } - else - { - UTIL_SayText("Armour 2: FALSE\n", theAvHPlayer); - } - } - - theSuccess = true; - } - else if (FStrEq(pcmd, "amonladder")) - { - if (IsPlayerOnLadder(theAvHPlayer->edict())) - { - UTIL_SayText("TRUE\n", theAvHPlayer); - } - else - { - UTIL_SayText("FALSE\n", theAvHPlayer); - } - - - - theSuccess = true; - } - else if (FStrEq(pcmd, "tracelift")) - { - Vector TraceStart = GetPlayerEyePosition(theAvHPlayer->edict()); // origin + pev->view_ofs - Vector LookDir = UTIL_GetForwardVector(theAvHPlayer->edict()->v.v_angle); // Converts view angles to normalized unit vector - - Vector TraceEnd = TraceStart + (LookDir * 1000.0f); - - edict_t* TracedEntity = UTIL_TraceEntity(theAvHPlayer->edict(), TraceStart, TraceEnd); - - if (!FNullEnt(TracedEntity)) - { - nav_door* Door = UTIL_GetNavDoorByEdict(TracedEntity); - - if (Door) - { - Vector CurrPoint = ZERO_VECTOR; - - for (auto stop = Door->StopPoints.begin(); stop != Door->StopPoints.end(); stop++) - { - Vector Point = (*stop); - Point.z += Door->DoorEdict->v.size.z * 0.5f; - - UTIL_DrawLine(INDEXENT(1), INDEXENT(1)->v.origin, Point, 10.0f); - } - - - - const dtOffMeshConnection* NearestCon = DEBUG_FindNearestOffMeshConnectionToPoint(theAvHPlayer->pev->origin, SAMPLE_POLYFLAGS_LIFT); - - if (NearestCon) - { - - Vector ConnectionStart = Vector(NearestCon->pos[0], -NearestCon->pos[2], NearestCon->pos[1]); - Vector ConnectionEnd = Vector(NearestCon->pos[3], -NearestCon->pos[5], NearestCon->pos[4]); - - //UTIL_DrawLine(INDEXENT(1), ConnectionStart, ConnectionEnd, 10.0f); - - for (auto stop = Door->StopPoints.begin(); stop != Door->StopPoints.end(); stop++) - { - //UTIL_DrawLine(INDEXENT(1), ConnectionStart, *stop, 10.0f, 255, 0, 0); - - Vector NearestPointStart = UTIL_GetClosestPointOnEntityToLocation(ConnectionStart, Door->DoorEdict, *stop); - Vector NearestPointEnd = UTIL_GetClosestPointOnEntityToLocation(ConnectionEnd, Door->DoorEdict, *stop); - - //UTIL_DrawLine(INDEXENT(1), ConnectionStart, NearestPointStart, 10.0f, 255, 255, 0); - //UTIL_DrawLine(INDEXENT(1), ConnectionEnd, NearestPointEnd, 10.0f, 0, 0, 255); - } - } - - } - } - - theSuccess = true; - } - else if (FStrEq(pcmd, "getlift")) - { - const dtOffMeshConnection* NearestCon = DEBUG_FindNearestOffMeshConnectionToPoint(theAvHPlayer->pev->origin, SAMPLE_POLYFLAGS_LIFT); - - if (NearestCon) - { - Vector ConnectionStart = Vector(NearestCon->pos[0], -NearestCon->pos[2], NearestCon->pos[1]); - Vector ConnectionEnd = Vector(NearestCon->pos[3], -NearestCon->pos[5], NearestCon->pos[4]); - - nav_door* NearestDoor = UTIL_GetClosestLiftToPoints(ConnectionStart, ConnectionEnd); - - UTIL_DrawLine(INDEXENT(1), ConnectionStart, ConnectionEnd, 10.0f, 0, 0, 255); - - if (NearestDoor) - { - UTIL_DrawLine(INDEXENT(1), theAvHPlayer->pev->origin, UTIL_GetCentreOfEntity(NearestDoor->DoorEdict), 10.0f, 255, 255, 0); - } - } - - theSuccess = true; - } else if (FStrEq(pcmd, "cometome")) { vector AIPlayers = AIMGR_GetAllAIPlayers(); @@ -1688,28 +1442,6 @@ BOOL AvHGamerules::ClientCommand( CBasePlayer *pPlayer, const char *pcmd ) } } - theSuccess = true; - } - else if (FStrEq(pcmd, "testpointadjust")) - { - Vector NewLoc = AdjustPointForPathfinding(theAvHPlayer->pev->origin); - - if (!vIsZero(NewLoc)) - { - UTIL_DrawLine(INDEXENT(1), theAvHPlayer->pev->origin, NewLoc, 10.0f); - } - - theSuccess = true; - } - else if (FStrEq(pcmd, "testflightpath")) - { - vector path; - path.clear(); - - FindFlightPathToPoint(GetBaseNavProfile(ALL_NAV_PROFILE), AITAC_GetTeamStartingLocation(TEAM_ONE) + Vector(0.0f, 0.0f, 50.0f), theAvHPlayer->pev->origin, path, 100.0f); - - AIDEBUG_DrawPath(path, 20.0f); - theSuccess = true; } else if( FStrEq( pcmd, kcRemoveUpgrade) )