public void OnMapStart() { PrecacheModel("models/error.mdl", true); g_iBeam = PrecacheModel("materials/sprites/physbeam.vmt"); AddFileToDownloadsTable("sound/unl1/disco.wav"); PrecacheSound("unl1/disco.wav"); AddFileToDownloadsTable("sound/unl1/steamedyes.mp3"); PrecacheSound("unl1/steamedyes.mp3"); GetCurrentMap(g_sMapName, sizeof(g_sMapName)); LowerString(g_sMapName, sizeof(g_sMapName)); RestartTimers(); ClearMapInfo(); CheckDirectories(); if (g_hDatabase != null) { LoadMapInfo(); } } public void OnConfigsExecuted() { g_bLasers = g_hCvarLasers.BoolValue; } public void OnLazorsChange(ConVar convar, char[] oldValue, char[] newValue) { g_bLasers = g_hCvarLasers.BoolValue; } public void OnClientPostAdminCheck(int client) { if (isValidClient(client)) { ClearPlayerCache(client); GetPlayerInfo(client); } } public void OnClientDisconnect(int client) { if (client == g_iEditor) { g_iEditor = -1; g_bEditorComesFromMenu = false; } } public void Event_RoundStart(Handle event, char[] name, bool dontBroadcast) { for (int i = 0; i <= 1; i++) { CreateTrigger(i); } for (int i = 0; i <= MAXPLAYERS; i++) { g_iActivity[i] = -1; } } /*public Action CS_OnTerminateRound(float& delay, CSRoundEndReason& reason) { }*/ public void Event_PlayerDeath(Handle event, char[] name, bool dontBroadcast) { int client = GetClientOfUserId(GetEventInt(event, "userid")); g_iActivity[client] = -1; } void CheckDirectories() { char path[PLATFORM_MAX_PATH]; BuildPath(Path_SM, path, sizeof(path), REPLAYS_PATH); if (!DirExists(path)) CreateDirectory(path, 711); BuildPath(Path_SM, path, sizeof(path), "%s/%s", REPLAYS_PATH, g_sMapName); if (!DirExists(path)) CreateDirectory(path, 711); } public void RestartTimers() { g_hDrawFullZone = INVALID_HANDLE; g_hDrawZone = INVALID_HANDLE; g_hHudLoop = INVALID_HANDLE; g_hSideHudLoop = INVALID_HANDLE; if (g_hDrawFullZone == INVALID_HANDLE) g_hDrawFullZone = CreateTimer(0.1, DrawFullZoneTimer, INVALID_HANDLE, TIMER_REPEAT); if (g_hDrawZone == INVALID_HANDLE) g_hDrawZone = CreateTimer(1.0, DrawZoneTimer, INVALID_HANDLE, TIMER_REPEAT); if (g_hHudLoop == INVALID_HANDLE) g_hHudLoop = CreateTimer(0.2, HudLoop, INVALID_HANDLE, TIMER_REPEAT); if (g_hSideHudLoop == INVALID_HANDLE) g_hSideHudLoop = CreateTimer(1.0, SideHudLoop, INVALID_HANDLE, TIMER_REPEAT); } public void ClearMapInfo() { for (int i = 0; i <= 1; i++) { g_iTriggerEnt[i] = -1; for (int f = 0; f <= 2; f++) { g_fStartOrigins[i][f] = 0.0; g_fEndOrigins[i][f] = 0.0; } } g_iTier = 1; g_iMapID = -1; g_bActive = false; g_iEditor = -1; g_bEditorComesFromMenu = false; g_iSnapToClient = -1; g_fWrTime = -1.0; Format(g_sWrHolder, sizeof(g_sWrHolder), "\0"); } public void ProcessFinish(int client) { float fTime, fTimeToWR; char name[MAX_NAME_LENGTH], cTime[16], cTimeToWR[16]; GetClientName(client, name, sizeof(name)); fTime = GetEngineTime() - g_fStartTime[client]; fTimeToWR = fTime - g_fWrTime; TimerFormat(fTime, cTime, sizeof(cTime), true, false); if (fTimeToWR == fTime) Format(cTimeToWR, sizeof(cTimeToWR), "WR"); else TimerFormat(fTimeToWR, cTimeToWR, sizeof(cTimeToWR), true, true); if (g_fMapTime[client] > fTime) { float fTimeDif; char cTimeDif[16]; fTimeDif = g_fMapTime[client] - fTime; g_fMapTime[client] = fTime; TimerFormat(fTimeDif, cTimeDif, sizeof(cTimeDif), true, false); TimerPrintToChat(client, true, "%T", "FinishedImproved", LANG_SERVER, name, cTime, cTimeToWR, cTimeDif); UpdateTime(client); if (fTimeToWR < 0.0) UpdateWR(client, fTime, name); } else { TimerPrintToChat(client, true, "%T", "Finished", LANG_SERVER, name, cTime, cTimeToWR); if (g_fMapTime[client] == 0.0) { g_fMapTime[client] = fTime; UpdateTime(client); if (fTimeToWR < 0.0 || g_fWrTime == 0.0) { UpdateWR(client, fTime, name); } } else { AddCompletion(client); } } } public void UpdateWR(int client, float time, char[] name) { if (g_fWrTime == -1.0) { LogError("WR never loaded, reload map"); return; } if (g_fWrTime < time && g_fWrTime != 0.0) { LogError("Time submitted is not faster"); return; } SaveRecord(client); g_fWrTime = time; strcopy(g_sWrHolder, sizeof(g_sWrHolder), name); } public void ProcessRankMessage(int client, int rank, int total) { char name[MAX_NAME_LENGTH]; GetClientName(client, name, sizeof(name)); if (rank > 10) TimerPrintToChat(client, false, "%T", "Rank", LANG_SERVER, name, rank, total); else if (rank <= 10 && rank != 1) { TimerPrintToChat(client, true, "%T", "RankTop10", LANG_SERVER, name, rank, total); EmitSoundToAll("unl1/steamedyes.mp3"); } else if (rank == 1) { TimerPrintToChat(client, true, "%T", "RankWR", LANG_SERVER, name, rank, total); EmitSoundToAll("unl1/disco.wav"); } }