/* * ============================================================================ * * Zombie:Reloaded * * File: classevents.inc * Type: Core * Description: Functions for handling class related events. * * ============================================================================ */ /* ------------------------------------ * * GAME EVENTS * * ------------------------------------ */ /** * To be called when a client connect to the server. * (OnClientPutInServer) */ ClassClientInit(client) { // Check if there are valid classes and the client is valid. // To prevent bots or SourceTV causing errors. If classes are invalid this // event was executed before classes were loaded. if (ClassValidated && ZRIsClientValid(client)) { // Set default class indexes on the player. ClassClientSetDefaultIndexes(client); } // Forward event to sub-modules ClassOverlayClientInit(client); } /** * Called when all modules are done loading. */ ClassOnModulesLoaded() { // Set default classes on all player slots. ClassClientSetDefaultIndexes(); } ClassOnClientDisconnect(client) { // Disable class attributes with timers. ClassHealthRegenStop(client); } /** * Client is spawning into the game. * * @param client The client index. */ ClassOnClientSpawn(client) { // Check if the player is alive. if (!IsPlayerAlive(client)) { return; } // Check if there are valid classes. Block this event if classes aren't // done loading. if (!ClassValidated) { return; } // Reset attributes by triggering death event. ClassOnClientDeath(client); new bool:randomclass = GetConVarBool(g_hCvarsList[CVAR_CLASSES_RANDOM]); decl String:steamid[16]; decl String:classname[64]; // Assign random classes if enabled. Always do it for bots. GetClientAuthString(client, steamid, sizeof(steamid)); if (randomclass || StrEqual(steamid, "BOT")) { // 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); TranslationPrintToChat(client, "Classes random assignment", classname); // Mark human class as selected. ClassSelected[client][ZR_CLASS_TEAM_HUMANS] = randomhuman; ClassGetName(randomhuman, classname, sizeof(classname), ZR_CLASS_TEAM_HUMANS); TranslationPrintToChat(client, "Classes random assignment", classname); // Update player cache with the human class data, and apply it. ClassReloadPlayerCache(client, randomhuman); ClassApplyAttributes(client); } // Check if the player should spawn in admin mode. if (ClassPlayerAdminMode[client]) { // Mark player as in admin mode. ClassPlayerInAdminMode[client] = true; // 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; // Apply class attributes for the currently active class. ClassReloadPlayerCache(client, ClassGetActiveIndex(client)); ClassApplyAttributes(client); } // Forward event to sub-modules. ClassOverlayOnClientSpawn(client); } ClassOnClientDeath(client) { // Disable class attributes with timers. ClassHealthRegenStop(client); // Set client's FOV back to normal. ToolsSetClientDefaultFOV(client, 90); // Forward event to sub-modules. ClassOverlayOnClientDeath(client); } ClassOnClientInfected(client, bool:motherzombie = false) { new classindex = ClassGetActiveIndex(client); // Disable class attributes with timers. ClassHealthRegenStop(client); // Update the players cache with zombie attributes. ClassReloadPlayerCache(client, classindex); // Apply the new attributes. ClassApplyAttributes(client, motherzombie); // Forward event to sub-modules. ClassOverlayOnClientInfected(client); }