Skip to content

Commit

Permalink
Merge branch 'main' into tbshotgun_fixes
Browse files Browse the repository at this point in the history
  • Loading branch information
GeckoEidechse authored Jul 6, 2024
2 parents ff32cec + 0198d3f commit 4168db8
Show file tree
Hide file tree
Showing 3 changed files with 52 additions and 49 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -348,7 +348,7 @@ Choisissez Oui si vous êtes d'accord. Ce choix peut être modifié à tout inst
"PROGRESSION_ENABLED_HEADER" "Progression activée !"
"PROGRESSION_DISABLED_HEADER" "Progression désactivée !"
"PROGRESSION_DISABLED_BODY" "^CCCC0000La progression a été désactivée.^\n\nLes Titans, Armes, Factions, Skins, et autres seront débloqués et utilisables en tout temps.\n\nPeut être changé à n'importe que moment dans le salon multijoueurs."
"PROGRESSION_TOGGLE_DISABLED_BODY" "Les Titans, Armes, Factions, Skins et autres seront débloqués par la monté en niveau ou par leur achats en mérites.\n\nPeut être changé à n'importe que moment dans le salon multijoueurs.\n\n^CC000000Warning : Si vous équiper des objets que vous n'avez pas encore débloqués, ils seront déséquipés !"
"PROGRESSION_TOGGLE_DISABLED_BODY" "Les Titans, Armes, Factions, Skins et autres seront débloqués par la monté en niveau ou par leur achats en mérites.\n\nPeut être changé à n'importe que moment dans le salon multijoueurs.\n\n^CC000000Warning : Si vous équipez des objets que vous n'avez pas encore débloqués, ils seront déséquipés !"
"PROGRESSION_ENABLED_BODY" "^CCCC0000La progression a été activée.^\n\nLes Titans, Armes, Factions, Skins et autres seront débloqués par la monté en niveau ou par leur achats en mérites.\n\nPeut être changé à n'importe que moment dans le salon multijoueurs."
"TOGGLE_PROGRESSION" "Activer la progression"
"Y_BUTTON_TOGGLE_PROGRESSION" "%[Y_BUTTON|]% Activer la progression"
Expand All @@ -357,5 +357,25 @@ Choisissez Oui si vous êtes d'accord. Ce choix peut être modifié à tout inst
"AUTHENTICATION_FAILED_HELP" "Aide"
"AUTHENTICATION_FAILED_ERROR_CODE" "Code d'erreur : ^DB6F2C00%s1^"
"AUTHENTICATION_FAILED_BODY" "L'authentification avec Atlas a échoué."
"MISSING_MOD" "Mod manquant \"%s1\" v%s2"
"MOD_REQUIRED_WARNING" " : Ce mod peut être (dé)chargé automatiquement en rejoignant un serveur"
"EXTRACTING_MOD_TITLE" "Extraction du mod (%s1%)"
"MOD_NOT_VERIFIED" "(ce mod n'est pas vérifié, et n'a donc pas pu être automatiquement téléchargé)"
"MOD_DL_DISABLED" "(le téléchargement automatique de mods est désactivé)"
"DOWNLOADING_MOD_TITLE" "Téléchargement du mod"
"DOWNLOADING_MOD_TITLE_W_PROGRESS" "Téléchargement du mod (%s1%)"
"DOWNLOADING_MOD_TEXT" "Téléchargement de %s1 v%s2..."
"WRONG_MOD_VERSION" "Le serveur requiert la version v%s2 du mod \"%s1\" (vous avez la version v%s3)"
"DOWNLOADING_MOD_TEXT_W_PROGRESS" "Téléchargement de %s1 v%s2...\n(%s3/%s4 Mo)"
"CHECKSUMING_TITLE" "Vérification de la somme de contrôle du mod"
"CHECKSUMING_TEXT" "Vérification du contenu de %s1 v%s2..."
"EXTRACTING_MOD_TEXT" "Extraction de %s1 v%s2...\n(%s3/%s4 Mo)"
"FAILED_DOWNLOADING" "Echec du téléchargement du mod"
"FAILED_READING_ARCHIVE" "Une erreur est survenue lors de la lecture de l'archive."
"FAILED_WRITING_TO_DISK" "Une erreur est survenue lors de l'extraction des fichiers."
"MOD_FETCHING_FAILED" "L'archive n'a pas pu être téléchargée depuis Thunderstore."
"MOD_CORRUPTED" "La somme de contrôle de l'archive ne correspond pas à la signature vérifiée."
"NO_DISK_SPACE_AVAILABLE" "L'espace restant sur votre disque est insuffisant."
"MOD_FETCHING_FAILED_GENERAL" "L'extraction du mod a échoué. Consultez le journal pour plus d'informations."
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -75,27 +75,20 @@ void function RateSpawnpoints_CTF( int checkClass, array<entity> spawnpoints, in
bool function VerifyCTFSpawnpoint( entity spawnpoint, int team )
{
// ensure spawnpoints aren't too close to enemy base
vector allyFlagSpot
vector enemyFlagSpot
foreach ( entity spawn in GetEntArrayByClass_Expensive( "info_spawnpoint_flag" ) )
{
if( spawn.GetTeam() == team )
allyFlagSpot = spawn.GetOrigin()
else
enemyFlagSpot = spawn.GetOrigin()
}

if ( HasSwitchedSides() )
team = GetOtherTeam( team )

array<entity> startSpawns = SpawnPoints_GetPilotStart( team )
array<entity> enemyStartSpawns = SpawnPoints_GetPilotStart( GetOtherTeam( team ) )

vector averageFriendlySpawns
vector averageEnemySpawns

foreach ( entity spawn in startSpawns )
averageFriendlySpawns += spawn.GetOrigin()

averageFriendlySpawns /= startSpawns.len()

foreach ( entity spawn in enemyStartSpawns )
averageEnemySpawns += spawn.GetOrigin()

averageEnemySpawns /= startSpawns.len()
if( Distance2D( spawnpoint.GetOrigin(), allyFlagSpot ) > Distance2D( spawnpoint.GetOrigin(), enemyFlagSpot ) )
return false

return Distance2D( spawnpoint.GetOrigin(), averageEnemySpawns ) / Distance2D( averageFriendlySpawns, averageEnemySpawns ) > 0.35
return true
}

void function CTFInitPlayer( entity player )
Expand Down
48 changes: 19 additions & 29 deletions Northstar.CustomServers/mod/scripts/vscripts/mp/spawn.nut
Original file line number Diff line number Diff line change
Expand Up @@ -130,7 +130,7 @@ entity function FindSpawnPoint( entity player, bool isTitan, bool useStartSpawnp
{
int team = player.GetTeam()
if ( HasSwitchedSides() )
team = GetOtherTeam( team )
team = ( team == TEAM_MILITIA ) ? TEAM_IMC : TEAM_MILITIA

array<entity> spawnpoints
if ( useStartSpawnpoint )
Expand Down Expand Up @@ -181,29 +181,19 @@ entity function GetBestSpawnpoint( entity player, array<entity> spawnpoints )
foreach ( entity spawnpoint in spawnpoints )
{
if ( IsSpawnpointValid( spawnpoint, player.GetTeam() ) )
{
validSpawns.append( spawnpoint )

if ( validSpawns.len() == 3 ) // arbitrary small sample size
break
}
}

if ( validSpawns.len() == 0 )
if ( !validSpawns.len() )
{
// no valid spawns, very bad, so dont care about spawns being valid anymore
print( "found no valid spawns! spawns may be subpar!" )
foreach ( entity spawnpoint in spawnpoints )
{
validSpawns.append( spawnpoint )

if ( validSpawns.len() == 3 ) // arbitrary small sample size
break
}
}

// last resort
if ( validSpawns.len() == 0 )
if ( !validSpawns.len() )
{
print( "map has literally 0 spawnpoints, as such everything is fucked probably, attempting to use info_player_start if present" )
entity start = GetEnt( "info_player_start" )
Expand All @@ -215,7 +205,7 @@ entity function GetBestSpawnpoint( entity player, array<entity> spawnpoints )
}
}

return validSpawns[ RandomInt( validSpawns.len() ) ] // slightly randomize it
return validSpawns.getrandom() // slightly randomize it
}

bool function IsSpawnpointValid( entity spawnpoint, int team )
Expand All @@ -232,15 +222,18 @@ bool function IsSpawnpointValid( entity spawnpoint, int team )
return false
}

if( IsFFAGame() && !spawnpoint.IsVisibleToEnemies( team ) )
return true

int compareTeam = spawnpoint.GetTeam()
if ( HasSwitchedSides() && ( compareTeam == TEAM_MILITIA || compareTeam == TEAM_IMC ) )
compareTeam = GetOtherTeam( compareTeam )
if ( HasSwitchedSides() )
compareTeam = ( compareTeam == TEAM_MILITIA ) ? TEAM_IMC : TEAM_MILITIA

foreach ( bool functionref( entity, int ) customValidationRule in file.customSpawnpointValidationRules )
if ( !customValidationRule( spawnpoint, team ) )
return false

if ( spawnpoint.GetTeam() > 0 && compareTeam != team && !IsFFAGame() )
if ( spawnpoint.GetTeam() > 0 && compareTeam != team )
return false

if ( spawnpoint.IsOccupied() )
Expand All @@ -261,13 +254,12 @@ bool function IsSpawnpointValid( entity spawnpoint, int team )
return false
}

const minEnemyDist = 1000.0 // about 20 meters?
// in rsquirrel extend returns null unlike in vanilla squirrel
array< entity > spawnBlockers = GetPlayerArrayEx( "any", TEAM_ANY, TEAM_ANY, spawnpoint.GetOrigin(), minEnemyDist )
spawnBlockers.extend( GetProjectileArrayEx( "any", TEAM_ANY, TEAM_ANY, spawnpoint.GetOrigin(), minEnemyDist ) )
foreach ( entity blocker in spawnBlockers )
if ( blocker.GetTeam() != team )
return false
const minEnemyDist = 1200.0
array< entity > spawnBlockers = GetPlayerArrayEx( "any", TEAM_ANY, spawnpoint.GetTeam(), spawnpoint.GetOrigin(), minEnemyDist )
spawnBlockers.extend( GetProjectileArrayEx( "any", TEAM_ANY, spawnpoint.GetTeam(), spawnpoint.GetOrigin(), minEnemyDist ) )
spawnBlockers.extend( GetNPCArrayEx( "any", TEAM_ANY, spawnpoint.GetTeam(), spawnpoint.GetOrigin(), minEnemyDist ) )
if ( spawnBlockers.len() )
return false

// los check
return !spawnpoint.IsVisibleToEnemies( team )
Expand Down Expand Up @@ -399,11 +391,9 @@ void function InitPreferSpawnNodes()
// frontline
void function RateSpawnpoints_Frontline( int checkClass, array<entity> spawnpoints, int team, entity player )
{
float rating = RandomFloatRange( 0.0, 100.0 )
foreach ( entity spawnpoint in spawnpoints )
{
float rating = spawnpoint.CalculateFrontlineRating()
spawnpoint.CalculateRating( checkClass, player.GetTeam(), rating, rating > 0 ? rating * 0.25 : rating )
}
spawnpoint.CalculateRating( checkClass, player.GetTeam(), rating, rating )
}

// spawnzones
Expand Down

0 comments on commit 4168db8

Please sign in to comment.