219 lines
		
	
	
		
			4.6 KiB
		
	
	
	
		
			SourcePawn
		
	
	
	
	
	
			
		
		
	
	
			219 lines
		
	
	
		
			4.6 KiB
		
	
	
	
		
			SourcePawn
		
	
	
	
	
	
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()
 | 
						|
{
 | 
						|
	delete g_hDrawFullZone;
 | 
						|
	delete g_hDrawZone;
 | 
						|
	delete g_hHudLoop;
 | 
						|
	delete g_hSideHudLoop;
 | 
						|
 | 
						|
	g_hDrawFullZone = CreateTimer(0.2, DrawFullZoneTimer, INVALID_HANDLE, TIMER_REPEAT|TIMER_FLAG_NO_MAPCHANGE);
 | 
						|
	g_hDrawZone = CreateTimer(1.0, DrawZoneTimer, INVALID_HANDLE, TIMER_REPEAT|TIMER_FLAG_NO_MAPCHANGE);
 | 
						|
	g_hHudLoop = CreateTimer(0.2, HudLoop, INVALID_HANDLE, TIMER_REPEAT|TIMER_FLAG_NO_MAPCHANGE);
 | 
						|
	g_hSideHudLoop = CreateTimer(1.0, SideHudLoop, INVALID_HANDLE, TIMER_REPEAT|TIMER_FLAG_NO_MAPCHANGE);
 | 
						|
}
 | 
						|
 | 
						|
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");
 | 
						|
	}
 | 
						|
} |