sm-zombiereloaded-3/src/zr/volfeatures/volevents.inc
richard 644c464b0c Minior fixes. Tested ZR on a vanilla server with newest SourceMod, fixed issues related to vanilla configuration. See details.
Fixed timer handle error in volfeatures on map end.
Fixed incorrect default value in class cvars.
Changed map config files to be loaded in OnAutoConfigsBuffered.
2009-10-31 18:18:11 +01:00

245 lines
5.7 KiB
SourcePawn

/*
* ============================================================================
*
* Zombie:Reloaded
*
* File: volevents.inc
* Type: Module
* Description: Handles generic events for volumetric features.
*
* Copyright (C) 2009 Greyscale, Richard Helgeby
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
* ============================================================================
*/
/**
* Called when a player enters a volume.
*
* @param client The client index.
* @param volumeIndex The volume index.
*/
VolOnPlayerEnter(client, volumeIndex)
{
// Check if volumetric features is enabled.
if (!VolEnabled)
{
// Volumetric features disabled.
return;
}
LogEvent(_, LogType_Normal, LOG_DEBUG, LogModule_Volfeatures, "Event", "Player %N entered volume %d.", client, volumeIndex);
// Forward event to features.
new VolumeFeatureTypes:voltype = Volumes[volumeIndex][Vol_Type];
switch (voltype)
{
case VolFeature_ClassEdit:
{
VolClassEditOnPlayerEnter(client, volumeIndex);
}
}
}
/**
* Called when a player leaves a volume.
*
* @param client The client index.
* @param volumeIndex The volume index.
*/
VolOnPlayerLeave(client, volumeIndex)
{
// Check if volumetric features is enabled.
if (!VolEnabled)
{
// Volumetric features disabled.
return;
}
LogEvent(_, LogType_Normal, LOG_DEBUG, LogModule_Volfeatures, "Event", "Player %N left volume %d.", client, volumeIndex);
// Forward event to features.
new VolumeFeatureTypes:voltype = Volumes[volumeIndex][Vol_Type];
switch (voltype)
{
case VolFeature_Anticamp:
{
VolAnticampOnPlayerLeave(client, volumeIndex);
}
case VolFeature_ClassEdit:
{
VolClassEditOnPlayerLeave(client, volumeIndex);
}
}
}
/**
* Called when a player spawned. Used for initializing player data.
*
* @param client The client index.
*/
VolOnPlayerSpawn(client)
{
// Check if volumetric features is enabled.
if (!VolEnabled)
{
// Volumetric features disabled.
return;
}
// Cache player location.
VolUpdatePlayerLocation(client);
}
/**
* Called when a player died.
*
* @param client The client index.
*/
VolOnPlayerDeath(client)
{
// Send player left volume event to all volumes the player was in.
for (new volindex = 0; volindex < ZR_VOLUMES_MAX; volindex++)
{
// Check if volume is unused.
if (!Volumes[volindex][Vol_InUse])
{
continue;
}
// Check if volume is disabled.
if (!Volumes[volindex][Vol_Enabled])
{
continue;
}
// Check if player is inside the volume.
if (VolPlayerInVolume[client][volindex])
{
// Mark as not in the volume and trigger event.
VolPlayerInVolume[client][volindex] = false;
VolOnPlayerLeave(client, volindex);
}
}
}
/**
* Called when a player disconnects.
*
* @param client The client index.
*/
VolOnPlayerDisconnect(client)
{
// Disable trigger delay counters.
VolResetCountDown(client);
// Trigger death event to clean up.
VolOnPlayerDeath(client);
}
/**
* Called when the round starts. Main enable event for volumetric features.
*/
VolOnRoundStart()
{
// Check if volumetric features is enabled.
if (!VolEnabled)
{
// Volumetric features disabled.
return;
}
// Start main timer.
VolStartUpdateTimer();
// Start volumes.
VolEnableVolumes();
}
/**
* Called when the round ends. Main disable event for volumetric features.
*/
VolOnRoundEnd()
{
// Stop main timer.
VolStopUpdateTimer();
// Stop volumes.
VolDisableVolumes();
}
/**
* Called right before the map ends.
*/
VolOnMapEnd()
{
// Make sure timers and volumes are stopped. Foreward event.
VolOnRoundEnd();
}
/**
* Called when a volume is disabled.
* @param volumeIndex The volume index.
*/
VolOnDisabled(volumeIndex)
{
// Check if volumetric features is enabled.
if (!VolEnabled)
{
// Volumetric features disabled.
return;
}
new VolumeFeatureTypes:voltype = Volumes[volumeIndex][Vol_Type];
// Forward stop event to features.
switch (voltype)
{
case VolFeature_Anticamp:
{
VolAnticampDisable(volumeIndex);
}
case VolFeature_ClassEdit:
{
VolClassEditOnDisabled(volumeIndex);
}
}
}
/**
* Called when a volume is enabled.
* @param volumeIndex The volume index.
*/
VolOnEnabled(volumeIndex)
{
// Check if volumetric features is enabled.
if (!VolEnabled)
{
// Volumetric features disabled.
return;
}
new VolumeFeatureTypes:voltype = Volumes[volumeIndex][Vol_Type];
// Forward enable event to features.
switch (voltype)
{
case VolFeature_Anticamp:
{
VolAnticampEnable(volumeIndex);
}
}
}