151 lines
		
	
	
		
			3.6 KiB
		
	
	
	
		
			SourcePawn
		
	
	
	
	
	
			
		
		
	
	
			151 lines
		
	
	
		
			3.6 KiB
		
	
	
	
		
			SourcePawn
		
	
	
	
	
	
| public void CreateTrigger(int zone)
 | |
| {
 | |
| 	if ((g_fStartOrigins[zone][0] == 0.0) && (g_fStartOrigins[zone][1] == 0.0) && (g_fStartOrigins[zone][2] == 0.0) && (g_fEndOrigins[zone][0] == 0.0) && (g_fEndOrigins[zone][1] == 0.0) && (g_fEndOrigins[zone][2] == 0.0))
 | |
| 		return;
 | |
| 		
 | |
| 	if (g_iTriggerEnt[zone] > -1)
 | |
| 	{
 | |
| 		if (IsValidEntity(g_iTriggerEnt[zone]))
 | |
| 		{
 | |
| 			AcceptEntityInput(g_iTriggerEnt[zone], "Kill");
 | |
| 		}
 | |
| 		g_iTriggerEnt[zone] = -1;
 | |
| 	}
 | |
| 	
 | |
| 	float max[3];
 | |
| 	float min[3];
 | |
| 
 | |
| 	min = g_fStartOrigins[zone];
 | |
| 	max = g_fEndOrigins[zone];
 | |
| 
 | |
| 	char name[12];
 | |
| 	if (zone == 0)
 | |
| 		Format(name, sizeof name, "start");
 | |
| 	if (zone == 1)
 | |
| 		Format(name, sizeof name, "end");
 | |
| 		
 | |
| 	float mid[3] = 0.0;
 | |
| 	max[2]+=100;
 | |
| 
 | |
| 	GetMiddleOfABox(max, min, mid);
 | |
| 	min[0] = min[0] - mid[0];
 | |
| 	if(min[0] > 0.0)
 | |
| 	min[0] *= -1.0;
 | |
| 	min[1] = min[1] - mid[1];
 | |
| 	if(min[1] > 0.0)
 | |
| 	min[1] *= -1.0;
 | |
| 	min[2] = min[2] - mid[2];
 | |
| 	if(min[2] > 0.0)
 | |
| 	min[2] *= -1.0;
 | |
| 
 | |
| 	max[0] = max[0] - mid[0];
 | |
| 	if(max[0] < 0.0)
 | |
| 	max[0] *= -1.0;
 | |
| 	max[1] = max[1] - mid[1];
 | |
| 	if(max[1] < 0.0)
 | |
| 	max[1] *= -1.0;
 | |
| 	max[2] = max[2] - mid[2];
 | |
| 	if(max[2] < 0.0)
 | |
| 	max[2] *= -1.0;
 | |
| 
 | |
| 	g_iTriggerEnt[zone] = CreateEntityByName("trigger_multiple");
 | |
| 
 | |
| 	DispatchKeyValue(g_iTriggerEnt[zone], "spawnflags", "1");
 | |
| 	DispatchKeyValue(g_iTriggerEnt[zone], "targetname", name);
 | |
| 	
 | |
| 	DispatchKeyValue(g_iTriggerEnt[zone], "wait", "0");
 | |
| 
 | |
| 	DispatchSpawn(g_iTriggerEnt[zone]);
 | |
| 	ActivateEntity(g_iTriggerEnt[zone]);
 | |
| 	
 | |
| 	//PrintToServer("Dispatched and activated %s", name);
 | |
| 	
 | |
| 	TeleportEntity(g_iTriggerEnt[zone], mid, NULL_VECTOR, NULL_VECTOR);
 | |
| 	SetEntityModel(g_iTriggerEnt[zone], "models/error.mdl");
 | |
| 	
 | |
| 	//PrintToServer("Teleported and set model %s", name);
 | |
| 	
 | |
| 	SetEntPropVector(g_iTriggerEnt[zone], Prop_Send, "m_vecMins", min);
 | |
| 	SetEntPropVector(g_iTriggerEnt[zone], Prop_Send, "m_vecMaxs", max);
 | |
| 	SetEntProp(g_iTriggerEnt[zone], Prop_Send, "m_nSolidType", 2);
 | |
| 	
 | |
| 	//PrintToServer("Set vecs and solidtype %s", name);
 | |
| 	
 | |
| 	int iEffects = GetEntProp(g_iTriggerEnt[zone], Prop_Send, "m_fEffects");
 | |
| 	iEffects |= 0x020;
 | |
| 	SetEntProp(g_iTriggerEnt[zone], Prop_Send, "m_fEffects", iEffects);
 | |
| 	
 | |
| 	//PrintToServer("Set effects %s", name);
 | |
| 
 | |
| 	SDKHook(g_iTriggerEnt[zone], SDKHook_StartTouch, zoneStartTouch);
 | |
| 	SDKHook(g_iTriggerEnt[zone], SDKHook_EndTouch, zoneEndTouch);
 | |
| 	
 | |
| 	//PrintToServer("Hooks Hooked %s", name);
 | |
| }
 | |
| 
 | |
| public Action zoneEndTouch (int caller, int client)
 | |
| {
 | |
| 	if (!isValidClient(client) || client == g_iEditor || !g_bActive)
 | |
| 		return;
 | |
| 
 | |
| 
 | |
| 	char trigName[16];
 | |
| 	GetEntPropString(caller, Prop_Data, "m_iName", trigName, sizeof trigName);
 | |
| 	
 | |
| 	//Player is Exiting Start Zone
 | |
| 	if (StrEqual(trigName, "start"))
 | |
| 	{
 | |
| 		//Player is on starzone state, start run
 | |
| 		if (g_iActivity[client] == 1)
 | |
| 		{
 | |
| 			CheckSpeed(client);
 | |
| 			g_iActivity[client] = 0;
 | |
| 			g_fStartTime[client] = GetEngineTime();
 | |
| 			g_arrayRun[client].Clear();
 | |
| 		}
 | |
| 	}
 | |
| 	
 | |
| 	//Player is Exiting End Zone
 | |
| 	if (StrEqual(trigName, "end"))
 | |
| 	{
 | |
| 		//Set Player Inactive
 | |
| 		g_iActivity[client] = -1;
 | |
| 		//EndZoneRoutine(client);
 | |
| 	}
 | |
| }
 | |
| 
 | |
| public Action zoneStartTouch (int caller, int client)
 | |
| {
 | |
| 	if (!isValidClient(client) || client == g_iEditor || !g_bActive)
 | |
| 		return;
 | |
| 	
 | |
| 	char trigName[16];
 | |
| 	GetEntPropString(caller, Prop_Data, "m_iName", trigName, sizeof trigName);
 | |
| 	
 | |
| 	//Player is Entering Start Zone
 | |
| 	if (StrEqual(trigName, "start"))
 | |
| 	{
 | |
| 		//Player teleported from endzone, exec endzoneroutine before reset
 | |
| 		if (g_iActivity[client] == 2)
 | |
| 		{
 | |
| 			//EndZoneRoutine(client);
 | |
| 		}
 | |
| 		//TODO: Reset record array;
 | |
| 		g_iActivity[client] = 1;
 | |
| 	}
 | |
| 	
 | |
| 	if (StrEqual(trigName, "end"))
 | |
| 	{
 | |
| 		if (g_iActivity[client] == 0)
 | |
| 		{
 | |
| 			ProcessFinish(client);
 | |
| 			g_iActivity[client] = 2;
 | |
| 		}
 | |
| 	}
 | |
| }
 | |
| 
 | |
| /*public void EndZoneRoutine(int client)
 | |
| {
 | |
| 	//TODO: Save Bot if needed
 | |
| 	
 | |
| }*/ |