sm-zombiereloaded-3/src/zombiereloaded.sp

269 lines
5.9 KiB
SourcePawn
Raw Normal View History

2008-10-04 22:59:11 +02:00
/**
* ====================
* Zombie:Reloaded
* File: zombiereloaded.sp
* Author: Greyscale
* ====================
*/
#pragma semicolon 1
#include <sourcemod>
#include <sdktools>
#include <cstrike>
#include <hacks>
#undef REQUIRE_PLUGIN
#include <market>
#define VERSION "3.0-dev"
2008-10-04 22:59:11 +02:00
#include "zr/zombiereloaded"
#include "zr/global"
#include "zr/cvars"
#include "zr/translation"
#include "zr/offsets"
#include "zr/ambience"
#include "zr/classes"
#include "zr/models"
#include "zr/overlays"
#include "zr/playerclasses/playerclasses"
#include "zr/antistick"
#include "zr/anticamp"
#include "zr/teleport"
2008-10-04 22:59:11 +02:00
#include "zr/zombie"
#include "zr/menu"
#include "zr/sayhooks"
// Weapons
#include "zr/weapons/weapons"
// Knockback
#include "zr/knockback"
#include "zr/zadmin"
2008-10-04 22:59:11 +02:00
#include "zr/damagecontrol"
#include "zr/commands"
#include "zr/event"
public Plugin:myinfo =
{
name = "Zombie:Reloaded",
author = "Greyscale",
description = "Infection/survival style gameplay",
version = VERSION,
url = ""
};
public bool:AskPluginLoad(Handle:myself, bool:late, String:error[], err_max)
{
CreateGlobals();
return true;
}
public OnPluginStart()
{
LoadTranslations("common.phrases.txt");
LoadTranslations("zombiereloaded.phrases.txt");
// ======================================================================
ZR_PrintToServer("Plugin loading");
// ======================================================================
HookEvents();
HookChatCmds();
CreateCvars();
HookCvars();
CreateCommands();
HookCommands();
FindOffsets();
SetupGameData();
// Weapons
WeaponsInit();
2008-10-04 22:59:11 +02:00
InitDmgControl();
// ======================================================================
market = LibraryExists("market");
// ======================================================================
CreateConVar("gs_zombiereloaded_version", VERSION, "[ZR] Current version of this plugin", FCVAR_PLUGIN|FCVAR_SPONLY|FCVAR_UNLOGGED|FCVAR_DONTRECORD|FCVAR_REPLICATED|FCVAR_NOTIFY);
CreateConVar("zombie_version", VERSION, "Zombie:Reloaded Version", FCVAR_PLUGIN|FCVAR_SPONLY|FCVAR_UNLOGGED|FCVAR_DONTRECORD|FCVAR_REPLICATED|FCVAR_NOTIFY);
CreateConVar("zombie_enabled", "1", "Not synced with zr_enable", FCVAR_PLUGIN|FCVAR_SPONLY|FCVAR_UNLOGGED|FCVAR_DONTRECORD|FCVAR_REPLICATED|FCVAR_NOTIFY);
2008-10-04 22:59:11 +02:00
// ======================================================================
ZR_PrintToServer("Plugin loaded");
}
public OnLibraryRemoved(const String:name[])
{
if (StrEqual(name, "market"))
{
market = false;
}
}
public OnLibraryAdded(const String:name[])
{
if (StrEqual(name, "market"))
{
market = true;
}
}
public OnMapStart()
{
2008-10-08 16:05:34 +02:00
maxclients = GetMaxClients();
2008-10-04 22:59:11 +02:00
MapChangeCleanup();
LoadModelData();
LoadDownloadData();
new i;
new classindex = GetDefaultClassIndex();
for (i = 1; i <= MAXPLAYERS; i++)
{
pClass[i] = classindex;
}
// Forward event to modules.
WeaponsOnMapStart();
Anticamp_Startup();
}
public OnMapEnd()
{
Anticamp_Disable();
2008-10-04 22:59:11 +02:00
}
public OnConfigsExecuted()
{
decl String:mapconfig[PLATFORM_MAX_PATH];
GetCurrentMap(mapconfig, sizeof(mapconfig));
Format(mapconfig, sizeof(mapconfig), "sourcemod/zombiereloaded/%s.cfg", mapconfig);
decl String:path[PLATFORM_MAX_PATH];
Format(path, sizeof(path), "cfg/%s", mapconfig);
if (FileExists(path))
{
ServerCommand("exec %s", mapconfig);
2009-04-13 04:37:17 +02:00
if (LogFlagCheck(LOG_CORE_EVENTS))
{
LogMessage("Executed map config file: %s", mapconfig);
}
2008-10-04 22:59:11 +02:00
}
FindMapSky();
ClassLoad();
LoadClassData();
LoadAmbienceData();
2008-10-04 22:59:11 +02:00
}
public OnClientPutInServer(client)
{
pClass[client] = GetDefaultClassIndex();
2008-10-04 22:59:11 +02:00
gBlockMotherInfect[client] = false;
gKilledByWorld[client] = false;
2008-10-04 22:59:11 +02:00
bZVision[client] = !IsFakeClient(client);
new bool:zhp = GetConVarBool(gCvars[CVAR_ZHP_DEFAULT]);
dispHP[client] = zhp;
// Forward event to modules.
WeaponsClientInit(client);
ClassClientInit(client);
if (!IsFakeClient(client)) AmbienceStart(client);
2009-04-09 06:49:15 +02:00
2008-10-04 22:59:11 +02:00
ClientHookAttack(client);
FindClientDXLevel(client);
for (new x = 0; x < MAXTIMERS; x++)
{
tHandles[client][x] = INVALID_HANDLE;
}
RefreshList();
2008-10-04 22:59:11 +02:00
}
public OnClientDisconnect(client)
{
ClientUnHookAttack(client);
PlayerLeft(client);
// Forward event to modules.
WeaponsOnClientDisconnect(client);
ClassOnClientDisconnect(client);
ZTeleResetClient(client);
AmbienceStop(client);
2008-10-04 22:59:11 +02:00
for (new x = 0; x < MAXTIMERS; x++)
{
if (tHandles[client][x] != INVALID_HANDLE)
{
KillTimer(tHandles[client][x]);
2008-10-04 22:59:11 +02:00
tHandles[client][x] = INVALID_HANDLE;
}
}
RefreshList();
2008-10-04 22:59:11 +02:00
}
MapChangeCleanup()
{
tRound = INVALID_HANDLE;
tInfect = INVALID_HANDLE;
AmbienceStopAll();
AntiStickReset();
for (new client = 1; client <= maxclients; client++)
{
for (new x = 0; x < MAXTIMERS; x++)
{
if (tHandles[client][x] != INVALID_HANDLE)
{
tHandles[client][x] = INVALID_HANDLE;
}
}
}
2008-10-04 22:59:11 +02:00
}
ZREnd()
{
TerminateRound(3.0, Game_Commencing);
UnhookCvars();
UnhookEvents();
// TODO: Disable all modules! Teleport, ambience, overlays, antistick, etc.
2008-10-04 22:59:11 +02:00
new maxplayers = GetMaxClients();
for (new x = 1; x <= maxplayers; x++)
{
if (!IsClientConnected(x) || !IsClientInGame(x))
2008-10-04 22:59:11 +02:00
{
continue;
}
for (new y = 0; y < MAXTIMERS; y++)
{
if (tHandles[x][y] != INVALID_HANDLE)
{
KillTimer(tHandles[x][y]);
2008-10-04 22:59:11 +02:00
tHandles[x][y] = INVALID_HANDLE;
}
}
}
2009-04-09 06:49:15 +02:00
}