diff --git a/mp/src/game/server/neo/neo_dm_spawn.cpp b/mp/src/game/server/neo/neo_dm_spawn.cpp index 6fcdcb9fb..6c421cf7a 100644 --- a/mp/src/game/server/neo/neo_dm_spawn.cpp +++ b/mp/src/game/server/neo/neo_dm_spawn.cpp @@ -160,9 +160,27 @@ static void DMSpawnComCallbackTeleportNext() } } +static void DMSpawnComCallbackMapinfo() +{ + char szCurrentMapName[MAX_MAP_NAME + 1]; + V_strcpy_safe(szCurrentMapName, STRING(gpGlobals->mapname)); + + int iEntCount = 0; + CBaseEntity *entDMSpawn = nullptr; + while ((entDMSpawn = gEntList.FindEntityByClassname(entDMSpawn, "info_player_deathmatch"))) + { + ++iEntCount; + } + + Msg("Deathmatch spawns for: %s\ndmspawn spawns count: %d\ninfo_player_deathmatch count: %d\nAllow deathmatch: %s", + szCurrentMapName, gDMSpawnLocs.Size(), iEntCount, (iEntCount > 0 || !gDMSpawnLocs.IsEmpty()) ? "YES" : "NO"); +} + ConCommand neo_sv_dmspawn_create("neo_sv_dmspawn_create", &DMSpawnComCallbackCreate, "", FCVAR_USERINFO | FCVAR_CHEAT); ConCommand neo_sv_dmspawn_removeall("neo_sv_dmspawn_removeall", &DMSpawnComCallbackRemoveAll, "", FCVAR_USERINFO | FCVAR_CHEAT); ConCommand neo_sv_dmspawn_printlocs("neo_sv_dmspawn_printlocs", &DMSpawnComCallbackPrintLocs, "", FCVAR_USERINFO | FCVAR_CHEAT); ConCommand neo_sv_dmspawn_save("neo_sv_dmspawn_save", &DMSpawnComCallbackSave, "", FCVAR_USERINFO | FCVAR_CHEAT); ConCommand neo_sv_dmspawn_load("neo_sv_dmspawn_load", &DMSpawnComCallbackLoad, "", FCVAR_USERINFO | FCVAR_CHEAT); ConCommand neo_sv_dmspawn_teleportnext("neo_sv_dmspawn_teleportnext", &DMSpawnComCallbackTeleportNext, "", FCVAR_USERINFO | FCVAR_CHEAT); +ConCommand neo_sv_dmspawn_mapinfo("neo_sv_dmspawn_mapinfo", &DMSpawnComCallbackMapinfo, "", FCVAR_USERINFO); +ConVar neo_sv_dmspawn_useent("neo_sv_dmspawn_useent", "0", FCVAR_USERINFO); diff --git a/mp/src/game/server/neo/neo_player.cpp b/mp/src/game/server/neo/neo_player.cpp index fdf9ead54..f3a6bc785 100644 --- a/mp/src/game/server/neo/neo_player.cpp +++ b/mp/src/game/server/neo/neo_player.cpp @@ -118,6 +118,7 @@ CNEOGameRulesProxy* neoGameRules; extern CBaseEntity *g_pLastSpawn; extern ConVar neo_sv_ignore_wep_xp_limit; +extern ConVar neo_sv_dmspawn_useent; ConVar sv_neo_can_change_classes_anytime("sv_neo_can_change_classes_anytime", "0", FCVAR_CHEAT | FCVAR_REPLICATED, "Can players change classes at any moment, even mid-round?", true, 0.0f, true, 1.0f); @@ -2030,14 +2031,20 @@ CBaseEntity* CNEO_Player::EntSelectSpawnPoint( void ) edict_t *player = edict(); #endif - // TODO (nullsystem): If mappers want to set the DM spawn: info_player_dm? - CBaseEntity *pSpot = NULL; CBaseEntity *pLastSpawnPoint = g_pLastSpawn; const char *pSpawnpointName = "info_player_start"; const auto alternate = NEORules()->roundAlternate(); - if (NEORules()->IsTeamplay()) + // NEO TODO (nullsystem): Teamplay vs non-teamplay + // info_player_deathmatch is from HL2MP, but maps can utilize HL2MP and this entity anyway + const bool bIsTeamplay = NEORules()->IsTeamplay(); + if (neo_sv_dmspawn_useent.GetBool() || !bIsTeamplay) + { + pSpawnpointName = "info_player_deathmatch"; + pLastSpawnPoint = g_pLastSpawn; + } + else { if (GetTeamNumber() == TEAM_JINRAI) {