b9efc06bba
either not used at all or in disabled
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
|
|
|
|
}*/ |