mirror of
https://github.com/ENSL/NS.git
synced 2025-03-14 06:34:33 +00:00
Improved skulk ladders
This commit is contained in:
parent
567f34cbf7
commit
07d5850e85
4 changed files with 162 additions and 414 deletions
|
@ -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)
|
||||
|
|
|
@ -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
|
||||
{
|
||||
|
|
|
@ -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
|
|
@ -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<AvHAIPlayer*> 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<AvHAIPlayer*> 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<AvHAIPlayer*> 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<AvHAIHiveDefinition*> 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<AvHAIPlayer*> 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<bot_path_node> 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) )
|
||||
|
|
Loading…
Reference in a new issue