sm-zombiereloaded-3/src/zr/volfeatures/volevents.inc
richard 9906376f28 New features and fixes in volfeatures. See details.
Fixed existing volumes not removed after a map change.
Added class editor feature that can modify certain class attributes on players in a volume.
Fixed typo in class attribute name.
Fixed health regeneration timer not stopping if a player were kicked or timed out.
2009-09-27 23:45:17 +02:00

232 lines
5.4 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_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 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 stop event to features.
switch (voltype)
{
case VolFeature_Anticamp:
{
VolAnticampEnable(volumeIndex);
}
}
}