Shit

 avatar
unknown
c_cpp
a year ago
2.5 kB
11
Indexable
// CALLED A BIT LATER AFTER OnMapStart()
stock void CreateZoneEntity( int index )
{
    int ent = CreateTrigger( g_zones[index].cordMin, g_zones[index].cordMax );

    if ( !ent )
    {
        PrintToServer("ERROR | Can not create trigger for zone");
        return;
    }

    SetTriggerIndex( ent, index );

    SDKHook( ent, SDKHook_Touch, Event_Touch_Zone );
    SDKHook( ent, SDKHook_EndTouch, Event_EndTouch_Zone );

    g_zones[index].ent = ent;

    return;
}

stock int CreateTrigger( float vecMins[3], float vecMaxs[3] )
{
    int ent = CreateEntityByName( "trigger_multiple" );

    if ( ent < 1 )
    {
    	LogError( "Couldn't create block entity!" );
    	return 0;
    }

    DispatchKeyValue( ent, "wait", "0" );
    DispatchKeyValue( ent, "StartDisabled", "0" );
    DispatchKeyValue( ent, "spawnflags", "1");
	
    if ( !DispatchSpawn( ent ) )
    {
        LogError("Couldn't spawn block entity!" );
        return 0;
	}
	
    ActivateEntity( ent );
	
    SetEntityModel( ent, BRUSH_MODEL );
	
    SetEntProp( ent, Prop_Send, "m_fEffects", 32 ); // NODRAW
	
    float vecPos[3];
    float vecNewMaxs[3];

	// Determine the entity's origin.
	// This means the bounds will be just opposite numbers of each other.
    vecNewMaxs[0] = ( vecMaxs[0] - vecMins[0] ) / 2;
    vecPos[0] = vecMins[0] + vecNewMaxs[0];

    vecNewMaxs[1] = ( vecMaxs[1] - vecMins[1] ) / 2;
    vecPos[1] = vecMins[1] + vecNewMaxs[1];

    vecNewMaxs[2] = ( vecMaxs[2] - vecMins[2] ) / 2;
    vecPos[2] = vecMins[2] + vecNewMaxs[2];
	
    TeleportEntity( ent, vecPos, NULL_VECTOR, NULL_VECTOR );
	
	// We then set the mins and maxs of the zone according to the center.
    float vecNewMins[3];
	
    vecNewMins[0] = -1 * vecNewMaxs[0];
    vecNewMins[1] = -1 * vecNewMaxs[1];
    vecNewMins[2] = -1 * vecNewMaxs[2];
	
    SetEntPropVector( ent, Prop_Send, "m_vecMins", vecNewMins );
    SetEntPropVector( ent, Prop_Send, "m_vecMaxs", vecNewMaxs );
    SetEntProp( ent, Prop_Send, "m_nSolidType", 2 ); // Essential! Use bounding box instead of model's bsp(?) for input.
	
    return ent;
}

public void Event_Touch_Zone( int trigger, int client )
{
    ...
    return;
}

public void Event_EndTouch_Zone( int trigger, int client )
{
    ...
    return;
}

stock void SetTriggerIndex( int ent, int index )
{
    SetEntProp( ent, Prop_Data, "m_iHealth", index );
    return;
}
Editor is loading...
Leave a Comment