aboutsummaryrefslogtreecommitdiff
path: root/Northstar.CustomServers/scripts
diff options
context:
space:
mode:
Diffstat (limited to 'Northstar.CustomServers/scripts')
-rw-r--r--Northstar.CustomServers/scripts/vscripts/_loadouts_mp.gnut19
-rw-r--r--Northstar.CustomServers/scripts/vscripts/class/CHardPointEntity.nut11
-rw-r--r--Northstar.CustomServers/scripts/vscripts/earn_meter/sv_earn_meter_mp.gnut9
-rw-r--r--Northstar.CustomServers/scripts/vscripts/gamemodes/_capture_point.gnut2
-rw-r--r--Northstar.CustomServers/scripts/vscripts/gamemodes/_gamemode_cp.nut272
-rw-r--r--Northstar.CustomServers/scripts/vscripts/gamemodes/_gamemode_fra.nut2
-rw-r--r--Northstar.CustomServers/scripts/vscripts/gamemodes/_hardpoints.gnut16
-rw-r--r--Northstar.CustomServers/scripts/vscripts/lobby/_private_lobby.gnut7
-rw-r--r--Northstar.CustomServers/scripts/vscripts/lobby/sh_lobby.gnut4
-rw-r--r--Northstar.CustomServers/scripts/vscripts/mp/_changemap.nut4
10 files changed, 325 insertions, 21 deletions
diff --git a/Northstar.CustomServers/scripts/vscripts/_loadouts_mp.gnut b/Northstar.CustomServers/scripts/vscripts/_loadouts_mp.gnut
index 74f5e047..2a6eb5a8 100644
--- a/Northstar.CustomServers/scripts/vscripts/_loadouts_mp.gnut
+++ b/Northstar.CustomServers/scripts/vscripts/_loadouts_mp.gnut
@@ -34,7 +34,10 @@ void function SvLoadoutsMP_Init()
AddClientCommandCallback( "SetFactionChoicePersistenceSlot", ClientCommandCallback_SetFactionChoicePersistenceSlot )
}
else
+ {
AddClientCommandCallback( "InGameMPMenuClosed", ClientCommandCallback_InGameMPMenuClosed )
+ AddClientCommandCallback( "LoadoutMenuClosed", ClientCommandCallback_LoadoutMenuClosed )
+ }
AddCallback_OnPlayerKilled( DestroyDroppedWeapon )
}
@@ -216,13 +219,20 @@ bool function ClientCommandCallback_SetFactionChoicePersistenceSlot( entity play
return true
}
-bool function ClientCommandCallback_InGameMPMenuClosed( entity player, array<string> args )
+bool function ClientCommandCallback_LoadoutMenuClosed( entity player, array<string> args )
{
SavePdataForEntityIndex( player.GetPlayerIndex() )
TryGivePilotLoadoutForGracePeriod( player )
return true
}
+bool function ClientCommandCallback_InGameMPMenuClosed( entity player, array<string> args )
+{
+ SavePdataForEntityIndex( player.GetPlayerIndex() )
+ //TryGivePilotLoadoutForGracePeriod( player )
+ return true
+}
+
bool function IsRefValidAndOfType( string ref, int itemType )
{
return IsRefValid( ref ) && GetItemType( ref ) == itemType
@@ -230,7 +240,7 @@ bool function IsRefValidAndOfType( string ref, int itemType )
void function SetPlayerLoadoutDirty( entity player )
{
- if ( file.loadoutGracePeriodEnabled )
+ if ( file.loadoutGracePeriodEnabled || player.p.usingLoadoutCrate )
file.dirtyLoadouts.append( player )
}
@@ -240,8 +250,11 @@ void function TryGivePilotLoadoutForGracePeriod( entity player )
{
file.dirtyLoadouts.remove( file.dirtyLoadouts.find( player ) )
- if ( Time() - player.s.respawnTime <= CLASS_CHANGE_GRACE_PERIOD )
+ if ( Time() - player.s.respawnTime <= CLASS_CHANGE_GRACE_PERIOD || player.p.usingLoadoutCrate )
+ {
Loadouts_TryGivePilotLoadout( player )
+ player.p.usingLoadoutCrate = false
+ }
else
SendHudMessage( player, "#LOADOUT_CHANGE_NEXT_BOTH", -1, 0.4, 255, 255, 255, 255, 0.15, 3.0, 0.5 ) // like 90% sure this is innacurate lol
}
diff --git a/Northstar.CustomServers/scripts/vscripts/class/CHardPointEntity.nut b/Northstar.CustomServers/scripts/vscripts/class/CHardPointEntity.nut
index 4eb97955..a340bc32 100644
--- a/Northstar.CustomServers/scripts/vscripts/class/CHardPointEntity.nut
+++ b/Northstar.CustomServers/scripts/vscripts/class/CHardPointEntity.nut
@@ -1,15 +1,16 @@
untyped
-global function CodeCallback_RegisterClass_C_HardPointEntity
+// note: had to rename all instances of C_HardPointEntity to CHardPointEntity here, unsure why this was even a thing?
+global function CodeCallback_RegisterClass_CHardPointEntity
-function CodeCallback_RegisterClass_C_HardPointEntity()
+function CodeCallback_RegisterClass_CHardPointEntity()
{
- /*C_HardPointEntity.ClassName <- "C_HardPointEntity"
+ CHardPointEntity.ClassName <- "CHardPointEntity"
- function C_HardPointEntity::Enabled()
+ function CHardPointEntity::Enabled()
{
return this.GetHardpointID() >= 0
}
- #document( "C_HardPointEntity::Enabled", "Returns true if this hardpoint is enabled" )*/
+ #document( "CHardPointEntity::Enabled", "Returns true if this hardpoint is enabled" )
}
diff --git a/Northstar.CustomServers/scripts/vscripts/earn_meter/sv_earn_meter_mp.gnut b/Northstar.CustomServers/scripts/vscripts/earn_meter/sv_earn_meter_mp.gnut
index a465164d..b41640ad 100644
--- a/Northstar.CustomServers/scripts/vscripts/earn_meter/sv_earn_meter_mp.gnut
+++ b/Northstar.CustomServers/scripts/vscripts/earn_meter/sv_earn_meter_mp.gnut
@@ -1,8 +1,10 @@
global function Sv_EarnMeterMP_Init
global function EarnMeterMP_SetTitanLoadout
+global function EarnMeterMP_SetPassiveMeterGainEnabled
struct {
float playingStartTime
+ bool passiveMeterGainEnabled = true
} file
void function Sv_EarnMeterMP_Init()
@@ -21,6 +23,11 @@ void function EarnMeterMP_SetTitanLoadout( entity player )
PlayerEarnMeter_SetGoal( player, EarnObject_GetByRef( GetTitanLoadoutForPlayer( player ).titanClass ) )
}
+void function EarnMeterMP_SetPassiveMeterGainEnabled( bool enabled )
+{
+ file.passiveMeterGainEnabled = enabled
+}
+
void function SetupPlayerEarnMeter( entity player )
{
PlayerEarnMeter_Reset( player )
@@ -117,7 +124,7 @@ void function EarnMeterMP_PlayerLifeThink( entity player )
PlayerEarnMeter_RefreshGoal( player )
}
- if ( Time() - lastPassiveGainTime > 4.0 ) // this might be 5.0
+ if ( Time() - lastPassiveGainTime > 4.0 && file.passiveMeterGainEnabled ) // this might be 5.0
{
lastPassiveGainTime = Time()
PlayerEarnMeter_AddOwnedFrac( player, 0.01 )
diff --git a/Northstar.CustomServers/scripts/vscripts/gamemodes/_capture_point.gnut b/Northstar.CustomServers/scripts/vscripts/gamemodes/_capture_point.gnut
index 37b89169..e02157d1 100644
--- a/Northstar.CustomServers/scripts/vscripts/gamemodes/_capture_point.gnut
+++ b/Northstar.CustomServers/scripts/vscripts/gamemodes/_capture_point.gnut
@@ -1 +1 @@
-//fuck \ No newline at end of file
+// not using this, everything is just in _hardpoints instead lol \ No newline at end of file
diff --git a/Northstar.CustomServers/scripts/vscripts/gamemodes/_gamemode_cp.nut b/Northstar.CustomServers/scripts/vscripts/gamemodes/_gamemode_cp.nut
index 2fa7e4eb..ddfe6ee6 100644
--- a/Northstar.CustomServers/scripts/vscripts/gamemodes/_gamemode_cp.nut
+++ b/Northstar.CustomServers/scripts/vscripts/gamemodes/_gamemode_cp.nut
@@ -1,12 +1,282 @@
+untyped
+
global function GamemodeCP_Init
global function RateSpawnpoints_CP
+// needed for sh_gamemode_cp_dialogue
+global array<entity> HARDPOINTS
+
+struct HardpointStruct
+{
+ entity hardpoint
+ entity trigger
+ entity prop
+
+ array<entity> imcCappers
+ array<entity> militiaCappers
+}
+
+struct {
+ bool ampingEnabled = true
+
+ array<HardpointStruct> hardpoints
+} file
+
void function GamemodeCP_Init()
{
+ file.ampingEnabled = GetCurrentPlaylistVar( "amped_capture_points" ) == "1"
+
+ RegisterSignal( "HardpointCaptureStart" )
+
+ AddCallback_EntitiesDidLoad( SpawnHardpoints )
+ AddCallback_GameStateEnter( eGameState.Playing, StartHardpointThink )
+}
+
+void function RateSpawnpoints_CP( int checkClass, array<entity> spawnpoints, int team, entity player )
+{
+
+}
+
+void function SpawnHardpoints()
+{
+ foreach ( entity spawnpoint in GetEntArrayByClass_Expensive( "info_hardpoint" ) )
+ {
+ if ( GameModeRemove( spawnpoint ) )
+ continue
+
+ // spawnpoints are CHardPoint entities
+ // init the hardpoint ent
+ int hardpointID = 0
+ if ( spawnpoint.kv.hardpointGroup == "B" )
+ hardpointID = 1
+ else if ( spawnpoint.kv.hardpointGroup == "C" )
+ hardpointID = 2
+
+ spawnpoint.SetHardpointID( hardpointID )
+
+ HardpointStruct hardpointStruct
+ hardpointStruct.hardpoint = spawnpoint
+ hardpointStruct.prop = CreatePropDynamic( spawnpoint.GetModelName(), spawnpoint.GetOrigin(), spawnpoint.GetAngles(), 6 )
+
+ entity trigger = GetEnt( expect string( spawnpoint.kv.triggerTarget ) )
+ hardpointStruct.trigger = trigger
+
+ file.hardpoints.append( hardpointStruct )
+ HARDPOINTS.append( spawnpoint ) // for vo script
+ spawnpoint.s.trigger <- trigger // also for vo script
+
+ SetGlobalNetEnt( "objective" + spawnpoint.kv.hardpointGroup + "Ent", spawnpoint )
+
+ // set up trigger functions
+ trigger.SetEnterCallback( OnHardpointEntered )
+ trigger.SetLeaveCallback( OnHardpointLeft )
+ }
+}
+
+// functions for handling hardpoint netvars
+void function SetHardpointState( HardpointStruct hardpoint, int state )
+{
+ SetGlobalNetInt( "objective" + hardpoint.hardpoint.kv.hardpointGroup + "State", state )
+ hardpoint.hardpoint.SetHardpointState( state )
+}
+
+int function GetHardpointState( HardpointStruct hardpoint )
+{
+ return GetGlobalNetInt( "objective" + hardpoint.hardpoint.kv.hardpointGroup + "State" )
+}
+
+void function SetHardpointCappingTeam( HardpointStruct hardpoint, int team )
+{
+ SetGlobalNetInt( "objective" + hardpoint.hardpoint.kv.hardpointGroup + "CappingTeam", team )
+}
+
+int function GetHardpointCappingTeam( HardpointStruct hardpoint )
+{
+ return GetGlobalNetInt( "objective" + hardpoint.hardpoint.kv.hardpointGroup + "CappingTeam" )
+}
+
+void function SetHardpointCaptureProgress( HardpointStruct hardpoint, float progress )
+{
+ SetGlobalNetFloat( "objective" + hardpoint.hardpoint.kv.hardpointGroup + "Progress", progress )
+}
+
+float function GetHardpointCaptureProgress( HardpointStruct hardpoint )
+{
+ return GetGlobalNetFloat( "objective" + hardpoint.hardpoint.kv.hardpointGroup + "Progress" )
+}
+
+
+void function StartHardpointThink()
+{
+ thread TrackChevronStates()
+
+ foreach ( HardpointStruct hardpoint in file.hardpoints )
+ thread HardpointThink( hardpoint )
+}
+
+void function HardpointThink( HardpointStruct hardpoint )
+{
+ entity hardpointEnt = hardpoint.hardpoint
+
+ float lastTime = Time()
+ float lastScoreTime = Time()
+
+ WaitFrame() // wait a frame so deltaTime is never zero
+ while ( GamePlayingOrSuddenDeath() )
+ {
+ int imcCappers = hardpoint.imcCappers.len()
+ int militiaCappers = hardpoint.militiaCappers.len()
+
+ float deltaTime = Time() - lastTime
+
+ int cappingTeam
+ if ( imcCappers > militiaCappers )
+ cappingTeam = TEAM_IMC
+ else if ( militiaCappers > imcCappers )
+ cappingTeam = TEAM_MILITIA
+
+ if ( cappingTeam != TEAM_UNASSIGNED )
+ {
+ // hardpoint is owned by controlling team
+ if ( hardpointEnt.GetTeam() == cappingTeam )
+ {
+ // hardpoint is being neutralised, reverse the neutralisation
+ if ( GetHardpointCappingTeam( hardpoint ) != cappingTeam || GetHardpointCaptureProgress( hardpoint ) < 1.0 )
+ {
+ SetHardpointCappingTeam( hardpoint, cappingTeam )
+ SetHardpointCaptureProgress( hardpoint, min( 1.0, GetHardpointCaptureProgress( hardpoint ) + ( deltaTime / CAPTURE_DURATION_CAPTURE ) ) )
+ }
+ // hardpoint is fully captured, start amping if amping is enabled
+ else if ( file.ampingEnabled && GetHardpointState( hardpoint ) < CAPTURE_POINT_STATE_AMPING )
+ SetHardpointState( hardpoint, CAPTURE_POINT_STATE_AMPING )
+
+ // amp the hardpoint
+ if ( GetHardpointState( hardpoint ) == CAPTURE_POINT_STATE_AMPING )
+ {
+ SetHardpointCaptureProgress( hardpoint, min( 2.0, GetHardpointCaptureProgress( hardpoint ) + ( deltaTime / HARDPOINT_AMPED_DELAY ) ) )
+ if ( GetHardpointCaptureProgress( hardpoint ) == 2.0 )
+ {
+ SetHardpointState( hardpoint, CAPTURE_POINT_STATE_AMPED )
+
+ // can't use the dialogue functions here because for some reason GamemodeCP_VO_Amped isn't global?
+ PlayFactionDialogueToTeam( "amphp_youAmped" + hardpointEnt.kv.hardpointGroup, cappingTeam )
+ PlayFactionDialogueToTeam( "amphp_enemyAmped" + hardpointEnt.kv.hardpointGroup, GetOtherTeam( cappingTeam ) )
+ }
+ }
+ }
+ else // we don't own this hardpoint, cap it
+ {
+ SetHardpointCappingTeam( hardpoint, cappingTeam )
+ GamemodeCP_VO_StartCapping( hardpointEnt ) // this doesn't consistently trigger for some reason
+
+ SetHardpointCaptureProgress( hardpoint, min( 1.0, GetHardpointCaptureProgress( hardpoint ) + ( deltaTime / CAPTURE_DURATION_CAPTURE ) ) )
+
+ if ( GetHardpointCaptureProgress( hardpoint ) >= 1.0 )
+ {
+ SetTeam( hardpointEnt, cappingTeam )
+ SetTeam( hardpoint.prop, cappingTeam )
+ SetHardpointState( hardpoint, CAPTURE_POINT_STATE_CAPTURED )
+
+ EmitSoundOnEntityToTeamExceptPlayer( hardpointEnt, "hardpoint_console_captured", cappingTeam, null )
+ GamemodeCP_VO_Captured( hardpointEnt )
+ }
+ }
+ }
+ // capture halting
+ else if ( imcCappers > 0 && imcCappers == militiaCappers )
+ SetHardpointState( hardpoint, CAPTURE_POINT_STATE_HALTED )
+ // amped decay
+ else if ( imcCappers == 0 && militiaCappers == 0 && GetHardpointState( hardpoint ) >= CAPTURE_POINT_STATE_AMPING )
+ {
+ // it seems like network vars won't change if they're too similar? often we get situations here where it's tryna change from 1.00098 to 1 which doesn't work
+ // so we need to check the "real" progress manually
+ // have only gotten this issue here so far, but in theory i think this could be an issue in a good few places, worth looking out for
+ // tho, idk might not be, we don't work with numbers at this small of a scale too often
+ float realProgress = max( 1.0, GetHardpointCaptureProgress( hardpoint ) - ( deltaTime / HARDPOINT_AMPED_DELAY ) )
+ SetHardpointCaptureProgress( hardpoint, realProgress )
+
+ if ( realProgress == 1 )
+ SetHardpointState( hardpoint, CAPTURE_POINT_STATE_CAPTURED )
+ // dont use unamping atm
+ //else
+ // SetHardpointState( hardpoint, CAPTURE_POINT_STATE_SELF_UNAMPING )
+ }
+
+ // scoring
+ if ( hardpointEnt.GetTeam() != TEAM_UNASSIGNED && GetHardpointState( hardpoint ) >= CAPTURE_POINT_STATE_CAPTURED && Time() - lastScoreTime >= TEAM_OWNED_SCORE_FREQ )
+ {
+ lastScoreTime = Time()
+
+ // 2x score if amped
+ if ( GetHardpointState( hardpoint ) == CAPTURE_POINT_STATE_AMPED )
+ AddTeamScore( hardpointEnt.GetTeam(), 2 )
+ else
+ AddTeamScore( hardpointEnt.GetTeam(), 1 )
+ }
+
+ lastTime = Time()
+ WaitFrame()
+ }
+}
+
+// doing this in HardpointThink is effort since it's for individual hardpoints
+// so we do it here instead
+void function TrackChevronStates()
+{
+ // you get 1 amped arrow for chevron / 4, 1 unamped arrow for every 1 the amped chevrons
+
+ while ( true )
+ {
+ int imcChevron
+ int militiaChevron
+
+ foreach ( HardpointStruct hardpoint in file.hardpoints )
+ {
+ if ( hardpoint.hardpoint.GetTeam() == TEAM_IMC )
+ {
+ if ( hardpoint.hardpoint.GetHardpointState() == CAPTURE_POINT_STATE_AMPED )
+ imcChevron += 4
+ else if ( hardpoint.hardpoint.GetHardpointState() >= CAPTURE_POINT_STATE_CAPTURED )
+ imcChevron++
+ }
+ else if ( hardpoint.hardpoint.GetTeam() == TEAM_MILITIA )
+ {
+ if ( hardpoint.hardpoint.GetHardpointState() == CAPTURE_POINT_STATE_AMPED )
+ militiaChevron += 4
+ else if ( hardpoint.hardpoint.GetHardpointState() >= CAPTURE_POINT_STATE_CAPTURED )
+ militiaChevron++
+ }
+ }
+
+ SetGlobalNetInt( "imcChevronState", imcChevron )
+ SetGlobalNetInt( "milChevronState", militiaChevron )
+
+ WaitFrame()
+ }
+}
+
+void function OnHardpointEntered( entity trigger, entity player )
+{
+ HardpointStruct hardpoint
+ foreach ( HardpointStruct hardpointStruct in file.hardpoints )
+ if ( hardpointStruct.trigger == trigger )
+ hardpoint = hardpointStruct
+ if ( player.GetTeam() == TEAM_IMC )
+ hardpoint.imcCappers.append( player )
+ else
+ hardpoint.militiaCappers.append( player )
}
-void function RateSpawnpoints_CP(int _0, array<entity> _1, int _2, entity _3)
+void function OnHardpointLeft( entity trigger, entity player )
{
+ HardpointStruct hardpoint
+ foreach ( HardpointStruct hardpointStruct in file.hardpoints )
+ if ( hardpointStruct.trigger == trigger )
+ hardpoint = hardpointStruct
+ if ( player.GetTeam() == TEAM_IMC )
+ hardpoint.imcCappers.remove( hardpoint.imcCappers.find( player ) )
+ else
+ hardpoint.militiaCappers.remove( hardpoint.militiaCappers.find( player ) )
} \ No newline at end of file
diff --git a/Northstar.CustomServers/scripts/vscripts/gamemodes/_gamemode_fra.nut b/Northstar.CustomServers/scripts/vscripts/gamemodes/_gamemode_fra.nut
index 15f749ac..9d8f84b5 100644
--- a/Northstar.CustomServers/scripts/vscripts/gamemodes/_gamemode_fra.nut
+++ b/Northstar.CustomServers/scripts/vscripts/gamemodes/_gamemode_fra.nut
@@ -15,6 +15,8 @@ void function GamemodeFRA_Init()
{
// need a way to disable passive earnmeter gain
ScoreEvent_SetEarnMeterValues( "PilotBatteryPickup", 0.0, 0.34 )
+ EarnMeterMP_SetPassiveMeterGainEnabled( false )
+ PilotBattery_SetMaxCount( 3 )
AddCallback_OnPlayerKilled( FRARemoveEarnMeter )
}
diff --git a/Northstar.CustomServers/scripts/vscripts/gamemodes/_hardpoints.gnut b/Northstar.CustomServers/scripts/vscripts/gamemodes/_hardpoints.gnut
index dab433f1..0a32f133 100644
--- a/Northstar.CustomServers/scripts/vscripts/gamemodes/_hardpoints.gnut
+++ b/Northstar.CustomServers/scripts/vscripts/gamemodes/_hardpoints.gnut
@@ -1,33 +1,35 @@
+// atm this is just a stub script since hardpoints are only really used in hardpoint
+// respawn probably tried to share this code across multiple modes but atm we just dont need to do that
+
global function Hardpoints_Init
+
global function CapturePoint_GetStartProgress
global function CapturePoint_GetCappingTeam
global function CapturePoint_GetOwningTeam
global function CapturePoint_GetGoalProgress
-global array<entity> HARDPOINTS
void function Hardpoints_Init()
{
-
-
+
}
float function CapturePoint_GetStartProgress( entity hardpoint )
{
- return 0.5
+ return GetGlobalNetFloat( "objective" + hardpoint.kv.hardpointGroup + "Progress" )
}
int function CapturePoint_GetCappingTeam( entity hardpoint )
{
- return 0
+ return GetGlobalNetInt( "objective" + hardpoint.kv.hardpointGroup + "CappingTeam" )
}
int function CapturePoint_GetOwningTeam( entity hardpoint )
{
- return 0
+ return hardpoint.GetTeam()
}
float function CapturePoint_GetGoalProgress( entity hardpoint )
{
- return 1.0
+ return GetGlobalNetFloat( "objective" + hardpoint.kv.hardpointGroup + "Progress" )
} \ No newline at end of file
diff --git a/Northstar.CustomServers/scripts/vscripts/lobby/_private_lobby.gnut b/Northstar.CustomServers/scripts/vscripts/lobby/_private_lobby.gnut
index 8d803da1..1b4e5dbd 100644
--- a/Northstar.CustomServers/scripts/vscripts/lobby/_private_lobby.gnut
+++ b/Northstar.CustomServers/scripts/vscripts/lobby/_private_lobby.gnut
@@ -17,6 +17,7 @@ void function PrivateLobby_Init()
AddClientCommandCallback( "PrivateMatchSetMode", ClientCommandCallback_PrivateMatchSetMode )
AddClientCommandCallback( "SetCustomMap", ClientCommandCallback_SetCustomMap )
AddClientCommandCallback( "PrivateMatchSwitchTeams", ClientCommandCallback_PrivateMatchSwitchTeams )
+ AddClientCommandCallback( "ResetMatchSettingsToDefault", ClientCommandCallback_ResetMatchSettingsToDefault )
}
bool function ClientCommandCallback_PrivateMatchLaunch( entity player, array<string> args )
@@ -157,4 +158,10 @@ void function RefreshPlayerTeams()
lastSetMilitia = !lastSetMilitia
}
}
+}
+
+bool function ClientCommandCallback_ResetMatchSettingsToDefault( entity player, array<string> args )
+{
+ ClearPlaylistVarOverrides()
+ return true
} \ No newline at end of file
diff --git a/Northstar.CustomServers/scripts/vscripts/lobby/sh_lobby.gnut b/Northstar.CustomServers/scripts/vscripts/lobby/sh_lobby.gnut
index 24436017..fda0e5ff 100644
--- a/Northstar.CustomServers/scripts/vscripts/lobby/sh_lobby.gnut
+++ b/Northstar.CustomServers/scripts/vscripts/lobby/sh_lobby.gnut
@@ -161,7 +161,7 @@ string function GetPrivateMatchMapForIndex( int index )
{
array<string> mapsArray = GetPrivateMatchMaps()
- if ( index >= mapsArray.len() )
+ if ( index >= mapsArray.len() || index < 0 )
return ""
return mapsArray[index]
@@ -171,7 +171,7 @@ string function GetPrivateMatchModeForIndex( int index )
{
array<string> modesArray = GetPrivateMatchModes()
- if ( index >= modesArray.len() )
+ if ( index >= modesArray.len() || index < 0 )
return ""
return modesArray[index]
diff --git a/Northstar.CustomServers/scripts/vscripts/mp/_changemap.nut b/Northstar.CustomServers/scripts/vscripts/mp/_changemap.nut
index 4d6dc393..7aa6940c 100644
--- a/Northstar.CustomServers/scripts/vscripts/mp/_changemap.nut
+++ b/Northstar.CustomServers/scripts/vscripts/mp/_changemap.nut
@@ -14,7 +14,9 @@ void function CodeCallback_MatchIsOver()
if ( GetCurrentPlaylistVarInt( "return_to_private_lobby", 0 ) == 1 ) // set in _private_lobby.gnut, temp lol
{
SetCurrentPlaylist( "private_match" ) // needed for private lobby to load
- ServerCommand( "changelevel mp_lobby" )
+ GameRules_ChangeMap( "mp_lobby", "tdm" ) // need to change back to tdm
+ // this is esp important for sp, since solo will break a bunch of shit in the private lobby
+ // idk if even necessary to deal with solo but eh whatever better to have it work than not
}
#if DEV