diff --git a/src/zr/event.inc b/src/zr/event.inc index ca3f52c..c96b359 100644 --- a/src/zr/event.inc +++ b/src/zr/event.inc @@ -172,8 +172,8 @@ public Action:EventPlayerSpawn(Handle:event, const String:name[], bool:dontBroad } // Forward event to modules. - ClassOnClientSpawn(index); InfectOnClientSpawn(index); + ClassOnClientSpawn(index); // Module event depends on infect module. SEffectsOnClientSpawn(index); AccountOnClientSpawn(index); SpawnProtectOnClientSpawn(index); diff --git a/src/zr/playerclasses/classevents.inc b/src/zr/playerclasses/classevents.inc index 2dff5e3..40faffd 100644 --- a/src/zr/playerclasses/classevents.inc +++ b/src/zr/playerclasses/classevents.inc @@ -37,49 +37,71 @@ ClassOnClientDisconnect(client) ClassOnClientSpawn(client) { - // Reset client's FOV. - ToolsSetClientDefaultFOV(client, ATTRIBUTES_FOV_DEFAULT); + if (!IsPlayerAlive(client)) + { + // The client isn't alive. + return; + } new bool:randomclass = GetConVarBool(g_hCvarsList[CVAR_CLASSES_RANDOM]); - new bool:showmenu = GetConVarBool(g_hCvarsList[CVAR_CLASSES_SPAWN]); + decl String:steamid[16]; decl String:classname[64]; - if (showmenu && !randomclass) + // Assign random classes if enabled. Always do it for bots. + GetClientAuthString(client, steamid, sizeof(steamid)); + if (randomclass || StrEqual(steamid, "BOT")) { - ClassMenuMain(client); + // Get random classes for each type. + new randomzombie = ClassGetRandomClass(ZR_CLASS_TEAM_ZOMBIES); + new randomhuman = ClassGetRandomClass(ZR_CLASS_TEAM_HUMANS); + + // Mark zombie class as selected. + ClassSelected[client][ZR_CLASS_TEAM_ZOMBIES] = randomzombie; + ClassGetName(randomzombie, classname, sizeof(classname), ZR_CLASS_TEAM_ZOMBIES); + ZR_PrintToChat(client, "Auto-assign", classname); + + // Mark human class as selected. + ClassSelected[client][ZR_CLASS_TEAM_HUMANS] = randomhuman; + ClassGetName(randomhuman, classname, sizeof(classname), ZR_CLASS_TEAM_HUMANS); + ZR_PrintToChat(client, "Auto-assign", classname); + + // Update player cache with the human class data, and apply it. + ClassReloadPlayerCache(client, randomhuman); + ClassApplyAttributes(client); } - // Assign random classes if enabled. - GetClientAuthString(client, steamid, sizeof(steamid)); - if (StrEqual(steamid, "BOT") || randomclass) + // Check if the player should spawn in admin mode. + if (ClassPlayerAdminMode[client]) + { - // Get player's team - new teamid = GetClientTeam(client); + // Mark player as in admin mode. + ClassPlayerInAdminMode[client] = true; - // If the first zombie spawned, and the player is on the terrorist team, then - // find a random zombie class, otherwise find a human class. - if (g_bZombieSpawned && teamid == CS_TEAM_T) - { - new classindex = ClassGetRandomClass(ZR_CLASS_TEAM_ZOMBIES); - ClassSelected[client][ZR_CLASS_TEAM_ZOMBIES] = classindex; - ClassGetName(client, classname, sizeof(classname)); - } - else - { - new classindex = ClassGetRandomClass(ZR_CLASS_TEAM_HUMANS); - ClassSelected[client][ZR_CLASS_TEAM_HUMANS] = classindex; - ClassGetName(client, classname, sizeof(classname)); - } + // Update player cache with the admin class and apply attributes. + new adminindex = ClassPlayerNextAdminClass[client]; + ClassReloadPlayerCache(client, adminindex); + ClassApplyAttributes(client); + } + else + { + // Mark player as not in admin mode. + ClassPlayerInAdminMode[client] = false; - ZR_PrintToChat(client, "Auto-assign", classname); + // Apply class attributes for the currently active class. + ClassReloadPlayerCache(client, ClassGetActiveIndex(client)); + ClassApplyAttributes(client); } } ClassOnClientDeath(client) { + // Reset certain attributes to not make spectating disorted. ClassHealthRegenStop(client); ClassOverlayStop(client); + + // Set client's FOV back to normal. + ToolsSetClientDefaultFOV(client, 90); } ClassOnClientInfected(client, bool:motherzombie = false) @@ -93,11 +115,6 @@ ClassOnClientInfected(client, bool:motherzombie = false) ClassApplyAttributes(client, motherzombie); } -ClassOnRoundStart() -{ -} - - /* ------------------------------------ * * PLAYER COMMANDS diff --git a/src/zr/playerclasses/classmenus.inc b/src/zr/playerclasses/classmenus.inc index 0ae5e45..323c173 100644 --- a/src/zr/playerclasses/classmenus.inc +++ b/src/zr/playerclasses/classmenus.inc @@ -68,8 +68,8 @@ ClassMenuMain(client) Format(humanselect, sizeof(humanselect), "%t\n %s", "!zclass human", humanclass); AddMenuItem(menu, "", humanselect, human_itemdraw); - // Only display admin class options for admins. - if (ZRIsClientAdmin(client)) + // Only display admin class options for admins, and if admin classes exist. + if (ZRIsClientAdmin(client) && ClassCountTeam(ZR_CLASS_TEAM_ADMINS)) { // List admin class options. ClassGetName(ClassSelected[client][ZR_CLASS_TEAM_ADMINS], adminclass, sizeof(adminclass), ZR_CLASS_CACHE_MODIFIED); @@ -243,8 +243,17 @@ public ClassMenuSelectHandle(Handle:menu, MenuAction:action, client, slot) // Solve teamid from the class index. teamid = ClassGetTeamID(classindex, ZR_CLASS_CACHE_MODIFIED); - // Set the players active class to the specified class. - ClassSelected[client][teamid] = classindex; + // Check if the class is a admin class. + if (teamid == ZR_CLASS_TEAM_ADMINS) + { + // Set the admin class to be used on next admin spawn. + ClassPlayerNextAdminClass[client] = classindex; + } + else + { + // Set the players active class to the specified class. + ClassSelected[client][teamid] = classindex; + } } case MenuAction_Cancel: { diff --git a/src/zr/spawnprotect.inc b/src/zr/spawnprotect.inc index ea9d34d..df0f5af 100644 --- a/src/zr/spawnprotect.inc +++ b/src/zr/spawnprotect.inc @@ -150,9 +150,8 @@ public Action:SpawnProtectTimer(Handle:timer, any:client) ZR_HudHint(client, "Spawn protection end"); // Fix attributes. - // TODO: Set class attributes. - ToolsSetClientAlpha(client, 255); - ToolsSetClientLMV(client, 300.0); + ToolsSetClientAlpha(client, ClassGetAlphaInitial(client)); + ToolsSetClientLMV(client, ClassGetSpeed(client)); // Clear timer handle. tSpawnProtect[client] = INVALID_HANDLE; diff --git a/src/zr/zombie.inc b/src/zr/zombie.inc index ce785ce..397820b 100644 --- a/src/zr/zombie.inc +++ b/src/zr/zombie.inc @@ -19,20 +19,9 @@ public Action:Command_NightVision(client, argc) return; } - new bool:enabled = GetConVarBool(g_hCvarsList[CVAR_ENABLE]); - if (!enabled) - { - return; - } - - if (!InfectIsClientInfected(client)) - { - return; - } - bClientOverlayOn[client] = !bClientOverlayOn[client]; - decl String:overlay[256]; + decl String:overlay[PLATFORM_MAX_PATH]; ClassGetOverlayPath(client, overlay, sizeof(overlay)); if (strlen(overlay) > 0)